@hotglue/cli 1.0.25 → 1.0.27

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