@capgo/cli 3.6.2 → 3.6.4
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/CHANGELOG.md +14 -0
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/app/add.ts +3 -1
- package/src/init.ts +115 -33
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [3.6.4](https://github.com/Cap-go/capgo-cli/compare/v3.6.3...v3.6.4) (2023-03-07)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* add snag for new onboarding ([263fcbe](https://github.com/Cap-go/capgo-cli/commit/263fcbedacf1fc66ed7c74a188a3f96c9613f5a6))
|
|
11
|
+
|
|
12
|
+
### [3.6.3](https://github.com/Cap-go/capgo-cli/compare/v3.6.2...v3.6.3) (2023-03-07)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* better init command ([7d1c687](https://github.com/Cap-go/capgo-cli/commit/7d1c687986bef48ced19fb7323ff1d5df1237f3b))
|
|
18
|
+
|
|
5
19
|
### [3.6.2](https://github.com/Cap-go/capgo-cli/compare/v3.6.1...v3.6.2) (2023-03-06)
|
|
6
20
|
|
|
7
21
|
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
(()=>{"use strict";var e={7642:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.newIconPath=o.checkAppExistsAndHasPermissionErr=o.checkAppExistsAndHasPermission=void 0;const i=n(7304);o.checkAppExistsAndHasPermission=(e,o,n,i=!0)=>t(void 0,void 0,void 0,(function*(){const{data:t,error:a}=yield e.rpc("exist_app",{appid:o,apikey:n}).single();return t!==i||a})),o.checkAppExistsAndHasPermissionErr=(e,n,a,r=!0)=>t(void 0,void 0,void 0,(function*(){(yield(0,o.checkAppExistsAndHasPermission)(e,n,a,r))&&i.program.error(`App ${n} does not exist or you don't have permission to access it`)})),o.newIconPath="assets/icon.png"},4860:function(e,o,n){var t=this&&this.__createBinding||(Object.create?function(e,o,n,t){void 0===t&&(t=n);var i=Object.getOwnPropertyDescriptor(o,n);i&&!("get"in i?!o.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return o[n]}}),Object.defineProperty(e,t,i)}:function(e,o,n,t){void 0===t&&(t=n),e[t]=o[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,o){Object.defineProperty(e,"default",{enumerable:!0,value:o})}:function(e,o){e.default=o}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var o={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&t(o,e,n);return i(o,e),o},r=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.getActiveChannels=o.displayChannels=o.delChannel=o.createChannel=o.findUnknownVersion=o.checkVersionNotUsedInChannel=void 0;const s=n(7304),c=n(3847),p=a(n(552)),l=n(7246);o.checkVersionNotUsedInChannel=(e,n,t,i)=>r(void 0,void 0,void 0,(function*(){var a;const{data:r,error:c}=yield e.from("channels").select().eq("app_id",n).eq("created_by",t).eq("version",i.id);if(c&&s.program.error(`Cannot check Version ${n}@${i.name} ${(0,l.formatError)(c)}`),r&&r.length>0){if(p.intro(`❌ Version ${n}@${i.name} is used in ${r.length} channel`),yield p.confirm({message:"unlink it?"}))for(const t of r){const i=p.spinner();i.start(`Unlinking channel ${t.name}`);const{error:r}=yield e.from("channels").update({version:null===(a=yield(0,o.findUnknownVersion)(e,n))||void 0===a?void 0:a.id}).eq("id",t.id);r&&(i.stop(`Cannot update channel ${t.name} ${(0,l.formatError)(r)}`),process.exit(1)),i.stop(`✅ Channel ${t.name} unlinked`)}else s.program.error("unlink it first");p.outro(`Version unlinked from ${r.length} channel`)}})),o.findUnknownVersion=(e,o)=>e.from("app_versions").select("id").eq("app_id",o).eq("name","unknown").throwOnError().single().then((({data:e})=>e)),o.createChannel=(e,o)=>e.from("channels").insert(o).select().single(),o.delChannel=(e,o,n,t)=>e.from("channels").delete().eq("name",o).eq("app_id",n).eq("created_by",t).single(),o.displayChannels=e=>{const o=new c.Table({title:"Channels",charLength:{"❌":2,"✅":2}});e.reverse().forEach((e=>{o.addRow({Name:e.name,Created:(0,l.getHumanDate)(e.created_at),Public:e.public?"✅":"❌"})})),o.printTable()},o.getActiveChannels=(e,o,n)=>r(void 0,void 0,void 0,(function*(){const{data:t,error:i}=yield e.from("channels").select().eq("app_id",o).eq("created_by",n).order("created_at",{ascending:!1});return i&&s.program.error(`App ${o} not found in database ${(0,l.formatError)(i)} `),t}))},6213:(e,o,n)=>{Object.defineProperty(o,"__esModule",{value:!0}),o.createRSA=o.encryptSource=o.decryptSource=void 0;const t=n(6113),i="aes-128-cbc",a="sha256",r="base64",s=t.constants.RSA_PKCS1_OAEP_PADDING;o.decryptSource=(e,o,n)=>{const[c,p]=o.split(":"),l=(0,t.privateDecrypt)({key:n,padding:s,oaepHash:a},Buffer.from(p,r)),d=Buffer.from(c,r),u=l.toString(r);console.log("\nSessionB64",u);const y=(0,t.createDecipheriv)(i,l,d);return y.setAutoPadding(!0),Buffer.concat([y.update(e),y.final()])},o.encryptSource=(e,o)=>{const n=(0,t.randomBytes)(16),c=(0,t.randomBytes)(16),p=(0,t.createCipheriv)(i,c,n);p.setAutoPadding(!0);const l=`${n.toString(r)}:${(0,t.publicEncrypt)({key:o,padding:s,oaepHash:a},c).toString(r)}`;return{encryptedData:Buffer.concat([p.update(e),p.final()]),ivSessionKey:l}},o.createRSA=()=>{const{publicKey:e,privateKey:o}=(0,t.generateKeyPairSync)("rsa",{modulusLength:2048});return{publicKey:e.export({type:"pkcs1",format:"pem"}),privateKey:o.export({type:"pkcs1",format:"pem"})}}},5933:function(e,o,n){var t=this&&this.__createBinding||(Object.create?function(e,o,n,t){void 0===t&&(t=n);var i=Object.getOwnPropertyDescriptor(o,n);i&&!("get"in i?!o.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return o[n]}}),Object.defineProperty(e,t,i)}:function(e,o,n,t){void 0===t&&(t=n),e[t]=o[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,o){Object.defineProperty(e,"default",{enumerable:!0,value:o})}:function(e,o){e.default=o}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var o={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&t(o,e,n);return i(o,e),o},r=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.checkVersionNotUsedInDeviceOverride=void 0;const s=n(7304),c=a(n(552)),p=n(7246);o.checkVersionNotUsedInDeviceOverride=(e,o,n)=>r(void 0,void 0,void 0,(function*(){const{data:t,error:i}=yield e.from("devices_override").select().eq("app_id",o).eq("version",n.id);if(i&&s.program.error(`Cannot check Device override ${o}@${n.name} ${(0,p.formatError)(i)}`),t&&t.length>0)if(c.intro(`❌ Version ${o}@${n.name} is used in ${t.length} device override`),yield c.confirm({message:"unlink it?"}))for(const o of t){const n=c.spinner();n.start(`Unlinking device ${o.device_id}`);const{error:t}=yield e.from("devices_override").delete().eq("device_id",o.device_id);t&&(n.stop(`Cannot unlink device ${o.device_id} ${(0,p.formatError)(t)}`),process.exit(1)),n.stop(`✅ Device ${o.device_id} unlinked`)}else s.program.error("unlink it first")}))},3350:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.deleteFromStorage=void 0;const i=n(7304),a=n(7246);o.deleteFromStorage=(e,o,n,r,s)=>t(void 0,void 0,void 0,(function*(){const{error:t}=yield e.storage.from("apps").remove([`${o}/${n}/versions/${r.bucket_id} `]);t&&i.program.error(`Something went wrong when trying to delete ${n} @${s} ${(0,a.formatError)(t)} `)}))},484:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0}),o.checkLatest=void 0;const a=i(n(5362)),r=i(n(4147));o.checkLatest=()=>t(void 0,void 0,void 0,(function*(){const e=yield(0,a.default)("@capgo/cli");e!==r.default.version&&console.log("[31m%s[0m",`🚨 You are using @capgo/cli@${r.default.version} it's not the latest version.\nPlease use @capgo/cli@${e}" or @capgo/cli@latest to keep up to date with the latest features and bug fixes.`)}))},1089:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.getVersionData=o.getActiveAppVersions=o.displayBundles=o.deleteSpecificVersion=o.deleteAppVersion=void 0;const i=n(7304),a=n(3847),r=n(7246),s=n(4860),c=n(5933),p=n(3350);o.deleteAppVersion=(e,o,n,a)=>t(void 0,void 0,void 0,(function*(){const{error:t}=yield e.from("app_versions").update({deleted:!0}).eq("app_id",o).eq("deleted",!1).eq("user_id",n).eq("name",a);t&&i.program.error(`App Version ${o}@${a} not found in database '${(0,r.formatError)(t)}'`)})),o.deleteSpecificVersion=(e,n,i,a)=>t(void 0,void 0,void 0,(function*(){const t=yield(0,o.getVersionData)(e,n,i,a);yield(0,s.checkVersionNotUsedInChannel)(e,n,i,t),yield(0,c.checkVersionNotUsedInDeviceOverride)(e,n,t),yield(0,p.deleteFromStorage)(e,i,n,t,a),yield(0,o.deleteAppVersion)(e,n,i,a)})),o.displayBundles=e=>{const o=new a.Table({title:"Bundles",charLength:{"❌":2,"✅":2}});e.reverse().forEach((e=>{o.addRow(Object.assign({Version:e.name,Created:(0,r.getHumanDate)(e.created_at)},null!=e.keep?{Keep:e.keep}:{}))})),o.printTable()},o.getActiveAppVersions=(e,o,n)=>t(void 0,void 0,void 0,(function*(){const{data:t,error:a}=yield e.from("app_versions").select().eq("app_id",o).eq("user_id",n).eq("deleted",!1).order("created_at",{ascending:!1});return a&&i.program.error(`App ${o} not found in database ${(0,r.formatError)(a)} `),t})),o.getVersionData=(e,o,n,a)=>t(void 0,void 0,void 0,(function*(){const{data:t,error:s}=yield e.from("app_versions").select().eq("app_id",o).eq("user_id",n).eq("name",a).eq("deleted",!1).single();return t&&!s||i.program.error(`App Version ${o}@${a} doesn't exist ${(0,r.formatError)(s)}`),t}))},3124:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.addCommand=o.addApp=void 0;const i=n(9011),a=n(7304),r=n(6113),s=n(4470),c=n(484),p=n(7642),l=n(7246);o.addApp=(e,o,n=!0)=>t(void 0,void 0,void 0,(function*(){var t,d,u;yield(0,c.checkLatest)(),o.apikey=o.apikey||(0,l.findSavedKey)();const y=yield(0,l.getConfig)();e=e||(null===(t=null==y?void 0:y.app)||void 0===t?void 0:t.appId);const f=(0,l.useLogSnag)();o.apikey||a.program.error("Missing API key, you need to provide a API key to upload your bundle"),e||a.program.error("Missing argument, you need to provide a appId, or be in a capacitor project");const g=(0,l.createSupabaseClient)(o.apikey),v=yield(0,l.verifyUser)(g,o.apikey,["write","all"]);if(n)yield(0,p.checkAppExistsAndHasPermissionErr)(g,e,o.apikey,!1);else if(yield(0,p.checkAppExistsAndHasPermission)(g,e,o.apikey,!1))return!1;let h,m,{name:b,icon:k}=o;e=e||(null===(d=null==y?void 0:y.app)||void 0===d?void 0:d.appId),b=b||(null===(u=null==y?void 0:y.app)||void 0===u?void 0:u.appName)||"Unknown",k=k||"resources/icon.png",k&&b||a.program.error("Missing argument, you need to provide a appId and a name, or be in a capacitor project"),console.log(`Adding ${e} to Capgo`),k&&(0,s.existsSync)(k)?(h=(0,s.readFileSync)(k),m=(0,i.getType)(k)||"image/png",console.warn(`Found app icon ${k}`)):(0,s.existsSync)(p.newIconPath)?(h=(0,s.readFileSync)(p.newIconPath),m=(0,i.getType)(p.newIconPath)||"image/png",console.warn(`Found app icon ${p.newIconPath}`)):console.warn(`Cannot find app icon in any of the following locations: ${k}, ${p.newIconPath}`);const{data:_,error:w}=yield g.rpc("exist_app_v2",{appid:e}).single();(_||w)&&a.program.error(`App ${e} already exists ${(0,l.formatError)(w)}`);const C=`icon_${(0,r.randomUUID)()}`;let x="https://xvwzpoazmxkqosrdewyv.supabase.co/storage/v1/object/public/images/capgo.png";if(h&&m){const{error:o}=yield g.storage.from(`images/${v}/${e}`).upload(C,h,{contentType:m});o&&a.program.error(`Could not add app ${(0,l.formatError)(o)}`);const{data:n}=yield g.storage.from(`images/${v}/${e}`).getPublicUrl(C);x=(null==n?void 0:n.publicUrl)||x}const{error:$}=yield g.from("apps").insert({icon_url:x,user_id:v,name:b,app_id:e});$&&a.program.error(`Could not add app ${(0,l.formatError)($)}`);const{error:P}=yield g.from("app_versions").insert([{user_id:v,deleted:!0,name:"unknown",app_id:e},{user_id:v,deleted:!0,name:"builtin",app_id:e}]);return P&&a.program.error(`Could not add app ${(0,l.formatError)(P)}`),yield f.publish({channel:"app",event:"App Added",icon:"🎉",tags:{"user-id":v,"app-id":e},notify:!1}).catch(),console.log("App added to server, you can upload a bundle now"),n&&(console.log("Done ✅"),process.exit()),!0})),o.addCommand=(e,n)=>t(void 0,void 0,void 0,(function*(){(0,o.addApp)(e,n,!0)}))},2010:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.deleteApp=void 0;const i=n(7304),a=n(7642),r=n(7246);o.deleteApp=(e,o)=>t(void 0,void 0,void 0,(function*(){var n;o.apikey=o.apikey||(0,r.findSavedKey)();const t=yield(0,r.getConfig)();e=e||(null===(n=null==t?void 0:t.app)||void 0===n?void 0:n.appId);const s=(0,r.useLogSnag)();o.apikey||i.program.error("Missing API key, you need to provide a API key to upload your bundle"),e||i.program.error("Missing argument, you need to provide a appId, or be in a capacitor project");const c=(0,r.createSupabaseClient)(o.apikey),p=yield(0,r.verifyUser)(c,o.apikey,["write","all"]);yield(0,a.checkAppExistsAndHasPermissionErr)(c,e,o.apikey);const{error:l}=yield c.storage.from(`images/${p}`).remove([e]);l&&i.program.error(`Could not add app ${(0,r.formatError)(l)}`);const{error:d}=yield c.storage.from(`apps/${e}/${p}`).remove(["versions"]);d&&i.program.error(`Could not delete app version ${(0,r.formatError)(d)}`);const{error:u}=yield c.from("apps").delete().eq("app_id",e).eq("user_id",p);u&&i.program.error(`Could not delete app ${(0,r.formatError)(u)}`),yield s.publish({channel:"app",event:"App Deleted",icon:"🗑️",tags:{"user-id":p,"app-id":e},notify:!1}).catch(),console.log("App deleted in Capgo"),console.log("Done ✅"),process.exit()}))},8090:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0}),o.getInfo=void 0;const a=n(7147),r=i(n(5362)),s=n(1017),c=i(n(7176)),p=i(n(2037)),l=i(n(4147));o.getInfo=()=>t(void 0,void 0,void 0,(function*(){console.log(" 💊 Capgo Doctor 💊\n"),console.log(` OS: ${p.default.version()}\n`),console.log(" Installed Dependencies:\n");const e=yield t(void 0,void 0,void 0,(function*(){const{dependencies:e}=yield t(void 0,void 0,void 0,(function*(){const e=(0,a.readFileSync)((0,s.join)(process.cwd(),"package.json"));return JSON.parse(e)})),o={"@capgo/cli":l.default.version};for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&n.startsWith("@capgo/")&&(o[n]=e[n]);return o}));0===Object.keys(e).length&&(console.log("\n"),console.log("[31m%s[0m","🚨 No dependencies found"),process.exit(1));for(const o in e)if(Object.prototype.hasOwnProperty.call(e,o)){const n=e[o];console.log(` ${o}: ${n}`)}console.log("\n");const o=new c.default;o.add("loading",{text:"Loading latest dependencies"});const n=yield(e=>t(void 0,void 0,void 0,(function*(){const o={},n=[];for(const o in e)Object.prototype.hasOwnProperty.call(e,o)&&n.push((0,r.default)(o));return yield Promise.all(n).then((n=>{const t=Object.keys(e);for(let e=0;e<n.length;e+=1){const i=n[e];i&&(o[t[e]]=i)}})),o})))(e);o.succeed("loading",{text:"Latest Dependencies:"}),console.log("\n");for(const e in n)if(Object.prototype.hasOwnProperty.call(n,e)){const o=n[e];console.log(` ${e}: ${o}`)}JSON.stringify(e)!==JSON.stringify(n)&&(console.log("\n"),console.log("[31m%s[0m","🚨 Some dependencies are not up to date"),process.exit(1)),console.log("\n"),console.log("[32m%s[0m","✅ All dependencies are up to date"),process.exit()}))},9367:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.listApp=o.getActiveApps=void 0;const i=n(7304),a=n(3847),r=n(7642),s=n(7246),c=n(484);o.getActiveApps=(e,o)=>t(void 0,void 0,void 0,(function*(){const{data:n,error:t}=yield e.from("apps").select().eq("user_id",o).order("created_at",{ascending:!1});return t&&i.program.error(`Apps not found in database ${(0,s.formatError)(t)} `),n})),o.listApp=(e,n)=>t(void 0,void 0,void 0,(function*(){var t;yield(0,c.checkLatest)(),n.apikey=n.apikey||(0,s.findSavedKey)();const p=yield(0,s.getConfig)();e=e||(null===(t=null==p?void 0:p.app)||void 0===t?void 0:t.appId),n.apikey||i.program.error("Missing API key, you need to provide an API key to delete your app"),e||i.program.error("Missing argument, you need to provide a appid, or be in a capacitor project");const l=(0,s.createSupabaseClient)(n.apikey),d=yield(0,s.verifyUser)(l,n.apikey);console.log("Querying available versions in Capgo"),yield(0,r.checkAppExistsAndHasPermissionErr)(l,e,n.apikey);const u=yield(0,o.getActiveApps)(l,d);console.log(`Active app in Capgo: ${null==u?void 0:u.length}`),(e=>{const o=new a.Table({title:"Apps",charLength:{"❌":2,"✅":2}});e.reverse().forEach((e=>{o.addRow({Name:e.name,Created:(0,s.getHumanDate)(e.created_at)})})),o.printTable()})(u),console.log("Done ✅"),process.exit()}))},444:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.setApp=void 0;const i=n(9011),a=n(7304),r=n(6113),s=n(4470),c=n(7642),p=n(7246);o.setApp=(e,o)=>t(void 0,void 0,void 0,(function*(){var n;o.apikey=o.apikey||(0,p.findSavedKey)();const t=yield(0,p.getConfig)();e=e||(null===(n=null==t?void 0:t.app)||void 0===n?void 0:n.appId),o.apikey||a.program.error("Missing API key, you need to provide a API key to upload your bundle"),e||a.program.error("Missing argument, you need to provide a appId, or be in a capacitor project");const l=(0,p.createSupabaseClient)(o.apikey),d=yield(0,p.verifyUser)(l,o.apikey,["write","all"]);yield(0,c.checkAppExistsAndHasPermissionErr)(l,e,o.apikey);const{name:u,icon:y}=o;let f,g;const v=`icon_${(0,r.randomUUID)()}`;let h="https://xvwzpoazmxkqosrdewyv.supabase.co/storage/v1/object/public/images/capgo.png";if(y&&(0,s.existsSync)(y)?(f=(0,s.readFileSync)(y),g=(0,i.getType)(y)||"image/png",console.warn(`Found app icon ${y}`)):(0,s.existsSync)(c.newIconPath)?(f=(0,s.readFileSync)(c.newIconPath),g=(0,i.getType)(c.newIconPath)||"image/png",console.warn(`Found app icon ${c.newIconPath}`)):console.warn(`Cannot find app icon in any of the following locations: ${y}, ${c.newIconPath}`),f&&g){const{error:o}=yield l.storage.from(`images/${d}/${e}`).upload(v,f,{contentType:g});o&&a.program.error(`Could not add app ${(0,p.formatError)(o)}`);const{data:n}=yield l.storage.from(`images/${d}/${e}`).getPublicUrl(v);h=(null==n?void 0:n.publicUrl)||h}const{error:m}=yield l.from("apps").update({icon_url:h,name:u}).eq("app_id",e).eq("user_id",d);m&&a.program.error(`Could not add app ${(0,p.formatError)(m)}`),console.log("Done ✅"),process.exit()}))},6957:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))},i=this&&this.__asyncValues||function(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o,n=e[Symbol.asyncIterator];return n?n.call(e):(e="function"==typeof __values?__values(e):e[Symbol.iterator](),o={},t("next"),t("throw"),t("return"),o[Symbol.asyncIterator]=function(){return this},o);function t(n){o[n]=e[n]&&function(o){return new Promise((function(t,i){!function(e,o,n,t){Promise.resolve(t).then((function(o){e({value:o,done:n})}),o)}(t,i,(o=e[n](o)).done,o.value)}))}}},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0}),o.cleanupBundle=void 0;const r=n(7304),s=a(n(1505)),c=a(n(1616)),p=n(7246),l=n(1089),d=n(7642),u=n(484),y=(0,c.default)();o.cleanupBundle=(e,o)=>t(void 0,void 0,void 0,(function*(){var n;yield(0,u.checkLatest)();const a=o.apikey||(0,p.findSavedKey)(),{bundle:c,keep:f=4}=o,g=o.force||!1,v=yield(0,p.getConfig)();e=e||(null===(n=null==v?void 0:v.app)||void 0===n?void 0:n.appId),a||r.program.error("Missing API key, you need to provide an API key to delete your app"),e||r.program.error("Missing argument, you need to provide a appid, or be in a capacitor project");const h=(0,p.createSupabaseClient)(a),m=yield(0,p.verifyUser)(h,a);yield(0,d.checkAppExistsAndHasPermissionErr)(h,e,a),console.log("Querying all available versions in Capgo");let b=yield(0,l.getActiveAppVersions)(h,e,m);if(console.log(`Total active versions in Capgo: ${null==b?void 0:b.length}`),0===(null==b?void 0:b.length))return void console.log("No versions found, aborting cleanup");if(c){const e=`${s.default.inc(c,"major")}`;console.log(`Querying available versions in Capgo between ${c} and ${e}`),b=((e,o,n)=>{const t=[];return null==e||e.forEach((e=>{s.default.gte(e.name,o)&&s.default.lt(e.name,`${n}`)&&t.push(e)})),t})(b,c,e),console.log(`Active versions in Capgo between ${c} and ${e}: ${null==b?void 0:b.length}`)}const k=[];if(b.forEach(((e,o)=>{o<f?e.keep="✅":(e.keep="❌",k.push(e))})),0!==k.length){if((0,l.displayBundles)(b),!g&&"yes"!==y("Do you want to continue removing the versions specified? Type yes to confirm: "))return void console.log("Not confirmed, aborting removal...");console.log("You have confirmed removal, removing versions now"),yield((e,o,n,a)=>{var r,s,c;return t(void 0,void 0,void 0,(function*(){var t,d,u,y;try{for(r=!0,s=i(e);!(t=(c=yield s.next()).done);){y=c.value,r=!1;try{const e=y;console.log(`Removing ${e.name} created on ${(0,p.getHumanDate)(e.created_at)}`),yield(0,l.deleteSpecificVersion)(o,n,a,e.name)}finally{r=!0}}}catch(e){d={error:e}}finally{try{r||t||!(u=s.return)||(yield u.call(s))}finally{if(d)throw d.error}}}))})(k,h,e,m),console.log("Done ✅"),process.exit()}else console.log("Nothing to be removed, aborting removal...")}))},8628:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.decryptZip=void 0;const i=n(7304),a=n(7147),r=n(6213),s=n(7246),c=n(484);o.decryptZip=(e,o,n)=>t(void 0,void 0,void 0,(function*(){var t,p,l;yield(0,c.checkLatest)(),(0,a.existsSync)(e)||i.program.error(`Zip not found at the path ${e}`);const d=yield(0,s.getConfig)(),{extConfig:u}=d.app;n.key||(0,a.existsSync)(s.baseKey)||(null===(p=null===(t=u.plugins)||void 0===t?void 0:t.CapacitorUpdater)||void 0===p?void 0:p.privateKey)||i.program.error(`Private Key not found at the path ${s.baseKey} or in ${d.app.extConfigFilePath}`);const y=n.key||s.baseKey;let{privateKey:f}=n.keyData||(null===(l=null==u?void 0:u.plugins)||void 0===l?void 0:l.CapacitorUpdater)||"";(0,a.existsSync)(y)||f?(0,a.existsSync)(y)&&(f=(0,a.readFileSync)(y).toString()):i.program.error(`Cannot find public key ${y} or as keyData option or in ${d.app.extConfigFilePath}`);const g=(0,a.readFileSync)(e),v=(0,r.decryptSource)(g,o,f);(0,a.writeFileSync)(`${e}_decrypted.zip`,v),console.log("Done ✅"),process.exit()}))},2006:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.deleteBundle=void 0;const i=n(7304),a=n(7642),r=n(7246),s=n(1089);o.deleteBundle=(e,o,n)=>t(void 0,void 0,void 0,(function*(){var t,c;n.apikey=n.apikey||(0,r.findSavedKey)();const p=yield(0,r.getConfig)();e=e||(null===(t=null==p?void 0:p.app)||void 0===t?void 0:t.appId),n.apikey||i.program.error("Missing API key, you need to provide a API key to upload your bundle"),e||i.program.error("Missing argument, you need to provide a appId, or be in a capacitor project");const l=(0,r.createSupabaseClient)(n.apikey),d=yield(0,r.verifyUser)(l,n.apikey,["write","all"]);yield(0,a.checkAppExistsAndHasPermissionErr)(l,e,n.apikey);const u=n.apikey||(0,r.findSavedKey)();e=e||(null===(c=null==p?void 0:p.app)||void 0===c?void 0:c.appId),u||i.program.error("Missing API key, you need to provide an API key to delete your app"),o||i.program.error("Missing argument, you need to provide a bundleId, or be in a capacitor project"),e||i.program.error("Missing argument, you need to provide a appId, or be in a capacitor project"),console.log(`Delete ${e}@${o} from Capgo`),yield(0,s.deleteSpecificVersion)(l,e,d,o),console.log(`${e}@${o} deleted from server`),console.log("Done ✅"),process.exit()}))},6278:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.encryptZip=void 0;const i=n(7304),a=n(7147),r=n(484),s=n(6213),c=n(7246);o.encryptZip=(e,o)=>t(void 0,void 0,void 0,(function*(){yield(0,r.checkLatest)(),(0,a.existsSync)(e)||i.program.error(`Zip not found at the path ${e}`);const n=o.key||c.baseKeyPub;let t=o.keyData||"";(0,a.existsSync)(n)||t?(0,a.existsSync)(n)&&(t=(0,a.readFileSync)(n).toString()):i.program.error(`Cannot find public key ${n} or as keyData option`);const p=(0,a.readFileSync)(e),l=(0,s.encryptSource)(p,t);console.log("ivSessionKey",l.ivSessionKey),(0,a.writeFileSync)(`${e}_encrypted.zip`,l.encryptedData),console.log("Done ✅"),process.exit()}))},9135:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.listBundle=void 0;const i=n(7304),a=n(7642),r=n(1089),s=n(7246),c=n(484);o.listBundle=(e,o)=>t(void 0,void 0,void 0,(function*(){var n;yield(0,c.checkLatest)(),o.apikey=o.apikey||(0,s.findSavedKey)();const t=yield(0,s.getConfig)();e=e||(null===(n=null==t?void 0:t.app)||void 0===n?void 0:n.appId),o.apikey||i.program.error("Missing API key, you need to provide an API key to delete your app"),e||i.program.error("Missing argument, you need to provide a appid, or be in a capacitor project");const p=(0,s.createSupabaseClient)(o.apikey),l=yield(0,s.verifyUser)(p,o.apikey);console.log("Querying available versions in Capgo"),yield(0,a.checkAppExistsAndHasPermissionErr)(p,e,o.apikey);const d=yield(0,r.getActiveAppVersions)(p,e,l);console.log(`Active versions in Capgo: ${null==d?void 0:d.length}`),(0,r.displayBundles)(d),console.log("Done ✅"),process.exit()}))},7883:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0}),o.uploadDeprecatedCommand=o.uploadCommand=o.uploadBundle=void 0;const a=i(n(3844)),r=n(7304),s=n(6113),c=i(n(295)),p=n(7147),l=n(5906),d=n(484),u=n(7642),y=n(6213),f=n(7246);o.uploadBundle=(e,o,n=!0)=>t(void 0,void 0,void 0,(function*(){var t,i,g,v;yield(0,d.checkLatest)();let{bundle:h,path:m,channel:b}=o;const{external:k,key:_=!1,displayIvSession:w}=o,C=o.apikey||(0,f.findSavedKey)(),x=(0,f.useLogSnag)();b=b||"dev";const $=yield(0,f.getConfig)();e=e||(null===(t=null==$?void 0:$.app)||void 0===t?void 0:t.appId);const P=(0,s.randomUUID)().split("-")[0];h=h||(null===(g=null===(i=null==$?void 0:$.app)||void 0===i?void 0:i.package)||void 0===g?void 0:g.version)||`0.0.1-beta.${P}`,f.regexSemver.test(h)||r.program.error(`Your bundle name ${h}, is not valid it should follow semver convention : https://semver.org/`),m=m||(null===(v=null==$?void 0:$.app)||void 0===v?void 0:v.webDir),C||r.program.error("Missing API key, you need to provide a API key to upload your bundle"),e&&h&&m||r.program.error("Missing argument, you need to provide a appid and a bundle and a path, or be in a capacitor project"),(0,p.existsSync)(m)||r.program.error(`Path ${m} does not exist, build your app first, or provide a valid path`),console.log(`Upload ${e}@${h} started from path "${m}" to Capgo cloud`);const S=(0,f.createSupabaseClient)(C),A=yield(0,f.verifyUser)(S,C,["write","all","upload"]);yield(0,f.checkPlanValid)(S,A,!1),yield(0,u.checkAppExistsAndHasPermissionErr)(S,e,C);const I=new c.default.MultiBar({clearOnComplete:!1,hideCursor:!0},c.default.Presets.shades_grey),D=I.create(7,0,{format:"Uploading: [{bar}] {percentage}% | ETA: {eta}s | {value}/{total} Part"},c.default.Presets.shades_grey);D.start(7,0,{speed:"N/A"});const{data:j,error:M}=yield S.rpc("exist_app_versions",{apikey:C,name_version:h,appid:e}).single();(j||M)&&(I.stop(),r.program.error(`This app bundle already exist or was deleted, you cannot re-upload it ${(0,f.formatError)(M)}`)),D.increment();const{data:O,error:E}=yield S.rpc("is_trial",{userid:A}).single();(O&&O>0||E)&&I.log(`WARNING !!\nTrial expires in ${O} days, upgrade here: ${f.hostWeb}/dashboard/settings/plans\n`),D.increment();const{data:U,error:K}=yield S.rpc("exist_app",{appid:e,apikey:C}).single();U&&!K||(I.stop(),r.program.error(`Cannot find app ${e} in your account \n${(0,f.formatError)(K)}`)),D.increment();const{data:q,error:L}=yield S.rpc("exist_app_versions",{appid:e,apikey:C,name_version:h}).single();(q||L)&&r.program.error(`Version already exists ${(0,f.formatError)(L)}`),D.increment();const z=(0,s.randomUUID)();let F,T="";if(k)k&&!k.startsWith("https://")&&(I.stop(),r.program.error(`External link should should start with "https://" current is "${k}"`));else{const o=new a.default;o.addLocalFolder(m);let n=o.toBuffer();if(T=yield(0,l.checksum)(n,"crc32"),_||(0,p.existsSync)(f.baseKeyPub)){const e="string"==typeof _?_:f.baseKeyPub;(0,p.existsSync)(e)||r.program.error(`Cannot find public key ${e}`);const o=(0,p.readFileSync)(e);I.log("Encrypting your bundle\n");const t=(0,y.encryptSource)(n,o.toString());F=t.ivSessionKey,w&&I.log(`Your Iv Session key is ${F},\nkeep it safe, you will need it to decrypt your bundle.\nIt will be also visible in your dashboard\n`),n=t.encryptedData}const t=Math.floor(n.byteLength/1024/1024),i=`apps/${A}/${e}/versions`;D.increment(),t>20&&(I.log(`WARNING !!\nThe app size is ${t} Mb, this may take a while to download for users\n`),I.log("Learn how to optimize your assets https://capgo.app/blog/optimise-your-images-for-updates/\n"),yield x.publish({channel:"app-error",event:"App Too Large",icon:"🚛",tags:{"user-id":A,"app-id":e},notify:!1}).catch());const{error:s}=yield S.storage.from(i).upload(z,n,{contentType:"application/zip",cacheControl:"2592000"});s&&(I.stop(),r.program.error(`Cannot upload ${(0,f.formatError)(s)}`))}D.increment();const{error:B}=yield(0,f.updateOrCreateVersion)(S,{bucket_id:k?void 0:z,user_id:A,name:h,app_id:e,session_key:F,external_url:k,checksum:T},C);B&&(I.stop(),r.program.error(`Cannot add bundle ${(0,f.formatError)(B)}`)),D.increment();const{data:N}=yield S.rpc("get_app_versions",{apikey:C,name_version:h,appid:e}).single();if(N){const{error:o}=yield(0,f.updateOrCreateChannel)(S,{name:b,app_id:e,created_by:A,version:N},C);o&&I.log("Cannot set bundle with upload key, use key with more rights for that\n")}else I.log("Cannot set bundle with upload key, use key with more rights for that\n");I.stop();const V=(0,f.convertAppName)(e);return console.log("Bundle uploaded to server"),console.log(`Try it in mobile app: ${f.host}/app_mobile`),console.log(`Or set the channel ${b} as public here: ${f.hostWeb}/app/package/${V}`),console.log("To use with live update in your own app"),console.log(`You can link specific device to this bundle to make user try it first, here: ${f.hostWeb}/app/p/${V}/devices`),yield x.publish({channel:"app",event:"App Uploaded",icon:"⏫",tags:{"user-id":A,"app-id":e},notify:!1}).catch(),n&&(console.log("Done ✅"),process.exit()),!0})),o.uploadCommand=(e,n)=>t(void 0,void 0,void 0,(function*(){(0,o.uploadBundle)(e,n,!0)})),o.uploadDeprecatedCommand=(e,n)=>t(void 0,void 0,void 0,(function*(){console.log('⚠️ This command is deprecated, use "npx @capgo/cli bundle upload" instead ⚠️'),(0,o.uploadBundle)(e,n,!0)}))},792:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0}),o.zipBundle=void 0;const a=i(n(3844)),r=n(7304),s=n(6113),c=i(n(295)),p=n(5906),l=n(7147),d=n(484),u=n(7246);o.zipBundle=(e,o)=>t(void 0,void 0,void 0,(function*(){var n,t,i,y;yield(0,d.checkLatest)();let{bundle:f,path:g}=o;const v=(0,u.useLogSnag)(),h=yield(0,u.getConfig)();e=e||(null===(n=null==h?void 0:h.app)||void 0===n?void 0:n.appId);const m=(0,s.randomUUID)().split("-")[0];f=f||(null===(i=null===(t=null==h?void 0:h.app)||void 0===t?void 0:t.package)||void 0===i?void 0:i.version)||`0.0.1-beta.${m}`,u.regexSemver.test(f)||r.program.error(`Your bundle name ${f}, is not valid it should follow semver convention : https://semver.org/`),g=g||(null===(y=null==h?void 0:h.app)||void 0===y?void 0:y.webDir),e&&f&&g||r.program.error("Missing argument, you need to provide a appId and a bundle and a path, or be in a capacitor project"),console.log(`Zip ${e}@${f} started from path "${g}"`);const b=new c.default.MultiBar({clearOnComplete:!1,hideCursor:!0},c.default.Presets.shades_grey),k=b.create(4,0,{format:"Uploading: [{bar}] {percentage}% | ETA: {eta}s | {value}/{total} Part"},c.default.Presets.shades_grey);k.start(4,0,{speed:"N/A"}),k.increment();const _=new a.default;_.addLocalFolder(g);const w=_.toBuffer();k.increment();const C=yield(0,p.checksum)(w,"crc32"),x=Math.floor(w.byteLength/1024/1024);k.increment(),x>20&&(b.log(`WARNING !!\nThe app size is ${x} Mb, this may take a while to download for users\n`),b.log("Learn how to optimize your assets https://capgo.app/blog/optimise-your-images-for-updates/\n"),yield v.publish({channel:"app-error",event:"App Too Large",icon:"🚛",tags:{"app-id":e},notify:!1}).catch()),k.increment(),(0,l.writeFileSync)(`${e}_${f}.zip`,w),b.stop(),console.log("Bundle zipped"),yield v.publish({channel:"app",event:"App zip",icon:"⏫",tags:{"app-id":e},notify:!1}).catch(),console.log(`Checksum: ${C}`),console.log("Done ✅"),process.exit()}))},9339:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.addChannelCommand=o.addChannel=void 0;const i=n(7304),a=n(7642),r=n(4860),s=n(7246);o.addChannel=(e,o,n,c=!0)=>t(void 0,void 0,void 0,(function*(){var t;n.apikey=n.apikey||(0,s.findSavedKey)();const p=yield(0,s.getConfig)();o=o||(null===(t=null==p?void 0:p.app)||void 0===t?void 0:t.appId);const l=(0,s.useLogSnag)();n.apikey||i.program.error("Missing API key, you need to provide a API key to upload your bundle"),o||i.program.error("Missing argument, you need to provide a appId, or be in a capacitor project");const d=(0,s.createSupabaseClient)(n.apikey),u=yield(0,s.verifyUser)(d,n.apikey,["write","all"]);yield(0,a.checkAppExistsAndHasPermissionErr)(d,o,n.apikey),console.log(`Create channel ${o}#${e} to Capgo cloud`);try{const n=yield(0,r.findUnknownVersion)(d,o);n||i.program.error("Cannot find default version for channel creation, please contact Capgo support 🤨"),yield(0,r.createChannel)(d,{name:e,app_id:o,version:n.id,created_by:u}),console.log("Channel created ✅"),yield l.publish({channel:"channel",event:"Create channel",icon:"✅",tags:{"user-id":u,"app-id":o,channel:e},notify:!1}).catch()}catch(e){return console.log("Cannot create Channel 🙀",e),!1}return c&&(console.log("Done ✅"),process.exit()),!0})),o.addChannelCommand=(e,n,i)=>t(void 0,void 0,void 0,(function*(){(0,o.addChannel)(e,n,i,!0)}))},879:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.deleteChannel=void 0;const i=n(7304),a=n(7642),r=n(4860),s=n(7246);o.deleteChannel=(e,o,n)=>t(void 0,void 0,void 0,(function*(){var t;n.apikey=n.apikey||(0,s.findSavedKey)();const c=yield(0,s.getConfig)();o=o||(null===(t=null==c?void 0:c.app)||void 0===t?void 0:t.appId);const p=(0,s.useLogSnag)();n.apikey||i.program.error("Missing API key, you need to provide a API key to upload your bundle"),o||i.program.error("Missing argument, you need to provide a appId, or be in a capacitor project");const l=(0,s.createSupabaseClient)(n.apikey),d=yield(0,s.verifyUser)(l,n.apikey,["write","all"]);yield(0,a.checkAppExistsAndHasPermissionErr)(l,o,n.apikey),console.log(`Delete channel ${o}#${e} to Capgo cloud`);try{yield(0,r.delChannel)(l,e,o,d),console.log("Channel Delete ✅"),yield p.publish({channel:"channel",event:"Delete channel",icon:"✅",tags:{"user-id":d,"app-id":o,channel:e},notify:!1}).catch()}catch(e){console.log("Cannot delete Channel 🙀",e)}console.log("Done ✅"),process.exit()}))},2416:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.listChannels=void 0;const i=n(7304),a=n(7642),r=n(4860),s=n(7246);o.listChannels=(e,o)=>t(void 0,void 0,void 0,(function*(){var n;o.apikey=o.apikey||(0,s.findSavedKey)();const t=yield(0,s.getConfig)();e=e||(null===(n=null==t?void 0:t.app)||void 0===n?void 0:n.appId);const c=(0,s.useLogSnag)();o.apikey||i.program.error("Missing API key, you need to provide a API key to upload your bundle"),e||i.program.error("Missing argument, you need to provide a appId, or be in a capacitor project");const p=(0,s.createSupabaseClient)(o.apikey),l=yield(0,s.verifyUser)(p,o.apikey,["write","all"]);yield(0,a.checkAppExistsAndHasPermissionErr)(p,e,o.apikey),console.log("Querying available versions in Capgo"),yield(0,a.checkAppExistsAndHasPermissionErr)(p,e,o.apikey);const d=yield(0,r.getActiveChannels)(p,e,l);console.log(`Active channels in Capgo: ${null==d?void 0:d.length}`),(0,r.displayChannels)(d),yield c.publish({channel:"channel",event:"List channel",icon:"✅",tags:{"user-id":l,"app-id":e},notify:!1}).catch(),console.log("Done ✅"),process.exit()}))},2687:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.setChannel=void 0;const i=n(7304),a=n(7642),r=n(7246);o.setChannel=(e,o,n)=>t(void 0,void 0,void 0,(function*(){var t,s,c;n.apikey=n.apikey||(0,r.findSavedKey)();const p=yield(0,r.getConfig)();o=o||(null===(t=null==p?void 0:p.app)||void 0===t?void 0:t.appId);const l=(0,r.useLogSnag)();n.apikey||i.program.error("Missing API key, you need to provide a API key to upload your bundle"),o||i.program.error("Missing argument, you need to provide a appId, or be in a capacitor project");const d=(0,r.createSupabaseClient)(n.apikey),u=yield(0,r.verifyUser)(d,n.apikey,["write","all"]);yield(0,a.checkAppExistsAndHasPermissionErr)(d,o,n.apikey);const{bundle:y,latest:f,downgrade:g,upgrade:v,ios:h,android:m,selfAssign:b,state:k}=n;e||i.program.error("Missing argument, you need to provide a channel"),f&&y&&i.program.error("Cannot set latest and bundle at the same time"),null==y&&null==k&&null==f&&null==g&&null==v&&null==h&&null==m&&null==b&&i.program.error("Missing argument, you need to provide a option to set");try{yield(0,r.checkPlanValid)(d,u),yield(0,a.checkAppExistsAndHasPermissionErr)(d,o,n.apikey);const t={created_by:u,app_id:o,name:e,version:void 0},_=f?null===(c=null===(s=null==p?void 0:p.app)||void 0===s?void 0:s.package)||void 0===c?void 0:c.version:y;if(null!=_){const{data:n,error:a}=yield d.from("app_versions").select().eq("app_id",o).eq("name",_).eq("user_id",u).eq("deleted",!1).single();!a&&n||i.program.error(`Cannot find version ${_}`),console.log(`Set ${o} channel: ${e} to @${_}`),t.version=n.id}null!=k&&("public"!==k&&"private"!==k||console.log(`Set ${o} channel: ${e} to public or private is deprecated, use default or normal instead`),console.log(`Set ${o} channel: ${e} to ${"public"===k||"default"===k?"default":"normal"}`),t.public="public"===k||"default"===k),null!=g&&(console.log(`Set ${o} channel: ${e} to ${g?"allow":"disallow"} downgrade`),t.disableAutoUpdateUnderNative=!g),null!=v&&(console.log(`Set ${o} channel: ${e} to ${v?"allow":"disallow"} upgrade`),t.disableAutoUpdateToMajor=!v),null!=h&&(console.log(`Set ${o} channel: ${e} to ${h?"allow":"disallow"} ios update`),t.ios=!!h),null!=m&&(console.log(`Set ${o} channel: ${e} to ${m?"allow":"disallow"} android update`),t.android=!!m),null!=b&&(console.log(`Set ${o} channel: ${e} to ${b?"allow":"disallow"} self assign to this channel`),t.allow_device_self_set=!!b);try{const{error:e}=yield(0,r.updateOrCreateChannel)(d,t,n.apikey);e&&i.program.error(`Cannot set channel ${(0,r.formatError)(e)}`)}catch(e){i.program.error(`Cannot set channel ${(0,r.formatError)(e)}`)}yield l.publish({channel:"channel",event:"Set channel",icon:"✅",tags:{"user-id":u,"app-id":o},notify:!1}).catch()}catch(e){i.program.error(`Unknow error ${(0,r.formatError)(e)}`)}console.log("Done ✅"),process.exit()}))},1714:function(e,o,n){var t=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0});const i=n(7304),a=n(792),r=n(5012),s=n(9135),c=n(8628),p=n(6278),l=n(3124),d=n(8090),u=n(2285),y=n(2006),f=n(2687),g=n(7883),v=t(n(4147)),h=n(8640),m=n(9367),b=n(6957),k=n(9339),_=n(879),w=n(2416),C=n(444),x=n(2010);i.program.description("Manage packages and bundle versions in Capgo Cloud").version(v.default.version),i.program.command("login [apikey]").alias("l").description("Save apikey to your machine or folder").action(h.loginCommand).option("--local","Only save in local folder"),i.program.command("doctor").description("Get info about your Capgo app install").action(d.getInfo),i.program.command("init [apikey] [appid]").description("Init a new app").action(r.initApp).option("-n, --name <name>","app name").option("-i, --icon <icon>","app icon path").option("-a, --apikey <apikey>","apikey to link to your account");const $=i.program.command("app").description("Manage app");$.command("add [appid]").alias("a").description("Add a new app in Capgo Cloud").action(l.addCommand).option("-n, --name <name>","app name").option("-i, --icon <icon>","app icon path").option("-a, --apikey <apikey>","apikey to link to your account"),$.command("delete [appid]").alias("d").description("Delete an app in Capgo Cloud").action(x.deleteApp).option("-a, --apikey <apikey>","apikey to link to your account"),$.command("list [appid]").alias("l").description("list apps in Capgo Cloud").action(m.listApp).option("-a, --apikey <apikey>","apikey to link to your account"),$.command("set [appid]").alias("s").description("Set an app in Capgo Cloud").action(C.setApp).option("-n, --name <name>","app name").option("-i, --icon <icon>","app icon path").option("-a, --apikey <apikey>","apikey to link to your account");const P=i.program.command("bundle").description("Manage bundle");P.command("upload [appid]").alias("u").description("Upload a new bundle in Capgo Cloud").action(g.uploadCommand).option("-a, --apikey <apikey>","apikey to link to your account").option("-p, --path <path>","path of the folder 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("--key <key>","custom path for public signing key").option("--keyData <keyData>","base64 public signing key").option("--no-key","ignore signing key and send clear update").option("--display-iv-session","Show in the console the iv and session key used to encrypt the update").option("-b, --bundle <bundle>","bundle version number of the bundle to upload"),P.command("delete [appid]").alias("d").description("Delete a bundle in Capgo Cloud").action(y.deleteBundle).option("-a, --apikey <apikey>","apikey to link to your account"),P.command("list [appid]").alias("l").description("List bundle in Capgo Cloud").action(s.listBundle).option("-a, --apikey <apikey>","apikey to link to your account"),P.command("unlink [appid]").alias("u").description("Unlink a bundle in Capgo Cloud").action(s.listBundle).option("-a, --apikey <apikey>","apikey to link to your account").option("-b, --bundle <bundle>","bundle version number of the bundle to unlink"),P.command("cleanup [appid]").alias("c").action(b.cleanupBundle).description("Cleanup bundle in Capgo Cloud").option("-b, --bundle <bundle>","bundle version number of the app to delete").option("-a, --apikey <apikey>","apikey to link to your account").option("-k, --keep <keep>","number of version to keep").option("-f, --force","force removal"),P.command("decrypt [zipPath] [sessionKey]").alias("l").description("Decrypt a signed zip bundle").action(c.decryptZip).option("--key <key>","custom path for private signing key").option("--keyData <keyData>","base64 private signing key"),P.command("encrypt [zipPath]").description("Encrypt a zip bundle").action(p.encryptZip).option("--key <key>","custom path for private signing key").option("--keyData <keyData>","base64 private signing key"),P.command("zip [appid]").description("Zip a bundle").action(a.zipBundle).option("-p, --path <path>","path of the folder to upload").option("-b, --bundle <bundle>","bundle version number to name the zip file");const S=i.program.command("channel").description("Manage channel");S.command("add [channelid] [appid]").alias("a").description("Create channel").action(k.addChannelCommand).option("-d, --default","set the channel as default"),S.command("delete [channelid] [appid]").alias("d").description("Delete channel").action(_.deleteChannel),S.command("list [appid]").alias("l").description("List channel").action(w.listChannels),S.command("set [channelid] [appid]").alias("s").description("Set channel").action(f.setChannel).option("-a, --apikey <apikey>","apikey to link to your account").option("-b, --bundle <bundle>","bundle version number of the file to set").option("-s, --state <state>","set the state of the channel, default or normal").option("--latest","get the latest version key in the package.json to set it to the channel").option("--downgrade","Allow to downgrade to version under native one").option("--no-downgrade","Disable downgrade to version under native one").option("--upgrade","Allow to upgrade to version above native one").option("--no-upgrade","Disable upgrade to version above native one").option("--ios","Allow sending update to ios devices").option("--no-ios","Disable sending update to ios devices").option("--android","Allow sending update to android devices").option("--no-android","Disable sending update to android devices").option("--self-assign","Allow to device to self assign to this channel").option("--no-self-assign","Disable devices to self assign to this channel");const A=i.program.command("key").description("Manage key");A.command("save").description("Save base64 signing key in capacitor config, usefull for CI").action(u.saveKeyCommand).option("-f, --force","force generate a new one"),A.command("create").description("Create a new signing key").action(u.createKeyCommand).option("-f, --force","force generate a new one"),i.program.command("upload [appid]").alias("u").description("(Deprecated) Upload a new bundle to Capgo Cloud").action(g.uploadDeprecatedCommand).option("-a, --apikey <apikey>","apikey to link to your account").option("-p, --path <path>","path of the folder 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("--key <key>","custom path for public signing key").option("--keyData <keyData>","base64 public signing key").option("--no-key","ignore signing key and send clear update").option("--display-iv-session","Show in the console the iv and session key used to encrypt the update").option("-b, --bundle <bundle>","bundle version number of the file to upload"),i.program.parseAsync()},5012:function(e,o,n){var t=this&&this.__createBinding||(Object.create?function(e,o,n,t){void 0===t&&(t=n);var i=Object.getOwnPropertyDescriptor(o,n);i&&!("get"in i?!o.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return o[n]}}),Object.defineProperty(e,t,i)}:function(e,o,n,t){void 0===t&&(t=n),e[t]=o[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,o){Object.defineProperty(e,"default",{enumerable:!0,value:o})}:function(e,o){e.default=o}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var o={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&t(o,e,n);return i(o,e),o},r=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.initApp=void 0;const s=n(7147),c=n(6301),p=n(2081),l=a(n(552)),d=n(2285),u=n(9339),y=n(7883),f=n(8640),g=n(3124),v=n(484),h=n(7246),m="CapacitorUpdater.notifyAppReady()",b=/import.*from.*/g,k="production",_={stdio:"pipe"};o.initApp=(e,o,n)=>r(void 0,void 0,void 0,(function*(){var t,i;yield(0,v.checkLatest)();const a=yield(0,h.getConfig)();o=o||(null===(t=null==a?void 0:a.app)||void 0===t?void 0:t.appId),l.intro("Capgo init");const r=l.spinner();r.start("Running: npx @capgo/cli@latest login ***"),(yield(0,f.login)(e,n,!1))?r.stop("Login Done ✅"):r.stop("Login already done ✅");const w=yield l.confirm({message:`Add ${o} in Capgo?`});if(l.isCancel(w)&&process.exit(),w){const e=l.spinner();e.start(`Running: npx @capgo/cli@latest app add ${o}`),(yield(0,g.addApp)(o,n,!1))?e.stop("App add Done ✅"):e.stop("App already add ✅")}const C=yield l.confirm({message:`Create channel ${k} in Capgo?`});if(l.isCancel(C)&&process.exit(),C){const n=l.spinner();n.start(`Running: npx @capgo/cli@latest channel add ${k} ${o} -d`),(yield(0,u.addChannel)(k,o,{default:!0,apikey:e},!1))?n.stop("Channel add Done ✅"):n.stop("Channel already added ✅")}const x=yield l.confirm({message:`Create key for ${o} in Capgo?`});if(l.isCancel(x)&&process.exit(),x){const e=l.spinner();e.start("Checking if capgo is installed");const o=JSON.parse((0,s.readFileSync)("package.json").toString()),n=(0,c.findPackageManagerType)();"unknown"===n&&(e.stop("Cannot reconize package manager, please run `capgo init` in a capacitor project with npm, pnpm or yarn"),process.exit());const t="yarn"===n?"add":"install";o.dependencies["@capgo/capacitor-updater"]?e.stop("Capgo already installed ✅"):(yield(0,p.execSync)(`${n} ${t} @capgo/capacitor-updater@latest`,_),e.stop("Install Done ✅"))}const $=yield l.confirm({message:"Add the code to your project?"});if(l.isCancel($)&&process.exit(),$){const e=l.spinner();e.start("Adding @capacitor-updater to your main file");const o=yield(0,h.findMainFile)();o||(e.stop("No main.ts, main.js, index.ts or index.js file found, please run cap init first"),process.exit());const n=(0,s.readFileSync)(o).toString(),t=n.match(b),i=null==t?void 0:t.pop();if(i||(e.stop("Cannot find import line in main file, use manual installation: https://docs.capgo.app/plugin/installation"),process.exit()),n.includes(m))e.stop(`Code already added to ${o} ✅`);else{const t=n.replace(i,`${i}\nimport { CapacitorUpdater } from '@capgo/capacitor-updater';\n\n${m};\n`);(0,s.writeFileSync)(o,t),e.stop(`Code added to ${o} ✅`)}}const P=yield l.confirm({message:"Use end-to-end encryption?"});if(l.isCancel(P)&&process.exit(),P){const e=l.spinner();e.start("Running: npx @capgo/cli@latest key create"),(yield(0,d.createKey)({},!1))?e.stop("key created 🔑"):(e.stop("Cannot create key ❌"),process.exit(1))}const S=yield l.confirm({message:"Build the project?"});if(l.isCancel(S)&&process.exit(),S){const e=l.spinner();e.start("Running: npm run build && npx cap sync"),(null===(i=JSON.parse((0,s.readFileSync)("package.json").toString()).scripts)||void 0===i?void 0:i.build)||(e.stop("Cannot find build script in package.json, please add it and run `capgo init` again"),process.exit()),(0,p.execSync)("npm run build && npx cap sync",_),e.stop("Build & Sync Done ✅")}const A=yield l.confirm({message:"Upload the bundle?"});if(l.isCancel(A)&&process.exit(),A){const n=l.spinner();n.start("Running: npx @capgo/cli@latest bundle upload"),(yield(0,y.uploadBundle)(o,{channel:k,apikey:e},!1))?n.stop("Upload Done ✅"):(n.stop("Upload failed ❌"),process.exit())}l.outro("You're all set ✅!"),console.log("Now run the app in your phone or emulator with: npx cap run");const I=o.replace(/\./g,"--");console.log(`Then watch logs in https://web.capgo.app/app/p/${I}/logs`),process.exit()}))},2285:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.createKeyCommand=o.createKey=o.saveKeyCommand=o.saveKey=void 0;const i=n(7304),a=n(7147),r=n(7778),s=n(6213),c=n(7246),p=n(484);o.saveKey=(e,o=!0)=>t(void 0,void 0,void 0,(function*(){(0,a.existsSync)(".git")||i.program.error("To use local you should be in a git repository");const n=yield(0,c.getConfig)(),{extConfig:t}=n.app,s=e.key||c.baseKey;let p=e.keyData||"";if((0,a.existsSync)(s)||p)(0,a.existsSync)(s)&&(p=(0,a.readFileSync)(s).toString());else{if(!o)return!1;i.program.error(`Cannot find public key ${s} or as keyData option or in ${n.app.extConfigFilePath}`)}return t&&(t.plugins||(t.plugins={}),t.plugins.CapacitorUpdater||(t.plugins.CapacitorUpdater={}),t.plugins.CapacitorUpdater.privateKey=p,(0,r.writeConfig)(t,n.app.extConfigFilePath)),o&&(console.log(`private key saved into ${n.app.extConfigFilePath} file in local directory`),console.log("your app will decode the zip archive with this key\n")),!0})),o.saveKeyCommand=e=>t(void 0,void 0,void 0,(function*(){yield(0,p.checkLatest)(),yield(0,o.saveKey)(e)})),o.createKey=(e,o=!0)=>t(void 0,void 0,void 0,(function*(){(0,a.existsSync)(".git")||i.program.error("To use local you should be in a git repository");const{publicKey:n,privateKey:t}=(0,s.createRSA)();if((0,a.existsSync)(c.baseKeyPub)&&!e.force){if(!o)return!1;i.program.error("Public Key already exists, use --force to overwrite")}if((0,a.writeFileSync)(c.baseKeyPub,n),(0,a.existsSync)(c.baseKey)&&!e.force){if(!o)return!1;i.program.error("Private Key already exists, use --force to overwrite")}(0,a.writeFileSync)(c.baseKey,t);const p=yield(0,c.getConfig)(),{extConfig:l}=p.app;return l&&(l.plugins||(l.plugins={}),l.plugins.CapacitorUpdater||(l.plugins.CapacitorUpdater={}),l.plugins.CapacitorUpdater.privateKey=t,(0,r.writeConfig)(l,p.app.extConfigFilePath)),o&&(console.log("Your RSA key has been generated\n"),console.log(`public key saved into ${c.baseKeyPub} file in local directory\n`),console.log("This key will be use to encode AES key used to crypt your zipped bundle before sending it to Capgo,\n than make them unreadable by Capgo and unmodifiable by anyone\n"),console.log(`Private key saved into ${p.app.extConfigFilePath} file in local directory`),console.log("Your app will decode with this RSA key the AES key and use it to decode the zipped bundle\n")),!0})),o.createKeyCommand=e=>t(void 0,void 0,void 0,(function*(){yield(0,p.checkLatest)(),yield(0,o.createKey)(e)}))},8640:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.loginCommand=o.login=void 0;const i=n(7304),a=n(7147),r=n(2037),s=n(7246),c=n(484);o.login=(e,o,n=!0)=>t(void 0,void 0,void 0,(function*(){if(!e)return n&&i.program.error("Missing API key, you need to provide a API key to upload your bundle"),!1;yield(0,c.checkLatest)();try{const{local:n}=o,t=(0,s.useLogSnag)();if(n)(0,a.existsSync)(".git")||i.program.error("To use local you should be in a git repository"),(0,a.writeFileSync)(".capgo",`${e}\n`),(0,a.appendFileSync)(".gitignore",".capgo\n");else{const o=(0,r.homedir)();(0,a.writeFileSync)(`${o}/.capgo`,`${e}\n`)}const c=(0,s.createSupabaseClient)(e),p=yield(0,s.verifyUser)(c,e,["write","all","upload"]);yield t.publish({channel:"user-login",event:"User CLI login",icon:"✅",tags:{"user-id":p},notify:!1}).catch(),console.log(`login saved into .capgo file in ${n?"local":"home"} directory`)}catch(e){console.error(e),process.exit(1)}return n&&(console.log("Done ✅"),process.exit()),!0})),o.loginCommand=(e,n)=>t(void 0,void 0,void 0,(function*(){(0,o.login)(e,n,!0)}))},7246:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))},i=this&&this.__await||function(e){return this instanceof i?(this.v=e,this):new i(e)},a=this&&this.__asyncValues||function(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o,n=e[Symbol.asyncIterator];return n?n.call(e):(e="function"==typeof __values?__values(e):e[Symbol.iterator](),o={},t("next"),t("throw"),t("return"),o[Symbol.asyncIterator]=function(){return this},o);function t(n){o[n]=e[n]&&function(o){return new Promise((function(t,i){!function(e,o,n,t){Promise.resolve(t).then((function(o){e({value:o,done:n})}),o)}(t,i,(o=e[n](o)).done,o.value)}))}}},r=this&&this.__asyncDelegator||function(e){var o,n;return o={},t("next"),t("throw",(function(e){throw e})),t("return"),o[Symbol.iterator]=function(){return this},o;function t(t,a){o[t]=e[t]?function(o){return(n=!n)?{value:i(e[t](o)),done:"return"===t}:a?a(o):o}:a}},s=this&&this.__asyncGenerator||function(e,o,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,a=n.apply(e,o||[]),r=[];return t={},s("next"),s("throw"),s("return"),t[Symbol.asyncIterator]=function(){return this},t;function s(e){a[e]&&(t[e]=function(o){return new Promise((function(n,t){r.push([e,o,n,t])>1||c(e,o)}))})}function c(e,o){try{(n=a[e](o)).value instanceof i?Promise.resolve(n.value.v).then(p,l):d(r[0][2],n)}catch(e){d(r[0][3],e)}var n}function p(e){c("next",e)}function l(e){c("throw",e)}function d(e,o){e(o),r.shift(),r.length&&c(r[0][0],r[0][1])}},c=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0}),o.getHumanDate=o.verifyUser=o.convertAppName=o.useLogSnag=o.updateOrCreateChannel=o.updateOrCreateVersion=o.getConfig=o.formatError=o.findMainFile=o.findSavedKey=o.checkPlanValid=o.isAllowedAction=o.isTrial=o.isPaying=o.isGoodPlan=o.checkKey=o.regexSemver=o.createSupabaseClient=o.supaAnon=o.hostSupa=o.hostWeb=o.host=o.baseKeyPub=o.baseKey=void 0;const p=n(7778),l=n(7304),d=n(2885),u=c(n(9867)),y=n(7147),f=n(2037),g=n(1133),v=n(1017),h=c(n(6634));function m(e){return s(this,arguments,(function*(){const o=yield i((0,y.readdirSync)(e,{withFileTypes:!0}));for(const n of o){const o=(0,v.resolve)(e,n.name);!n.isDirectory()||n.name.startsWith(".")||n.name.startsWith("node_modules")||n.name.startsWith("dist")?yield yield i(o):yield i(yield*r(a(m(o))))}}))}o.baseKey=".capgo_key",o.baseKeyPub=`${o.baseKey}.pub`,o.host="https://capgo.app",o.hostWeb="https://web.capgo.app",o.hostSupa="https://xvwzpoazmxkqosrdewyv.supabase.co",o.supaAnon="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYzNzgwNTAwOSwiZXhwIjoxOTUzMzgxMDA5fQ.8tgID1d4jodPwuo_fz4KHN4o1XKB9fnqyt0_GaJSj-w",o.createSupabaseClient=e=>(0,d.createClient)(o.hostSupa,o.supaAnon,{global:{headers:{capgkey:e}}}),o.regexSemver=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/,o.checkKey=(e,n,i)=>t(void 0,void 0,void 0,(function*(){const{data:t,error:a}=yield e.rpc("is_allowed_capgkey",{apikey:n,keymode:i}).single();t&&!a||l.program.error(`Invalid API key or insufficient permissions ${(0,o.formatError)(a)}`)})),o.isGoodPlan=(e,o)=>t(void 0,void 0,void 0,(function*(){const{data:n,error:t}=yield e.rpc("is_good_plan_v3",{userid:o}).single();if(t)throw t;return n||!1})),o.isPaying=(e,o)=>t(void 0,void 0,void 0,(function*(){const{data:n,error:t}=yield e.rpc("is_paying",{userid:o}).single();if(t)throw t;return n||!1})),o.isTrial=(e,o)=>t(void 0,void 0,void 0,(function*(){const{data:n,error:t}=yield e.rpc("is_trial",{userid:o}).single();if(t)throw t;return n||0})),o.isAllowedAction=(e,o)=>t(void 0,void 0,void 0,(function*(){const{data:n,error:t}=yield e.rpc("is_allowed_action_user",{userid:o}).single();if(t)throw t;return n})),o.checkPlanValid=(e,n,i=!0)=>t(void 0,void 0,void 0,(function*(){(yield(0,o.isAllowedAction)(e,n))||(console.error(`You need to upgrade your plan to continue to use capgo.\n Upgrade here: ${o.hostWeb}/dashboard/settings/plans\n`),setTimeout((()=>{(0,h.default)(`${o.hostWeb}/dashboard/settings/plans`),l.program.error("")}),1e3));const t=yield(0,o.isTrial)(e,n);t>0&&i&&console.log(`WARNING !!\nTrial expires in ${t} days, upgrade here: ${o.hostWeb}/dashboard/settings/plans\n`)})),o.findSavedKey=()=>{let e,o=`${(0,f.homedir)()}/.capgo`;return(0,y.existsSync)(o)&&(console.log(`Use global apy key ${o}`),e=(0,y.readFileSync)(o,"utf8").trim()),o=".capgo",!e&&(0,y.existsSync)(o)&&(console.log(`Use local apy key ${o}`),e=(0,y.readFileSync)(o,"utf8").trim()),e||l.program.error("Key not found, please login first"),e},o.findMainFile=()=>t(void 0,void 0,void 0,(function*(){var e,o,n,t;const i=/(main|index)\.(ts|js)$/;let r="";const s=process.cwd(),c=s.split("/").length;try{for(var p,l=!0,d=a(m(s));!(e=(p=yield d.next()).done);){t=p.value,l=!1;try{const e=t;if(e.split("/").length-c<=2&&i.test(e)){r=e,console.log("Found main file here",e);break}}finally{l=!0}}}catch(e){o={error:e}}finally{try{l||e||!(n=d.return)||(yield n.call(d))}finally{if(o)throw o.error}}return r})),o.formatError=e=>e?`\n${u.default.render(e)}`:"",o.getConfig=()=>t(void 0,void 0,void 0,(function*(){let e;try{e=yield(0,p.loadConfig)()}catch(e){l.program.error("No capacitor config file found, run `cap init` first")}return e})),o.updateOrCreateVersion=(e,o,n)=>t(void 0,void 0,void 0,(function*(){const{data:t,error:i}=yield e.rpc("exist_app_versions",{appid:o.app_id,name_version:o.name,apikey:n}).single();return t&&!i?(o.deleted=!1,e.from("app_versions").update(o).eq("app_id",o.app_id).eq("name",o.name)):e.from("app_versions").insert(o).single()})),o.updateOrCreateChannel=(e,o,n)=>t(void 0,void 0,void 0,(function*(){if(!o.app_id||!o.name||!o.created_by)return console.error("missing app_id, name, or created_by"),Promise.reject(new Error("missing app_id, name, or created_by"));const{data:t,error:i}=yield e.rpc("exist_channel",{appid:o.app_id,name_channel:o.name,apikey:n}).single();return t&&!i?e.from("channels").update(o).eq("app_id",o.app_id).eq("name",o.name).eq("created_by",o.created_by).single():e.from("channels").insert(o).select().single()})),o.useLogSnag=()=>new g.LogSnag({token:"c124f5e9d0ce5bdd14bbb48f815d5583",project:"capgo"}),o.convertAppName=e=>e.replace(/\./g,"--"),o.verifyUser=(e,n,i=["all"])=>t(void 0,void 0,void 0,(function*(){yield(0,o.checkKey)(e,n,i);const{data:t,error:a}=yield e.rpc("get_user_id",{apikey:n}).single(),r=t?t.toString():"";return r&&!a||l.program.error(`Cannot verify user ${(0,o.formatError)(a)}`),r})),o.getHumanDate=e=>new Date(e||"").toLocaleString()},7778:e=>{e.exports=require("@capacitor/cli/dist/config")},6301:e=>{e.exports=require("@capgo/find-package-manager")},552:e=>{e.exports=require("@clack/prompts")},2885:e=>{e.exports=require("@supabase/supabase-js")},5906:e=>{e.exports=require("@tomasklaen/checksum")},7176:e=>{e.exports=require("@trufflesuite/spinnies")},3844:e=>{e.exports=require("adm-zip")},295:e=>{e.exports=require("cli-progress")},7304:e=>{e.exports=require("commander")},3847:e=>{e.exports=require("console-table-printer")},4470:e=>{e.exports=require("fs-extra")},5362:e=>{e.exports=require("get-latest-version")},1133:e=>{e.exports=require("logsnag")},9011:e=>{e.exports=require("mime")},6634:e=>{e.exports=require("open")},9867:e=>{e.exports=require("prettyjson")},1616:e=>{e.exports=require("prompt-sync")},1505:e=>{e.exports=require("semver/preload")},2081:e=>{e.exports=require("child_process")},6113:e=>{e.exports=require("crypto")},7147:e=>{e.exports=require("fs")},2037:e=>{e.exports=require("os")},1017:e=>{e.exports=require("path")},4147:e=>{e.exports=JSON.parse('{"name":"@capgo/cli","version":"3.6.2","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"},"engines":{"npm":">=7.0.0","node":">=16.0.0"},"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","test":"npx --yes ts-node -T src/index.ts","build":"npx --yes webpack --config webpack.config.js","dev-build":"SUPA_DB=development npx webpack --config webpack.config.js","pack":"pkg","types":"npx --yes supabase gen types typescript --project-id=xvwzpoazmxkqosrdewyv > src/types/supabase.types.ts","test_rls":"ts-node ./test/test_headers_rls.ts","lint":"eslint . --ext .ts --fix"},"author":"github.com/riderx","license":"Apache 2.0","dependencies":{"@capacitor/cli":"4.7.0","@capgo/find-package-manager":"^0.0.7","@clack/prompts":"^0.6.3","@supabase/supabase-js":"^2.10.0","@tomasklaen/checksum":"^1.1.0","@trufflesuite/spinnies":"^0.1.1","adm-zip":"^0.5.10","cli-progress":"3.12.0","commander":"10.0.0","console-table-printer":"^2.11.1","fs-extra":"11.1.0","get-latest-version":"^5.0.1","logsnag":"^0.1.6","mime":"^3.0.0","open":"^8.4.2","prettyjson":"^1.2.5","prompt-sync":"^4.2.0","semver":"^7.3.8"},"devDependencies":{"@types/adm-zip":"0.5.0","@types/cli-progress":"^3.11.0","@types/fs-extra":"^11.0.1","@types/mime":"^3.0.1","@types/node":"^18.14.6","@types/open":"^6.2.1","@types/prettyjson":"^0.0.30","@types/prompt-sync":"^4.2.0","@types/semver":"^7.3.13","@typescript-eslint/eslint-plugin":"5.54.0","@typescript-eslint/parser":"5.54.0","eslint":"8.35.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.7.0","eslint-import-resolver-typescript":"3.5.3","eslint-plugin-import":"2.27.5","eslint-plugin-prettier":"^4.2.1","git-format-staged":"3.0.0","husky":"^8.0.3","nodemon":"2.0.21","pkg":"5.8.0","prettier":"2.8.4","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"4.1.2","typescript":"4.9.5","webpack":"5.75.0","webpack-cli":"^5.0.1","webpack-node-externals":"^3.0.0"}}')}},o={};!function n(t){var i=o[t];if(void 0!==i)return i.exports;var a=o[t]={exports:{}};return e[t].call(a.exports,a,a.exports,n),a.exports}(1714)})();
|
|
2
|
+
(()=>{"use strict";var e={7642:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.newIconPath=o.checkAppExistsAndHasPermissionErr=o.checkAppExistsAndHasPermission=void 0;const i=n(7304);o.checkAppExistsAndHasPermission=(e,o,n,i=!0)=>t(void 0,void 0,void 0,(function*(){const{data:t,error:a}=yield e.rpc("exist_app",{appid:o,apikey:n}).single();return t!==i||a})),o.checkAppExistsAndHasPermissionErr=(e,n,a,r=!0)=>t(void 0,void 0,void 0,(function*(){(yield(0,o.checkAppExistsAndHasPermission)(e,n,a,r))&&i.program.error(`App ${n} does not exist or you don't have permission to access it`)})),o.newIconPath="assets/icon.png"},4860:function(e,o,n){var t=this&&this.__createBinding||(Object.create?function(e,o,n,t){void 0===t&&(t=n);var i=Object.getOwnPropertyDescriptor(o,n);i&&!("get"in i?!o.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return o[n]}}),Object.defineProperty(e,t,i)}:function(e,o,n,t){void 0===t&&(t=n),e[t]=o[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,o){Object.defineProperty(e,"default",{enumerable:!0,value:o})}:function(e,o){e.default=o}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var o={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&t(o,e,n);return i(o,e),o},r=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.getActiveChannels=o.displayChannels=o.delChannel=o.createChannel=o.findUnknownVersion=o.checkVersionNotUsedInChannel=void 0;const s=n(7304),c=n(3847),p=a(n(552)),l=n(7246);o.checkVersionNotUsedInChannel=(e,n,t,i)=>r(void 0,void 0,void 0,(function*(){var a;const{data:r,error:c}=yield e.from("channels").select().eq("app_id",n).eq("created_by",t).eq("version",i.id);if(c&&s.program.error(`Cannot check Version ${n}@${i.name} ${(0,l.formatError)(c)}`),r&&r.length>0){if(p.intro(`❌ Version ${n}@${i.name} is used in ${r.length} channel`),yield p.confirm({message:"unlink it?"}))for(const t of r){const i=p.spinner();i.start(`Unlinking channel ${t.name}`);const{error:r}=yield e.from("channels").update({version:null===(a=yield(0,o.findUnknownVersion)(e,n))||void 0===a?void 0:a.id}).eq("id",t.id);r&&(i.stop(`Cannot update channel ${t.name} ${(0,l.formatError)(r)}`),process.exit(1)),i.stop(`✅ Channel ${t.name} unlinked`)}else s.program.error("unlink it first");p.outro(`Version unlinked from ${r.length} channel`)}})),o.findUnknownVersion=(e,o)=>e.from("app_versions").select("id").eq("app_id",o).eq("name","unknown").throwOnError().single().then((({data:e})=>e)),o.createChannel=(e,o)=>e.from("channels").insert(o).select().single(),o.delChannel=(e,o,n,t)=>e.from("channels").delete().eq("name",o).eq("app_id",n).eq("created_by",t).single(),o.displayChannels=e=>{const o=new c.Table({title:"Channels",charLength:{"❌":2,"✅":2}});e.reverse().forEach((e=>{o.addRow({Name:e.name,Created:(0,l.getHumanDate)(e.created_at),Public:e.public?"✅":"❌"})})),o.printTable()},o.getActiveChannels=(e,o,n)=>r(void 0,void 0,void 0,(function*(){const{data:t,error:i}=yield e.from("channels").select().eq("app_id",o).eq("created_by",n).order("created_at",{ascending:!1});return i&&s.program.error(`App ${o} not found in database ${(0,l.formatError)(i)} `),t}))},6213:(e,o,n)=>{Object.defineProperty(o,"__esModule",{value:!0}),o.createRSA=o.encryptSource=o.decryptSource=void 0;const t=n(6113),i="aes-128-cbc",a="sha256",r="base64",s=t.constants.RSA_PKCS1_OAEP_PADDING;o.decryptSource=(e,o,n)=>{const[c,p]=o.split(":"),l=(0,t.privateDecrypt)({key:n,padding:s,oaepHash:a},Buffer.from(p,r)),d=Buffer.from(c,r),u=l.toString(r);console.log("\nSessionB64",u);const y=(0,t.createDecipheriv)(i,l,d);return y.setAutoPadding(!0),Buffer.concat([y.update(e),y.final()])},o.encryptSource=(e,o)=>{const n=(0,t.randomBytes)(16),c=(0,t.randomBytes)(16),p=(0,t.createCipheriv)(i,c,n);p.setAutoPadding(!0);const l=`${n.toString(r)}:${(0,t.publicEncrypt)({key:o,padding:s,oaepHash:a},c).toString(r)}`;return{encryptedData:Buffer.concat([p.update(e),p.final()]),ivSessionKey:l}},o.createRSA=()=>{const{publicKey:e,privateKey:o}=(0,t.generateKeyPairSync)("rsa",{modulusLength:2048});return{publicKey:e.export({type:"pkcs1",format:"pem"}),privateKey:o.export({type:"pkcs1",format:"pem"})}}},5933:function(e,o,n){var t=this&&this.__createBinding||(Object.create?function(e,o,n,t){void 0===t&&(t=n);var i=Object.getOwnPropertyDescriptor(o,n);i&&!("get"in i?!o.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return o[n]}}),Object.defineProperty(e,t,i)}:function(e,o,n,t){void 0===t&&(t=n),e[t]=o[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,o){Object.defineProperty(e,"default",{enumerable:!0,value:o})}:function(e,o){e.default=o}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var o={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&t(o,e,n);return i(o,e),o},r=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.checkVersionNotUsedInDeviceOverride=void 0;const s=n(7304),c=a(n(552)),p=n(7246);o.checkVersionNotUsedInDeviceOverride=(e,o,n)=>r(void 0,void 0,void 0,(function*(){const{data:t,error:i}=yield e.from("devices_override").select().eq("app_id",o).eq("version",n.id);if(i&&s.program.error(`Cannot check Device override ${o}@${n.name} ${(0,p.formatError)(i)}`),t&&t.length>0)if(c.intro(`❌ Version ${o}@${n.name} is used in ${t.length} device override`),yield c.confirm({message:"unlink it?"}))for(const o of t){const n=c.spinner();n.start(`Unlinking device ${o.device_id}`);const{error:t}=yield e.from("devices_override").delete().eq("device_id",o.device_id);t&&(n.stop(`Cannot unlink device ${o.device_id} ${(0,p.formatError)(t)}`),process.exit(1)),n.stop(`✅ Device ${o.device_id} unlinked`)}else s.program.error("unlink it first")}))},3350:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.deleteFromStorage=void 0;const i=n(7304),a=n(7246);o.deleteFromStorage=(e,o,n,r,s)=>t(void 0,void 0,void 0,(function*(){const{error:t}=yield e.storage.from("apps").remove([`${o}/${n}/versions/${r.bucket_id} `]);t&&i.program.error(`Something went wrong when trying to delete ${n} @${s} ${(0,a.formatError)(t)} `)}))},484:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0}),o.checkLatest=void 0;const a=i(n(5362)),r=i(n(4147));o.checkLatest=()=>t(void 0,void 0,void 0,(function*(){const e=yield(0,a.default)("@capgo/cli");e!==r.default.version&&console.log("[31m%s[0m",`🚨 You are using @capgo/cli@${r.default.version} it's not the latest version.\nPlease use @capgo/cli@${e}" or @capgo/cli@latest to keep up to date with the latest features and bug fixes.`)}))},1089:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.getVersionData=o.getActiveAppVersions=o.displayBundles=o.deleteSpecificVersion=o.deleteAppVersion=void 0;const i=n(7304),a=n(3847),r=n(7246),s=n(4860),c=n(5933),p=n(3350);o.deleteAppVersion=(e,o,n,a)=>t(void 0,void 0,void 0,(function*(){const{error:t}=yield e.from("app_versions").update({deleted:!0}).eq("app_id",o).eq("deleted",!1).eq("user_id",n).eq("name",a);t&&i.program.error(`App Version ${o}@${a} not found in database '${(0,r.formatError)(t)}'`)})),o.deleteSpecificVersion=(e,n,i,a)=>t(void 0,void 0,void 0,(function*(){const t=yield(0,o.getVersionData)(e,n,i,a);yield(0,s.checkVersionNotUsedInChannel)(e,n,i,t),yield(0,c.checkVersionNotUsedInDeviceOverride)(e,n,t),yield(0,p.deleteFromStorage)(e,i,n,t,a),yield(0,o.deleteAppVersion)(e,n,i,a)})),o.displayBundles=e=>{const o=new a.Table({title:"Bundles",charLength:{"❌":2,"✅":2}});e.reverse().forEach((e=>{o.addRow(Object.assign({Version:e.name,Created:(0,r.getHumanDate)(e.created_at)},null!=e.keep?{Keep:e.keep}:{}))})),o.printTable()},o.getActiveAppVersions=(e,o,n)=>t(void 0,void 0,void 0,(function*(){const{data:t,error:a}=yield e.from("app_versions").select().eq("app_id",o).eq("user_id",n).eq("deleted",!1).order("created_at",{ascending:!1});return a&&i.program.error(`App ${o} not found in database ${(0,r.formatError)(a)} `),t})),o.getVersionData=(e,o,n,a)=>t(void 0,void 0,void 0,(function*(){const{data:t,error:s}=yield e.from("app_versions").select().eq("app_id",o).eq("user_id",n).eq("name",a).eq("deleted",!1).single();return t&&!s||i.program.error(`App Version ${o}@${a} doesn't exist ${(0,r.formatError)(s)}`),t}))},3124:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.addCommand=o.addApp=void 0;const i=n(9011),a=n(7304),r=n(6113),s=n(4470),c=n(484),p=n(7642),l=n(7246);o.addApp=(e,o,n=!0)=>t(void 0,void 0,void 0,(function*(){var t,d,u;yield(0,c.checkLatest)(),o.apikey=o.apikey||(0,l.findSavedKey)();const y=yield(0,l.getConfig)();e=e||(null===(t=null==y?void 0:y.app)||void 0===t?void 0:t.appId);const f=(0,l.useLogSnag)();o.apikey||a.program.error("Missing API key, you need to provide a API key to upload your bundle"),e||a.program.error("Missing argument, you need to provide a appId, or be in a capacitor project");const g=(0,l.createSupabaseClient)(o.apikey),v=yield(0,l.verifyUser)(g,o.apikey,["write","all"]);if(n)yield(0,p.checkAppExistsAndHasPermissionErr)(g,e,o.apikey,!1);else if(yield(0,p.checkAppExistsAndHasPermission)(g,e,o.apikey,!1))return!1;let h,m,{name:b,icon:k}=o;e=e||(null===(d=null==y?void 0:y.app)||void 0===d?void 0:d.appId),b=b||(null===(u=null==y?void 0:y.app)||void 0===u?void 0:u.appName)||"Unknown",k=k||"resources/icon.png",k&&b||a.program.error("Missing argument, you need to provide a appId and a name, or be in a capacitor project"),n&&console.log(`Adding ${e} to Capgo`),k&&(0,s.existsSync)(k)?(h=(0,s.readFileSync)(k),m=(0,i.getType)(k)||"image/png",console.warn(`Found app icon ${k}`)):(0,s.existsSync)(p.newIconPath)?(h=(0,s.readFileSync)(p.newIconPath),m=(0,i.getType)(p.newIconPath)||"image/png",console.warn(`Found app icon ${p.newIconPath}`)):console.warn(`Cannot find app icon in any of the following locations: ${k}, ${p.newIconPath}`);const{data:_,error:w}=yield g.rpc("exist_app_v2",{appid:e}).single();(_||w)&&a.program.error(`App ${e} already exists ${(0,l.formatError)(w)}`);const x=`icon_${(0,r.randomUUID)()}`;let C="https://xvwzpoazmxkqosrdewyv.supabase.co/storage/v1/object/public/images/capgo.png";if(h&&m){const{error:o}=yield g.storage.from(`images/${v}/${e}`).upload(x,h,{contentType:m});o&&a.program.error(`Could not add app ${(0,l.formatError)(o)}`);const{data:n}=yield g.storage.from(`images/${v}/${e}`).getPublicUrl(x);C=(null==n?void 0:n.publicUrl)||C}const{error:$}=yield g.from("apps").insert({icon_url:C,user_id:v,name:b,app_id:e});$&&a.program.error(`Could not add app ${(0,l.formatError)($)}`);const{error:A}=yield g.from("app_versions").insert([{user_id:v,deleted:!0,name:"unknown",app_id:e},{user_id:v,deleted:!0,name:"builtin",app_id:e}]);return A&&a.program.error(`Could not add app ${(0,l.formatError)(A)}`),yield f.publish({channel:"app",event:"App Added",icon:"🎉",tags:{"user-id":v,"app-id":e},notify:!1}).catch(),console.log("App added to server, you can upload a bundle now"),n&&(console.log("Done ✅"),process.exit()),!0})),o.addCommand=(e,n)=>t(void 0,void 0,void 0,(function*(){(0,o.addApp)(e,n,!0)}))},2010:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.deleteApp=void 0;const i=n(7304),a=n(7642),r=n(7246);o.deleteApp=(e,o)=>t(void 0,void 0,void 0,(function*(){var n;o.apikey=o.apikey||(0,r.findSavedKey)();const t=yield(0,r.getConfig)();e=e||(null===(n=null==t?void 0:t.app)||void 0===n?void 0:n.appId);const s=(0,r.useLogSnag)();o.apikey||i.program.error("Missing API key, you need to provide a API key to upload your bundle"),e||i.program.error("Missing argument, you need to provide a appId, or be in a capacitor project");const c=(0,r.createSupabaseClient)(o.apikey),p=yield(0,r.verifyUser)(c,o.apikey,["write","all"]);yield(0,a.checkAppExistsAndHasPermissionErr)(c,e,o.apikey);const{error:l}=yield c.storage.from(`images/${p}`).remove([e]);l&&i.program.error(`Could not add app ${(0,r.formatError)(l)}`);const{error:d}=yield c.storage.from(`apps/${e}/${p}`).remove(["versions"]);d&&i.program.error(`Could not delete app version ${(0,r.formatError)(d)}`);const{error:u}=yield c.from("apps").delete().eq("app_id",e).eq("user_id",p);u&&i.program.error(`Could not delete app ${(0,r.formatError)(u)}`),yield s.publish({channel:"app",event:"App Deleted",icon:"🗑️",tags:{"user-id":p,"app-id":e},notify:!1}).catch(),console.log("App deleted in Capgo"),console.log("Done ✅"),process.exit()}))},8090:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0}),o.getInfo=void 0;const a=n(7147),r=i(n(5362)),s=n(1017),c=i(n(7176)),p=i(n(2037)),l=i(n(4147));o.getInfo=()=>t(void 0,void 0,void 0,(function*(){console.log(" 💊 Capgo Doctor 💊\n"),console.log(` OS: ${p.default.version()}\n`),console.log(" Installed Dependencies:\n");const e=yield t(void 0,void 0,void 0,(function*(){const{dependencies:e}=yield t(void 0,void 0,void 0,(function*(){const e=(0,a.readFileSync)((0,s.join)(process.cwd(),"package.json"));return JSON.parse(e)})),o={"@capgo/cli":l.default.version};for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&n.startsWith("@capgo/")&&(o[n]=e[n]);return o}));0===Object.keys(e).length&&(console.log("\n"),console.log("[31m%s[0m","🚨 No dependencies found"),process.exit(1));for(const o in e)if(Object.prototype.hasOwnProperty.call(e,o)){const n=e[o];console.log(` ${o}: ${n}`)}console.log("\n");const o=new c.default;o.add("loading",{text:"Loading latest dependencies"});const n=yield(e=>t(void 0,void 0,void 0,(function*(){const o={},n=[];for(const o in e)Object.prototype.hasOwnProperty.call(e,o)&&n.push((0,r.default)(o));return yield Promise.all(n).then((n=>{const t=Object.keys(e);for(let e=0;e<n.length;e+=1){const i=n[e];i&&(o[t[e]]=i)}})),o})))(e);o.succeed("loading",{text:"Latest Dependencies:"}),console.log("\n");for(const e in n)if(Object.prototype.hasOwnProperty.call(n,e)){const o=n[e];console.log(` ${e}: ${o}`)}JSON.stringify(e)!==JSON.stringify(n)&&(console.log("\n"),console.log("[31m%s[0m","🚨 Some dependencies are not up to date"),process.exit(1)),console.log("\n"),console.log("[32m%s[0m","✅ All dependencies are up to date"),process.exit()}))},9367:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.listApp=o.getActiveApps=void 0;const i=n(7304),a=n(3847),r=n(7642),s=n(7246),c=n(484);o.getActiveApps=(e,o)=>t(void 0,void 0,void 0,(function*(){const{data:n,error:t}=yield e.from("apps").select().eq("user_id",o).order("created_at",{ascending:!1});return t&&i.program.error(`Apps not found in database ${(0,s.formatError)(t)} `),n})),o.listApp=(e,n)=>t(void 0,void 0,void 0,(function*(){var t;yield(0,c.checkLatest)(),n.apikey=n.apikey||(0,s.findSavedKey)();const p=yield(0,s.getConfig)();e=e||(null===(t=null==p?void 0:p.app)||void 0===t?void 0:t.appId),n.apikey||i.program.error("Missing API key, you need to provide an API key to delete your app"),e||i.program.error("Missing argument, you need to provide a appid, or be in a capacitor project");const l=(0,s.createSupabaseClient)(n.apikey),d=yield(0,s.verifyUser)(l,n.apikey);console.log("Querying available versions in Capgo"),yield(0,r.checkAppExistsAndHasPermissionErr)(l,e,n.apikey);const u=yield(0,o.getActiveApps)(l,d);console.log(`Active app in Capgo: ${null==u?void 0:u.length}`),(e=>{const o=new a.Table({title:"Apps",charLength:{"❌":2,"✅":2}});e.reverse().forEach((e=>{o.addRow({Name:e.name,Created:(0,s.getHumanDate)(e.created_at)})})),o.printTable()})(u),console.log("Done ✅"),process.exit()}))},444:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.setApp=void 0;const i=n(9011),a=n(7304),r=n(6113),s=n(4470),c=n(7642),p=n(7246);o.setApp=(e,o)=>t(void 0,void 0,void 0,(function*(){var n;o.apikey=o.apikey||(0,p.findSavedKey)();const t=yield(0,p.getConfig)();e=e||(null===(n=null==t?void 0:t.app)||void 0===n?void 0:n.appId),o.apikey||a.program.error("Missing API key, you need to provide a API key to upload your bundle"),e||a.program.error("Missing argument, you need to provide a appId, or be in a capacitor project");const l=(0,p.createSupabaseClient)(o.apikey),d=yield(0,p.verifyUser)(l,o.apikey,["write","all"]);yield(0,c.checkAppExistsAndHasPermissionErr)(l,e,o.apikey);const{name:u,icon:y}=o;let f,g;const v=`icon_${(0,r.randomUUID)()}`;let h="https://xvwzpoazmxkqosrdewyv.supabase.co/storage/v1/object/public/images/capgo.png";if(y&&(0,s.existsSync)(y)?(f=(0,s.readFileSync)(y),g=(0,i.getType)(y)||"image/png",console.warn(`Found app icon ${y}`)):(0,s.existsSync)(c.newIconPath)?(f=(0,s.readFileSync)(c.newIconPath),g=(0,i.getType)(c.newIconPath)||"image/png",console.warn(`Found app icon ${c.newIconPath}`)):console.warn(`Cannot find app icon in any of the following locations: ${y}, ${c.newIconPath}`),f&&g){const{error:o}=yield l.storage.from(`images/${d}/${e}`).upload(v,f,{contentType:g});o&&a.program.error(`Could not add app ${(0,p.formatError)(o)}`);const{data:n}=yield l.storage.from(`images/${d}/${e}`).getPublicUrl(v);h=(null==n?void 0:n.publicUrl)||h}const{error:m}=yield l.from("apps").update({icon_url:h,name:u}).eq("app_id",e).eq("user_id",d);m&&a.program.error(`Could not add app ${(0,p.formatError)(m)}`),console.log("Done ✅"),process.exit()}))},6957:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))},i=this&&this.__asyncValues||function(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o,n=e[Symbol.asyncIterator];return n?n.call(e):(e="function"==typeof __values?__values(e):e[Symbol.iterator](),o={},t("next"),t("throw"),t("return"),o[Symbol.asyncIterator]=function(){return this},o);function t(n){o[n]=e[n]&&function(o){return new Promise((function(t,i){!function(e,o,n,t){Promise.resolve(t).then((function(o){e({value:o,done:n})}),o)}(t,i,(o=e[n](o)).done,o.value)}))}}},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0}),o.cleanupBundle=void 0;const r=n(7304),s=a(n(1505)),c=a(n(1616)),p=n(7246),l=n(1089),d=n(7642),u=n(484),y=(0,c.default)();o.cleanupBundle=(e,o)=>t(void 0,void 0,void 0,(function*(){var n;yield(0,u.checkLatest)();const a=o.apikey||(0,p.findSavedKey)(),{bundle:c,keep:f=4}=o,g=o.force||!1,v=yield(0,p.getConfig)();e=e||(null===(n=null==v?void 0:v.app)||void 0===n?void 0:n.appId),a||r.program.error("Missing API key, you need to provide an API key to delete your app"),e||r.program.error("Missing argument, you need to provide a appid, or be in a capacitor project");const h=(0,p.createSupabaseClient)(a),m=yield(0,p.verifyUser)(h,a);yield(0,d.checkAppExistsAndHasPermissionErr)(h,e,a),console.log("Querying all available versions in Capgo");let b=yield(0,l.getActiveAppVersions)(h,e,m);if(console.log(`Total active versions in Capgo: ${null==b?void 0:b.length}`),0===(null==b?void 0:b.length))return void console.log("No versions found, aborting cleanup");if(c){const e=`${s.default.inc(c,"major")}`;console.log(`Querying available versions in Capgo between ${c} and ${e}`),b=((e,o,n)=>{const t=[];return null==e||e.forEach((e=>{s.default.gte(e.name,o)&&s.default.lt(e.name,`${n}`)&&t.push(e)})),t})(b,c,e),console.log(`Active versions in Capgo between ${c} and ${e}: ${null==b?void 0:b.length}`)}const k=[];if(b.forEach(((e,o)=>{o<f?e.keep="✅":(e.keep="❌",k.push(e))})),0!==k.length){if((0,l.displayBundles)(b),!g&&"yes"!==y("Do you want to continue removing the versions specified? Type yes to confirm: "))return void console.log("Not confirmed, aborting removal...");console.log("You have confirmed removal, removing versions now"),yield((e,o,n,a)=>{var r,s,c;return t(void 0,void 0,void 0,(function*(){var t,d,u,y;try{for(r=!0,s=i(e);!(t=(c=yield s.next()).done);){y=c.value,r=!1;try{const e=y;console.log(`Removing ${e.name} created on ${(0,p.getHumanDate)(e.created_at)}`),yield(0,l.deleteSpecificVersion)(o,n,a,e.name)}finally{r=!0}}}catch(e){d={error:e}}finally{try{r||t||!(u=s.return)||(yield u.call(s))}finally{if(d)throw d.error}}}))})(k,h,e,m),console.log("Done ✅"),process.exit()}else console.log("Nothing to be removed, aborting removal...")}))},8628:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.decryptZip=void 0;const i=n(7304),a=n(7147),r=n(6213),s=n(7246),c=n(484);o.decryptZip=(e,o,n)=>t(void 0,void 0,void 0,(function*(){var t,p,l;yield(0,c.checkLatest)(),(0,a.existsSync)(e)||i.program.error(`Zip not found at the path ${e}`);const d=yield(0,s.getConfig)(),{extConfig:u}=d.app;n.key||(0,a.existsSync)(s.baseKey)||(null===(p=null===(t=u.plugins)||void 0===t?void 0:t.CapacitorUpdater)||void 0===p?void 0:p.privateKey)||i.program.error(`Private Key not found at the path ${s.baseKey} or in ${d.app.extConfigFilePath}`);const y=n.key||s.baseKey;let{privateKey:f}=n.keyData||(null===(l=null==u?void 0:u.plugins)||void 0===l?void 0:l.CapacitorUpdater)||"";(0,a.existsSync)(y)||f?(0,a.existsSync)(y)&&(f=(0,a.readFileSync)(y).toString()):i.program.error(`Cannot find public key ${y} or as keyData option or in ${d.app.extConfigFilePath}`);const g=(0,a.readFileSync)(e),v=(0,r.decryptSource)(g,o,f);(0,a.writeFileSync)(`${e}_decrypted.zip`,v),console.log("Done ✅"),process.exit()}))},2006:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.deleteBundle=void 0;const i=n(7304),a=n(7642),r=n(7246),s=n(1089);o.deleteBundle=(e,o,n)=>t(void 0,void 0,void 0,(function*(){var t,c;n.apikey=n.apikey||(0,r.findSavedKey)();const p=yield(0,r.getConfig)();e=e||(null===(t=null==p?void 0:p.app)||void 0===t?void 0:t.appId),n.apikey||i.program.error("Missing API key, you need to provide a API key to upload your bundle"),e||i.program.error("Missing argument, you need to provide a appId, or be in a capacitor project");const l=(0,r.createSupabaseClient)(n.apikey),d=yield(0,r.verifyUser)(l,n.apikey,["write","all"]);yield(0,a.checkAppExistsAndHasPermissionErr)(l,e,n.apikey);const u=n.apikey||(0,r.findSavedKey)();e=e||(null===(c=null==p?void 0:p.app)||void 0===c?void 0:c.appId),u||i.program.error("Missing API key, you need to provide an API key to delete your app"),o||i.program.error("Missing argument, you need to provide a bundleId, or be in a capacitor project"),e||i.program.error("Missing argument, you need to provide a appId, or be in a capacitor project"),console.log(`Delete ${e}@${o} from Capgo`),yield(0,s.deleteSpecificVersion)(l,e,d,o),console.log(`${e}@${o} deleted from server`),console.log("Done ✅"),process.exit()}))},6278:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.encryptZip=void 0;const i=n(7304),a=n(7147),r=n(484),s=n(6213),c=n(7246);o.encryptZip=(e,o)=>t(void 0,void 0,void 0,(function*(){yield(0,r.checkLatest)(),(0,a.existsSync)(e)||i.program.error(`Zip not found at the path ${e}`);const n=o.key||c.baseKeyPub;let t=o.keyData||"";(0,a.existsSync)(n)||t?(0,a.existsSync)(n)&&(t=(0,a.readFileSync)(n).toString()):i.program.error(`Cannot find public key ${n} or as keyData option`);const p=(0,a.readFileSync)(e),l=(0,s.encryptSource)(p,t);console.log("ivSessionKey",l.ivSessionKey),(0,a.writeFileSync)(`${e}_encrypted.zip`,l.encryptedData),console.log("Done ✅"),process.exit()}))},9135:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.listBundle=void 0;const i=n(7304),a=n(7642),r=n(1089),s=n(7246),c=n(484);o.listBundle=(e,o)=>t(void 0,void 0,void 0,(function*(){var n;yield(0,c.checkLatest)(),o.apikey=o.apikey||(0,s.findSavedKey)();const t=yield(0,s.getConfig)();e=e||(null===(n=null==t?void 0:t.app)||void 0===n?void 0:n.appId),o.apikey||i.program.error("Missing API key, you need to provide an API key to delete your app"),e||i.program.error("Missing argument, you need to provide a appid, or be in a capacitor project");const p=(0,s.createSupabaseClient)(o.apikey),l=yield(0,s.verifyUser)(p,o.apikey);console.log("Querying available versions in Capgo"),yield(0,a.checkAppExistsAndHasPermissionErr)(p,e,o.apikey);const d=yield(0,r.getActiveAppVersions)(p,e,l);console.log(`Active versions in Capgo: ${null==d?void 0:d.length}`),(0,r.displayBundles)(d),console.log("Done ✅"),process.exit()}))},7883:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0}),o.uploadDeprecatedCommand=o.uploadCommand=o.uploadBundle=void 0;const a=i(n(3844)),r=n(7304),s=n(6113),c=i(n(295)),p=n(7147),l=n(5906),d=n(484),u=n(7642),y=n(6213),f=n(7246);o.uploadBundle=(e,o,n=!0)=>t(void 0,void 0,void 0,(function*(){var t,i,g,v;yield(0,d.checkLatest)();let{bundle:h,path:m,channel:b}=o;const{external:k,key:_=!1,displayIvSession:w}=o,x=o.apikey||(0,f.findSavedKey)(),C=(0,f.useLogSnag)();b=b||"dev";const $=yield(0,f.getConfig)();e=e||(null===(t=null==$?void 0:$.app)||void 0===t?void 0:t.appId);const A=(0,s.randomUUID)().split("-")[0];h=h||(null===(g=null===(i=null==$?void 0:$.app)||void 0===i?void 0:i.package)||void 0===g?void 0:g.version)||`0.0.1-beta.${A}`,f.regexSemver.test(h)||r.program.error(`Your bundle name ${h}, is not valid it should follow semver convention : https://semver.org/`),m=m||(null===(v=null==$?void 0:$.app)||void 0===v?void 0:v.webDir),x||r.program.error("Missing API key, you need to provide a API key to upload your bundle"),e&&h&&m||r.program.error("Missing argument, you need to provide a appid and a bundle and a path, or be in a capacitor project"),(0,p.existsSync)(m)||r.program.error(`Path ${m} does not exist, build your app first, or provide a valid path`),console.log(`Upload ${e}@${h} started from path "${m}" to Capgo cloud`);const S=(0,f.createSupabaseClient)(x),P=yield(0,f.verifyUser)(S,x,["write","all","upload"]);yield(0,f.checkPlanValid)(S,P,!1),yield(0,u.checkAppExistsAndHasPermissionErr)(S,e,x);const I=new c.default.MultiBar({clearOnComplete:!1,hideCursor:!0},c.default.Presets.shades_grey),D=I.create(7,0,{format:"Uploading: [{bar}] {percentage}% | ETA: {eta}s | {value}/{total} Part"},c.default.Presets.shades_grey);D.start(7,0,{speed:"N/A"});const{data:j,error:M}=yield S.rpc("exist_app_versions",{apikey:x,name_version:h,appid:e}).single();(j||M)&&(I.stop(),r.program.error(`This app bundle already exist or was deleted, you cannot re-upload it ${(0,f.formatError)(M)}`)),D.increment();const{data:O,error:E}=yield S.rpc("is_trial",{userid:P}).single();(O&&O>0||E)&&I.log(`WARNING !!\nTrial expires in ${O} days, upgrade here: ${f.hostWeb}/dashboard/settings/plans\n`),D.increment();const{data:K,error:U}=yield S.rpc("exist_app",{appid:e,apikey:x}).single();K&&!U||(I.stop(),r.program.error(`Cannot find app ${e} in your account \n${(0,f.formatError)(U)}`)),D.increment();const{data:q,error:L}=yield S.rpc("exist_app_versions",{appid:e,apikey:x,name_version:h}).single();(q||L)&&r.program.error(`Version already exists ${(0,f.formatError)(L)}`),D.increment();const z=(0,s.randomUUID)();let F,T="";if(k)k&&!k.startsWith("https://")&&(I.stop(),r.program.error(`External link should should start with "https://" current is "${k}"`));else{const o=new a.default;o.addLocalFolder(m);let n=o.toBuffer();if(T=yield(0,l.checksum)(n,"crc32"),_||(0,p.existsSync)(f.baseKeyPub)){const e="string"==typeof _?_:f.baseKeyPub;(0,p.existsSync)(e)||r.program.error(`Cannot find public key ${e}`);const o=(0,p.readFileSync)(e);I.log("Encrypting your bundle\n");const t=(0,y.encryptSource)(n,o.toString());F=t.ivSessionKey,w&&I.log(`Your Iv Session key is ${F},\nkeep it safe, you will need it to decrypt your bundle.\nIt will be also visible in your dashboard\n`),n=t.encryptedData}const t=Math.floor(n.byteLength/1024/1024),i=`apps/${P}/${e}/versions`;D.increment(),t>20&&(I.log(`WARNING !!\nThe app size is ${t} Mb, this may take a while to download for users\n`),I.log("Learn how to optimize your assets https://capgo.app/blog/optimise-your-images-for-updates/\n"),yield C.publish({channel:"app-error",event:"App Too Large",icon:"🚛",tags:{"user-id":P,"app-id":e},notify:!1}).catch());const{error:s}=yield S.storage.from(i).upload(z,n,{contentType:"application/zip",cacheControl:"2592000"});s&&(I.stop(),r.program.error(`Cannot upload ${(0,f.formatError)(s)}`))}D.increment();const{error:V}=yield(0,f.updateOrCreateVersion)(S,{bucket_id:k?void 0:z,user_id:P,name:h,app_id:e,session_key:F,external_url:k,checksum:T},x);V&&(I.stop(),r.program.error(`Cannot add bundle ${(0,f.formatError)(V)}`)),D.increment();const{data:N}=yield S.rpc("get_app_versions",{apikey:x,name_version:h,appid:e}).single();if(N){const{error:o}=yield(0,f.updateOrCreateChannel)(S,{name:b,app_id:e,created_by:P,version:N},x);o&&I.log("Cannot set bundle with upload key, use key with more rights for that\n")}else I.log("Cannot set bundle with upload key, use key with more rights for that\n");I.stop();const B=(0,f.convertAppName)(e);return console.log("Bundle uploaded to server"),console.log(`Try it in mobile app: ${f.host}/app_mobile`),console.log(`Or set the channel ${b} as public here: ${f.hostWeb}/app/package/${B}`),console.log("To use with live update in your own app"),console.log(`You can link specific device to this bundle to make user try it first, here: ${f.hostWeb}/app/p/${B}/devices`),yield C.publish({channel:"app",event:"App Uploaded",icon:"⏫",tags:{"user-id":P,"app-id":e},notify:!1}).catch(),n&&(console.log("Done ✅"),process.exit()),!0})),o.uploadCommand=(e,n)=>t(void 0,void 0,void 0,(function*(){(0,o.uploadBundle)(e,n,!0)})),o.uploadDeprecatedCommand=(e,n)=>t(void 0,void 0,void 0,(function*(){console.log('⚠️ This command is deprecated, use "npx @capgo/cli bundle upload" instead ⚠️'),(0,o.uploadBundle)(e,n,!0)}))},792:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0}),o.zipBundle=void 0;const a=i(n(3844)),r=n(7304),s=n(6113),c=i(n(295)),p=n(5906),l=n(7147),d=n(484),u=n(7246);o.zipBundle=(e,o)=>t(void 0,void 0,void 0,(function*(){var n,t,i,y;yield(0,d.checkLatest)();let{bundle:f,path:g}=o;const v=(0,u.useLogSnag)(),h=yield(0,u.getConfig)();e=e||(null===(n=null==h?void 0:h.app)||void 0===n?void 0:n.appId);const m=(0,s.randomUUID)().split("-")[0];f=f||(null===(i=null===(t=null==h?void 0:h.app)||void 0===t?void 0:t.package)||void 0===i?void 0:i.version)||`0.0.1-beta.${m}`,u.regexSemver.test(f)||r.program.error(`Your bundle name ${f}, is not valid it should follow semver convention : https://semver.org/`),g=g||(null===(y=null==h?void 0:h.app)||void 0===y?void 0:y.webDir),e&&f&&g||r.program.error("Missing argument, you need to provide a appId and a bundle and a path, or be in a capacitor project"),console.log(`Zip ${e}@${f} started from path "${g}"`);const b=new c.default.MultiBar({clearOnComplete:!1,hideCursor:!0},c.default.Presets.shades_grey),k=b.create(4,0,{format:"Uploading: [{bar}] {percentage}% | ETA: {eta}s | {value}/{total} Part"},c.default.Presets.shades_grey);k.start(4,0,{speed:"N/A"}),k.increment();const _=new a.default;_.addLocalFolder(g);const w=_.toBuffer();k.increment();const x=yield(0,p.checksum)(w,"crc32"),C=Math.floor(w.byteLength/1024/1024);k.increment(),C>20&&(b.log(`WARNING !!\nThe app size is ${C} Mb, this may take a while to download for users\n`),b.log("Learn how to optimize your assets https://capgo.app/blog/optimise-your-images-for-updates/\n"),yield v.publish({channel:"app-error",event:"App Too Large",icon:"🚛",tags:{"app-id":e},notify:!1}).catch()),k.increment(),(0,l.writeFileSync)(`${e}_${f}.zip`,w),b.stop(),console.log("Bundle zipped"),yield v.publish({channel:"app",event:"App zip",icon:"⏫",tags:{"app-id":e},notify:!1}).catch(),console.log(`Checksum: ${x}`),console.log("Done ✅"),process.exit()}))},9339:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.addChannelCommand=o.addChannel=void 0;const i=n(7304),a=n(7642),r=n(4860),s=n(7246);o.addChannel=(e,o,n,c=!0)=>t(void 0,void 0,void 0,(function*(){var t;n.apikey=n.apikey||(0,s.findSavedKey)();const p=yield(0,s.getConfig)();o=o||(null===(t=null==p?void 0:p.app)||void 0===t?void 0:t.appId);const l=(0,s.useLogSnag)();n.apikey||i.program.error("Missing API key, you need to provide a API key to upload your bundle"),o||i.program.error("Missing argument, you need to provide a appId, or be in a capacitor project");const d=(0,s.createSupabaseClient)(n.apikey),u=yield(0,s.verifyUser)(d,n.apikey,["write","all"]);yield(0,a.checkAppExistsAndHasPermissionErr)(d,o,n.apikey),console.log(`Create channel ${o}#${e} to Capgo cloud`);try{const n=yield(0,r.findUnknownVersion)(d,o);n||i.program.error("Cannot find default version for channel creation, please contact Capgo support 🤨"),yield(0,r.createChannel)(d,{name:e,app_id:o,version:n.id,created_by:u}),console.log("Channel created ✅"),yield l.publish({channel:"channel",event:"Create channel",icon:"✅",tags:{"user-id":u,"app-id":o,channel:e},notify:!1}).catch()}catch(e){return console.log("Cannot create Channel 🙀",e),!1}return c&&(console.log("Done ✅"),process.exit()),!0})),o.addChannelCommand=(e,n,i)=>t(void 0,void 0,void 0,(function*(){(0,o.addChannel)(e,n,i,!0)}))},879:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.deleteChannel=void 0;const i=n(7304),a=n(7642),r=n(4860),s=n(7246);o.deleteChannel=(e,o,n)=>t(void 0,void 0,void 0,(function*(){var t;n.apikey=n.apikey||(0,s.findSavedKey)();const c=yield(0,s.getConfig)();o=o||(null===(t=null==c?void 0:c.app)||void 0===t?void 0:t.appId);const p=(0,s.useLogSnag)();n.apikey||i.program.error("Missing API key, you need to provide a API key to upload your bundle"),o||i.program.error("Missing argument, you need to provide a appId, or be in a capacitor project");const l=(0,s.createSupabaseClient)(n.apikey),d=yield(0,s.verifyUser)(l,n.apikey,["write","all"]);yield(0,a.checkAppExistsAndHasPermissionErr)(l,o,n.apikey),console.log(`Delete channel ${o}#${e} to Capgo cloud`);try{yield(0,r.delChannel)(l,e,o,d),console.log("Channel Delete ✅"),yield p.publish({channel:"channel",event:"Delete channel",icon:"✅",tags:{"user-id":d,"app-id":o,channel:e},notify:!1}).catch()}catch(e){console.log("Cannot delete Channel 🙀",e)}console.log("Done ✅"),process.exit()}))},2416:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.listChannels=void 0;const i=n(7304),a=n(7642),r=n(4860),s=n(7246);o.listChannels=(e,o)=>t(void 0,void 0,void 0,(function*(){var n;o.apikey=o.apikey||(0,s.findSavedKey)();const t=yield(0,s.getConfig)();e=e||(null===(n=null==t?void 0:t.app)||void 0===n?void 0:n.appId);const c=(0,s.useLogSnag)();o.apikey||i.program.error("Missing API key, you need to provide a API key to upload your bundle"),e||i.program.error("Missing argument, you need to provide a appId, or be in a capacitor project");const p=(0,s.createSupabaseClient)(o.apikey),l=yield(0,s.verifyUser)(p,o.apikey,["write","all"]);yield(0,a.checkAppExistsAndHasPermissionErr)(p,e,o.apikey),console.log("Querying available versions in Capgo"),yield(0,a.checkAppExistsAndHasPermissionErr)(p,e,o.apikey);const d=yield(0,r.getActiveChannels)(p,e,l);console.log(`Active channels in Capgo: ${null==d?void 0:d.length}`),(0,r.displayChannels)(d),yield c.publish({channel:"channel",event:"List channel",icon:"✅",tags:{"user-id":l,"app-id":e},notify:!1}).catch(),console.log("Done ✅"),process.exit()}))},2687:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.setChannel=void 0;const i=n(7304),a=n(7642),r=n(7246);o.setChannel=(e,o,n)=>t(void 0,void 0,void 0,(function*(){var t,s,c;n.apikey=n.apikey||(0,r.findSavedKey)();const p=yield(0,r.getConfig)();o=o||(null===(t=null==p?void 0:p.app)||void 0===t?void 0:t.appId);const l=(0,r.useLogSnag)();n.apikey||i.program.error("Missing API key, you need to provide a API key to upload your bundle"),o||i.program.error("Missing argument, you need to provide a appId, or be in a capacitor project");const d=(0,r.createSupabaseClient)(n.apikey),u=yield(0,r.verifyUser)(d,n.apikey,["write","all"]);yield(0,a.checkAppExistsAndHasPermissionErr)(d,o,n.apikey);const{bundle:y,latest:f,downgrade:g,upgrade:v,ios:h,android:m,selfAssign:b,state:k}=n;e||i.program.error("Missing argument, you need to provide a channel"),f&&y&&i.program.error("Cannot set latest and bundle at the same time"),null==y&&null==k&&null==f&&null==g&&null==v&&null==h&&null==m&&null==b&&i.program.error("Missing argument, you need to provide a option to set");try{yield(0,r.checkPlanValid)(d,u),yield(0,a.checkAppExistsAndHasPermissionErr)(d,o,n.apikey);const t={created_by:u,app_id:o,name:e,version:void 0},_=f?null===(c=null===(s=null==p?void 0:p.app)||void 0===s?void 0:s.package)||void 0===c?void 0:c.version:y;if(null!=_){const{data:n,error:a}=yield d.from("app_versions").select().eq("app_id",o).eq("name",_).eq("user_id",u).eq("deleted",!1).single();!a&&n||i.program.error(`Cannot find version ${_}`),console.log(`Set ${o} channel: ${e} to @${_}`),t.version=n.id}null!=k&&("public"!==k&&"private"!==k||console.log(`Set ${o} channel: ${e} to public or private is deprecated, use default or normal instead`),console.log(`Set ${o} channel: ${e} to ${"public"===k||"default"===k?"default":"normal"}`),t.public="public"===k||"default"===k),null!=g&&(console.log(`Set ${o} channel: ${e} to ${g?"allow":"disallow"} downgrade`),t.disableAutoUpdateUnderNative=!g),null!=v&&(console.log(`Set ${o} channel: ${e} to ${v?"allow":"disallow"} upgrade`),t.disableAutoUpdateToMajor=!v),null!=h&&(console.log(`Set ${o} channel: ${e} to ${h?"allow":"disallow"} ios update`),t.ios=!!h),null!=m&&(console.log(`Set ${o} channel: ${e} to ${m?"allow":"disallow"} android update`),t.android=!!m),null!=b&&(console.log(`Set ${o} channel: ${e} to ${b?"allow":"disallow"} self assign to this channel`),t.allow_device_self_set=!!b);try{const{error:e}=yield(0,r.updateOrCreateChannel)(d,t,n.apikey);e&&i.program.error(`Cannot set channel ${(0,r.formatError)(e)}`)}catch(e){i.program.error(`Cannot set channel ${(0,r.formatError)(e)}`)}yield l.publish({channel:"channel",event:"Set channel",icon:"✅",tags:{"user-id":u,"app-id":o},notify:!1}).catch()}catch(e){i.program.error(`Unknow error ${(0,r.formatError)(e)}`)}console.log("Done ✅"),process.exit()}))},1714:function(e,o,n){var t=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0});const i=n(7304),a=n(792),r=n(5012),s=n(9135),c=n(8628),p=n(6278),l=n(3124),d=n(8090),u=n(2285),y=n(2006),f=n(2687),g=n(7883),v=t(n(4147)),h=n(8640),m=n(9367),b=n(6957),k=n(9339),_=n(879),w=n(2416),x=n(444),C=n(2010);i.program.description("Manage packages and bundle versions in Capgo Cloud").version(v.default.version),i.program.command("login [apikey]").alias("l").description("Save apikey to your machine or folder").action(h.loginCommand).option("--local","Only save in local folder"),i.program.command("doctor").description("Get info about your Capgo app install").action(d.getInfo),i.program.command("init [apikey] [appid]").description("Init a new app").action(r.initApp).option("-n, --name <name>","app name").option("-i, --icon <icon>","app icon path").option("-a, --apikey <apikey>","apikey to link to your account");const $=i.program.command("app").description("Manage app");$.command("add [appid]").alias("a").description("Add a new app in Capgo Cloud").action(l.addCommand).option("-n, --name <name>","app name").option("-i, --icon <icon>","app icon path").option("-a, --apikey <apikey>","apikey to link to your account"),$.command("delete [appid]").alias("d").description("Delete an app in Capgo Cloud").action(C.deleteApp).option("-a, --apikey <apikey>","apikey to link to your account"),$.command("list [appid]").alias("l").description("list apps in Capgo Cloud").action(m.listApp).option("-a, --apikey <apikey>","apikey to link to your account"),$.command("set [appid]").alias("s").description("Set an app in Capgo Cloud").action(x.setApp).option("-n, --name <name>","app name").option("-i, --icon <icon>","app icon path").option("-a, --apikey <apikey>","apikey to link to your account");const A=i.program.command("bundle").description("Manage bundle");A.command("upload [appid]").alias("u").description("Upload a new bundle in Capgo Cloud").action(g.uploadCommand).option("-a, --apikey <apikey>","apikey to link to your account").option("-p, --path <path>","path of the folder 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("--key <key>","custom path for public signing key").option("--keyData <keyData>","base64 public signing key").option("--no-key","ignore signing key and send clear update").option("--display-iv-session","Show in the console the iv and session key used to encrypt the update").option("-b, --bundle <bundle>","bundle version number of the bundle to upload"),A.command("delete [appid]").alias("d").description("Delete a bundle in Capgo Cloud").action(y.deleteBundle).option("-a, --apikey <apikey>","apikey to link to your account"),A.command("list [appid]").alias("l").description("List bundle in Capgo Cloud").action(s.listBundle).option("-a, --apikey <apikey>","apikey to link to your account"),A.command("unlink [appid]").alias("u").description("Unlink a bundle in Capgo Cloud").action(s.listBundle).option("-a, --apikey <apikey>","apikey to link to your account").option("-b, --bundle <bundle>","bundle version number of the bundle to unlink"),A.command("cleanup [appid]").alias("c").action(b.cleanupBundle).description("Cleanup bundle in Capgo Cloud").option("-b, --bundle <bundle>","bundle version number of the app to delete").option("-a, --apikey <apikey>","apikey to link to your account").option("-k, --keep <keep>","number of version to keep").option("-f, --force","force removal"),A.command("decrypt [zipPath] [sessionKey]").alias("l").description("Decrypt a signed zip bundle").action(c.decryptZip).option("--key <key>","custom path for private signing key").option("--keyData <keyData>","base64 private signing key"),A.command("encrypt [zipPath]").description("Encrypt a zip bundle").action(p.encryptZip).option("--key <key>","custom path for private signing key").option("--keyData <keyData>","base64 private signing key"),A.command("zip [appid]").description("Zip a bundle").action(a.zipBundle).option("-p, --path <path>","path of the folder to upload").option("-b, --bundle <bundle>","bundle version number to name the zip file");const S=i.program.command("channel").description("Manage channel");S.command("add [channelid] [appid]").alias("a").description("Create channel").action(k.addChannelCommand).option("-d, --default","set the channel as default"),S.command("delete [channelid] [appid]").alias("d").description("Delete channel").action(_.deleteChannel),S.command("list [appid]").alias("l").description("List channel").action(w.listChannels),S.command("set [channelid] [appid]").alias("s").description("Set channel").action(f.setChannel).option("-a, --apikey <apikey>","apikey to link to your account").option("-b, --bundle <bundle>","bundle version number of the file to set").option("-s, --state <state>","set the state of the channel, default or normal").option("--latest","get the latest version key in the package.json to set it to the channel").option("--downgrade","Allow to downgrade to version under native one").option("--no-downgrade","Disable downgrade to version under native one").option("--upgrade","Allow to upgrade to version above native one").option("--no-upgrade","Disable upgrade to version above native one").option("--ios","Allow sending update to ios devices").option("--no-ios","Disable sending update to ios devices").option("--android","Allow sending update to android devices").option("--no-android","Disable sending update to android devices").option("--self-assign","Allow to device to self assign to this channel").option("--no-self-assign","Disable devices to self assign to this channel");const P=i.program.command("key").description("Manage key");P.command("save").description("Save base64 signing key in capacitor config, usefull for CI").action(u.saveKeyCommand).option("-f, --force","force generate a new one"),P.command("create").description("Create a new signing key").action(u.createKeyCommand).option("-f, --force","force generate a new one"),i.program.command("upload [appid]").alias("u").description("(Deprecated) Upload a new bundle to Capgo Cloud").action(g.uploadDeprecatedCommand).option("-a, --apikey <apikey>","apikey to link to your account").option("-p, --path <path>","path of the folder 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("--key <key>","custom path for public signing key").option("--keyData <keyData>","base64 public signing key").option("--no-key","ignore signing key and send clear update").option("--display-iv-session","Show in the console the iv and session key used to encrypt the update").option("-b, --bundle <bundle>","bundle version number of the file to upload"),i.program.parseAsync()},5012:function(e,o,n){var t=this&&this.__createBinding||(Object.create?function(e,o,n,t){void 0===t&&(t=n);var i=Object.getOwnPropertyDescriptor(o,n);i&&!("get"in i?!o.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return o[n]}}),Object.defineProperty(e,t,i)}:function(e,o,n,t){void 0===t&&(t=n),e[t]=o[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,o){Object.defineProperty(e,"default",{enumerable:!0,value:o})}:function(e,o){e.default=o}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var o={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&t(o,e,n);return i(o,e),o},r=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.initApp=void 0;const s=n(7147),c=n(6301),p=n(2081),l=a(n(552)),d=n(2285),u=n(9339),y=n(7883),f=n(8640),g=n(3124),v=n(484),h=n(7246),m="CapacitorUpdater.notifyAppReady()",b=/import.*from.*/g,k="production",_={stdio:"pipe"},w=(e,o,n)=>r(void 0,void 0,void 0,(function*(){l.isCancel(e)&&(yield n.publish({channel:"onboarding-v2",event:"canceled",icon:"🤷",tags:{"user-id":o},notify:!1}).catch(),process.exit())})),x=(e,o,n)=>r(void 0,void 0,void 0,(function*(){yield o.publish({channel:"onboarding-v2",event:n?`step-${n}`:"done",icon:"✅",tags:{"user-id":e},notify:!1}).catch()}));o.initApp=(e,o,n)=>r(void 0,void 0,void 0,(function*(){var t,i;yield(0,v.checkLatest)();const a=(0,h.useLogSnag)(),r=yield(0,h.getConfig)();o=o||(null===(t=null==r?void 0:r.app)||void 0===t?void 0:t.appId),l.intro("Capgo init");const C=l.spinner();C.start("Running: npx @capgo/cli@latest login ***"),(yield(0,f.login)(e,n,!1))?C.stop("Login Done ✅"):C.stop("Login already done ✅");const $=(0,h.createSupabaseClient)(e||(0,h.findSavedKey)()),A=yield(0,h.verifyUser)($,e,["upload"]);yield x(A,a,1);const S=yield l.confirm({message:`Add ${o} in Capgo?`});if(yield w(S,A,a),S){const e=l.spinner();e.start(`Running: npx @capgo/cli@latest app add ${o}`),(yield(0,g.addApp)(o,n,!1))?e.stop("App add Done ✅"):e.stop("App already add ✅"),yield x(A,a,2)}const P=yield l.confirm({message:`Create default channel ${k} for ${o} in Capgo?`});if(yield w(P,A,a),P){const n=l.spinner();n.start(`Running: npx @capgo/cli@latest channel add ${k} ${o} -d`),(yield(0,u.addChannel)(k,o,{default:!0,apikey:e},!1))?n.stop("Channel add Done ✅"):n.stop("Channel already added ✅"),yield x(A,a,3)}const I=yield l.confirm({message:`Automatic Install "@capgo/capacitor-updater" in ${o}?`});if(yield w(I,A,a),I){const e=l.spinner();e.start("Checking if @capgo/capacitor-updater is installed");const o=JSON.parse((0,s.readFileSync)("package.json").toString()),n=(0,c.findPackageManagerType)();"unknown"===n&&(e.stop("Cannot reconize package manager, please run `capgo init` in a capacitor project with npm, pnpm or yarn"),process.exit());const t="yarn"===n?"add":"install";o.dependencies["@capgo/capacitor-updater"]?e.stop("Capgo already installed ✅"):(yield(0,p.execSync)(`${n} ${t} @capgo/capacitor-updater@latest`,_),e.stop("Install Done ✅")),yield x(A,a,4)}const D=yield l.confirm({message:`Automatic Add "${m}" code and import in ${o}?`});if(yield w(D,A,a),D){const e=l.spinner();e.start("Adding @capacitor-updater to your main file");const o=yield(0,h.findMainFile)();o||(e.stop("No main.ts, main.js, index.ts or index.js file found, please run cap init first"),process.exit());const n=(0,s.readFileSync)(o).toString(),t=n.match(b),i=null==t?void 0:t.pop();if(i||(e.stop("Cannot find import line in main file, use manual installation: https://docs.capgo.app/plugin/installation"),process.exit()),n.includes(m))e.stop(`Code already added to ${o} ✅`);else{const t=n.replace(i,`${i}\nimport { CapacitorUpdater } from '@capgo/capacitor-updater';\n\n${m};\n`);(0,s.writeFileSync)(o,t),e.stop(`Code added to ${o} ✅`)}yield x(A,a,5)}const j=yield l.confirm({message:`Automatic configure end-to-end encryption in ${o} updates?`});if(yield w(j,A,a),j){const e=l.spinner();e.start("Running: npx @capgo/cli@latest key create"),(yield(0,d.createKey)({},!1))?e.stop("key created 🔑"):(e.stop("Cannot create key ❌"),process.exit(1)),yield x(A,a,6)}const M=yield l.confirm({message:`Automatic build ${o} with "npm run build" ?`});if(yield w(M,A,a),M){const e=l.spinner();e.start("Running: npm run build && npx cap sync"),(null===(i=JSON.parse((0,s.readFileSync)("package.json").toString()).scripts)||void 0===i?void 0:i.build)||(e.stop("Cannot find build script in package.json, please add it and run `capgo init` again"),process.exit()),(0,p.execSync)("npm run build && npx cap sync",_),e.stop("Build & Sync Done ✅"),yield x(A,a,7)}const O=yield l.confirm({message:`Automatic upload ${o} bundle to Capgo?`});if(yield w(O,A,a),O){const n=l.spinner();n.start("Running: npx @capgo/cli@latest bundle upload"),(yield(0,y.uploadBundle)(o,{channel:k,apikey:e},!1))?n.stop("Upload Done ✅"):(n.stop("Upload failed ❌"),process.exit()),yield x(A,a,8)}const E=yield l.confirm({message:"Verify update work in device now ?"});if(yield w(E,A,a),E){const e=yield l.select({message:"Pick a platform to run your app",options:[{value:"ios",label:"IOS"},{value:"android",label:"Android"}]});l.isCancel(e)&&process.exit();const o=e,n=l.spinner();n.start(`Running: npx cap open ${o}`),yield(0,p.execSync)(`npx cap open ${o}`),n.stop("Started Done ✅\nOpen your device and wait for update"),yield x(A,a,9)}yield x(A,a,0),l.outro("Welcome onboard ✈️!");const K=(0,h.convertAppName)(o);console.log(`Your Capgo update system is setup, check logs in https://web.capgo.app/app/p/${K}/logs`),process.exit()}))},2285:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.createKeyCommand=o.createKey=o.saveKeyCommand=o.saveKey=void 0;const i=n(7304),a=n(7147),r=n(7778),s=n(6213),c=n(7246),p=n(484);o.saveKey=(e,o=!0)=>t(void 0,void 0,void 0,(function*(){(0,a.existsSync)(".git")||i.program.error("To use local you should be in a git repository");const n=yield(0,c.getConfig)(),{extConfig:t}=n.app,s=e.key||c.baseKey;let p=e.keyData||"";if((0,a.existsSync)(s)||p)(0,a.existsSync)(s)&&(p=(0,a.readFileSync)(s).toString());else{if(!o)return!1;i.program.error(`Cannot find public key ${s} or as keyData option or in ${n.app.extConfigFilePath}`)}return t&&(t.plugins||(t.plugins={}),t.plugins.CapacitorUpdater||(t.plugins.CapacitorUpdater={}),t.plugins.CapacitorUpdater.privateKey=p,(0,r.writeConfig)(t,n.app.extConfigFilePath)),o&&(console.log(`private key saved into ${n.app.extConfigFilePath} file in local directory`),console.log("your app will decode the zip archive with this key\n")),!0})),o.saveKeyCommand=e=>t(void 0,void 0,void 0,(function*(){yield(0,p.checkLatest)(),yield(0,o.saveKey)(e)})),o.createKey=(e,o=!0)=>t(void 0,void 0,void 0,(function*(){(0,a.existsSync)(".git")||i.program.error("To use local you should be in a git repository");const{publicKey:n,privateKey:t}=(0,s.createRSA)();if((0,a.existsSync)(c.baseKeyPub)&&!e.force){if(!o)return!1;i.program.error("Public Key already exists, use --force to overwrite")}if((0,a.writeFileSync)(c.baseKeyPub,n),(0,a.existsSync)(c.baseKey)&&!e.force){if(!o)return!1;i.program.error("Private Key already exists, use --force to overwrite")}(0,a.writeFileSync)(c.baseKey,t);const p=yield(0,c.getConfig)(),{extConfig:l}=p.app;return l&&(l.plugins||(l.plugins={}),l.plugins.CapacitorUpdater||(l.plugins.CapacitorUpdater={}),l.plugins.CapacitorUpdater.privateKey=t,(0,r.writeConfig)(l,p.app.extConfigFilePath)),o&&(console.log("Your RSA key has been generated\n"),console.log(`public key saved into ${c.baseKeyPub} file in local directory\n`),console.log("This key will be use to encode AES key used to crypt your zipped bundle before sending it to Capgo,\n than make them unreadable by Capgo and unmodifiable by anyone\n"),console.log(`Private key saved into ${p.app.extConfigFilePath} file in local directory`),console.log("Your app will decode with this RSA key the AES key and use it to decode the zipped bundle\n")),!0})),o.createKeyCommand=e=>t(void 0,void 0,void 0,(function*(){yield(0,p.checkLatest)(),yield(0,o.createKey)(e)}))},8640:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))};Object.defineProperty(o,"__esModule",{value:!0}),o.loginCommand=o.login=void 0;const i=n(7304),a=n(7147),r=n(2037),s=n(7246),c=n(484);o.login=(e,o,n=!0)=>t(void 0,void 0,void 0,(function*(){if(!e)return n&&i.program.error("Missing API key, you need to provide a API key to upload your bundle"),!1;yield(0,c.checkLatest)();try{const{local:n}=o,t=(0,s.useLogSnag)();if(n)(0,a.existsSync)(".git")||i.program.error("To use local you should be in a git repository"),(0,a.writeFileSync)(".capgo",`${e}\n`),(0,a.appendFileSync)(".gitignore",".capgo\n");else{const o=(0,r.homedir)();(0,a.writeFileSync)(`${o}/.capgo`,`${e}\n`)}const c=(0,s.createSupabaseClient)(e),p=yield(0,s.verifyUser)(c,e,["write","all","upload"]);yield t.publish({channel:"user-login",event:"User CLI login",icon:"✅",tags:{"user-id":p},notify:!1}).catch(),console.log(`login saved into .capgo file in ${n?"local":"home"} directory`)}catch(e){console.error(e),process.exit(1)}return n&&(console.log("Done ✅"),process.exit()),!0})),o.loginCommand=(e,n)=>t(void 0,void 0,void 0,(function*(){(0,o.login)(e,n,!0)}))},7246:function(e,o,n){var t=this&&this.__awaiter||function(e,o,n,t){return new(n||(n=Promise))((function(i,a){function r(e){try{c(t.next(e))}catch(e){a(e)}}function s(e){try{c(t.throw(e))}catch(e){a(e)}}function c(e){var o;e.done?i(e.value):(o=e.value,o instanceof n?o:new n((function(e){e(o)}))).then(r,s)}c((t=t.apply(e,o||[])).next())}))},i=this&&this.__await||function(e){return this instanceof i?(this.v=e,this):new i(e)},a=this&&this.__asyncValues||function(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o,n=e[Symbol.asyncIterator];return n?n.call(e):(e="function"==typeof __values?__values(e):e[Symbol.iterator](),o={},t("next"),t("throw"),t("return"),o[Symbol.asyncIterator]=function(){return this},o);function t(n){o[n]=e[n]&&function(o){return new Promise((function(t,i){!function(e,o,n,t){Promise.resolve(t).then((function(o){e({value:o,done:n})}),o)}(t,i,(o=e[n](o)).done,o.value)}))}}},r=this&&this.__asyncDelegator||function(e){var o,n;return o={},t("next"),t("throw",(function(e){throw e})),t("return"),o[Symbol.iterator]=function(){return this},o;function t(t,a){o[t]=e[t]?function(o){return(n=!n)?{value:i(e[t](o)),done:"return"===t}:a?a(o):o}:a}},s=this&&this.__asyncGenerator||function(e,o,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,a=n.apply(e,o||[]),r=[];return t={},s("next"),s("throw"),s("return"),t[Symbol.asyncIterator]=function(){return this},t;function s(e){a[e]&&(t[e]=function(o){return new Promise((function(n,t){r.push([e,o,n,t])>1||c(e,o)}))})}function c(e,o){try{(n=a[e](o)).value instanceof i?Promise.resolve(n.value.v).then(p,l):d(r[0][2],n)}catch(e){d(r[0][3],e)}var n}function p(e){c("next",e)}function l(e){c("throw",e)}function d(e,o){e(o),r.shift(),r.length&&c(r[0][0],r[0][1])}},c=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(o,"__esModule",{value:!0}),o.getHumanDate=o.verifyUser=o.convertAppName=o.useLogSnag=o.updateOrCreateChannel=o.updateOrCreateVersion=o.getConfig=o.formatError=o.findMainFile=o.findSavedKey=o.checkPlanValid=o.isAllowedAction=o.isTrial=o.isPaying=o.isGoodPlan=o.checkKey=o.regexSemver=o.createSupabaseClient=o.supaAnon=o.hostSupa=o.hostWeb=o.host=o.baseKeyPub=o.baseKey=void 0;const p=n(7778),l=n(7304),d=n(2885),u=c(n(9867)),y=n(7147),f=n(2037),g=n(1133),v=n(1017),h=c(n(6634));function m(e){return s(this,arguments,(function*(){const o=yield i((0,y.readdirSync)(e,{withFileTypes:!0}));for(const n of o){const o=(0,v.resolve)(e,n.name);!n.isDirectory()||n.name.startsWith(".")||n.name.startsWith("node_modules")||n.name.startsWith("dist")?yield yield i(o):yield i(yield*r(a(m(o))))}}))}o.baseKey=".capgo_key",o.baseKeyPub=`${o.baseKey}.pub`,o.host="https://capgo.app",o.hostWeb="https://web.capgo.app",o.hostSupa="https://xvwzpoazmxkqosrdewyv.supabase.co",o.supaAnon="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYzNzgwNTAwOSwiZXhwIjoxOTUzMzgxMDA5fQ.8tgID1d4jodPwuo_fz4KHN4o1XKB9fnqyt0_GaJSj-w",o.createSupabaseClient=e=>(0,d.createClient)(o.hostSupa,o.supaAnon,{global:{headers:{capgkey:e}}}),o.regexSemver=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/,o.checkKey=(e,n,i)=>t(void 0,void 0,void 0,(function*(){const{data:t,error:a}=yield e.rpc("is_allowed_capgkey",{apikey:n,keymode:i}).single();t&&!a||l.program.error(`Invalid API key or insufficient permissions ${(0,o.formatError)(a)}`)})),o.isGoodPlan=(e,o)=>t(void 0,void 0,void 0,(function*(){const{data:n,error:t}=yield e.rpc("is_good_plan_v3",{userid:o}).single();if(t)throw t;return n||!1})),o.isPaying=(e,o)=>t(void 0,void 0,void 0,(function*(){const{data:n,error:t}=yield e.rpc("is_paying",{userid:o}).single();if(t)throw t;return n||!1})),o.isTrial=(e,o)=>t(void 0,void 0,void 0,(function*(){const{data:n,error:t}=yield e.rpc("is_trial",{userid:o}).single();if(t)throw t;return n||0})),o.isAllowedAction=(e,o)=>t(void 0,void 0,void 0,(function*(){const{data:n,error:t}=yield e.rpc("is_allowed_action_user",{userid:o}).single();if(t)throw t;return n})),o.checkPlanValid=(e,n,i=!0)=>t(void 0,void 0,void 0,(function*(){(yield(0,o.isAllowedAction)(e,n))||(console.error(`You need to upgrade your plan to continue to use capgo.\n Upgrade here: ${o.hostWeb}/dashboard/settings/plans\n`),setTimeout((()=>{(0,h.default)(`${o.hostWeb}/dashboard/settings/plans`),l.program.error("")}),1e3));const t=yield(0,o.isTrial)(e,n);t>0&&i&&console.log(`WARNING !!\nTrial expires in ${t} days, upgrade here: ${o.hostWeb}/dashboard/settings/plans\n`)})),o.findSavedKey=()=>{let e,o=`${(0,f.homedir)()}/.capgo`;return(0,y.existsSync)(o)&&(console.log(`Use global apy key ${o}`),e=(0,y.readFileSync)(o,"utf8").trim()),o=".capgo",!e&&(0,y.existsSync)(o)&&(console.log(`Use local apy key ${o}`),e=(0,y.readFileSync)(o,"utf8").trim()),e||l.program.error("Key not found, please login first"),e},o.findMainFile=()=>t(void 0,void 0,void 0,(function*(){var e,o,n,t;const i=/(main|index)\.(ts|js)$/;let r="";const s=process.cwd(),c=s.split("/").length;try{for(var p,l=!0,d=a(m(s));!(e=(p=yield d.next()).done);){t=p.value,l=!1;try{const e=t;if(e.split("/").length-c<=2&&i.test(e)){r=e,console.log("Found main file here",e);break}}finally{l=!0}}}catch(e){o={error:e}}finally{try{l||e||!(n=d.return)||(yield n.call(d))}finally{if(o)throw o.error}}return r})),o.formatError=e=>e?`\n${u.default.render(e)}`:"",o.getConfig=()=>t(void 0,void 0,void 0,(function*(){let e;try{e=yield(0,p.loadConfig)()}catch(e){l.program.error("No capacitor config file found, run `cap init` first")}return e})),o.updateOrCreateVersion=(e,o,n)=>t(void 0,void 0,void 0,(function*(){const{data:t,error:i}=yield e.rpc("exist_app_versions",{appid:o.app_id,name_version:o.name,apikey:n}).single();return t&&!i?(o.deleted=!1,e.from("app_versions").update(o).eq("app_id",o.app_id).eq("name",o.name)):e.from("app_versions").insert(o).single()})),o.updateOrCreateChannel=(e,o,n)=>t(void 0,void 0,void 0,(function*(){if(!o.app_id||!o.name||!o.created_by)return console.error("missing app_id, name, or created_by"),Promise.reject(new Error("missing app_id, name, or created_by"));const{data:t,error:i}=yield e.rpc("exist_channel",{appid:o.app_id,name_channel:o.name,apikey:n}).single();return t&&!i?e.from("channels").update(o).eq("app_id",o.app_id).eq("name",o.name).eq("created_by",o.created_by).single():e.from("channels").insert(o).select().single()})),o.useLogSnag=()=>new g.LogSnag({token:"c124f5e9d0ce5bdd14bbb48f815d5583",project:"capgo"}),o.convertAppName=e=>e.replace(/\./g,"--"),o.verifyUser=(e,n,i=["all"])=>t(void 0,void 0,void 0,(function*(){yield(0,o.checkKey)(e,n,i);const{data:t,error:a}=yield e.rpc("get_user_id",{apikey:n}).single(),r=t?t.toString():"";return r&&!a||l.program.error(`Cannot verify user ${(0,o.formatError)(a)}`),r})),o.getHumanDate=e=>new Date(e||"").toLocaleString()},7778:e=>{e.exports=require("@capacitor/cli/dist/config")},6301:e=>{e.exports=require("@capgo/find-package-manager")},552:e=>{e.exports=require("@clack/prompts")},2885:e=>{e.exports=require("@supabase/supabase-js")},5906:e=>{e.exports=require("@tomasklaen/checksum")},7176:e=>{e.exports=require("@trufflesuite/spinnies")},3844:e=>{e.exports=require("adm-zip")},295:e=>{e.exports=require("cli-progress")},7304:e=>{e.exports=require("commander")},3847:e=>{e.exports=require("console-table-printer")},4470:e=>{e.exports=require("fs-extra")},5362:e=>{e.exports=require("get-latest-version")},1133:e=>{e.exports=require("logsnag")},9011:e=>{e.exports=require("mime")},6634:e=>{e.exports=require("open")},9867:e=>{e.exports=require("prettyjson")},1616:e=>{e.exports=require("prompt-sync")},1505:e=>{e.exports=require("semver/preload")},2081:e=>{e.exports=require("child_process")},6113:e=>{e.exports=require("crypto")},7147:e=>{e.exports=require("fs")},2037:e=>{e.exports=require("os")},1017:e=>{e.exports=require("path")},4147:e=>{e.exports=JSON.parse('{"name":"@capgo/cli","version":"3.6.4","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"},"engines":{"npm":">=7.0.0","node":">=16.0.0"},"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","test":"npx --yes ts-node -T src/index.ts","build":"npx --yes webpack --config webpack.config.js","dev-build":"SUPA_DB=development npx webpack --config webpack.config.js","pack":"pkg","types":"npx --yes supabase gen types typescript --project-id=xvwzpoazmxkqosrdewyv > src/types/supabase.types.ts","test_rls":"ts-node ./test/test_headers_rls.ts","lint":"eslint . --ext .ts --fix"},"author":"github.com/riderx","license":"Apache 2.0","dependencies":{"@capacitor/cli":"4.7.0","@capgo/find-package-manager":"^0.0.7","@clack/prompts":"^0.6.3","@supabase/supabase-js":"^2.10.0","@tomasklaen/checksum":"^1.1.0","@trufflesuite/spinnies":"^0.1.1","adm-zip":"^0.5.10","cli-progress":"3.12.0","commander":"10.0.0","console-table-printer":"^2.11.1","fs-extra":"11.1.0","get-latest-version":"^5.0.1","logsnag":"^0.1.6","mime":"^3.0.0","open":"^8.4.2","prettyjson":"^1.2.5","prompt-sync":"^4.2.0","semver":"^7.3.8"},"devDependencies":{"@types/adm-zip":"0.5.0","@types/cli-progress":"^3.11.0","@types/fs-extra":"^11.0.1","@types/mime":"^3.0.1","@types/node":"^18.14.6","@types/open":"^6.2.1","@types/prettyjson":"^0.0.30","@types/prompt-sync":"^4.2.0","@types/semver":"^7.3.13","@typescript-eslint/eslint-plugin":"5.54.0","@typescript-eslint/parser":"5.54.0","eslint":"8.35.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.7.0","eslint-import-resolver-typescript":"3.5.3","eslint-plugin-import":"2.27.5","eslint-plugin-prettier":"^4.2.1","git-format-staged":"3.0.0","husky":"^8.0.3","nodemon":"2.0.21","pkg":"5.8.0","prettier":"2.8.4","ts-loader":"^9.4.2","ts-node":"^10.9.1","tsconfig-paths":"4.1.2","typescript":"4.9.5","webpack":"5.75.0","webpack-cli":"^5.0.1","webpack-node-externals":"^3.0.0"}}')}},o={};!function n(t){var i=o[t];if(void 0!==i)return i.exports;var a=o[t]={exports:{}};return e[t].call(a.exports,a,a.exports,n),a.exports}(1714)})();
|
package/package.json
CHANGED
package/src/app/add.ts
CHANGED
|
@@ -42,7 +42,9 @@ export const addApp = async (appId: string, options: Options, shouldExit = true)
|
|
|
42
42
|
if (!icon || !name) {
|
|
43
43
|
program.error("Missing argument, you need to provide a appId and a name, or be in a capacitor project");
|
|
44
44
|
}
|
|
45
|
-
|
|
45
|
+
if (shouldExit) {
|
|
46
|
+
console.log(`Adding ${appId} to Capgo`);
|
|
47
|
+
}
|
|
46
48
|
let iconBuff;
|
|
47
49
|
let iconType;
|
|
48
50
|
|
package/src/init.ts
CHANGED
|
@@ -2,6 +2,9 @@ import { writeFileSync, readFileSync } from 'fs';
|
|
|
2
2
|
import { findPackageManagerType } from '@capgo/find-package-manager'
|
|
3
3
|
import { execSync, ExecSyncOptions } from 'child_process';
|
|
4
4
|
import * as p from '@clack/prompts';
|
|
5
|
+
import { SupabaseClient } from '@supabase/supabase-js';
|
|
6
|
+
import { Database } from 'types/supabase.types';
|
|
7
|
+
import LogSnag from 'logsnag';
|
|
5
8
|
import { createKey } from './key';
|
|
6
9
|
import { addChannel } from './channel/add';
|
|
7
10
|
import { uploadBundle } from './bundle/upload';
|
|
@@ -9,7 +12,7 @@ import { login } from './login';
|
|
|
9
12
|
import { addApp } from './app/add';
|
|
10
13
|
import { checkLatest } from './api/update';
|
|
11
14
|
import { Options } from './api/app';
|
|
12
|
-
import { findMainFile, getConfig } from './utils';
|
|
15
|
+
import { convertAppName, createSupabaseClient, findMainFile, findSavedKey, getConfig, useLogSnag, verifyUser } from './utils';
|
|
13
16
|
|
|
14
17
|
interface SuperOptions extends Options {
|
|
15
18
|
local: boolean;
|
|
@@ -21,8 +24,58 @@ const regexImport = /import.*from.*/g
|
|
|
21
24
|
const defaultChannel = 'production'
|
|
22
25
|
const execOption = { stdio: 'pipe' }
|
|
23
26
|
|
|
27
|
+
const cancelCommand = async (command: boolean | symbol, userId: string, snag: LogSnag) => {
|
|
28
|
+
if (p.isCancel(command)) {
|
|
29
|
+
await snag.publish({
|
|
30
|
+
channel: 'onboarding-v2',
|
|
31
|
+
event: 'canceled',
|
|
32
|
+
icon: '🤷',
|
|
33
|
+
tags: {
|
|
34
|
+
'user-id': userId,
|
|
35
|
+
},
|
|
36
|
+
notify: false,
|
|
37
|
+
}).catch()
|
|
38
|
+
process.exit()
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const markStep = async (userId: string, snag: LogSnag, step: number) => {
|
|
43
|
+
await snag.publish({
|
|
44
|
+
channel: 'onboarding-v2',
|
|
45
|
+
event: step ? `step-${step}` : 'done',
|
|
46
|
+
icon: '✅',
|
|
47
|
+
tags: {
|
|
48
|
+
'user-id': userId,
|
|
49
|
+
},
|
|
50
|
+
notify: false,
|
|
51
|
+
}).catch()
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const waitLog = (supabase: SupabaseClient<Database>, appId: string) =>
|
|
55
|
+
new Promise<Database['public']['Tables']['stats']['Row']>((resolve) => {
|
|
56
|
+
console.log('wait log', appId)
|
|
57
|
+
const listener = supabase
|
|
58
|
+
.channel('table-db-changes')
|
|
59
|
+
.on(
|
|
60
|
+
'postgres_changes',
|
|
61
|
+
{
|
|
62
|
+
event: 'INSERT',
|
|
63
|
+
schema: 'public',
|
|
64
|
+
table: 'stats',
|
|
65
|
+
filter: `app_id=eq.${appId}`,
|
|
66
|
+
},
|
|
67
|
+
(payload) => {
|
|
68
|
+
console.log('payload', payload)
|
|
69
|
+
listener.unsubscribe()
|
|
70
|
+
resolve(payload.new as Database['public']['Tables']['stats']['Row'])
|
|
71
|
+
},
|
|
72
|
+
)
|
|
73
|
+
.subscribe()
|
|
74
|
+
})
|
|
75
|
+
|
|
24
76
|
export const initApp = async (apikey: string, appId: string, options: SuperOptions) => {
|
|
25
77
|
await checkLatest();
|
|
78
|
+
const snag = useLogSnag()
|
|
26
79
|
const config = await getConfig();
|
|
27
80
|
appId = appId || config?.app?.appId
|
|
28
81
|
|
|
@@ -36,11 +89,12 @@ export const initApp = async (apikey: string, appId: string, options: SuperOptio
|
|
|
36
89
|
} else {
|
|
37
90
|
log.stop('Login Done ✅');
|
|
38
91
|
}
|
|
92
|
+
const supabase = createSupabaseClient(apikey || findSavedKey())
|
|
93
|
+
const userId = await verifyUser(supabase, apikey, ['upload']);
|
|
94
|
+
await markStep(userId, snag, 1)
|
|
39
95
|
|
|
40
96
|
const doAdd = await p.confirm({ message: `Add ${appId} in Capgo?` });
|
|
41
|
-
|
|
42
|
-
process.exit()
|
|
43
|
-
}
|
|
97
|
+
await cancelCommand(doAdd, userId, snag);
|
|
44
98
|
if (doAdd) {
|
|
45
99
|
const s = p.spinner();
|
|
46
100
|
s.start(`Running: npx @capgo/cli@latest app add ${appId}`);
|
|
@@ -50,12 +104,11 @@ export const initApp = async (apikey: string, appId: string, options: SuperOptio
|
|
|
50
104
|
} else {
|
|
51
105
|
s.stop(`App add Done ✅`);
|
|
52
106
|
}
|
|
107
|
+
await markStep(userId, snag, 2)
|
|
53
108
|
}
|
|
54
109
|
|
|
55
|
-
const doChannel = await p.confirm({ message: `Create channel ${defaultChannel} in Capgo?` });
|
|
56
|
-
|
|
57
|
-
process.exit()
|
|
58
|
-
}
|
|
110
|
+
const doChannel = await p.confirm({ message: `Create default channel ${defaultChannel} for ${appId} in Capgo?` });
|
|
111
|
+
await cancelCommand(doChannel, userId, snag);
|
|
59
112
|
if (doChannel) {
|
|
60
113
|
const s = p.spinner();
|
|
61
114
|
// create production channel public
|
|
@@ -69,15 +122,14 @@ export const initApp = async (apikey: string, appId: string, options: SuperOptio
|
|
|
69
122
|
} else {
|
|
70
123
|
s.stop(`Channel add Done ✅`);
|
|
71
124
|
}
|
|
125
|
+
await markStep(userId, snag, 3)
|
|
72
126
|
}
|
|
73
127
|
|
|
74
|
-
const doInstall = await p.confirm({ message: `
|
|
75
|
-
|
|
76
|
-
process.exit()
|
|
77
|
-
}
|
|
128
|
+
const doInstall = await p.confirm({ message: `Automatic Install "@capgo/capacitor-updater" in ${appId}?` });
|
|
129
|
+
await cancelCommand(doInstall, userId, snag);
|
|
78
130
|
if (doInstall) {
|
|
79
131
|
const s = p.spinner();
|
|
80
|
-
s.start(`Checking if capgo is installed`);
|
|
132
|
+
s.start(`Checking if @capgo/capacitor-updater is installed`);
|
|
81
133
|
const pack = JSON.parse(readFileSync('package.json').toString());
|
|
82
134
|
const pm = findPackageManagerType();
|
|
83
135
|
if (pm === 'unknown') {
|
|
@@ -95,12 +147,11 @@ export const initApp = async (apikey: string, appId: string, options: SuperOptio
|
|
|
95
147
|
await execSync(`${pm} ${installCmd} @capgo/capacitor-updater@latest`, execOption as ExecSyncOptions)
|
|
96
148
|
s.stop(`Install Done ✅`);
|
|
97
149
|
}
|
|
150
|
+
await markStep(userId, snag, 4)
|
|
98
151
|
}
|
|
99
152
|
|
|
100
|
-
const doAddCode = await p.confirm({ message: `Add
|
|
101
|
-
|
|
102
|
-
process.exit()
|
|
103
|
-
}
|
|
153
|
+
const doAddCode = await p.confirm({ message: `Automatic Add "${codeInject}" code and import in ${appId}?` });
|
|
154
|
+
await cancelCommand(doAddCode, userId, snag);
|
|
104
155
|
if (doAddCode) {
|
|
105
156
|
const s = p.spinner();
|
|
106
157
|
s.start(`Adding @capacitor-updater to your main file`);
|
|
@@ -127,12 +178,11 @@ export const initApp = async (apikey: string, appId: string, options: SuperOptio
|
|
|
127
178
|
writeFileSync(mainFilePath, newMainFileContent);
|
|
128
179
|
s.stop(`Code added to ${mainFilePath} ✅`);
|
|
129
180
|
}
|
|
181
|
+
await markStep(userId, snag, 5)
|
|
130
182
|
}
|
|
131
183
|
|
|
132
|
-
const doEncrypt = await p.confirm({ message:
|
|
133
|
-
|
|
134
|
-
process.exit()
|
|
135
|
-
}
|
|
184
|
+
const doEncrypt = await p.confirm({ message: `Automatic configure end-to-end encryption in ${appId} updates?` });
|
|
185
|
+
await cancelCommand(doEncrypt, userId, snag);
|
|
136
186
|
if (doEncrypt) {
|
|
137
187
|
const s = p.spinner();
|
|
138
188
|
s.start(`Running: npx @capgo/cli@latest key create`);
|
|
@@ -143,11 +193,10 @@ export const initApp = async (apikey: string, appId: string, options: SuperOptio
|
|
|
143
193
|
} else {
|
|
144
194
|
s.stop(`key created 🔑`);
|
|
145
195
|
}
|
|
196
|
+
await markStep(userId, snag, 6)
|
|
146
197
|
}
|
|
147
|
-
const doBuild = await p.confirm({ message:
|
|
148
|
-
|
|
149
|
-
process.exit()
|
|
150
|
-
}
|
|
198
|
+
const doBuild = await p.confirm({ message: `Automatic build ${appId} with "npm run build" ?` });
|
|
199
|
+
await cancelCommand(doBuild, userId, snag);
|
|
151
200
|
if (doBuild) {
|
|
152
201
|
const s = p.spinner();
|
|
153
202
|
s.start(`Running: npm run build && npx cap sync`);
|
|
@@ -159,12 +208,11 @@ export const initApp = async (apikey: string, appId: string, options: SuperOptio
|
|
|
159
208
|
}
|
|
160
209
|
execSync(`npm run build && npx cap sync`, execOption as ExecSyncOptions)
|
|
161
210
|
s.stop(`Build & Sync Done ✅`);
|
|
211
|
+
await markStep(userId, snag, 7)
|
|
162
212
|
}
|
|
163
213
|
|
|
164
|
-
const doBundle = await p.confirm({ message:
|
|
165
|
-
|
|
166
|
-
process.exit()
|
|
167
|
-
}
|
|
214
|
+
const doBundle = await p.confirm({ message: `Automatic upload ${appId} bundle to Capgo?` });
|
|
215
|
+
await cancelCommand(doBundle, userId, snag);
|
|
168
216
|
if (doBundle) {
|
|
169
217
|
const s = p.spinner();
|
|
170
218
|
s.start(`Running: npx @capgo/cli@latest bundle upload`);
|
|
@@ -178,10 +226,44 @@ export const initApp = async (apikey: string, appId: string, options: SuperOptio
|
|
|
178
226
|
} else {
|
|
179
227
|
s.stop(`Upload Done ✅`);
|
|
180
228
|
}
|
|
229
|
+
await markStep(userId, snag, 8)
|
|
230
|
+
}
|
|
231
|
+
const doRun = await p.confirm({ message: `Verify update work in device now ?` });
|
|
232
|
+
await cancelCommand(doRun, userId, snag);
|
|
233
|
+
if (doRun) {
|
|
234
|
+
const plaformType = await p.select({
|
|
235
|
+
message: 'Pick a platform to run your app',
|
|
236
|
+
options: [
|
|
237
|
+
{ value: 'ios', label: 'IOS' },
|
|
238
|
+
{ value: 'android', label: 'Android' },
|
|
239
|
+
],
|
|
240
|
+
});
|
|
241
|
+
if (p.isCancel(plaformType)) {
|
|
242
|
+
process.exit()
|
|
243
|
+
}
|
|
244
|
+
const platform = plaformType as 'ios' | 'android'
|
|
245
|
+
const s = p.spinner();
|
|
246
|
+
s.start(`Running: npx cap open ${platform}`);
|
|
247
|
+
await execSync(`npx cap open ${platform}`)
|
|
248
|
+
s.stop(`Started Done ✅\nOpen your device and wait for update`);
|
|
249
|
+
// const s2 = p.spinner();
|
|
250
|
+
// s2.start(`Wait logs send to Capgo from ${appId}`);
|
|
251
|
+
// let loop = true;
|
|
252
|
+
// while (loop) {
|
|
253
|
+
// console.log('waiting for logs')
|
|
254
|
+
// const res = await waitLog(supabase, appId);
|
|
255
|
+
// if (res.action === 'get') {
|
|
256
|
+
// s2.stop(`Logs received your device received his update ✅`);
|
|
257
|
+
// loop = false;
|
|
258
|
+
// } else {
|
|
259
|
+
// console.log('received ', res.action)
|
|
260
|
+
// }
|
|
261
|
+
// }
|
|
262
|
+
await markStep(userId, snag, 9)
|
|
181
263
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
const appIdUrl = appId
|
|
185
|
-
console.log(`
|
|
264
|
+
await markStep(userId, snag, 0)
|
|
265
|
+
p.outro(`Welcome onboard ✈️!`);
|
|
266
|
+
const appIdUrl = convertAppName(appId)
|
|
267
|
+
console.log(`Your Capgo update system is setup, check logs in https://web.capgo.app/app/p/${appIdUrl}/logs`)
|
|
186
268
|
process.exit()
|
|
187
269
|
}
|