@hotglue/cli 1.0.31 → 1.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/index.js +3 -3
- package/lib/cjs/index.js.map +1 -1
- package/lib/mjs/index.js +2 -2
- package/lib/mjs/index.js.map +1 -1
- package/package.json +1 -1
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 w}from"util";import{notStrictEqual as b,strictEqual as v}from"assert";import{fileURLToPath as $}from"url";import{mkdir as k,writeFile as _,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 S from"debug";import I from"yaml";import F from"cli-table";import U from"ora";import N from"micromatch";import K 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,
|
|
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 w}from"util";import{notStrictEqual as b,strictEqual as v}from"assert";import{fileURLToPath as $}from"url";import{mkdir as k,writeFile as _,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 S from"debug";import I from"yaml";import F from"cli-table";import U from"ora";import N from"micromatch";import K 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 P,M,C,L,R,z,V,q={};function W(){if(P)return q;P=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,W().config(Object.assign({},function(){if(C)return M;C=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),M=e}(),function(){if(R)return L;R=1;const e=/^dotenv_config_(encoding|path|debug|override)=(.+)$/;return L=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}
|
|
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 w=null;Object.keys(g.counts).find((e=>N(e,g.arrays)?(w=Error(y("Invalid configuration: %s, opts.count excludes opts.array.",e)),!0):!!N(e,g.nargs)&&(w=Error(y("Invalid configuration: %s, opts.count excludes opts.narg.",e)),!0)));let b=[];const v=Object.assign(Object.create(null),{_:[]}),$={};for(let e=0;e<o.length;e++){const n=o[e],t=n.replace(/^-{3,}/,"---");let s,r,i,c,l,d;if("--"!==n&&B(n))k(n);else{if(t.match(/---+(=|$)/)){k(n);continue}if(n.match(/^--.+=/)||!a["short-option-groups"]&&n.match(/^-.+=/))c=n.match(/^--?([^=]+)=([\s\S]*)$/),null!==c&&Array.isArray(c)&&c.length>=3&&(N(c[1],g.arrays)?e=j(e,c[1],o,c[2]):!1!==N(c[1],g.nargs)?e=_(e,c[1],o,c[2]):O(c[1],c[2],!0));else if(n.match(m)&&a["boolean-negation"])c=n.match(m),null!==c&&Array.isArray(c)&&c.length>=2&&(r=c[1],O(r,!!N(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],N(r,g.arrays)?e=j(e,r,o):!1!==N(r,g.nargs)?e=_(e,r,o):(l=o[e+1],void 0===l||l.match(/^-/)&&!l.match(h)||N(r,g.bools)||N(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(/^-/)||N(r,g.bools)||N(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],N(r,g.arrays)?e=j(e,r,o,d):!1!==N(r,g.nargs)?e=_(e,r,o,d):O(r,d),s=!0;break}if("-"!==l){if(/[A-Za-z]/.test(i[t])&&/^-?\d+(\.\d*)?(e-?\d+)?$/.test(l)&&!1===N(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||(N(r,g.arrays)?e=j(e,r,o):!1!==N(r,g.nargs)?e=_(e,r,o):(l=o[e+1],void 0===l||/^(-|--)[^-]/.test(l)&&!l.match(h)||N(r,g.bools)||N(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)&&N(n.slice(1),g.bools))r=n.slice(1),O(r,D(r));else{if("--"===n){b=o.slice(e+1);break}if(a["halt-at-non-option"]){b=o.slice(e);break}k(n)}}}function k(e){const n=T("_",e);"string"!=typeof n&&"number"!=typeof n||v._.push(n)}function _(e,n,t,o){let s,r=N(n,g.nargs);if(r="number"!=typeof r||isNaN(r)?1:r,0===r)return M(o)||(w=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&&(w=Error(y("Not enough arguments following: %s",n))),i=r;else{for(s=e+1;s<t.length&&(!t[s].match(/^-[^0-9]/)||t[s].match(h)||B(t[s]));s++)i++;i<r&&(w=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=N(n,g.nargs);if(N(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)&&(w=Error(y("Not enough arguments following: %s",n))),O(n,r),e}function O(e,n,t=s){if(/-/.test(e)&&a["camel-case-expansion"]){const n=e.split(".").map((function(e){return J(e)})).join(".");x(e,n)}const o=E(e,n,t),r=e.split(".");if(U(v,r,o),g.aliases[e]&&g.aliases[e].forEach((function(e){const n=e.split(".");U(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("."))||U(v,t,o)})),N(e,g.normalize)&&!N(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)),(N(e,g.bools)||N(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 N(e,g.counts)&&(M(o)||"boolean"==typeof o)&&(o=Z()),N(e,g.normalize)&&N(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(!N(e,g.strings)&&!N(e,g.bools)&&!Array.isArray(n)){(Y(n)&&a["parse-numbers"]&&Number.isSafeInteger(Math.floor(parseFloat(`${n}`)))||!M(n)&&N(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("."))||N(s,g.arrays)&&a["combine-arrays"])&&O(s,o)}))}function S(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 I(e,n,t,o=!1){Object.keys(t).forEach((function(s){F(e,s.split("."))||(U(e,s.split("."),t[s]),o&&(p[s]=!0),(n[s]||[]).forEach((function(n){F(e,n.split("."))||U(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 U(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=N(n.join("."),g.arrays),i=Array.isArray(t);let c=a["duplicate-arguments-array"];!c&&N(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]||N(s,g.counts)||N(s,g.bools)?o[s]=t:o[s]=[o[s],t]}function N(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 K(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),!K(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&&K(t[1])}))}(e,/^-+([^=]+?)=[\s\S]*$/,m,/^-+([^=]+?)$/,/^-+([^=]+?)-$/,/^-+([^=]+?\d+)$/,/^-+([^=]+?)\W+.*$/)}(e)}function D(e){return N(e,g.bools)||N(e,g.counts)||!(`${e}`in i)?(n=function(e){let n=V.BOOLEAN;return N(e,g.strings)?n=V.STRING:N(e,g.numbers)?n=V.NUMBER:N(e,g.bools)?n=V.BOOLEAN:N(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 S(v,!0),S(v,!1),function(e){const n=Object.create(null);I(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(w=e)}else e=H.require(n);A(e)}catch(n){"PermissionDenied"===n.name?w=n:e[t]&&(w=Error(y("Invalid JSON config file: %s",o)))}}))}(v),void 0!==c&&c.forEach((function(e){A(e)})),I(v,g.aliases,i,!0),function(e){let n;const t=new Set;Object.keys(e).forEach((function(o){if(!t.has(o)&&(n=N(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){w=e}}))}(v),a["set-placeholder-key"]&&function(e){g.keys.forEach((n=>{~n.indexOf(".")||void 0===e[n]&&(e[n]=void 0)}))}(v),Object.keys(g.counts).forEach((function(e){F(v,e.split("."))||O(e,0)})),d&&b.length&&(v[u]=[]),b.forEach((function(e){v[u].push(e)})),a["camel-case-expansion"]&&a["strip-dashed"]&&Object.keys(v).filter((e=>"--"!==e&&e.includes("-"))).forEach((e=>{delete v[e]})),a["strip-aliased"]&&[].concat(...Object.keys(r).map((e=>r[e]))).forEach((e=>{a["camel-case-expansion"]&&e.includes("-")&&delete v[e.split(".").map((e=>J(e))).join(".")],delete v[e]})),{aliases:Object.assign({},g.aliases),argv:Object.assign($,v),configuration:a,defaulted:Object.assign({},p),error:w,newAliases:Object.assign({},f)}}}({cwd:process.cwd,env:()=>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},ke}function me(e){process.stdout.write(e)}const we=(e,n=ge)=>{if(!e)return"";if("string"==typeof e)return ye[n]?ye[n](e):ye[ge](e);const t=w(e,{colors:!0});return ye[n]?ye[n](t):t};function be(...e){return console.log(...e),ke}function ve(e,n){return me(we(e,n)),me("\n"),ke}function $e(e,n){return me(we(e,n)),ke}const ke={cl:be,pr:ve,pp:$e,setTheme:he,setDefault:function(e="primary"){return ye[e]&&(ge=e),ke}},_e=e=>{console.log(JSON.stringify(e))},je=S("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=I.stringify(s),a=e&&e.filepath?e.filepath:de();await(async(e,n)=>{await k(i.dirname(e),{recursive:!0}),await _(e,n)})(a,r),n?_e({status:"success"}):$e("Done").pr()}catch(e){n?_e({status:"error",error:e}):console.log(e)}else n?_e({status:"error",error:"Invalid settings parameter"}):console.error("Invalid settings parameter")}});const Ae=[Te],Se=Oe("commands:config"),Ie="config [action]";var Fe=Object.freeze({__proto__:null,builder:async function(e){return Se("builder",Ie),e.command(Ae)},command:Ie,desc:"Configure your hotglue CLI",handler:async function(e){Se("handler",Ie,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}}}),Ue={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 Ne=Oe("base"),Ke=async e=>{Ne("builder");const n=await(async()=>{const e=await ue(),n=await fe();return{...le,...e.config,...n.config}})();return e.option("apikey",Ue.apikey.config).option("env",Ue.env.config).option("json",Ue.json.config).config(n).demandOption(["env"],Ue.env.demandText).demandOption(["apikey"],Ue.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=N.matcher(o,{dot:!0})),De(e,t)},Pe=(e,n)=>{Be("filter-in",e);const{pattern:t}={...n};let o=e;return t&&(o=N(o,t)),Be("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},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 K.get(a,{headers:r});return i},Ge=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},We=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},Je=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},Qe=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},Ye=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},He=S("commands:env:validators"),Ze=async(e,n,t,o,s)=>{if(!Array.isArray(e))throw new Error("availableSources.json must be an array of objects");const r=(await Promise.all(o.filter((e=>1==e.version)).map((async e=>await qe({debug:He,baseUri:n,env:s,flow:e.id,apikey:t}))))).flat(),a=e.map((e=>{if(!e.tap)throw new Error(`Source ${JSON.stringify(e)} has no tap id`);return e.tap})),i=a.filter(((e,n)=>a.indexOf(e)!==n));if(i.length>0)throw new Error(`Duplicate source id(s) found in availableSources.json: ${i.join(", ")}. All sources must have a unique tap id.`);const c=r.filter((e=>e.isForked&&!a.includes(e.tap)));if(c.length>0)throw new Error(`Sources ${c.map((e=>e.label)).join(", ")} are linked, but missing from your availableSources.json`)},Xe=async(e,n,t,o,s)=>{if(!Array.isArray(e))throw new Error("availableTargets.json must be an array of objects");const r=(await Promise.all(o.filter((e=>1==e.version)).map((async e=>{const o=await(async({debug:e,baseUri:n,env:t,flow:o,apikey:s})=>{const r={"x-api-key":s},a=new URL(`${n}/${t}/${o}/supportedTargets`).toString();e&&e("uri:",a);const{data:i}=await K.get(a,{headers:r});return i})({debug:He,baseUri:n,env:s,flow:e.id,apikey:t});return o})))).flat(),a=e.map((e=>{if(!e.target)throw new Error(`Target ${JSON.stringify(e)} has no target id`);return e.target})),i=a.filter(((e,n)=>a.indexOf(e)!==n));if(i.length>0)throw new Error(`Duplicate target id(s) found in availableTargets.json: ${i.join(", ")}. All targets must have a unique target id.`);const c=r.filter((e=>e.isForked&&!a.includes(e.target)));if(c.length>0)throw new Error(`Targets ${c.map((e=>e.label)).join(", ")} are linked, but missing from your availableTargets.json`)},en=async(e,n,t,o,s)=>{if(!Array.isArray(e))throw new Error("availableConnectors.json must be an array of objects");const r=(await Promise.all(o.filter((e=>2==e.version)).map((async e=>await Ge({debug:He,baseUri:n,env:s,flow:e.id,apikey:t}))))).flat(),a=e.map((e=>{if(!e.id)throw new Error(`Connector ${JSON.stringify(e)} has no id`);return e.id})),i=a.filter(((e,n)=>a.indexOf(e)!==n));if(i.length>0)throw new Error(`Duplicate connector id(s) found in availableConnectors.json: ${i.join(", ")}. All connectors must have a unique id.`);const c=r.filter((e=>e.isForked&&!a.includes(e.id)));if(c.length>0)throw new Error(`Connectors ${c.map((e=>e.id)).join(", ")} are linked, but missing from your availableConnectors.json`)},nn=Oe("commands:env:deploy"),tn="deploy";var on=Object.freeze({__proto__:null,builder:async e=>(nn("builder",tn),e.option("sourceFolder",Ue.sourceFolder.config).demandOption("sourceFolder",Ue.sourceFolder.demandText)),command:tn,desc:"Deploy Environment settings",handler:async e=>{nn("handler",tn,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=U();try{l=we(`Scanning ${we(c,"info")} for deployable files`),!t&&d.start(we(`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?_e({status:"error",error:"There are no files to deploy at the specified location!"}):(d.fail(we(`Error: ${l}.`,"secondary")),ve(we(`Message: ${we("There are no files to deploy at the specified location!")}`,"secondary"))));!t&&d.succeed(we(`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)}`)}const n=await Qe({debug:nn,baseUri:a,env:s,apikey:o});for(const t of e){if(t.endsWith("availableSources.json")){const e=JSON.parse(await O(t,{encoding:"utf-8"}));await Ze(e,a,o,n,s)}if(t.endsWith("availableTargets.json")){const e=JSON.parse(await O(t,{encoding:"utf-8"}));await Xe(e,a,o,n,s)}if(t.endsWith("availableConnectors.json")){const e=JSON.parse(await O(t,{encoding:"utf-8"}));await en(e,a,o,n,s)}}l=we("Verifying user and authorizing"),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const{accessKeyId:r,secretAccessKey:u,sessionToken:f}=await ze({debug:nn,baseUri:a,task:"env-deploy",env:s,apikey:o});!t&&d.succeed(we(`Finished: ${l}.`,"secondary"));const p=new A.S3({accessKeyId:r,secretAccessKey:u,sessionToken:f});l=we("Deploying environment files"),!t&&d.info(we(`Info: ${l}.`,"secondary"));const y="config/",g=new F({head:["File","Status"]});for await(const n of e){const e=i.basename(n);l=we(`Pushing file: ${we(e,"info")}`),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const r={Bucket:s,Key:`${y}${e}`,Body:await O(n)},c=await p.putObject(r).promise();!t&&d.succeed(we(`Finished: ${l}.`,"secondary")),nn("s3-put-res",c),g.push([e,"Deployed"]),await Re({debug:nn,baseUri:a,env:s,apiKey:o})}t?_e({status:"success",deployedFiles:e}):be(g.toString())}catch(e){!t&&d.fail(we(`Error: ${l}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),nn(e),e&&e.response&&e.response.data&&nn("response",e.response.data)}}});const sn=Oe("commands:env:download"),rn="download";var an=Object.freeze({__proto__:null,builder:async e=>(sn("builder",rn),e.option("downloadTo",Ue.downloadTo.config)),command:rn,desc:"Download Environment settings",handler:async e=>{sn("handler",rn,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=U();try{l=we("Verifying user and authorizing"),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:r}=await ze({debug:sn,baseUri:a,task:"env-download",env:s,apikey:o});!t&&d.succeed(we(`Finished: ${l}.`,"secondary"));const u=new A.S3({accessKeyId:e,secretAccessKey:n,sessionToken:r});l=we(`Scanning environment ${we(s,"info")}`),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const f={Bucket:s,Prefix:"config/"},{Contents:p}=await u.listObjectsV2(f).promise();!t&&d.succeed(we(`Finished: ${l}.`,"secondary")),sn("s3-files",p);const y=p?Pe(p.map((e=>e.Key)),{pattern:"((*/requirements.txt)|(*/availableSources.json)|(*/availableTargets.json)|(*/availableConnectors.json)|(*/customTaps.json))"}):[];if(!y||0===y.length)return void(t?_e({status:"success",downloadedFiles:[]}):d.warn(we(`Warning: ${we("Nothing to download!")}`,"secondary")));l=we(`Downloading to ${we(c,"info")}`),!t&&d.info(we(`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);sn("local-file",o),await k(i.dirname(o),{recursive:!0}),l=we(`Downloading file: ${we(n,"info")}`),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const r=u.getObject({Bucket:s,Key:e}).createReadStream();await _(o,await Le(r)),!t&&d.succeed(we(`Finished: ${l}.`,"secondary")),g.push([n,"Downloaded"])}t?_e({status:"success",downloadedFiles:y}):be(g.toString())}catch(e){t?_e({status:"error",error:e}):(d.fail(we(`Error: ${l}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),sn(e),e&&e.response&&e.response.data&&sn("response",e.response.data))}}});const cn=[on,an],ln=Oe("commands:env"),dn="env <action>";var un=Object.freeze({__proto__:null,builder:async function(e){ln("builder",dn);return(await Ke(e)).command(cn)},command:dn,desc:"Manage environment settings",handler:async function(e){ln("handler",dn,e)}});const fn=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}},pn=async(e,n,t,o,s=void 0)=>s??await fn(e,n,t,o)?"connectors":"taps",yn=Oe("commands:etl:delete"),gn="delete";var hn=Object.freeze({__proto__:null,builder:async e=>(yn("builder",gn),e.option("flow",Ue.flow.config).demandOption("flow",Ue.flow.demandText).option("tap",Ue.tap.config).demandOption("tap",Ue.tap.demandText).option("tenant",{...Ue.tenant.config}).demandOption("tenant",Ue.tenant.demandText)),command:gn,desc:"Delete ETL scripts",handler:async e=>{yn("handler",gn,e);const{hg:n,json:t,apikey:o,env:s,flow:r,tap:a,tenant:i}=e,{clientApiBaseUri:c}=n;let l,d=U();try{l=we(`Deleting ETL scripts for Tenant ${we(i,"info")} Flow ${we(r,"info")} and Tap ${we(a,"info")} to ${we(s,"info")}`),!t&&d.info(we(`Info: ${l}.`,"secondary")),l=we("Verifying user and authorizing"),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:u}=await ze({debug:yn,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(we(`Finished: ${l}.`,"secondary")),l=we("Deleting ETL scripts"),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const p=`${i}/flows/${r}/${await pn(f,s,i,r)}/${a}/etl/`,y=await f.listObjectsV2({Bucket:s,Prefix:p}).promise();if(yn("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();yn("s3-list-objects-res",e)}const g=await f.deleteObject({Bucket:s,Key:p}).promise();if(yn("s3-delete-object-res",g),!t&&d.succeed(we(`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,we("Deleted","info")])})),t?_e({status:"success",deletedObjects:(y.Contents??[]).map((({Key:e})=>e))}):be(e.toString())}else l=we("There was no file or folder to be deleted"),t?_e({status:"success",deletedObjects:[]}):d.info(we(`Info: ${l}.`,"secondary"))}catch(e){t?_e({status:"error",error:e}):(d.fail(we(`Error: ${l}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),yn(e),e&&e.response&&e.response.data&&yn("response",e.response.data))}}});const mn=Oe("commands:etl:deploy"),wn="deploy";var bn=Object.freeze({__proto__:null,builder:async e=>(mn("builder",wn),e.option("flow",Ue.flow.config).demandOption("flow",Ue.flow.demandText).option("tap",Ue.tap.config).option("all",Ue.all.config).option("tenant",{...Ue.tenant.config,default:"default"}).option("sourceFolder",Ue.sourceFolder.config).demandOption("sourceFolder",Ue.sourceFolder.demandText)),command:wn,desc:"Deploy ETL scripts",handler:async e=>{mn("handler",wn,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(`${Ue.tap.demandText} Or you can pass the --all flag to run this command for all taps/connectors.`);let f,p=U();const y=i.resolve(process.cwd(),d);try{f=we(`Deploying script for Tenant ${we(l,"info")} Flow ${we(r,"info")}${a?` and Tap ${we(a,"info")}`:""} to ${we(s,"info")}`),!t&&p.info(we(`Info: ${f}.`,"secondary"));const e=await Me(y,{recursive:!0,filter:{pattern:"!((**/sync-output)|(**/etl-output)|(**/snapshots))"}});if(0===e.length)return void(t?_e({status:"error",error:"There are no files to deploy at the specified location!"}):p.fail(we(`Error: ${we("There are no files to deploy at the specified location!")}.`,"secondary")));f=we("Verifying user and authorizing"),!t&&p.start(we(`In progress: ${f}...`,"secondary"));const n={debug:mn,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(we(`Finished: ${f}.`,"secondary"));const m=new A.S3({accessKeyId:c,secretAccessKey:g,sessionToken:h}),w=await fn(m,s,l,r);f=we("Validating flow and tap location"),!t&&p.start(we(`In progress: ${f}...`,"secondary"));const b=(await Qe({debug:mn,baseUri:u,apikey:o,env:s})).find((({id:e})=>e===r));let v=[];try{if("default"===l||b?.type){if(v=((w?await Ge({debug:mn,baseUri:u,env:s,flow:r,apikey:o}):await qe({debug:mn,baseUri:u,env:s,flow:r,apikey:o}))??[]).filter((e=>!a||e[w?"id":"tap"]===a)),a&&0===v.length)throw new Error("Tap is not supported")}else{if(v=((w?await Je({debug:mn,baseUri:u,env:s,flow:r,tenant:l,apikey:o}):await We({debug:mn,baseUri:u,env:s,flow:r,tenant:l,apikey:o}))??[]).filter((e=>!a||e[w?"id":"tap"]===a)),a&&0===v.length)throw new Error("Tap is not linked")}}catch(e){throw mn("err",e),new Error("Target location doesn't exist. Check your tenant, flow and tap arguments.")}!t&&p.succeed(we(`Finished: ${f}.`,"secondary"));const $=new F({head:["File","Status"]});for(const n of v){const o=n[w?"id":"tap"];f=we(`Preparing ${o} deployment target`),!t&&p.start(we(`In progress: ${f}...`,"secondary"));const a=`${l}/flows/${r}/${await pn(null,null,null,null,w)}/${o}/etl/`,{Contents:c}=await m.listObjectsV2({Bucket:s,Prefix:`${a}`}).promise();!t&&p.succeed(we(`Finished: ${f}.`,"secondary")),mn("contents",c);const u=c.map((e=>({Key:e.Key})));if(u.length>0){f=we(`Removing old ${o} ETL files`),!t&&p.start(we(`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)}`,we("Deleted","warn")]))),!t&&p.succeed(we(`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=we(`Deploying file: ${we(`${o}/${e}`,"info")}`),!t&&p.start(we(`In progress: ${f}...`,"secondary"));const c={Bucket:s,Key:r,Body:await O(n)},l=await m.putObject(c).promise();!t&&p.succeed(we(`Finished: ${f}.`,"secondary")),mn("s3-put-res",l),$.push([`${o}/${e}`,we("Deployed","info")])}}t?_e({status:"success",deployedFiles:e}):be($.toString())}catch(e){t?_e({status:"error",error:e}):(p.fail(we(`Error: ${f}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),mn(e),e&&e.response&&e.response.data&&mn("response",e.response.data))}}});const vn=Oe("commands:etl:download"),$n="download";var kn=Object.freeze({__proto__:null,builder:async e=>(vn("builder",$n),e.option("flow",Ue.flow.config).demandOption("flow",Ue.flow.demandText).option("tap",Ue.tap.config).demandOption("tap",Ue.tap.demandText).option("downloadTo",Ue.downloadTo.config).demandOption("downloadTo",Ue.downloadTo.demandText).option("tenant",{...Ue.tenant.config,default:"default"}).option("overwrite",Ue.overwrite.config).demandOption("overwrite",Ue.overwrite.demandText)),command:$n,desc:"Download ETL scripts",handler:async e=>{vn("handler",$n,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=U();const g=i.resolve(process.cwd(),d);try{p=we("Verifying user and authorizing"),!t&&y.start(we(`In progress: ${p}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:d}=await ze({debug:vn,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(we(`Finished: ${p}.`,"secondary")),p=we("Scanning for downloadable files"),!t&&y.start(we(`In progress: ${p}...`,"secondary"));const m=`${l}/flows/${a}/${await pn(h,s,l,a)}/${c}/etl/`,w={Bucket:s,Prefix:m},{Contents:b}=await h.listObjectsV2(w).promise();!t&&y.succeed(we(`Finished: ${p}.`,"secondary")),vn("s3-list-res",b);const v=b?Pe(b.map((e=>e.Key)),{pattern:"!(.ipynb_checkpoints/*)"}):[];if(!v||0===v.length)return void(t?_e({status:"success",downloadedFiles:[]}):y.warn(we(`Warning: ${we("Nothing to download!")}`,"secondary")));p=we(`Downloading script files to ${we(g,"info")}`),!t&&y.info(we(`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(vn("file",o),e.endsWith("/")){!r(o)&&await k(o,{recursive:!0});continue}if(!u)try{await x(o),vn("exists, skipping"),$.push([n,"Skipped"]);continue}catch(e){"ENOENT"!==e.code&&be(e)}p=we(`Downloading file: ${we(n,"info")}`),!t&&y.start(we(`In progress: ${p}...`,"secondary")),await k(i.dirname(o),{recursive:!0});const a=h.getObject({Bucket:s,Key:e}).createReadStream();await _(o,await Le(a)),!t&&y.succeed(we(`Finished: ${p}.`,"secondary")),$.push([n,"Downloaded"])}t?_e({status:"success",downloadedFiles:v}):be($.toString())}catch(e){t?_e({status:"error",error:e}):(y.fail(we(`Error: ${p}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),vn(e),e&&e.response&&e.response.data&&vn("response",e.response.data))}}});const _n=[hn,bn,kn],jn=Oe("commands:etl"),On="etl <action>";var xn=Object.freeze({__proto__:null,builder:async function(e){jn("builder",On);return(await Ke(e)).command(_n)},command:On,desc:"Manage ETL scripts",handler:async function(e){jn("handler",On,e)}});const En=Oe("commands:flows:list"),Tn="list";var An=Object.freeze({__proto__:null,builder:async e=>(En("builder",Tn),e.option("tenant",{...Ue.tenant.config})),command:Tn,desc:"List flows",handler:async e=>{En("handler",Tn,e);const{hg:n,json:t,apikey:o,env:s,tenant:r}=e,{clientApiBaseUri:a}=n;let i,c=U();try{i=we(`Retrieving ${r?`${we(r,"info")} tenant's`:"the"} flows for environment: ${we(s,"info")}`);const e=`${a}/${s}/flows/${r?`linked?user_id=${r}`:"supported"}`;En("requesting:",e),!t&&c.start(we(`In progress: ${i}...`,"secondary"));const{data:n}=await K.get(e,{headers:{"x-api-key":o}});if(!t&&c.succeed(we(`Finished: ${i}.`,"secondary")),En("response-data",n),!n||0===n.length)return void(t?_e([]):c.warn(we(`Warning: ${we("No flows for specified environment and tenant")}.`,"secondary")));if(t)_e(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?w(n.taps):"",n.targets?w(n.targets):"none"]))),console.log(e.toString())}}catch(e){t?_e({status:"error",error:e}):(c.fail(we(`Error: ${i}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),En(e),e&&e.response&&e.response.data&&En("response",e.response.data))}}});const Sn=[An],In=Oe("commands:flows"),Fn="flows <action>";var Un,Nn=Object.freeze({__proto__:null,builder:async function(e){In("builder",Fn);return(await Ke(e)).command(Sn)},command:Fn,desc:"Manage flows",handler:async function(e){In("handler",Fn,e)}}),Kn={exports:{}},Bn={exports:{}},Dn={exports:{}},Mn={exports:{}};var Pn,Ln={exports:{}},Cn={exports:{}};var Rn,zn,Vn={exports:{}};function qn(){return zn||(zn=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 Pn||(Pn=1,e=Cn,n=Cn.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),Cn.exports;var e,n}(),o=a(t),s=function(){return Rn||(Rn=1,e=Vn,n=Vn.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){return e[Symbol.iterator]&&e[Symbol.iterator]()},e.exports=n.default),Vn.exports;var e,n}(),r=a(s);function a(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default}(Ln,Ln.exports)),Ln.exports}var Gn,Wn={exports:{}};var Jn,Qn={},Yn={exports:{}},Hn={exports:{}};var Zn,Xn,et,nt={};function tt(){return Xn||(Xn=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 Jn||(Jn=1,e=Hn,n=Hn.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),Hn.exports;var e,n}(),o=i(t),s=function(){if(Zn)return nt;Zn=1,Object.defineProperty(nt,"__esModule",{value:!0}),nt.fallback=s,nt.wrap=r;var e,n=nt.hasQueueMicrotask="function"==typeof queueMicrotask&&queueMicrotask,t=nt.hasSetImmediate="function"==typeof setImmediate&&setImmediate,o=nt.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,nt.default=r(e),nt}(),r=i(s),a=ot();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}(Yn,Yn.exports)),Yn.exports}function ot(){if(et)return Qn;et=1,Object.defineProperty(Qn,"__esModule",{value:!0}),Qn.isAsyncIterable=Qn.isAsyncGenerator=Qn.isAsync=void 0;var e,n=tt(),t=(e=n)&&e.__esModule?e:{default:e};function o(e){return"AsyncFunction"===e[Symbol.toStringTag]}return Qn.default=function(e){if("function"!=typeof e)throw new Error("expected a function");return o(e)?(0,t.default)(e):e},Qn.isAsync=o,Qn.isAsyncGenerator=function(e){return"AsyncGenerator"===e[Symbol.toStringTag]},Qn.isAsyncIterable=function(e){return"function"==typeof e[Symbol.asyncIterator]},Qn}var st,rt,at,it={exports:{}},ct={exports:{}};function lt(){return st||(st=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});n.default={},e.exports=n.default}(ct,ct.exports)),ct.exports}function dt(){return at||(at=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});var t=function(){return Un||(Un=1,e=Mn,n=Mn.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),Mn.exports;var e,n}(),o=u(t),s=u(qn()),r=function(){return Gn||(Gn=1,e=Wn,n=Wn.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),Wn.exports;var e,n}(),a=u(r),i=ot(),c=(rt||(rt=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=lt())&&t.__esModule?t:{default:t};e.exports=n.default}(it,it.exports)),it.exports),l=u(c),d=u(lt());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}(Dn,Dn.exports)),Dn.exports}var ut,ft={exports:{}};var pt,yt,gt,ht={exports:{}};function mt(){return pt||(pt=1,e=ht,n=ht.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),ht.exports;var e,n}function wt(){return yt||(yt=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});var t=i(dt()),o=function(){return ut||(ut=1,e=ft,n=ft.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){return(n,t,o)=>e(n,o)},e.exports=n.default),ft.exports;var e,n}(),s=i(o),r=i(ot()),a=i(mt());function i(e){return e&&e.__esModule?e:{default:e}}n.default=(0,a.default)((function(e,n,o,a){return(0,t.default)(n)(e,(0,s.default)((0,r.default)(o)),a)}),4),e.exports=n.default}(Bn,Bn.exports)),Bn.exports}var bt=D((gt||(gt=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});var t=s(wt()),o=s(mt());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}(Kn,Kn.exports)),Kn.exports));const vt=Oe("commands:jobs:download"),$t="download <jobroot>";var kt=Object.freeze({__proto__:null,builder:async e=>(vt("builder",$t),e.option("downloadTo",Ue.downloadTo.config)),command:$t,desc:"Download Job files",handler:async e=>{vt("handler",$t,e);const{hg:n,json:t,apikey:o,env:s,jobroot:r,downloadTo:c}=e,{clientApiBaseUri:l}=n;let d,u=U();try{d=we("Verifying user and authorizing"),!t&&u.start(we(`In progress: ${d}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:f}=await ze({debug:vt,baseUri:l,task:"job-download",env:s,apikey:o,jobroot:r}),p=new A.S3({accessKeyId:e,secretAccessKey:n,sessionToken:f});!t&&u.succeed(we(`Finished: ${d}.`,"secondary")),d=we("Scanning for downloadable files"),!t&&u.start(we(`In progress: ${d}...`,"secondary"));const y={Bucket:s,Prefix:r},{Contents:g}=await p.listObjectsV2(y).promise();if(vt("res",g),!g||0===g.length)return void(t?_e({status:"error",error:"Nothing to download!"}):(u.fail(we(`Error: ${d}.`,"secondary")),ve(we(`Message: ${we("Nothing to download!")}`,"secondary"))));if(!t&&u.succeed(we(`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 bt(g.filter((({Key:e})=>!new RegExp(`${r}/([^/]+)-config.json`).test(e))),(async e=>{d=we(`Downloading file: ${we(e.Key,"info")}`),!t&&u.start(we(`In progress: ${d}...`,"secondary"));const n=i.resolve(h,e.Key.substring(r.length+1));vt("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(we(`Finished: ${d}.`,"secondary"))})),t?_e({status:"success",downloadedFiles:g.map((({Key:e})=>e))}):(d=we("Downloading job files."),u.succeed(we(`Finished: ${d}`,"secondary")))}catch(e){t?_e({status:"error",error:e}):(u.fail(we(`Error: ${d}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),vt(e),e&&e.response&&e.response.data&&vt("response",e.response.data))}}});const _t=(...e)=>{Oe("commands:jobs:list")(...e)},jt="list";var Ot=Object.freeze({__proto__:null,builder:async e=>(_t("builder",jt),e.option("flow",Ue.flow.config).demandOption("flow",Ue.flow.demandText).option("tenant",{...Ue.tenant.config,default:"default"}).option("count",Ue.count.config)),command:jt,desc:"List jobs",handler:async e=>{_t("handler",jt,e);const{hg:n,json:t,apikey:o,env:s,flow:r,tenant:a,count:i}=e,{clientApiBaseUri:c}=n;let l,d=U();try{l=we(`Retrieving jobs for environment: ${we(s,"info")} flow: ${we(r,"info")} tenant: ${we(a,"info")}...`);const e=`${c}/${s}/${r}/${a}/jobs${i?`?count=${i}`:""}`;_t("requesting:",e),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const{data:n}=await K.get(e,{headers:{"x-api-key":o}});if(!t&&d.succeed(we(`Finished: ${l}.`,"secondary")),_t("response-data",n),!n||0===n.length)return void(t?_e([]):d.warn(we(`Warning: ${we("No jobs for the specified environment, flow and tenant")}.`,"secondary")));if(t)_e(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?_e({status:"error",error:e}):(d.fail(we(`Error: ${l}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),_t(e),e&&e.response&&e.response.data&&_t("response",e.response.data))}}});const xt=[kt,Ot],Et=Oe("commands:jobs"),Tt="jobs <action>";var At=Object.freeze({__proto__:null,builder:async function(e){Et("builder",Tt);return(await Ke(e)).command(xt)},command:Tt,desc:"Manage ETL jobs",handler:async function(e){Et("handler",Tt,e)}});const St=Oe("commands:snapshots:deploy"),It="deploy";var Ft=Object.freeze({__proto__:null,builder:async e=>(St("builder",It),e.option("tenant",{...Ue.tenant.config,default:"default"}).option("sourceFolder",Ue.sourceFolder.config).demandOption("sourceFolder",Ue.sourceFolder.demandText)),command:It,desc:"Deploy Snapshots",handler:async e=>{St("handler",It,e);const{hg:n,json:t,apikey:o,env:s,tenant:r,sourceFolder:a}=e,{clientApiBaseUri:c}=n;let l,d=U();const u=i.resolve(process.cwd(),a);try{l=we(`Deploying Snapshots for Tenant ${we(r,"info")} to ${we(s,"info")}`),!t&&d.info(we(`Info: ${l}.`,"secondary"));const e=await Me(u,{recursive:!0});if(0===e.length)return void(t?_e({status:"error",error:"There are no files to deploy at the specified location!"}):d.fail(we(`Error: ${we("There are no files to deploy at the specified location!")}.`,"secondary")));l=we("Verifying user and authorizing");const{accessKeyId:n,secretAccessKey:f,sessionToken:p}=await ze({debug:St,baseUri:c,task:"snapshot-deploy",env:s,tenant:r,apikey:o});!t&&d.succeed(we(`Finished: ${l}.`,"secondary"));const y=new A.S3({accessKeyId:n,secretAccessKey:f,sessionToken:p});l=we("Validating tenant exists"),!t&&d.start(we(`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 St("err",e),new Error("Tenant doesn't exist. Please check your tenant (-u) argument.")}!t&&d.succeed(we(`Finished: ${l}.`,"secondary"));const g=`${r}/snapshots/`,h=new F({head:["File","Status"]});l=we("Preparing deployment target"),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const{Contents:m}=await y.listObjectsV2({Bucket:s,Prefix:`${g}`}).promise();!t&&d.stop(),St("contents",m),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const w=m.map((e=>({Key:e.Key})));if(w.length>0){const e={Bucket:s,Delete:{Objects:w,Quiet:!0}};await y.deleteObjects(e).promise(),w.forEach((({Key:e})=>h.push([e.substring(g.length),we("Deleted","warn")])))}!t&&d.succeed(we(`Finished: ${l}.`,"secondary"));for await(const n of e){const e=i.relative(a,n),o=`${g}${e}`;l=we(`Deploying file: ${we(e,"info")}`),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const r={Bucket:s,Key:o,Body:await O(n)},c=await y.putObject(r).promise();!t&&d.succeed(we(`Finished: ${l}.`,"secondary")),St("s3-put-res",c),h.push([e,we("Deployed","info")])}t?_e({status:"success",deployedFiles:e}):be(h.toString())}catch(e){t?_e({status:"error",error:e}):(d.fail(we(`Error: ${l}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),St(e),e&&e.response&&e.response.data&&St("response",e.response.data))}}});const Ut=Oe("commands:snapshots:download"),Nt="download";var Kt=Object.freeze({__proto__:null,builder:async e=>(Ut("builder",Nt),e.option("downloadTo",Ue.downloadTo.config).demandOption("downloadTo",Ue.downloadTo.demandText).option("tenant",{...Ue.tenant.config,default:"default"}).option("overwrite",Ue.overwrite.config).demandOption("overwrite",Ue.overwrite.demandText)),command:Nt,desc:"Download Snapshots",handler:async e=>{Ut("handler",Nt,e);const{hg:n,json:t,apikey:o,env:s,tenant:a,downloadTo:c,overwrite:l}=e,{clientApiBaseUri:d}=n;let u,f=U();const p=i.resolve(process.cwd(),function(e){function n(e){return process.argv.indexOf(e)>-1}if(n(`--${e}`))return!0;const t=Ue[e]?.config?.alias||[];for(let e in t)if(n(`-${t[e]}`))return!0;return!1}("downloadTo")?c:"snapshots");try{u=we("Verifying user and authorizing"),!t&&f.start(we(`In progress: ${u}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:c}=await ze({debug:Ut,baseUri:d,task:"snapshot-download",env:s,tenant:a,apikey:o}),y=new A.S3({accessKeyId:e,secretAccessKey:n,sessionToken:c});!t&&f.succeed(we(`Finished: ${u}.`,"secondary")),u=we("Validating tenant exists"),!t&&f.start(we(`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 Ut("err",e),new Error("Tenant doesn't exist. Please check your tenant (-u) argument.")}!t&&f.succeed(we(`Finished: ${u}.`,"secondary")),u=we("Scanning for downloadable files"),!t&&f.start(we(`In progress: ${u}...`,"secondary"));const g=`${a}/snapshots/`,h={Bucket:s,Prefix:g},{Contents:m}=await y.listObjectsV2(h).promise();!t&&f.succeed(we(`Finished: ${u}.`,"secondary")),Ut("s3-list-res",m);const w=m?m.map((e=>e.Key)).filter((e=>e!==g)):[];if(!w||0===w.length)return void(t?_e({status:"success",downloadedFiles:[]}):f.warn(we(`Warning: ${we("Nothing to download!")}`,"secondary")));u=we(`Downloading snapshot files to ${we(p,"info")}`),!t&&f.info(we(`Info: ${u}.`,"secondary"));const b=new F({head:["File","Status"]});for await(const e of w){const n=e.substring(g.length),o=i.resolve(p,n);if(Ut("file",o),e.endsWith("/")){!r(o)&&await k(o,{recursive:!0});continue}if(!l)try{await x(o),Ut("exists, skipping"),b.push([n,"Skipped"]);continue}catch(e){"ENOENT"!==e.code&&be(e)}u=we(`Downloading file: ${we(n,"info")}`),!t&&f.start(we(`In progress: ${u}...`,"secondary")),await k(i.dirname(o),{recursive:!0});const a=y.getObject({Bucket:s,Key:e}).createReadStream();await _(o,await Le(a)),!t&&f.succeed(we(`Finished: ${u}.`,"secondary")),b.push([n,"Downloaded"])}t?_e({status:"success",downloadedFiles:w}):be(b.toString())}catch(e){t?_e({status:"error",error:e}):(f.fail(we(`Error: ${u}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),Ut(e),e&&e.response&&e.response.data&&Ut("response",e.response.data))}}});const Bt=[Ft,Kt],Dt=Oe("commands:snapshots"),Mt="snapshots <action>";var Pt=Object.freeze({__proto__:null,builder:async function(e){Dt("builder",Mt,e);return(await Ke(e)).command(Bt)},command:Mt,desc:"Manage tenant snapshots",handler:async function(e){Dt("handler",Mt,e)}});const Lt=Oe("commands:tenants:custom-etl"),Ct="custom-etl",Rt=async({debug:e,baseUri:n,apikey:t,env:o,flow:s,tenant:r,supportedSources:a})=>{const i=await We({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 zt=Object.freeze({__proto__:null,builder:async e=>(Lt("builder",Ct),e.option("tenant",Ue.tenant.config).option("flow",Ue.flow.config).demandOption("flow",Ue.flow.demandText)),command:Ct,desc:"List tenants with custom ETL in a specific flow",handler:async e=>{Lt("handler",Ct,e);const{hg:n,json:t,apikey:o,env:s,flow:r}=e;let a,i=U();try{a=we(`Retrieving tenants for environment ${we(s,"info")}`),!t&&i.start(we(`In progress: ${a}...`,"secondary"));const[e,c]=await Promise.all([Ve({debug:Lt,baseUri:n.clientApiBaseUri,apikey:o,env:s}),qe({debug:Lt,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r})]);!t&&i.succeed(we(`Finished: ${a}.`,"secondary"));let l=[];a=we(`Querying for custom ETL scripts for flow ${we(r,"info")}`),!t&&i.start(we(`In progress: ${a}...`,"secondary"));for(const t of Ce(e)){const e=await Promise.all(t.map((e=>Rt({debug:Lt,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r,tenant:e,supportedSources:c}))));l=l.concat(e.filter(Boolean))}if(!t&&i.succeed(we(`Finished: ${a}.`,"secondary")),t)_e(l);else{const e=new F({head:["Tenant ID"]});e.push(...l.map((e=>[e]))),console.log(e.toString())}}catch(e){t?_e({status:"error",error:e}):(i.fail(we(`Error: ${a}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),Lt(e),e&&e.response&&e.response.data&&Lt("response",e.response.data))}}});const Vt=Oe("commands:tenants:custom-field-map"),qt="custom-field-map",Gt=async({debug:e,baseUri:n,apikey:t,env:o,flow:s,tenant:r,isV2Flow:a})=>{const i=a?await Je({debug:e,baseUri:n,env:o,flow:s,tenant:r,apikey:t}):await We({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 Wt=Object.freeze({__proto__:null,builder:async e=>(Vt("builder",qt),e.option("tenant",Ue.tenant.config).option("flow",Ue.flow.config).demandOption("flow",Ue.flow.demandText)),command:qt,desc:"List tenants with custom field map in a specific flow",handler:async e=>{Vt("handler",qt,e);const{hg:n,json:t,apikey:o,env:s,flow:r}=e;let a,i=U();try{a=we(`Retrieving tenants for environment ${we(s,"info")}`),!t&&i.start(we(`In progress: ${a}...`,"secondary"));const[e,c]=await Promise.all([Ve({debug:Vt,baseUri:n.clientApiBaseUri,apikey:o,env:s}),Ye({debug:Vt,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r})]),l=2===c?.version;!t&&i.succeed(we(`Finished: ${a}.`,"secondary"));const d=[];a=we(`Querying for custom field maps for flow ${we(r,"info")}`),!t&&i.start(we(`In progress: ${a}...`,"secondary"));for(const t of Ce(e)){const e=await Promise.all(t.map((e=>Gt({debug:Vt,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(we(`Finished: ${a}.`,"secondary")),t)_e(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?_e({status:"error",error:e}):(i.fail(we(`Error: ${a}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),Vt(e),e&&e.response&&e.response.data&&Vt("response",e.response.data))}}});const Jt=Oe("commands:tenants:delete"),Qt="delete";var Yt=Object.freeze({__proto__:null,builder:async e=>(Jt("builder",Qt),e.option("tenant",Ue.tenant.config)),command:Qt,desc:"Delete tenant",handler:async e=>{Jt("handler",Qt,e);const{hg:n,json:t,apikey:o,env:s,tenant:r}=e,{clientApiBaseUri:a}=n;let i,c=U();try{if("default"===r)throw new Error('It\'s not possible to delete "default" tenant!');i=we(`Deleting tenant ${r} schedules`),!t&&c.start(we(`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:Jt,baseUri:a,env:s,apikey:o,tenant:r}),!t&&c.succeed(we(`Finished: ${i}.`,"secondary")),i=we("Verifying user and authorizing"),!t&&c.start(we(`In progress: ${i}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:l}=await ze({debug:Jt,baseUri:a,task:"tenant-delete",env:s,tenant:r,apikey:o});!t&&c.succeed(we(`Finished: ${i}.`,"secondary"));const d=new A.S3({accessKeyId:e,secretAccessKey:n,sessionToken:l});for(i=we(`Deleting tenant ${r} for environment ${we(s,"info")}`),!t&&c.start(we(`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(we(`Finished: ${i}.`,"secondary")),t)_e({statu:"success",tenantDeleted:r});else{const e=new F({head:["Tenant ID"]});e.push([r]),console.log(e.toString())}}catch(e){t?_e({status:"error",error:e}):(c.fail(we(`Error: ${i}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),Jt(e),e&&e.response&&e.response.data&&Jt("response",e.response.data))}}});const Ht=Oe("commands:tenants:list"),Zt="list";var Xt=Object.freeze({__proto__:null,builder:async e=>(Ht("builder",Zt),e.option("tenant",Ue.tenant.config)),command:Zt,desc:"List tenants",handler:async e=>{Ht("handler",Zt,e);const{hg:n,json:t,apikey:o,env:s,tenant:r}=e;let a,i=U();try{a=we(`Retrieving tenants for environment ${we(s,"info")}`);const e=`${n.clientApiBaseUri}/tenants/${s}${r?`?tenant=${r}`:""}`;Ht("requesting:",e),!t&&i.start(we(`In progress: ${a}...`,"secondary"));const{data:c}=await K.get(e,{headers:{"x-api-key":o}});if(!t&&i.succeed(we(`Finished: ${a}.`,"secondary")),Ht("response-data",c),!c||0===c.length)return void(t?_e([]):i.info(we(`Info: ${we("No tenants found in the specified environment")}.`,"secondary")));if(t)_e(c);else{const e=new F({head:["tenant ID"]});e.push(...c.map((e=>[e]))),console.log(e.toString())}}catch(e){t?_e({status:"error",error:e}):(i.fail(we(`Error: ${a}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),Ht(e),e&&e.response&&e.response.data&&Ht("response",e.response.data))}}});const eo=Oe("commands:tenants:custom-catalog"),no="custom-catalog",to=async({debug:e,baseUri:n,apikey:t,env:o,flow:s,tenant:r,isV2Flow:a})=>{try{const i=a?await Je({debug:e,baseUri:n,env:o,flow:s,tenant:r,apikey:t}):await We({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}/catalog.json`};try{await f.headObject(t).promise(),c.push(a?e:n)}catch(e){}}return{tenant:r,connectors:c}}catch(e){return console.error(e),{tenant:r,connectors:[]}}};var oo=Object.freeze({__proto__:null,builder:async e=>(eo("builder",no),e.option("tenant",Ue.tenant.config).option("flow",Ue.flow.config).demandOption("flow",Ue.flow.demandText)),command:no,desc:"List tenants with custom catalog in a specific flow",handler:async e=>{eo("handler",no,e);const{hg:n,json:t,apikey:o,env:s,flow:r}=e;let a,i=U();try{a=we(`Retrieving tenants for environment ${we(s,"info")}`),!t&&i.start(we(`In progress: ${a}...`,"secondary"));const[e,c]=await Promise.all([Ve({debug:eo,baseUri:n.clientApiBaseUri,apikey:o,env:s}),Ye({debug:eo,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r})]),l=2===c?.version;!t&&i.succeed(we(`Finished: ${a}.`,"secondary"));const d=[];a=we(`Querying for custom catalogs for flow ${we(r,"info")}`),!t&&i.start(we(`In progress: ${a}...`,"secondary"));for(const t of Ce(e)){const e=await Promise.all(t.map((e=>to({debug:eo,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(we(`Finished: ${a}.`,"secondary")),t)_e(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?_e({status:"error",error:e}):(i.fail(we(`Error: ${a}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),eo(e),e&&e.response&&e.response.data&&eo("response",e.response.data))}}});const so=[zt,Wt,Yt,Xt,oo],ro=Oe("commands:tenants"),ao="tenants <action>";var io=Object.freeze({__proto__:null,builder:async function(e){ro("builder",ao);return(await Ke(e)).command(so)},command:ao,desc:"Manage tenants",handler:async function(e){ro("handler",ao,e)}});const co=[Fe,un,xn,Nn,At,Pt,io];process.env.AWS_SDK_JS_SUPPRESS_MAINTENANCE_MODE_MESSAGE="1";he({});const lo=h(process.argv.slice(2));lo.usage(we("Usage: $0 <command>")).command(co).demandCommand().alias("v","version").alias("h","help").string("_").strictCommands().epilogue(we("For more information, visit https://docs.hotglue.xyz/docs/cli-overview")).wrap(Math.min(lo.terminalWidth(),90)).parse(process.argv.slice(W()+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 w=null;Object.keys(g.counts).find((e=>N(e,g.arrays)?(w=Error(y("Invalid configuration: %s, opts.count excludes opts.array.",e)),!0):!!N(e,g.nargs)&&(w=Error(y("Invalid configuration: %s, opts.count excludes opts.narg.",e)),!0)));let b=[];const v=Object.assign(Object.create(null),{_:[]}),$={};for(let e=0;e<o.length;e++){const n=o[e],t=n.replace(/^-{3,}/,"---");let s,r,i,c,l,d;if("--"!==n&&B(n))k(n);else{if(t.match(/---+(=|$)/)){k(n);continue}if(n.match(/^--.+=/)||!a["short-option-groups"]&&n.match(/^-.+=/))c=n.match(/^--?([^=]+)=([\s\S]*)$/),null!==c&&Array.isArray(c)&&c.length>=3&&(N(c[1],g.arrays)?e=j(e,c[1],o,c[2]):!1!==N(c[1],g.nargs)?e=_(e,c[1],o,c[2]):O(c[1],c[2],!0));else if(n.match(m)&&a["boolean-negation"])c=n.match(m),null!==c&&Array.isArray(c)&&c.length>=2&&(r=c[1],O(r,!!N(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],N(r,g.arrays)?e=j(e,r,o):!1!==N(r,g.nargs)?e=_(e,r,o):(l=o[e+1],void 0===l||l.match(/^-/)&&!l.match(h)||N(r,g.bools)||N(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(/^-/)||N(r,g.bools)||N(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],N(r,g.arrays)?e=j(e,r,o,d):!1!==N(r,g.nargs)?e=_(e,r,o,d):O(r,d),s=!0;break}if("-"!==l){if(/[A-Za-z]/.test(i[t])&&/^-?\d+(\.\d*)?(e-?\d+)?$/.test(l)&&!1===N(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||(N(r,g.arrays)?e=j(e,r,o):!1!==N(r,g.nargs)?e=_(e,r,o):(l=o[e+1],void 0===l||/^(-|--)[^-]/.test(l)&&!l.match(h)||N(r,g.bools)||N(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)&&N(n.slice(1),g.bools))r=n.slice(1),O(r,D(r));else{if("--"===n){b=o.slice(e+1);break}if(a["halt-at-non-option"]){b=o.slice(e);break}k(n)}}}function k(e){const n=T("_",e);"string"!=typeof n&&"number"!=typeof n||v._.push(n)}function _(e,n,t,o){let s,r=N(n,g.nargs);if(r="number"!=typeof r||isNaN(r)?1:r,0===r)return P(o)||(w=Error(y("Argument unexpected for: %s",n))),O(n,D(n)),e;let i=P(o)?0:1;if(a["nargs-eats-options"])t.length-(e+1)+i<r&&(w=Error(y("Not enough arguments following: %s",n))),i=r;else{for(s=e+1;s<t.length&&(!t[s].match(/^-[^0-9]/)||t[s].match(h)||B(t[s]));s++)i++;i<r&&(w=Error(y("Not enough arguments following: %s",n)))}let c=Math.min(i,r);for(!P(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=N(n,g.nargs);if(N(n,g.bools)&&!/^(true|false)$/.test(c))r.push(!0);else if(P(c)||P(o)&&/^-/.test(c)&&!h.test(c)&&!B(c)){if(void 0!==i[n]){const e=i[n];r=Array.isArray(e)?e:[e]}}else{P(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)&&(w=Error(y("Not enough arguments following: %s",n))),O(n,r),e}function O(e,n,t=s){if(/-/.test(e)&&a["camel-case-expansion"]){const n=e.split(".").map((function(e){return J(e)})).join(".");x(e,n)}const o=E(e,n,t),r=e.split(".");if(U(v,r,o),g.aliases[e]&&g.aliases[e].forEach((function(e){const n=e.split(".");U(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("."))||U(v,t,o)})),N(e,g.normalize)&&!N(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)),(N(e,g.bools)||N(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 N(e,g.counts)&&(P(o)||"boolean"==typeof o)&&(o=Z()),N(e,g.normalize)&&N(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(!N(e,g.strings)&&!N(e,g.bools)&&!Array.isArray(n)){(Y(n)&&a["parse-numbers"]&&Number.isSafeInteger(Math.floor(parseFloat(`${n}`)))||!P(n)&&N(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("."))||N(s,g.arrays)&&a["combine-arrays"])&&O(s,o)}))}function S(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 I(e,n,t,o=!1){Object.keys(t).forEach((function(s){F(e,s.split("."))||(U(e,s.split("."),t[s]),o&&(p[s]=!0),(n[s]||[]).forEach((function(n){F(e,n.split("."))||U(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 U(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=N(n.join("."),g.arrays),i=Array.isArray(t);let c=a["duplicate-arguments-array"];!c&&N(s,g.nargs)&&(c=!0,(!P(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]||N(s,g.counts)||N(s,g.bools)?o[s]=t:o[s]=[o[s],t]}function N(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 K(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),!K(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&&K(t[1])}))}(e,/^-+([^=]+?)=[\s\S]*$/,m,/^-+([^=]+?)$/,/^-+([^=]+?)-$/,/^-+([^=]+?\d+)$/,/^-+([^=]+?)\W+.*$/)}(e)}function D(e){return N(e,g.bools)||N(e,g.counts)||!(`${e}`in i)?(n=function(e){let n=V.BOOLEAN;return N(e,g.strings)?n=V.STRING:N(e,g.numbers)?n=V.NUMBER:N(e,g.bools)?n=V.BOOLEAN:N(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 P(e){return void 0===e}return S(v,!0),S(v,!1),function(e){const n=Object.create(null);I(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(w=e)}else e=H.require(n);A(e)}catch(n){"PermissionDenied"===n.name?w=n:e[t]&&(w=Error(y("Invalid JSON config file: %s",o)))}}))}(v),void 0!==c&&c.forEach((function(e){A(e)})),I(v,g.aliases,i,!0),function(e){let n;const t=new Set;Object.keys(e).forEach((function(o){if(!t.has(o)&&(n=N(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){w=e}}))}(v),a["set-placeholder-key"]&&function(e){g.keys.forEach((n=>{~n.indexOf(".")||void 0===e[n]&&(e[n]=void 0)}))}(v),Object.keys(g.counts).forEach((function(e){F(v,e.split("."))||O(e,0)})),d&&b.length&&(v[u]=[]),b.forEach((function(e){v[u].push(e)})),a["camel-case-expansion"]&&a["strip-dashed"]&&Object.keys(v).filter((e=>"--"!==e&&e.includes("-"))).forEach((e=>{delete v[e]})),a["strip-aliased"]&&[].concat(...Object.keys(r).map((e=>r[e]))).forEach((e=>{a["camel-case-expansion"]&&e.includes("-")&&delete v[e.split(".").map((e=>J(e))).join(".")],delete v[e]})),{aliases:Object.assign({},g.aliases),argv:Object.assign($,v),configuration:a,defaulted:Object.assign({},p),error:w,newAliases:Object.assign({},f)}}}({cwd:process.cwd,env:()=>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},ke}function me(e){process.stdout.write(e)}const we=(e,n=ge)=>{if(!e)return"";if("string"==typeof e)return ye[n]?ye[n](e):ye[ge](e);const t=w(e,{colors:!0});return ye[n]?ye[n](t):t};function be(...e){return console.log(...e),ke}function ve(e,n){return me(we(e,n)),me("\n"),ke}function $e(e,n){return me(we(e,n)),ke}const ke={cl:be,pr:ve,pp:$e,setTheme:he,setDefault:function(e="primary"){return ye[e]&&(ge=e),ke}},_e=e=>{console.log(JSON.stringify(e))},je=S("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=I.stringify(s),a=e&&e.filepath?e.filepath:de();await(async(e,n)=>{await k(i.dirname(e),{recursive:!0}),await _(e,n)})(a,r),n?_e({status:"success"}):$e("Done").pr()}catch(e){n?_e({status:"error",error:e}):console.log(e)}else n?_e({status:"error",error:"Invalid settings parameter"}):console.error("Invalid settings parameter")}});const Ae=[Te],Se=Oe("commands:config"),Ie="config [action]";var Fe=Object.freeze({__proto__:null,builder:async function(e){return Se("builder",Ie),e.command(Ae)},command:Ie,desc:"Configure your hotglue CLI",handler:async function(e){Se("handler",Ie,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}}}),Ue={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 Ne=Oe("base"),Ke=async e=>{Ne("builder");const n=await(async()=>{const e=await ue(),n=await fe();return{...le,...e.config,...n.config}})();return e.option("apikey",Ue.apikey.config).option("env",Ue.env.config).option("json",Ue.json.config).config(n).demandOption(["env"],Ue.env.demandText).demandOption(["apikey"],Ue.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},Pe=async(e,n)=>{const t={includeSymLinks:!1,recursive:!1,filter:{},...n},{pattern:o}=t.filter;return o&&(t.filter.matcher=N.matcher(o,{dot:!0})),De(e,t)},Me=(e,n)=>{Be("filter-in",e);const{pattern:t}={...n};let o=e;return t&&(o=N(o,t)),Be("filter-out",o),o};const Ce=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"))))}))},Le=(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},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 K.get(a,{headers:r});return i},We=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},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 K.get(l,{headers:c});return d},Je=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},Qe=async({debug:e,baseUri:n,env:t,flow:o,tenant:s,apikey:r,connectorId:a,config:i})=>{const c={"x-api-key":r},l=new URL(`${n}/${t}/${o}/${s}/linkedSources`).toString(),d={tap:a,config:i};e&&e("uri:",l);const{data:u}=await K.patch(l,d,{headers:c});return u},Ye=async({debug:e,baseUri:n,env:t,flow:o,tenant:s,apikey:r,connectorId:a,config:i})=>{const c={"x-api-key":r},l=new URL(`${n}/v2/${t}/${o}/${s}/linkedConnectors`).toString(),d={connector_id:a,config:i};e&&e("uri:",l);const{data:u}=await K.patch(l,d,{headers:c});return u},He=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},Ze=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},Xe=S("commands:env:validators"),en=async(e,n,t,o,s)=>{if(!Array.isArray(e))throw new Error("availableSources.json must be an array of objects");const r=(await Promise.all(o.filter((e=>1==e.version)).map((async e=>await qe({debug:Xe,baseUri:n,env:s,flow:e.id,apikey:t}))))).flat(),a=e.map((e=>{if(!e.tap)throw new Error(`Source ${JSON.stringify(e)} has no tap id`);return e.tap})),i=a.filter(((e,n)=>a.indexOf(e)!==n));if(i.length>0)throw new Error(`Duplicate source id(s) found in availableSources.json: ${i.join(", ")}. All sources must have a unique tap id.`);const c=r.filter((e=>e.isForked&&!a.includes(e.tap)));if(c.length>0)throw new Error(`Sources ${c.map((e=>e.label)).join(", ")} are linked, but missing from your availableSources.json`)},nn=async(e,n,t,o,s)=>{if(!Array.isArray(e))throw new Error("availableTargets.json must be an array of objects");const r=(await Promise.all(o.filter((e=>1==e.version)).map((async e=>{const o=await(async({debug:e,baseUri:n,env:t,flow:o,apikey:s})=>{const r={"x-api-key":s},a=new URL(`${n}/${t}/${o}/supportedTargets`).toString();e&&e("uri:",a);const{data:i}=await K.get(a,{headers:r});return i})({debug:Xe,baseUri:n,env:s,flow:e.id,apikey:t});return o})))).flat(),a=e.map((e=>{if(!e.target)throw new Error(`Target ${JSON.stringify(e)} has no target id`);return e.target})),i=a.filter(((e,n)=>a.indexOf(e)!==n));if(i.length>0)throw new Error(`Duplicate target id(s) found in availableTargets.json: ${i.join(", ")}. All targets must have a unique target id.`);const c=r.filter((e=>e.isForked&&!a.includes(e.target)));if(c.length>0)throw new Error(`Targets ${c.map((e=>e.label)).join(", ")} are linked, but missing from your availableTargets.json`)},tn=async(e,n,t,o,s)=>{if(!Array.isArray(e))throw new Error("availableConnectors.json must be an array of objects");const r=(await Promise.all(o.filter((e=>2==e.version)).map((async e=>await We({debug:Xe,baseUri:n,env:s,flow:e.id,apikey:t}))))).flat(),a=e.map((e=>{if(!e.id)throw new Error(`Connector ${JSON.stringify(e)} has no id`);return e.id})),i=a.filter(((e,n)=>a.indexOf(e)!==n));if(i.length>0)throw new Error(`Duplicate connector id(s) found in availableConnectors.json: ${i.join(", ")}. All connectors must have a unique id.`);const c=r.filter((e=>e.isForked&&!a.includes(e.id)));if(c.length>0)throw new Error(`Connectors ${c.map((e=>e.id)).join(", ")} are linked, but missing from your availableConnectors.json`)},on=Oe("commands:env:deploy"),sn="deploy";var rn=Object.freeze({__proto__:null,builder:async e=>(on("builder",sn),e.option("sourceFolder",Ue.sourceFolder.config).demandOption("sourceFolder",Ue.sourceFolder.demandText)),command:sn,desc:"Deploy Environment settings",handler:async e=>{on("handler",sn,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=U();try{l=we(`Scanning ${we(c,"info")} for deployable files`),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const e=await Pe(c,{filter:{pattern:"((**/requirements.txt)|(**/availableSources.json)|(**/availableTargets.json)|(**/availableConnectors.json)|(**/customTaps.json))"}});if(0===e.length)return void(t?_e({status:"error",error:"There are no files to deploy at the specified location!"}):(d.fail(we(`Error: ${l}.`,"secondary")),ve(we(`Message: ${we("There are no files to deploy at the specified location!")}`,"secondary"))));!t&&d.succeed(we(`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)}`)}const n=await He({debug:on,baseUri:a,env:s,apikey:o});for(const t of e){if(t.endsWith("availableSources.json")){const e=JSON.parse(await O(t,{encoding:"utf-8"}));await en(e,a,o,n,s)}if(t.endsWith("availableTargets.json")){const e=JSON.parse(await O(t,{encoding:"utf-8"}));await nn(e,a,o,n,s)}if(t.endsWith("availableConnectors.json")){const e=JSON.parse(await O(t,{encoding:"utf-8"}));await tn(e,a,o,n,s)}}l=we("Verifying user and authorizing"),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const{accessKeyId:r,secretAccessKey:u,sessionToken:f}=await ze({debug:on,baseUri:a,task:"env-deploy",env:s,apikey:o});!t&&d.succeed(we(`Finished: ${l}.`,"secondary"));const p=new A.S3({accessKeyId:r,secretAccessKey:u,sessionToken:f});l=we("Deploying environment files"),!t&&d.info(we(`Info: ${l}.`,"secondary"));const y="config/",g=new F({head:["File","Status"]});for await(const n of e){const e=i.basename(n);l=we(`Pushing file: ${we(e,"info")}`),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const r={Bucket:s,Key:`${y}${e}`,Body:await O(n)},c=await p.putObject(r).promise();!t&&d.succeed(we(`Finished: ${l}.`,"secondary")),on("s3-put-res",c),g.push([e,"Deployed"]),await Re({debug:on,baseUri:a,env:s,apiKey:o})}t?_e({status:"success",deployedFiles:e}):be(g.toString())}catch(e){!t&&d.fail(we(`Error: ${l}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),on(e),e&&e.response&&e.response.data&&on("response",e.response.data)}}});const an=Oe("commands:env:download"),cn="download";var ln=Object.freeze({__proto__:null,builder:async e=>(an("builder",cn),e.option("downloadTo",Ue.downloadTo.config)),command:cn,desc:"Download Environment settings",handler:async e=>{an("handler",cn,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=U();try{l=we("Verifying user and authorizing"),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:r}=await ze({debug:an,baseUri:a,task:"env-download",env:s,apikey:o});!t&&d.succeed(we(`Finished: ${l}.`,"secondary"));const u=new A.S3({accessKeyId:e,secretAccessKey:n,sessionToken:r});l=we(`Scanning environment ${we(s,"info")}`),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const f={Bucket:s,Prefix:"config/"},{Contents:p}=await u.listObjectsV2(f).promise();!t&&d.succeed(we(`Finished: ${l}.`,"secondary")),an("s3-files",p);const y=p?Me(p.map((e=>e.Key)),{pattern:"((*/requirements.txt)|(*/availableSources.json)|(*/availableTargets.json)|(*/availableConnectors.json)|(*/customTaps.json))"}):[];if(!y||0===y.length)return void(t?_e({status:"success",downloadedFiles:[]}):d.warn(we(`Warning: ${we("Nothing to download!")}`,"secondary")));l=we(`Downloading to ${we(c,"info")}`),!t&&d.info(we(`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);an("local-file",o),await k(i.dirname(o),{recursive:!0}),l=we(`Downloading file: ${we(n,"info")}`),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const r=u.getObject({Bucket:s,Key:e}).createReadStream();await _(o,await Ce(r)),!t&&d.succeed(we(`Finished: ${l}.`,"secondary")),g.push([n,"Downloaded"])}t?_e({status:"success",downloadedFiles:y}):be(g.toString())}catch(e){t?_e({status:"error",error:e}):(d.fail(we(`Error: ${l}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),an(e),e&&e.response&&e.response.data&&an("response",e.response.data))}}});const dn=[rn,ln],un=Oe("commands:env"),fn="env <action>";var pn=Object.freeze({__proto__:null,builder:async function(e){un("builder",fn);return(await Ke(e)).command(dn)},command:fn,desc:"Manage environment settings",handler:async function(e){un("handler",fn,e)}});const yn=async(e,n,t,o)=>{try{const s=e.getObject({Bucket:n,Key:`${t}/flows/${o}/flow.json`}).createReadStream(),r=await Ce(s);return 2===JSON.parse(r).version}catch(e){return!1}},gn=async(e,n,t,o,s=void 0)=>s??await yn(e,n,t,o)?"connectors":"taps",hn=Oe("commands:etl:delete"),mn="delete";var wn=Object.freeze({__proto__:null,builder:async e=>(hn("builder",mn),e.option("flow",Ue.flow.config).demandOption("flow",Ue.flow.demandText).option("tap",Ue.tap.config).demandOption("tap",Ue.tap.demandText).option("tenant",{...Ue.tenant.config}).demandOption("tenant",Ue.tenant.demandText)),command:mn,desc:"Delete ETL scripts",handler:async e=>{hn("handler",mn,e);const{hg:n,json:t,apikey:o,env:s,flow:r,tap:a,tenant:i}=e,{clientApiBaseUri:c}=n;let l,d=U();try{l=we(`Deleting ETL scripts for Tenant ${we(i,"info")} Flow ${we(r,"info")} and Tap ${we(a,"info")} to ${we(s,"info")}`),!t&&d.info(we(`Info: ${l}.`,"secondary")),l=we("Verifying user and authorizing"),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:u}=await ze({debug:hn,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(we(`Finished: ${l}.`,"secondary")),l=we("Deleting ETL scripts"),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const p=`${i}/flows/${r}/${await gn(f,s,i,r)}/${a}/etl/`,y=await f.listObjectsV2({Bucket:s,Prefix:p}).promise();if(hn("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();hn("s3-list-objects-res",e)}const g=await f.deleteObject({Bucket:s,Key:p}).promise();if(hn("s3-delete-object-res",g),!t&&d.succeed(we(`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,we("Deleted","info")])})),t?_e({status:"success",deletedObjects:(y.Contents??[]).map((({Key:e})=>e))}):be(e.toString())}else l=we("There was no file or folder to be deleted"),t?_e({status:"success",deletedObjects:[]}):d.info(we(`Info: ${l}.`,"secondary"))}catch(e){t?_e({status:"error",error:e}):(d.fail(we(`Error: ${l}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),hn(e),e&&e.response&&e.response.data&&hn("response",e.response.data))}}});const bn=Oe("commands:etl:deploy"),vn="deploy";var $n=Object.freeze({__proto__:null,builder:async e=>(bn("builder",vn),e.option("flow",Ue.flow.config).demandOption("flow",Ue.flow.demandText).option("tap",Ue.tap.config).option("all",Ue.all.config).option("tenant",{...Ue.tenant.config,default:"default"}).option("sourceFolder",Ue.sourceFolder.config).demandOption("sourceFolder",Ue.sourceFolder.demandText)),command:vn,desc:"Deploy ETL scripts",handler:async e=>{bn("handler",vn,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(`${Ue.tap.demandText} Or you can pass the --all flag to run this command for all taps/connectors.`);let f,p=U();const y=i.resolve(process.cwd(),d);try{f=we(`Deploying script for Tenant ${we(l,"info")} Flow ${we(r,"info")}${a?` and Tap ${we(a,"info")}`:""} to ${we(s,"info")}`),!t&&p.info(we(`Info: ${f}.`,"secondary"));const e=await Pe(y,{recursive:!0,filter:{pattern:"!((**/sync-output)|(**/etl-output)|(**/snapshots))"}});if(0===e.length)return void(t?_e({status:"error",error:"There are no files to deploy at the specified location!"}):p.fail(we(`Error: ${we("There are no files to deploy at the specified location!")}.`,"secondary")));f=we("Verifying user and authorizing"),!t&&p.start(we(`In progress: ${f}...`,"secondary"));const n={debug:bn,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(we(`Finished: ${f}.`,"secondary"));const m=new A.S3({accessKeyId:c,secretAccessKey:g,sessionToken:h}),w=await yn(m,s,l,r);f=we("Validating flow and tap location"),!t&&p.start(we(`In progress: ${f}...`,"secondary"));const b=(await He({debug:bn,baseUri:u,apikey:o,env:s})).find((({id:e})=>e===r));let v=[];try{if("default"===l||b?.type){if(v=((w?await We({debug:bn,baseUri:u,env:s,flow:r,apikey:o}):await qe({debug:bn,baseUri:u,env:s,flow:r,apikey:o}))??[]).filter((e=>!a||e[w?"id":"tap"]===a)),a&&0===v.length)throw new Error("Tap is not supported")}else{if(v=((w?await Je({debug:bn,baseUri:u,env:s,flow:r,tenant:l,apikey:o}):await Ge({debug:bn,baseUri:u,env:s,flow:r,tenant:l,apikey:o}))??[]).filter((e=>!a||e[w?"id":"tap"]===a)),a&&0===v.length)throw new Error("Tap is not linked")}}catch(e){throw bn("err",e),new Error("Target location doesn't exist. Check your tenant, flow and tap arguments.")}!t&&p.succeed(we(`Finished: ${f}.`,"secondary"));const $=new F({head:["File","Status"]});for(const n of v){const o=n[w?"id":"tap"];f=we(`Preparing ${o} deployment target`),!t&&p.start(we(`In progress: ${f}...`,"secondary"));const a=`${l}/flows/${r}/${await gn(null,null,null,null,w)}/${o}/etl/`,{Contents:c}=await m.listObjectsV2({Bucket:s,Prefix:`${a}`}).promise();!t&&p.succeed(we(`Finished: ${f}.`,"secondary")),bn("contents",c);const u=c.map((e=>({Key:e.Key})));if(u.length>0){f=we(`Removing old ${o} ETL files`),!t&&p.start(we(`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)}`,we("Deleted","warn")]))),!t&&p.succeed(we(`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=we(`Deploying file: ${we(`${o}/${e}`,"info")}`),!t&&p.start(we(`In progress: ${f}...`,"secondary"));const c={Bucket:s,Key:r,Body:await O(n)},l=await m.putObject(c).promise();!t&&p.succeed(we(`Finished: ${f}.`,"secondary")),bn("s3-put-res",l),$.push([`${o}/${e}`,we("Deployed","info")])}}t?_e({status:"success",deployedFiles:e}):be($.toString())}catch(e){t?_e({status:"error",error:e}):(p.fail(we(`Error: ${f}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),bn(e),e&&e.response&&e.response.data&&bn("response",e.response.data))}}});const kn=Oe("commands:etl:download"),_n="download";var jn=Object.freeze({__proto__:null,builder:async e=>(kn("builder",_n),e.option("flow",Ue.flow.config).demandOption("flow",Ue.flow.demandText).option("tap",Ue.tap.config).demandOption("tap",Ue.tap.demandText).option("downloadTo",Ue.downloadTo.config).demandOption("downloadTo",Ue.downloadTo.demandText).option("tenant",{...Ue.tenant.config,default:"default"}).option("overwrite",Ue.overwrite.config).demandOption("overwrite",Ue.overwrite.demandText)),command:_n,desc:"Download ETL scripts",handler:async e=>{kn("handler",_n,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=U();const g=i.resolve(process.cwd(),d);try{p=we("Verifying user and authorizing"),!t&&y.start(we(`In progress: ${p}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:d}=await ze({debug:kn,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(we(`Finished: ${p}.`,"secondary")),p=we("Scanning for downloadable files"),!t&&y.start(we(`In progress: ${p}...`,"secondary"));const m=`${l}/flows/${a}/${await gn(h,s,l,a)}/${c}/etl/`,w={Bucket:s,Prefix:m},{Contents:b}=await h.listObjectsV2(w).promise();!t&&y.succeed(we(`Finished: ${p}.`,"secondary")),kn("s3-list-res",b);const v=b?Me(b.map((e=>e.Key)),{pattern:"!(.ipynb_checkpoints/*)"}):[];if(!v||0===v.length)return void(t?_e({status:"success",downloadedFiles:[]}):y.warn(we(`Warning: ${we("Nothing to download!")}`,"secondary")));p=we(`Downloading script files to ${we(g,"info")}`),!t&&y.info(we(`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(kn("file",o),e.endsWith("/")){!r(o)&&await k(o,{recursive:!0});continue}if(!u)try{await x(o),kn("exists, skipping"),$.push([n,"Skipped"]);continue}catch(e){"ENOENT"!==e.code&&be(e)}p=we(`Downloading file: ${we(n,"info")}`),!t&&y.start(we(`In progress: ${p}...`,"secondary")),await k(i.dirname(o),{recursive:!0});const a=h.getObject({Bucket:s,Key:e}).createReadStream();await _(o,await Ce(a)),!t&&y.succeed(we(`Finished: ${p}.`,"secondary")),$.push([n,"Downloaded"])}t?_e({status:"success",downloadedFiles:v}):be($.toString())}catch(e){t?_e({status:"error",error:e}):(y.fail(we(`Error: ${p}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),kn(e),e&&e.response&&e.response.data&&kn("response",e.response.data))}}});const On=[wn,$n,jn],xn=Oe("commands:etl"),En="etl <action>";var Tn=Object.freeze({__proto__:null,builder:async function(e){xn("builder",En);return(await Ke(e)).command(On)},command:En,desc:"Manage ETL scripts",handler:async function(e){xn("handler",En,e)}});const An=Oe("commands:flows:list"),Sn="list";var In=Object.freeze({__proto__:null,builder:async e=>(An("builder",Sn),e.option("tenant",{...Ue.tenant.config})),command:Sn,desc:"List flows",handler:async e=>{An("handler",Sn,e);const{hg:n,json:t,apikey:o,env:s,tenant:r}=e,{clientApiBaseUri:a}=n;let i,c=U();try{i=we(`Retrieving ${r?`${we(r,"info")} tenant's`:"the"} flows for environment: ${we(s,"info")}`);const e=`${a}/${s}/flows/${r?`linked?user_id=${r}`:"supported"}`;An("requesting:",e),!t&&c.start(we(`In progress: ${i}...`,"secondary"));const{data:n}=await K.get(e,{headers:{"x-api-key":o}});if(!t&&c.succeed(we(`Finished: ${i}.`,"secondary")),An("response-data",n),!n||0===n.length)return void(t?_e([]):c.warn(we(`Warning: ${we("No flows for specified environment and tenant")}.`,"secondary")));if(t)_e(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?w(n.taps):"",n.targets?w(n.targets):"none"]))),console.log(e.toString())}}catch(e){t?_e({status:"error",error:e}):(c.fail(we(`Error: ${i}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),An(e),e&&e.response&&e.response.data&&An("response",e.response.data))}}});const Fn=[In],Un=Oe("commands:flows"),Nn="flows <action>";var Kn,Bn=Object.freeze({__proto__:null,builder:async function(e){Un("builder",Nn);return(await Ke(e)).command(Fn)},command:Nn,desc:"Manage flows",handler:async function(e){Un("handler",Nn,e)}}),Dn={exports:{}},Pn={exports:{}},Mn={exports:{}},Cn={exports:{}};var Ln,Rn={exports:{}},zn={exports:{}};var Vn,qn,Wn={exports:{}};function Gn(){return qn||(qn=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 Ln||(Ln=1,e=zn,n=zn.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),zn.exports;var e,n}(),o=a(t),s=function(){return Vn||(Vn=1,e=Wn,n=Wn.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){return e[Symbol.iterator]&&e[Symbol.iterator]()},e.exports=n.default),Wn.exports;var e,n}(),r=a(s);function a(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default}(Rn,Rn.exports)),Rn.exports}var Jn,Qn={exports:{}};var Yn,Hn={},Zn={exports:{}},Xn={exports:{}};var et,nt,tt,ot={};function st(){return nt||(nt=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 Yn||(Yn=1,e=Xn,n=Xn.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),Xn.exports;var e,n}(),o=i(t),s=function(){if(et)return ot;et=1,Object.defineProperty(ot,"__esModule",{value:!0}),ot.fallback=s,ot.wrap=r;var e,n=ot.hasQueueMicrotask="function"==typeof queueMicrotask&&queueMicrotask,t=ot.hasSetImmediate="function"==typeof setImmediate&&setImmediate,o=ot.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,ot.default=r(e),ot}(),r=i(s),a=rt();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}(Zn,Zn.exports)),Zn.exports}function rt(){if(tt)return Hn;tt=1,Object.defineProperty(Hn,"__esModule",{value:!0}),Hn.isAsyncIterable=Hn.isAsyncGenerator=Hn.isAsync=void 0;var e,n=st(),t=(e=n)&&e.__esModule?e:{default:e};function o(e){return"AsyncFunction"===e[Symbol.toStringTag]}return Hn.default=function(e){if("function"!=typeof e)throw new Error("expected a function");return o(e)?(0,t.default)(e):e},Hn.isAsync=o,Hn.isAsyncGenerator=function(e){return"AsyncGenerator"===e[Symbol.toStringTag]},Hn.isAsyncIterable=function(e){return"function"==typeof e[Symbol.asyncIterator]},Hn}var at,it,ct,lt={exports:{}},dt={exports:{}};function ut(){return at||(at=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});n.default={},e.exports=n.default}(dt,dt.exports)),dt.exports}function ft(){return ct||(ct=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});var t=function(){return Kn||(Kn=1,e=Cn,n=Cn.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),Cn.exports;var e,n}(),o=u(t),s=u(Gn()),r=function(){return Jn||(Jn=1,e=Qn,n=Qn.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),Qn.exports;var e,n}(),a=u(r),i=rt(),c=(it||(it=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=ut())&&t.__esModule?t:{default:t};e.exports=n.default}(lt,lt.exports)),lt.exports),l=u(c),d=u(ut());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}(Mn,Mn.exports)),Mn.exports}var pt,yt={exports:{}};var gt,ht,mt,wt={exports:{}};function bt(){return gt||(gt=1,e=wt,n=wt.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),wt.exports;var e,n}function vt(){return ht||(ht=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});var t=i(ft()),o=function(){return pt||(pt=1,e=yt,n=yt.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){return(n,t,o)=>e(n,o)},e.exports=n.default),yt.exports;var e,n}(),s=i(o),r=i(rt()),a=i(bt());function i(e){return e&&e.__esModule?e:{default:e}}n.default=(0,a.default)((function(e,n,o,a){return(0,t.default)(n)(e,(0,s.default)((0,r.default)(o)),a)}),4),e.exports=n.default}(Pn,Pn.exports)),Pn.exports}var $t=D((mt||(mt=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0});var t=s(vt()),o=s(bt());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}(Dn,Dn.exports)),Dn.exports));const kt=Oe("commands:jobs:download"),_t="download <jobroot>";var jt=Object.freeze({__proto__:null,builder:async e=>(kt("builder",_t),e.option("downloadTo",Ue.downloadTo.config)),command:_t,desc:"Download Job files",handler:async e=>{kt("handler",_t,e);const{hg:n,json:t,apikey:o,env:s,jobroot:r,downloadTo:c}=e,{clientApiBaseUri:l}=n;let d,u=U();try{d=we("Verifying user and authorizing"),!t&&u.start(we(`In progress: ${d}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:f}=await ze({debug:kt,baseUri:l,task:"job-download",env:s,apikey:o,jobroot:r}),p=new A.S3({accessKeyId:e,secretAccessKey:n,sessionToken:f});!t&&u.succeed(we(`Finished: ${d}.`,"secondary")),d=we("Scanning for downloadable files"),!t&&u.start(we(`In progress: ${d}...`,"secondary"));const y={Bucket:s,Prefix:r},{Contents:g}=await p.listObjectsV2(y).promise();if(kt("res",g),!g||0===g.length)return void(t?_e({status:"error",error:"Nothing to download!"}):(u.fail(we(`Error: ${d}.`,"secondary")),ve(we(`Message: ${we("Nothing to download!")}`,"secondary"))));if(!t&&u.succeed(we(`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 $t(g.filter((({Key:e})=>!new RegExp(`${r}/([^/]+)-config.json`).test(e))),(async e=>{d=we(`Downloading file: ${we(e.Key,"info")}`),!t&&u.start(we(`In progress: ${d}...`,"secondary"));const n=i.resolve(h,e.Key.substring(r.length+1));kt("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(we(`Finished: ${d}.`,"secondary"))})),t?_e({status:"success",downloadedFiles:g.map((({Key:e})=>e))}):(d=we("Downloading job files."),u.succeed(we(`Finished: ${d}`,"secondary")))}catch(e){t?_e({status:"error",error:e}):(u.fail(we(`Error: ${d}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),kt(e),e&&e.response&&e.response.data&&kt("response",e.response.data))}}});const Ot=(...e)=>{Oe("commands:jobs:list")(...e)},xt="list";var Et=Object.freeze({__proto__:null,builder:async e=>(Ot("builder",xt),e.option("flow",Ue.flow.config).demandOption("flow",Ue.flow.demandText).option("tenant",{...Ue.tenant.config,default:"default"}).option("count",Ue.count.config)),command:xt,desc:"List jobs",handler:async e=>{Ot("handler",xt,e);const{hg:n,json:t,apikey:o,env:s,flow:r,tenant:a,count:i}=e,{clientApiBaseUri:c}=n;let l,d=U();try{l=we(`Retrieving jobs for environment: ${we(s,"info")} flow: ${we(r,"info")} tenant: ${we(a,"info")}...`);const e=`${c}/${s}/${r}/${a}/jobs${i?`?count=${i}`:""}`;Ot("requesting:",e),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const{data:n}=await K.get(e,{headers:{"x-api-key":o}});if(!t&&d.succeed(we(`Finished: ${l}.`,"secondary")),Ot("response-data",n),!n||0===n.length)return void(t?_e([]):d.warn(we(`Warning: ${we("No jobs for the specified environment, flow and tenant")}.`,"secondary")));if(t)_e(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?_e({status:"error",error:e}):(d.fail(we(`Error: ${l}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),Ot(e),e&&e.response&&e.response.data&&Ot("response",e.response.data))}}});const Tt=[jt,Et],At=Oe("commands:jobs"),St="jobs <action>";var It=Object.freeze({__proto__:null,builder:async function(e){At("builder",St);return(await Ke(e)).command(Tt)},command:St,desc:"Manage ETL jobs",handler:async function(e){At("handler",St,e)}});const Ft=Oe("commands:snapshots:deploy"),Ut="deploy";var Nt=Object.freeze({__proto__:null,builder:async e=>(Ft("builder",Ut),e.option("tenant",{...Ue.tenant.config,default:"default"}).option("sourceFolder",Ue.sourceFolder.config).demandOption("sourceFolder",Ue.sourceFolder.demandText)),command:Ut,desc:"Deploy Snapshots",handler:async e=>{Ft("handler",Ut,e);const{hg:n,json:t,apikey:o,env:s,tenant:r,sourceFolder:a}=e,{clientApiBaseUri:c}=n;let l,d=U();const u=i.resolve(process.cwd(),a);try{l=we(`Deploying Snapshots for Tenant ${we(r,"info")} to ${we(s,"info")}`),!t&&d.info(we(`Info: ${l}.`,"secondary"));const e=await Pe(u,{recursive:!0});if(0===e.length)return void(t?_e({status:"error",error:"There are no files to deploy at the specified location!"}):d.fail(we(`Error: ${we("There are no files to deploy at the specified location!")}.`,"secondary")));l=we("Verifying user and authorizing");const{accessKeyId:n,secretAccessKey:f,sessionToken:p}=await ze({debug:Ft,baseUri:c,task:"snapshot-deploy",env:s,tenant:r,apikey:o});!t&&d.succeed(we(`Finished: ${l}.`,"secondary"));const y=new A.S3({accessKeyId:n,secretAccessKey:f,sessionToken:p});l=we("Validating tenant exists"),!t&&d.start(we(`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 Ft("err",e),new Error("Tenant doesn't exist. Please check your tenant (-u) argument.")}!t&&d.succeed(we(`Finished: ${l}.`,"secondary"));const g=`${r}/snapshots/`,h=new F({head:["File","Status"]});l=we("Preparing deployment target"),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const{Contents:m}=await y.listObjectsV2({Bucket:s,Prefix:`${g}`}).promise();!t&&d.stop(),Ft("contents",m),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const w=m.map((e=>({Key:e.Key})));if(w.length>0){const e={Bucket:s,Delete:{Objects:w,Quiet:!0}};await y.deleteObjects(e).promise(),w.forEach((({Key:e})=>h.push([e.substring(g.length),we("Deleted","warn")])))}!t&&d.succeed(we(`Finished: ${l}.`,"secondary"));for await(const n of e){const e=i.relative(a,n),o=`${g}${e}`;l=we(`Deploying file: ${we(e,"info")}`),!t&&d.start(we(`In progress: ${l}...`,"secondary"));const r={Bucket:s,Key:o,Body:await O(n)},c=await y.putObject(r).promise();!t&&d.succeed(we(`Finished: ${l}.`,"secondary")),Ft("s3-put-res",c),h.push([e,we("Deployed","info")])}t?_e({status:"success",deployedFiles:e}):be(h.toString())}catch(e){t?_e({status:"error",error:e}):(d.fail(we(`Error: ${l}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),Ft(e),e&&e.response&&e.response.data&&Ft("response",e.response.data))}}});const Kt=Oe("commands:snapshots:download"),Bt="download";var Dt=Object.freeze({__proto__:null,builder:async e=>(Kt("builder",Bt),e.option("downloadTo",Ue.downloadTo.config).demandOption("downloadTo",Ue.downloadTo.demandText).option("tenant",{...Ue.tenant.config,default:"default"}).option("overwrite",Ue.overwrite.config).demandOption("overwrite",Ue.overwrite.demandText)),command:Bt,desc:"Download Snapshots",handler:async e=>{Kt("handler",Bt,e);const{hg:n,json:t,apikey:o,env:s,tenant:a,downloadTo:c,overwrite:l}=e,{clientApiBaseUri:d}=n;let u,f=U();const p=i.resolve(process.cwd(),function(e){function n(e){return process.argv.indexOf(e)>-1}if(n(`--${e}`))return!0;const t=Ue[e]?.config?.alias||[];for(let e in t)if(n(`-${t[e]}`))return!0;return!1}("downloadTo")?c:"snapshots");try{u=we("Verifying user and authorizing"),!t&&f.start(we(`In progress: ${u}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:c}=await ze({debug:Kt,baseUri:d,task:"snapshot-download",env:s,tenant:a,apikey:o}),y=new A.S3({accessKeyId:e,secretAccessKey:n,sessionToken:c});!t&&f.succeed(we(`Finished: ${u}.`,"secondary")),u=we("Validating tenant exists"),!t&&f.start(we(`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 Kt("err",e),new Error("Tenant doesn't exist. Please check your tenant (-u) argument.")}!t&&f.succeed(we(`Finished: ${u}.`,"secondary")),u=we("Scanning for downloadable files"),!t&&f.start(we(`In progress: ${u}...`,"secondary"));const g=`${a}/snapshots/`,h={Bucket:s,Prefix:g},{Contents:m}=await y.listObjectsV2(h).promise();!t&&f.succeed(we(`Finished: ${u}.`,"secondary")),Kt("s3-list-res",m);const w=m?m.map((e=>e.Key)).filter((e=>e!==g)):[];if(!w||0===w.length)return void(t?_e({status:"success",downloadedFiles:[]}):f.warn(we(`Warning: ${we("Nothing to download!")}`,"secondary")));u=we(`Downloading snapshot files to ${we(p,"info")}`),!t&&f.info(we(`Info: ${u}.`,"secondary"));const b=new F({head:["File","Status"]});for await(const e of w){const n=e.substring(g.length),o=i.resolve(p,n);if(Kt("file",o),e.endsWith("/")){!r(o)&&await k(o,{recursive:!0});continue}if(!l)try{await x(o),Kt("exists, skipping"),b.push([n,"Skipped"]);continue}catch(e){"ENOENT"!==e.code&&be(e)}u=we(`Downloading file: ${we(n,"info")}`),!t&&f.start(we(`In progress: ${u}...`,"secondary")),await k(i.dirname(o),{recursive:!0});const a=y.getObject({Bucket:s,Key:e}).createReadStream();await _(o,await Ce(a)),!t&&f.succeed(we(`Finished: ${u}.`,"secondary")),b.push([n,"Downloaded"])}t?_e({status:"success",downloadedFiles:w}):be(b.toString())}catch(e){t?_e({status:"error",error:e}):(f.fail(we(`Error: ${u}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),Kt(e),e&&e.response&&e.response.data&&Kt("response",e.response.data))}}});const Pt=[Nt,Dt],Mt=Oe("commands:snapshots"),Ct="snapshots <action>";var Lt=Object.freeze({__proto__:null,builder:async function(e){Mt("builder",Ct,e);return(await Ke(e)).command(Pt)},command:Ct,desc:"Manage tenant snapshots",handler:async function(e){Mt("handler",Ct,e)}});const Rt=Oe("commands:tenants:custom-etl"),zt="custom-etl",Vt=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 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 qt=Object.freeze({__proto__:null,builder:async e=>(Rt("builder",zt),e.option("tenant",Ue.tenant.config).option("flow",Ue.flow.config).demandOption("flow",Ue.flow.demandText)),command:zt,desc:"List tenants with custom ETL in a specific flow",handler:async e=>{Rt("handler",zt,e);const{hg:n,json:t,apikey:o,env:s,flow:r}=e;let a,i=U();try{a=we(`Retrieving tenants for environment ${we(s,"info")}`),!t&&i.start(we(`In progress: ${a}...`,"secondary"));const[e,c]=await Promise.all([Ve({debug:Rt,baseUri:n.clientApiBaseUri,apikey:o,env:s}),qe({debug:Rt,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r})]);!t&&i.succeed(we(`Finished: ${a}.`,"secondary"));let l=[];a=we(`Querying for custom ETL scripts for flow ${we(r,"info")}`),!t&&i.start(we(`In progress: ${a}...`,"secondary"));for(const t of Le(e)){const e=await Promise.all(t.map((e=>Vt({debug:Rt,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r,tenant:e,supportedSources:c}))));l=l.concat(e.filter(Boolean))}if(!t&&i.succeed(we(`Finished: ${a}.`,"secondary")),t)_e(l);else{const e=new F({head:["Tenant ID"]});e.push(...l.map((e=>[e]))),console.log(e.toString())}}catch(e){t?_e({status:"error",error:e}):(i.fail(we(`Error: ${a}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),Rt(e),e&&e.response&&e.response.data&&Rt("response",e.response.data))}}});const Wt=Oe("commands:tenants:custom-field-map"),Gt="custom-field-map",Jt=async({debug:e,baseUri:n,apikey:t,env:o,flow:s,tenant:r,isV2Flow:a})=>{const i=a?await Je({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 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 Qt=Object.freeze({__proto__:null,builder:async e=>(Wt("builder",Gt),e.option("tenant",Ue.tenant.config).option("flow",Ue.flow.config).demandOption("flow",Ue.flow.demandText)),command:Gt,desc:"List tenants with custom field map in a specific flow",handler:async e=>{Wt("handler",Gt,e);const{hg:n,json:t,apikey:o,env:s,flow:r}=e;let a,i=U();try{a=we(`Retrieving tenants for environment ${we(s,"info")}`),!t&&i.start(we(`In progress: ${a}...`,"secondary"));const[e,c]=await Promise.all([Ve({debug:Wt,baseUri:n.clientApiBaseUri,apikey:o,env:s}),Ze({debug:Wt,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r})]),l=2===c?.version;!t&&i.succeed(we(`Finished: ${a}.`,"secondary"));const d=[];a=we(`Querying for custom field maps for flow ${we(r,"info")}`),!t&&i.start(we(`In progress: ${a}...`,"secondary"));for(const t of Le(e)){const e=await Promise.all(t.map((e=>Jt({debug:Wt,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(we(`Finished: ${a}.`,"secondary")),t)_e(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?_e({status:"error",error:e}):(i.fail(we(`Error: ${a}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),Wt(e),e&&e.response&&e.response.data&&Wt("response",e.response.data))}}});const Yt=Oe("commands:tenants:delete"),Ht="delete";var Zt=Object.freeze({__proto__:null,builder:async e=>(Yt("builder",Ht),e.option("tenant",Ue.tenant.config)),command:Ht,desc:"Delete tenant",handler:async e=>{Yt("handler",Ht,e);const{hg:n,json:t,apikey:o,env:s,tenant:r}=e,{clientApiBaseUri:a}=n;let i,c=U();try{if("default"===r)throw new Error('It\'s not possible to delete "default" tenant!');i=we(`Deleting tenant ${r} schedules`),!t&&c.start(we(`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:Yt,baseUri:a,env:s,apikey:o,tenant:r}),!t&&c.succeed(we(`Finished: ${i}.`,"secondary")),i=we("Verifying user and authorizing"),!t&&c.start(we(`In progress: ${i}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:l}=await ze({debug:Yt,baseUri:a,task:"tenant-delete",env:s,tenant:r,apikey:o});!t&&c.succeed(we(`Finished: ${i}.`,"secondary"));const d=new A.S3({accessKeyId:e,secretAccessKey:n,sessionToken:l});for(i=we(`Deleting tenant ${r} for environment ${we(s,"info")}`),!t&&c.start(we(`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(we(`Finished: ${i}.`,"secondary")),t)_e({statu:"success",tenantDeleted:r});else{const e=new F({head:["Tenant ID"]});e.push([r]),console.log(e.toString())}}catch(e){t?_e({status:"error",error:e}):(c.fail(we(`Error: ${i}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),Yt(e),e&&e.response&&e.response.data&&Yt("response",e.response.data))}}});const Xt=Oe("commands:tenants:list"),eo="list";var no=Object.freeze({__proto__:null,builder:async e=>(Xt("builder",eo),e.option("tenant",Ue.tenant.config)),command:eo,desc:"List tenants",handler:async e=>{Xt("handler",eo,e);const{hg:n,json:t,apikey:o,env:s,tenant:r}=e;let a,i=U();try{a=we(`Retrieving tenants for environment ${we(s,"info")}`);const e=`${n.clientApiBaseUri}/tenants/${s}${r?`?tenant=${r}`:""}`;Xt("requesting:",e),!t&&i.start(we(`In progress: ${a}...`,"secondary"));const{data:c}=await K.get(e,{headers:{"x-api-key":o}});if(!t&&i.succeed(we(`Finished: ${a}.`,"secondary")),Xt("response-data",c),!c||0===c.length)return void(t?_e([]):i.info(we(`Info: ${we("No tenants found in the specified environment")}.`,"secondary")));if(t)_e(c);else{const e=new F({head:["tenant ID"]});e.push(...c.map((e=>[e]))),console.log(e.toString())}}catch(e){t?_e({status:"error",error:e}):(i.fail(we(`Error: ${a}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),Xt(e),e&&e.response&&e.response.data&&Xt("response",e.response.data))}}});const to=Oe("commands:tenants:custom-catalog"),oo="custom-catalog",so=async({debug:e,baseUri:n,apikey:t,env:o,flow:s,tenant:r,isV2Flow:a})=>{try{const i=a?await Je({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 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}/catalog.json`};try{await f.headObject(t).promise(),c.push(a?e:n)}catch(e){}}return{tenant:r,connectors:c}}catch(e){return console.error(e),{tenant:r,connectors:[]}}};var ro=Object.freeze({__proto__:null,builder:async e=>(to("builder",oo),e.option("tenant",Ue.tenant.config).option("flow",Ue.flow.config).demandOption("flow",Ue.flow.demandText)),command:oo,desc:"List tenants with custom catalog in a specific flow",handler:async e=>{to("handler",oo,e);const{hg:n,json:t,apikey:o,env:s,flow:r}=e;let a,i=U();try{a=we(`Retrieving tenants for environment ${we(s,"info")}`),!t&&i.start(we(`In progress: ${a}...`,"secondary"));const[e,c]=await Promise.all([Ve({debug:to,baseUri:n.clientApiBaseUri,apikey:o,env:s}),Ze({debug:to,baseUri:n.clientApiBaseUri,apikey:o,env:s,flow:r})]),l=2===c?.version;!t&&i.succeed(we(`Finished: ${a}.`,"secondary"));const d=[];a=we(`Querying for custom catalogs for flow ${we(r,"info")}`),!t&&i.start(we(`In progress: ${a}...`,"secondary"));for(const t of Le(e)){const e=await Promise.all(t.map((e=>so({debug:to,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(we(`Finished: ${a}.`,"secondary")),t)_e(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?_e({status:"error",error:e}):(i.fail(we(`Error: ${a}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),to(e),e&&e.response&&e.response.data&&to("response",e.response.data))}}});const ao=Oe("commands:tenants:update-config"),io="update-config",co=async({debug:e,baseUri:n,apikey:t,env:o,flow:s,tenant:r,connectorId:a,config:i,isV2Flow:c})=>{const l=c?"id":"tap";if(!(c?await Je({debug:e,baseUri:n,env:o,flow:s,tenant:r,apikey:t,config:!0}):await Ge({debug:e,baseUri:n,env:o,flow:s,tenant:r,apikey:t,config:!0})).find((e=>e[l]===a)))return null;const d=c?Ye:Qe;try{await d({debug:e,baseUri:n,env:o,flow:s,tenant:r,apikey:t,connectorId:a,config:i})}catch(e){console.log(we(`Error patching: ${r}. ${e}`,"secondary"))}return r};var lo=Object.freeze({__proto__:null,builder:async e=>(ao("builder",io),e.option("flow",Ue.flow.config).demandOption("flow",Ue.flow.demandText).option("connector",Ue.connector.config).demandOption("connector",Ue.connector.demandText).option("configFilePath",Ue.configFilePath.config).demandOption("configFilePath",Ue.configFilePath.demandText)),command:io,desc:"Update the config of a specific connector and flow for all tenants",handler:async e=>{ao("handler",io,e);const{hg:t,json:o,apikey:s,env:a,flow:i,connector:c,configFilePath:l}=e;let d,u=U();try{if(!l)throw new Error("Config file path not provided");if(!l.endsWith(".json"))throw new Error("Config file must have .json extension");if(!r(l))throw new Error("Config file not found");const e=JSON.parse(n(l,{encoding:"utf-8"}));d=we(`Retrieving tenants for environment ${we(a,"info")}`),!o&&u.start(we(`In progress: ${d}...`,"secondary"));const[f,p]=await Promise.all([Ve({debug:ao,baseUri:t.clientApiBaseUri,apikey:s,env:a}),Ze({debug:ao,baseUri:t.clientApiBaseUri,apikey:s,env:a,flow:i})]),y=2===p?.version;!o&&u.succeed(we(`Finished: ${d}.`,"secondary"));const g=[];d=we(`Updating config for connector ${we(c,"info")} and flow ${we(i,"info")}`),!o&&u.start(we(`In progress: ${d}...`,"secondary"));for(const n of Le(f)){const o=await Promise.all(n.map((n=>co({debug:ao,baseUri:t.clientApiBaseUri,apikey:s,env:a,flow:i,tenant:n,connectorId:c,config:e,isV2Flow:y}))));g.push(...o.filter(Boolean))}if(!o&&u.succeed(we(`Finished: ${d}.`,"secondary")),o)_e(g);else{const e=new F({head:["Tenant ID"]});g.forEach((n=>e.push([n]))),console.log(e.toString())}}catch(e){o?_e({status:"error",error:e}):(u.fail(we(`Error: ${d}.`,"secondary")),ve(we(`Message: ${we(e.message)}`,"secondary")),ao(e),e&&e.response&&e.response.data&&ao("response",e.response.data))}}});const uo=[qt,Qt,Zt,no,ro,lo],fo=Oe("commands:tenants"),po="tenants <action>";var yo=Object.freeze({__proto__:null,builder:async function(e){fo("builder",po);return(await Ke(e)).command(uo)},command:po,desc:"Manage tenants",handler:async function(e){fo("handler",po,e)}});const go=[Fe,pn,Tn,Bn,It,Lt,yo];process.env.AWS_SDK_JS_SUPPRESS_MAINTENANCE_MODE_MESSAGE="1";he({});const ho=h(process.argv.slice(2));ho.usage(we("Usage: $0 <command>")).command(go).demandCommand().alias("v","version").alias("h","help").string("_").strictCommands().epilogue(we("For more information, visit https://docs.hotglue.xyz/docs/cli-overview")).wrap(Math.min(ho.terminalWidth(),90)).parse(process.argv.slice(G()+1),ce);
|
|
34
34
|
//# sourceMappingURL=index.js.map
|