@capgo/cli 7.18.23 → 7.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/dist/index.js +214 -214
  2. package/dist/src/sdk.js +1 -1
  3. package/package.json +1 -1
  4. package/dist/package.json +0 -86
  5. package/dist/src/api/app.js +0 -45
  6. package/dist/src/api/app.js.map +0 -1
  7. package/dist/src/api/channels.js +0 -167
  8. package/dist/src/api/channels.js.map +0 -1
  9. package/dist/src/api/cryptoV2.js +0 -102
  10. package/dist/src/api/cryptoV2.js.map +0 -1
  11. package/dist/src/api/update.js +0 -13
  12. package/dist/src/api/update.js.map +0 -1
  13. package/dist/src/api/versions.js +0 -92
  14. package/dist/src/api/versions.js.map +0 -1
  15. package/dist/src/app/add.js +0 -150
  16. package/dist/src/app/add.js.map +0 -1
  17. package/dist/src/app/debug.js +0 -222
  18. package/dist/src/app/debug.js.map +0 -1
  19. package/dist/src/app/delete.js +0 -89
  20. package/dist/src/app/delete.js.map +0 -1
  21. package/dist/src/app/info.js +0 -84
  22. package/dist/src/app/info.js.map +0 -1
  23. package/dist/src/app/list.js +0 -48
  24. package/dist/src/app/list.js.map +0 -1
  25. package/dist/src/app/set.js +0 -96
  26. package/dist/src/app/set.js.map +0 -1
  27. package/dist/src/app/setting.js +0 -50
  28. package/dist/src/app/setting.js.map +0 -1
  29. package/dist/src/bundle/check.js +0 -30
  30. package/dist/src/bundle/check.js.map +0 -1
  31. package/dist/src/bundle/cleanup.js +0 -105
  32. package/dist/src/bundle/cleanup.js.map +0 -1
  33. package/dist/src/bundle/compatibility.js +0 -62
  34. package/dist/src/bundle/compatibility.js.map +0 -1
  35. package/dist/src/bundle/decryptV2.js +0 -76
  36. package/dist/src/bundle/decryptV2.js.map +0 -1
  37. package/dist/src/bundle/delete.js +0 -40
  38. package/dist/src/bundle/delete.js.map +0 -1
  39. package/dist/src/bundle/encryptV2.js +0 -108
  40. package/dist/src/bundle/encryptV2.js.map +0 -1
  41. package/dist/src/bundle/list.js +0 -36
  42. package/dist/src/bundle/list.js.map +0 -1
  43. package/dist/src/bundle/partial.js +0 -277
  44. package/dist/src/bundle/partial.js.map +0 -1
  45. package/dist/src/bundle/unlink.js +0 -70
  46. package/dist/src/bundle/unlink.js.map +0 -1
  47. package/dist/src/bundle/upload.js +0 -940
  48. package/dist/src/bundle/upload.js.map +0 -1
  49. package/dist/src/bundle/upload_interface.js +0 -2
  50. package/dist/src/bundle/upload_interface.js.map +0 -1
  51. package/dist/src/bundle/zip.js +0 -156
  52. package/dist/src/bundle/zip.js.map +0 -1
  53. package/dist/src/channel/add.js +0 -68
  54. package/dist/src/channel/add.js.map +0 -1
  55. package/dist/src/channel/currentBundle.js +0 -54
  56. package/dist/src/channel/currentBundle.js.map +0 -1
  57. package/dist/src/channel/delete.js +0 -77
  58. package/dist/src/channel/delete.js.map +0 -1
  59. package/dist/src/channel/list.js +0 -45
  60. package/dist/src/channel/list.js.map +0 -1
  61. package/dist/src/channel/set.js +0 -220
  62. package/dist/src/channel/set.js.map +0 -1
  63. package/dist/src/checksum.js +0 -46
  64. package/dist/src/checksum.js.map +0 -1
  65. package/dist/src/config/index.js +0 -31
  66. package/dist/src/config/index.js.map +0 -1
  67. package/dist/src/docs.js +0 -280
  68. package/dist/src/docs.js.map +0 -1
  69. package/dist/src/index.js +0 -522
  70. package/dist/src/index.js.map +0 -1
  71. package/dist/src/init.js +0 -803
  72. package/dist/src/init.js.map +0 -1
  73. package/dist/src/keyV2.js +0 -163
  74. package/dist/src/keyV2.js.map +0 -1
  75. package/dist/src/login.js +0 -51
  76. package/dist/src/login.js.map +0 -1
  77. package/dist/src/organisation/add.js +0 -82
  78. package/dist/src/organisation/add.js.map +0 -1
  79. package/dist/src/organisation/delete.js +0 -91
  80. package/dist/src/organisation/delete.js.map +0 -1
  81. package/dist/src/organisation/index.js +0 -5
  82. package/dist/src/organisation/index.js.map +0 -1
  83. package/dist/src/organisation/list.js +0 -60
  84. package/dist/src/organisation/list.js.map +0 -1
  85. package/dist/src/organisation/set.js +0 -95
  86. package/dist/src/organisation/set.js.map +0 -1
  87. package/dist/src/sdk.js.map +0 -1
  88. package/dist/src/types/supabase.types.js +0 -86
  89. package/dist/src/types/supabase.types.js.map +0 -1
  90. package/dist/src/user/account.js +0 -31
  91. package/dist/src/user/account.js.map +0 -1
  92. package/dist/src/utils/latest-version.js +0 -26
  93. package/dist/src/utils/latest-version.js.map +0 -1
  94. package/dist/src/utils.js +0 -1222
  95. package/dist/src/utils.js.map +0 -1
