@capgo/cli 5.0.0-alpha.7 โ 7.0.1
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/README.md +197 -41
- package/dist/index.js +335 -95820
- package/dist/package.json +83 -0
- package/package.json +48 -62
- package/.eslintignore +0 -4
- package/.github/FUNDING.yml +0 -1
- package/.github/workflows/build.yml +0 -46
- package/.github/workflows/bump_version.yml +0 -56
- package/.github/workflows/test.yml +0 -30
- package/.prettierignore +0 -6
- package/.vscode/launch.json +0 -23
- package/.vscode/settings.json +0 -5
- package/.vscode/tasks.json +0 -42
- package/CHANGELOG.md +0 -2861
- package/build.mjs +0 -23
- package/bun.lockb +0 -0
- package/capacitor.config.ts +0 -33
- package/crypto_explained.png +0 -0
- package/eslint.config.js +0 -3
- package/renovate.json +0 -23
- package/src/api/app.ts +0 -75
- package/src/api/channels.ts +0 -140
- package/src/api/crypto.ts +0 -121
- package/src/api/devices_override.ts +0 -41
- package/src/api/update.ts +0 -12
- package/src/api/versions.ts +0 -101
- package/src/app/add.ts +0 -191
- package/src/app/debug.ts +0 -220
- package/src/app/delete.ts +0 -106
- package/src/app/info.ts +0 -87
- package/src/app/list.ts +0 -67
- package/src/app/set.ts +0 -94
- package/src/bundle/check.ts +0 -42
- package/src/bundle/cleanup.ts +0 -127
- package/src/bundle/compatibility.ts +0 -70
- package/src/bundle/decrypt.ts +0 -65
- package/src/bundle/delete.ts +0 -53
- package/src/bundle/encrypt.ts +0 -69
- package/src/bundle/list.ts +0 -43
- package/src/bundle/unlink.ts +0 -86
- package/src/bundle/upload.ts +0 -516
- package/src/bundle/zip.ts +0 -139
- package/src/channel/add.ts +0 -73
- package/src/channel/currentBundle.ts +0 -72
- package/src/channel/delete.ts +0 -51
- package/src/channel/list.ts +0 -49
- package/src/channel/set.ts +0 -174
- package/src/index.ts +0 -290
- package/src/init.ts +0 -301
- package/src/key.ts +0 -158
- package/src/login.ts +0 -66
- package/src/types/capacitor__cli.d.ts +0 -6
- package/src/types/supabase.types.ts +0 -2471
- package/src/utils.ts +0 -738
- package/test/chunk_convert.ts +0 -28
- package/test/data.ts +0 -18769
- package/test/test_headers_rls.ts +0 -24
- package/test/test_semver.ts +0 -13
- package/tsconfig.json +0 -39
package/src/channel/add.ts
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import process from 'node:process'
|
|
2
|
-
import { program } from 'commander'
|
|
3
|
-
import * as p from '@clack/prompts'
|
|
4
|
-
import { checkAppExistsAndHasPermissionOrgErr } from '../api/app'
|
|
5
|
-
import { createChannel, findUnknownVersion } from '../api/channels'
|
|
6
|
-
import type { OptionsBase } from '../utils'
|
|
7
|
-
import { EMPTY_UUID, OrganizationPerm, createSupabaseClient, findSavedKey, getConfig, useLogSnag, verifyUser } from '../utils'
|
|
8
|
-
|
|
9
|
-
interface Options extends OptionsBase {
|
|
10
|
-
default?: boolean
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export async function addChannel(channelId: string, appId: string, options: Options, shouldExit = true) {
|
|
14
|
-
p.intro(`Create channel`)
|
|
15
|
-
options.apikey = options.apikey || findSavedKey()
|
|
16
|
-
const config = await getConfig()
|
|
17
|
-
appId = appId || config?.app?.appId
|
|
18
|
-
const snag = useLogSnag()
|
|
19
|
-
|
|
20
|
-
if (!options.apikey) {
|
|
21
|
-
p.log.error('Missing API key, you need to provide a API key to upload your bundle')
|
|
22
|
-
program.error('')
|
|
23
|
-
}
|
|
24
|
-
if (!appId) {
|
|
25
|
-
p.log.error('Missing argument, you need to provide a appId, or be in a capacitor project')
|
|
26
|
-
program.error('')
|
|
27
|
-
}
|
|
28
|
-
const supabase = await createSupabaseClient(options.apikey)
|
|
29
|
-
|
|
30
|
-
const userId = await verifyUser(supabase, options.apikey, ['write', 'all'])
|
|
31
|
-
// Check we have app access to this appId
|
|
32
|
-
await checkAppExistsAndHasPermissionOrgErr(supabase, options.apikey, appId, OrganizationPerm.admin)
|
|
33
|
-
|
|
34
|
-
p.log.info(`Creating channel ${appId}#${channelId} to Capgo`)
|
|
35
|
-
try {
|
|
36
|
-
const data = await findUnknownVersion(supabase, appId)
|
|
37
|
-
if (!data) {
|
|
38
|
-
p.log.error(`Cannot find default version for channel creation, please contact Capgo support ๐คจ`)
|
|
39
|
-
program.error('')
|
|
40
|
-
}
|
|
41
|
-
await createChannel(supabase, {
|
|
42
|
-
name: channelId,
|
|
43
|
-
app_id: appId,
|
|
44
|
-
version: data.id,
|
|
45
|
-
owner_org: EMPTY_UUID,
|
|
46
|
-
})
|
|
47
|
-
p.log.success(`Channel created โ
`)
|
|
48
|
-
await snag.track({
|
|
49
|
-
channel: 'channel',
|
|
50
|
-
event: 'Create channel',
|
|
51
|
-
icon: 'โ
',
|
|
52
|
-
user_id: userId,
|
|
53
|
-
tags: {
|
|
54
|
-
'app-id': appId,
|
|
55
|
-
'channel': channelId,
|
|
56
|
-
},
|
|
57
|
-
notify: false,
|
|
58
|
-
}).catch()
|
|
59
|
-
}
|
|
60
|
-
catch (error) {
|
|
61
|
-
p.log.error(`Cannot create Channel ๐`)
|
|
62
|
-
return false
|
|
63
|
-
}
|
|
64
|
-
if (shouldExit) {
|
|
65
|
-
p.outro(`Done โ
`)
|
|
66
|
-
process.exit()
|
|
67
|
-
}
|
|
68
|
-
return true
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export async function addChannelCommand(apikey: string, appId: string, options: Options) {
|
|
72
|
-
addChannel(apikey, appId, options, true)
|
|
73
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import process from 'node:process'
|
|
2
|
-
import { program } from 'commander'
|
|
3
|
-
import * as p from '@clack/prompts'
|
|
4
|
-
import { checkAppExistsAndHasPermissionOrgErr } from '../api/app'
|
|
5
|
-
import type { OptionsBase } from '../utils'
|
|
6
|
-
import { OrganizationPerm, createSupabaseClient, findSavedKey, getConfig, verifyUser } from '../utils'
|
|
7
|
-
|
|
8
|
-
interface Options extends OptionsBase {
|
|
9
|
-
channel?: string
|
|
10
|
-
quiet?: boolean
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
interface Channel {
|
|
14
|
-
version: {
|
|
15
|
-
name: string
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export async function currentBundle(channel: string, appId: string, options: Options) {
|
|
20
|
-
const { quiet } = options
|
|
21
|
-
|
|
22
|
-
if (!quiet)
|
|
23
|
-
p.intro(`List current bundle`)
|
|
24
|
-
|
|
25
|
-
options.apikey = options.apikey || findSavedKey(quiet)
|
|
26
|
-
const config = await getConfig()
|
|
27
|
-
appId = appId || config?.app?.appId
|
|
28
|
-
|
|
29
|
-
if (!options.apikey) {
|
|
30
|
-
p.log.error('Missing API key, you need to provide a API key to upload your bundle')
|
|
31
|
-
program.error('')
|
|
32
|
-
}
|
|
33
|
-
if (!appId) {
|
|
34
|
-
p.log.error('Missing argument, you need to provide a appId, or be in a capacitor project')
|
|
35
|
-
program.error('')
|
|
36
|
-
}
|
|
37
|
-
const supabase = await createSupabaseClient(options.apikey)
|
|
38
|
-
|
|
39
|
-
const _userId = await verifyUser(supabase, options.apikey, ['write', 'all', 'read'])
|
|
40
|
-
// Check we have app access to this appId
|
|
41
|
-
await checkAppExistsAndHasPermissionOrgErr(supabase, options.apikey, appId, OrganizationPerm.read)
|
|
42
|
-
|
|
43
|
-
if (!channel) {
|
|
44
|
-
p.log.error(`Please provide a channel to get the bundle from.`)
|
|
45
|
-
program.error('')
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const { data: supabaseChannel, error } = await supabase
|
|
49
|
-
.from('channels')
|
|
50
|
-
.select('version ( name )')
|
|
51
|
-
.eq('name', channel)
|
|
52
|
-
.eq('app_id', appId)
|
|
53
|
-
.limit(1)
|
|
54
|
-
|
|
55
|
-
if (error || supabaseChannel.length === 0) {
|
|
56
|
-
p.log.error(`Error retrieving channel ${channel} for app ${appId}. Perhaps the channel does not exists?`)
|
|
57
|
-
program.error('')
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const { version } = supabaseChannel[0] as any as Channel
|
|
61
|
-
if (!version) {
|
|
62
|
-
p.log.error(`Error retrieving channel ${channel} for app ${appId}. Perhaps the channel does not exists?`)
|
|
63
|
-
program.error('')
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
if (!quiet)
|
|
67
|
-
p.log.info(`Current bundle for channel ${channel} is ${version.name}`)
|
|
68
|
-
else
|
|
69
|
-
p.log.info(version.name)
|
|
70
|
-
|
|
71
|
-
process.exit()
|
|
72
|
-
}
|
package/src/channel/delete.ts
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import process from 'node:process'
|
|
2
|
-
import { program } from 'commander'
|
|
3
|
-
import * as p from '@clack/prompts'
|
|
4
|
-
import { checkAppExistsAndHasPermissionOrgErr } from '../api/app'
|
|
5
|
-
import { delChannel } from '../api/channels'
|
|
6
|
-
import type { OptionsBase } from '../utils'
|
|
7
|
-
import { OrganizationPerm, createSupabaseClient, findSavedKey, getConfig, useLogSnag, verifyUser } from '../utils'
|
|
8
|
-
|
|
9
|
-
export async function deleteChannel(channelId: string, appId: string, options: OptionsBase) {
|
|
10
|
-
p.intro(`Delete channel`)
|
|
11
|
-
options.apikey = options.apikey || findSavedKey()
|
|
12
|
-
const config = await getConfig()
|
|
13
|
-
appId = appId || config?.app?.appId
|
|
14
|
-
const snag = useLogSnag()
|
|
15
|
-
|
|
16
|
-
if (!options.apikey) {
|
|
17
|
-
p.log.error('Missing API key, you need to provide a API key to upload your bundle')
|
|
18
|
-
program.error('')
|
|
19
|
-
}
|
|
20
|
-
if (!appId) {
|
|
21
|
-
p.log.error('Missing argument, you need to provide a appId, or be in a capacitor project')
|
|
22
|
-
program.error('')
|
|
23
|
-
}
|
|
24
|
-
const supabase = await createSupabaseClient(options.apikey)
|
|
25
|
-
|
|
26
|
-
const userId = await verifyUser(supabase, options.apikey, ['write', 'all'])
|
|
27
|
-
// Check we have app access to this appId
|
|
28
|
-
await checkAppExistsAndHasPermissionOrgErr(supabase, options.apikey, appId, OrganizationPerm.admin)
|
|
29
|
-
|
|
30
|
-
p.log.info(`Deleting channel ${appId}#${channelId} from Capgo`)
|
|
31
|
-
try {
|
|
32
|
-
await delChannel(supabase, channelId, appId, userId)
|
|
33
|
-
p.log.success(`Channel deleted`)
|
|
34
|
-
await snag.track({
|
|
35
|
-
channel: 'channel',
|
|
36
|
-
event: 'Delete channel',
|
|
37
|
-
icon: 'โ
',
|
|
38
|
-
tags: {
|
|
39
|
-
'user-id': userId,
|
|
40
|
-
'app-id': appId,
|
|
41
|
-
'channel': channelId,
|
|
42
|
-
},
|
|
43
|
-
notify: false,
|
|
44
|
-
}).catch()
|
|
45
|
-
}
|
|
46
|
-
catch (error) {
|
|
47
|
-
p.log.error(`Cannot delete Channel ๐`)
|
|
48
|
-
}
|
|
49
|
-
p.outro(`Done โ
`)
|
|
50
|
-
process.exit()
|
|
51
|
-
}
|
package/src/channel/list.ts
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import process from 'node:process'
|
|
2
|
-
import { program } from 'commander'
|
|
3
|
-
import * as p from '@clack/prompts'
|
|
4
|
-
import { checkAppExistsAndHasPermissionOrgErr } from '../api/app'
|
|
5
|
-
import { displayChannels, getActiveChannels } from '../api/channels'
|
|
6
|
-
import type { OptionsBase } from '../utils'
|
|
7
|
-
import { OrganizationPerm, createSupabaseClient, findSavedKey, getConfig, useLogSnag, verifyUser } from '../utils'
|
|
8
|
-
|
|
9
|
-
export async function listChannels(appId: string, options: OptionsBase) {
|
|
10
|
-
p.intro(`List channels`)
|
|
11
|
-
options.apikey = options.apikey || findSavedKey()
|
|
12
|
-
const config = await getConfig()
|
|
13
|
-
appId = appId || config?.app?.appId
|
|
14
|
-
const snag = useLogSnag()
|
|
15
|
-
|
|
16
|
-
if (!options.apikey)
|
|
17
|
-
p.log.error('Missing API key, you need to provide a API key to upload your bundle')
|
|
18
|
-
|
|
19
|
-
if (!appId) {
|
|
20
|
-
p.log.error('Missing argument, you need to provide a appId, or be in a capacitor project')
|
|
21
|
-
program.error('')
|
|
22
|
-
}
|
|
23
|
-
const supabase = await createSupabaseClient(options.apikey)
|
|
24
|
-
|
|
25
|
-
const userId = await verifyUser(supabase, options.apikey, ['write', 'all', 'read', 'upload'])
|
|
26
|
-
// Check we have app access to this appId
|
|
27
|
-
await checkAppExistsAndHasPermissionOrgErr(supabase, options.apikey, appId, OrganizationPerm.read)
|
|
28
|
-
|
|
29
|
-
p.log.info(`Querying available channels in Capgo`)
|
|
30
|
-
|
|
31
|
-
// Get all active app versions we might possibly be able to cleanup
|
|
32
|
-
const allVersions = await getActiveChannels(supabase, appId)
|
|
33
|
-
|
|
34
|
-
p.log.info(`Active channels in Capgo: ${allVersions?.length}`)
|
|
35
|
-
|
|
36
|
-
displayChannels(allVersions)
|
|
37
|
-
await snag.track({
|
|
38
|
-
channel: 'channel',
|
|
39
|
-
event: 'List channel',
|
|
40
|
-
icon: 'โ
',
|
|
41
|
-
user_id: userId,
|
|
42
|
-
tags: {
|
|
43
|
-
'app-id': appId,
|
|
44
|
-
},
|
|
45
|
-
notify: false,
|
|
46
|
-
}).catch()
|
|
47
|
-
p.outro(`Done โ
`)
|
|
48
|
-
process.exit()
|
|
49
|
-
}
|
package/src/channel/set.ts
DELETED
|
@@ -1,174 +0,0 @@
|
|
|
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 { checkAppExistsAndHasPermissionOrgErr } from '../api/app'
|
|
6
|
-
import type {
|
|
7
|
-
OptionsBase,
|
|
8
|
-
} from '../utils'
|
|
9
|
-
import {
|
|
10
|
-
OrganizationPerm,
|
|
11
|
-
checkPlanValid,
|
|
12
|
-
createSupabaseClient,
|
|
13
|
-
findSavedKey,
|
|
14
|
-
formatError,
|
|
15
|
-
getConfig,
|
|
16
|
-
getOrganizationId,
|
|
17
|
-
updateOrCreateChannel,
|
|
18
|
-
useLogSnag,
|
|
19
|
-
verifyUser,
|
|
20
|
-
} from '../utils'
|
|
21
|
-
|
|
22
|
-
interface Options extends OptionsBase {
|
|
23
|
-
bundle: string
|
|
24
|
-
state?: string
|
|
25
|
-
downgrade?: boolean
|
|
26
|
-
latest?: boolean
|
|
27
|
-
upgrade?: boolean
|
|
28
|
-
ios?: boolean
|
|
29
|
-
android?: boolean
|
|
30
|
-
selfAssign?: boolean
|
|
31
|
-
disableAutoUpdate: string
|
|
32
|
-
channel?: string
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const disableAutoUpdatesPossibleOptions = ['major', 'minor', 'metadata', 'patch', 'none']
|
|
36
|
-
|
|
37
|
-
export async function setChannel(channel: string, appId: string, options: Options) {
|
|
38
|
-
p.intro(`Set channel`)
|
|
39
|
-
options.apikey = options.apikey || findSavedKey()
|
|
40
|
-
const config = await getConfig()
|
|
41
|
-
appId = appId || config?.app?.appId
|
|
42
|
-
const snag = useLogSnag()
|
|
43
|
-
|
|
44
|
-
if (!options.apikey) {
|
|
45
|
-
p.log.error('Missing API key, you need to provide a API key to upload your bundle')
|
|
46
|
-
program.error('')
|
|
47
|
-
}
|
|
48
|
-
if (!appId) {
|
|
49
|
-
p.log.error('Missing argument, you need to provide a appId, or be in a capacitor project')
|
|
50
|
-
program.error('')
|
|
51
|
-
}
|
|
52
|
-
const supabase = await createSupabaseClient(options.apikey)
|
|
53
|
-
|
|
54
|
-
const userId = await verifyUser(supabase, options.apikey, ['write', 'all'])
|
|
55
|
-
// Check we have app access to this appId
|
|
56
|
-
await checkAppExistsAndHasPermissionOrgErr(supabase, options.apikey, appId, OrganizationPerm.admin)
|
|
57
|
-
const orgId = await getOrganizationId(supabase, appId)
|
|
58
|
-
|
|
59
|
-
const { bundle, latest, downgrade, upgrade, ios, android, selfAssign, state, disableAutoUpdate } = options
|
|
60
|
-
if (!channel) {
|
|
61
|
-
p.log.error('Missing argument, you need to provide a channel')
|
|
62
|
-
program.error('')
|
|
63
|
-
}
|
|
64
|
-
if (latest && bundle) {
|
|
65
|
-
p.log.error('Cannot set latest and bundle at the same time')
|
|
66
|
-
program.error('')
|
|
67
|
-
}
|
|
68
|
-
if (bundle == null
|
|
69
|
-
&& state == null
|
|
70
|
-
&& latest == null
|
|
71
|
-
&& downgrade == null
|
|
72
|
-
&& upgrade == null
|
|
73
|
-
&& ios == null
|
|
74
|
-
&& android == null
|
|
75
|
-
&& selfAssign == null
|
|
76
|
-
&& disableAutoUpdate == null) {
|
|
77
|
-
p.log.error('Missing argument, you need to provide a option to set')
|
|
78
|
-
program.error('')
|
|
79
|
-
}
|
|
80
|
-
try {
|
|
81
|
-
await checkPlanValid(supabase, orgId, options.apikey, appId)
|
|
82
|
-
const channelPayload: Database['public']['Tables']['channels']['Insert'] = {
|
|
83
|
-
created_by: userId,
|
|
84
|
-
app_id: appId,
|
|
85
|
-
name: channel,
|
|
86
|
-
version: undefined as any,
|
|
87
|
-
}
|
|
88
|
-
const bundleVersion = latest ? config?.app?.package?.version : bundle
|
|
89
|
-
if (bundleVersion != null) {
|
|
90
|
-
const { data, error: vError } = await supabase
|
|
91
|
-
.from('app_versions')
|
|
92
|
-
.select()
|
|
93
|
-
.eq('app_id', appId)
|
|
94
|
-
.eq('name', bundleVersion)
|
|
95
|
-
.eq('user_id', userId)
|
|
96
|
-
.eq('deleted', false)
|
|
97
|
-
.single()
|
|
98
|
-
if (vError || !data) {
|
|
99
|
-
p.log.error(`Cannot find version ${bundleVersion}`)
|
|
100
|
-
program.error('')
|
|
101
|
-
}
|
|
102
|
-
p.log.info(`Set ${appId} channel: ${channel} to @${bundleVersion}`)
|
|
103
|
-
channelPayload.version = data.id
|
|
104
|
-
}
|
|
105
|
-
if (state != null) {
|
|
106
|
-
if (state === 'public' || state === 'private')
|
|
107
|
-
p.log.info(`Set ${appId} channel: ${channel} to public or private is deprecated, use default or normal instead`)
|
|
108
|
-
|
|
109
|
-
p.log.info(`Set ${appId} channel: ${channel} to ${state === 'public' || state === 'default' ? 'default' : 'normal'}`)
|
|
110
|
-
channelPayload.public = state === 'public' || state === 'default'
|
|
111
|
-
}
|
|
112
|
-
if (downgrade != null) {
|
|
113
|
-
p.log.info(`Set ${appId} channel: ${channel} to ${downgrade ? 'allow' : 'disallow'} downgrade`)
|
|
114
|
-
channelPayload.disableAutoUpdateUnderNative = !downgrade
|
|
115
|
-
}
|
|
116
|
-
if (ios != null) {
|
|
117
|
-
p.log.info(`Set ${appId} channel: ${channel} to ${ios ? 'allow' : 'disallow'} ios update`)
|
|
118
|
-
channelPayload.ios = !!ios
|
|
119
|
-
}
|
|
120
|
-
if (android != null) {
|
|
121
|
-
p.log.info(`Set ${appId} channel: ${channel} to ${android ? 'allow' : 'disallow'} android update`)
|
|
122
|
-
channelPayload.android = !!android
|
|
123
|
-
}
|
|
124
|
-
if (selfAssign != null) {
|
|
125
|
-
p.log.info(`Set ${appId} channel: ${channel} to ${selfAssign ? 'allow' : 'disallow'} self assign to this channel`)
|
|
126
|
-
channelPayload.allow_device_self_set = !!selfAssign
|
|
127
|
-
}
|
|
128
|
-
if (disableAutoUpdate != null) {
|
|
129
|
-
let finalDisableAutoUpdate = disableAutoUpdate.toLocaleLowerCase()
|
|
130
|
-
|
|
131
|
-
// The user passed an unimplemented strategy
|
|
132
|
-
if (!disableAutoUpdatesPossibleOptions.includes(finalDisableAutoUpdate)) {
|
|
133
|
-
p.log.error(`Channel strategy ${finalDisableAutoUpdate} is not known. The possible values are: ${disableAutoUpdatesPossibleOptions.join(', ')}.`)
|
|
134
|
-
program.error('')
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
// This metadata is called differently in the database
|
|
138
|
-
if (finalDisableAutoUpdate === 'metadata')
|
|
139
|
-
finalDisableAutoUpdate = 'version_number'
|
|
140
|
-
|
|
141
|
-
// This cast is safe, look above
|
|
142
|
-
channelPayload.disableAutoUpdate = finalDisableAutoUpdate as any
|
|
143
|
-
p.log.info(`Set ${appId} channel: ${channel} to ${finalDisableAutoUpdate} disable update strategy to this channel`)
|
|
144
|
-
}
|
|
145
|
-
try {
|
|
146
|
-
const { error: dbError } = await updateOrCreateChannel(supabase, channelPayload)
|
|
147
|
-
if (dbError) {
|
|
148
|
-
p.log.error(`Cannot set channel the upload key is not allowed to do that, use the "all" for this.`)
|
|
149
|
-
program.error('')
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
catch (e) {
|
|
153
|
-
p.log.error(`Cannot set channel the upload key is not allowed to do that, use the "all" for this.`)
|
|
154
|
-
program.error('')
|
|
155
|
-
}
|
|
156
|
-
await snag.track({
|
|
157
|
-
channel: 'channel',
|
|
158
|
-
event: 'Set channel',
|
|
159
|
-
icon: 'โ
',
|
|
160
|
-
user_id: userId,
|
|
161
|
-
tags: {
|
|
162
|
-
'user-id': userId,
|
|
163
|
-
'app-id': appId,
|
|
164
|
-
},
|
|
165
|
-
notify: false,
|
|
166
|
-
}).catch()
|
|
167
|
-
}
|
|
168
|
-
catch (err) {
|
|
169
|
-
p.log.error(`Unknow error ${formatError(err)}`)
|
|
170
|
-
program.error('')
|
|
171
|
-
}
|
|
172
|
-
p.outro(`Done โ
`)
|
|
173
|
-
process.exit()
|
|
174
|
-
}
|