@otakit/cli 1.1.2 → 1.2.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 (46) hide show
  1. package/dist/commands/compatibility.d.ts +3 -0
  2. package/dist/commands/compatibility.d.ts.map +1 -0
  3. package/dist/commands/compatibility.js +40 -0
  4. package/dist/commands/compatibility.js.map +1 -0
  5. package/dist/commands/generate-encryption-key.d.ts +3 -0
  6. package/dist/commands/generate-encryption-key.d.ts.map +1 -0
  7. package/dist/commands/generate-encryption-key.js +31 -0
  8. package/dist/commands/generate-encryption-key.js.map +1 -0
  9. package/dist/commands/release.d.ts.map +1 -1
  10. package/dist/commands/release.js +7 -4
  11. package/dist/commands/release.js.map +1 -1
  12. package/dist/commands/releases.d.ts.map +1 -1
  13. package/dist/commands/releases.js +2 -1
  14. package/dist/commands/releases.js.map +1 -1
  15. package/dist/commands/upload.d.ts.map +1 -1
  16. package/dist/commands/upload.js +49 -1
  17. package/dist/commands/upload.js.map +1 -1
  18. package/dist/commands/whoami.d.ts.map +1 -1
  19. package/dist/commands/whoami.js +1 -4
  20. package/dist/commands/whoami.js.map +1 -1
  21. package/dist/index.js +4 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/lib/api.d.ts +18 -1
  24. package/dist/lib/api.d.ts.map +1 -1
  25. package/dist/lib/api.js +9 -2
  26. package/dist/lib/api.js.map +1 -1
  27. package/dist/lib/compat-check.d.ts +16 -0
  28. package/dist/lib/compat-check.d.ts.map +1 -0
  29. package/dist/lib/compat-check.js +26 -0
  30. package/dist/lib/compat-check.js.map +1 -0
  31. package/dist/lib/config.d.ts.map +1 -1
  32. package/dist/lib/config.js +2 -10
  33. package/dist/lib/config.js.map +1 -1
  34. package/dist/lib/crypto.d.ts +32 -0
  35. package/dist/lib/crypto.d.ts.map +1 -0
  36. package/dist/lib/crypto.js +67 -0
  37. package/dist/lib/crypto.js.map +1 -0
  38. package/dist/lib/native-deps.d.ts +42 -0
  39. package/dist/lib/native-deps.d.ts.map +1 -0
  40. package/dist/lib/native-deps.js +233 -0
  41. package/dist/lib/native-deps.js.map +1 -0
  42. package/dist/lib/upload-workflow.d.ts +12 -0
  43. package/dist/lib/upload-workflow.d.ts.map +1 -1
  44. package/dist/lib/upload-workflow.js +51 -7
  45. package/dist/lib/upload-workflow.js.map +1 -1
  46. package/package.json +6 -4