@@ -1,108 +0,0 @@
1
- import { existsSync, readFileSync, writeFileSync } from 'node:fs';
2
- import { intro, log, outro } from '@clack/prompts';
3
- import { encryptChecksumV2, encryptSourceV2, generateSessionKey } from '../api/cryptoV2';
4
- import { checkAlerts } from '../api/update';
5
- import { baseKeyV2, formatError, getConfig } from '../utils';
6
- function emitJsonError(error) {
7
- console.error(formatError(error));
8
- }
9
- export async function encryptZipV2Internal(zipPath, checksum, options, silent = false) {
10
- const { json } = options;
11
- const shouldShowPrompts = !json && !silent;
12
- if (shouldShowPrompts) {
13
- intro('Encryption');
14
- await checkAlerts();
15
- }
16
- try {
17
- const extConfig = await getConfig();
18
- const hasPrivateKeyInConfig = !!extConfig.config.plugins?.CapacitorUpdater?.privateKey;
19
- const hasPublicKeyInConfig = !!extConfig.config.plugins?.CapacitorUpdater?.publicKey;
20
- if (hasPrivateKeyInConfig && shouldShowPrompts)
21
- log.warning('There is still a privateKey in the config');
22
- if (!existsSync(zipPath)) {
23
- const message = `Zip not found at the path ${zipPath}`;
24
- if (!silent) {
25
- if (json)
26
- emitJsonError({ error: 'zip_not_found' });
27
- else
28
- log.error(`Error: ${message}`);
29
- }
30
- throw new Error(message);
31
- }
32
- if (!hasPublicKeyInConfig) {
33
- if (!silent) {
34
- if (json)
35
- emitJsonError({ error: 'missing_public_key' });
36
- else
37
- log.warning('Warning: Missing Public Key in config');
38
- }
39
- throw new Error('Missing public key in config');
40
- }
41
- const keyPath = options.key || baseKeyV2;
42
- let privateKey = options.keyData || '';
43
- if (!existsSync(keyPath) && !privateKey) {
44
- if (!silent) {
45
- if (json) {
46
- emitJsonError({ error: 'missing_key' });
47
- }
48
- else {
49
- log.warning(`Cannot find a private key at ${keyPath} or as a keyData option`);
50
- log.error('Error: Missing key');
51
- }
52
- }
53
- throw new Error('Missing private key');
54
- }
55
- else if (existsSync(keyPath)) {
56
- privateKey = readFileSync(keyPath, 'utf8');
57
- }
58
- if (privateKey && !privateKey.startsWith('-----BEGIN RSA PRIVATE KEY-----')) {
59
- if (!silent) {
60
- if (json)
61
- emitJsonError({ error: 'invalid_private_key' });
62
- else
63
- log.error('The private key provided is not a valid RSA Private key');
64
- }
65
- throw new Error('Invalid private key format');
66
- }
67
- const zipFile = readFileSync(zipPath);
68
- const { sessionKey, ivSessionKey } = generateSessionKey(privateKey);
69
- const encryptedData = encryptSourceV2(zipFile, sessionKey, ivSessionKey);
70
- const encodedChecksum = encryptChecksumV2(checksum, privateKey);
71
- const filenameEncrypted = `${zipPath}_encrypted.zip`;
72
- writeFileSync(filenameEncrypted, encryptedData);
73
- if (!silent) {
74
- if (json) {
75
- // eslint-disable-next-line no-console
76
- console.log(JSON.stringify({
77
- checksum: encodedChecksum,
78
- filename: filenameEncrypted,
79
- ivSessionKey,
80
- }, null, 2));
81
- }
82
- else {
83
- log.success(`Encoded Checksum: ${encodedChecksum}`);
84
- log.success(`ivSessionKey: ${ivSessionKey}`);
85
- log.success(`Encrypted zip saved at ${filenameEncrypted}`);
86
- outro('Done ✅');
87
- }
88
- }
89
- return {
90
- checksum: encodedChecksum,
91
- filename: filenameEncrypted,
92
- ivSessionKey,
93
- };
94
- }
95
- catch (error) {
96
- if (!silent) {
97
- if (options.json)
98
- emitJsonError(error);
99
- else
100
- log.error(`Error encrypting zip file ${formatError(error)}`);
101
- }
102
- throw error instanceof Error ? error : new Error(String(error));
103
- }
104
- }
105
- export async function encryptZipV2(zipPath, checksum, options) {
106
- await encryptZipV2Internal(zipPath, checksum, options, false);
107
- }
108
- //# sourceMappingURL=encryptV2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"encryptV2.js","sourceRoot":"","sources":["../../../src/bundle/encryptV2.ts"],"names":[],"mappings":"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"}
@@ -1,36 +0,0 @@
1
- import { intro, log, outro } from '@clack/prompts';
2
- import { checkAppExistsAndHasPermissionOrgErr } from '../api/app';
3
- import { checkAlerts } from '../api/update';
4
- import { displayBundles, getActiveAppVersions } from '../api/versions';
5
- import { createSupabaseClient, findSavedKey, getAppId, getConfig, OrganizationPerm, verifyUser } from '../utils';
6
- export async function listBundle(appId, options, silent = false) {
7
- if (!silent)
8
- intro('List bundles');
9
- await checkAlerts();
10
- options.apikey = options.apikey || findSavedKey();
11
- const extConfig = await getConfig();
12
- appId = getAppId(appId, extConfig?.config);
13
- if (!options.apikey) {
14
- if (!silent)
15
- log.error('Missing API key, you need to provide an API key to upload your bundle');
16
- throw new Error('Missing API key');
17
- }
18
- if (!appId) {
19
- if (!silent)
20
- log.error('Missing argument, you need to provide a appid, or be in a capacitor project');
21
- throw new Error('Missing appId');
22
- }
23
- const supabase = await createSupabaseClient(options.apikey, options.supaHost, options.supaAnon);
24
- await verifyUser(supabase, options.apikey, ['write', 'all', 'read', 'upload']);
25
- await checkAppExistsAndHasPermissionOrgErr(supabase, options.apikey, appId, OrganizationPerm.read, silent);
26
- if (!silent)
27
- log.info(`Querying available versions of: ${appId} in Capgo`);
28
- const allVersions = await getActiveAppVersions(supabase, appId);
29
- if (!silent) {
30
- log.info(`Active versions in Capgo: ${allVersions?.length ?? 0}`);
31
- displayBundles(allVersions);
32
- outro('Done ✅');
33
- }
34
- return allVersions;
35
- }
36
- //# sourceMappingURL=list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/bundle/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,oCAAoC,EAAE,MAAM,YAAY,CAAA;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAEhH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAa,EAAE,OAAoB,EAAE,MAAM,GAAG,KAAK;IAClF,IAAI,CAAC,MAAM;QACT,KAAK,CAAC,cAAc,CAAC,CAAA;IAEvB,MAAM,WAAW,EAAE,CAAA;IACnB,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,YAAY,EAAE,CAAA;IACjD,MAAM,SAAS,GAAG,MAAM,SAAS,EAAE,CAAA;IACnC,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IAE1C,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,IAAI,CAAC,MAAM;YACT,GAAG,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAA;QACpF,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;IACpC,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,CAAC,MAAM;YACT,GAAG,CAAC,KAAK,CAAC,6EAA6E,CAAC,CAAA;QAC1F,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;IAClC,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;IAE/F,MAAM,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC9E,MAAM,oCAAoC,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAE1G,IAAI,CAAC,MAAM;QACT,GAAG,CAAC,IAAI,CAAC,mCAAmC,KAAK,WAAW,CAAC,CAAA;IAE/D,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IAE/D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,GAAG,CAAC,IAAI,CAAC,6BAA6B,WAAW,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAA;QACjE,cAAc,CAAC,WAAW,CAAC,CAAA;QAC3B,KAAK,CAAC,QAAQ,CAAC,CAAA;IACjB,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC"}
@@ -1,277 +0,0 @@
1
- import { createReadStream, statSync } from 'node:fs';
2
- import { platform as osPlatform } from 'node:os';
3
- import { join, posix, win32 } from 'node:path';
4
- import { cwd } from 'node:process';
5
- import { buffer as readBuffer } from 'node:stream/consumers';
6
- import { createBrotliCompress } from 'node:zlib';
7
- import { log, spinner as spinnerC } from '@clack/prompts';
8
- import { greaterOrEqual, parse } from '@std/semver';
9
- // @ts-expect-error - No type definitions available for micromatch
10
- import * as micromatch from 'micromatch';
11
- import * as tus from 'tus-js-client';
12
- import { encryptChecksumV2, encryptSourceV2 } from '../api/cryptoV2';
13
- import { findRoot, generateManifest, getAllPackagesDependencies, getLocalConfig, PACKNAME, sendEvent } from '../utils';
14
- // Check if file already exists on server
15
- async function fileExists(localConfig, filename) {
16
- try {
17
- const response = await fetch(`${localConfig.hostFilesApi}/files/read/attachments/${encodeURIComponent(filename)}`, {
18
- method: 'HEAD',
19
- });
20
- return response.ok;
21
- }
22
- catch {
23
- return false;
24
- }
25
- }
26
- // Minimum size for Brotli compression according to RFC
27
- // Files smaller than this won't be compressed with Brotli
28
- const BROTLI_MIN_SIZE = 8192;
29
- // Version required for Brotli support with .br extension
30
- const BROTLI_MIN_UPDATER_VERSION_V6 = '6.25.0';
31
- const BROTLI_MIN_UPDATER_VERSION_V7 = '7.0.35';
32
- // Check if the updater version supports .br extension
33
- async function getUpdaterVersion(uploadOptions) {
34
- const root = join(findRoot(cwd()), PACKNAME);
35
- const dependencies = await getAllPackagesDependencies(undefined, uploadOptions.packageJson || root);
36
- const updaterVersion = dependencies.get('@capgo/capacitor-updater');
37
- let coerced;
38
- try {
39
- coerced = updaterVersion ? parse(updaterVersion) : undefined;
40
- }
41
- catch {
42
- coerced = undefined;
43
- }
44
- if (!updaterVersion || !coerced)
45
- return { version: null, supportsBrotliV2: false };
46
- // Brotli is supported in updater versions >= 6.25.0 (v6) or >= 7.0.35 (v7)
47
- const isV6Compatible = coerced.major === 6 && greaterOrEqual(coerced, parse(BROTLI_MIN_UPDATER_VERSION_V6));
48
- const isV7Compatible = coerced.major >= 7 && greaterOrEqual(coerced, parse(BROTLI_MIN_UPDATER_VERSION_V7));
49
- const supportsBrotliV2 = isV6Compatible || isV7Compatible;
50
- return { version: `${coerced.major}.${coerced.minor}.${coerced.patch}`, supportsBrotliV2 };
51
- }
52
- // Check if a file should be excluded from brotli compression
53
- function shouldExcludeFromBrotli(filePath, noBrotliPatterns) {
54
- if (!noBrotliPatterns) {
55
- return false;
56
- }
57
- const patterns = noBrotliPatterns.split(',').map(p => p.trim()).filter(p => !!p);
58
- if (patterns.length === 0) {
59
- return false;
60
- }
61
- return micromatch.isMatch(filePath, patterns);
62
- }
63
- // Function to determine if a file should use Brotli compression (for version >= 7.0.37)
64
- async function shouldUseBrotli(filePath, filePathUnix, options) {
65
- const stats = statSync(filePath);
66
- const fileSize = stats.size;
67
- const originalBuffer = await readBuffer(createReadStream(filePath));
68
- if (fileSize === 0) {
69
- // Empty files - just return the original content (which is empty)
70
- return { buffer: originalBuffer, useBrotli: false };
71
- }
72
- // Skip brotli if file matches exclusion patterns
73
- if (shouldExcludeFromBrotli(filePathUnix, options.noBrotliPatterns)) {
74
- log.info(`Skipping brotli for excluded file: ${filePathUnix}`);
75
- // Don't compress excluded files - just return the original content
76
- return { buffer: originalBuffer, useBrotli: false };
77
- }
78
- // Skip brotli for files smaller than RFC minimum size
79
- if (fileSize < BROTLI_MIN_SIZE) {
80
- // Don't compress small files - just return the original content
81
- return { buffer: originalBuffer, useBrotli: false };
82
- }
83
- try {
84
- // Try Brotli compression
85
- const compressedBuffer = await readBuffer(createReadStream(filePath).pipe(createBrotliCompress({})));
86
- // If compression isn't effective, don't use Brotli and don't compress
87
- if (compressedBuffer.length >= fileSize - 10) {
88
- log.info(`Brotli not effective for ${filePathUnix} (${fileSize} bytes), using original file`);
89
- return { buffer: originalBuffer, useBrotli: false };
90
- }
91
- // Brotli compression worked well
92
- return { buffer: compressedBuffer, useBrotli: true };
93
- }
94
- catch (error) {
95
- log.warn(`Brotli compression failed for ${filePath}: ${error}, using original file`);
96
- return { buffer: originalBuffer, useBrotli: false };
97
- }
98
- }
99
- export async function prepareBundlePartialFiles(path, apikey, orgId, appid, encryptionMethod, finalKeyData) {
100
- const spinner = spinnerC();
101
- spinner.start(encryptionMethod !== 'v2' ? 'Generating the update manifest' : 'Generating the update manifest with v2 encryption');
102
- const manifest = await generateManifest(path);
103
- if (encryptionMethod === 'v2') {
104
- for (const file of manifest) {
105
- file.hash = encryptChecksumV2(file.hash, finalKeyData);
106
- }
107
- }
108
- spinner.stop('Manifest generated successfully');
109
- await sendEvent(apikey, {
110
- channel: 'partial-update',
111
- event: 'Generate manifest',
112
- icon: '📂',
113
- user_id: orgId,
114
- tags: {
115
- 'app-id': appid,
116
- },
117
- notify: false,
118
- });
119
- return manifest;
120
- }
121
- function convertToUnixPath(windowsPath) {
122
- if (osPlatform() !== 'win32') {
123
- return windowsPath;
124
- }
125
- const normalizedPath = win32.normalize(windowsPath);
126
- return normalizedPath.split(win32.sep).join(posix.sep);
127
- }
128
- // Properly encode path segments while preserving slashes
129
- function encodePathSegments(path) {
130
- const result = path.split('/').map(segment => encodeURIComponent(segment)).join('/');
131
- // if has space print it
132
- if (path.includes(' ')) {
133
- log.warn(`File "${path}" contains spaces in its name.`);
134
- }
135
- return result;
136
- }
137
- export async function uploadPartial(apikey, manifest, path, appId, bundleName, orgId, encryptionOptions, options) {
138
- const spinner = spinnerC();
139
- spinner.start('Preparing partial update with TUS protocol');
140
- const startTime = performance.now();
141
- const localConfig = await getLocalConfig();
142
- // Check the updater version and Brotli support
143
- const { version, supportsBrotliV2 } = await getUpdaterVersion(options);
144
- // Check for incompatible options with older updater versions
145
- if (!supportsBrotliV2) {
146
- throw new Error(`Your project is using an older version of @capgo/capacitor-updater (${version || 'unknown'}). To use Delta updates, please upgrade to version ${BROTLI_MIN_UPDATER_VERSION_V6} (v6) or ${BROTLI_MIN_UPDATER_VERSION_V7} (v7) or higher.`);
147
- }
148
- else {
149
- // Only newer versions can use Brotli with .br extension
150
- if (options.disableBrotli) {
151
- log.info('Brotli compression disabled by user request');
152
- }
153
- else {
154
- spinner.message(`Using .br extension for compatible files (updater ${version})`);
155
- if (options.noBrotliPatterns) {
156
- log.info(`Files matching patterns (${options.noBrotliPatterns}) will be excluded from brotli compression`);
157
- }
158
- log.info(`Files smaller than ${BROTLI_MIN_SIZE} bytes will be excluded from brotli compression (Brotli RFC minimum)`);
159
- }
160
- }
161
- // Check if any files have spaces in their names
162
- const filesWithSpaces = manifest.filter(file => file.file.includes(' '));
163
- if (filesWithSpaces.length > 0) {
164
- throw new Error(`Files with spaces in their names (${filesWithSpaces.map(f => f.file).join(', ')}). Please rename the files.`);
165
- }
166
- let uploadedFiles = 0;
167
- const totalFiles = manifest.length;
168
- let brFilesCount = 0;
169
- try {
170
- const uploadFiles = manifest.map(async (file) => {
171
- const finalFilePath = join(path, file.file);
172
- const filePathUnix = convertToUnixPath(file.file);
173
- let fileBuffer;
174
- let isBrotli = false;
175
- // For versions >= 7.0.37, allow user options
176
- if (options.disableBrotli) {
177
- // User explicitly disabled Brotli, don't compress at all
178
- fileBuffer = await readBuffer(createReadStream(finalFilePath));
179
- isBrotli = false;
180
- }
181
- else {
182
- // Normal case: use Brotli when appropriate
183
- const result = await shouldUseBrotli(finalFilePath, filePathUnix, options);
184
- fileBuffer = result.buffer;
185
- isBrotli = result.useBrotli;
186
- }
187
- let finalBuffer = fileBuffer;
188
- if (encryptionOptions) {
189
- finalBuffer = encryptSourceV2(fileBuffer, encryptionOptions.sessionKey, encryptionOptions.ivSessionKey);
190
- }
191
- // Determine the upload path (with or without .br extension)
192
- let uploadPathUnix = filePathUnix;
193
- // Only add .br extension if file was actually compressed with brotli
194
- if (isBrotli) {
195
- uploadPathUnix = `${filePathUnix}.br`;
196
- brFilesCount++;
197
- }
198
- const filePathUnixSafe = encodePathSegments(uploadPathUnix);
199
- const filename = `orgs/${orgId}/apps/${appId}/delta/${file.hash}_${filePathUnixSafe}`;
200
- // Check if file already exists
201
- if (await fileExists(localConfig, filename)) {
202
- uploadedFiles++;
203
- return Promise.resolve({
204
- file_name: filePathUnixSafe,
205
- s3_path: filename,
206
- file_hash: file.hash,
207
- });
208
- }
209
- return new Promise((resolve, reject) => {
210
- const upload = new tus.Upload(finalBuffer, {
211
- endpoint: `${localConfig.hostFilesApi}/files/upload/attachments/`,
212
- chunkSize: options.tusChunkSize,
213
- metadata: {
214
- filename,
215
- },
216
- headers: {
217
- Authorization: apikey,
218
- },
219
- onError(error) {
220
- log.info(`Failed to upload ${filePathUnix}: ${error}`);
221
- reject(error);
222
- },
223
- onProgress() {
224
- const percentage = ((uploadedFiles / totalFiles) * 100).toFixed(2);
225
- spinner.message(`Uploading partial update: ${percentage}%`);
226
- },
227
- onSuccess() {
228
- uploadedFiles++;
229
- resolve({
230
- file_name: filePathUnixSafe,
231
- s3_path: filename,
232
- file_hash: file.hash,
233
- });
234
- },
235
- });
236
- upload.start();
237
- });
238
- });
239
- const results = await Promise.all(uploadFiles);
240
- const endTime = performance.now();
241
- const uploadTime = ((endTime - startTime) / 1000).toFixed(2);
242
- spinner.stop(`Partial update uploaded successfully 💪 in (${uploadTime} seconds)`);
243
- if (brFilesCount > 0) {
244
- log.info(`${brFilesCount} of ${totalFiles} files were compressed with brotli and use .br extension`);
245
- }
246
- await sendEvent(apikey, {
247
- channel: 'app',
248
- event: `App Partial TUS done${brFilesCount > 0 ? ' with .br extension' : ''}`,
249
- icon: '⏫',
250
- user_id: orgId,
251
- tags: {
252
- 'app-id': appId,
253
- },
254
- notify: false,
255
- });
256
- await sendEvent(apikey, {
257
- channel: 'performance',
258
- event: 'Partial upload performance',
259
- icon: '🚄',
260
- user_id: orgId,
261
- tags: {
262
- 'app-id': appId,
263
- 'time': uploadTime,
264
- },
265
- notify: false,
266
- });
267
- return results;
268
- }
269
- catch (error) {
270
- const endTime = performance.now();
271
- const uploadTime = ((endTime - startTime) / 1000).toFixed(2);
272
- spinner.stop(`Failed to upload Partial bundle (after ${uploadTime} seconds)`);
273
- log.info(`Error uploading partial update: ${error}, This is not a critical error, the bundle has been uploaded without the partial files`);
274
- return null;
275
- }
276
- }
277
- //# sourceMappingURL=partial.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"partial.js","sourceRoot":"","sources":["../../../src/bundle/partial.ts"],"names":[],"mappings":"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"}
@@ -1,70 +0,0 @@
1
- import { intro, log, outro } from '@clack/prompts';
2
- import { checkAppExistsAndHasPermissionOrgErr } from '../api/app';
3
- import { checkVersionNotUsedInChannel } from '../api/channels';
4
- import { getVersionData } from '../api/versions';
5
- import { checkPlanValid, createSupabaseClient, findSavedKey, formatError, getAppId, getBundleVersion, getConfig, getOrganizationId, OrganizationPerm, sendEvent, verifyUser, } from '../utils';
6
- export async function unlinkDeviceInternal(channel, appId, options, silent = false) {
7
- if (!silent)
8
- intro('Unlink bundle');
9
- try {
10
- const enrichedOptions = {
11
- ...options,
12
- apikey: options.apikey || findSavedKey(),
13
- };
14
- const extConfig = await getConfig();
15
- const resolvedAppId = getAppId(appId, extConfig?.config);
16
- const packVersion = getBundleVersion('', options.packageJson);
17
- const bundle = enrichedOptions.bundle || packVersion;
18
- if (!enrichedOptions.apikey) {
19
- if (!silent)
20
- log.error('Missing API key, you need to provide an API key to upload your bundle');
21
- throw new Error('Missing API key');
22
- }
23
- if (!resolvedAppId) {
24
- if (!silent)
25
- log.error('Missing argument, you need to provide an appId, or be in a capacitor project');
26
- throw new Error('Missing appId');
27
- }
28
- if (!bundle) {
29
- if (!silent)
30
- log.error('Missing argument, you need to provide a bundle, or be in a capacitor project');
31
- throw new Error('Missing bundle');
32
- }
33
- if (!channel) {
34
- if (!silent)
35
- log.error('Missing argument, you need to provide a channel');
36
- throw new Error('Missing channel');
37
- }
38
- const supabase = await createSupabaseClient(enrichedOptions.apikey, enrichedOptions.supaHost, enrichedOptions.supaAnon);
39
- const [userId, orgId] = await Promise.all([
40
- verifyUser(supabase, enrichedOptions.apikey, ['all', 'write']),
41
- getOrganizationId(supabase, resolvedAppId),
42
- ]);
43
- await checkAppExistsAndHasPermissionOrgErr(supabase, enrichedOptions.apikey, resolvedAppId, OrganizationPerm.write, silent);
44
- await checkPlanValid(supabase, orgId, enrichedOptions.apikey, resolvedAppId);
45
- const versionData = await getVersionData(supabase, resolvedAppId, bundle, { silent });
46
- await checkVersionNotUsedInChannel(supabase, resolvedAppId, versionData, { silent });
47
- await sendEvent(enrichedOptions.apikey, {
48
- channel: 'bundle',
49
- event: 'Unlink bundle',
50
- icon: '✅',
51
- user_id: userId,
52
- tags: {
53
- 'app-id': resolvedAppId,
54
- },
55
- notify: false,
56
- }).catch(() => { });
57
- if (!silent)
58
- outro('Done ✅');
59
- return true;
60
- }
61
- catch (error) {
62
- if (!silent)
63
- log.error(`Unknown error ${formatError(error)}`);
64
- throw error instanceof Error ? error : new Error(String(error));
65
- }
66
- }
67
- export async function unlinkDevice(channel, appId, options) {
68
- await unlinkDeviceInternal(channel, appId, options, false);
69
- }
70
- //# sourceMappingURL=unlink.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"unlink.js","sourceRoot":"","sources":["../../../src/bundle/unlink.ts"],"names":[],"mappings":"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"}