@hotglue/cli 1.0.27 → 1.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/lib/cjs/index.js +4 -4
  2. package/lib/cjs/index.js.map +1 -1
  3. package/lib/commands/config/set.js +82 -0
  4. package/lib/commands/config.js +69 -0
  5. package/lib/commands/env/deploy.js +162 -0
  6. package/lib/commands/env/download.js +169 -0
  7. package/lib/commands/env.js +32 -0
  8. package/lib/commands/etl/delete.js +171 -0
  9. package/lib/commands/etl/deploy.js +263 -0
  10. package/lib/commands/etl/download.js +205 -0
  11. package/lib/commands/etl.js +32 -0
  12. package/lib/commands/flows/list.js +104 -0
  13. package/lib/commands/flows.js +32 -0
  14. package/lib/commands/jobs/download.js +188 -0
  15. package/lib/commands/jobs/list.js +108 -0
  16. package/lib/commands/jobs.js +32 -0
  17. package/lib/commands/snapshots/deploy.js +202 -0
  18. package/lib/commands/snapshots/download.js +213 -0
  19. package/lib/commands/snapshots.js +32 -0
  20. package/lib/commands/tenants/custom-etl.js +183 -0
  21. package/lib/commands/tenants/custom-field-map.js +191 -0
  22. package/lib/commands/tenants/delete.js +150 -0
  23. package/lib/commands/tenants/list.js +97 -0
  24. package/lib/commands/tenants/updateConfig.js +188 -0
  25. package/lib/commands/tenants.js +32 -0
  26. package/lib/helpers/api.js +326 -0
  27. package/lib/helpers/baseBuilder.js +30 -0
  28. package/lib/helpers/config.js +105 -0
  29. package/lib/helpers/debug.js +19 -0
  30. package/lib/helpers/descriptions.js +137 -0
  31. package/lib/helpers/flow.js +32 -0
  32. package/lib/helpers/print.js +92 -0
  33. package/lib/helpers/utils.js +245 -0
  34. package/lib/index.js +12 -0
  35. package/lib/main.js +27 -0
  36. package/lib/mjs/index.js +2 -2
  37. package/lib/mjs/index.js.map +1 -1
  38. package/package.json +2 -2