@@ -0,0 +1,32 @@
1
+ export declare const ENCRYPTION_ALG = "AES-256-GCM";
2
+ export interface BundleEncryptionParams {
3
+ alg: string;
4
+ kid: string;
5
+ wrapNonce: string;
6
+ wrappedDek: string;
7
+ nonce: string;
8
+ }
9
+ /**
10
+ * Derive the key ID from a bundle encryption key: first 16 hex chars of
11
+ * sha256(key bytes). Must match generate-encryption-key output.
12
+ */
13
+ export declare function deriveKid(key: Buffer): string;
14
+ export declare function generateEncryptionKey(): {
15
+ kid: string;
16
+ key: Buffer;
17
+ };
18
+ export declare function parseEncryptionKey(base64: string): Buffer;
19
+ /**
20
+ * Wrap a per-bundle DEK under the app KEK with AES-256-GCM.
21
+ * Returns base64 wrapNonce and wrappedDek (ciphertext with tag appended).
22
+ */
23
+ export declare function wrapDek(kek: Buffer, dek: Buffer): {
24
+ wrapNonce: string;
25
+ wrappedDek: string;
26
+ };
27
+ /**
28
+ * Encrypt a file with AES-256-GCM under a fresh random DEK, streaming
29
+ * plaintext through the cipher and appending the GCM tag to the output.
30
+ */
31
+ export declare function encryptFile(kek: Buffer, inputPath: string, outputPath: string): Promise<BundleEncryptionParams>;
32
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/lib/crypto.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,cAAc,gBAAgB,CAAC;AAE5C,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,qBAAqB,IAAI;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAGpE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQzD;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAQ3F;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,sBAAsB,CAAC,CAyBjC"}
@@ -0,0 +1,67 @@
1
+ import { createCipheriv, createHash, randomBytes } from 'node:crypto';
2
+ import { createReadStream, createWriteStream } from 'node:fs';
3
+ import { pipeline } from 'node:stream/promises';
4
+ import { Transform } from 'node:stream';
5
+ const ALGORITHM = 'aes-256-gcm';
6
+ const NONCE_LENGTH = 12;
7
+ const KEY_LENGTH = 32;
8
+ export const ENCRYPTION_ALG = 'AES-256-GCM';
9
+ /**
10
+ * Derive the key ID from a bundle encryption key: first 16 hex chars of
11
+ * sha256(key bytes). Must match generate-encryption-key output.
12
+ */
13
+ export function deriveKid(key) {
14
+ return createHash('sha256').update(key).digest('hex').slice(0, 16);
15
+ }
16
+ export function generateEncryptionKey() {
17
+ const key = randomBytes(KEY_LENGTH);
18
+ return { kid: deriveKid(key), key };
19
+ }
20
+ export function parseEncryptionKey(base64) {
21
+ const key = Buffer.from(base64.trim(), 'base64');
22
+ if (key.length !== KEY_LENGTH) {
23
+ throw new Error(`Invalid encryption key: expected ${KEY_LENGTH} bytes (base64), got ${key.length} bytes.`);
24
+ }
25
+ return key;
26
+ }
27
+ /**
28
+ * Wrap a per-bundle DEK under the app KEK with AES-256-GCM.
29
+ * Returns base64 wrapNonce and wrappedDek (ciphertext with tag appended).
30
+ */
31
+ export function wrapDek(kek, dek) {
32
+ const wrapNonce = randomBytes(NONCE_LENGTH);
33
+ const cipher = createCipheriv(ALGORITHM, kek, wrapNonce);
34
+ const wrapped = Buffer.concat([cipher.update(dek), cipher.final(), cipher.getAuthTag()]);
35
+ return {
36
+ wrapNonce: wrapNonce.toString('base64'),
37
+ wrappedDek: wrapped.toString('base64'),
38
+ };
39
+ }
40
+ /**
41
+ * Encrypt a file with AES-256-GCM under a fresh random DEK, streaming
42
+ * plaintext through the cipher and appending the GCM tag to the output.
43
+ */
44
+ export async function encryptFile(kek, inputPath, outputPath) {
45
+ const dek = randomBytes(KEY_LENGTH);
46
+ const nonce = randomBytes(NONCE_LENGTH);
47
+ const cipher = createCipheriv(ALGORITHM, dek, nonce);
48
+ const appendTag = new Transform({
49
+ transform(chunk, _encoding, callback) {
50
+ callback(null, chunk);
51
+ },
52
+ flush(callback) {
53
+ // cipher.final() has run by the time flush is reached in the pipeline
54
+ callback(null, cipher.getAuthTag());
55
+ },
56
+ });
57
+ await pipeline(createReadStream(inputPath), cipher, appendTag, createWriteStream(outputPath));
58
+ const { wrapNonce, wrappedDek } = wrapDek(kek, dek);
59
+ return {
60
+ alg: ENCRYPTION_ALG,
61
+ kid: deriveKid(kek),
62
+ wrapNonce,
63
+ wrappedDek,
64
+ nonce: nonce.toString('base64'),
65
+ };
66
+ }
67
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/lib/crypto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * A dependency that ships native (iOS/Android) code, captured at upload time
3
+ * so later uploads can detect native changes that require a store build.
4
+ */
5
+ export interface NativePackage {
6
+ name: string;
7
+ version: string;
8
+ requestedVersion?: string;
9
+ iosChecksum?: string;
10
+ androidChecksum?: string;
11
+ }
12
+ export interface CollectNativePackagesOptions {
13
+ /** Path to the project package.json. Defaults to ./package.json. */
14
+ packageJsonPath?: string;
15
+ /** Path to the resolved node_modules. Defaults to a sibling of package.json. */
16
+ nodeModulesPath?: string;
17
+ }
18
+ export declare function collectNativePackages(options?: CollectNativePackagesOptions): NativePackage[];
19
+ export type CompatibilityStatus = 'compatible' | 'incompatible' | 'skipped';
20
+ export type FindingKind = 'new_plugin' | 'native_code_changed' | 'version_mismatch' | 'range_changed' | 'removed' | 'unchanged';
21
+ export interface CompatibilityFinding {
22
+ name: string;
23
+ kind: FindingKind;
24
+ incompatible: boolean;
25
+ localVersion?: string;
26
+ remoteVersion?: string;
27
+ note?: string;
28
+ }
29
+ export interface CompatibilityResult {
30
+ status: CompatibilityStatus;
31
+ findings: CompatibilityFinding[];
32
+ }
33
+ /**
34
+ * Compare the local native set against the channel's current bundle.
35
+ *
36
+ * The checksum is the authoritative "native code actually changed" signal;
37
+ * a changed requested-version range that resolves to identical native code
38
+ * is reported as informational only.
39
+ */
40
+ export declare function compareNative(local: NativePackage[], remote: NativePackage[] | null | undefined): CompatibilityResult;
41
+ export declare function formatCompatibilityReport(result: CompatibilityResult): string;
42
+ //# sourceMappingURL=native-deps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-deps.d.ts","sourceRoot":"","sources":["../../src/lib/native-deps.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,4BAA4B;IAC3C,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gFAAgF;IAChF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AASD,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,4BAAiC,GAAG,aAAa,EAAE,CAqEjG;AAgDD,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,cAAc,GAAG,SAAS,CAAC;AAE5E,MAAM,MAAM,WAAW,GACnB,YAAY,GACZ,qBAAqB,GACrB,kBAAkB,GAClB,eAAe,GACf,SAAS,GACT,WAAW,CAAC;AAEhB,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,EAAE,oBAAoB,EAAE,CAAC;CAClC;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,aAAa,EAAE,EACtB,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,GAAG,SAAS,GACzC,mBAAmB,CAsCrB;AA4ED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAqC7E"}
@@ -0,0 +1,233 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { existsSync, readFileSync, readdirSync } from 'node:fs';
3
+ import { dirname, join, relative, resolve, sep } from 'node:path';
4
+ import semver from 'semver';
5
+ import { CliError } from './errors.js';
6
+ const NATIVE_FILE_REGEX = /\.(java|swift|kt|scala)$/;
7
+ const IOS_SOURCE_REGEX = /\.swift$/;
8
+ const ANDROID_SOURCE_REGEX = /\.(java|kt|scala)$/;
9
+ const IOS_CONFIG_REGEX = /(\.podspec|(^|\/)Package\.swift)$/;
10
+ const ANDROID_CONFIG_REGEX = /(^|\/)build\.gradle(\.kts)?$/;
11
+ const SKIPPED_DIRECTORIES = new Set(['node_modules', '.git', 'dist', 'build']);
12
+ export function collectNativePackages(options = {}) {
13
+ const packageJsonPath = resolve(options.packageJsonPath ?? join(process.cwd(), 'package.json'));
14
+ if (!existsSync(packageJsonPath)) {
15
+ throw new CliError(`package.json not found at ${packageJsonPath} (use --package-json).`);
16
+ }
17
+ const nodeModulesPath = resolve(options.nodeModulesPath ?? join(dirname(packageJsonPath), 'node_modules'));
18
+ if (!existsSync(nodeModulesPath)) {
19
+ throw new CliError(`node_modules not found at ${nodeModulesPath} (use --node-modules).`);
20
+ }
21
+ const rootPackage = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
22
+ const dependencies = rootPackage.dependencies ?? {};
23
+ const nativePackages = [];
24
+ for (const [name, requestedVersion] of Object.entries(dependencies)) {
25
+ const packageDir = join(nodeModulesPath, ...name.split('/'));
26
+ const packageJson = join(packageDir, 'package.json');
27
+ if (!existsSync(packageJson)) {
28
+ continue;
29
+ }
30
+ let installedVersion;
31
+ try {
32
+ const parsed = JSON.parse(readFileSync(packageJson, 'utf-8'));
33
+ if (typeof parsed.version !== 'string' || parsed.version.length === 0) {
34
+ continue;
35
+ }
36
+ installedVersion = parsed.version;
37
+ }
38
+ catch {
39
+ continue;
40
+ }
41
+ const files = listFilesRecursively(packageDir);
42
+ const relativePaths = files
43
+ .map((file) => relative(packageDir, file).split(sep).join('/'))
44
+ .sort();
45
+ if (!relativePaths.some((path) => NATIVE_FILE_REGEX.test(path))) {
46
+ continue;
47
+ }
48
+ const iosChecksum = checksumForPlatform(packageDir, relativePaths, IOS_SOURCE_REGEX, IOS_CONFIG_REGEX);
49
+ const androidChecksum = checksumForPlatform(packageDir, relativePaths, ANDROID_SOURCE_REGEX, ANDROID_CONFIG_REGEX);
50
+ nativePackages.push({
51
+ name,
52
+ version: installedVersion,
53
+ requestedVersion,
54
+ ...(iosChecksum ? { iosChecksum } : {}),
55
+ ...(androidChecksum ? { androidChecksum } : {}),
56
+ });
57
+ }
58
+ return nativePackages.sort((a, b) => a.name.localeCompare(b.name));
59
+ }
60
+ function listFilesRecursively(directory) {
61
+ const files = [];
62
+ const entries = readdirSync(directory, { withFileTypes: true });
63
+ for (const entry of entries) {
64
+ if (entry.isSymbolicLink()) {
65
+ continue;
66
+ }
67
+ const fullPath = join(directory, entry.name);
68
+ if (entry.isDirectory()) {
69
+ if (!SKIPPED_DIRECTORIES.has(entry.name)) {
70
+ files.push(...listFilesRecursively(fullPath));
71
+ }
72
+ }
73
+ else if (entry.isFile()) {
74
+ files.push(fullPath);
75
+ }
76
+ }
77
+ return files;
78
+ }
79
+ /**
80
+ * SHA-256 over the platform's sorted native + config files, with each file's
81
+ * relative path mixed into the hash so renames are detected.
82
+ */
83
+ function checksumForPlatform(packageDir, sortedRelativePaths, sourceRegex, configRegex) {
84
+ const platformPaths = sortedRelativePaths.filter((path) => sourceRegex.test(path) || configRegex.test(path));
85
+ if (platformPaths.length === 0) {
86
+ return undefined;
87
+ }
88
+ const hash = createHash('sha256');
89
+ for (const path of platformPaths) {
90
+ hash.update(path);
91
+ hash.update('\0');
92
+ hash.update(readFileSync(join(packageDir, path)));
93
+ hash.update('\0');
94
+ }
95
+ return hash.digest('hex');
96
+ }
97
+ /**
98
+ * Compare the local native set against the channel's current bundle.
99
+ *
100
+ * The checksum is the authoritative "native code actually changed" signal;
101
+ * a changed requested-version range that resolves to identical native code
102
+ * is reported as informational only.
103
+ */
104
+ export function compareNative(local, remote) {
105
+ if (remote === null || remote === undefined) {
106
+ return { status: 'skipped', findings: [] };
107
+ }
108
+ const remoteByName = new Map(remote.map((entry) => [entry.name, entry]));
109
+ const findings = [];
110
+ for (const pkg of local) {
111
+ const remotePkg = remoteByName.get(pkg.name);
112
+ remoteByName.delete(pkg.name);
113
+ if (!remotePkg) {
114
+ findings.push({
115
+ name: pkg.name,
116
+ kind: 'new_plugin',
117
+ incompatible: true,
118
+ localVersion: pkg.version,
119
+ note: 'native plugin not present in the current release',
120
+ });
121
+ continue;
122
+ }
123
+ findings.push(compareEntry(pkg, remotePkg));
124
+ }
125
+ for (const remotePkg of remoteByName.values()) {
126
+ findings.push({
127
+ name: remotePkg.name,
128
+ kind: 'removed',
129
+ incompatible: false,
130
+ remoteVersion: remotePkg.version,
131
+ note: 'removed locally (safe to ship OTA)',
132
+ });
133
+ }
134
+ const status = findings.some((finding) => finding.incompatible) ? 'incompatible' : 'compatible';
135
+ return { status, findings };
136
+ }
137
+ function compareEntry(local, remote) {
138
+ const base = {
139
+ name: local.name,
140
+ localVersion: local.version,
141
+ remoteVersion: remote.version,
142
+ };
143
+ // Native code added for a platform the baseline never had (e.g. a plugin
144
+ // gains Android sources): devices on that platform need a store build,
145
+ // same as a brand-new plugin. The reverse (remote-only checksum) is a
146
+ // removal and stays compatible.
147
+ const addedPlatforms = [
148
+ ['ios', local.iosChecksum, remote.iosChecksum],
149
+ ['android', local.androidChecksum, remote.androidChecksum],
150
+ ].filter(([, localSum, remoteSum]) => localSum !== undefined && remoteSum === undefined);
151
+ if (addedPlatforms.length > 0) {
152
+ return {
153
+ ...base,
154
+ kind: 'native_code_changed',
155
+ incompatible: true,
156
+ note: `native code added for ${addedPlatforms.map(([platform]) => platform).join(' + ')} (not in the current release)`,
157
+ };
158
+ }
159
+ const comparablePlatforms = [
160
+ [local.iosChecksum, remote.iosChecksum],
161
+ [local.androidChecksum, remote.androidChecksum],
162
+ ].filter(([localSum, remoteSum]) => localSum !== undefined && remoteSum !== undefined);
163
+ if (comparablePlatforms.length > 0) {
164
+ const changed = comparablePlatforms.some(([localSum, remoteSum]) => localSum !== remoteSum);
165
+ if (changed) {
166
+ return {
167
+ ...base,
168
+ kind: 'native_code_changed',
169
+ incompatible: true,
170
+ note: 'native code differs from the current release',
171
+ };
172
+ }
173
+ if (local.requestedVersion !== remote.requestedVersion) {
174
+ return {
175
+ ...base,
176
+ kind: 'range_changed',
177
+ incompatible: false,
178
+ note: `requested range changed (${remote.requestedVersion ?? '?'} -> ${local.requestedVersion ?? '?'}) but native code is identical`,
179
+ };
180
+ }
181
+ return { ...base, kind: 'unchanged', incompatible: false };
182
+ }
183
+ // No comparable checksums (older baseline data) — fall back to versions.
184
+ if (!versionsIntersect(local, remote)) {
185
+ return {
186
+ ...base,
187
+ kind: 'version_mismatch',
188
+ incompatible: true,
189
+ note: 'installed native versions do not intersect',
190
+ };
191
+ }
192
+ return { ...base, kind: 'unchanged', incompatible: false };
193
+ }
194
+ function versionsIntersect(local, remote) {
195
+ const localRange = local.requestedVersion ?? local.version;
196
+ const remoteRange = remote.requestedVersion ?? remote.version;
197
+ try {
198
+ return semver.intersects(localRange, remoteRange, { includePrerelease: true });
199
+ }
200
+ catch {
201
+ return local.version === remote.version;
202
+ }
203
+ }
204
+ export function formatCompatibilityReport(result) {
205
+ if (result.status === 'skipped') {
206
+ return 'Compatibility check skipped: the current release has no native package baseline yet.';
207
+ }
208
+ const lines = [];
209
+ const rows = result.findings.map((finding) => [
210
+ finding.incompatible ? 'INCOMPATIBLE' : finding.kind === 'unchanged' ? 'ok' : 'info',
211
+ finding.name,
212
+ finding.localVersion ?? '-',
213
+ finding.remoteVersion ?? '-',
214
+ finding.note ?? finding.kind,
215
+ ]);
216
+ const header = ['status', 'package', 'local', 'remote', 'detail'];
217
+ const widths = header.map((title, column) => Math.max(title.length, ...rows.map((row) => row[column].length)));
218
+ const renderRow = (row) => row.map((cell, column) => cell.padEnd(widths[column])).join(' ');
219
+ lines.push(renderRow(header));
220
+ lines.push(widths.map((width) => '-'.repeat(width)).join(' '));
221
+ for (const row of rows) {
222
+ lines.push(renderRow(row));
223
+ }
224
+ if (rows.length === 0) {
225
+ lines.push('(no native packages detected)');
226
+ }
227
+ if (result.status === 'incompatible') {
228
+ lines.push('');
229
+ lines.push('These native changes require a new store build. Bump runtimeVersion and ship a native build before releasing this bundle OTA.');
230
+ }
231
+ return lines.join('\n');
232
+ }
233
+ //# sourceMappingURL=native-deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-deps.js","sourceRoot":"","sources":["../../src/lib/native-deps.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { ApiClient, Bundle } from './api.js';
2
+ import type { NativePackage } from './native-deps.js';
2
3
  export type VersionSource = 'flag' | 'env' | 'auto';
