lim 0.19.4 → 0.20.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/README.md +16 -0
  2. package/dist/commands/gradle/build.d.ts +7 -0
  3. package/dist/commands/gradle/build.d.ts.map +1 -1
  4. package/dist/commands/gradle/build.js +66 -2
  5. package/dist/commands/gradle/build.js.map +1 -1
  6. package/dist/commands/xcode/run.d.ts +26 -0
  7. package/dist/commands/xcode/run.d.ts.map +1 -0
  8. package/dist/commands/xcode/run.js +134 -0
  9. package/dist/commands/xcode/run.js.map +1 -0
  10. package/dist/lib/android-keystore.d.ts +15 -0
  11. package/dist/lib/android-keystore.d.ts.map +1 -0
  12. package/dist/lib/android-keystore.js +65 -0
  13. package/dist/lib/android-keystore.js.map +1 -0
  14. package/dist/lib/android-keystore.test.d.ts +2 -0
  15. package/dist/lib/android-keystore.test.d.ts.map +1 -0
  16. package/dist/lib/android-keystore.test.js +43 -0
  17. package/dist/lib/android-keystore.test.js.map +1 -0
  18. package/dist/lib/auth.d.ts +1 -0
  19. package/dist/lib/auth.d.ts.map +1 -1
  20. package/dist/lib/auth.js +1 -0
  21. package/dist/lib/auth.js.map +1 -1
  22. package/dist/lib/backend.d.ts +32 -0
  23. package/dist/lib/backend.d.ts.map +1 -0
  24. package/dist/lib/backend.js +81 -0
  25. package/dist/lib/backend.js.map +1 -0
  26. package/dist/lib/backend.test.d.ts +2 -0
  27. package/dist/lib/backend.test.d.ts.map +1 -0
  28. package/dist/lib/backend.test.js +124 -0
  29. package/dist/lib/backend.test.js.map +1 -0
  30. package/dist/lib/gradle-build-options.d.ts +21 -0
  31. package/dist/lib/gradle-build-options.d.ts.map +1 -1
  32. package/dist/lib/gradle-build-options.js +41 -0
  33. package/dist/lib/gradle-build-options.js.map +1 -1
  34. package/dist/lib/gradle-build-options.test.d.ts +2 -0
  35. package/dist/lib/gradle-build-options.test.d.ts.map +1 -0
  36. package/dist/lib/gradle-build-options.test.js +63 -0
  37. package/dist/lib/gradle-build-options.test.js.map +1 -0
  38. package/dist/lib/gradle-signing.d.ts +44 -0
  39. package/dist/lib/gradle-signing.d.ts.map +1 -0
  40. package/dist/lib/gradle-signing.js +167 -0
  41. package/dist/lib/gradle-signing.js.map +1 -0
  42. package/dist/lib/gradle-signing.test.d.ts +2 -0
  43. package/dist/lib/gradle-signing.test.d.ts.map +1 -0
  44. package/dist/lib/gradle-signing.test.js +111 -0
  45. package/dist/lib/gradle-signing.test.js.map +1 -0
  46. package/package.json +9 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gradle-signing.js","sourceRoot":"","sources":["../../src/lib/gradle-signing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gradle-signing.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gradle-signing.test.d.ts","sourceRoot":"","sources":["../../src/lib/gradle-signing.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const fs = __importStar(require("node:fs"));
