lim 0.19.5 → 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 (41) hide show
  1. package/dist/commands/gradle/build.d.ts +7 -0
  2. package/dist/commands/gradle/build.d.ts.map +1 -1
  3. package/dist/commands/gradle/build.js +66 -2
  4. package/dist/commands/gradle/build.js.map +1 -1
  5. package/dist/lib/android-keystore.d.ts +15 -0
  6. package/dist/lib/android-keystore.d.ts.map +1 -0
  7. package/dist/lib/android-keystore.js +65 -0
  8. package/dist/lib/android-keystore.js.map +1 -0
  9. package/dist/lib/android-keystore.test.d.ts +2 -0
  10. package/dist/lib/android-keystore.test.d.ts.map +1 -0
  11. package/dist/lib/android-keystore.test.js +43 -0
  12. package/dist/lib/android-keystore.test.js.map +1 -0
  13. package/dist/lib/auth.d.ts +1 -0
  14. package/dist/lib/auth.d.ts.map +1 -1
  15. package/dist/lib/auth.js +1 -0
  16. package/dist/lib/auth.js.map +1 -1
  17. package/dist/lib/backend.d.ts +32 -0
  18. package/dist/lib/backend.d.ts.map +1 -0
  19. package/dist/lib/backend.js +81 -0
  20. package/dist/lib/backend.js.map +1 -0
  21. package/dist/lib/backend.test.d.ts +2 -0
  22. package/dist/lib/backend.test.d.ts.map +1 -0
  23. package/dist/lib/backend.test.js +124 -0
  24. package/dist/lib/backend.test.js.map +1 -0
  25. package/dist/lib/gradle-build-options.d.ts +21 -0
  26. package/dist/lib/gradle-build-options.d.ts.map +1 -1
  27. package/dist/lib/gradle-build-options.js +41 -0
  28. package/dist/lib/gradle-build-options.js.map +1 -1
  29. package/dist/lib/gradle-build-options.test.d.ts +2 -0
  30. package/dist/lib/gradle-build-options.test.d.ts.map +1 -0
  31. package/dist/lib/gradle-build-options.test.js +63 -0
  32. package/dist/lib/gradle-build-options.test.js.map +1 -0
  33. package/dist/lib/gradle-signing.d.ts +44 -0
  34. package/dist/lib/gradle-signing.d.ts.map +1 -0
  35. package/dist/lib/gradle-signing.js +167 -0
  36. package/dist/lib/gradle-signing.js.map +1 -0
  37. package/dist/lib/gradle-signing.test.d.ts +2 -0
  38. package/dist/lib/gradle-signing.test.d.ts.map +1 -0
  39. package/dist/lib/gradle-signing.test.js +111 -0
  40. package/dist/lib/gradle-signing.test.js.map +1 -0
  41. package/package.json +8 -3
@@ -14,6 +14,13 @@ export default class GradleBuild extends BaseCommand {
14
14
  abi: import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
15
15
  upload: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
16
  'signed-upload-url': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
17
+ sign: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
18
+ 'application-id': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
19
+ keystore: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
20
+ 'keystore-password': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
21
+ 'key-alias': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
22
+ 'key-password': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
23
+ 'save-key': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
17
24
  'basis-cache-dir': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
18
25
  ignore: import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
19
26
  include: import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/commands/gradle/build.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAMjD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAC,OAAO,SAAmD;IACjE,MAAM,CAAC,WAAW,SAEgG;IAElH,MAAM,CAAC,QAAQ,WAMb;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;MAwCV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA+D3B"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/commands/gradle/build.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAgBjD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAC,OAAO,SAAmD;IACjE,MAAM,CAAC,WAAW,SAEgG;IAElH,MAAM,CAAC,QAAQ,WAQb;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;;;;;;;MAmEV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA0G3B"}
@@ -4,6 +4,7 @@ const core_1 = require("@oclif/core");
4
4
  const base_command_1 = require("../../base-command");