3
4
  export type ResolvedVersion = {
4
5
  value: string;
@@ -17,8 +18,19 @@ export type UploadWorkflowOptions = {
17
18
  version: string;
18
19
  runtimeVersion?: string;
19
20
  releaseChannel?: string | null;
21
+ nativePackages?: NativePackage[];
22
+ forceImmediate?: boolean;
23
+ encrypt?: boolean;
20
24
  onStatus?: (message: string) => void;
21
25
  };
26
+ export declare const ENCRYPTION_KEY_ENV = "OTAKIT_ENCRYPTION_KEY";
27
+ /**
28
+ * Resolve the bundle encryption key (KEK).
29
+ *
30
+ * Encryption is on when `--encrypt` is passed or when OTAKIT_ENCRYPTION_KEY
31
+ * is set in the environment; `--encrypt` without the env var is an error.
32
+ */
33
+ export declare function resolveEncryptionKey(encryptFlag: boolean | undefined): Buffer | null;
22
34
  export type UploadWorkflowResult = {
23
35
  bundle: Bundle;
24
36
  releaseChannel?: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"upload-workflow.d.ts","sourceRoot":"","sources":["../../src/lib/upload-workflow.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AA2BlD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAEpD,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7B,MAAM,CAiBR;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACA,OAAO,CAAC,eAAe,CAAC,CAyB1B;AAkCD,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,SAAS,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CAsD/B"}
1
+ {"version":3,"file":"upload-workflow.d.ts","sourceRoot":"","sources":["../../src/lib/upload-workflow.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAKlD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAyBtD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAEpD,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7B,MAAM,CAiBR;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACA,OAAO,CAAC,eAAe,CAAC,CAyB1B;AAkCD,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,SAAS,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC,CAAC;AAEF,eAAO,MAAM,kBAAkB,0BAA0B,CAAC;AAE1D;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAcpF;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CA2F/B"}
@@ -4,6 +4,7 @@ import { execFileSync } from 'node:child_process';
4
4
  import { randomUUID } from 'node:crypto';
5
5
  import { dirname, join, resolve } from 'node:path';
6
6
  import { tmpdir } from 'node:os';
7
+ import { encryptFile, parseEncryptionKey } from './crypto.js';
7
8
  import { CliError } from './errors.js';
8
9
  import { hashFile } from './hash.js';
9
10
  import { getCliUserAgent } from './version.js';
@@ -89,50 +90,93 @@ async function uploadFileToPresignedUrl(filePath, presignedUrl) {
89
90
  clearTimeout(timeoutId);
90
91
  }
91
92
  }
93
+ export const ENCRYPTION_KEY_ENV = 'OTAKIT_ENCRYPTION_KEY';
94
+ /**
95
+ * Resolve the bundle encryption key (KEK).
96
+ *
97
+ * Encryption is on when `--encrypt` is passed or when OTAKIT_ENCRYPTION_KEY
98
+ * is set in the environment; `--encrypt` without the env var is an error.
99
+ */
100
+ export function resolveEncryptionKey(encryptFlag) {
101
+ const raw = process.env[ENCRYPTION_KEY_ENV]?.trim();
102
+ if (encryptFlag && !raw) {
103
+ throw new CliError([
104
+ `--encrypt requires the ${ENCRYPTION_KEY_ENV} environment variable.`,
105
+ 'Generate a key with: otakit generate-encryption-key',
106
+ ].join('\n'));
107
+ }
108
+ if (!raw) {
109
+ return null;
110
+ }
111
+ return parseEncryptionKey(raw);
112
+ }
92
113
  export async function runUploadWorkflow(options) {
93
- const { api, sourcePath, version, runtimeVersion, releaseChannel, onStatus } = options;
114
+ const { api, sourcePath, version, runtimeVersion, releaseChannel, nativePackages, forceImmediate, encrypt, onStatus, } = options;
94
115
  validateBundleDirectory(sourcePath);
116
+ const encryptionKey = resolveEncryptionKey(encrypt);
95
117
  const tempZipPath = join(tmpdir(), `otakit-${version}-${randomUUID()}.zip`);
118
+ const tempEncPath = `${tempZipPath}.enc`;
96
119
  const cleanup = () => {
97
120
  try {
98
121
  unlinkSync(tempZipPath);
99
122
  }
100
- catch { }
123
+ catch {
124
+ // Best-effort cleanup — the temp zip may never have been created.
125
+ }
126
+ try {
127
+ unlinkSync(tempEncPath);
128
+ }
129
+ catch {
130
+ // Best-effort cleanup — the encrypted file may never have been created.
131
+ }
101
132
  process.exit(1);
102
133
  };
103
134
  process.on('SIGINT', cleanup);
104
135
  try {
105
136
  onStatus?.('Creating zip archive...');
106
137
  await createZip(sourcePath, tempZipPath);
138
+ let uploadPath = tempZipPath;
139
+ let encryption;
140
+ if (encryptionKey) {
141
+ onStatus?.('Encrypting bundle...');
142
+ encryption = await encryptFile(encryptionKey, tempZipPath, tempEncPath);
143
+ uploadPath = tempEncPath;
144
+ console.warn('\nBundle encryption requires manifest signing to be enabled on the server ' +
145
+ '(hosted default). Without signing, encryption parameters are unauthenticated.');
146
+ console.warn(`Ensure the installed app ships bundleKeys with kid ${encryption.kid}, or devices cannot decrypt this update.\n`);
147
+ }
107
148
  onStatus?.('Calculating SHA-256 checksum...');
108
- const sha256 = await hashFile(tempZipPath);
109
- const zipStat = await stat(tempZipPath);
149
+ const sha256 = await hashFile(uploadPath);
150
+ const uploadStat = await stat(uploadPath);
110
151
  onStatus?.('Requesting upload URL...');
111
152
  const initiated = await api.initiateUpload({
112
153
  version,
113
154
  runtimeVersion,
114
- size: zipStat.size,
155
+ size: uploadStat.size,
115
156
  sha256,
157
+ nativePackages,
158
+ encryption,
116
159
  });
117
160
  const expiresAt = new Date(initiated.expiresAt);
118
161
  if (expiresAt.getTime() - Date.now() < 60_000) {
119
162
  throw new CliError('Presigned upload URL has expired or is about to expire. Please retry.');
120
163
  }
121
164
  onStatus?.('Uploading bundle...');
122
- await uploadFileToPresignedUrl(tempZipPath, initiated.presignedUrl);
165
+ await uploadFileToPresignedUrl(uploadPath, initiated.presignedUrl);
123
166
  onStatus?.('Finalizing...');
124
167
  const bundle = await api.finalizeUpload({
125
168
  uploadId: initiated.uploadId,
126
169
  });
127
170
  if (releaseChannel !== undefined) {
128
171
  onStatus?.(`Releasing to ${releaseChannel ?? 'base channel'}...`);
129
- await api.release(releaseChannel, bundle.id);
172
+ await api.release(releaseChannel, bundle.id, { forceImmediate });
130
173
  }
131
174
  return { bundle, releaseChannel };
132
175
  }
133
176
  finally {
134
177
  process.off('SIGINT', cleanup);
135
178
  await removeFileIfExists(tempZipPath);
179
+ await removeFileIfExists(tempEncPath);
136
180
  }
137
181
  }
138
182
  function validateVersion(value, label) {
@@ -1 +1 @@
1
- {"version":3,"file":"upload-workflow.js","sourceRoot":"","sources":["../../src/lib/upload-workflow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upload-workflow.js","sourceRoot":"","sources":["../../src/lib/upload-workflow.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@otakit/cli",
3
- "version": "1.1.2",
3
+ "version": "1.2.0",
4
4
  "description": "CLI for uploading and releasing OtaKit OTA bundles",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -36,16 +36,18 @@
36
36
  "prepublishOnly": "npm run build"
37
37
  },
38
38
  "dependencies": {
39
- "yazl": "^2.5.1",
40
39
  "chalk": "^5.6.2",
41
40
  "commander": "^14.0.3",
42
41
  "dotenv": "^17.2.3",
43
- "ora": "^9.1.0"
42
+ "ora": "^9.1.0",
43
+ "semver": "^7.8.5",
44
+ "yazl": "^2.5.1"
44
45
  },
45
46
  "devDependencies": {
46
47
  "@eslint/js": "^9.18.0",
47
- "@types/yazl": "^2.4.5",
48
48
  "@types/node": "^25.2.0",
49
+ "@types/semver": "^7.7.1",
50
+ "@types/yazl": "^2.4.5",
49
51
  "eslint": "^9.39.2",
50
52
  "typescript": "^5.9.3",
51
53
  "typescript-eslint": "^8.32.1"