@capgo/cli 4.0.12 → 4.0.13
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 +8 -0
- package/bun.lockb +0 -0
- package/capacitor.config.ts +2 -2
- package/dist/index.js +650 -654
- package/eslint.config.js +3 -0
- package/package.json +3 -2
- package/src/api/app.ts +29 -36
- package/src/api/channels.ts +53 -49
- package/src/api/crypto.ts +83 -80
- package/src/api/devices_override.ts +12 -13
- package/src/api/update.ts +10 -10
- package/src/api/versions.ts +43 -42
- package/src/app/add.ts +61 -53
- package/src/app/debug.ts +153 -151
- package/src/app/delete.ts +61 -59
- package/src/app/info.ts +74 -77
- package/src/app/list.ts +33 -31
- package/src/app/set.ts +85 -82
- package/src/bundle/check.ts +30 -32
- package/src/bundle/cleanup.ts +71 -74
- package/src/bundle/compatibility.ts +52 -55
- package/src/bundle/decrypt.ts +21 -19
- package/src/bundle/delete.ts +27 -25
- package/src/bundle/encrypt.ts +23 -21
- package/src/bundle/list.ts +42 -40
- package/src/bundle/unlink.ts +69 -60
- package/src/bundle/upload.ts +170 -149
- package/src/bundle/zip.ts +122 -118
- package/src/channel/add.ts +62 -60
- package/src/channel/currentBundle.ts +56 -56
- package/src/channel/delete.ts +46 -43
- package/src/channel/list.ts +23 -21
- package/src/channel/set.ts +76 -68
- package/src/index.ts +55 -57
- package/src/init.ts +254 -252
- package/src/key.ts +56 -52
- package/src/login.ts +30 -28
- package/src/types/capacitor__cli.d.ts +2 -3
- package/src/types/supabase.types.ts +505 -505
- package/src/utils.ts +560 -571
- package/.eslintrc +0 -71
package/src/channel/list.ts
CHANGED
|
@@ -1,37 +1,39 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import process from 'node:process'
|
|
2
|
+
import { program } from 'commander'
|
|
3
|
+
import * as p from '@clack/prompts'
|
|
4
|
+
import { checkAppExistsAndHasPermissionErr } from '../api/app'
|
|
5
|
+
import { displayChannels, getActiveChannels } from '../api/channels'
|
|
6
|
+
import type { OptionsBase } from '../utils'
|
|
7
|
+
import { createSupabaseClient, findSavedKey, getConfig, useLogSnag, verifyUser } from '../utils'
|
|
8
|
+
|
|
9
|
+
export async function listChannels(appId: string, options: OptionsBase) {
|
|
10
|
+
p.intro(`List channels`)
|
|
9
11
|
options.apikey = options.apikey || findSavedKey()
|
|
10
|
-
const config = await getConfig()
|
|
12
|
+
const config = await getConfig()
|
|
11
13
|
appId = appId || config?.app?.appId
|
|
12
14
|
const snag = useLogSnag()
|
|
13
15
|
|
|
14
|
-
if (!options.apikey)
|
|
15
|
-
p.log.error(
|
|
16
|
-
|
|
16
|
+
if (!options.apikey)
|
|
17
|
+
p.log.error('Missing API key, you need to provide a API key to upload your bundle')
|
|
18
|
+
|
|
17
19
|
if (!appId) {
|
|
18
|
-
p.log.error(
|
|
19
|
-
program.error('')
|
|
20
|
+
p.log.error('Missing argument, you need to provide a appId, or be in a capacitor project')
|
|
21
|
+
program.error('')
|
|
20
22
|
}
|
|
21
23
|
const supabase = await createSupabaseClient(options.apikey)
|
|
22
24
|
|
|
23
|
-
const userId = await verifyUser(supabase, options.apikey, ['write', 'all', 'read', 'upload'])
|
|
25
|
+
const userId = await verifyUser(supabase, options.apikey, ['write', 'all', 'read', 'upload'])
|
|
24
26
|
// Check we have app access to this appId
|
|
25
|
-
await checkAppExistsAndHasPermissionErr(supabase, options.apikey, appId)
|
|
27
|
+
await checkAppExistsAndHasPermissionErr(supabase, options.apikey, appId)
|
|
26
28
|
|
|
27
|
-
p.log.info(`Querying available channels in Capgo`)
|
|
29
|
+
p.log.info(`Querying available channels in Capgo`)
|
|
28
30
|
|
|
29
31
|
// Get all active app versions we might possibly be able to cleanup
|
|
30
|
-
const allVersions = await getActiveChannels(supabase, appId)
|
|
32
|
+
const allVersions = await getActiveChannels(supabase, appId)
|
|
31
33
|
|
|
32
|
-
p.log.info(`Active channels in Capgo: ${allVersions?.length}`)
|
|
34
|
+
p.log.info(`Active channels in Capgo: ${allVersions?.length}`)
|
|
33
35
|
|
|
34
|
-
displayChannels(allVersions)
|
|
36
|
+
displayChannels(allVersions)
|
|
35
37
|
await snag.track({
|
|
36
38
|
channel: 'channel',
|
|
37
39
|
event: 'List channel',
|
|
@@ -42,6 +44,6 @@ export const listChannels = async (appId: string, options: OptionsBase) => {
|
|
|
42
44
|
},
|
|
43
45
|
notify: false,
|
|
44
46
|
}).catch()
|
|
45
|
-
p.outro(`Done ✅`)
|
|
47
|
+
p.outro(`Done ✅`)
|
|
46
48
|
process.exit()
|
|
47
49
|
}
|
package/src/channel/set.ts
CHANGED
|
@@ -1,69 +1,78 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import process from 'node:process'
|
|
2
|
+
import { program } from 'commander'
|
|
3
|
+
import * as p from '@clack/prompts'
|
|
4
|
+
import type { Database } from '../types/supabase.types'
|
|
5
|
+
import { checkAppExistsAndHasPermissionErr } from '../api/app'
|
|
6
|
+
import type {
|
|
6
7
|
OptionsBase,
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
} from '../utils'
|
|
9
|
+
import {
|
|
10
|
+
checkPlanValid,
|
|
11
|
+
createSupabaseClient,
|
|
12
|
+
findSavedKey,
|
|
13
|
+
formatError,
|
|
14
|
+
getConfig,
|
|
15
|
+
updateOrCreateChannel,
|
|
16
|
+
useLogSnag,
|
|
17
|
+
verifyUser,
|
|
18
|
+
} from '../utils'
|
|
10
19
|
|
|
11
20
|
interface Options extends OptionsBase {
|
|
12
|
-
bundle: string
|
|
13
|
-
state?: string
|
|
14
|
-
downgrade?: boolean
|
|
15
|
-
latest?: boolean
|
|
16
|
-
upgrade?: boolean
|
|
17
|
-
ios?: boolean
|
|
18
|
-
android?: boolean
|
|
19
|
-
selfAssign?: boolean
|
|
20
|
-
disableAutoUpdate: string
|
|
21
|
-
channel?: string
|
|
21
|
+
bundle: string
|
|
22
|
+
state?: string
|
|
23
|
+
downgrade?: boolean
|
|
24
|
+
latest?: boolean
|
|
25
|
+
upgrade?: boolean
|
|
26
|
+
ios?: boolean
|
|
27
|
+
android?: boolean
|
|
28
|
+
selfAssign?: boolean
|
|
29
|
+
disableAutoUpdate: string
|
|
30
|
+
channel?: string
|
|
22
31
|
}
|
|
23
32
|
|
|
24
33
|
const disableAutoUpdatesPossibleOptions = ['major', 'minor', 'metadata', 'none']
|
|
25
34
|
|
|
26
|
-
export
|
|
27
|
-
p.intro(`Set channel`)
|
|
35
|
+
export async function setChannel(channel: string, appId: string, options: Options) {
|
|
36
|
+
p.intro(`Set channel`)
|
|
28
37
|
options.apikey = options.apikey || findSavedKey()
|
|
29
|
-
const config = await getConfig()
|
|
38
|
+
const config = await getConfig()
|
|
30
39
|
appId = appId || config?.app?.appId
|
|
31
40
|
const snag = useLogSnag()
|
|
32
41
|
|
|
33
42
|
if (!options.apikey) {
|
|
34
|
-
p.log.error(
|
|
35
|
-
program.error('')
|
|
43
|
+
p.log.error('Missing API key, you need to provide a API key to upload your bundle')
|
|
44
|
+
program.error('')
|
|
36
45
|
}
|
|
37
46
|
if (!appId) {
|
|
38
|
-
p.log.error(
|
|
39
|
-
program.error('')
|
|
47
|
+
p.log.error('Missing argument, you need to provide a appId, or be in a capacitor project')
|
|
48
|
+
program.error('')
|
|
40
49
|
}
|
|
41
50
|
const supabase = await createSupabaseClient(options.apikey)
|
|
42
51
|
|
|
43
|
-
const userId = await verifyUser(supabase, options.apikey, ['write', 'all'])
|
|
52
|
+
const userId = await verifyUser(supabase, options.apikey, ['write', 'all'])
|
|
44
53
|
// Check we have app access to this appId
|
|
45
|
-
await checkAppExistsAndHasPermissionErr(supabase, options.apikey, appId)
|
|
54
|
+
await checkAppExistsAndHasPermissionErr(supabase, options.apikey, appId)
|
|
46
55
|
|
|
47
|
-
const { bundle, latest, downgrade, upgrade, ios, android, selfAssign, state, disableAutoUpdate } = options
|
|
56
|
+
const { bundle, latest, downgrade, upgrade, ios, android, selfAssign, state, disableAutoUpdate } = options
|
|
48
57
|
if (!channel) {
|
|
49
|
-
p.log.error(
|
|
50
|
-
program.error('')
|
|
58
|
+
p.log.error('Missing argument, you need to provide a channel')
|
|
59
|
+
program.error('')
|
|
51
60
|
}
|
|
52
61
|
if (latest && bundle) {
|
|
53
|
-
p.log.error(
|
|
54
|
-
program.error('')
|
|
62
|
+
p.log.error('Cannot set latest and bundle at the same time')
|
|
63
|
+
program.error('')
|
|
55
64
|
}
|
|
56
|
-
if (bundle == null
|
|
57
|
-
state == null
|
|
58
|
-
latest == null
|
|
59
|
-
downgrade == null
|
|
60
|
-
upgrade == null
|
|
61
|
-
ios == null
|
|
62
|
-
android == null
|
|
63
|
-
selfAssign == null
|
|
64
|
-
disableAutoUpdate == null) {
|
|
65
|
-
p.log.error(
|
|
66
|
-
program.error('')
|
|
65
|
+
if (bundle == null
|
|
66
|
+
&& state == null
|
|
67
|
+
&& latest == null
|
|
68
|
+
&& downgrade == null
|
|
69
|
+
&& upgrade == null
|
|
70
|
+
&& ios == null
|
|
71
|
+
&& android == null
|
|
72
|
+
&& selfAssign == null
|
|
73
|
+
&& disableAutoUpdate == null) {
|
|
74
|
+
p.log.error('Missing argument, you need to provide a option to set')
|
|
75
|
+
program.error('')
|
|
67
76
|
}
|
|
68
77
|
try {
|
|
69
78
|
await checkPlanValid(supabase, userId, appId, options.apikey)
|
|
@@ -84,33 +93,33 @@ export const setChannel = async (channel: string, appId: string, options: Option
|
|
|
84
93
|
.eq('deleted', false)
|
|
85
94
|
.single()
|
|
86
95
|
if (vError || !data) {
|
|
87
|
-
p.log.error(`Cannot find version ${bundleVersion}`)
|
|
88
|
-
program.error('')
|
|
96
|
+
p.log.error(`Cannot find version ${bundleVersion}`)
|
|
97
|
+
program.error('')
|
|
89
98
|
}
|
|
90
|
-
p.log.info(`Set ${appId} channel: ${channel} to @${bundleVersion}`)
|
|
99
|
+
p.log.info(`Set ${appId} channel: ${channel} to @${bundleVersion}`)
|
|
91
100
|
channelPayload.version = data.id
|
|
92
101
|
}
|
|
93
102
|
if (state != null) {
|
|
94
|
-
if (state === 'public' || state === 'private')
|
|
95
|
-
p.log.info(`Set ${appId} channel: ${channel} to public or private is deprecated, use default or normal instead`)
|
|
96
|
-
|
|
97
|
-
p.log.info(`Set ${appId} channel: ${channel} to ${state === 'public' || state === 'default' ? 'default' : 'normal'}`)
|
|
103
|
+
if (state === 'public' || state === 'private')
|
|
104
|
+
p.log.info(`Set ${appId} channel: ${channel} to public or private is deprecated, use default or normal instead`)
|
|
105
|
+
|
|
106
|
+
p.log.info(`Set ${appId} channel: ${channel} to ${state === 'public' || state === 'default' ? 'default' : 'normal'}`)
|
|
98
107
|
channelPayload.public = state === 'public' || state === 'default'
|
|
99
108
|
}
|
|
100
109
|
if (downgrade != null) {
|
|
101
|
-
p.log.info(`Set ${appId} channel: ${channel} to ${downgrade ? 'allow' : 'disallow'} downgrade`)
|
|
110
|
+
p.log.info(`Set ${appId} channel: ${channel} to ${downgrade ? 'allow' : 'disallow'} downgrade`)
|
|
102
111
|
channelPayload.disableAutoUpdateUnderNative = !downgrade
|
|
103
112
|
}
|
|
104
113
|
if (ios != null) {
|
|
105
|
-
p.log.info(`Set ${appId} channel: ${channel} to ${ios ? 'allow' : 'disallow'} ios update`)
|
|
114
|
+
p.log.info(`Set ${appId} channel: ${channel} to ${ios ? 'allow' : 'disallow'} ios update`)
|
|
106
115
|
channelPayload.ios = !!ios
|
|
107
116
|
}
|
|
108
117
|
if (android != null) {
|
|
109
|
-
p.log.info(`Set ${appId} channel: ${channel} to ${android ? 'allow' : 'disallow'} android update`)
|
|
118
|
+
p.log.info(`Set ${appId} channel: ${channel} to ${android ? 'allow' : 'disallow'} android update`)
|
|
110
119
|
channelPayload.android = !!android
|
|
111
120
|
}
|
|
112
121
|
if (selfAssign != null) {
|
|
113
|
-
p.log.info(`Set ${appId} channel: ${channel} to ${selfAssign ? 'allow' : 'disallow'} self assign to this channel`)
|
|
122
|
+
p.log.info(`Set ${appId} channel: ${channel} to ${selfAssign ? 'allow' : 'disallow'} self assign to this channel`)
|
|
114
123
|
channelPayload.allow_device_self_set = !!selfAssign
|
|
115
124
|
}
|
|
116
125
|
if (disableAutoUpdate != null) {
|
|
@@ -118,30 +127,28 @@ export const setChannel = async (channel: string, appId: string, options: Option
|
|
|
118
127
|
|
|
119
128
|
// The user passed an unimplemented strategy
|
|
120
129
|
if (!disableAutoUpdatesPossibleOptions.includes(finalDisableAutoUpdate)) {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
program.error('');
|
|
130
|
+
p.log.error(`Channel strategy ${finalDisableAutoUpdate} is not known. The possible values are: ${disableAutoUpdatesPossibleOptions.join(', ')}.`)
|
|
131
|
+
program.error('')
|
|
124
132
|
}
|
|
125
133
|
|
|
126
134
|
// This metadata is called differently in the database
|
|
127
|
-
if (finalDisableAutoUpdate === 'metadata')
|
|
135
|
+
if (finalDisableAutoUpdate === 'metadata')
|
|
128
136
|
finalDisableAutoUpdate = 'version_number'
|
|
129
|
-
}
|
|
130
137
|
|
|
131
138
|
// This cast is safe, look above
|
|
132
139
|
channelPayload.disableAutoUpdate = finalDisableAutoUpdate as any
|
|
133
|
-
p.log.info(`Set ${appId} channel: ${channel} to ${finalDisableAutoUpdate} disable update strategy to this channel`)
|
|
140
|
+
p.log.info(`Set ${appId} channel: ${channel} to ${finalDisableAutoUpdate} disable update strategy to this channel`)
|
|
134
141
|
}
|
|
135
142
|
try {
|
|
136
143
|
const { error: dbError } = await updateOrCreateChannel(supabase, channelPayload)
|
|
137
144
|
if (dbError) {
|
|
138
|
-
p.log.error(`Cannot set channel the upload key is not allowed to do that, use the "all" for this.`)
|
|
139
|
-
program.error('')
|
|
145
|
+
p.log.error(`Cannot set channel the upload key is not allowed to do that, use the "all" for this.`)
|
|
146
|
+
program.error('')
|
|
140
147
|
}
|
|
141
148
|
}
|
|
142
149
|
catch (e) {
|
|
143
|
-
p.log.error(`Cannot set channel the upload key is not allowed to do that, use the "all" for this.`)
|
|
144
|
-
program.error('')
|
|
150
|
+
p.log.error(`Cannot set channel the upload key is not allowed to do that, use the "all" for this.`)
|
|
151
|
+
program.error('')
|
|
145
152
|
}
|
|
146
153
|
await snag.track({
|
|
147
154
|
channel: 'channel',
|
|
@@ -154,10 +161,11 @@ export const setChannel = async (channel: string, appId: string, options: Option
|
|
|
154
161
|
},
|
|
155
162
|
notify: false,
|
|
156
163
|
}).catch()
|
|
157
|
-
} catch (err) {
|
|
158
|
-
p.log.error(`Unknow error ${formatError(err)}`);
|
|
159
|
-
program.error('');
|
|
160
164
|
}
|
|
161
|
-
|
|
165
|
+
catch (err) {
|
|
166
|
+
p.log.error(`Unknow error ${formatError(err)}`)
|
|
167
|
+
program.error('')
|
|
168
|
+
}
|
|
169
|
+
p.outro(`Done ✅`)
|
|
162
170
|
process.exit()
|
|
163
171
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,45 +1,46 @@
|
|
|
1
|
-
import { program } from 'commander'
|
|
2
|
-
import { zipBundle } from './bundle/zip';
|
|
3
|
-
import { initApp } from './init';
|
|
4
|
-
import { listBundle } from './bundle/list';
|
|
5
|
-
import { decryptZip } from './bundle/decrypt';
|
|
6
|
-
import { encryptZip } from './bundle/encrypt';
|
|
7
|
-
import { addCommand } from './app/add';
|
|
8
|
-
import { getInfo } from './app/info';
|
|
9
|
-
import { saveKeyCommand, createKeyCommand } from './key';
|
|
10
|
-
import { deleteBundle } from './bundle/delete';
|
|
11
|
-
import { setChannel } from './channel/set';
|
|
12
|
-
import { currentBundle } from './channel/currentBundle';
|
|
13
|
-
import { uploadCommand, uploadDeprecatedCommand } from './bundle/upload';
|
|
1
|
+
import { program } from 'commander'
|
|
14
2
|
import pack from '../package.json'
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
3
|
+
import { zipBundle } from './bundle/zip'
|
|
4
|
+
import { initApp } from './init'
|
|
5
|
+
import { listBundle } from './bundle/list'
|
|
6
|
+
import { decryptZip } from './bundle/decrypt'
|
|
7
|
+
import { encryptZip } from './bundle/encrypt'
|
|
8
|
+
import { addCommand } from './app/add'
|
|
9
|
+
import { getInfo } from './app/info'
|
|
10
|
+
import { createKeyCommand, saveKeyCommand } from './key'
|
|
11
|
+
import { deleteBundle } from './bundle/delete'
|
|
12
|
+
import { setChannel } from './channel/set'
|
|
13
|
+
import { currentBundle } from './channel/currentBundle'
|
|
14
|
+
import { uploadCommand, uploadDeprecatedCommand } from './bundle/upload'
|
|
15
|
+
import { loginCommand } from './login'
|
|
16
|
+
import { listApp } from './app/list'
|
|
17
|
+
import { cleanupBundle } from './bundle/cleanup'
|
|
18
|
+
import { addChannelCommand } from './channel/add'
|
|
19
|
+
import { deleteChannel } from './channel/delete'
|
|
20
|
+
import { listChannels } from './channel/list'
|
|
21
|
+
import { setApp } from './app/set'
|
|
22
|
+
import { deleteApp } from './app/delete'
|
|
23
|
+
|
|
23
24
|
// import { watchApp } from './app/watch';
|
|
24
|
-
import { debugApp } from './app/debug'
|
|
25
|
-
import { checkCompatibilityCommand } from './bundle/compatibility'
|
|
25
|
+
import { debugApp } from './app/debug'
|
|
26
|
+
import { checkCompatibilityCommand } from './bundle/compatibility'
|
|
26
27
|
|
|
27
28
|
program
|
|
28
29
|
.name(pack.name)
|
|
29
30
|
.description('Manage packages and bundle versions in Capgo Cloud')
|
|
30
|
-
.version(pack.version)
|
|
31
|
+
.version(pack.version)
|
|
31
32
|
|
|
32
33
|
program
|
|
33
34
|
.command('login [apikey]')
|
|
34
35
|
.alias('l')
|
|
35
36
|
.description('Save apikey to your machine or folder')
|
|
36
37
|
.action(loginCommand)
|
|
37
|
-
.option('--local', 'Only save in local folder')
|
|
38
|
+
.option('--local', 'Only save in local folder')
|
|
38
39
|
|
|
39
40
|
program
|
|
40
41
|
.command('doctor')
|
|
41
42
|
.description('Get info about your Capgo app install')
|
|
42
|
-
.action(getInfo)
|
|
43
|
+
.action(getInfo)
|
|
43
44
|
|
|
44
45
|
program
|
|
45
46
|
.command('init [apikey] [appId]')
|
|
@@ -47,11 +48,11 @@ program
|
|
|
47
48
|
.action(initApp)
|
|
48
49
|
.option('-n, --name <name>', 'app name')
|
|
49
50
|
.option('-i, --icon <icon>', 'app icon path')
|
|
50
|
-
.option('-a, --apikey <apikey>', 'apikey to link to your account')
|
|
51
|
+
.option('-a, --apikey <apikey>', 'apikey to link to your account')
|
|
51
52
|
|
|
52
53
|
const app = program
|
|
53
54
|
.command('app')
|
|
54
|
-
.description('Manage app')
|
|
55
|
+
.description('Manage app')
|
|
55
56
|
|
|
56
57
|
app
|
|
57
58
|
.command('add [appId]')
|
|
@@ -60,27 +61,27 @@ app
|
|
|
60
61
|
.action(addCommand)
|
|
61
62
|
.option('-n, --name <name>', 'app name')
|
|
62
63
|
.option('-i, --icon <icon>', 'app icon path')
|
|
63
|
-
.option('-a, --apikey <apikey>', 'apikey to link to your account')
|
|
64
|
+
.option('-a, --apikey <apikey>', 'apikey to link to your account')
|
|
64
65
|
|
|
65
66
|
app
|
|
66
67
|
.command('delete [appId]')
|
|
67
68
|
.description('Delete an app in Capgo Cloud')
|
|
68
69
|
.action(deleteApp)
|
|
69
|
-
.option('-a, --apikey <apikey>', 'apikey to link to your account')
|
|
70
|
+
.option('-a, --apikey <apikey>', 'apikey to link to your account')
|
|
70
71
|
|
|
71
72
|
app
|
|
72
73
|
.command('list')
|
|
73
74
|
.alias('l')
|
|
74
75
|
.description('list apps in Capgo Cloud')
|
|
75
76
|
.action(listApp)
|
|
76
|
-
.option('-a, --apikey <apikey>', 'apikey to link to your account')
|
|
77
|
+
.option('-a, --apikey <apikey>', 'apikey to link to your account')
|
|
77
78
|
|
|
78
79
|
app
|
|
79
80
|
.command('debug [appId]')
|
|
80
81
|
.description('Listen for live updates event in Capgo Cloud to debug your app')
|
|
81
82
|
.option('-a, --apikey <apikey>', 'apikey to link to your account')
|
|
82
83
|
.option('-d, --device <device>', 'the specific device to debug')
|
|
83
|
-
.action(debugApp)
|
|
84
|
+
.action(debugApp)
|
|
84
85
|
|
|
85
86
|
// app
|
|
86
87
|
// .command('watch [port]')
|
|
@@ -100,7 +101,7 @@ app
|
|
|
100
101
|
|
|
101
102
|
const bundle = program
|
|
102
103
|
.command('bundle')
|
|
103
|
-
.description('Manage bundle')
|
|
104
|
+
.description('Manage bundle')
|
|
104
105
|
|
|
105
106
|
bundle
|
|
106
107
|
.command('upload [appId]')
|
|
@@ -116,22 +117,22 @@ bundle
|
|
|
116
117
|
.option('--key-data <keyData>', 'base64 public signing key')
|
|
117
118
|
.option('--bundle-url', 'prints bundle url into stdout')
|
|
118
119
|
.option('--no-key', 'ignore signing key and send clear update')
|
|
119
|
-
.option('--no-code-check', 'Ignore checking if notifyAppReady() is called in soure code and index present in root folder')
|
|
120
|
+
.option('--no-code-check', 'Ignore checking if notifyAppReady() is called in soure code and index present in root folder')
|
|
120
121
|
.option('--display-iv-session', 'Show in the console the iv and session key used to encrypt the update')
|
|
121
122
|
.option('-b, --bundle <bundle>', 'bundle version number of the bundle to upload')
|
|
122
123
|
.option(
|
|
123
124
|
'--min-update-version <minUpdateVersion>',
|
|
124
|
-
'Minimal version required to update to this version. Used only if the disable auto update is set to metadata in channel'
|
|
125
|
+
'Minimal version required to update to this version. Used only if the disable auto update is set to metadata in channel',
|
|
125
126
|
)
|
|
126
127
|
.option('--auto-min-update-version', 'Set the min update version based on native packages')
|
|
127
128
|
.option('--ignore-metadata-check', 'Ignores the metadata (node_modules) check when uploading')
|
|
128
129
|
|
|
129
130
|
bundle
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
131
|
+
.command('compatibility [appId]')
|
|
132
|
+
.action(checkCompatibilityCommand)
|
|
133
|
+
.option('-a, --apikey <apikey>', 'apikey to link to your account')
|
|
134
|
+
.option('-c, --channel <channel>', 'channel to check the compatibility with')
|
|
135
|
+
.option('--text', 'output text instead of emojis')
|
|
135
136
|
|
|
136
137
|
bundle
|
|
137
138
|
.command('delete [bundleId] [appId]')
|
|
@@ -145,14 +146,14 @@ bundle
|
|
|
145
146
|
.alias('l')
|
|
146
147
|
.description('List bundle in Capgo Cloud')
|
|
147
148
|
.action(listBundle)
|
|
148
|
-
.option('-a, --apikey <apikey>', 'apikey to link to your account')
|
|
149
|
+
.option('-a, --apikey <apikey>', 'apikey to link to your account')
|
|
149
150
|
|
|
150
151
|
bundle
|
|
151
152
|
.command('unlink [appId]')
|
|
152
153
|
.description('Unlink a bundle in Capgo Cloud')
|
|
153
154
|
.action(listBundle)
|
|
154
155
|
.option('-a, --apikey <apikey>', 'apikey to link to your account')
|
|
155
|
-
.option('-b, --bundle <bundle>', 'bundle version number of the bundle to unlink')
|
|
156
|
+
.option('-b, --bundle <bundle>', 'bundle version number of the bundle to unlink')
|
|
156
157
|
|
|
157
158
|
bundle
|
|
158
159
|
.command('cleanup [appId]')
|
|
@@ -162,21 +163,21 @@ bundle
|
|
|
162
163
|
.option('-b, --bundle <bundle>', 'bundle version number of the app to delete')
|
|
163
164
|
.option('-a, --apikey <apikey>', 'apikey to link to your account')
|
|
164
165
|
.option('-k, --keep <keep>', 'number of version to keep')
|
|
165
|
-
.option('-f, --force', 'force removal')
|
|
166
|
+
.option('-f, --force', 'force removal')
|
|
166
167
|
|
|
167
168
|
bundle
|
|
168
169
|
.command('decrypt [zipPath] [sessionKey]')
|
|
169
170
|
.description('Decrypt a signed zip bundle')
|
|
170
171
|
.action(decryptZip)
|
|
171
172
|
.option('--key <key>', 'custom path for private signing key')
|
|
172
|
-
.option('--key-data <keyData>', 'base64 private signing key')
|
|
173
|
+
.option('--key-data <keyData>', 'base64 private signing key')
|
|
173
174
|
|
|
174
175
|
bundle
|
|
175
176
|
.command('encrypt [zipPath]')
|
|
176
177
|
.description('Encrypt a zip bundle')
|
|
177
178
|
.action(encryptZip)
|
|
178
179
|
.option('--key <key>', 'custom path for private signing key')
|
|
179
|
-
.option('--key-data <keyData>', 'base64 private signing key')
|
|
180
|
+
.option('--key-data <keyData>', 'base64 private signing key')
|
|
180
181
|
|
|
181
182
|
bundle
|
|
182
183
|
.command('zip [appId]')
|
|
@@ -186,11 +187,11 @@ bundle
|
|
|
186
187
|
.option('-b, --bundle <bundle>', 'bundle version number to name the zip file')
|
|
187
188
|
.option('-n, --name <name>', 'name of the zip file')
|
|
188
189
|
.option('-j, --json', 'output in JSON')
|
|
189
|
-
.option('--no-code-check', 'Ignore checking if notifyAppReady() is called in soure code and index present in root folder')
|
|
190
|
+
.option('--no-code-check', 'Ignore checking if notifyAppReady() is called in soure code and index present in root folder')
|
|
190
191
|
|
|
191
192
|
const channel = program
|
|
192
193
|
.command('channel')
|
|
193
|
-
.description('Manage channel')
|
|
194
|
+
.description('Manage channel')
|
|
194
195
|
|
|
195
196
|
channel
|
|
196
197
|
.command('add [channelId] [appId]')
|
|
@@ -241,13 +242,11 @@ channel
|
|
|
241
242
|
.option('--no-android', 'Disable sending update to android devices')
|
|
242
243
|
.option('--self-assign', 'Allow to device to self assign to this channel')
|
|
243
244
|
.option('--no-self-assign', 'Disable devices to self assign to this channel')
|
|
244
|
-
.option('--disable-auto-update <disableAutoUpdate>',
|
|
245
|
-
'Disable auto update strategy for this channel.The possible options are: major, minor, metadata, none'
|
|
246
|
-
)
|
|
245
|
+
.option('--disable-auto-update <disableAutoUpdate>', 'Disable auto update strategy for this channel.The possible options are: major, minor, metadata, none')
|
|
247
246
|
|
|
248
247
|
const key = program
|
|
249
248
|
.command('key')
|
|
250
|
-
.description('Manage key')
|
|
249
|
+
.description('Manage key')
|
|
251
250
|
|
|
252
251
|
key
|
|
253
252
|
.command('save')
|
|
@@ -255,14 +254,13 @@ key
|
|
|
255
254
|
.action(saveKeyCommand)
|
|
256
255
|
.option('-f, --force', 'force generate a new one')
|
|
257
256
|
.option('--key', 'key path to save in capacitor config')
|
|
258
|
-
.option('--key-data', 'key data to save in capacitor config')
|
|
259
|
-
|
|
257
|
+
.option('--key-data', 'key data to save in capacitor config')
|
|
260
258
|
|
|
261
259
|
key
|
|
262
260
|
.command('create')
|
|
263
261
|
.description('Create a new signing key')
|
|
264
262
|
.action(createKeyCommand)
|
|
265
|
-
.option('-f, --force', 'force generate a new one')
|
|
263
|
+
.option('-f, --force', 'force generate a new one')
|
|
266
264
|
|
|
267
265
|
program
|
|
268
266
|
.command('upload [appId]')
|
|
@@ -281,7 +279,7 @@ program
|
|
|
281
279
|
.option('-b, --bundle <bundle>', 'bundle version number of the file to upload')
|
|
282
280
|
.option(
|
|
283
281
|
'--min-update-version <minUpdateVersion>',
|
|
284
|
-
'Minimal version required to update to this version. Used only if the disable auto update is set to metadata in channel'
|
|
285
|
-
)
|
|
282
|
+
'Minimal version required to update to this version. Used only if the disable auto update is set to metadata in channel',
|
|
283
|
+
)
|
|
286
284
|
|
|
287
|
-
program.parseAsync()
|
|
285
|
+
program.parseAsync()
|