package/lib/mjs/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import e,{readFileSync as n,statSync as t,readdirSync as o,writeFile as s,existsSync as r,createWriteStream as a}from"fs";import i,{normalize as c,resolve as l,dirname as d,basename as u,extname as f,relative as p}from"path";import y,{homedir as g}from"os";import h from"yargs";import{format as m,inspect as b}from"util";import{notStrictEqual as w,strictEqual as v}from"assert";import{fileURLToPath as $}from"url";import{mkdir as _,writeFile as k,readdir as j,readFile as O,stat as x}from"fs/promises";import{cosmiconfig as E}from"cosmiconfig";import T from"chalk";import A from"aws-sdk";import I from"debug";import S from"yaml";import F from"cli-table";import N from"ora";import K from"axios";import U from"micromatch";import"progress";import{mkdir as D}from"node:fs/promises";function B(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var M,P,L,C,R,z,V,W={};function q(){if(M)return W;M=1;const n=e,t=i,o=y;function s(e){console.log(`[dotenv][DEBUG] ${e}`)}const r=/^\s*([\w.-]+)\s*=\s*("[^"]*"|'[^']*'|[^#]*)?(\s*|\s*#.*)?$/,a=/\\n/g,c=/\r\n|\n|\r/;function l(e,n){const t=Boolean(n&&n.debug),o={};return e.toString().split(c).forEach((function(e,n){const i=e.match(r);if(null!=i){const e=i[1];let n=i[2]||"";const t=n.length-1,s='"'===n[0]&&'"'===n[t];"'"===n[0]&&"'"===n[t]||s?(n=n.substring(1,t),s&&(n=n.replace(a,"\n"))):n=n.trim(),o[e]=n}else if(t){const t=e.trim();t.length&&"#"!==t[0]&&s(`Failed to match key and value when parsing line ${n+1}: ${e}`)}})),o}return W.config=function(e){let r=t.resolve(process.cwd(),".env"),a="utf8";const i=Boolean(e&&e.debug),c=Boolean(e&&e.override);var d;e&&(null!=e.path&&(r="~"===(d=e.path)[0]?t.join(o.homedir(),d.slice(1)):d),null!=e.encoding&&(a=e.encoding));try{const e=l(n.readFileSync(r,{encoding:a}),{debug:i});return Object.keys(e).forEach((function(n){Object.prototype.hasOwnProperty.call(process.env,n)?(!0===c&&(process.env[n]=e[n]),i&&s(!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&&s(`Failed to load ${r} ${e.message}`),{error:e}}},W.parse=l,W}z||(z=1,q().config(Object.assign({},function(){if(L)return P;L=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),P=e}(),function(){if(R)return C;R=1;const e=/^dotenv_config_(encoding|path|debug|override)=(.+)$/;return C=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 G(){return process.versions.electron&&!process.defaultApp?0:1}
2
+ import e,{readFileSync as n,statSync as t,readdirSync as o,writeFile as s,existsSync as r,createWriteStream as a}from"fs";import i,{normalize as c,resolve as l,dirname as d,basename as u,extname as f,relative as p}from"path";import y,{homedir as g}from"os";import h from"yargs";import{format as m,inspect as b}from"util";import{notStrictEqual as w,strictEqual as v}from"assert";import{fileURLToPath as $}from"url";import{mkdir as _,writeFile as k,readdir as j,readFile as O,stat as x}from"fs/promises";import{cosmiconfig as E}from"cosmiconfig";import T from"chalk";import I from"aws-sdk";import A from"debug";import S from"yaml";import F from"cli-table";import N from"ora";import K from"micromatch";import U from"axios";import"progress";import{mkdir as B}from"node:fs/promises";function D(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var M,L,P,C,R,z,V,q={};function G(){if(M)return q;M=1;const n=e,t=i,o=y;function s(e){console.log(`[dotenv][DEBUG] ${e}`)}const r=/^\s*([\w.-]+)\s*=\s*("[^"]*"|'[^']*'|[^#]*)?(\s*|\s*#.*)?$/,a=/\\n/g,c=/\r\n|\n|\r/;function l(e,n){const t=Boolean(n&&n.debug),o={};return e.toString().split(c).forEach((function(e,n){const i=e.match(r);if(null!=i){const e=i[1];let n=i[2]||"";const t=n.length-1,s='"'===n[0]&&'"'===n[t];"'"===n[0]&&"'"===n[t]||s?(n=n.substring(1,t),s&&(n=n.replace(a,"\n"))):n=n.trim(),o[e]=n}else if(t){const t=e.trim();t.length&&"#"!==t[0]&&s(`Failed to match key and value when parsing line ${n+1}: ${e}`)}})),o}return q.config=function(e){let r=t.resolve(process.cwd(),".env"),a="utf8";const i=Boolean(e&&e.debug),c=Boolean(e&&e.override);var d;e&&(null!=e.path&&(r="~"===(d=e.path)[0]?t.join(o.homedir(),d.slice(1)):d),null!=e.encoding&&(a=e.encoding));try{const e=l(n.readFileSync(r,{encoding:a}),{debug:i});return Object.keys(e).forEach((function(n){Object.prototype.hasOwnProperty.call(process.env,n)?(!0===c&&(process.env[n]=e[n]),i&&s(!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&&s(`Failed to load ${r} ${e.message}`),{error:e}}},q.parse=l,q}z||(z=1,G().config(Object.assign({},function(){if(P)return L;P=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),L=e}(),function(){if(R)return C;R=1;const e=/^dotenv_config_(encoding|path|debug|override)=(.+)$/;return C=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 W(){return process.versions.electron&&!process.defaultApp?0:1}
3
3
  /**
4
4
  * @license
5
5
  * Copyright (c) 2016, Contributors
@@ -30,5 +30,5 @@ const ee=process&&process.env&&process.env.YARGS_MIN_NODE_VERSION?Number(process
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.__||H.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=J(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=Q(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=>K(e,g.arrays)?(b=Error(y("Invalid configuration: %s, opts.count excludes opts.array.",e)),!0):!!K(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&&D(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&&(K(c[1],g.arrays)?e=j(e,c[1],o,c[2]):!1!==K(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,!!K(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],K(r,g.arrays)?e=j(e,r,o):!1!==K(r,g.nargs)?e=k(e,r,o):(l=o[e+1],void 0===l||l.match(/^-/)&&!l.match(h)||K(r,g.bools)||K(r,g.counts)?/^(true|false)$/.test(l)?(O(r,l),e++):O(r,B(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(/^-/)||K(r,g.bools)||K(r,g.counts)?O(r,B(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],K(r,g.arrays)?e=j(e,r,o,d):!1!==K(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===K(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],B(i[t]))}else O(i[t],l)}r=n.slice(-1)[0],s||"-"===r||(K(r,g.arrays)?e=j(e,r,o):!1!==K(r,g.nargs)?e=k(e,r,o):(l=o[e+1],void 0===l||/^(-|--)[^-]/.test(l)&&!l.match(h)||K(r,g.bools)||K(r,g.counts)?/^(true|false)$/.test(l)?(O(r,l),e++):O(r,B(r)):(O(r,l),e++)))}else if(n.match(/^-[0-9]$/)&&n.match(h)&&K(n.slice(1),g.bools))r=n.slice(1),O(r,B(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=T("_",e);"string"!=typeof n&&"number"!=typeof n||v._.push(n)}function k(e,n,t,o){let s,r=K(n,g.nargs);if(r="number"!=typeof r||isNaN(r)?1:r,0===r)return M(o)||(b=Error(y("Argument unexpected for: %s",n))),O(n,B(n)),e;let i=M(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)||D(t[s]));s++)i++;i<r&&(b=Error(y("Not enough arguments following: %s",n)))}let c=Math.min(i,r);for(!M(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=K(n,g.nargs);if(K(n,g.bools)&&!/^(true|false)$/.test(c))r.push(!0);else if(M(c)||M(o)&&/^-/.test(c)&&!h.test(c)&&!D(c)){if(void 0!==i[n]){const e=i[n];r=Array.isArray(e)?e:[e]}}else{M(o)||r.push(E(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)||D(c));o++)e=o,r.push(E(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 J(e)})).join(".");x(e,n)}const o=E(e,n,t),r=e.split(".");if(N(v,r,o),g.aliases[e]&&g.aliases[e].forEach((function(e){const n=e.split(".");N(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("."))||N(v,t,o)})),K(e,g.normalize)&&!K(e,g.arrays)){[e].concat(g.aliases[e]||[]).forEach((function(e){Object.defineProperty($,e,{enumerable:!0,get:()=>n,set(e){n="string"==typeof e?H.normalize(e):e}})}))}}function x(e,n){g.aliases[e]&&g.aliases[e].length||(g.aliases[e]=[n],f[n]=!0),g.aliases[n]&&g.aliases[n].length||x(n,e)}function E(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)),(K(e,g.bools)||K(e,g.counts))&&"string"==typeof n&&(n="true"===n);let o=Array.isArray(n)?n.map((function(n){return T(e,n)})):T(e,n);return K(e,g.counts)&&(M(o)||"boolean"==typeof o)&&(o=Z()),K(e,g.normalize)&&K(e,g.arrays)&&(o=Array.isArray(n)?n.map((e=>H.normalize(e))):H.normalize(n)),o}function T(e,n){if(!a["parse-positional-numbers"]&&"_"===e)return n;if(!K(e,g.strings)&&!K(e,g.bools)&&!Array.isArray(n)){(Y(n)&&a["parse-numbers"]&&Number.isSafeInteger(Math.floor(parseFloat(`${n}`)))||!M(n)&&K(e,g.numbers))&&(n=Number(n))}return n}function A(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"]?A(o,s):(!F(v,s.split("."))||K(s,g.arrays)&&a["combine-arrays"])&&O(s,o)}))}function I(e,n){if(void 0===l)return;const t="string"==typeof l?l:"",o=H.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)),J(e)}));(n&&g.configs[r.join(".")]||!n)&&!F(e,r)&&O(r.join("."),o[s])}}))}function S(e,n,t,o=!1){Object.keys(t).forEach((function(s){F(e,s.split("."))||(N(e,s.split("."),t[s]),o&&(p[s]=!0),(n[s]||[]).forEach((function(n){F(e,n.split("."))||N(e,n.split("."),t[s])})))}))}function F(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 N(e,n,t){let o=e;a["dot-notation"]||(n=[n.join(".")]),n.slice(0,-1).forEach((function(e){e=X(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=X(n[n.length-1]),r=K(n.join("."),g.arrays),i=Array.isArray(t);let c=a["duplicate-arguments-array"];!c&&K(s,g.nargs)&&(c=!0,(!M(o[s])&&1===g.nargs[s]||Array.isArray(o[s])&&o[s].length===g.nargs[s])&&(o[s]=void 0)),t===Z()?o[s]=Z(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]||K(s,g.counts)||K(s,g.bools)?o[s]=t:o[s]=[o[s],t]}function K(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 U(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 D(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),!U(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&&U(t[1])}))}(e,/^-+([^=]+?)=[\s\S]*$/,m,/^-+([^=]+?)$/,/^-+([^=]+?)-$/,/^-+([^=]+?\d+)$/,/^-+([^=]+?)\W+.*$/)}(e)}function B(e){return K(e,g.bools)||K(e,g.counts)||!(`${e}`in i)?(n=function(e){let n=V.BOOLEAN;return K(e,g.strings)?n=V.STRING:K(e,g.numbers)?n=V.NUMBER:K(e,g.bools)?n=V.BOOLEAN:K(e,g.arrays)&&(n=V.ARRAY),n}(e),{[V.BOOLEAN]:!0,[V.STRING]:"",[V.NUMBER]:void 0,[V.ARRAY]:[]}[n]):i[e];var n}function M(e){return void 0===e}return I(v,!0),I(v,!1),function(e){const n=Object.create(null);S(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=H.resolve(H.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=H.require(n);A(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){A(e)})),S(v,g.aliases,i,!0),function(e){let n;const t=new Set;Object.keys(e).forEach((function(o){if(!t.has(o)&&(n=K(o,g.coercions),"function"==typeof n))try{const s=T(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){F(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=>J(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:()=>ne,format:m,normalize:c,resolve:l,require:e=>{if("undefined"!=typeof require)return require(e);if(e.match(/\.json$/))return JSON.parse(n(e,"utf8"));throw Error("only .json config files are supported in ESM")}}),oe=function(e,n){return te.parse(e.slice(),n).argv};oe.detailed=function(e,n){return te.parse(e.slice(),n)},oe.camelCase=J,oe.decamelize=Q,oe.looksLikeNumber=Y;new RegExp("(?:\\[(?:\\d+[ABCDEFGJKSTm]|\\d+;\\d+[Hfm]|\\d+;\\d+;\\d+m|6n|s|u|\\?25[lh])|\\w)","g");var se={fs:{readFileSync:n,writeFile:s},format:m,resolve:l,exists:e=>{try{return t(e).isFile()}catch(e){return!1}}};let re;class ae{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(),re.format.apply(re.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),re.format.apply(re.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);re.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{re.fs.readFileSync&&(e=JSON.parse(re.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=re.resolve(e,"./",n+".json");if(this.fallbackToLanguage&&!this._fileExistsSync(t)&&~n.lastIndexOf("_")){const o=re.resolve(e,"./",n.split("_")[0]+".json");this._fileExistsSync(o)&&(t=o)}return t}_fileExistsSync(e){return re.exists(e)}}let ie;try{ie=$(import.meta.url)}catch(e){ie=process.cwd()}ie.split("node_modules")[0]||process.cwd(),process.cwd,process.exit,process.nextTick,void 0!==process.stdout.columns&&process.stdout.columns,function(e,n){re=n;const t=new ae(e);t.__.bind(t),t.__n.bind(t),t.setLocale.bind(t),t.getLocale.bind(t),t.updateLocale.bind(t),t.locale}({directory:l(ie,"../../../locales"),updateFiles:!1},se);const ce={hg:{appName:"hotglue",clientApiBaseUri:process.env.HOTGLUE_CLIENT_API_BASE_URI||"https://client-api.hotglue.xyz",defaultConfigFileName:"config.yaml"}},le={},de=()=>i.resolve(g(),`.${ce.hg.appName}`,ce.hg.defaultConfigFileName),ue=async()=>{const{appName:e}=ce.hg;try{return await E(e).load(de())||{}}catch(e){return{}}},fe=async()=>{const{appName:e}=ce.hg,n=E(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}`)}},pe={primary:e=>T.whiteBright(e),secondary:e=>T.white(e),info:e=>T.green(e),warn:e=>T.yellow(e),error:e=>T.redBright(e),success:e=>T.greenBright(e)};let ye=pe,ge="primary";function he(e){return ye={...pe,...e},_e}function me(e){process.stdout.write(e)}const be=(e,n=ge)=>{if(!e)return"";if("string"==typeof e)return ye[n]?ye[n](e):ye[ge](e);const t=b(e,{colors:!0});return ye[n]?ye[n](t):t};function we(...e){return console.log(...e),_e}function ve(e,n){return me(be(e,n)),me("\n"),_e}function $e(e,n){return me(be(e,n)),_e}const _e={cl:we,pr:ve,pp:$e,setTheme:he,setDefault:function(e="primary"){return ye[e]&&(ge=e),_e}},ke=e=>{console.log(JSON.stringify(e))},je=I("hotglue-cli");function Oe(e){return je.extend(e)}const xe=Oe("commands:config:set"),Ee="set <setting> <value>";var Te=Object.freeze({__proto__:null,builder:async e=>(xe("builder",Ee,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:Ee,desc:"Set configuration key-value pairs",handler:async e=>{xe("handler",Ee,e);const{json:n,setting:t,value:o}=e;if(["apikey"].includes(t))try{const e=await ue();e&&e.config?!n&&$e("Updating profile config file..."):!n&&$e("Creating profile config file...");const s=e&&e.config?{...e.config,[t]:o}:{[t]:o},r=S.stringify(s),a=e&&e.filepath?e.filepath:de();await(async(e,n)=>{await _(i.dirname(e),{recursive:!0}),await k(e,n)})(a,r),n?ke({status:"success"}):$e("Done").pr()}catch(e){n?ke({status:"error",error:e}):console.log(e)}else n?ke({status:"error",error:"Invalid settings parameter"}):console.error("Invalid settings parameter")}});const Ae=[Te],Ie=Oe("commands:config"),Se="config [action]";var Fe=Object.freeze({__proto__:null,builder:async function(e){return Ie("builder",Se),e.command(Ae)},command:Se,desc:"Configure your hotglue CLI",handler:async function(e){Ie("handler",Se,e);const{action:n}=e;if(!n)try{const e=await ue();e.config&&0!==Object.keys(e.config).length||ve("No profile configuration found. Run config set to configure the hotglue CLI.");const n=new F({head:["Setting","Value","Config File","Type"]});e.config&&Object.entries(e.config).forEach((([t,o])=>n.push([t,o,e.filepath,"Profile"])));const t=await fe();t.config&&Object.entries(t.config).forEach((([e,o])=>n.push([e,o,i.relative(process.cwd(),t.filepath),"Project"]))),n.length>0&&console.log(n.toString())}catch(e){throw console.log(e),e}}}),Ne={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 Ke=Oe("base"),Ue=async e=>{Ke("builder");const n=await(async()=>{const e=await ue(),n=await fe();return{...le,...e.config,...n.config}})();return e.option("apikey",Ne.apikey.config).option("env",Ne.env.config).option("json",Ne.json.config).config(n).demandOption(["env"],Ne.env.demandText).demandOption(["apikey"],Ne.apikey.demandText)},De=Oe("utils.js"),Be=async(e,n,t=[])=>{const{includeSymLinks:o,recursive:s,filter:r}=n,{matcher:a}=r,c=i.resolve(e),l=await j(c,{withFileTypes:!0});for(const e of l){const r=i.resolve(c,e.name);e.isSymbolicLink()&&!o||(!a||a(r)?e.isFile()?t.push(i.resolve(c,e.name)):e.isDirectory()&&s&&await Be(i.resolve(c,e.name),n,t):De("skip",r))}return t},Me=async(e,n)=>{const t={includeSymLinks:!1,recursive:!1,filter:{},...n},{pattern:o}=t.filter;return o&&(t.filter.matcher=U.matcher(o)),Be(e,t)},Pe=(e,n)=>{De("filter-in",e);const{pattern:t}={...n};let o=e;return t&&(o=U(o,t)),De("filter-out",o),o};const Le=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"))))}))},Ce=(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},Re=async({debug:e,baseUri:n,env:t,apiKey:o})=>{const s=new URL(`${n}/${t}/resetAvailableEntities`),{data:r}=await K.delete(s,{headers:{"x-api-key":o,"Content-type":"application/json"}});e({data:r})},ze=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 K.get(i,{headers:{"x-api-key":s}}),{accessKeyId:l,secretAccessKey:d,sessionToken:u}=c;return{accessKeyId:l,secretAccessKey:d,sessionToken:u}},Ve=async({debug:e,baseUri:n,env:t,apikey:o})=>{const s=`${n}/tenants/${t}`;e("requesting:",s);const{data:r}=await K.get(s,{headers:{"x-api-key":o}});return e("response-data",r),r},We=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 K.get(a,{headers:r});return i},qe=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 K.get(l,{headers:c});return d},Ge=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 K.get(l,{headers:c});return d},Je=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 K.get(a,{headers:r});return i},Qe=Oe("commands:env:deploy"),Ye="deploy";var He=Object.freeze({__proto__:null,builder:async e=>(Qe("builder",Ye),e.option("sourceFolder",Ne.sourceFolder.config).demandOption("sourceFolder",Ne.sourceFolder.demandText)),command:Ye,desc:"Deploy Environment settings",handler:async e=>{Qe("handler",Ye,e);const{hg:n,json:t,apikey:o,env:s,sourceFolder:r}=e,{clientApiBaseUri:a}=n,c=i.resolve(process.cwd(),r);let l,d=N();try{l=be(`Scanning ${be(c,"info")} for deployable files`),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const e=await Me(c,{filter:{pattern:"((**/requirements.txt)|(**/availableSources.json)|(**/availableTargets.json)|(**/availableConnectors.json))"}});if(0===e.length)return void(t?ke({status:"error",error:"There are no files to deploy at the specified location!"}):(d.fail(be(`Error: ${l}.`,"secondary")),ve(be(`Message: ${be("There are no files to deploy at the specified location!")}`,"secondary"))));!t&&d.succeed(be(`Finished: ${l}.`,"secondary")),l=be("Verifying user and authorizing"),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const{accessKeyId:n,secretAccessKey:r,sessionToken:u}=await ze({debug:Qe,baseUri:a,task:"env-deploy",env:s,apikey:o});!t&&d.succeed(be(`Finished: ${l}.`,"secondary"));const f=new A.S3({accessKeyId:n,secretAccessKey:r,sessionToken:u});l=be("Deploying environment files"),!t&&d.info(be(`Info: ${l}.`,"secondary"));const p="config/",y=new F({head:["File","Status"]});for await(const n of e){const e=i.basename(n);l=be(`Pushing file: ${be(e,"info")}`),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const r={Bucket:s,Key:`${p}${e}`,Body:await O(n)},c=await f.putObject(r).promise();!t&&d.succeed(be(`Finished: ${l}.`,"secondary")),Qe("s3-put-res",c),y.push([e,"Deployed"]),await Re({debug:Qe,baseUri:a,env:s,apiKey:o})}t?ke({status:"success",deployedFiles:e}):we(y.toString())}catch(e){!t&&d.fail(be(`Error: ${l}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),Qe(e),e&&e.response&&e.response.data&&Qe("response",e.response.data)}}});const Ze=Oe("commands:env:download"),Xe="download";var en=Object.freeze({__proto__:null,builder:async e=>(Ze("builder",Xe),e.option("downloadTo",Ne.downloadTo.config)),command:Xe,desc:"Download Environment settings",handler:async e=>{Ze("handler",Xe,e);const{hg:n,json:t,apikey:o,env:s,downloadTo:r}=e,{clientApiBaseUri:a}=n,c=i.resolve(process.cwd(),r);let l,d=N();try{l=be("Verifying user and authorizing"),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:r}=await ze({debug:Ze,baseUri:a,task:"env-download",env:s,apikey:o});!t&&d.succeed(be(`Finished: ${l}.`,"secondary"));const u=new A.S3({accessKeyId:e,secretAccessKey:n,sessionToken:r});l=be(`Scanning environment ${be(s,"info")}`),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const f={Bucket:s,Prefix:"config/"},{Contents:p}=await u.listObjectsV2(f).promise();!t&&d.succeed(be(`Finished: ${l}.`,"secondary")),Ze("s3-files",p);const y=p?Pe(p.map((e=>e.Key)),{pattern:"((*/requirements.txt)|(*/availableSources.json)|(*/availableTargets.json)|(*/availableConnectors.json))"}):[];if(!y||0===y.length)return void(t?ke({status:"success",downloadedFiles:[]}):d.warn(be(`Warning: ${be("Nothing to download!")}`,"secondary")));l=be(`Downloading to ${be(c,"info")}`),!t&&d.info(be(`Info: ${l}.`,"secondary"));const g=new F({head:["File","Status"]});for await(const e of y){const n=i.basename(e),o=i.resolve(c,n);Ze("local-file",o),await _(i.dirname(o),{recursive:!0}),l=be(`Downloading file: ${be(n,"info")}`),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const r=u.getObject({Bucket:s,Key:e}).createReadStream();await k(o,await Le(r)),!t&&d.succeed(be(`Finished: ${l}.`,"secondary")),g.push([n,"Downloaded"])}t?ke({status:"success",downloadedFiles:y}):we(g.toString())}catch(e){t?ke({status:"error",error:e}):(d.fail(be(`Error: ${l}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),Ze(e),e&&e.response&&e.response.data&&Ze("response",e.response.data))}}});const nn=[He,en],tn=Oe("commands:env"),on="env <action>";var sn=Object.freeze({__proto__:null,builder:async function(e){tn("builder",on);return(await Ue(e)).command(nn)},command:on,desc:"Manage environment settings",handler:async function(e){tn("handler",on,e)}});const rn=async(e,n,t,o)=>{try{const s=e.getObject({Bucket:n,Key:`${t}/flows/${o}/flow.json`}).createReadStream(),r=await Le(s);return 2===JSON.parse(r).version}catch(e){return!1}},an=async(e,n,t,o,s=void 0)=>s??await rn(e,n,t,o)?"connectors":"taps",cn=Oe("commands:etl:delete"),ln="delete";var dn=Object.freeze({__proto__:null,builder:async e=>(cn("builder",ln),e.option("flow",Ne.flow.config).demandOption("flow",Ne.flow.demandText).option("tap",Ne.tap.config).demandOption("tap",Ne.tap.demandText).option("tenant",{...Ne.tenant.config}).demandOption("tenant",Ne.tenant.demandText)),command:ln,desc:"Delete ETL scripts",handler:async e=>{cn("handler",ln,e);const{hg:n,json:t,apikey:o,env:s,flow:r,tap:a,tenant:i}=e,{clientApiBaseUri:c}=n;let l,d=N();try{l=be(`Deleting ETL scripts for Tenant ${be(i,"info")} Flow ${be(r,"info")} and Tap ${be(a,"info")} to ${be(s,"info")}`),!t&&d.info(be(`Info: ${l}.`,"secondary")),l=be("Verifying user and authorizing"),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:u}=await ze({debug:cn,baseUri:c,task:"etl-deploy",env:s,tenant:i,flow:r,tap:a,apikey:o}),f=new A.S3({accessKeyId:e,secretAccessKey:n,sessionToken:u});!t&&d.succeed(be(`Finished: ${l}.`,"secondary")),l=be("Deleting ETL scripts"),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const p=`${i}/flows/${r}/${await an(f,s,i,r)}/${a}/etl/`,y=await f.listObjectsV2({Bucket:s,Prefix:p}).promise();if(cn("s3-list-objects-res",y),y.Contents?.length>0){const e=await f.deleteObjects({Bucket:s,Delete:{Objects:y.Contents.map((e=>({Key:e.Key})))}}).promise();cn("s3-list-objects-res",e)}const g=await f.deleteObject({Bucket:s,Key:p}).promise();if(cn("s3-delete-object-res",g),!t&&d.succeed(be(`Finished: ${l}.`,"secondary")),y.Contents?.length>0){const e=new F({head:["File","Status"]});y.Contents.filter((({Key:e})=>e!==p)).forEach((({Key:n})=>{const t=n.split("/"),o=t[t.length-1];e.push([o,be("Deleted","info")])})),t?ke({status:"success",deletedObjects:(y.Contents??[]).map((({Key:e})=>e))}):we(e.toString())}else l=be("There was no file or folder to be deleted"),t?ke({status:"success",deletedObjects:[]}):d.info(be(`Info: ${l}.`,"secondary"))}catch(e){t?ke({status:"error",error:e}):(d.fail(be(`Error: ${l}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),cn(e),e&&e.response&&e.response.data&&cn("response",e.response.data))}}});const un=Oe("commands:etl:deploy"),fn="deploy";var pn=Object.freeze({__proto__:null,builder:async e=>(un("builder",fn),e.option("flow",Ne.flow.config).demandOption("flow",Ne.flow.demandText).option("tap",Ne.tap.config).option("all",Ne.all.config).option("tenant",{...Ne.tenant.config,default:"default"}).option("sourceFolder",Ne.sourceFolder.config).demandOption("sourceFolder",Ne.sourceFolder.demandText)),command:fn,desc:"Deploy ETL scripts",handler:async e=>{un("handler",fn,e);const{hg:n,json:t,apikey:o,env:s,flow:r,tap:a,all:c,tenant:l,sourceFolder:d}=e,{clientApiBaseUri:u}=n;if(!c&&!a)throw new Error(`${Ne.tap.demandText} Or you can pass the --all flag to run this command for all taps/connectors.`);let f,p=N();const y=i.resolve(process.cwd(),d);try{f=be(`Deploying script for Tenant ${be(l,"info")} Flow ${be(r,"info")}${a?` and Tap ${be(a,"info")}`:""} to ${be(s,"info")}`),!t&&p.info(be(`Info: ${f}.`,"secondary"));const e=await Me(y,{recursive:!0,filter:{pattern:"!((**/sync-output)|(**/etl-output)|(**/snapshots))"}});if(0===e.length)return void(t?ke({status:"error",error:"There are no files to deploy at the specified location!"}):p.fail(be(`Error: ${be("There are no files to deploy at the specified location!")}.`,"secondary")));f=be("Verifying user and authorizing"),!t&&p.start(be(`In progress: ${f}...`,"secondary"));const n={debug:un,baseUri:u,task:"etl-deploy",env:s,tenant:l,flow:r,apikey:o};a&&(n.tap=a);const{accessKeyId:c,secretAccessKey:g,sessionToken:h}=await ze(n);!t&&p.succeed(be(`Finished: ${f}.`,"secondary"));const m=new A.S3({accessKeyId:c,secretAccessKey:g,sessionToken:h}),b=await rn(m,s,l,r);f=be("Validating flow and tap location"),!t&&p.start(be(`In progress: ${f}...`,"secondary"));const w=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 K.get(r,{headers:s});return a})({debug:un,baseUri:u,apikey:o,env:s}),v=w.find((({id:e})=>e===r));let $=[];try{if("default"===l||v?.type){const e=b?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 K.get(a,{headers:r});return i})({debug:un,baseUri:u,env:s,flow:r,apikey:o}):await We({debug:un,baseUri:u,env:s,flow:r,apikey:o});if($=(e??[]).filter((e=>!a||e[b?"id":"tap"]===a)),a&&0===$.length)throw new Error("Tap is not supported")}else{if($=((b?await Ge({debug:un,baseUri:u,env:s,flow:r,tenant:l,apikey:o}):await qe({debug:un,baseUri:u,env:s,flow:r,tenant:l,apikey:o}))??[]).filter((e=>!a||e[b?"id":"tap"]===a)),a&&0===$.length)throw new Error("Tap is not linked")}}catch(e){throw un("err",e),new Error("Target location doesn't exist. Check your tenant, flow and tap arguments.")}!t&&p.succeed(be(`Finished: ${f}.`,"secondary"));const _=new F({head:["File","Status"]});for(const n of $){const o=n[b?"id":"tap"];f=be(`Preparing ${o} deployment target`),!t&&p.start(be(`In progress: ${f}...`,"secondary"));const a=`${l}/flows/${r}/${await an(null,null,null,null,b)}/${o}/etl/`,{Contents:c}=await m.listObjectsV2({Bucket:s,Prefix:`${a}`}).promise();!t&&p.succeed(be(`Finished: ${f}.`,"secondary")),un("contents",c);const u=c.map((e=>({Key:e.Key})));if(u.length>0){f=be(`Removing old ${o} ETL files`),!t&&p.start(be(`In progress: ${f}...`,"secondary"));const e={Bucket:s,Delete:{Objects:u,Quiet:!0}};await m.deleteObjects(e).promise(),u.forEach((({Key:e})=>_.push([`${o}/${e.substring(a.length)}`,be("Deleted","warn")]))),!t&&p.succeed(be(`Finished: ${f}.`,"secondary"))}for await(const n of e){const e="win32"===process.platform?i.relative(d,n).replace(/\\/g,"/"):i.relative(d,n),r=`${a}${e}`;f=be(`Deploying file: ${be(`${o}/${e}`,"info")}`),!t&&p.start(be(`In progress: ${f}...`,"secondary"));const c={Bucket:s,Key:r,Body:await O(n)},l=await m.putObject(c).promise();!t&&p.succeed(be(`Finished: ${f}.`,"secondary")),un("s3-put-res",l),_.push([`${o}/${e}`,be("Deployed","info")])}}t?ke({status:"success",deployedFiles:e}):we(_.toString())}catch(e){t?ke({status:"error",error:e}):(p.fail(be(`Error: ${f}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),un(e),e&&e.response&&e.response.data&&un("response",e.response.data))}}});const yn=Oe("commands:etl:download"),gn="download";var hn=Object.freeze({__proto__:null,builder:async e=>(yn("builder",gn),e.option("flow",Ne.flow.config).demandOption("flow",Ne.flow.demandText).option("tap",Ne.tap.config).demandOption("tap",Ne.tap.demandText).option("downloadTo",Ne.downloadTo.config).demandOption("downloadTo",Ne.downloadTo.demandText).option("tenant",{...Ne.tenant.config,default:"default"}).option("overwrite",Ne.overwrite.config).demandOption("overwrite",Ne.overwrite.demandText)),command:gn,desc:"Download ETL scripts",handler:async e=>{yn("handler",gn,e);const{hg:n,json:t,apikey:o,env:s,flow:a,tap:c,tenant:l,downloadTo:d,overwrite:u}=e,{clientApiBaseUri:f}=n;let p,y=N();const g=i.resolve(process.cwd(),d);try{p=be("Verifying user and authorizing"),!t&&y.start(be(`In progress: ${p}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:d}=await ze({debug:yn,baseUri:f,task:"etl-download",env:s,tenant:l,flow:a,tap:c,apikey:o}),h=new A.S3({accessKeyId:e,secretAccessKey:n,sessionToken:d});!t&&y.succeed(be(`Finished: ${p}.`,"secondary")),p=be("Scanning for downloadable files"),!t&&y.start(be(`In progress: ${p}...`,"secondary"));const m=`${l}/flows/${a}/${await an(h,s,l,a)}/${c}/etl/`,b={Bucket:s,Prefix:m},{Contents:w}=await h.listObjectsV2(b).promise();!t&&y.succeed(be(`Finished: ${p}.`,"secondary")),yn("s3-list-res",w);const v=w?Pe(w.map((e=>e.Key)),{pattern:"!(.ipynb_checkpoints/*)"}):[];if(!v||0===v.length)return void(t?ke({status:"success",downloadedFiles:[]}):y.warn(be(`Warning: ${be("Nothing to download!")}`,"secondary")));p=be(`Downloading script files to ${be(g,"info")}`),!t&&y.info(be(`Info: ${p}.`,"secondary"));const $=new F({head:["File","Status"]});for await(const e of v){const n=e.substring(m.length),o=i.resolve(g,n);if(yn("file",o),e.endsWith("/")){!r(o)&&await _(o,{recursive:!0});continue}if(!u)try{await x(o),yn("exists, skipping"),$.push([n,"Skipped"]);continue}catch(e){"ENOENT"!==e.code&&we(e)}p=be(`Downloading file: ${be(n,"info")}`),!t&&y.start(be(`In progress: ${p}...`,"secondary")),await _(i.dirname(o),{recursive:!0});const a=h.getObject({Bucket:s,Key:e}).createReadStream();await k(o,await Le(a)),!t&&y.succeed(be(`Finished: ${p}.`,"secondary")),$.push([n,"Downloaded"])}t?ke({status:"success",downloadedFiles:v}):we($.toString())}catch(e){t?ke({status:"error",error:e}):(y.fail(be(`Error: ${p}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),yn(e),e&&e.response&&e.response.data&&yn("response",e.response.data))}}});const mn=[dn,pn,hn],bn=Oe("commands:etl"),wn="etl <action>";var vn=Object.freeze({__proto__:null,builder:async function(e){bn("builder",wn);return(await Ue(e)).command(mn)},command:wn,desc:"Manage ETL scripts",handler:async function(e){bn("handler",wn,e)}});const $n=Oe("commands:flows:list"),_n="list";var kn=Object.freeze({__proto__:null,builder:async e=>($n("builder",_n),e.option("tenant",{...Ne.tenant.config})),command:_n,desc:"List flows",handler:async e=>{$n("handler",_n,e);const{hg:n,json:t,apikey:o,env:s,tenant:r}=e,{clientApiBaseUri:a}=n;let i,c=N();try{i=be(`Retrieving ${r?`${be(r,"info")} tenant's`:"the"} flows for environment: ${be(s,"info")}`);const e=`${a}/${s}/flows/${r?`linked?user_id=${r}`:"supported"}`;$n("requesting:",e),!t&&c.start(be(`In progress: ${i}...`,"secondary"));const{data:n}=await K.get(e,{headers:{"x-api-key":o}});if(!t&&c.succeed(be(`Finished: ${i}.`,"secondary")),$n("response-data",n),!n||0===n.length)return void(t?ke([]):c.warn(be(`Warning: ${be("No flows for specified environment and tenant")}.`,"secondary")));if(t)ke(n);else{const e=new F({head:["ID","Name","isPush","Taps","Targets"]});n.forEach((n=>e.push([n.id,n.name||"",n.type||!1,n.taps?b(n.taps):"",n.targets?b(n.targets):"none"]))),console.log(e.toString())}}catch(e){t?ke({status:"error",error:e}):(c.fail(be(`Error: ${i}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),$n(e),e&&e.response&&e.response.data&&$n("response",e.response.data))}}});const jn=[kn],On=Oe("commands:flows"),xn="flows <action>";var En,Tn=Object.freeze({__proto__:null,builder:async function(e){On("builder",xn);return(await Ue(e)).command(jn)},command:xn,desc:"Manage flows",handler:async function(e){On("handler",xn,e)}}),An={exports:{}},In={exports:{}},Sn={exports:{}},Fn={exports:{}};var Nn,Kn={exports:{}},Un={exports:{}};var Dn,Bn,Mn={exports:{}};function Pn(){return Bn||(Bn=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 Nn||(Nn=1,e=Un,n=Un.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),Un.exports;var e,n}(),o=a(t),s=function(){return Dn||(Dn=1,e=Mn,n=Mn.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){return e[Symbol.iterator]&&e[Symbol.iterator]()},e.exports=n.default),Mn.exports;var e,n}(),r=a(s);function a(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default}(Kn,Kn.exports)),Kn.exports}var Ln,Cn={exports:{}};var Rn,zn={},Vn={exports:{}},Wn={exports:{}};var qn,Gn,Jn,Qn={};function Yn(){return Gn||(Gn=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 Rn||(Rn=1,e=Wn,n=Wn.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),Wn.exports;var e,n}(),o=i(t),s=function(){if(qn)return Qn;qn=1,Object.defineProperty(Qn,"__esModule",{value:!0}),Qn.fallback=s,Qn.wrap=r;var e,n=Qn.hasQueueMicrotask="function"==typeof queueMicrotask&&queueMicrotask,t=Qn.hasSetImmediate="function"==typeof setImmediate&&setImmediate,o=Qn.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,Qn.default=r(e),Qn}(),r=i(s),a=Hn();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}(Vn,Vn.exports)),Vn.exports}function Hn(){if(Jn)return zn;Jn=1,Object.defineProperty(zn,"__esModule",{value:!0}),zn.isAsyncIterable=zn.isAsyncGenerator=zn.isAsync=void 0;var e,n=Yn(),t=(e=n)&&e.__esModule?e:{default:e};function o(e){return"AsyncFunction"===e[Symbol.toStringTag]}return zn.default=function(e){if("function"!=typeof e)throw new Error("expected a function");return o(e)?(0,t.default)(e):e},zn.isAsync=o,zn.isAsyncGenerator=function(e){return"AsyncGenerator"===e[Symbol.toStringTag]},zn.isAsyncIterable=function(e){return"function"==typeof e[Symbol.asyncIterator]},zn}var Zn,Xn,et,nt={exports:{}},tt={exports:{}};function ot(){return Zn||(Zn=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});n.default={},e.exports=n.default}(tt,tt.exports)),tt.exports}function st(){return et||(et=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});var t=function(){return En||(En=1,e=Fn,n=Fn.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),Fn.exports;var e,n}(),o=u(t),s=u(Pn()),r=function(){return Ln||(Ln=1,e=Cn,n=Cn.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),Cn.exports;var e,n}(),a=u(r),i=Hn(),c=(Xn||(Xn=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=ot())&&t.__esModule?t:{default:t};e.exports=n.default}(nt,nt.exports)),nt.exports),l=u(c),d=u(ot());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}(Sn,Sn.exports)),Sn.exports}var rt,at={exports:{}};var it,ct,lt,dt={exports:{}};function ut(){return it||(it=1,e=dt,n=dt.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),dt.exports;var e,n}function ft(){return ct||(ct=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});var t=i(st()),o=function(){return rt||(rt=1,e=at,n=at.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){return(n,t,o)=>e(n,o)},e.exports=n.default),at.exports;var e,n}(),s=i(o),r=i(Hn()),a=i(ut());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}(In,In.exports)),In.exports}var pt=(lt||(lt=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});var t=s(ft()),o=s(ut());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}(An,An.exports)),An.exports),yt=B(pt);const gt=Oe("commands:jobs:download"),ht="download <jobroot>";var mt=Object.freeze({__proto__:null,builder:async e=>(gt("builder",ht),e.option("downloadTo",Ne.downloadTo.config)),command:ht,desc:"Download Job files",handler:async e=>{gt("handler",ht,e);const{hg:n,json:t,apikey:o,env:s,jobroot:r,downloadTo:c}=e,{clientApiBaseUri:l}=n;let d,u=N();try{d=be("Verifying user and authorizing"),!t&&u.start(be(`In progress: ${d}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:f}=await ze({debug:gt,baseUri:l,task:"job-download",env:s,apikey:o,jobroot:r}),p=new A.S3({accessKeyId:e,secretAccessKey:n,sessionToken:f});!t&&u.succeed(be(`Finished: ${d}.`,"secondary")),d=be("Scanning for downloadable files"),!t&&u.start(be(`In progress: ${d}...`,"secondary"));const y={Bucket:s,Prefix:r},{Contents:g}=await p.listObjectsV2(y).promise();if(gt("res",g),!g||0===g.length)return void(t?ke({status:"error",error:"Nothing to download!"}):(u.fail(be(`Error: ${d}.`,"secondary")),ve(be(`Message: ${be("Nothing to download!")}`,"secondary"))));if(!t&&u.succeed(be(`Finished: ${d}.`,"secondary")),!t){const e=new F({head:["File","Size","LastModified"]});g.forEach((n=>{const t=n.Key.substring(r.length+1);e.push([t,n.Size,n.LastModified.toLocaleString("en-US")])})),console.log(e.toString())}const h=i.resolve(process.cwd(),c,i.basename(r));await yt(g.filter((({Key:e})=>!new RegExp(`${r}/([^/]+)-config.json`).test(e))),(async e=>{d=be(`Downloading file: ${be(e.Key,"info")}`),!t&&u.start(be(`In progress: ${d}...`,"secondary"));const n=i.resolve(h,e.Key.substring(r.length+1));gt("file",n),await D(i.dirname(n),{recursive:!0});const o=p.getObject({Bucket:s,Key:e.Key}).createReadStream(),c=a(n,{flags:"w"});o.pipe(c),!t&&u.succeed(be(`Finished: ${d}.`,"secondary"))})),t?ke({status:"success",downloadedFiles:g.map((({Key:e})=>e))}):(d=be("Downloading job files."),u.succeed(be(`Finished: ${d}`,"secondary")))}catch(e){t?ke({status:"error",error:e}):(u.fail(be(`Error: ${d}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),gt(e),e&&e.response&&e.response.data&&gt("response",e.response.data))}}});const bt=(...e)=>{Oe("commands:jobs:list")(...e)},wt="list";var vt=Object.freeze({__proto__:null,builder:async e=>(bt("builder",wt),e.option("flow",Ne.flow.config).demandOption("flow",Ne.flow.demandText).option("tenant",{...Ne.tenant.config,default:"default"}).option("count",Ne.count.config)),command:wt,desc:"List jobs",handler:async e=>{bt("handler",wt,e);const{hg:n,json:t,apikey:o,env:s,flow:r,tenant:a,count:i}=e,{clientApiBaseUri:c}=n;let l,d=N();try{l=be(`Retrieving jobs for environment: ${be(s,"info")} flow: ${be(r,"info")} tenant: ${be(a,"info")}...`);const e=`${c}/${s}/${r}/${a}/jobs${i?`?count=${i}`:""}`;bt("requesting:",e),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const{data:n}=await K.get(e,{headers:{"x-api-key":o}});if(!t&&d.succeed(be(`Finished: ${l}.`,"secondary")),bt("response-data",n),!n||0===n.length)return void(t?ke([]):d.warn(be(`Warning: ${be("No jobs for the specified environment, flow and tenant")}.`,"secondary")));if(t)ke(n);else{const e=new F({head:["name","details"]});n.forEach((n=>e.push([n.job_name,JSON.stringify(n,void 0,2)]))),console.log(e.toString())}}catch(e){t?ke({status:"error",error:e}):(d.fail(be(`Error: ${l}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),bt(e),e&&e.response&&e.response.data&&bt("response",e.response.data))}}});const $t=[mt,vt],_t=Oe("commands:jobs"),kt="jobs <action>";var jt=Object.freeze({__proto__:null,builder:async function(e){_t("builder",kt);return(await Ue(e)).command($t)},command:kt,desc:"Manage ETL jobs",handler:async function(e){_t("handler",kt,e)}});const Ot=Oe("commands:snapshots:deploy"),xt="deploy";var Et=Object.freeze({__proto__:null,builder:async e=>(Ot("builder",xt),e.option("tenant",{...Ne.tenant.config,default:"default"}).option("sourceFolder",Ne.sourceFolder.config).demandOption("sourceFolder",Ne.sourceFolder.demandText)),command:xt,desc:"Deploy Snapshots",handler:async e=>{Ot("handler",xt,e);const{hg:n,json:t,apikey:o,env:s,tenant:r,sourceFolder:a}=e,{clientApiBaseUri:c}=n;let l,d=N();const u=i.resolve(process.cwd(),a);try{l=be(`Deploying Snapshots for Tenant ${be(r,"info")} to ${be(s,"info")}`),!t&&d.info(be(`Info: ${l}.`,"secondary"));const e=await Me(u,{recursive:!0});if(0===e.length)return void(t?ke({status:"error",error:"There are no files to deploy at the specified location!"}):d.fail(be(`Error: ${be("There are no files to deploy at the specified location!")}.`,"secondary")));l=be("Verifying user and authorizing");const{accessKeyId:n,secretAccessKey:f,sessionToken:p}=await ze({debug:Ot,baseUri:c,task:"snapshot-deploy",env:s,tenant:r,apikey:o});!t&&d.succeed(be(`Finished: ${l}.`,"secondary"));const y=new A.S3({accessKeyId:n,secretAccessKey:f,sessionToken:p});l=be("Validating tenant exists"),!t&&d.start(be(`In progress: ${l}...`,"secondary"));try{const{CommonPrefixes:e}=await y.listObjectsV2({Bucket:s,Prefix:`${r}/`,Delimiter:"/"}).promise();if(0===e.length)throw new Error("Invalid tenant")}catch(e){throw Ot("err",e),new Error("Tenant doesn't exist. Please check your tenant (-u) argument.")}!t&&d.succeed(be(`Finished: ${l}.`,"secondary"));const g=`${r}/snapshots/`,h=new F({head:["File","Status"]});l=be("Preparing deployment target"),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const{Contents:m}=await y.listObjectsV2({Bucket:s,Prefix:`${g}`}).promise();!t&&d.stop(),Ot("contents",m),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const b=m.map((e=>({Key:e.Key})));if(b.length>0){const e={Bucket:s,Delete:{Objects:b,Quiet:!0}};await y.deleteObjects(e).promise(),b.forEach((({Key:e})=>h.push([e.substring(g.length),be("Deleted","warn")])))}!t&&d.succeed(be(`Finished: ${l}.`,"secondary"));for await(const n of e){const e=i.relative(a,n),o=`${g}${e}`;l=be(`Deploying file: ${be(e,"info")}`),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const r={Bucket:s,Key:o,Body:await O(n)},c=await y.putObject(r).promise();!t&&d.succeed(be(`Finished: ${l}.`,"secondary")),Ot("s3-put-res",c),h.push([e,be("Deployed","info")])}t?ke({status:"success",deployedFiles:e}):we(h.toString())}catch(e){t?ke({status:"error",error:e}):(d.fail(be(`Error: ${l}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),Ot(e),e&&e.response&&e.response.data&&Ot("response",e.response.data))}}});const Tt=Oe("commands:snapshots:download"),At="download";var It=Object.freeze({__proto__:null,builder:async e=>(Tt("builder",At),e.option("downloadTo",Ne.downloadTo.config).demandOption("downloadTo",Ne.downloadTo.demandText).option("tenant",{...Ne.tenant.config,default:"default"}).option("overwrite",Ne.overwrite.config).demandOption("overwrite",Ne.overwrite.demandText)),command:At,desc:"Download Snapshots",handler:async e=>{Tt("handler",At,e);const{hg:n,json:t,apikey:o,env:s,tenant:a,downloadTo:c,overwrite:l}=e,{clientApiBaseUri:d}=n;let u,f=N();const p=i.resolve(process.cwd(),function(e){function n(e){return process.argv.indexOf(e)>-1}if(n(`--${e}`))return!0;const t=Ne[e]?.config?.alias||[];for(let e in t)if(n(`-${t[e]}`))return!0;return!1}("downloadTo")?c:"snapshots");try{u=be("Verifying user and authorizing"),!t&&f.start(be(`In progress: ${u}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:c}=await ze({debug:Tt,baseUri:d,task:"snapshot-download",env:s,tenant:a,apikey:o}),y=new A.S3({accessKeyId:e,secretAccessKey:n,sessionToken:c});!t&&f.succeed(be(`Finished: ${u}.`,"secondary")),u=be("Validating tenant exists"),!t&&f.start(be(`In progress: ${u}...`,"secondary"));try{const{CommonPrefixes:e}=await y.listObjectsV2({Bucket:s,Prefix:`${a}/`,Delimiter:"/"}).promise();if(0===e.length)throw new Error("Invalid tenant")}catch(e){throw Tt("err",e),new Error("Tenant doesn't exist. Please check your tenant (-u) argument.")}!t&&f.succeed(be(`Finished: ${u}.`,"secondary")),u=be("Scanning for downloadable files"),!t&&f.start(be(`In progress: ${u}...`,"secondary"));const g=`${a}/snapshots/`,h={Bucket:s,Prefix:g},{Contents:m}=await y.listObjectsV2(h).promise();!t&&f.succeed(be(`Finished: ${u}.`,"secondary")),Tt("s3-list-res",m);const b=m?m.map((e=>e.Key)).filter((e=>e!==g)):[];if(!b||0===b.length)return void(t?ke({status:"success",downloadedFiles:[]}):f.warn(be(`Warning: ${be("Nothing to download!")}`,"secondary")));u=be(`Downloading snapshot files to ${be(p,"info")}`),!t&&f.info(be(`Info: ${u}.`,"secondary"));const w=new F({head:["File","Status"]});for await(const e of b){const n=e.substring(g.length),o=i.resolve(p,n);if(Tt("file",o),e.endsWith("/")){!r(o)&&await _(o,{recursive:!0});continue}if(!l)try{await x(o),Tt("exists, skipping"),w.push([n,"Skipped"]);continue}catch(e){"ENOENT"!==e.code&&we(e)}u=be(`Downloading file: ${be(n,"info")}`),!t&&f.start(be(`In progress: ${u}...`,"secondary")),await _(i.dirname(o),{recursive:!0});const a=y.getObject({Bucket:s,Key:e}).createReadStream();await k(o,await Le(a)),!t&&f.succeed(be(`Finished: ${u}.`,"secondary")),w.push([n,"Downloaded"])}t?ke({status:"success",downloadedFiles:b}):we(w.toString())}catch(e){t?ke({status:"error",error:e}):(f.fail(be(`Error: ${u}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),Tt(e),e&&e.response&&e.response.data&&Tt("response",e.response.data))}}});const St=[Et,It],Ft=Oe("commands:snapshots"),Nt="snapshots <action>";var Kt=Object.freeze({__proto__:null,builder:async function(e){Ft("builder",Nt,e);return(await Ue(e)).command(St)},command:Nt,desc:"Manage tenant snapshots",handler:async function(e){Ft("handler",Nt,e)}});const Ut=Oe("commands:tenants:custom-etl"),Dt="custom-etl",Bt=async({debug:e,baseUri:n,apikey:t,env:o,flow:s,tenant:r,supportedSources:a})=>{const i=await qe({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:d}=await ze({debug:e,baseUri:n,task:"etl-download",env:o,tenant:r,flow:s,tap:l,apikey:t}),u=new A.S3({accessKeyId:a,secretAccessKey:i,sessionToken:d}),f={Bucket:o,Prefix:`${r}/flows/${s}/taps/${l}/etl/`},{Contents:p}=await u.listObjectsV2(f).promise();if(p.some((({Key:e})=>e.endsWith("etl.py")||e.endsWith("etl.ipynb")))&&(c=r),null!==c)break}return c};var Mt=Object.freeze({__proto__:null,builder:async e=>(Ut("builder",Dt),e.option("tenant",Ne.tenant.config).option("flow",Ne.flow.config).demandOption("flow",Ne.flow.demandText)),command:Dt,desc:"List tenants with custom ETL in a specific flow",handler:async e=>{Ut("handler",Dt,e);const{hg:n,json:t,apikey:o,env:s,flow:r}=e;let a,i=N();try{a=be(`Retrieving tenants for environment ${be(s,"info")}`),!t&&i.start(be(`In progress: ${a}...`,"secondary"));const[e,c]=await Promise.all([Ve({debug:Ut,baseUri:n.clientApiBaseUri,apikey:o,env:s}),We({debug:Ut,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r})]);!t&&i.succeed(be(`Finished: ${a}.`,"secondary"));let l=[];a=be(`Querying for custom ETL scripts for flow ${be(r,"info")}`),!t&&i.start(be(`In progress: ${a}...`,"secondary"));for(const t of Ce(e)){const e=await Promise.all(t.map((e=>Bt({debug:Ut,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r,tenant:e,supportedSources:c}))));l=l.concat(e.filter(Boolean))}if(!t&&i.succeed(be(`Finished: ${a}.`,"secondary")),t)ke(l);else{const e=new F({head:["Tenant ID"]});e.push(...l.map((e=>[e]))),console.log(e.toString())}}catch(e){t?ke({status:"error",error:e}):(i.fail(be(`Error: ${a}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),Ut(e),e&&e.response&&e.response.data&&Ut("response",e.response.data))}}});const Pt=Oe("commands:tenants:custom-field-map"),Lt="custom-field-map",Ct=async({debug:e,baseUri:n,apikey:t,env:o,flow:s,tenant:r,isV2Flow:a})=>{const i=a?await Ge({debug:e,baseUri:n,env:o,flow:s,tenant:r,apikey:t}):await qe({debug:e,baseUri:n,env:o,flow:s,tenant:r,apikey:t}),c=[],{accessKeyId:l,secretAccessKey:d,sessionToken:u}=await ze({debug:e,baseUri:n,task:"field-map-download",env:o,tenant:r,flow:s,apikey:t}),f=new A.S3({accessKeyId:l,secretAccessKey:d,sessionToken:u});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 f.headObject(t).promise(),c.push(a?e:n)}catch(e){}}return{tenant:r,connectors:c}};var Rt=Object.freeze({__proto__:null,builder:async e=>(Pt("builder",Lt),e.option("tenant",Ne.tenant.config).option("flow",Ne.flow.config).demandOption("flow",Ne.flow.demandText)),command:Lt,desc:"List tenants with custom field map in a specific flow",handler:async e=>{Pt("handler",Lt,e);const{hg:n,json:t,apikey:o,env:s,flow:r}=e;let a,i=N();try{a=be(`Retrieving tenants for environment ${be(s,"info")}`),!t&&i.start(be(`In progress: ${a}...`,"secondary"));const[e,c]=await Promise.all([Ve({debug:Pt,baseUri:n.clientApiBaseUri,apikey:o,env:s}),Je({debug:Pt,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r})]),l=2===c?.version;!t&&i.succeed(be(`Finished: ${a}.`,"secondary"));const d=[];a=be(`Querying for custom field maps for flow ${be(r,"info")}`),!t&&i.start(be(`In progress: ${a}...`,"secondary"));for(const t of Ce(e)){const e=await Promise.all(t.map((e=>Ct({debug:Pt,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(be(`Finished: ${a}.`,"secondary")),t)ke(d);else{const e=new F({head:["Tenant ID","Connector IDs"]});e.push(...d.map((({tenant:e,connectors:n})=>[e,n.join(", ")]))),console.log(e.toString())}}catch(e){t?ke({status:"error",error:e}):(i.fail(be(`Error: ${a}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),Pt(e),e&&e.response&&e.response.data&&Pt("response",e.response.data))}}});const zt=Oe("commands:tenants:delete"),Vt="delete";var Wt=Object.freeze({__proto__:null,builder:async e=>(zt("builder",Vt),e.option("tenant",Ne.tenant.config)),command:Vt,desc:"Delete tenant",handler:async e=>{zt("handler",Vt,e);const{hg:n,json:t,apikey:o,env:s,tenant:r}=e,{clientApiBaseUri:a}=n;let i,c=N();try{if("default"===r)throw new Error('It\'s not possible to delete "default" tenant!');i=be(`Deleting tenant ${r} schedules`),!t&&c.start(be(`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 K.delete(a,{headers:r});return i})({debug:zt,baseUri:a,env:s,apikey:o,tenant:r}),!t&&c.succeed(be(`Finished: ${i}.`,"secondary")),i=be("Verifying user and authorizing"),!t&&c.start(be(`In progress: ${i}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:l}=await ze({debug:zt,baseUri:a,task:"tenant-delete",env:s,tenant:r,apikey:o});!t&&c.succeed(be(`Finished: ${i}.`,"secondary"));const d=new A.S3({accessKeyId:e,secretAccessKey:n,sessionToken:l});for(i=be(`Deleting tenant ${r} for environment ${be(s,"info")}`),!t&&c.start(be(`In progress: ${i}...`,"secondary"));;){const e=((await d.listObjectsV2({Bucket:s,Prefix:`${r}/`}).promise()).Contents||[]).map((({Key:e})=>({Key:e})));if(0===e.length)break;await d.deleteObjects({Bucket:s,Delete:{Objects:e}}).promise()}if(!t&&c.succeed(be(`Finished: ${i}.`,"secondary")),t)ke({statu:"success",tenantDeleted:r});else{const e=new F({head:["Tenant ID"]});e.push([r]),console.log(e.toString())}}catch(e){t?ke({status:"error",error:e}):(c.fail(be(`Error: ${i}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),zt(e),e&&e.response&&e.response.data&&zt("response",e.response.data))}}});const qt=Oe("commands:tenants:list"),Gt="list";var Jt=Object.freeze({__proto__:null,builder:async e=>(qt("builder",Gt),e.option("tenant",Ne.tenant.config)),command:Gt,desc:"List tenants",handler:async e=>{qt("handler",Gt,e);const{hg:n,json:t,apikey:o,env:s,tenant:r}=e;let a,i=N();try{a=be(`Retrieving tenants for environment ${be(s,"info")}`);const e=`${n.clientApiBaseUri}/tenants/${s}${r?`?tenant=${r}`:""}`;qt("requesting:",e),!t&&i.start(be(`In progress: ${a}...`,"secondary"));const{data:c}=await K.get(e,{headers:{"x-api-key":o}});if(!t&&i.succeed(be(`Finished: ${a}.`,"secondary")),qt("response-data",c),!c||0===c.length)return void(t?ke([]):i.info(be(`Info: ${be("No tenants found in the specified environment")}.`,"secondary")));if(t)ke(c);else{const e=new F({head:["tenant ID"]});e.push(...c.map((e=>[e]))),console.log(e.toString())}}catch(e){t?ke({status:"error",error:e}):(i.fail(be(`Error: ${a}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),qt(e),e&&e.response&&e.response.data&&qt("response",e.response.data))}}});const Qt=[Mt,Rt,Wt,Jt],Yt=Oe("commands:tenants"),Ht="tenants <action>";var Zt=Object.freeze({__proto__:null,builder:async function(e){Yt("builder",Ht);return(await Ue(e)).command(Qt)},command:Ht,desc:"Manage tenants",handler:async function(e){Yt("handler",Ht,e)}});const Xt=[Fe,sn,vn,Tn,jt,Kt,Zt];var eo,no,to,oo={exports:{}};B((eo||(eo=1,no=oo,to=["We are formalizing our plans to enter AWS SDK for JavaScript (v2) into maintenance mode in 2023.\n","Please migrate your code to use AWS SDK for JavaScript (v3).","For more information, check the migration guide at https://a.co/7PzMCcy"].join("\n"),no.exports={suppress:!1},setTimeout((function(){no.exports.suppress||"undefined"!=typeof process&&("object"==typeof process.env&&void 0!==process.env.AWS_EXECUTION_ENV&&0===process.env.AWS_EXECUTION_ENV.indexOf("AWS_Lambda_")||"object"==typeof process.env&&void 0!==process.env.AWS_SDK_JS_SUPPRESS_MAINTENANCE_MODE_MESSAGE||"function"==typeof process.emitWarning&&process.emitWarning(to,{type:"NOTE"}))}),0)),oo.exports)).suppress=!0;he({});const so=h(process.argv.slice(2));so.usage(be("Usage: $0 <command>")).command(Xt).demandCommand().alias("v","version").alias("h","help").string("_").strictCommands().epilogue(be("For more information, visit https://docs.hotglue.xyz/docs/cli-overview")).wrap(Math.min(so.terminalWidth(),90)).parse(process.argv.slice(G()+1),ce);
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.__||H.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=J(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=Q(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=>K(e,g.arrays)?(b=Error(y("Invalid configuration: %s, opts.count excludes opts.array.",e)),!0):!!K(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&&B(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&&(K(c[1],g.arrays)?e=j(e,c[1],o,c[2]):!1!==K(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,!!K(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],K(r,g.arrays)?e=j(e,r,o):!1!==K(r,g.nargs)?e=k(e,r,o):(l=o[e+1],void 0===l||l.match(/^-/)&&!l.match(h)||K(r,g.bools)||K(r,g.counts)?/^(true|false)$/.test(l)?(O(r,l),e++):O(r,D(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(/^-/)||K(r,g.bools)||K(r,g.counts)?O(r,D(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],K(r,g.arrays)?e=j(e,r,o,d):!1!==K(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===K(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],D(i[t]))}else O(i[t],l)}r=n.slice(-1)[0],s||"-"===r||(K(r,g.arrays)?e=j(e,r,o):!1!==K(r,g.nargs)?e=k(e,r,o):(l=o[e+1],void 0===l||/^(-|--)[^-]/.test(l)&&!l.match(h)||K(r,g.bools)||K(r,g.counts)?/^(true|false)$/.test(l)?(O(r,l),e++):O(r,D(r)):(O(r,l),e++)))}else if(n.match(/^-[0-9]$/)&&n.match(h)&&K(n.slice(1),g.bools))r=n.slice(1),O(r,D(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=T("_",e);"string"!=typeof n&&"number"!=typeof n||v._.push(n)}function k(e,n,t,o){let s,r=K(n,g.nargs);if(r="number"!=typeof r||isNaN(r)?1:r,0===r)return M(o)||(b=Error(y("Argument unexpected for: %s",n))),O(n,D(n)),e;let i=M(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)||B(t[s]));s++)i++;i<r&&(b=Error(y("Not enough arguments following: %s",n)))}let c=Math.min(i,r);for(!M(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=K(n,g.nargs);if(K(n,g.bools)&&!/^(true|false)$/.test(c))r.push(!0);else if(M(c)||M(o)&&/^-/.test(c)&&!h.test(c)&&!B(c)){if(void 0!==i[n]){const e=i[n];r=Array.isArray(e)?e:[e]}}else{M(o)||r.push(E(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)||B(c));o++)e=o,r.push(E(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 J(e)})).join(".");x(e,n)}const o=E(e,n,t),r=e.split(".");if(N(v,r,o),g.aliases[e]&&g.aliases[e].forEach((function(e){const n=e.split(".");N(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("."))||N(v,t,o)})),K(e,g.normalize)&&!K(e,g.arrays)){[e].concat(g.aliases[e]||[]).forEach((function(e){Object.defineProperty($,e,{enumerable:!0,get:()=>n,set(e){n="string"==typeof e?H.normalize(e):e}})}))}}function x(e,n){g.aliases[e]&&g.aliases[e].length||(g.aliases[e]=[n],f[n]=!0),g.aliases[n]&&g.aliases[n].length||x(n,e)}function E(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)),(K(e,g.bools)||K(e,g.counts))&&"string"==typeof n&&(n="true"===n);let o=Array.isArray(n)?n.map((function(n){return T(e,n)})):T(e,n);return K(e,g.counts)&&(M(o)||"boolean"==typeof o)&&(o=Z()),K(e,g.normalize)&&K(e,g.arrays)&&(o=Array.isArray(n)?n.map((e=>H.normalize(e))):H.normalize(n)),o}function T(e,n){if(!a["parse-positional-numbers"]&&"_"===e)return n;if(!K(e,g.strings)&&!K(e,g.bools)&&!Array.isArray(n)){(Y(n)&&a["parse-numbers"]&&Number.isSafeInteger(Math.floor(parseFloat(`${n}`)))||!M(n)&&K(e,g.numbers))&&(n=Number(n))}return n}function I(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"]?I(o,s):(!F(v,s.split("."))||K(s,g.arrays)&&a["combine-arrays"])&&O(s,o)}))}function A(e,n){if(void 0===l)return;const t="string"==typeof l?l:"",o=H.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)),J(e)}));(n&&g.configs[r.join(".")]||!n)&&!F(e,r)&&O(r.join("."),o[s])}}))}function S(e,n,t,o=!1){Object.keys(t).forEach((function(s){F(e,s.split("."))||(N(e,s.split("."),t[s]),o&&(p[s]=!0),(n[s]||[]).forEach((function(n){F(e,n.split("."))||N(e,n.split("."),t[s])})))}))}function F(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 N(e,n,t){let o=e;a["dot-notation"]||(n=[n.join(".")]),n.slice(0,-1).forEach((function(e){e=X(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=X(n[n.length-1]),r=K(n.join("."),g.arrays),i=Array.isArray(t);let c=a["duplicate-arguments-array"];!c&&K(s,g.nargs)&&(c=!0,(!M(o[s])&&1===g.nargs[s]||Array.isArray(o[s])&&o[s].length===g.nargs[s])&&(o[s]=void 0)),t===Z()?o[s]=Z(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]||K(s,g.counts)||K(s,g.bools)?o[s]=t:o[s]=[o[s],t]}function K(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 U(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 B(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),!U(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&&U(t[1])}))}(e,/^-+([^=]+?)=[\s\S]*$/,m,/^-+([^=]+?)$/,/^-+([^=]+?)-$/,/^-+([^=]+?\d+)$/,/^-+([^=]+?)\W+.*$/)}(e)}function D(e){return K(e,g.bools)||K(e,g.counts)||!(`${e}`in i)?(n=function(e){let n=V.BOOLEAN;return K(e,g.strings)?n=V.STRING:K(e,g.numbers)?n=V.NUMBER:K(e,g.bools)?n=V.BOOLEAN:K(e,g.arrays)&&(n=V.ARRAY),n}(e),{[V.BOOLEAN]:!0,[V.STRING]:"",[V.NUMBER]:void 0,[V.ARRAY]:[]}[n]):i[e];var n}function M(e){return void 0===e}return A(v,!0),A(v,!1),function(e){const n=Object.create(null);S(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=H.resolve(H.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=H.require(n);I(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){I(e)})),S(v,g.aliases,i,!0),function(e){let n;const t=new Set;Object.keys(e).forEach((function(o){if(!t.has(o)&&(n=K(o,g.coercions),"function"==typeof n))try{const s=T(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){F(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=>J(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:()=>ne,format:m,normalize:c,resolve:l,require:e=>{if("undefined"!=typeof require)return require(e);if(e.match(/\.json$/))return JSON.parse(n(e,"utf8"));throw Error("only .json config files are supported in ESM")}}),oe=function(e,n){return te.parse(e.slice(),n).argv};oe.detailed=function(e,n){return te.parse(e.slice(),n)},oe.camelCase=J,oe.decamelize=Q,oe.looksLikeNumber=Y;new RegExp("(?:\\[(?:\\d+[ABCDEFGJKSTm]|\\d+;\\d+[Hfm]|\\d+;\\d+;\\d+m|6n|s|u|\\?25[lh])|\\w)","g");var se={fs:{readFileSync:n,writeFile:s},format:m,resolve:l,exists:e=>{try{return t(e).isFile()}catch(e){return!1}}};let re;class ae{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(),re.format.apply(re.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),re.format.apply(re.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);re.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{re.fs.readFileSync&&(e=JSON.parse(re.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=re.resolve(e,"./",n+".json");if(this.fallbackToLanguage&&!this._fileExistsSync(t)&&~n.lastIndexOf("_")){const o=re.resolve(e,"./",n.split("_")[0]+".json");this._fileExistsSync(o)&&(t=o)}return t}_fileExistsSync(e){return re.exists(e)}}let ie;try{ie=$(import.meta.url)}catch(e){ie=process.cwd()}ie.split("node_modules")[0]||process.cwd(),process.cwd,process.exit,process.nextTick,void 0!==process.stdout.columns&&process.stdout.columns,function(e,n){re=n;const t=new ae(e);t.__.bind(t),t.__n.bind(t),t.setLocale.bind(t),t.getLocale.bind(t),t.updateLocale.bind(t),t.locale}({directory:l(ie,"../../../locales"),updateFiles:!1},se);const ce={hg:{appName:"hotglue",clientApiBaseUri:process.env.HOTGLUE_CLIENT_API_BASE_URI||"https://client-api.hotglue.xyz",defaultConfigFileName:"config.yaml"}},le={},de=()=>i.resolve(g(),`.${ce.hg.appName}`,ce.hg.defaultConfigFileName),ue=async()=>{const{appName:e}=ce.hg;try{return await E(e).load(de())||{}}catch(e){return{}}},fe=async()=>{const{appName:e}=ce.hg,n=E(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}`)}},pe={primary:e=>T.whiteBright(e),secondary:e=>T.white(e),info:e=>T.green(e),warn:e=>T.yellow(e),error:e=>T.redBright(e),success:e=>T.greenBright(e)};let ye=pe,ge="primary";function he(e){return ye={...pe,...e},_e}function me(e){process.stdout.write(e)}const be=(e,n=ge)=>{if(!e)return"";if("string"==typeof e)return ye[n]?ye[n](e):ye[ge](e);const t=b(e,{colors:!0});return ye[n]?ye[n](t):t};function we(...e){return console.log(...e),_e}function ve(e,n){return me(be(e,n)),me("\n"),_e}function $e(e,n){return me(be(e,n)),_e}const _e={cl:we,pr:ve,pp:$e,setTheme:he,setDefault:function(e="primary"){return ye[e]&&(ge=e),_e}},ke=e=>{console.log(JSON.stringify(e))},je=A("hotglue-cli");function Oe(e){return je.extend(e)}const xe=Oe("commands:config:set"),Ee="set <setting> <value>";var Te=Object.freeze({__proto__:null,builder:async e=>(xe("builder",Ee,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:Ee,desc:"Set configuration key-value pairs",handler:async e=>{xe("handler",Ee,e);const{json:n,setting:t,value:o}=e;if(["apikey"].includes(t))try{const e=await ue();e&&e.config?!n&&$e("Updating profile config file..."):!n&&$e("Creating profile config file...");const s=e&&e.config?{...e.config,[t]:o}:{[t]:o},r=S.stringify(s),a=e&&e.filepath?e.filepath:de();await(async(e,n)=>{await _(i.dirname(e),{recursive:!0}),await k(e,n)})(a,r),n?ke({status:"success"}):$e("Done").pr()}catch(e){n?ke({status:"error",error:e}):console.log(e)}else n?ke({status:"error",error:"Invalid settings parameter"}):console.error("Invalid settings parameter")}});const Ie=[Te],Ae=Oe("commands:config"),Se="config [action]";var Fe=Object.freeze({__proto__:null,builder:async function(e){return Ae("builder",Se),e.command(Ie)},command:Se,desc:"Configure your hotglue CLI",handler:async function(e){Ae("handler",Se,e);const{action:n}=e;if(!n)try{const e=await ue();e.config&&0!==Object.keys(e.config).length||ve("No profile configuration found. Run config set to configure the hotglue CLI.");const n=new F({head:["Setting","Value","Config File","Type"]});e.config&&Object.entries(e.config).forEach((([t,o])=>n.push([t,o,e.filepath,"Profile"])));const t=await fe();t.config&&Object.entries(t.config).forEach((([e,o])=>n.push([e,o,i.relative(process.cwd(),t.filepath),"Project"]))),n.length>0&&console.log(n.toString())}catch(e){throw console.log(e),e}}}),Ne={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 Ke=Oe("base"),Ue=async e=>{Ke("builder");const n=await(async()=>{const e=await ue(),n=await fe();return{...le,...e.config,...n.config}})();return e.option("apikey",Ne.apikey.config).option("env",Ne.env.config).option("json",Ne.json.config).config(n).demandOption(["env"],Ne.env.demandText).demandOption(["apikey"],Ne.apikey.demandText)},Be=Oe("utils.js"),De=async(e,n,t=[])=>{const{includeSymLinks:o,recursive:s,filter:r}=n,{matcher:a}=r,c=i.resolve(e),l=await j(c,{withFileTypes:!0});for(const e of l){const r=i.resolve(c,e.name);e.isSymbolicLink()&&!o||(!a||a(r)?e.isFile()?t.push(i.resolve(c,e.name)):e.isDirectory()&&s&&await De(i.resolve(c,e.name),n,t):Be("skip",r))}return t},Me=async(e,n)=>{const t={includeSymLinks:!1,recursive:!1,filter:{},...n},{pattern:o}=t.filter;return o&&(t.filter.matcher=K.matcher(o)),De(e,t)},Le=(e,n)=>{Be("filter-in",e);const{pattern:t}={...n};let o=e;return t&&(o=K(o,t)),Be("filter-out",o),o};const Pe=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"))))}))},Ce=(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},Re=async({debug:e,baseUri:n,env:t,apiKey:o})=>{const s=new URL(`${n}/${t}/resetAvailableEntities`),{data:r}=await U.delete(s,{headers:{"x-api-key":o,"Content-type":"application/json"}});e({data:r})},ze=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 U.get(i,{headers:{"x-api-key":s}}),{accessKeyId:l,secretAccessKey:d,sessionToken:u}=c;return{accessKeyId:l,secretAccessKey:d,sessionToken:u}},Ve=async({debug:e,baseUri:n,env:t,apikey:o})=>{const s=`${n}/tenants/${t}`;e("requesting:",s);const{data:r}=await U.get(s,{headers:{"x-api-key":o}});return e("response-data",r),r},qe=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 U.get(a,{headers:r});return i},Ge=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 U.get(l,{headers:c});return d},We=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 U.get(l,{headers:c});return d},Je=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 U.get(a,{headers:r});return i},Qe=Oe("commands:env:deploy"),Ye="deploy";var He=Object.freeze({__proto__:null,builder:async e=>(Qe("builder",Ye),e.option("sourceFolder",Ne.sourceFolder.config).demandOption("sourceFolder",Ne.sourceFolder.demandText)),command:Ye,desc:"Deploy Environment settings",handler:async e=>{Qe("handler",Ye,e);const{hg:n,json:t,apikey:o,env:s,sourceFolder:r}=e,{clientApiBaseUri:a}=n,c=i.resolve(process.cwd(),r);let l,d=N();try{l=be(`Scanning ${be(c,"info")} for deployable files`),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const e=await Me(c,{filter:{pattern:"((**/requirements.txt)|(**/availableSources.json)|(**/availableTargets.json)|(**/availableConnectors.json)|(**/customTaps.json))"}});if(0===e.length)return void(t?ke({status:"error",error:"There are no files to deploy at the specified location!"}):(d.fail(be(`Error: ${l}.`,"secondary")),ve(be(`Message: ${be("There are no files to deploy at the specified location!")}`,"secondary"))));!t&&d.succeed(be(`Finished: ${l}.`,"secondary"));for(const n of e)if(n.endsWith(".json"))try{const e=await O(n,{encoding:"utf-8"});JSON.parse(e)}catch(e){throw new Error(`File ${n} is not a valid JSON: ${String(e)}`)}l=be("Verifying user and authorizing"),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const{accessKeyId:n,secretAccessKey:r,sessionToken:u}=await ze({debug:Qe,baseUri:a,task:"env-deploy",env:s,apikey:o});!t&&d.succeed(be(`Finished: ${l}.`,"secondary"));const f=new I.S3({accessKeyId:n,secretAccessKey:r,sessionToken:u});l=be("Deploying environment files"),!t&&d.info(be(`Info: ${l}.`,"secondary"));const p="config/",y=new F({head:["File","Status"]});for await(const n of e){const e=i.basename(n);l=be(`Pushing file: ${be(e,"info")}`),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const r={Bucket:s,Key:`${p}${e}`,Body:await O(n)},c=await f.putObject(r).promise();!t&&d.succeed(be(`Finished: ${l}.`,"secondary")),Qe("s3-put-res",c),y.push([e,"Deployed"]),await Re({debug:Qe,baseUri:a,env:s,apiKey:o})}t?ke({status:"success",deployedFiles:e}):we(y.toString())}catch(e){!t&&d.fail(be(`Error: ${l}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),Qe(e),e&&e.response&&e.response.data&&Qe("response",e.response.data)}}});const Ze=Oe("commands:env:download"),Xe="download";var en=Object.freeze({__proto__:null,builder:async e=>(Ze("builder",Xe),e.option("downloadTo",Ne.downloadTo.config)),command:Xe,desc:"Download Environment settings",handler:async e=>{Ze("handler",Xe,e);const{hg:n,json:t,apikey:o,env:s,downloadTo:r}=e,{clientApiBaseUri:a}=n,c=i.resolve(process.cwd(),r);let l,d=N();try{l=be("Verifying user and authorizing"),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:r}=await ze({debug:Ze,baseUri:a,task:"env-download",env:s,apikey:o});!t&&d.succeed(be(`Finished: ${l}.`,"secondary"));const u=new I.S3({accessKeyId:e,secretAccessKey:n,sessionToken:r});l=be(`Scanning environment ${be(s,"info")}`),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const f={Bucket:s,Prefix:"config/"},{Contents:p}=await u.listObjectsV2(f).promise();!t&&d.succeed(be(`Finished: ${l}.`,"secondary")),Ze("s3-files",p);const y=p?Le(p.map((e=>e.Key)),{pattern:"((*/requirements.txt)|(*/availableSources.json)|(*/availableTargets.json)|(*/availableConnectors.json)|(*/customTaps.json))"}):[];if(!y||0===y.length)return void(t?ke({status:"success",downloadedFiles:[]}):d.warn(be(`Warning: ${be("Nothing to download!")}`,"secondary")));l=be(`Downloading to ${be(c,"info")}`),!t&&d.info(be(`Info: ${l}.`,"secondary"));const g=new F({head:["File","Status"]});for await(const e of y){const n=i.basename(e),o=i.resolve(c,n);Ze("local-file",o),await _(i.dirname(o),{recursive:!0}),l=be(`Downloading file: ${be(n,"info")}`),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const r=u.getObject({Bucket:s,Key:e}).createReadStream();await k(o,await Pe(r)),!t&&d.succeed(be(`Finished: ${l}.`,"secondary")),g.push([n,"Downloaded"])}t?ke({status:"success",downloadedFiles:y}):we(g.toString())}catch(e){t?ke({status:"error",error:e}):(d.fail(be(`Error: ${l}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),Ze(e),e&&e.response&&e.response.data&&Ze("response",e.response.data))}}});const nn=[He,en],tn=Oe("commands:env"),on="env <action>";var sn=Object.freeze({__proto__:null,builder:async function(e){tn("builder",on);return(await Ue(e)).command(nn)},command:on,desc:"Manage environment settings",handler:async function(e){tn("handler",on,e)}});const rn=async(e,n,t,o)=>{try{const s=e.getObject({Bucket:n,Key:`${t}/flows/${o}/flow.json`}).createReadStream(),r=await Pe(s);return 2===JSON.parse(r).version}catch(e){return!1}},an=async(e,n,t,o,s=void 0)=>s??await rn(e,n,t,o)?"connectors":"taps",cn=Oe("commands:etl:delete"),ln="delete";var dn=Object.freeze({__proto__:null,builder:async e=>(cn("builder",ln),e.option("flow",Ne.flow.config).demandOption("flow",Ne.flow.demandText).option("tap",Ne.tap.config).demandOption("tap",Ne.tap.demandText).option("tenant",{...Ne.tenant.config}).demandOption("tenant",Ne.tenant.demandText)),command:ln,desc:"Delete ETL scripts",handler:async e=>{cn("handler",ln,e);const{hg:n,json:t,apikey:o,env:s,flow:r,tap:a,tenant:i}=e,{clientApiBaseUri:c}=n;let l,d=N();try{l=be(`Deleting ETL scripts for Tenant ${be(i,"info")} Flow ${be(r,"info")} and Tap ${be(a,"info")} to ${be(s,"info")}`),!t&&d.info(be(`Info: ${l}.`,"secondary")),l=be("Verifying user and authorizing"),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:u}=await ze({debug:cn,baseUri:c,task:"etl-deploy",env:s,tenant:i,flow:r,tap:a,apikey:o}),f=new I.S3({accessKeyId:e,secretAccessKey:n,sessionToken:u});!t&&d.succeed(be(`Finished: ${l}.`,"secondary")),l=be("Deleting ETL scripts"),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const p=`${i}/flows/${r}/${await an(f,s,i,r)}/${a}/etl/`,y=await f.listObjectsV2({Bucket:s,Prefix:p}).promise();if(cn("s3-list-objects-res",y),y.Contents?.length>0){const e=await f.deleteObjects({Bucket:s,Delete:{Objects:y.Contents.map((e=>({Key:e.Key})))}}).promise();cn("s3-list-objects-res",e)}const g=await f.deleteObject({Bucket:s,Key:p}).promise();if(cn("s3-delete-object-res",g),!t&&d.succeed(be(`Finished: ${l}.`,"secondary")),y.Contents?.length>0){const e=new F({head:["File","Status"]});y.Contents.filter((({Key:e})=>e!==p)).forEach((({Key:n})=>{const t=n.split("/"),o=t[t.length-1];e.push([o,be("Deleted","info")])})),t?ke({status:"success",deletedObjects:(y.Contents??[]).map((({Key:e})=>e))}):we(e.toString())}else l=be("There was no file or folder to be deleted"),t?ke({status:"success",deletedObjects:[]}):d.info(be(`Info: ${l}.`,"secondary"))}catch(e){t?ke({status:"error",error:e}):(d.fail(be(`Error: ${l}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),cn(e),e&&e.response&&e.response.data&&cn("response",e.response.data))}}});const un=Oe("commands:etl:deploy"),fn="deploy";var pn=Object.freeze({__proto__:null,builder:async e=>(un("builder",fn),e.option("flow",Ne.flow.config).demandOption("flow",Ne.flow.demandText).option("tap",Ne.tap.config).option("all",Ne.all.config).option("tenant",{...Ne.tenant.config,default:"default"}).option("sourceFolder",Ne.sourceFolder.config).demandOption("sourceFolder",Ne.sourceFolder.demandText)),command:fn,desc:"Deploy ETL scripts",handler:async e=>{un("handler",fn,e);const{hg:n,json:t,apikey:o,env:s,flow:r,tap:a,all:c,tenant:l,sourceFolder:d}=e,{clientApiBaseUri:u}=n;if(!c&&!a)throw new Error(`${Ne.tap.demandText} Or you can pass the --all flag to run this command for all taps/connectors.`);let f,p=N();const y=i.resolve(process.cwd(),d);try{f=be(`Deploying script for Tenant ${be(l,"info")} Flow ${be(r,"info")}${a?` and Tap ${be(a,"info")}`:""} to ${be(s,"info")}`),!t&&p.info(be(`Info: ${f}.`,"secondary"));const e=await Me(y,{recursive:!0,filter:{pattern:"!((**/sync-output)|(**/etl-output)|(**/snapshots))"}});if(0===e.length)return void(t?ke({status:"error",error:"There are no files to deploy at the specified location!"}):p.fail(be(`Error: ${be("There are no files to deploy at the specified location!")}.`,"secondary")));f=be("Verifying user and authorizing"),!t&&p.start(be(`In progress: ${f}...`,"secondary"));const n={debug:un,baseUri:u,task:"etl-deploy",env:s,tenant:l,flow:r,apikey:o};a&&(n.tap=a);const{accessKeyId:c,secretAccessKey:g,sessionToken:h}=await ze(n);!t&&p.succeed(be(`Finished: ${f}.`,"secondary"));const m=new I.S3({accessKeyId:c,secretAccessKey:g,sessionToken:h}),b=await rn(m,s,l,r);f=be("Validating flow and tap location"),!t&&p.start(be(`In progress: ${f}...`,"secondary"));const w=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 U.get(r,{headers:s});return a})({debug:un,baseUri:u,apikey:o,env:s}),v=w.find((({id:e})=>e===r));let $=[];try{if("default"===l||v?.type){const e=b?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 U.get(a,{headers:r});return i})({debug:un,baseUri:u,env:s,flow:r,apikey:o}):await qe({debug:un,baseUri:u,env:s,flow:r,apikey:o});if($=(e??[]).filter((e=>!a||e[b?"id":"tap"]===a)),a&&0===$.length)throw new Error("Tap is not supported")}else{if($=((b?await We({debug:un,baseUri:u,env:s,flow:r,tenant:l,apikey:o}):await Ge({debug:un,baseUri:u,env:s,flow:r,tenant:l,apikey:o}))??[]).filter((e=>!a||e[b?"id":"tap"]===a)),a&&0===$.length)throw new Error("Tap is not linked")}}catch(e){throw un("err",e),new Error("Target location doesn't exist. Check your tenant, flow and tap arguments.")}!t&&p.succeed(be(`Finished: ${f}.`,"secondary"));const _=new F({head:["File","Status"]});for(const n of $){const o=n[b?"id":"tap"];f=be(`Preparing ${o} deployment target`),!t&&p.start(be(`In progress: ${f}...`,"secondary"));const a=`${l}/flows/${r}/${await an(null,null,null,null,b)}/${o}/etl/`,{Contents:c}=await m.listObjectsV2({Bucket:s,Prefix:`${a}`}).promise();!t&&p.succeed(be(`Finished: ${f}.`,"secondary")),un("contents",c);const u=c.map((e=>({Key:e.Key})));if(u.length>0){f=be(`Removing old ${o} ETL files`),!t&&p.start(be(`In progress: ${f}...`,"secondary"));const e={Bucket:s,Delete:{Objects:u,Quiet:!0}};await m.deleteObjects(e).promise(),u.forEach((({Key:e})=>_.push([`${o}/${e.substring(a.length)}`,be("Deleted","warn")]))),!t&&p.succeed(be(`Finished: ${f}.`,"secondary"))}for await(const n of e){const e="win32"===process.platform?i.relative(d,n).replace(/\\/g,"/"):i.relative(d,n),r=`${a}${e}`;f=be(`Deploying file: ${be(`${o}/${e}`,"info")}`),!t&&p.start(be(`In progress: ${f}...`,"secondary"));const c={Bucket:s,Key:r,Body:await O(n)},l=await m.putObject(c).promise();!t&&p.succeed(be(`Finished: ${f}.`,"secondary")),un("s3-put-res",l),_.push([`${o}/${e}`,be("Deployed","info")])}}t?ke({status:"success",deployedFiles:e}):we(_.toString())}catch(e){t?ke({status:"error",error:e}):(p.fail(be(`Error: ${f}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),un(e),e&&e.response&&e.response.data&&un("response",e.response.data))}}});const yn=Oe("commands:etl:download"),gn="download";var hn=Object.freeze({__proto__:null,builder:async e=>(yn("builder",gn),e.option("flow",Ne.flow.config).demandOption("flow",Ne.flow.demandText).option("tap",Ne.tap.config).demandOption("tap",Ne.tap.demandText).option("downloadTo",Ne.downloadTo.config).demandOption("downloadTo",Ne.downloadTo.demandText).option("tenant",{...Ne.tenant.config,default:"default"}).option("overwrite",Ne.overwrite.config).demandOption("overwrite",Ne.overwrite.demandText)),command:gn,desc:"Download ETL scripts",handler:async e=>{yn("handler",gn,e);const{hg:n,json:t,apikey:o,env:s,flow:a,tap:c,tenant:l,downloadTo:d,overwrite:u}=e,{clientApiBaseUri:f}=n;let p,y=N();const g=i.resolve(process.cwd(),d);try{p=be("Verifying user and authorizing"),!t&&y.start(be(`In progress: ${p}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:d}=await ze({debug:yn,baseUri:f,task:"etl-download",env:s,tenant:l,flow:a,tap:c,apikey:o}),h=new I.S3({accessKeyId:e,secretAccessKey:n,sessionToken:d});!t&&y.succeed(be(`Finished: ${p}.`,"secondary")),p=be("Scanning for downloadable files"),!t&&y.start(be(`In progress: ${p}...`,"secondary"));const m=`${l}/flows/${a}/${await an(h,s,l,a)}/${c}/etl/`,b={Bucket:s,Prefix:m},{Contents:w}=await h.listObjectsV2(b).promise();!t&&y.succeed(be(`Finished: ${p}.`,"secondary")),yn("s3-list-res",w);const v=w?Le(w.map((e=>e.Key)),{pattern:"!(.ipynb_checkpoints/*)"}):[];if(!v||0===v.length)return void(t?ke({status:"success",downloadedFiles:[]}):y.warn(be(`Warning: ${be("Nothing to download!")}`,"secondary")));p=be(`Downloading script files to ${be(g,"info")}`),!t&&y.info(be(`Info: ${p}.`,"secondary"));const $=new F({head:["File","Status"]});for await(const e of v){const n=e.substring(m.length),o=i.resolve(g,n);if(yn("file",o),e.endsWith("/")){!r(o)&&await _(o,{recursive:!0});continue}if(!u)try{await x(o),yn("exists, skipping"),$.push([n,"Skipped"]);continue}catch(e){"ENOENT"!==e.code&&we(e)}p=be(`Downloading file: ${be(n,"info")}`),!t&&y.start(be(`In progress: ${p}...`,"secondary")),await _(i.dirname(o),{recursive:!0});const a=h.getObject({Bucket:s,Key:e}).createReadStream();await k(o,await Pe(a)),!t&&y.succeed(be(`Finished: ${p}.`,"secondary")),$.push([n,"Downloaded"])}t?ke({status:"success",downloadedFiles:v}):we($.toString())}catch(e){t?ke({status:"error",error:e}):(y.fail(be(`Error: ${p}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),yn(e),e&&e.response&&e.response.data&&yn("response",e.response.data))}}});const mn=[dn,pn,hn],bn=Oe("commands:etl"),wn="etl <action>";var vn=Object.freeze({__proto__:null,builder:async function(e){bn("builder",wn);return(await Ue(e)).command(mn)},command:wn,desc:"Manage ETL scripts",handler:async function(e){bn("handler",wn,e)}});const $n=Oe("commands:flows:list"),_n="list";var kn=Object.freeze({__proto__:null,builder:async e=>($n("builder",_n),e.option("tenant",{...Ne.tenant.config})),command:_n,desc:"List flows",handler:async e=>{$n("handler",_n,e);const{hg:n,json:t,apikey:o,env:s,tenant:r}=e,{clientApiBaseUri:a}=n;let i,c=N();try{i=be(`Retrieving ${r?`${be(r,"info")} tenant's`:"the"} flows for environment: ${be(s,"info")}`);const e=`${a}/${s}/flows/${r?`linked?user_id=${r}`:"supported"}`;$n("requesting:",e),!t&&c.start(be(`In progress: ${i}...`,"secondary"));const{data:n}=await U.get(e,{headers:{"x-api-key":o}});if(!t&&c.succeed(be(`Finished: ${i}.`,"secondary")),$n("response-data",n),!n||0===n.length)return void(t?ke([]):c.warn(be(`Warning: ${be("No flows for specified environment and tenant")}.`,"secondary")));if(t)ke(n);else{const e=new F({head:["ID","Name","isPush","Taps","Targets"]});n.forEach((n=>e.push([n.id,n.name||"",n.type||!1,n.taps?b(n.taps):"",n.targets?b(n.targets):"none"]))),console.log(e.toString())}}catch(e){t?ke({status:"error",error:e}):(c.fail(be(`Error: ${i}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),$n(e),e&&e.response&&e.response.data&&$n("response",e.response.data))}}});const jn=[kn],On=Oe("commands:flows"),xn="flows <action>";var En,Tn=Object.freeze({__proto__:null,builder:async function(e){On("builder",xn);return(await Ue(e)).command(jn)},command:xn,desc:"Manage flows",handler:async function(e){On("handler",xn,e)}}),In={exports:{}},An={exports:{}},Sn={exports:{}},Fn={exports:{}};var Nn,Kn={exports:{}},Un={exports:{}};var Bn,Dn,Mn={exports:{}};function Ln(){return Dn||(Dn=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 Nn||(Nn=1,e=Un,n=Un.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),Un.exports;var e,n}(),o=a(t),s=function(){return Bn||(Bn=1,e=Mn,n=Mn.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){return e[Symbol.iterator]&&e[Symbol.iterator]()},e.exports=n.default),Mn.exports;var e,n}(),r=a(s);function a(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default}(Kn,Kn.exports)),Kn.exports}var Pn,Cn={exports:{}};var Rn,zn={},Vn={exports:{}},qn={exports:{}};var Gn,Wn,Jn,Qn={};function Yn(){return Wn||(Wn=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 Rn||(Rn=1,e=qn,n=qn.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),qn.exports;var e,n}(),o=i(t),s=function(){if(Gn)return Qn;Gn=1,Object.defineProperty(Qn,"__esModule",{value:!0}),Qn.fallback=s,Qn.wrap=r;var e,n=Qn.hasQueueMicrotask="function"==typeof queueMicrotask&&queueMicrotask,t=Qn.hasSetImmediate="function"==typeof setImmediate&&setImmediate,o=Qn.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,Qn.default=r(e),Qn}(),r=i(s),a=Hn();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}(Vn,Vn.exports)),Vn.exports}function Hn(){if(Jn)return zn;Jn=1,Object.defineProperty(zn,"__esModule",{value:!0}),zn.isAsyncIterable=zn.isAsyncGenerator=zn.isAsync=void 0;var e,n=Yn(),t=(e=n)&&e.__esModule?e:{default:e};function o(e){return"AsyncFunction"===e[Symbol.toStringTag]}return zn.default=function(e){if("function"!=typeof e)throw new Error("expected a function");return o(e)?(0,t.default)(e):e},zn.isAsync=o,zn.isAsyncGenerator=function(e){return"AsyncGenerator"===e[Symbol.toStringTag]},zn.isAsyncIterable=function(e){return"function"==typeof e[Symbol.asyncIterator]},zn}var Zn,Xn,et,nt={exports:{}},tt={exports:{}};function ot(){return Zn||(Zn=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});n.default={},e.exports=n.default}(tt,tt.exports)),tt.exports}function st(){return et||(et=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});var t=function(){return En||(En=1,e=Fn,n=Fn.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),Fn.exports;var e,n}(),o=u(t),s=u(Ln()),r=function(){return Pn||(Pn=1,e=Cn,n=Cn.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),Cn.exports;var e,n}(),a=u(r),i=Hn(),c=(Xn||(Xn=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=ot())&&t.__esModule?t:{default:t};e.exports=n.default}(nt,nt.exports)),nt.exports),l=u(c),d=u(ot());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}(Sn,Sn.exports)),Sn.exports}var rt,at={exports:{}};var it,ct,lt,dt={exports:{}};function ut(){return it||(it=1,e=dt,n=dt.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),dt.exports;var e,n}function ft(){return ct||(ct=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});var t=i(st()),o=function(){return rt||(rt=1,e=at,n=at.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){return(n,t,o)=>e(n,o)},e.exports=n.default),at.exports;var e,n}(),s=i(o),r=i(Hn()),a=i(ut());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}(An,An.exports)),An.exports}var pt=D((lt||(lt=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});var t=s(ft()),o=s(ut());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}(In,In.exports)),In.exports));const yt=Oe("commands:jobs:download"),gt="download <jobroot>";var ht=Object.freeze({__proto__:null,builder:async e=>(yt("builder",gt),e.option("downloadTo",Ne.downloadTo.config)),command:gt,desc:"Download Job files",handler:async e=>{yt("handler",gt,e);const{hg:n,json:t,apikey:o,env:s,jobroot:r,downloadTo:c}=e,{clientApiBaseUri:l}=n;let d,u=N();try{d=be("Verifying user and authorizing"),!t&&u.start(be(`In progress: ${d}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:f}=await ze({debug:yt,baseUri:l,task:"job-download",env:s,apikey:o,jobroot:r}),p=new I.S3({accessKeyId:e,secretAccessKey:n,sessionToken:f});!t&&u.succeed(be(`Finished: ${d}.`,"secondary")),d=be("Scanning for downloadable files"),!t&&u.start(be(`In progress: ${d}...`,"secondary"));const y={Bucket:s,Prefix:r},{Contents:g}=await p.listObjectsV2(y).promise();if(yt("res",g),!g||0===g.length)return void(t?ke({status:"error",error:"Nothing to download!"}):(u.fail(be(`Error: ${d}.`,"secondary")),ve(be(`Message: ${be("Nothing to download!")}`,"secondary"))));if(!t&&u.succeed(be(`Finished: ${d}.`,"secondary")),!t){const e=new F({head:["File","Size","LastModified"]});g.forEach((n=>{const t=n.Key.substring(r.length+1);e.push([t,n.Size,n.LastModified.toLocaleString("en-US")])})),console.log(e.toString())}const h=i.resolve(process.cwd(),c,i.basename(r));await pt(g.filter((({Key:e})=>!new RegExp(`${r}/([^/]+)-config.json`).test(e))),(async e=>{d=be(`Downloading file: ${be(e.Key,"info")}`),!t&&u.start(be(`In progress: ${d}...`,"secondary"));const n=i.resolve(h,e.Key.substring(r.length+1));yt("file",n),await B(i.dirname(n),{recursive:!0});const o=p.getObject({Bucket:s,Key:e.Key}).createReadStream(),c=a(n,{flags:"w"});o.pipe(c),!t&&u.succeed(be(`Finished: ${d}.`,"secondary"))})),t?ke({status:"success",downloadedFiles:g.map((({Key:e})=>e))}):(d=be("Downloading job files."),u.succeed(be(`Finished: ${d}`,"secondary")))}catch(e){t?ke({status:"error",error:e}):(u.fail(be(`Error: ${d}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),yt(e),e&&e.response&&e.response.data&&yt("response",e.response.data))}}});const mt=(...e)=>{Oe("commands:jobs:list")(...e)},bt="list";var wt=Object.freeze({__proto__:null,builder:async e=>(mt("builder",bt),e.option("flow",Ne.flow.config).demandOption("flow",Ne.flow.demandText).option("tenant",{...Ne.tenant.config,default:"default"}).option("count",Ne.count.config)),command:bt,desc:"List jobs",handler:async e=>{mt("handler",bt,e);const{hg:n,json:t,apikey:o,env:s,flow:r,tenant:a,count:i}=e,{clientApiBaseUri:c}=n;let l,d=N();try{l=be(`Retrieving jobs for environment: ${be(s,"info")} flow: ${be(r,"info")} tenant: ${be(a,"info")}...`);const e=`${c}/${s}/${r}/${a}/jobs${i?`?count=${i}`:""}`;mt("requesting:",e),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const{data:n}=await U.get(e,{headers:{"x-api-key":o}});if(!t&&d.succeed(be(`Finished: ${l}.`,"secondary")),mt("response-data",n),!n||0===n.length)return void(t?ke([]):d.warn(be(`Warning: ${be("No jobs for the specified environment, flow and tenant")}.`,"secondary")));if(t)ke(n);else{const e=new F({head:["name","details"]});n.forEach((n=>e.push([n.job_name,JSON.stringify(n,void 0,2)]))),console.log(e.toString())}}catch(e){t?ke({status:"error",error:e}):(d.fail(be(`Error: ${l}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),mt(e),e&&e.response&&e.response.data&&mt("response",e.response.data))}}});const vt=[ht,wt],$t=Oe("commands:jobs"),_t="jobs <action>";var kt=Object.freeze({__proto__:null,builder:async function(e){$t("builder",_t);return(await Ue(e)).command(vt)},command:_t,desc:"Manage ETL jobs",handler:async function(e){$t("handler",_t,e)}});const jt=Oe("commands:snapshots:deploy"),Ot="deploy";var xt=Object.freeze({__proto__:null,builder:async e=>(jt("builder",Ot),e.option("tenant",{...Ne.tenant.config,default:"default"}).option("sourceFolder",Ne.sourceFolder.config).demandOption("sourceFolder",Ne.sourceFolder.demandText)),command:Ot,desc:"Deploy Snapshots",handler:async e=>{jt("handler",Ot,e);const{hg:n,json:t,apikey:o,env:s,tenant:r,sourceFolder:a}=e,{clientApiBaseUri:c}=n;let l,d=N();const u=i.resolve(process.cwd(),a);try{l=be(`Deploying Snapshots for Tenant ${be(r,"info")} to ${be(s,"info")}`),!t&&d.info(be(`Info: ${l}.`,"secondary"));const e=await Me(u,{recursive:!0});if(0===e.length)return void(t?ke({status:"error",error:"There are no files to deploy at the specified location!"}):d.fail(be(`Error: ${be("There are no files to deploy at the specified location!")}.`,"secondary")));l=be("Verifying user and authorizing");const{accessKeyId:n,secretAccessKey:f,sessionToken:p}=await ze({debug:jt,baseUri:c,task:"snapshot-deploy",env:s,tenant:r,apikey:o});!t&&d.succeed(be(`Finished: ${l}.`,"secondary"));const y=new I.S3({accessKeyId:n,secretAccessKey:f,sessionToken:p});l=be("Validating tenant exists"),!t&&d.start(be(`In progress: ${l}...`,"secondary"));try{const{CommonPrefixes:e}=await y.listObjectsV2({Bucket:s,Prefix:`${r}/`,Delimiter:"/"}).promise();if(0===e.length)throw new Error("Invalid tenant")}catch(e){throw jt("err",e),new Error("Tenant doesn't exist. Please check your tenant (-u) argument.")}!t&&d.succeed(be(`Finished: ${l}.`,"secondary"));const g=`${r}/snapshots/`,h=new F({head:["File","Status"]});l=be("Preparing deployment target"),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const{Contents:m}=await y.listObjectsV2({Bucket:s,Prefix:`${g}`}).promise();!t&&d.stop(),jt("contents",m),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const b=m.map((e=>({Key:e.Key})));if(b.length>0){const e={Bucket:s,Delete:{Objects:b,Quiet:!0}};await y.deleteObjects(e).promise(),b.forEach((({Key:e})=>h.push([e.substring(g.length),be("Deleted","warn")])))}!t&&d.succeed(be(`Finished: ${l}.`,"secondary"));for await(const n of e){const e=i.relative(a,n),o=`${g}${e}`;l=be(`Deploying file: ${be(e,"info")}`),!t&&d.start(be(`In progress: ${l}...`,"secondary"));const r={Bucket:s,Key:o,Body:await O(n)},c=await y.putObject(r).promise();!t&&d.succeed(be(`Finished: ${l}.`,"secondary")),jt("s3-put-res",c),h.push([e,be("Deployed","info")])}t?ke({status:"success",deployedFiles:e}):we(h.toString())}catch(e){t?ke({status:"error",error:e}):(d.fail(be(`Error: ${l}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),jt(e),e&&e.response&&e.response.data&&jt("response",e.response.data))}}});const Et=Oe("commands:snapshots:download"),Tt="download";var It=Object.freeze({__proto__:null,builder:async e=>(Et("builder",Tt),e.option("downloadTo",Ne.downloadTo.config).demandOption("downloadTo",Ne.downloadTo.demandText).option("tenant",{...Ne.tenant.config,default:"default"}).option("overwrite",Ne.overwrite.config).demandOption("overwrite",Ne.overwrite.demandText)),command:Tt,desc:"Download Snapshots",handler:async e=>{Et("handler",Tt,e);const{hg:n,json:t,apikey:o,env:s,tenant:a,downloadTo:c,overwrite:l}=e,{clientApiBaseUri:d}=n;let u,f=N();const p=i.resolve(process.cwd(),function(e){function n(e){return process.argv.indexOf(e)>-1}if(n(`--${e}`))return!0;const t=Ne[e]?.config?.alias||[];for(let e in t)if(n(`-${t[e]}`))return!0;return!1}("downloadTo")?c:"snapshots");try{u=be("Verifying user and authorizing"),!t&&f.start(be(`In progress: ${u}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:c}=await ze({debug:Et,baseUri:d,task:"snapshot-download",env:s,tenant:a,apikey:o}),y=new I.S3({accessKeyId:e,secretAccessKey:n,sessionToken:c});!t&&f.succeed(be(`Finished: ${u}.`,"secondary")),u=be("Validating tenant exists"),!t&&f.start(be(`In progress: ${u}...`,"secondary"));try{const{CommonPrefixes:e}=await y.listObjectsV2({Bucket:s,Prefix:`${a}/`,Delimiter:"/"}).promise();if(0===e.length)throw new Error("Invalid tenant")}catch(e){throw Et("err",e),new Error("Tenant doesn't exist. Please check your tenant (-u) argument.")}!t&&f.succeed(be(`Finished: ${u}.`,"secondary")),u=be("Scanning for downloadable files"),!t&&f.start(be(`In progress: ${u}...`,"secondary"));const g=`${a}/snapshots/`,h={Bucket:s,Prefix:g},{Contents:m}=await y.listObjectsV2(h).promise();!t&&f.succeed(be(`Finished: ${u}.`,"secondary")),Et("s3-list-res",m);const b=m?m.map((e=>e.Key)).filter((e=>e!==g)):[];if(!b||0===b.length)return void(t?ke({status:"success",downloadedFiles:[]}):f.warn(be(`Warning: ${be("Nothing to download!")}`,"secondary")));u=be(`Downloading snapshot files to ${be(p,"info")}`),!t&&f.info(be(`Info: ${u}.`,"secondary"));const w=new F({head:["File","Status"]});for await(const e of b){const n=e.substring(g.length),o=i.resolve(p,n);if(Et("file",o),e.endsWith("/")){!r(o)&&await _(o,{recursive:!0});continue}if(!l)try{await x(o),Et("exists, skipping"),w.push([n,"Skipped"]);continue}catch(e){"ENOENT"!==e.code&&we(e)}u=be(`Downloading file: ${be(n,"info")}`),!t&&f.start(be(`In progress: ${u}...`,"secondary")),await _(i.dirname(o),{recursive:!0});const a=y.getObject({Bucket:s,Key:e}).createReadStream();await k(o,await Pe(a)),!t&&f.succeed(be(`Finished: ${u}.`,"secondary")),w.push([n,"Downloaded"])}t?ke({status:"success",downloadedFiles:b}):we(w.toString())}catch(e){t?ke({status:"error",error:e}):(f.fail(be(`Error: ${u}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),Et(e),e&&e.response&&e.response.data&&Et("response",e.response.data))}}});const At=[xt,It],St=Oe("commands:snapshots"),Ft="snapshots <action>";var Nt=Object.freeze({__proto__:null,builder:async function(e){St("builder",Ft,e);return(await Ue(e)).command(At)},command:Ft,desc:"Manage tenant snapshots",handler:async function(e){St("handler",Ft,e)}});const Kt=Oe("commands:tenants:custom-etl"),Ut="custom-etl",Bt=async({debug:e,baseUri:n,apikey:t,env:o,flow:s,tenant:r,supportedSources:a})=>{const i=await Ge({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:d}=await ze({debug:e,baseUri:n,task:"etl-download",env:o,tenant:r,flow:s,tap:l,apikey:t}),u=new I.S3({accessKeyId:a,secretAccessKey:i,sessionToken:d}),f={Bucket:o,Prefix:`${r}/flows/${s}/taps/${l}/etl/`},{Contents:p}=await u.listObjectsV2(f).promise();if(p.some((({Key:e})=>e.endsWith("etl.py")||e.endsWith("etl.ipynb")))&&(c=r),null!==c)break}return c};var Dt=Object.freeze({__proto__:null,builder:async e=>(Kt("builder",Ut),e.option("tenant",Ne.tenant.config).option("flow",Ne.flow.config).demandOption("flow",Ne.flow.demandText)),command:Ut,desc:"List tenants with custom ETL in a specific flow",handler:async e=>{Kt("handler",Ut,e);const{hg:n,json:t,apikey:o,env:s,flow:r}=e;let a,i=N();try{a=be(`Retrieving tenants for environment ${be(s,"info")}`),!t&&i.start(be(`In progress: ${a}...`,"secondary"));const[e,c]=await Promise.all([Ve({debug:Kt,baseUri:n.clientApiBaseUri,apikey:o,env:s}),qe({debug:Kt,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r})]);!t&&i.succeed(be(`Finished: ${a}.`,"secondary"));let l=[];a=be(`Querying for custom ETL scripts for flow ${be(r,"info")}`),!t&&i.start(be(`In progress: ${a}...`,"secondary"));for(const t of Ce(e)){const e=await Promise.all(t.map((e=>Bt({debug:Kt,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r,tenant:e,supportedSources:c}))));l=l.concat(e.filter(Boolean))}if(!t&&i.succeed(be(`Finished: ${a}.`,"secondary")),t)ke(l);else{const e=new F({head:["Tenant ID"]});e.push(...l.map((e=>[e]))),console.log(e.toString())}}catch(e){t?ke({status:"error",error:e}):(i.fail(be(`Error: ${a}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),Kt(e),e&&e.response&&e.response.data&&Kt("response",e.response.data))}}});const Mt=Oe("commands:tenants:custom-field-map"),Lt="custom-field-map",Pt=async({debug:e,baseUri:n,apikey:t,env:o,flow:s,tenant:r,isV2Flow:a})=>{const i=a?await We({debug:e,baseUri:n,env:o,flow:s,tenant:r,apikey:t}):await Ge({debug:e,baseUri:n,env:o,flow:s,tenant:r,apikey:t}),c=[],{accessKeyId:l,secretAccessKey:d,sessionToken:u}=await ze({debug:e,baseUri:n,task:"field-map-download",env:o,tenant:r,flow:s,apikey:t}),f=new I.S3({accessKeyId:l,secretAccessKey:d,sessionToken:u});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 f.headObject(t).promise(),c.push(a?e:n)}catch(e){}}return{tenant:r,connectors:c}};var Ct=Object.freeze({__proto__:null,builder:async e=>(Mt("builder",Lt),e.option("tenant",Ne.tenant.config).option("flow",Ne.flow.config).demandOption("flow",Ne.flow.demandText)),command:Lt,desc:"List tenants with custom field map in a specific flow",handler:async e=>{Mt("handler",Lt,e);const{hg:n,json:t,apikey:o,env:s,flow:r}=e;let a,i=N();try{a=be(`Retrieving tenants for environment ${be(s,"info")}`),!t&&i.start(be(`In progress: ${a}...`,"secondary"));const[e,c]=await Promise.all([Ve({debug:Mt,baseUri:n.clientApiBaseUri,apikey:o,env:s}),Je({debug:Mt,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r})]),l=2===c?.version;!t&&i.succeed(be(`Finished: ${a}.`,"secondary"));const d=[];a=be(`Querying for custom field maps for flow ${be(r,"info")}`),!t&&i.start(be(`In progress: ${a}...`,"secondary"));for(const t of Ce(e)){const e=await Promise.all(t.map((e=>Pt({debug:Mt,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(be(`Finished: ${a}.`,"secondary")),t)ke(d);else{const e=new F({head:["Tenant ID","Connector IDs"]});e.push(...d.map((({tenant:e,connectors:n})=>[e,n.join(", ")]))),console.log(e.toString())}}catch(e){t?ke({status:"error",error:e}):(i.fail(be(`Error: ${a}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),Mt(e),e&&e.response&&e.response.data&&Mt("response",e.response.data))}}});const Rt=Oe("commands:tenants:delete"),zt="delete";var Vt=Object.freeze({__proto__:null,builder:async e=>(Rt("builder",zt),e.option("tenant",Ne.tenant.config)),command:zt,desc:"Delete tenant",handler:async e=>{Rt("handler",zt,e);const{hg:n,json:t,apikey:o,env:s,tenant:r}=e,{clientApiBaseUri:a}=n;let i,c=N();try{if("default"===r)throw new Error('It\'s not possible to delete "default" tenant!');i=be(`Deleting tenant ${r} schedules`),!t&&c.start(be(`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 U.delete(a,{headers:r});return i})({debug:Rt,baseUri:a,env:s,apikey:o,tenant:r}),!t&&c.succeed(be(`Finished: ${i}.`,"secondary")),i=be("Verifying user and authorizing"),!t&&c.start(be(`In progress: ${i}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:l}=await ze({debug:Rt,baseUri:a,task:"tenant-delete",env:s,tenant:r,apikey:o});!t&&c.succeed(be(`Finished: ${i}.`,"secondary"));const d=new I.S3({accessKeyId:e,secretAccessKey:n,sessionToken:l});for(i=be(`Deleting tenant ${r} for environment ${be(s,"info")}`),!t&&c.start(be(`In progress: ${i}...`,"secondary"));;){const e=((await d.listObjectsV2({Bucket:s,Prefix:`${r}/`}).promise()).Contents||[]).map((({Key:e})=>({Key:e})));if(0===e.length)break;await d.deleteObjects({Bucket:s,Delete:{Objects:e}}).promise()}if(!t&&c.succeed(be(`Finished: ${i}.`,"secondary")),t)ke({statu:"success",tenantDeleted:r});else{const e=new F({head:["Tenant ID"]});e.push([r]),console.log(e.toString())}}catch(e){t?ke({status:"error",error:e}):(c.fail(be(`Error: ${i}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),Rt(e),e&&e.response&&e.response.data&&Rt("response",e.response.data))}}});const qt=Oe("commands:tenants:list"),Gt="list";var Wt=Object.freeze({__proto__:null,builder:async e=>(qt("builder",Gt),e.option("tenant",Ne.tenant.config)),command:Gt,desc:"List tenants",handler:async e=>{qt("handler",Gt,e);const{hg:n,json:t,apikey:o,env:s,tenant:r}=e;let a,i=N();try{a=be(`Retrieving tenants for environment ${be(s,"info")}`);const e=`${n.clientApiBaseUri}/tenants/${s}${r?`?tenant=${r}`:""}`;qt("requesting:",e),!t&&i.start(be(`In progress: ${a}...`,"secondary"));const{data:c}=await U.get(e,{headers:{"x-api-key":o}});if(!t&&i.succeed(be(`Finished: ${a}.`,"secondary")),qt("response-data",c),!c||0===c.length)return void(t?ke([]):i.info(be(`Info: ${be("No tenants found in the specified environment")}.`,"secondary")));if(t)ke(c);else{const e=new F({head:["tenant ID"]});e.push(...c.map((e=>[e]))),console.log(e.toString())}}catch(e){t?ke({status:"error",error:e}):(i.fail(be(`Error: ${a}.`,"secondary")),ve(be(`Message: ${be(e.message)}`,"secondary")),qt(e),e&&e.response&&e.response.data&&qt("response",e.response.data))}}});const Jt=[Dt,Ct,Vt,Wt],Qt=Oe("commands:tenants"),Yt="tenants <action>";var Ht=Object.freeze({__proto__:null,builder:async function(e){Qt("builder",Yt);return(await Ue(e)).command(Jt)},command:Yt,desc:"Manage tenants",handler:async function(e){Qt("handler",Yt,e)}});const Zt=[Fe,sn,vn,Tn,kt,Nt,Ht];process.env.AWS_SDK_JS_SUPPRESS_MAINTENANCE_MODE_MESSAGE="1";he({});const Xt=h(process.argv.slice(2));Xt.usage(be("Usage: $0 <command>")).command(Zt).demandCommand().alias("v","version").alias("h","help").string("_").strictCommands().epilogue(be("For more information, visit https://docs.hotglue.xyz/docs/cli-overview")).wrap(Math.min(Xt.terminalWidth(),90)).parse(process.argv.slice(W()+1),ce);
34
34
  //# sourceMappingURL=index.js.map