5
5
  const ignore_patterns_1 = require("../../lib/ignore-patterns");
6
6
  const gradle_build_options_1 = require("../../lib/gradle-build-options");
7
+ const gradle_signing_1 = require("../../lib/gradle-signing");
7
8
  const duration_1 = require("../../lib/duration");
8
9
  const bytes_1 = require("../../lib/bytes");
9
10
  class GradleBuild extends base_command_1.BaseCommand {
@@ -14,16 +15,47 @@ class GradleBuild extends base_command_1.BaseCommand {
14
15
  // auto-create a billed instance, which a doomed flag combination must
15
16
  // never reach.
16
17
  let options;
18
+ let applicationId;
19
+ const syncPath = args.path ?? process.cwd();
17
20
  try {
18
21
  options = (0, gradle_build_options_1.gradleBuildOptionsFromFlags)(flags);
22
+ if (flags.sign || flags['save-key']) {
23
+ applicationId = (0, gradle_signing_1.resolveApplicationId)({
24
+ explicit: flags['application-id'],
25
+ syncPath,
26
+ expoAppDir: flags['expo-app-dir'],
27
+ projectPath: flags['project-path'],
28
+ });
29
+ }
30
+ if (flags.keystore) {
31
+ options.signing = (0, gradle_signing_1.readProvidedSigning)({
32
+ keystore: flags.keystore,
33
+ keystorePassword: flags['keystore-password'],
34
+ keyAlias: flags['key-alias'],
35
+ keyPassword: flags['key-password'],
36
+ });
37
+ }
19
38
  }
20
39
  catch (err) {
21
40
  return this.error(err instanceof Error ? err.message : String(err));
22
41
  }
23
42
  await this.withAuth(async () => {
43
+ // Escrow round-trips run BEFORE resolveGradleTargetOrCreate for the
44
+ // same reason flag validation does: a failure here must not leave a
45
+ // freshly created billed instance behind.
46
+ if (applicationId && flags['save-key'] && options.signing) {
47
+ const saved = await (0, gradle_signing_1.saveProvidedKey)(this.client, applicationId, options.signing);
48
+ this.info(saved ?
49
+ `Escrowed the provided keystore as the organization's upload key for ${applicationId}.`
50
+ : `The provided keystore is already escrowed for ${applicationId}.`);
51
+ }
52
+ else if (applicationId && flags.sign) {
53
+ const { signing, created } = await (0, gradle_signing_1.resolveEscrowedSigning)(this.client, applicationId);
54
+ options.signing = signing;
55
+ this.info(`Signing with the organization's upload key for ${applicationId} (${created ? 'newly generated' : 'existing'}).`);
56
+ }
24
57
  const target = await this.resolveGradleTargetOrCreate(flags.id);
25
58
  const id = target.id;
26
- const syncPath = args.path ?? process.cwd();
27
59
  const gradleClient = await this.resolveGradleClient(target);
28
60
  this.info(`Syncing ${syncPath} to instance ${id}...`);
29
61
  const syncStart = Date.now();
@@ -51,7 +83,14 @@ class GradleBuild extends base_command_1.BaseCommand {
51
83
  this.error(`gradle build failed with exit code ${result.exitCode}`, { exit: result.exitCode });
52
84
  }
53
85
  this.output(`\nBuild succeeded (exit code ${result.exitCode})`);
54
- if (flags.upload) {
86
+ // Signing only yields a Play-ready AAB when a bundle task ran (no
87
+ // explicit tasks means the server defaulted to bundleRelease); a BYO
88
+ // keystore with an explicit assemble task still produces an APK.
89
+ const builtSignedBundle = options.signing && (!flags.task?.length || (0, gradle_build_options_1.tasksIncludeBundle)(flags.task));
90
+ if (flags.upload && builtSignedBundle) {
91
+ this.output(`Uploaded the signed app bundle as asset '${flags.upload}'.`);
92
+ }
93
+ else if (flags.upload) {
55
94
  this.output(`Uploaded APK as asset '${flags.upload}'.`);
56
95
  this.output(`Run it with: lim android create --install-asset=${flags.upload}`);
57
96
  }
@@ -70,6 +109,8 @@ GradleBuild.examples = [
70
109
  '<%= config.bin %> gradle build --task bundleRelease',
71
110
  '<%= config.bin %> gradle build --id <gradle-instance-ID> --project-path android',
72
111
  '<%= config.bin %> gradle build ./my-monorepo --expo-app-dir apps/mobile',
112
+ '<%= config.bin %> gradle build --sign --upload myapp.aab',
113
+ '<%= config.bin %> gradle build --keystore upload.jks --keystore-password *** --key-alias upload --key-password *** --save-key',
73
114
  ];
74
115
  GradleBuild.args = {
75
116
  path: core_1.Args.string({
@@ -101,6 +142,29 @@ GradleBuild.flags = {
101
142
  'signed-upload-url': core_1.Flags.string({
102
143
  description: 'Presigned URL to upload the resulting APK to.',
103
144
  }),
145
+ sign: core_1.Flags.boolean({
146
+ description: "Sign the release build with the organization's escrowed upload key for this app, generating and escrowing one on first use. Makes bundleRelease the default task.",
147
+ default: false,
148
+ }),
149
+ 'application-id': core_1.Flags.string({
150
+ description: 'Android application ID naming the escrowed key. Defaults to the value detected from app.json or app/build.gradle.',
151
+ }),
152
+ keystore: core_1.Flags.string({
153
+ description: 'Path to your own upload keystore for release signing. Requires --keystore-password, --key-alias and --key-password.',
154
+ }),
155
+ 'keystore-password': core_1.Flags.string({
156
+ description: 'Password of the --keystore file.',
157
+ env: 'LIM_KEYSTORE_PASSWORD',
158
+ }),
159
+ 'key-alias': core_1.Flags.string({ description: 'Alias of the signing key inside the --keystore file.' }),
160
+ 'key-password': core_1.Flags.string({
161
+ description: 'Password of the key behind --key-alias.',
162
+ env: 'LIM_KEY_PASSWORD',
163
+ }),
164
+ 'save-key': core_1.Flags.boolean({
165
+ description: "Escrow the provided --keystore as the organization's upload key for this app, so later builds can use --sign. Fails if a different key is already escrowed.",
166
+ default: false,
167
+ }),
104
168
  'basis-cache-dir': core_1.Flags.string({
105
169
  description: 'Directory for the client-side folder-sync cache.',
106
170
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/commands/gradle/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/commands/gradle/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export type AndroidSigningKey = {
2
+ keystoreBase64: string;
3
+ keystorePassword: string;
4
+ keyAlias: string;
5
+ keyPassword: string;
6
+ };
7
+ /**
8
+ * Generates an Android upload keystore entirely in JS: a local JDK cannot
9
+ * be assumed since builds run remotely. The output is a PKCS12 the JDK's
10
+ * dual-format keystore reader auto-detects; 3DES encryption keeps it
11
+ * readable by every Java version. Store and key password are the same
12
+ * value, which PKCS12 under Java effectively requires.
13
+ */
14
+ export declare function generateAndroidSigningKey(applicationId: string): AndroidSigningKey;
15
+ //# sourceMappingURL=android-keystore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"android-keystore.d.ts","sourceRoot":"","sources":["../../src/lib/android-keystore.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAmBF;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,MAAM,GAAG,iBAAiB,CAqClF"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateAndroidSigningKey = generateAndroidSigningKey;
7
+ const node_crypto_1 = require("node:crypto");
8
+ const node_forge_1 = __importDefault(require("node-forge"));
9
+ // Google Play requires upload-key certificates to stay valid well past
10
+ // 2033; ~27 years matches what Android Studio generates.
11
+ const validityDays = 10000;
12
+ const keyAlias = 'upload';
13
+ // Alphanumeric only: the values end up in gradle.properties, which Gradle
14
+ // reads as ISO-8859-1, and must survive any shell quoting users apply.
15
+ const passwordAlphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
16
+ function generatePassword(length = 24) {
17
+ let out = '';
18
+ for (let i = 0; i < length; i++) {
19
+ out += passwordAlphabet[(0, node_crypto_1.randomInt)(passwordAlphabet.length)];
20
+ }
21
+ return out;
22
+ }
23
+ /**
24
+ * Generates an Android upload keystore entirely in JS: a local JDK cannot
25
+ * be assumed since builds run remotely. The output is a PKCS12 the JDK's
26
+ * dual-format keystore reader auto-detects; 3DES encryption keeps it
27
+ * readable by every Java version. Store and key password are the same
28
+ * value, which PKCS12 under Java effectively requires.
29
+ */
30
+ function generateAndroidSigningKey(applicationId) {
31
+ const password = generatePassword();
32
+ // Native keygen (hundreds of ms) instead of node-forge's pure-JS one
33
+ // (many seconds of silent event-loop blocking); forge only assembles
34
+ // the certificate and PKCS12, mirroring the ui package's apple crypto.
35
+ const { privateKey: privateKeyPem } = (0, node_crypto_1.generateKeyPairSync)('rsa', {
36
+ modulusLength: 2048,
37
+ publicKeyEncoding: { type: 'spki', format: 'pem' },
38
+ privateKeyEncoding: { type: 'pkcs8', format: 'pem' },
39
+ });
40
+ const privateKey = node_forge_1.default.pki.privateKeyFromPem(privateKeyPem);
41
+ const publicKey = node_forge_1.default.pki.setRsaPublicKey(privateKey.n, privateKey.e);
42
+ const certificate = node_forge_1.default.pki.createCertificate();
43
+ certificate.publicKey = publicKey;
44
+ certificate.serialNumber = '01' + node_forge_1.default.util.bytesToHex(node_forge_1.default.random.getBytesSync(15));
45
+ certificate.validity.notBefore = new Date();
46
+ certificate.validity.notAfter = new Date(Date.now() + validityDays * 24 * 60 * 60 * 1000);
47
+ certificate.setSubject([
48
+ { name: 'commonName', value: applicationId },
49
+ { name: 'organizationName', value: 'Limrun' },
50
+ ]);
51
+ certificate.setIssuer(certificate.subject.attributes);
52
+ certificate.sign(privateKey, node_forge_1.default.md.sha256.create());
53
+ const p12 = node_forge_1.default.pkcs12.toPkcs12Asn1(privateKey, [certificate], password, {
54
+ algorithm: '3des',
55
+ friendlyName: keyAlias,
56
+ });
57
+ const keystoreBase64 = node_forge_1.default.util.encode64(node_forge_1.default.asn1.toDer(p12).getBytes());
58
+ return {
59
+ keystoreBase64,
60
+ keystorePassword: password,
61
+ keyAlias,
62
+ keyPassword: password,
63
+ };
64
+ }
65
+ //# sourceMappingURL=android-keystore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"android-keystore.js","sourceRoot":"","sources":["../../src/lib/android-keystore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=android-keystore.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"android-keystore.test.d.ts","sourceRoot":"","sources":["../../src/lib/android-keystore.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_forge_1 = __importDefault(require("node-forge"));
7
+ const android_keystore_1 = require("./android-keystore");
8
+ describe('generateAndroidSigningKey', () => {
9
+ // One shared key: RSA generation dominates test time.
10
+ const key = (0, android_keystore_1.generateAndroidSigningKey)('com.example.app');
11
+ it('produces the exact androidSigningKey secret data shape', () => {
12
+ expect(Object.keys(key).sort()).toEqual([
13
+ 'keyAlias',
14
+ 'keyPassword',
15
+ 'keystoreBase64',
16
+ 'keystorePassword',
17
+ ]);
18
+ expect(key.keyAlias).toBe('upload');
19
+ expect(key.keystorePassword).toBe(key.keyPassword);
20
+ expect(key.keystorePassword).toMatch(/^[A-Za-z0-9]{24}$/);
21
+ });
22
+ it('builds a PKCS12 that opens with the emitted password and holds a long-lived RSA-2048 key', () => {
23
+ const der = node_forge_1.default.util.decode64(key.keystoreBase64);
24
+ expect(der.length).toBeGreaterThan(0);
25
+ const p12 = node_forge_1.default.pkcs12.pkcs12FromAsn1(node_forge_1.default.asn1.fromDer(der), key.keystorePassword);
26
+ const keyBags = p12.getBags({ bagType: node_forge_1.default.pki.oids.pkcs8ShroudedKeyBag })[node_forge_1.default.pki.oids.pkcs8ShroudedKeyBag];
27
+ expect(keyBags).toHaveLength(1);
28
+ expect(keyBags[0].attributes.friendlyName?.[0]).toBe('upload');
29
+ const privateKey = keyBags[0].key;
30
+ expect(privateKey.n.bitLength()).toBe(2048);
31
+ const certBags = p12.getBags({ bagType: node_forge_1.default.pki.oids.certBag })[node_forge_1.default.pki.oids.certBag];
32
+ expect(certBags).toHaveLength(1);
33
+ const cert = certBags[0].cert;
34
+ // Play requires upload certificates valid well past 2033.
35
+ expect(cert.validity.notAfter.getFullYear()).toBeGreaterThan(2034);
36
+ expect(cert.subject.getField('CN').value).toBe('com.example.app');
37
+ });
38
+ it('rejects the wrong password', () => {
39
+ const der = node_forge_1.default.util.decode64(key.keystoreBase64);
40
+ expect(() => node_forge_1.default.pkcs12.pkcs12FromAsn1(node_forge_1.default.asn1.fromDer(der), 'wrong-password')).toThrow();
41
+ });
42
+ });
43
+ //# sourceMappingURL=android-keystore.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"android-keystore.test.js","sourceRoot":"","sources":["../../src/lib/android-keystore.test.ts"],"names":[],"mappings":"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"}
@@ -13,5 +13,6 @@ interface LoginOptions {
13
13
  type LoginRuntimeOptions = Omit<LoginOptions, 'apiEndpoint' | 'consoleEndpoint' | 'version'>;
14
14
  export declare function login(apiEndpoint: string, consoleEndpoint: string, version: string, options?: LoginRuntimeOptions): Promise<void>;
15
15
  export declare function loginWithOptions(options: LoginOptions): Promise<void>;
16
+ export declare function responseMessage(response: Response): Promise<string>;
16
17
  export {};
17
18
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAe,MAAM,UAAU,CAAC;AAIpD,UAAU,YAAY;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,OAAO,WAAW,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IACrD,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgBD,KAAK,mBAAmB,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,GAAG,iBAAiB,GAAG,SAAS,CAAC,CAAC;AAa7F,wBAAsB,KAAK,CACzB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA8C3E"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAe,MAAM,UAAU,CAAC;AAIpD,UAAU,YAAY;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,OAAO,WAAW,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IACrD,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgBD,KAAK,mBAAmB,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,GAAG,iBAAiB,GAAG,SAAS,CAAC,CAAC;AAa7F,wBAAsB,KAAK,CACzB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA8C3E;AAyHD,wBAAsB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAOzE"}
package/dist/lib/auth.js CHANGED
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.login = login;
7
7
  exports.loginWithOptions = loginWithOptions;
8
+ exports.responseMessage = responseMessage;
8
9
  const child_process_1 = require("child_process");
9
10
  const os_1 = __importDefault(require("os"));
10
11
  const process_1 = __importDefault(require("process"));
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import Limrun from '@limrun/api';
2
+ /**
3
+ * Backend API endpoints the generated resources do not cover (Stainless
4
+ * consumes the director spec only). Rides the SDK client's transport, so
5
+ * auth headers, retries and the 401 -> AuthenticationError mapping that
6
+ * withAuth's re-login relies on all come for free.
7
+ */
8
+ export type SecretData = Record<string, string>;
9
+ export type PutSecretResult = {
10
+ data: SecretData;
11
+ /** True when this call created the secret, false on a get-or-create hit. */
12
+ created: boolean;
13
+ };
14
+ export declare const androidSigningKeySecretType = "androidSigningKey";
15
+ /**
16
+ * Resolves the organization the API key acts for. `lim login` keys are
17
+ * organization tokens, so `organization` is the normal path; hand-set
18
+ * user API keys fall back to the user's default organization, which
19
+ * /v1/whoami nests inside `user`.
20
+ */
21
+ export declare function whoAmI(client: Limrun): Promise<string>;
22
+ /** Fetches a secret's data, or undefined when it does not exist. */
23
+ export declare function getSecret(client: Limrun, organizationId: string, secretType: string, secretName: string): Promise<SecretData | undefined>;
24
+ /**
25
+ * Get-or-create put. The response data is authoritative: on a hit the
26
+ * submitted data was NOT stored and the caller must adopt the returned
27
+ * material instead. Creation is signaled by the response body's
28
+ * `created` today and by HTTP 201 after the status-split hardening;
29
+ * accept both so either server version works.
30
+ */
31
+ export declare function putSecret(client: Limrun, organizationId: string, secretType: string, secretName: string, data: SecretData): Promise<PutSecretResult>;
32
+ //# sourceMappingURL=backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/lib/backend.ts"],"names":[],"mappings":"AAAA,OAAO,MAAwD,MAAM,aAAa,CAAC;AAEnF;;;;;GAKG;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEhD,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,4EAA4E;IAC5E,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,2BAA2B,sBAAsB,CAAC;AAU/D;;;;;GAKG;AACH,wBAAsB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAY5D;AAQD,oEAAoE;AACpE,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAcjC;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,eAAe,CAAC,CAgB1B"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.androidSigningKeySecretType = void 0;
4
+ exports.whoAmI = whoAmI;
5
+ exports.getSecret = getSecret;
6
+ exports.putSecret = putSecret;
7
+ const api_1 = require("@limrun/api");
8
+ exports.androidSigningKeySecretType = 'androidSigningKey';
9
+ /** Wraps transport errors with call context; auth errors pass through untouched. */
10
+ function rethrow(err, context) {
11
+ if (err instanceof api_1.AuthenticationError || !(err instanceof api_1.APIError)) {
12
+ throw err;
13
+ }
14
+ throw new Error(`${context}: ${err.message}`);
15
+ }
16
+ /**
17
+ * Resolves the organization the API key acts for. `lim login` keys are
18
+ * organization tokens, so `organization` is the normal path; hand-set
19
+ * user API keys fall back to the user's default organization, which
20
+ * /v1/whoami nests inside `user`.
21
+ */
22
+ async function whoAmI(client) {
23
+ let body;
24
+ try {
25
+ body = await client.get('/v1/whoami');
26
+ }
27
+ catch (err) {
28
+ rethrow(err, 'Failed to resolve the organization');
29
+ }
30
+ const organizationId = body.organization?.id ?? body.user?.defaultOrganization?.id;
31
+ if (!organizationId) {
32
+ throw new Error('The Limrun API did not report an organization for this API key.');
33
+ }
34
+ return organizationId;
35
+ }
36
+ function secretPath(organizationId, secretType, secretName) {
37
+ return `/v1/organizations/${encodeURIComponent(organizationId)}/secrets/${encodeURIComponent(secretType)}/${encodeURIComponent(secretName)}`;
38
+ }
39
+ /** Fetches a secret's data, or undefined when it does not exist. */
40
+ async function getSecret(client, organizationId, secretType, secretName) {
41
+ let body;
42
+ try {
43
+ body = await client.get(secretPath(organizationId, secretType, secretName));
44
+ }
45
+ catch (err) {
46
+ if (err instanceof api_1.NotFoundError) {
47
+ return undefined;
48
+ }
49
+ rethrow(err, `Failed to fetch the ${secretType} secret ${secretName}`);
50
+ }
51
+ if (!body.data) {
52
+ throw new Error(`The Limrun API returned a ${secretType} secret without data.`);
53
+ }
54
+ return body.data;
55
+ }
56
+ /**
57
+ * Get-or-create put. The response data is authoritative: on a hit the
58
+ * submitted data was NOT stored and the caller must adopt the returned
59
+ * material instead. Creation is signaled by the response body's
60
+ * `created` today and by HTTP 201 after the status-split hardening;
61
+ * accept both so either server version works.
62
+ */
63
+ async function putSecret(client, organizationId, secretType, secretName, data) {
64
+ let body;
65
+ let response;
66
+ try {
67
+ ({ data: body, response } = await client
68
+ .put(secretPath(organizationId, secretType, secretName), {
69
+ body: { data },
70
+ })
71
+ .withResponse());
72
+ }
73
+ catch (err) {
74
+ rethrow(err, `Failed to store the ${secretType} secret ${secretName}`);
75
+ }
76
+ if (!body.data) {
77
+ throw new Error(`The Limrun API returned a ${secretType} secret without data.`);
78
+ }
79
+ return { data: body.data, created: body.created ?? response.status === 201 };
80
+ }
81
+ //# sourceMappingURL=backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/lib/backend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=backend.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.test.d.ts","sourceRoot":"","sources":["../../src/lib/backend.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,124 @@
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 api_1 = __importStar(require("@limrun/api"));
37
+ const backend_1 = require("./backend");
38
+ const apiEndpoint = 'https://api.example.test';
39
+ function mockResponse(status, body) {
40
+ return new Response(JSON.stringify(body), { status, headers: { 'Content-Type': 'application/json' } });
41
+ }
42
+ describe('backend client', () => {
43
+ let fetchMock;
44
+ let client;
45
+ beforeEach(() => {
46
+ fetchMock = jest.spyOn(globalThis, 'fetch');
47
+ client = new api_1.default({ apiKey: 'key', baseURL: apiEndpoint, maxRetries: 0 });
48
+ });
49
+ afterEach(() => {
50
+ fetchMock.mockRestore();
51
+ });
52
+ function requestOf(call) {
53
+ const [input, init] = call;
54
+ return {
55
+ url: String(input),
56
+ auth: new Headers(init?.headers).get('authorization'),
57
+ };
58
+ }
59
+ describe('whoAmI', () => {
60
+ it('resolves the organization for org tokens with the bearer key', async () => {
61
+ fetchMock.mockResolvedValue(mockResponse(200, { type: 'organization', organization: { id: 'org_1' } }));
62
+ await expect((0, backend_1.whoAmI)(client)).resolves.toBe('org_1');
63
+ const { url, auth } = requestOf(fetchMock.mock.calls[0]);
64
+ expect(url).toBe(`${apiEndpoint}/v1/whoami`);
65
+ expect(auth).toBe('Bearer key');
66
+ });
67
+ it('falls back to the default organization NESTED IN user for user tokens', async () => {
68
+ fetchMock.mockResolvedValue(mockResponse(200, { type: 'user', user: { defaultOrganization: { id: 'org_2' } } }));
69
+ await expect((0, backend_1.whoAmI)(client)).resolves.toBe('org_2');
70
+ });
71
+ it('throws the SDK AuthenticationError on 401 so withAuth can re-login', async () => {
72
+ fetchMock.mockResolvedValue(mockResponse(401, {}));
73
+ await expect((0, backend_1.whoAmI)(client)).rejects.toBeInstanceOf(api_1.AuthenticationError);
74
+ });
75
+ it('fails when no organization is reported', async () => {
76
+ fetchMock.mockResolvedValue(mockResponse(200, { type: 'user', user: {} }));
77
+ await expect((0, backend_1.whoAmI)(client)).rejects.toThrow(/did not report an organization/);
78
+ });
79
+ });
80
+ describe('getSecret', () => {
81
+ it('returns undefined on 404', async () => {
82
+ fetchMock.mockResolvedValue(mockResponse(404, { message: 'not found' }));
83
+ await expect((0, backend_1.getSecret)(client, 'org_1', 'androidSigningKey', 'com.x')).resolves.toBeUndefined();
84
+ });
85
+ it('URL-encodes path segments and returns the data', async () => {
86
+ fetchMock.mockResolvedValue(mockResponse(200, { data: { keyAlias: 'upload' } }));
87
+ await expect((0, backend_1.getSecret)(client, 'org/1', 'androidSigningKey', 'com/x')).resolves.toEqual({
88
+ keyAlias: 'upload',
89
+ });
90
+ const { url } = requestOf(fetchMock.mock.calls[0]);
91
+ expect(url).toBe(`${apiEndpoint}/v1/organizations/org%2F1/secrets/androidSigningKey/com%2Fx`);
92
+ });
93
+ it('surfaces the API error message', async () => {
94
+ fetchMock.mockResolvedValue(mockResponse(500, { message: 'db down' }));
95
+ await expect((0, backend_1.getSecret)(client, 'org_1', 'androidSigningKey', 'com.x')).rejects.toThrow(/db down/);
96
+ });
97
+ });
98
+ describe('putSecret', () => {
99
+ it("reads `created` from the response body (today's 200-only server)", async () => {
100
+ fetchMock.mockResolvedValue(mockResponse(200, { data: { keyAlias: 'upload' }, created: true }));
101
+ await expect((0, backend_1.putSecret)(client, 'org_1', 'androidSigningKey', 'com.x', { keyAlias: 'upload' })).resolves.toEqual({
102
+ data: { keyAlias: 'upload' },
103
+ created: true,
104
+ });
105
+ });
106
+ it('falls back to HTTP 201 when the body has no created field (status-split server)', async () => {
107
+ fetchMock.mockResolvedValue(mockResponse(201, { data: { keyAlias: 'upload' } }));
108
+ await expect((0, backend_1.putSecret)(client, 'org_1', 'androidSigningKey', 'com.x', { keyAlias: 'upload' })).resolves.toEqual({
109
+ data: { keyAlias: 'upload' },
110
+ created: true,
111
+ });
112
+ });
113
+ it('returns the WINNER data on a get-or-create hit, not the submitted data', async () => {
114
+ fetchMock.mockResolvedValue(mockResponse(200, { data: { keyAlias: 'winner' }, created: false }));
115
+ const result = await (0, backend_1.putSecret)(client, 'org_1', 'androidSigningKey', 'com.x', { keyAlias: 'loser' });
116
+ expect(result).toEqual({ data: { keyAlias: 'winner' }, created: false });
117
+ });
118
+ it('rejects validation failures with the API message', async () => {
119
+ fetchMock.mockResolvedValue(mockResponse(400, { message: 'keystoreBase64 is required' }));
120
+ await expect((0, backend_1.putSecret)(client, 'org_1', 'androidSigningKey', 'com.x', {})).rejects.toThrow(/keystoreBase64 is required/);
121
+ });
122
+ });
123
+ });
124
+ //# sourceMappingURL=backend.test.js.map