37
+ const os = __importStar(require("node:os"));
38
+ const path = __importStar(require("node:path"));
39
+ const gradle_signing_1 = require("./gradle-signing");
40
+ const backend = __importStar(require("./backend"));
41
+ describe('resolveApplicationId', () => {
42
+ let dir;
43
+ beforeEach(() => {
44
+ dir = fs.mkdtempSync(path.join(os.tmpdir(), 'lim-sign-'));
45
+ });
46
+ afterEach(() => {
47
+ fs.rmSync(dir, { recursive: true, force: true });
48
+ });
49
+ it('prefers the explicit flag over any detection', () => {
50
+ fs.writeFileSync(path.join(dir, 'app.json'), JSON.stringify({ expo: { android: { package: 'com.expo' } } }));
51
+ expect((0, gradle_signing_1.resolveApplicationId)({ explicit: 'com.flag', syncPath: dir })).toBe('com.flag');
52
+ });
53
+ it('reads the Expo android package, honoring --expo-app-dir', () => {
54
+ const appDir = path.join(dir, 'apps/mobile');
55
+ fs.mkdirSync(appDir, { recursive: true });
56
+ fs.writeFileSync(path.join(appDir, 'app.json'), JSON.stringify({ expo: { android: { package: 'com.expo' } } }));
57
+ expect((0, gradle_signing_1.resolveApplicationId)({ syncPath: dir, expoAppDir: 'apps/mobile' })).toBe('com.expo');
58
+ });
59
+ it('falls back to app/build.gradle in Groovy form', () => {
60
+ fs.mkdirSync(path.join(dir, 'app'), { recursive: true });
61
+ fs.writeFileSync(path.join(dir, 'app/build.gradle'), 'android {\n defaultConfig {\n applicationId "com.groovy"\n }\n}\n');
62
+ expect((0, gradle_signing_1.resolveApplicationId)({ syncPath: dir })).toBe('com.groovy');
63
+ });
64
+ it('parses the Kotlin DSL form, honoring --project-path', () => {
65
+ fs.mkdirSync(path.join(dir, 'android/app'), { recursive: true });
66
+ fs.writeFileSync(path.join(dir, 'android/app/build.gradle.kts'), 'applicationId = "com.kts"\n');
67
+ expect((0, gradle_signing_1.resolveApplicationId)({ syncPath: dir, projectPath: 'android' })).toBe('com.kts');
68
+ });
69
+ it('finds the conventional android/ layout without --project-path (bare React Native)', () => {
70
+ fs.mkdirSync(path.join(dir, 'android/app'), { recursive: true });
71
+ fs.writeFileSync(path.join(dir, 'android/app/build.gradle'), 'android {\n defaultConfig {\n applicationId "com.bare.rn"\n }\n}\n');
72
+ expect((0, gradle_signing_1.resolveApplicationId)({ syncPath: dir })).toBe('com.bare.rn');
73
+ });
74
+ it('skips commented-out applicationId lines', () => {
75
+ fs.mkdirSync(path.join(dir, 'app'), { recursive: true });
76
+ fs.writeFileSync(path.join(dir, 'app/build.gradle'), '// applicationId "com.old.name"\napplicationId "com.live.name" // was com.older\n');
77
+ expect((0, gradle_signing_1.resolveApplicationId)({ syncPath: dir })).toBe('com.live.name');
78
+ });
79
+ it('asks for --application-id when nothing is detectable', () => {
80
+ expect(() => (0, gradle_signing_1.resolveApplicationId)({ syncPath: dir })).toThrow(/--application-id/);
81
+ });
82
+ });
83
+ describe('saveProvidedKey', () => {
84
+ const client = {};
85
+ const provided = {
86
+ keystoreBase64: 'a2V5c3RvcmU=',
87
+ keystorePassword: 'store',
88
+ keyAlias: 'upload',
89
+ keyPassword: 'key',
90
+ };
91
+ beforeEach(() => {
92
+ jest.spyOn(backend, 'whoAmI').mockResolvedValue('org_1');
93
+ });
94
+ afterEach(() => jest.restoreAllMocks());
95
+ it('escrows a new key', async () => {
96
+ const put = jest.spyOn(backend, 'putSecret').mockResolvedValue({ data: { ...provided }, created: true });
97
+ await expect((0, gradle_signing_1.saveProvidedKey)(client, 'com.x', provided)).resolves.toBe(true);
98
+ expect(put).toHaveBeenCalledWith(client, 'org_1', 'androidSigningKey', 'com.x', provided);
99
+ });
100
+ it('accepts an identical already-escrowed key', async () => {
101
+ jest.spyOn(backend, 'putSecret').mockResolvedValue({ data: { ...provided }, created: false });
102
+ await expect((0, gradle_signing_1.saveProvidedKey)(client, 'com.x', provided)).resolves.toBe(false);
103
+ });
104
+ it('hard-fails when a DIFFERENT key is already escrowed', async () => {
105
+ jest
106
+ .spyOn(backend, 'putSecret')
107
+ .mockResolvedValue({ data: { ...provided, keystoreBase64: 'b3RoZXI=' }, created: false });
108
+ await expect((0, gradle_signing_1.saveProvidedKey)(client, 'com.x', provided)).rejects.toThrow(/already has a different upload key/);
109
+ });
110
+ });
111
+ //# sourceMappingURL=gradle-signing.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gradle-signing.test.js","sourceRoot":"","sources":["../../src/lib/gradle-signing.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "lim",
3
- "version": "0.19.4",
4
- "description": "Use remote XCode, iOS Simulator, Android Emulator and more to build and test apps from Linux, Windows or macOS.",
3
+ "version": "0.20.0",
4
+ "description": "Use remote XCode, Gradle, iOS Simulator, Android Emulator and more to build and test apps from Linux, Windows or macOS.",
5
5
  "bin": {
6
6
  "lim": "./bin/run.js"
7
7
  },
@@ -25,21 +25,26 @@
25
25
  "test": "jest"
26
26
  },
27
27
  "dependencies": {
28
- "@limrun/api": "0.42.2",
28
+ "@limrun/api": "0.43.1",
29
29
  "@oclif/core": "^4",
30
30
  "cli-progress": "^3.12.0",
31
31
  "cli-table3": "^0.6.5",
32
32
  "dotenv": "^17.4.2",
33
33
  "js-yaml": "^4.1.0",
34
+ "node-forge": "^1.4.0",
34
35
  "open": "^10.1.0",
35
36
  "prompts": "^2.4.2"
36
37
  },
37
38
  "devDependencies": {
38
39
  "@oclif/test": "^4",
39
40
  "@types/cli-progress": "^3.11.6",
41
+ "@types/jest": "^30.0.0",
40
42
  "@types/js-yaml": "^4.0.9",
41
43
  "@types/node": "^22",
44
+ "@types/node-forge": "^1.3.14",
42
45
  "@types/prompts": "^2.4.9",
46
+ "jest": "^30.4.2",
47
+ "ts-jest": "^29.4.11",
43
48
  "typescript": "^5.8.3"
44
49
  },
45
50
  "oclif": {
@@ -70,7 +75,7 @@
70
75
  "description": "Install Limrun skills for AI coding agents (Claude Code, Cursor, Codex). Run `lim skills install` to set up."
71
76
  },
72
77
  "xcode": {
73
- "description": "Execute any task on remote XCode sandboxes: create, list, get, delete, sync, build, attach-simulator"
78
+ "description": "Execute any task on remote XCode sandboxes: create, list, get, delete, sync, build, run, attach-simulator"
74
79
  }
75
80
  }
76
81
  },