@capgo/cli 0.8.3 → 0.9.0

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/.cz.toml CHANGED
@@ -1,7 +1,7 @@
1
1
  [tool.commitizen]
2
2
  name = "cz_conventional_commits"
3
3
  tag_format = "$major.$minor.$patch$prerelease"
4
- version = "0.8.1"
4
+ version = "0.9.0"
5
5
  version_files = [
6
6
  "package.json:version",
7
7
  ".cz.toml"
package/.eslintrc CHANGED
@@ -11,6 +11,8 @@
11
11
  }
12
12
  },
13
13
  "rules": {
14
+ "no-shadow": "off",
15
+ "@typescript-eslint/no-shadow": ["error"],
14
16
  "import/prefer-default-export": 0,
15
17
  "no-param-reassign": 0,
16
18
  "import/no-extraneous-dependencies": [
@@ -21,7 +23,6 @@
21
23
  ],
22
24
  "import/extensions": 0,
23
25
  "indent": "off",
24
- "@typescript-eslint/indent": ["error", 2],
25
26
  "eofline": 0,
26
27
  "arrow-parens": 0,
27
28
  "ordered-imports": 0,
package/CHANGELOG.md CHANGED
@@ -1,3 +1,45 @@
1
+ ## 0.9.0 (2022-05-24)
2
+
3
+ ### Fix
4
+
5
+ - supa config
6
+ - typing issues
7
+
8
+ ### Feat
9
+
10
+ - convert to supabase edge functions
11
+
12
+ ## 0.8.6 (2022-05-11)
13
+
14
+ ### Fix
15
+
16
+ - typo
17
+
18
+ ## 0.8.5 (2022-05-11)
19
+
20
+ ### Fix
21
+
22
+ - lint issue
23
+
24
+ ## 0.8.4 (2022-05-11)
25
+
26
+ ### Fix
27
+
28
+ - issue for app less than 1mb
29
+
30
+ ## 0.8.3 (2022-05-05)
31
+
32
+ ### Fix
33
+
34
+ - remove debug comments
35
+ - build and add auto retry
36
+
37
+ ## 0.8.2 (2022-04-29)
38
+
39
+ ### Fix
40
+
41
+ - external typo
42
+
1
43
  ## 0.8.1 (2022-04-29)
2
44
 
3
45
  ### Fix
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- (()=>{"use strict";var e={548:function(e,o,t){var r=this&&this.__awaiter||function(e,o,t,r){return new(t||(t=Promise))((function(a,n){function i(e){try{s(r.next(e))}catch(e){n(e)}}function p(e){try{s(r.throw(e))}catch(e){n(e)}}function s(e){var o;e.done?a(e.value):(o=e.value,o instanceof t?o:new t((function(e){e(o)}))).then(i,p)}s((r=r.apply(e,o||[])).next())}))},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0}),o.addApp=void 0;const n=t(778),i=a(t(167)),p=a(t(867)),s=t(304),l=t(147),d=t(470),c=t(11),u=t(233);o.addApp=(e,o)=>r(void 0,void 0,void 0,(function*(){var t,r;let{name:a,icon:f}=o;const{apikey:h}=o;let v,g;try{v=yield(0,n.loadConfig)()}catch(e){s.program.error("No capacitor config file found, run `cap init` first")}e=e||(null===(t=null==v?void 0:v.app)||void 0===t?void 0:t.appId),a=a||(null===(r=null==v?void 0:v.app)||void 0===r?void 0:r.appName)||"Unknown",f=f||"resources/icon.png",h||s.program.error("Missing API key, you need to provide a API key to add your app"),e&&a||s.program.error("Missing argument, you need to provide a appid and a name, or be in a capacitor project"),console.log(`Add ${e} to Capgo`);try{console.log("Adding...");const o={appid:e,name:a};if(f&&(0,d.existsSync)(f)){const e=(0,l.readFileSync)(f),t=(0,c.getType)(f);o.icon=e.toString("base64"),o.iconType=t}g=yield(0,i.default)({method:"POST",url:`${u.host}/api/add`,data:o,validateStatus:()=>!0,headers:{authorization:h}})}catch(e){s.program.error(`Network Error \n${p.default.render(e.response.data)}`)}g&&200===g.status||s.program.error(`Server Error \n${p.default.render(g.data)}`),console.log("App added to server, you can upload a version now")}))},453:function(e,o,t){var r=this&&this.__awaiter||function(e,o,t,r){return new(t||(t=Promise))((function(a,n){function i(e){try{s(r.next(e))}catch(e){n(e)}}function p(e){try{s(r.throw(e))}catch(e){n(e)}}function s(e){var o;e.done?a(e.value):(o=e.value,o instanceof t?o:new t((function(e){e(o)}))).then(i,p)}s((r=r.apply(e,o||[])).next())}))},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0}),o.deleteApp=void 0;const n=t(778),i=a(t(167)),p=a(t(867)),s=t(304),l=t(233);o.deleteApp=(e,o)=>r(void 0,void 0,void 0,(function*(){var t;const{apikey:r,version:a}=o;let d,c;try{d=yield(0,n.loadConfig)()}catch(e){s.program.error("No capacitor config file found, run `cap init` first")}e=e||(null===(t=null==d?void 0:d.app)||void 0===t?void 0:t.appId),r||s.program.error("Missing API key, you need to provide an API key to delete your app"),e||s.program.error("Missing argument, you need to provide a appid, or be in a capacitor project"),console.log(`Delete ${e} to Capgo`);try{console.log("Deleting..."),c=yield(0,i.default)({method:"POST",url:`${l.host}/api/delete`,data:{appid:e,version:a},validateStatus:()=>!0,headers:{authorization:r}})}catch(e){s.program.error(`Network Error \n${p.default.render(e.response.data)}`)}c&&200===c.status||s.program.error(`Server Error \n${p.default.render(c.data)}`),console.log("App deleted to server")}))},473:function(e,o,t){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0});const a=t(304),n=t(548),i=t(453),p=t(666),s=t(310),l=r(t(598));a.program.version(l.default.version).command("add [appid]").alias("a").action(n.addApp).option("-n, --name <name>","app name").option("-i, --icon <icon>","app icon path").option("-a, --apikey <apikey>","apikey to link to your account"),a.program.command("upload [appid]").alias("u").action(s.uploadVersion).option("-a, --apikey <apikey>","apikey to link to your account").option("-p, --path <path>","path of the file to upload").option("-c, --channel <channel>","channel to link to").option("-e, --external <url>","link to external url intead of upload to capgo cloud").option("-f, --format <base64|hex|binary|utf8>","choose the upload format default base64").option("-v, --version <version>","version number of the file to upload"),a.program.command("set [appid]").alias("s").action(p.setChannel).option("-c, --channel <channel>","channel to link to").option("-v, --version <version>","version number of the file to upload").option("-s, --state <state>","set the state of the channel, public or private").option("-a, --apikey <apikey>","apikey to link to your account"),a.program.description("Manage package and version in capgo Cloud").command("delete [appid]").alias("a").action(i.deleteApp).option("-a, --apikey <apikey>","apikey to link to your account").option("-v, --version <version>","version number of the app to delete"),a.program.parse(process.argv)},666:function(e,o,t){var r=this&&this.__awaiter||function(e,o,t,r){return new(t||(t=Promise))((function(a,n){function i(e){try{s(r.next(e))}catch(e){n(e)}}function p(e){try{s(r.throw(e))}catch(e){n(e)}}function s(e){var o;e.done?a(e.value):(o=e.value,o instanceof t?o:new t((function(e){e(o)}))).then(i,p)}s((r=r.apply(e,o||[])).next())}))},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0}),o.setChannel=void 0;const n=t(778),i=a(t(167)),p=a(t(867)),s=t(304),l=t(233);o.setChannel=(e,o)=>r(void 0,void 0,void 0,(function*(){var t;const{apikey:r,version:a,state:d,channel:c="dev"}=o;let u,f,h;try{u=yield(0,n.loadConfig)()}catch(e){s.program.error("No capacitor config file found, run `cap init` first")}e=e||(null===(t=null==u?void 0:u.app)||void 0===t?void 0:t.appId),"public"!==d&&"private"!==d||(h="public"===d),r||s.program.error("Missing API key, you need to provide a API key to add your app"),e||s.program.error("Missing argument, you need to provide a appid, or be in a capacitor project"),a||h||s.program.error("Missing argument, you need to provide a state or a version"),a?console.log(`Set ${c} to @${a} in ${e}`):console.log(`Set${c} to @${d} in ${e}`);try{f=yield(0,i.default)({method:"POST",url:`${l.host}/api/channel`,data:{version:a,public:h,appid:e,channel:c},validateStatus:()=>!0,headers:{authorization:r}})}catch(e){s.program.error(`Network Error \n${p.default.render(e.response.data)}`)}f&&200===f.status||s.program.error(`Server Error \n${p.default.render(f.data)}`),a?console.log("Done ✅"):console.log(`You can use now is channel in your app with the url: ${l.host}/api/latest?appid=${e}&channel=${c}`)}))},310:function(e,o,t){var r=this&&this.__awaiter||function(e,o,t,r){return new(t||(t=Promise))((function(a,n){function i(e){try{s(r.next(e))}catch(e){n(e)}}function p(e){try{s(r.throw(e))}catch(e){n(e)}}function s(e){var o;e.done?a(e.value):(o=e.value,o instanceof t?o:new t((function(e){e(o)}))).then(i,p)}s((r=r.apply(e,o||[])).next())}))},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0}),o.uploadVersion=void 0;const n=t(778),i=a(t(844)),p=a(t(167)),s=a(t(867)),l=t(304),d=a(t(295)),c=t(233),u=a(t(188));(0,u.default)(p.default,{retries:3,retryDelay:u.default.exponentialDelay});const f=1048576;var h;!function(e){e.uft8="utf8",e.base64="base64",e.hex="hex",e.binary="binary"}(h||(h={}));const v={base64:e=>4*e/3,hex:e=>2*e,binary:e=>e,utf8:e=>e},g=(e,o)=>r(void 0,void 0,void 0,(function*(){return yield(0,p.default)({method:"POST",url:c.hostUpload,data:e,validateStatus:()=>!0,headers:{"Content-Type":"application/json",apikey:o,authorization:`Bearer ${c.supaAnon}`}})}));o.uploadVersion=(e,o)=>r(void 0,void 0,void 0,(function*(){var t,r,a,u,y,m;let{version:b,path:k,channel:x}=o;const{apikey:w,external:_,format:$}=o;let M;x=x||"dev";let A="binary";$ in h&&(A=$);try{M=yield(0,n.loadConfig)()}catch(e){l.program.error("No capacitor config file found, run `cap init` first")}if(e=e||(null===(t=null==M?void 0:M.app)||void 0===t?void 0:t.appId),b=b||(null===(a=null===(r=null==M?void 0:M.app)||void 0===r?void 0:r.package)||void 0===a?void 0:a.version),k=k||(null===(u=null==M?void 0:M.app)||void 0===u?void 0:u.webDir),w||l.program.error("Missing API key, you need to provide a API key to add your app"),e&&b&&k||l.program.error("Missing argument, you need to provide a appid and a version and a path, or be in a capacitor project"),console.log(`Upload ${e}@${b} started from path "${k}" to Capgo cloud`),_)try{const o=yield(0,p.default)({method:"POST",url:c.hostUpload,data:{version:b,appid:e,channel:x,external:_},validateStatus:()=>!0,headers:{"Content-Type":"application/json",apikey:w,authorization:`Bearer ${c.supaAnon}`}});200!==o.status&&l.program.error(`Server Error \n${s.default.render((null==o?void 0:o.data)||"")}`)}catch(e){e.response?l.program.error(`Network Error \n${s.default.render((null===(y=e.response)||void 0===y?void 0:y.data)||"")}`):l.program.error(`Network Error \n${s.default.render(e||"")}`)}else{const o=new d.default.SingleBar({format:"Uploading: [{bar}] {percentage}% | ETA: {eta}s | {value}/{total} Mb"},d.default.Presets.shades_grey);try{const t=new i.default;t.addLocalFolder(k);const r=t.toBuffer().toString(A);console.log("appData size",r.length);const a=r.length,n=Math.floor(a/v[A](f));console.log("mbSize",a,n,v[A](f));const p=(I=a,N=v[A](f),Math.floor(I/((e,o)=>e<o?e:Math.floor(e/o))(I,N)));n>30&&l.program.error(`The app is too big, the limit is 30 Mb, your is ${n} Mb`),n>25&&console.log(`WARNING !!\nThe app size is ${n} Mb, the limit is 30 Mb`);const d=[];for(let e=0;e<r.length;e+=p)d.push(r.slice(e,e+p));let c;o.start(d.length,0,{speed:"N/A"});for(let t=0;t<d.length;t+=1){const r=yield g({version:b,appid:e,fileName:c,channel:x,format:A,app:d[t],isMultipart:d.length>1,chunk:t+1,totalChunks:d.length},w);200!==r.status&&(o.stop(),l.program.error(`Server Error \n${s.default.render((null==r?void 0:r.data)||"")}`)),o.update(t+1),c=r.data.fileName}o.stop()}catch(e){o.stop(),e.response?l.program.error(`Network Error \n${s.default.render((null===(m=e.response)||void 0===m?void 0:m.data)||"")}`):l.program.error(`Network Error \n${s.default.render(e||"")}`)}}var I,N;console.log("App uploaded to server"),console.log(`Try it in mobile app: ${c.host}/app_mobile`),console.log(`Or set the channel ${x} as public here: ${c.hostWeb}/app/package/${e}`),console.log("To use with live update in your own app")}))},233:(e,o)=>{Object.defineProperty(o,"__esModule",{value:!0}),o.supaAnon=o.hostUpload=o.hostWeb=o.host=void 0,o.host="https://capgo.app",o.hostWeb="https://web.capgo.app",o.hostUpload="https://xvwzpoazmxkqosrdewyv.functions.supabase.co/upload",o.supaAnon="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYzNzgwNTAwOSwiZXhwIjoxOTUzMzgxMDA5fQ.8tgID1d4jodPwuo_fz4KHN4o1XKB9fnqyt0_GaJSj-w"},778:e=>{e.exports=require("@capacitor/cli/dist/config")},844:e=>{e.exports=require("adm-zip")},167:e=>{e.exports=require("axios")},188:e=>{e.exports=require("axios-retry")},295:e=>{e.exports=require("cli-progress")},304:e=>{e.exports=require("commander")},470:e=>{e.exports=require("fs-extra")},11:e=>{e.exports=require("mime")},867:e=>{e.exports=require("prettyjson")},147:e=>{e.exports=require("fs")},598:e=>{e.exports=JSON.parse('{"name":"@capgo/cli","version":"0.8.3","description":"A CLI to upload to capgo servers","main":"dist/index.js","bin":{"capgo":"dist/index.js"},"repository":{"type":"git","url":"git+https://github.com/Cap-go/capgo-cli.git"},"bugs":{"url":"https://github.com/Cap-go/capgo-cli/issues"},"keywords":["appflow alternative","ionic","capacitor","auto update","live update","capgo","cli","upload","capgo-cli"],"scripts":{"dev":"set NODE_ENV=development&& npx webpack --config webpack.config.js","no-debug":"node dist/index.js","build":"set NODE_ENV=production&& npx webpack --config webpack.config.js","pack":"pkg","lint":"eslint . --ext .ts --fix"},"author":"github.com/riderx","license":"Apache 2.0","dependencies":{"@capacitor/cli":"3.5.1","adm-zip":"^0.5.9","axios":"0.27.2","axios-retry":"^3.2.5","cli-progress":"3.11.0","commander":"9.2.0","form-data":"^4.0.0","fs-extra":"10.1.0","mime":"^3.0.0","node-stream-zip":"^1.15.0","prettyjson":"^1.2.5","upath":"^2.0.1"},"devDependencies":{"@types/adm-zip":"0.5.0","@types/fs-extra":"^9.0.13","@types/node":"^17.0.31","@typescript-eslint/eslint-plugin":"5.22.0","@typescript-eslint/parser":"5.22.0","eslint":"8.14.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.5.0","eslint-import-resolver-typescript":"2.7.1","eslint-plugin-import":"2.26.0","eslint-plugin-prettier":"^4.0.0","git-format-staged":"3.0.0","husky":"^7.0.4","nodemon":"2.0.16","pkg":"5.6.0","prettier":"2.6.2","ts-loader":"^9.3.0","ts-node":"^10.7.0","tsconfig-paths":"4.0.0","typescript":"4.6.4","webpack":"5.72.0","webpack-cli":"^4.9.2","webpack-node-externals":"^3.0.0"}}')}},o={};!function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r].call(n.exports,n,n.exports,t),n.exports}(473)})();
2
+ (()=>{"use strict";var e={548:function(e,o,t){var r=this&&this.__awaiter||function(e,o,t,r){return new(t||(t=Promise))((function(n,a){function i(e){try{s(r.next(e))}catch(e){a(e)}}function p(e){try{s(r.throw(e))}catch(e){a(e)}}function s(e){var o;e.done?n(e.value):(o=e.value,o instanceof t?o:new t((function(e){e(o)}))).then(i,p)}s((r=r.apply(e,o||[])).next())}))},n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0}),o.addApp=void 0;const a=n(t(167)),i=n(t(867)),p=t(304),s=t(147),l=t(470),d=t(11),u=t(233),c="assets/icon.png";o.addApp=(e,o)=>r(void 0,void 0,void 0,(function*(){var t,r,n;let{name:f,icon:v}=o;const{apikey:g}=o,h=yield(0,u.getConfig)();let y;e=e||(null===(t=null==h?void 0:h.app)||void 0===t?void 0:t.appId),f=f||(null===(r=null==h?void 0:h.app)||void 0===r?void 0:r.appName)||"Unknown",v=v||"resources/icon.png",g||p.program.error("Missing API key, you need to provide a API key to add your app"),e&&f||p.program.error("Missing argument, you need to provide a appid and a name, or be in a capacitor project"),console.log(`Add ${e} to Capgo`),console.log("Adding...");const m={appid:e,name:f};if(v&&(0,l.existsSync)(v)){const e=(0,s.readFileSync)(v),o=(0,d.getType)(v);m.icon=e.toString("base64"),m.iconType=o||"image/png"}else if((0,l.existsSync)(c)){const e=(0,s.readFileSync)(c),o=(0,d.getType)(c);m.icon=e.toString("base64"),m.iconType=o||"image/png"}else console.warn(`Cannot find app icon in any of the following locations: ${v}, ${c}`);try{y=yield(0,a.default)({method:"POST",url:`${u.hostSupa}/add`,data:m,validateStatus:()=>!0,headers:{apikey:g,authorization:`Bearer ${u.supaAnon}`}})}catch(e){a.default.isAxiosError(e)&&e.response?p.program.error(`Network Error \n${i.default.render(null===(n=e.response)||void 0===n?void 0:n.data)}`):p.program.error(`Unknow error \n${i.default.render(e)}`)}y&&200===y.status||p.program.error(`Server Error \n${i.default.render(y.data)}`),console.log("App added to server, you can upload a version now")}))},453:function(e,o,t){var r=this&&this.__awaiter||function(e,o,t,r){return new(t||(t=Promise))((function(n,a){function i(e){try{s(r.next(e))}catch(e){a(e)}}function p(e){try{s(r.throw(e))}catch(e){a(e)}}function s(e){var o;e.done?n(e.value):(o=e.value,o instanceof t?o:new t((function(e){e(o)}))).then(i,p)}s((r=r.apply(e,o||[])).next())}))},n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0}),o.deleteApp=void 0;const a=n(t(167)),i=n(t(867)),p=t(304),s=t(233);o.deleteApp=(e,o)=>r(void 0,void 0,void 0,(function*(){var t,r;const{apikey:n,version:l}=o,d=yield(0,s.getConfig)();let u;e=e||(null===(t=null==d?void 0:d.app)||void 0===t?void 0:t.appId),n||p.program.error("Missing API key, you need to provide an API key to delete your app"),e||p.program.error("Missing argument, you need to provide a appid, or be in a capacitor project"),console.log(`Delete ${e} to Capgo`);try{console.log("Deleting..."),u=yield(0,a.default)({method:"POST",url:`${s.hostSupa}/delete`,data:{appid:e,version:l},validateStatus:()=>!0,headers:{apikey:n,authorization:`Bearer ${s.supaAnon}`}})}catch(e){a.default.isAxiosError(e)&&e.response?p.program.error(`Network Error \n${i.default.render(null===(r=e.response)||void 0===r?void 0:r.data)}`):p.program.error(`Unknow error \n${i.default.render(e)}`)}u&&200===u.status||p.program.error(`Server Error \n${i.default.render(u.data)}`),console.log("App deleted to server")}))},473:function(e,o,t){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0});const n=t(304),a=t(548),i=t(453),p=t(666),s=t(310),l=r(t(598));n.program.version(l.default.version).command("add [appid]").alias("a").action(a.addApp).option("-n, --name <name>","app name").option("-i, --icon <icon>","app icon path").option("-a, --apikey <apikey>","apikey to link to your account"),n.program.command("upload [appid]").alias("u").action(s.uploadVersion).option("-a, --apikey <apikey>","apikey to link to your account").option("-p, --path <path>","path of the file to upload").option("-c, --channel <channel>","channel to link to").option("-e, --external <url>","link to external url intead of upload to capgo cloud").option("-f, --format <base64|hex|binary|utf8>","choose the upload format default base64").option("-v, --version <version>","version number of the file to upload"),n.program.command("set [appid]").alias("s").action(p.setChannel).option("-c, --channel <channel>","channel to link to").option("-v, --version <version>","version number of the file to upload").option("-s, --state <state>","set the state of the channel, public or private").option("-a, --apikey <apikey>","apikey to link to your account"),n.program.description("Manage package and version in capgo Cloud").command("delete [appid]").alias("a").action(i.deleteApp).option("-a, --apikey <apikey>","apikey to link to your account").option("-v, --version <version>","version number of the app to delete"),n.program.parse(process.argv)},666:function(e,o,t){var r=this&&this.__awaiter||function(e,o,t,r){return new(t||(t=Promise))((function(n,a){function i(e){try{s(r.next(e))}catch(e){a(e)}}function p(e){try{s(r.throw(e))}catch(e){a(e)}}function s(e){var o;e.done?n(e.value):(o=e.value,o instanceof t?o:new t((function(e){e(o)}))).then(i,p)}s((r=r.apply(e,o||[])).next())}))},n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0}),o.setChannel=void 0;const a=n(t(167)),i=n(t(867)),p=t(304),s=t(233);o.setChannel=(e,o)=>r(void 0,void 0,void 0,(function*(){var t,r,n,l;let{version:d}=o;const{apikey:u,state:c,channel:f="dev"}=o,v=yield(0,s.getConfig)();let g,h;e=e||(null===(t=null==v?void 0:v.app)||void 0===t?void 0:t.appId),d=d||(null===(n=null===(r=null==v?void 0:v.app)||void 0===r?void 0:r.package)||void 0===n?void 0:n.version),"public"!==c&&"private"!==c||(h="public"===c),u||p.program.error("Missing API key, you need to provide a API key to add your app"),e||p.program.error("Missing argument, you need to provide a appid, or be in a capacitor project"),d||h||p.program.error("Missing argument, you need to provide a state or a version"),d?console.log(`Set ${f} to @${d} in ${e}`):console.log(`Set${f} to @${c} in ${e}`);try{g=yield(0,a.default)({method:"POST",url:`${s.hostSupa}/channel`,data:{version:d,public:h,appid:e,channel:f},validateStatus:()=>!0,headers:{apikey:u,authorization:`Bearer ${s.supaAnon}`}})}catch(e){a.default.isAxiosError(e)&&e.response?p.program.error(`Network Error \n${i.default.render(null===(l=e.response)||void 0===l?void 0:l.data)}`):p.program.error(`Unknow error \n${i.default.render(e)}`)}g&&200===g.status||p.program.error(`Server Error \n${i.default.render(g.data)}`),d?console.log("Done ✅"):console.log(`You can use now is channel in your app with the url: ${s.host}/api/latest?appid=${e}&channel=${f}`)}))},310:function(e,o,t){var r=this&&this.__awaiter||function(e,o,t,r){return new(t||(t=Promise))((function(n,a){function i(e){try{s(r.next(e))}catch(e){a(e)}}function p(e){try{s(r.throw(e))}catch(e){a(e)}}function s(e){var o;e.done?n(e.value):(o=e.value,o instanceof t?o:new t((function(e){e(o)}))).then(i,p)}s((r=r.apply(e,o||[])).next())}))},n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0}),o.uploadVersion=void 0;const a=n(t(844)),i=n(t(167)),p=n(t(867)),s=t(304),l=n(t(295)),d=n(t(188)),u=t(233);(0,d.default)(i.default,{retries:5,retryDelay:d.default.exponentialDelay});const c=1048576;var f;!function(e){e.uft8="utf8",e.base64="base64",e.hex="hex",e.binary="binary"}(f||(f={}));const v=f.binary,g=(e,o)=>e<o?1:Math.floor(e/o),h={base64:e=>Math.floor(4*e/3),hex:e=>Math.floor(2*e),binary:e=>e,utf8:e=>e},y=(e,o)=>r(void 0,void 0,void 0,(function*(){return(0,i.default)({method:"POST",url:`${u.hostSupa}/upload`,data:e,validateStatus:()=>!0,headers:{"Content-Type":"application/json",apikey:o,authorization:`Bearer ${u.supaAnon}`}})}));o.uploadVersion=(e,o)=>r(void 0,void 0,void 0,(function*(){var t,r,n,d,m,k;let{version:b,path:x,channel:w}=o;const{apikey:_,external:$,format:A}=o;w=w||"dev";const M=yield(0,u.getConfig)();let S=v;if(A&&A in f&&(S=A),e=e||(null===(t=null==M?void 0:M.app)||void 0===t?void 0:t.appId),b=b||(null===(n=null===(r=null==M?void 0:M.app)||void 0===r?void 0:r.package)||void 0===n?void 0:n.version),x=x||(null===(d=null==M?void 0:M.app)||void 0===d?void 0:d.webDir),_||s.program.error("Missing API key, you need to provide a API key to add your app"),e&&b&&x||s.program.error("Missing argument, you need to provide a appid and a version and a path, or be in a capacitor project"),console.log(`Upload ${e}@${b} started from path "${x}" to Capgo cloud`),$)try{const o=yield y({version:b,appid:e,channel:w,external:$},_);200!==o.status&&s.program.error(`Server Error \n${p.default.render((null==o?void 0:o.data)||"")}`)}catch(e){i.default.isAxiosError(e)&&e.response?s.program.error(`Network Error \n${p.default.render(null===(m=e.response)||void 0===m?void 0:m.data)}`):s.program.error(`Unknow error \n${p.default.render(e)}`)}else{const o=new l.default.SingleBar({format:"Uploading: [{bar}] {percentage}% | ETA: {eta}s | {value}/{total} Mb"},l.default.Presets.shades_grey);try{const t=new a.default;t.addLocalFolder(x);const r=t.toBuffer().toString(S),n=r.length,i=Math.floor(n/h[S](c)),l=g(n,h[S](c))>1?(I=n,P=h[S](c),Math.floor(I/g(I,P))):n;i>30&&s.program.error(`The app is too big, the limit is 30 Mb, your is ${i} Mb`),i>25&&console.log(`WARNING !!\nThe app size is ${i} Mb, the limit is 30 Mb`);const d=[];for(let e=0;e<r.length;e+=l)d.push(r.slice(e,e+l));let u;o.start(d.length,0,{speed:"N/A"});for(let t=0;t<d.length;t+=1){const r=yield y({version:b,appid:e,fileName:u,channel:w,format:S,app:d[t],isMultipart:d.length>1,chunk:t+1,totalChunks:d.length},_);200===r.status&&r.data.fileName||(o.stop(),s.program.error(`Server Error \n${p.default.render((null==r?void 0:r.data)||"")}`)),o.update(t+1),u=r.data.fileName}o.stop()}catch(e){o.stop(),i.default.isAxiosError(e)&&e.response?s.program.error(`Network Error \n${p.default.render(null===(k=e.response)||void 0===k?void 0:k.data)}`):s.program.error(`Unknow error \n${p.default.render(e)}`)}}var I,P;console.log("App uploaded to server"),console.log(`Try it in mobile app: ${u.host}/app_mobile`),console.log(`Or set the channel ${w} as public here: ${u.hostWeb}/app/package/${e}`),console.log("To use with live update in your own app")}))},233:function(e,o,t){var r=this&&this.__awaiter||function(e,o,t,r){return new(t||(t=Promise))((function(n,a){function i(e){try{s(r.next(e))}catch(e){a(e)}}function p(e){try{s(r.throw(e))}catch(e){a(e)}}function s(e){var o;e.done?n(e.value):(o=e.value,o instanceof t?o:new t((function(e){e(o)}))).then(i,p)}s((r=r.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.getConfig=o.supaAnon=o.hostSupa=o.hostWeb=o.host=void 0;const n=t(778),a=t(304);o.host="https://capgo.app",o.hostWeb="https://web.capgo.app",o.hostSupa="https://xvwzpoazmxkqosrdewyv.functions.supabase.co",o.supaAnon="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYzNzgwNTAwOSwiZXhwIjoxOTUzMzgxMDA5fQ.8tgID1d4jodPwuo_fz4KHN4o1XKB9fnqyt0_GaJSj-w",o.getConfig=()=>r(void 0,void 0,void 0,(function*(){let e;try{e=yield(0,n.loadConfig)()}catch(e){a.program.error("No capacitor config file found, run `cap init` first")}return e}))},778:e=>{e.exports=require("@capacitor/cli/dist/config")},844:e=>{e.exports=require("adm-zip")},167:e=>{e.exports=require("axios")},188:e=>{e.exports=require("axios-retry")},295:e=>{e.exports=require("cli-progress")},304:e=>{e.exports=require("commander")},470:e=>{e.exports=require("fs-extra")},11:e=>{e.exports=require("mime")},867:e=>{e.exports=require("prettyjson")},147:e=>{e.exports=require("fs")},598:e=>{e.exports=JSON.parse('{"name":"@capgo/cli","version":"0.9.0","description":"A CLI to upload to capgo servers","main":"dist/index.js","bin":{"capgo":"dist/index.js"},"repository":{"type":"git","url":"git+https://github.com/Cap-go/capgo-cli.git"},"bugs":{"url":"https://github.com/Cap-go/capgo-cli/issues"},"keywords":["appflow alternative","ionic","capacitor","auto update","live update","capgo","cli","upload","capgo-cli"],"scripts":{"dev":"set NODE_ENV=development&& npx webpack --config webpack.config.js","no-debug":"node dist/index.js","build":"set NODE_ENV=production&& npx webpack --config webpack.config.js","pack":"pkg","lint":"eslint . --ext .ts --fix"},"author":"github.com/riderx","license":"Apache 2.0","dependencies":{"@capacitor/cli":"3.5.1","adm-zip":"^0.5.9","axios":"0.27.2","axios-retry":"^3.2.5","cli-progress":"3.11.0","commander":"9.2.0","form-data":"^4.0.0","fs-extra":"10.1.0","mime":"^3.0.0","node-stream-zip":"^1.15.0","prettyjson":"^1.2.5","upath":"^2.0.1"},"devDependencies":{"@types/adm-zip":"0.5.0","@types/cli-progress":"^3.11.0","@types/fs-extra":"^9.0.13","@types/mime":"^2.0.3","@types/node":"^17.0.31","@types/prettyjson":"^0.0.30","@typescript-eslint/eslint-plugin":"5.22.0","@typescript-eslint/parser":"5.22.0","eslint":"8.14.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.5.0","eslint-import-resolver-typescript":"2.7.1","eslint-plugin-import":"2.26.0","eslint-plugin-prettier":"^4.0.0","git-format-staged":"3.0.0","husky":"^7.0.4","nodemon":"2.0.16","pkg":"5.6.0","prettier":"2.6.2","ts-loader":"^9.3.0","ts-node":"^10.7.0","tsconfig-paths":"4.0.0","typescript":"4.6.4","webpack":"5.72.0","webpack-cli":"^4.9.2","webpack-node-externals":"^3.0.0"}}')}},o={};!function t(r){var n=o[r];if(void 0!==n)return n.exports;var a=o[r]={exports:{}};return e[r].call(a.exports,a,a.exports,t),a.exports}(473)})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@capgo/cli",
3
- "version": "0.8.3",
3
+ "version": "0.9.0",
4
4
  "description": "A CLI to upload to capgo servers",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -49,8 +49,11 @@
49
49
  },
50
50
  "devDependencies": {
51
51
  "@types/adm-zip": "0.5.0",
52
+ "@types/cli-progress": "^3.11.0",
52
53
  "@types/fs-extra": "^9.0.13",
54
+ "@types/mime": "^2.0.3",
53
55
  "@types/node": "^17.0.31",
56
+ "@types/prettyjson": "^0.0.30",
54
57
  "@typescript-eslint/eslint-plugin": "5.22.0",
55
58
  "@typescript-eslint/parser": "5.22.0",
56
59
  "eslint": "8.14.0",
package/src/bin/add.ts CHANGED
@@ -1,51 +1,71 @@
1
- import { loadConfig } from '@capacitor/cli/dist/config';
2
1
  import axios from 'axios';
3
2
  import prettyjson from 'prettyjson';
4
3
  import { program } from 'commander';
5
- import { readFileSync } from 'fs';
4
+ import { readFileSync } from 'fs';
6
5
  import { existsSync } from 'fs-extra';
7
- import { getType } from 'mime';
8
- import { host } from './utils';
6
+ import { getType } from 'mime';
7
+ import { getConfig, hostSupa, supaAnon } from './utils';
9
8
 
10
- export const addApp = async (appid: string, options: any) => {
9
+ interface AppAdd {
10
+ appid: string;
11
+ name: string;
12
+ icon?: string;
13
+ iconType?: string;
14
+ }
15
+ interface Options {
16
+ apikey: string;
17
+ name?: string;
18
+ icon?: string;
19
+ }
20
+ const newIconPath = "assets/icon.png"
21
+ export const addApp = async (appid: string, options: Options) => {
11
22
  let { name, icon } = options;
12
23
  const { apikey } = options;
13
- let config;
14
- try {
15
- config = await loadConfig();
16
- } catch (err) {
17
- program.error("No capacitor config file found, run `cap init` first");
18
- }
24
+ const config = await getConfig();
19
25
  appid = appid || config?.app?.appId
20
26
  name = name || config?.app?.appName || 'Unknown'
21
27
  icon = icon || "resources/icon.png" // default path for capacitor app
22
28
  if (!apikey) {
23
29
  program.error("Missing API key, you need to provide a API key to add your app");
24
30
  }
25
- if(!appid || !name) {
31
+ if (!appid || !name) {
26
32
  program.error("Missing argument, you need to provide a appid and a name, or be in a capacitor project");
27
33
  }
28
34
  console.log(`Add ${appid} to Capgo`);
29
35
  let res;
36
+ console.log('Adding...');
37
+ const data: AppAdd = { appid, name }
38
+ if (icon && existsSync(icon)) {
39
+ const iconBuff = readFileSync(icon);
40
+ const contentType = getType(icon);
41
+ data.icon = iconBuff.toString('base64');
42
+ data.iconType = contentType || 'image/png';
43
+ }
44
+ else if (existsSync(newIconPath)) {
45
+ const iconBuff = readFileSync(newIconPath);
46
+ const contentType = getType(newIconPath);
47
+ data.icon = iconBuff.toString('base64');
48
+ data.iconType = contentType || 'image/png';
49
+ } else {
50
+ console.warn(`Cannot find app icon in any of the following locations: ${icon}, ${newIconPath}`);
51
+ }
30
52
  try {
31
- console.log('Adding...');
32
- const data: any = { appid, name }
33
- if(icon && existsSync(icon)) {
34
- const iconBuff = readFileSync(icon);
35
- const contentType = getType(icon);
36
- data.icon = iconBuff.toString('base64');
37
- data.iconType = contentType;
38
- }
39
53
  res = await axios({
40
54
  method: 'POST',
41
- url:`${host}/api/add`,
55
+ url: `${hostSupa}/add`,
42
56
  data,
43
57
  validateStatus: () => true,
44
58
  headers: {
45
- 'authorization': apikey
46
- }})
59
+ 'apikey': apikey,
60
+ 'authorization': `Bearer ${supaAnon}`
61
+ }
62
+ })
47
63
  } catch (err) {
48
- program.error(`Network Error \n${prettyjson.render(err.response.data)}`);
64
+ if (axios.isAxiosError(err) && err.response) {
65
+ program.error(`Network Error \n${prettyjson.render(err.response?.data)}`);
66
+ } else {
67
+ program.error(`Unknow error \n${prettyjson.render(err)}`);
68
+ }
49
69
  }
50
70
  if (!res || res.status !== 200) {
51
71
  program.error(`Server Error \n${prettyjson.render(res.data)}`);
package/src/bin/delete.ts CHANGED
@@ -1,22 +1,21 @@
1
- import { loadConfig } from '@capacitor/cli/dist/config';
2
1
  import axios from 'axios';
3
2
  import prettyjson from 'prettyjson';
4
3
  import { program } from 'commander';
5
- import { host } from './utils';
4
+ import { supaAnon, hostSupa, getConfig } from './utils';
6
5
 
7
- export const deleteApp = async (appid: string, options: any) => {
6
+ interface Options {
7
+ apikey: string;
8
+ version: string;
9
+ }
10
+
11
+ export const deleteApp = async (appid: string, options: Options) => {
8
12
  const { apikey, version } = options;
9
- let config;
10
- try {
11
- config = await loadConfig();
12
- } catch (err) {
13
- program.error("No capacitor config file found, run `cap init` first");
14
- }
13
+ const config = await getConfig();
15
14
  appid = appid || config?.app?.appId
16
15
  if (!apikey) {
17
16
  program.error('Missing API key, you need to provide an API key to delete your app');
18
17
  }
19
- if(!appid) {
18
+ if (!appid) {
20
19
  program.error('Missing argument, you need to provide a appid, or be in a capacitor project');
21
20
  }
22
21
  console.log(`Delete ${appid} to Capgo`);
@@ -25,17 +24,23 @@ export const deleteApp = async (appid: string, options: any) => {
25
24
  console.log('Deleting...');
26
25
  res = await axios({
27
26
  method: 'POST',
28
- url: `${host}/api/delete`,
27
+ url: `${hostSupa}/delete`,
29
28
  data: { appid, version },
30
29
  validateStatus: () => true,
31
30
  headers: {
32
- 'authorization': apikey
33
- }})
31
+ 'apikey': apikey,
32
+ 'authorization': `Bearer ${supaAnon}`
33
+ }
34
+ })
34
35
  } catch (err) {
35
- program.error(`Network Error \n${prettyjson.render(err.response.data)}`);
36
+ if (axios.isAxiosError(err) && err.response) {
37
+ program.error(`Network Error \n${prettyjson.render(err.response?.data)}`);
38
+ } else {
39
+ program.error(`Unknow error \n${prettyjson.render(err)}`);
40
+ }
36
41
  }
37
42
  if (!res || res.status !== 200) {
38
43
  program.error(`Server Error \n${prettyjson.render(res.data)}`);
39
44
  }
40
- console.log("App deleted to server")
45
+ console.log("App deleted to server")
41
46
  }
package/src/bin/set.ts CHANGED
@@ -1,29 +1,32 @@
1
- import { loadConfig } from '@capacitor/cli/dist/config';
2
1
  import axios from 'axios';
3
2
  import prettyjson from 'prettyjson';
4
3
  import { program } from 'commander';
5
- import { host } from './utils';
4
+ import { getConfig, host, hostSupa, supaAnon } from './utils';
6
5
 
7
- export const setChannel = async (appid, options) => {
8
- const { apikey, version, state, channel = 'dev' } = options;
9
- let config;
6
+ interface Options {
7
+ apikey: string;
8
+ version: string;
9
+ state: string;
10
+ channel?: string;
11
+ }
12
+
13
+ export const setChannel = async (appid: string, options: Options) => {
14
+ let { version } = options;
15
+ const { apikey, state, channel = 'dev' } = options;
16
+ const config = await getConfig();
10
17
  let res;
11
- try {
12
- config = await loadConfig();
13
- } catch (err) {
14
- program.error("No capacitor config file found, run `cap init` first");
15
- }
16
18
  appid = appid || config?.app?.appId
19
+ version = version || config?.app?.package?.version
17
20
  let parsedState
18
- if (state === 'public' || state === 'private')
21
+ if (state === 'public' || state === 'private')
19
22
  parsedState = state === 'public'
20
23
  if (!apikey) {
21
24
  program.error("Missing API key, you need to provide a API key to add your app");
22
25
  }
23
- if(!appid) {
26
+ if (!appid) {
24
27
  program.error("Missing argument, you need to provide a appid, or be in a capacitor project");
25
28
  }
26
- if(!version && !parsedState) {
29
+ if (!version && !parsedState) {
27
30
  program.error("Missing argument, you need to provide a state or a version");
28
31
  }
29
32
  if (version) {
@@ -34,7 +37,7 @@ export const setChannel = async (appid, options) => {
34
37
  try {
35
38
  res = await axios({
36
39
  method: 'POST',
37
- url:`${host}/api/channel`,
40
+ url: `${hostSupa}/channel`,
38
41
  data: {
39
42
  version,
40
43
  public: parsedState,
@@ -43,10 +46,16 @@ export const setChannel = async (appid, options) => {
43
46
  },
44
47
  validateStatus: () => true,
45
48
  headers: {
46
- 'authorization': apikey
47
- }})
49
+ 'apikey': apikey,
50
+ 'authorization': `Bearer ${supaAnon}`
51
+ }
52
+ })
48
53
  } catch (err) {
49
- program.error(`Network Error \n${prettyjson.render(err.response.data)}`);
54
+ if (axios.isAxiosError(err) && err.response) {
55
+ program.error(`Network Error \n${prettyjson.render(err.response?.data)}`);
56
+ } else {
57
+ program.error(`Unknow error \n${prettyjson.render(err)}`);
58
+ }
50
59
  }
51
60
  if (!res || res.status !== 200) {
52
61
  program.error(`Server Error \n${prettyjson.render(res.data)}`);
@@ -0,0 +1,6 @@
1
+ // CapacitorConfig
2
+
3
+ declare module '@capacitor/cli/dist/config' {
4
+ export function loadConfig(): CapacitorConfig;
5
+ };
6
+
package/src/bin/upload.ts CHANGED
@@ -1,18 +1,17 @@
1
- import { loadConfig } from '@capacitor/cli/dist/config';
2
1
  import AdmZip from 'adm-zip';
3
- import axios from 'axios';
2
+ import axios, { AxiosResponse } from 'axios';
4
3
  import prettyjson from 'prettyjson';
5
4
  import { program } from 'commander';
6
5
  import cliProgress from 'cli-progress';
7
- import { host, hostWeb, hostUpload, supaAnon } from './utils';
8
6
  import axiosRetry from 'axios-retry';
7
+ import { host, hostWeb, supaAnon, hostSupa, getConfig } from './utils';
9
8
 
10
- axiosRetry(axios, { retries: 3, retryDelay: axiosRetry.exponentialDelay });
9
+ axiosRetry(axios, { retries: 5, retryDelay: axiosRetry.exponentialDelay });
11
10
  const oneMb = 1048576; // size of one mb in bytes
12
11
  const maxMb = 30;
13
12
  const alertMb = 25;
14
13
  // enum string format
15
- enum UploadFormat {
14
+ enum UploadMode {
16
15
  uft8 = 'utf8',
17
16
  base64 = 'base64',
18
17
  hex = 'hex',
@@ -21,54 +20,64 @@ enum UploadFormat {
21
20
  interface uploadPayload {
22
21
  version: string
23
22
  appid: string
24
- fileName: string
23
+ fileName?: string
25
24
  channel: string
26
- format: UploadFormat
25
+ format: UploadMode
27
26
  app: string,
28
27
  isMultipart: boolean,
29
28
  chunk: number,
30
29
  totalChunks: number,
31
30
  }
31
+ interface uploadExternal {
32
+ version: string
33
+ appid: string
34
+ channel: string
35
+ external: string
36
+ }
32
37
 
33
- const formatDefault: UploadFormat = 'binary' as UploadFormat;
34
- const chuckNumber = (l: number, divider: number) => l < divider ? l : Math.floor(l / divider)
38
+ interface ResApi {
39
+ fileName: string
40
+ }
41
+
42
+ const formatDefault = UploadMode.binary;
43
+ const chuckNumber = (l: number, divider: number) => l < divider ? 1 : Math.floor(l / divider)
35
44
  const chuckSize = (l: number, divider: number) => Math.floor(l / chuckNumber(l, divider))
36
45
 
37
46
  const mbConvert = {
38
- 'base64': (l: number) => ((l * 4) / 3),
39
- 'hex': (l: number) => l * 2,
47
+ 'base64': (l: number) => Math.floor((l * 4) / 3),
48
+ 'hex': (l: number) => Math.floor(l * 2),
40
49
  'binary': (l: number) => l,
41
50
  'utf8': (l: number) => l,
42
51
  }
43
52
 
44
- const sendToBack = async (data: uploadPayload, apikey: string) => {
45
- const res = await axios({
46
- method: 'POST',
47
- url: hostUpload,
48
- data,
49
- validateStatus: () => true,
50
- headers: {
51
- 'Content-Type': 'application/json',
52
- 'apikey': apikey,
53
- authorization: `Bearer ${supaAnon}`
54
- }
55
- })
56
- return res
57
- }
53
+ const sendToBack = async (data: uploadPayload | uploadExternal, apikey: string): Promise<AxiosResponse<ResApi>> => axios({
54
+ method: 'POST',
55
+ url: `${hostSupa}/upload`,
56
+ data,
57
+ validateStatus: () => true,
58
+ headers: {
59
+ 'Content-Type': 'application/json',
60
+ 'apikey': apikey,
61
+ authorization: `Bearer ${supaAnon}`
62
+ }
63
+ })
58
64
 
59
- export const uploadVersion = async (appid, options) => {
65
+ interface Options {
66
+ version: string
67
+ path: string
68
+ apikey: string
69
+ channel?: string
70
+ external?: string
71
+ format?: UploadMode
72
+ }
73
+ export const uploadVersion = async (appid: string, options: Options) => {
60
74
  let { version, path, channel } = options;
61
75
  const { apikey, external, format } = options;
62
76
  channel = channel || 'dev';
63
- let config;
77
+ const config = await getConfig();
64
78
  let formatType = formatDefault;
65
- if (format in UploadFormat) {
66
- formatType = format as UploadFormat;
67
- }
68
- try {
69
- config = await loadConfig();
70
- } catch (err) {
71
- program.error("No capacitor config file found, run `cap init` first");
79
+ if (format && format in UploadMode) {
80
+ formatType = format;
72
81
  }
73
82
  appid = appid || config?.app?.appId
74
83
  version = version || config?.app?.package?.version
@@ -82,30 +91,20 @@ export const uploadVersion = async (appid, options) => {
82
91
  console.log(`Upload ${appid}@${version} started from path "${path}" to Capgo cloud`);
83
92
  if (external) {
84
93
  try {
85
- const res = await axios({
86
- method: 'POST',
87
- url: hostUpload,
88
- data: {
89
- version,
90
- appid,
91
- channel,
92
- external,
93
- },
94
- validateStatus: () => true,
95
- headers: {
96
- 'Content-Type': 'application/json',
97
- 'apikey': apikey,
98
- authorization: `Bearer ${supaAnon}`
99
- }
100
- })
94
+ const res = await sendToBack({
95
+ version,
96
+ appid,
97
+ channel,
98
+ external
99
+ }, apikey)
101
100
  if (res.status !== 200) {
102
101
  program.error(`Server Error \n${prettyjson.render(res?.data || "")}`);
103
102
  }
104
103
  } catch (err) {
105
- if (err.response) {
106
- program.error(`Network Error \n${prettyjson.render(err.response?.data || "")}`)
104
+ if (axios.isAxiosError(err) && err.response) {
105
+ program.error(`Network Error \n${prettyjson.render(err.response?.data)}`);
107
106
  } else {
108
- program.error(`Network Error \n${prettyjson.render(err || "")}`)
107
+ program.error(`Unknow error \n${prettyjson.render(err)}`);
109
108
  }
110
109
  }
111
110
  } else {
@@ -122,7 +121,8 @@ export const uploadVersion = async (appid, options) => {
122
121
  const zippedSize = appData.length;
123
122
  const mbSize = Math.floor(zippedSize / mbConvert[formatType](oneMb));
124
123
  // console.log('mbSize', zippedSize, mbSize, mbConvert[formatType](oneMb))
125
- const chunkSize = chuckSize(zippedSize, mbConvert[formatType](oneMb));
124
+ const chunkSize = chuckNumber(zippedSize, mbConvert[formatType](oneMb)) > 1
125
+ ? chuckSize(zippedSize, mbConvert[formatType](oneMb)) : zippedSize;
126
126
  if (mbSize > maxMb) {
127
127
  program.error(`The app is too big, the limit is ${maxMb} Mb, your is ${mbSize} Mb`);
128
128
  }
@@ -138,7 +138,7 @@ export const uploadVersion = async (appid, options) => {
138
138
  });
139
139
  let fileName
140
140
  for (let i = 0; i < chunks.length; i += 1) {
141
- const res = await sendToBack({
141
+ const response = await sendToBack({
142
142
  version,
143
143
  appid,
144
144
  fileName,
@@ -149,20 +149,21 @@ export const uploadVersion = async (appid, options) => {
149
149
  chunk: i + 1,
150
150
  totalChunks: chunks.length,
151
151
  }, apikey)
152
- if (res.status !== 200) {
152
+ if (response.status !== 200 || !response.data.fileName) {
153
153
  b1.stop();
154
- program.error(`Server Error \n${prettyjson.render(res?.data || "")}`);
154
+ program.error(`Server Error \n${prettyjson.render(response?.data || "")}`);
155
155
  }
156
156
  b1.update(i + 1)
157
- fileName = res.data.fileName
157
+ const data: ResApi = response.data as ResApi
158
+ fileName = data.fileName
158
159
  }
159
160
  b1.stop();
160
161
  } catch (err) {
161
162
  b1.stop();
162
- if (err.response) {
163
- program.error(`Network Error \n${prettyjson.render(err.response?.data || "")}`)
163
+ if (axios.isAxiosError(err) && err.response) {
164
+ program.error(`Network Error \n${prettyjson.render(err.response?.data)}`);
164
165
  } else {
165
- program.error(`Network Error \n${prettyjson.render(err || "")}`)
166
+ program.error(`Unknow error \n${prettyjson.render(err)}`);
166
167
  }
167
168
  }
168
169
  }
package/src/bin/utils.ts CHANGED
@@ -1,12 +1,35 @@
1
- /* eslint-disable */
1
+ import { loadConfig } from '@capacitor/cli/dist/config';
2
+ import { program } from 'commander';
3
+
2
4
  export const host = 'https://capgo.app';
3
5
  export const hostWeb = 'https://web.capgo.app';
4
- export const hostUpload = 'https://xvwzpoazmxkqosrdewyv.functions.supabase.co/upload';
6
+ export const hostSupa = 'https://xvwzpoazmxkqosrdewyv.functions.supabase.co';
7
+ // export const hostSupa = 'https://aucsybvnhavogdmzwtcw.functions.supabase.co';
8
+
5
9
  // For local test purposes
6
10
  // export const host = 'http://localhost:3334';
7
- // export const hostUpload = 'http://localhost:54321/functions/v1/upload';
8
- /* eslint-enable */
9
11
 
10
12
  /* eslint-disable */
11
13
  export const supaAnon = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYzNzgwNTAwOSwiZXhwIjoxOTUzMzgxMDA5fQ.8tgID1d4jodPwuo_fz4KHN4o1XKB9fnqyt0_GaJSj-w'
14
+ // export const supaAnon = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImF1Y3N5YnZuaGF2b2dkbXp3dGN3Iiwicm9sZSI6ImFub24iLCJpYXQiOjE2NTE4NDE4MjMsImV4cCI6MTk2NzQxNzgyM30.AYzjGigPxlTw4eEkCjoGfYph8WRU3QXgIDcMWptQyAQ'
12
15
  /* eslint-enable */
16
+
17
+ interface Config {
18
+ app: {
19
+ appId: string;
20
+ appName: string;
21
+ webDir: string;
22
+ package: {
23
+ version: string;
24
+ };
25
+ };
26
+ }
27
+ export const getConfig = async () => {
28
+ let config: Config;
29
+ try {
30
+ config = await loadConfig();
31
+ } catch (err) {
32
+ program.error("No capacitor config file found, run `cap init` first");
33
+ }
34
+ return config;
35
+ }
package/tsconfig.json CHANGED
@@ -1,7 +1,10 @@
1
1
  {
2
2
  "compilerOptions": {
3
+ "strict": true,
4
+ "forceConsistentCasingInFileNames": true,
3
5
  "module": "commonjs",
4
6
  "esModuleInterop": true,
7
+ "skipLibCheck": true,
5
8
  "resolveJsonModule": true,
6
9
  "target": "es6",
7
10
  "moduleResolution": "node",
@@ -11,5 +14,5 @@
11
14
  "lib": ["es2016", "dom"]
12
15
  },
13
16
  "include": ["src/**/*"],
14
- "exclude": ["node_modules", "__tests__", "**/*.spec.ts"]
17
+ "exclude": ["node_modules", "dist", "__tests__", "**/*.spec.ts"]
15
18
  }