@limrun/api 0.30.0 → 0.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +26 -1
  2. package/index.d.mts +2 -1
  3. package/index.d.mts.map +1 -1
  4. package/index.d.ts +2 -1
  5. package/index.d.ts.map +1 -1
  6. package/index.js +7 -1
  7. package/index.js.map +1 -1
  8. package/index.mjs +2 -0
  9. package/index.mjs.map +1 -1
  10. package/package.json +11 -1
  11. package/rbe-bep.d.mts +27 -0
  12. package/rbe-bep.d.mts.map +1 -0
  13. package/rbe-bep.d.ts +27 -0
  14. package/rbe-bep.d.ts.map +1 -0
  15. package/rbe-bep.js +130 -0
  16. package/rbe-bep.js.map +1 -0
  17. package/rbe-bep.mjs +127 -0
  18. package/rbe-bep.mjs.map +1 -0
  19. package/resources/index.d.mts +1 -1
  20. package/resources/index.d.mts.map +1 -1
  21. package/resources/index.d.ts +1 -1
  22. package/resources/index.d.ts.map +1 -1
  23. package/resources/index.js +3 -1
  24. package/resources/index.js.map +1 -1
  25. package/resources/index.mjs +1 -1
  26. package/resources/index.mjs.map +1 -1
  27. package/resources/xcode-instances-helpers.d.mts +110 -1
  28. package/resources/xcode-instances-helpers.d.mts.map +1 -1
  29. package/resources/xcode-instances-helpers.d.ts +110 -1
  30. package/resources/xcode-instances-helpers.d.ts.map +1 -1
  31. package/resources/xcode-instances-helpers.js +153 -18
  32. package/resources/xcode-instances-helpers.js.map +1 -1
  33. package/resources/xcode-instances-helpers.mjs +150 -17
  34. package/resources/xcode-instances-helpers.mjs.map +1 -1
  35. package/src/index.ts +9 -0
  36. package/src/rbe-bep.ts +155 -0
  37. package/src/resources/index.ts +3 -0
  38. package/src/resources/xcode-instances-helpers.ts +284 -19
  39. package/src/tunnel.ts +62 -3
  40. package/src/version.ts +1 -1
  41. package/tunnel.d.mts.map +1 -1
  42. package/tunnel.d.ts.map +1 -1
  43. package/tunnel.js +59 -2
  44. package/tunnel.js.map +1 -1
  45. package/tunnel.mjs +59 -2
  46. package/tunnel.mjs.map +1 -1
  47. package/version.d.mts +1 -1
  48. package/version.d.ts +1 -1
  49. package/version.js +1 -1
  50. package/version.mjs +1 -1
package/CHANGELOG.md CHANGED
@@ -1,12 +1,37 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.31.1 (2026-06-09)
4
+
5
+ Full Changelog: [v0.31.0...v0.31.1](https://github.com/limrun-inc/typescript-sdk/compare/v0.31.0...v0.31.1)
6
+
7
+ ## 0.31.0 (2026-06-08)
8
+
9
+ Full Changelog: [v0.30.0...v0.31.0](https://github.com/limrun-inc/typescript-sdk/compare/v0.30.0...v0.31.0)
10
+
11
+ ### Features
12
+
13
+ * **cli:** add lim xcode rbe for Bazel remote execution ([0eed8c0](https://github.com/limrun-inc/typescript-sdk/commit/0eed8c0854c5f7fd34cea43e06fc6fa69c031868))
14
+ * **cli:** generate the Bazel remote-execution config from the fleet Xcode version ([201505f](https://github.com/limrun-inc/typescript-sdk/commit/201505fd17c2278581ae1a65495f3c3f4e187b2f))
15
+ * **sdk:** add RBE start, stop, status and tunnel helpers to XcodeClient ([cc111bf](https://github.com/limrun-inc/typescript-sdk/commit/cc111bf9cc8842a752e833159c2c406ca74b3d39))
16
+ * **sdk:** expose the fleet Xcode version in RbeStatus ([a281583](https://github.com/limrun-inc/typescript-sdk/commit/a281583228765b1d4881a12e601d276fd061f1a0))
17
+
18
+
19
+ ### Bug Fixes
20
+
21
+ * **cli:** drop stray --xcode flag from ios create install example ([1d90afd](https://github.com/limrun-inc/typescript-sdk/commit/1d90afd415c8193118672d2945aae0c82d23c3a7))
22
+ * **cli:** retry transient gateway errors when starting the RBE stack ([8b7c949](https://github.com/limrun-inc/typescript-sdk/commit/8b7c9490aee6e50f864b5c5ce8f0c8895d4d1464))
23
+
24
+
25
+ ### Chores
26
+
27
+ * fix prettier formatting in cli files ([5be3f1c](https://github.com/limrun-inc/typescript-sdk/commit/5be3f1c8749c86c63fddae9199e4db05482a7ca4))
28
+
3
29
  ## 0.30.0 (2026-06-03)
4
30
 
5
31
  Full Changelog: [v0.29.0...v0.30.0](https://github.com/limrun-inc/typescript-sdk/compare/v0.29.0...v0.30.0)
6
32
 
7
33
  ### Features
8
34
 
9
- * add appConfig to xcode build ([459185d](https://github.com/limrun-inc/typescript-sdk/commit/459185db09a62de621bee5f2920cc7ea5f0839f1))
10
35
  * add buildSettings to xcode build ([f974459](https://github.com/limrun-inc/typescript-sdk/commit/f974459d3bb6b3cf8b4c54f3ef068a6820560662))
11
36
 
12
37
 
package/index.d.mts CHANGED
@@ -7,7 +7,8 @@ export * from "./instance-client.mjs";
7
7
  export * as Ios from "./ios-client.mjs";
8
8
  export { startHttpProxy, type HttpProxy, type StartHttpProxyOptions } from "./http-proxy.mjs";
9
9
  export { buildSettingKeyPattern, parseBuildSettingEntries, validateBuildSettings } from "./build-settings.mjs";
10
+ export { parseTopLevelIpaDigest, type BepIpaDigest } from "./rbe-bep.mjs";
10
11
  export { exec, type ExecRequest, type ExecOptions, type ExecResult, type ExecChildProcess, } from "./exec-client.mjs";
11
- export { type XcodeCreateClientParams, type XcodeClient, type XcodeProjectConfig, type XcodeBuildOptions, type ReactNativeBuildConfig, type SimulatorAttachResult, type SimulatorStatus, type SimulatorBuildStatus, type SimulatorAttachment, type SimulatorDeviceInfo, type SimulatorInstallState, } from "./resources/xcode-instances-helpers.mjs";
12
+ export { type XcodeCreateClientParams, type XcodeClient, type RbeStatus, type RbeStartOptions, type RbeTunnelOptions, type RbeInstallResult, type Tunnel, RbeUnsupportedError, deriveRbeTunnelUrl, DEFAULT_RBE_TUNNEL_PORT, type XcodeProjectConfig, type XcodeBuildOptions, type ReactNativeBuildConfig, type SimulatorAttachResult, type SimulatorStatus, type SimulatorBuildStatus, type SimulatorAttachment, type SimulatorDeviceInfo, type SimulatorInstallState, } from "./resources/xcode-instances-helpers.mjs";
12
13
  export { LimrunError, APIError, APIConnectionError, APIConnectionTimeoutError, APIUserAbortError, NotFoundError, ConflictError, RateLimitError, BadRequestError, AuthenticationError, InternalServerError, PermissionDeniedError, UnprocessableEntityError, } from "./core/error.mjs";
13
14
  //# sourceMappingURL=index.d.mts.map
package/index.d.mts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,qBAAiB;AAE7C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,EAAE,2BAAuB;AACzD,OAAO,EAAE,UAAU,EAAE,+BAA2B;AAChD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,qBAAiB;AACtD,OAAO,EAAE,WAAW,EAAE,8BAA0B;AAChD,sCAAkC;AAClC,OAAO,KAAK,GAAG,yBAAqB;AACpC,OAAO,EAAE,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,qBAAqB,EAAE,yBAAqB;AAC1F,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,6BAAyB;AAC3G,OAAO,EACL,IAAI,EACJ,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,gBAAgB,GACtB,0BAAsB;AACvB,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,GAC3B,gDAA4C;AAC7C,OAAO,EACL,WAAW,EACX,QAAQ,EACR,kBAAkB,EAClB,yBAAyB,EACzB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,GACzB,yBAAqB"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,qBAAiB;AAE7C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,EAAE,2BAAuB;AACzD,OAAO,EAAE,UAAU,EAAE,+BAA2B;AAChD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,qBAAiB;AACtD,OAAO,EAAE,WAAW,EAAE,8BAA0B;AAChD,sCAAkC;AAClC,OAAO,KAAK,GAAG,yBAAqB;AACpC,OAAO,EAAE,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,qBAAqB,EAAE,yBAAqB;AAC1F,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,6BAAyB;AAC3G,OAAO,EAAE,sBAAsB,EAAE,KAAK,YAAY,EAAE,sBAAkB;AACtE,OAAO,EACL,IAAI,EACJ,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,gBAAgB,GACtB,0BAAsB;AACvB,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,MAAM,EACX,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,GAC3B,gDAA4C;AAC7C,OAAO,EACL,WAAW,EACX,QAAQ,EACR,kBAAkB,EAClB,yBAAyB,EACzB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,GACzB,yBAAqB"}
package/index.d.ts CHANGED
@@ -7,7 +7,8 @@ export * from "./instance-client.js";
7
7
  export * as Ios from "./ios-client.js";
8
8
  export { startHttpProxy, type HttpProxy, type StartHttpProxyOptions } from "./http-proxy.js";
9
9
  export { buildSettingKeyPattern, parseBuildSettingEntries, validateBuildSettings } from "./build-settings.js";
10
+ export { parseTopLevelIpaDigest, type BepIpaDigest } from "./rbe-bep.js";
10
11
  export { exec, type ExecRequest, type ExecOptions, type ExecResult, type ExecChildProcess, } from "./exec-client.js";
11
- export { type XcodeCreateClientParams, type XcodeClient, type XcodeProjectConfig, type XcodeBuildOptions, type ReactNativeBuildConfig, type SimulatorAttachResult, type SimulatorStatus, type SimulatorBuildStatus, type SimulatorAttachment, type SimulatorDeviceInfo, type SimulatorInstallState, } from "./resources/xcode-instances-helpers.js";
12
+ export { type XcodeCreateClientParams, type XcodeClient, type RbeStatus, type RbeStartOptions, type RbeTunnelOptions, type RbeInstallResult, type Tunnel, RbeUnsupportedError, deriveRbeTunnelUrl, DEFAULT_RBE_TUNNEL_PORT, type XcodeProjectConfig, type XcodeBuildOptions, type ReactNativeBuildConfig, type SimulatorAttachResult, type SimulatorStatus, type SimulatorBuildStatus, type SimulatorAttachment, type SimulatorDeviceInfo, type SimulatorInstallState, } from "./resources/xcode-instances-helpers.js";
12
13
  export { LimrunError, APIError, APIConnectionError, APIConnectionTimeoutError, APIUserAbortError, NotFoundError, ConflictError, RateLimitError, BadRequestError, AuthenticationError, InternalServerError, PermissionDeniedError, UnprocessableEntityError, } from "./core/error.js";
13
14
  //# sourceMappingURL=index.d.ts.map
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,oBAAiB;AAE7C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,EAAE,0BAAuB;AACzD,OAAO,EAAE,UAAU,EAAE,8BAA2B;AAChD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,oBAAiB;AACtD,OAAO,EAAE,WAAW,EAAE,6BAA0B;AAChD,qCAAkC;AAClC,OAAO,KAAK,GAAG,wBAAqB;AACpC,OAAO,EAAE,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,qBAAqB,EAAE,wBAAqB;AAC1F,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,4BAAyB;AAC3G,OAAO,EACL,IAAI,EACJ,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,gBAAgB,GACtB,yBAAsB;AACvB,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,GAC3B,+CAA4C;AAC7C,OAAO,EACL,WAAW,EACX,QAAQ,EACR,kBAAkB,EAClB,yBAAyB,EACzB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,GACzB,wBAAqB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,oBAAiB;AAE7C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,EAAE,0BAAuB;AACzD,OAAO,EAAE,UAAU,EAAE,8BAA2B;AAChD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,oBAAiB;AACtD,OAAO,EAAE,WAAW,EAAE,6BAA0B;AAChD,qCAAkC;AAClC,OAAO,KAAK,GAAG,wBAAqB;AACpC,OAAO,EAAE,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,qBAAqB,EAAE,wBAAqB;AAC1F,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,4BAAyB;AAC3G,OAAO,EAAE,sBAAsB,EAAE,KAAK,YAAY,EAAE,qBAAkB;AACtE,OAAO,EACL,IAAI,EACJ,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,gBAAgB,GACtB,yBAAsB;AACvB,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,MAAM,EACX,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,GAC3B,+CAA4C;AAC7C,OAAO,EACL,WAAW,EACX,QAAQ,EACR,kBAAkB,EAClB,yBAAyB,EACzB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,GACzB,wBAAqB"}
package/index.js CHANGED
@@ -4,7 +4,7 @@ exports = module.exports = function (...args) {
4
4
  return new exports.default(...args)
5
5
  }
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.UnprocessableEntityError = exports.PermissionDeniedError = exports.InternalServerError = exports.AuthenticationError = exports.BadRequestError = exports.RateLimitError = exports.ConflictError = exports.NotFoundError = exports.APIUserAbortError = exports.APIConnectionTimeoutError = exports.APIConnectionError = exports.APIError = exports.LimrunError = exports.exec = exports.validateBuildSettings = exports.parseBuildSettingEntries = exports.buildSettingKeyPattern = exports.startHttpProxy = exports.Ios = exports.PagePromise = exports.Limrun = exports.APIPromise = exports.toFile = exports.default = void 0;
7
+ exports.UnprocessableEntityError = exports.PermissionDeniedError = exports.InternalServerError = exports.AuthenticationError = exports.BadRequestError = exports.RateLimitError = exports.ConflictError = exports.NotFoundError = exports.APIUserAbortError = exports.APIConnectionTimeoutError = exports.APIConnectionError = exports.APIError = exports.LimrunError = exports.DEFAULT_RBE_TUNNEL_PORT = exports.deriveRbeTunnelUrl = exports.RbeUnsupportedError = exports.exec = exports.parseTopLevelIpaDigest = exports.validateBuildSettings = exports.parseBuildSettingEntries = exports.buildSettingKeyPattern = exports.startHttpProxy = exports.Ios = exports.PagePromise = exports.Limrun = exports.APIPromise = exports.toFile = exports.default = void 0;
8
8
  const tslib_1 = require("./internal/tslib.js");
9
9
  var client_1 = require("./client.js");
10
10
  Object.defineProperty(exports, "default", { enumerable: true, get: function () { return client_1.Limrun; } });
@@ -24,8 +24,14 @@ var build_settings_1 = require("./build-settings.js");
24
24
  Object.defineProperty(exports, "buildSettingKeyPattern", { enumerable: true, get: function () { return build_settings_1.buildSettingKeyPattern; } });
25
25
  Object.defineProperty(exports, "parseBuildSettingEntries", { enumerable: true, get: function () { return build_settings_1.parseBuildSettingEntries; } });
26
26
  Object.defineProperty(exports, "validateBuildSettings", { enumerable: true, get: function () { return build_settings_1.validateBuildSettings; } });
27
+ var rbe_bep_1 = require("./rbe-bep.js");
28
+ Object.defineProperty(exports, "parseTopLevelIpaDigest", { enumerable: true, get: function () { return rbe_bep_1.parseTopLevelIpaDigest; } });
27
29
  var exec_client_1 = require("./exec-client.js");
28
30
  Object.defineProperty(exports, "exec", { enumerable: true, get: function () { return exec_client_1.exec; } });
31
+ var xcode_instances_helpers_1 = require("./resources/xcode-instances-helpers.js");
32
+ Object.defineProperty(exports, "RbeUnsupportedError", { enumerable: true, get: function () { return xcode_instances_helpers_1.RbeUnsupportedError; } });
33
+ Object.defineProperty(exports, "deriveRbeTunnelUrl", { enumerable: true, get: function () { return xcode_instances_helpers_1.deriveRbeTunnelUrl; } });
34
+ Object.defineProperty(exports, "DEFAULT_RBE_TUNNEL_PORT", { enumerable: true, get: function () { return xcode_instances_helpers_1.DEFAULT_RBE_TUNNEL_PORT; } });
29
35
  var error_1 = require("./core/error.js");
30
36
  Object.defineProperty(exports, "LimrunError", { enumerable: true, get: function () { return error_1.LimrunError; } });
31
37
  Object.defineProperty(exports, "APIError", { enumerable: true, get: function () { return error_1.APIError; } });
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;;AAEtF,sCAA6C;AAApC,iGAAA,MAAM,OAAW;AAE1B,6CAAyD;AAA/B,iGAAA,MAAM,OAAA;AAChC,qDAAgD;AAAvC,yGAAA,UAAU,OAAA;AACnB,sCAAsD;AAA7C,gGAAA,MAAM,OAAA;AACf,mDAAgD;AAAvC,yGAAA,WAAW,OAAA;AACpB,+DAAkC;AAClC,+DAAoC;AACpC,8CAA0F;AAAjF,4GAAA,cAAc,OAAA;AACvB,sDAA2G;AAAlG,wHAAA,sBAAsB,OAAA;AAAE,0HAAA,wBAAwB,OAAA;AAAE,uHAAA,qBAAqB,OAAA;AAChF,gDAMuB;AALrB,mGAAA,IAAI,OAAA;AAmBN,yCAcsB;AAbpB,oGAAA,WAAW,OAAA;AACX,iGAAA,QAAQ,OAAA;AACR,2GAAA,kBAAkB,OAAA;AAClB,kHAAA,yBAAyB,OAAA;AACzB,0GAAA,iBAAiB,OAAA;AACjB,sGAAA,aAAa,OAAA;AACb,sGAAA,aAAa,OAAA;AACb,uGAAA,cAAc,OAAA;AACd,wGAAA,eAAe,OAAA;AACf,4GAAA,mBAAmB,OAAA;AACnB,4GAAA,mBAAmB,OAAA;AACnB,8GAAA,qBAAqB,OAAA;AACrB,iHAAA,wBAAwB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;;AAEtF,sCAA6C;AAApC,iGAAA,MAAM,OAAW;AAE1B,6CAAyD;AAA/B,iGAAA,MAAM,OAAA;AAChC,qDAAgD;AAAvC,yGAAA,UAAU,OAAA;AACnB,sCAAsD;AAA7C,gGAAA,MAAM,OAAA;AACf,mDAAgD;AAAvC,yGAAA,WAAW,OAAA;AACpB,+DAAkC;AAClC,+DAAoC;AACpC,8CAA0F;AAAjF,4GAAA,cAAc,OAAA;AACvB,sDAA2G;AAAlG,wHAAA,sBAAsB,OAAA;AAAE,0HAAA,wBAAwB,OAAA;AAAE,uHAAA,qBAAqB,OAAA;AAChF,wCAAsE;AAA7D,iHAAA,sBAAsB,OAAA;AAC/B,gDAMuB;AALrB,mGAAA,IAAI,OAAA;AAMN,kFAoB6C;AAZ3C,8HAAA,mBAAmB,OAAA;AACnB,6HAAA,kBAAkB,OAAA;AAClB,kIAAA,uBAAuB,OAAA;AAWzB,yCAcsB;AAbpB,oGAAA,WAAW,OAAA;AACX,iGAAA,QAAQ,OAAA;AACR,2GAAA,kBAAkB,OAAA;AAClB,kHAAA,yBAAyB,OAAA;AACzB,0GAAA,iBAAiB,OAAA;AACjB,sGAAA,aAAa,OAAA;AACb,sGAAA,aAAa,OAAA;AACb,uGAAA,cAAc,OAAA;AACd,wGAAA,eAAe,OAAA;AACf,4GAAA,mBAAmB,OAAA;AACnB,4GAAA,mBAAmB,OAAA;AACnB,8GAAA,qBAAqB,OAAA;AACrB,iHAAA,wBAAwB,OAAA"}
package/index.mjs CHANGED
@@ -8,6 +8,8 @@ export * from "./instance-client.mjs";
8
8
  export * as Ios from "./ios-client.mjs";
9
9
  export { startHttpProxy } from "./http-proxy.mjs";
10
10
  export { buildSettingKeyPattern, parseBuildSettingEntries, validateBuildSettings } from "./build-settings.mjs";
11
+ export { parseTopLevelIpaDigest } from "./rbe-bep.mjs";
11
12
  export { exec, } from "./exec-client.mjs";
13
+ export { RbeUnsupportedError, deriveRbeTunnelUrl, DEFAULT_RBE_TUNNEL_PORT, } from "./resources/xcode-instances-helpers.mjs";
12
14
  export { LimrunError, APIError, APIConnectionError, APIConnectionTimeoutError, APIUserAbortError, NotFoundError, ConflictError, RateLimitError, BadRequestError, AuthenticationError, InternalServerError, PermissionDeniedError, UnprocessableEntityError, } from "./core/error.mjs";
13
15
  //# sourceMappingURL=index.mjs.map
package/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,qBAAiB;AAE7C,OAAO,EAAmB,MAAM,EAAE,2BAAuB;AACzD,OAAO,EAAE,UAAU,EAAE,+BAA2B;AAChD,OAAO,EAAE,MAAM,EAAsB,qBAAiB;AACtD,OAAO,EAAE,WAAW,EAAE,8BAA0B;AAChD,sCAAkC;AAClC,OAAO,KAAK,GAAG,yBAAqB;AACpC,OAAO,EAAE,cAAc,EAA8C,yBAAqB;AAC1F,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,6BAAyB;AAC3G,OAAO,EACL,IAAI,GAKL,0BAAsB;AAcvB,OAAO,EACL,WAAW,EACX,QAAQ,EACR,kBAAkB,EAClB,yBAAyB,EACzB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,GACzB,yBAAqB"}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,qBAAiB;AAE7C,OAAO,EAAmB,MAAM,EAAE,2BAAuB;AACzD,OAAO,EAAE,UAAU,EAAE,+BAA2B;AAChD,OAAO,EAAE,MAAM,EAAsB,qBAAiB;AACtD,OAAO,EAAE,WAAW,EAAE,8BAA0B;AAChD,sCAAkC;AAClC,OAAO,KAAK,GAAG,yBAAqB;AACpC,OAAO,EAAE,cAAc,EAA8C,yBAAqB;AAC1F,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,6BAAyB;AAC3G,OAAO,EAAE,sBAAsB,EAAqB,sBAAkB;AACtE,OAAO,EACL,IAAI,GAKL,0BAAsB;AACvB,OAAO,EAQL,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,GAUxB,gDAA4C;AAC7C,OAAO,EACL,WAAW,EACX,QAAQ,EACR,kBAAkB,EAClB,yBAAyB,EACzB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,GACzB,yBAAqB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@limrun/api",
3
- "version": "0.30.0",
3
+ "version": "0.31.1",
4
4
  "description": "The official TypeScript library for the Limrun API",
5
5
  "author": "Limrun <contact@limrun.com>",
6
6
  "types": "./index.d.ts",
@@ -203,6 +203,16 @@
203
203
  "./pagination.mjs": {
204
204
  "default": "./pagination.mjs"
205
205
  },
206
+ "./rbe-bep": {
207
+ "import": "./rbe-bep.mjs",
208
+ "require": "./rbe-bep.js"
209
+ },
210
+ "./rbe-bep.js": {
211
+ "default": "./rbe-bep.js"
212
+ },
213
+ "./rbe-bep.mjs": {
214
+ "default": "./rbe-bep.mjs"
215
+ },
206
216
  "./resource": {
207
217
  "import": "./resource.mjs",
208
218
  "require": "./resource.js"
package/rbe-bep.d.mts ADDED
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Parses Bazel's Build Event Protocol (BEP, the `--build_event_json_file`
3
+ * newline-delimited JSON) to find a built target's top-level `.ipa` and its
4
+ * content-addressed (CAS) digest.
5
+ *
6
+ * Under `--config=limrun` the generated bazelrc sets `--remote_download_outputs=
7
+ * minimal`, so outputs are NOT downloaded to the client; their BEP `file`
8
+ * entries instead carry a `bytestream://<host>[/<instance>]/blobs/<hash>/<size>`
9
+ * URI. `lim xcode rbe install` reads that digest and hands it to the instance,
10
+ * which fetches the blob from its own RBE cache and installs it — no round-trip.
11
+ */
12
+ export type BepIpaDigest = {
13
+ /** Lowercase hex SHA-256 of the .ipa blob. */
14
+ hash: string;
15
+ /** Size of the .ipa blob in bytes. */
16
+ sizeBytes: number;
17
+ /** The .ipa file name as Bazel reported it (e.g. "App/App.ipa"). */
18
+ ipaName: string;
19
+ };
20
+ /**
21
+ * Finds the `.ipa` produced for `label` in a BEP stream and returns its CAS
22
+ * digest. Throws a descriptive Error when the target/.ipa is absent, its output
23
+ * was materialized locally (a `file://` URI) instead of left in CAS, or it was
24
+ * built with a non-SHA256 digest the instance cache cannot resolve.
25
+ */
26
+ export declare function parseTopLevelIpaDigest(bepJson: string, label: string): BepIpaDigest;
27
+ //# sourceMappingURL=rbe-bep.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rbe-bep.d.mts","sourceRoot":"","sources":["src/rbe-bep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,YAAY,GAAG;IACzB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AA8CF;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAmFnF"}
package/rbe-bep.d.ts ADDED
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Parses Bazel's Build Event Protocol (BEP, the `--build_event_json_file`
3
+ * newline-delimited JSON) to find a built target's top-level `.ipa` and its
4
+ * content-addressed (CAS) digest.
5
+ *
6
+ * Under `--config=limrun` the generated bazelrc sets `--remote_download_outputs=
7
+ * minimal`, so outputs are NOT downloaded to the client; their BEP `file`
8
+ * entries instead carry a `bytestream://<host>[/<instance>]/blobs/<hash>/<size>`
9
+ * URI. `lim xcode rbe install` reads that digest and hands it to the instance,
10
+ * which fetches the blob from its own RBE cache and installs it — no round-trip.
11
+ */
12
+ export type BepIpaDigest = {
13
+ /** Lowercase hex SHA-256 of the .ipa blob. */
14
+ hash: string;
15
+ /** Size of the .ipa blob in bytes. */
16
+ sizeBytes: number;
17
+ /** The .ipa file name as Bazel reported it (e.g. "App/App.ipa"). */
18
+ ipaName: string;
19
+ };
20
+ /**
21
+ * Finds the `.ipa` produced for `label` in a BEP stream and returns its CAS
22
+ * digest. Throws a descriptive Error when the target/.ipa is absent, its output
23
+ * was materialized locally (a `file://` URI) instead of left in CAS, or it was
24
+ * built with a non-SHA256 digest the instance cache cannot resolve.
25
+ */
26
+ export declare function parseTopLevelIpaDigest(bepJson: string, label: string): BepIpaDigest;
27
+ //# sourceMappingURL=rbe-bep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rbe-bep.d.ts","sourceRoot":"","sources":["src/rbe-bep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,YAAY,GAAG;IACzB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AA8CF;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAmFnF"}
package/rbe-bep.js ADDED
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ /**
3
+ * Parses Bazel's Build Event Protocol (BEP, the `--build_event_json_file`
4
+ * newline-delimited JSON) to find a built target's top-level `.ipa` and its
5
+ * content-addressed (CAS) digest.
6
+ *
7
+ * Under `--config=limrun` the generated bazelrc sets `--remote_download_outputs=
8
+ * minimal`, so outputs are NOT downloaded to the client; their BEP `file`
9
+ * entries instead carry a `bytestream://<host>[/<instance>]/blobs/<hash>/<size>`
10
+ * URI. `lim xcode rbe install` reads that digest and hands it to the instance,
11
+ * which fetches the blob from its own RBE cache and installs it — no round-trip.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.parseTopLevelIpaDigest = parseTopLevelIpaDigest;
15
+ /** A SHA-256 digest is exactly 64 lowercase hex chars; the instance CAS is keyed by it. */
16
+ const SHA256_HEX = /^[0-9a-f]{64}$/;
17
+ /** Extracts (hash, size) from a `bytestream://…/blobs/<hash>/<size>` URI. */
18
+ function parseBytestreamDigest(uri) {
19
+ // Tolerate an optional instance-name segment before /blobs/ by anchoring on
20
+ // the /blobs/<hash>/<size> tail rather than a fixed segment count. The hash is
21
+ // left length-agnostic here (validated as SHA-256 by the caller).
22
+ const m = uri.match(/\/blobs\/([0-9a-f]+)\/(\d+)(?:$|\/)/);
23
+ if (!m || m[1] === undefined || m[2] === undefined)
24
+ return null;
25
+ return { hash: m[1], sizeBytes: Number(m[2]) };
26
+ }
27
+ /**
28
+ * Canonicalizes a Bazel target label to the `//pkg:name` form BEP records.
29
+ * Bazel expands the `//pkg` shorthand to `//pkg:<basename(pkg)>` in its
30
+ * targetCompleted events, so `install //App` must match BEP's `//App:App`.
31
+ */
32
+ function canonicalizeLabel(label) {
33
+ if (label.includes(':'))
34
+ return label;
35
+ // Strip trailing slashes with a linear scan rather than a regex: `/\/+$/`
36
+ // backtracks quadratically on a label of many trailing slashes (CodeQL ReDoS).
37
+ let end = label.length;
38
+ while (end > 0 && label[end - 1] === '/')
39
+ end--;
40
+ const pkg = label.slice(0, end);
41
+ const name = pkg.split('/').pop() ?? '';
42
+ return name ? `${pkg}:${name}` : pkg;
43
+ }
44
+ /**
45
+ * Finds the `.ipa` produced for `label` in a BEP stream and returns its CAS
46
+ * digest. Throws a descriptive Error when the target/.ipa is absent, its output
47
+ * was materialized locally (a `file://` URI) instead of left in CAS, or it was
48
+ * built with a non-SHA256 digest the instance cache cannot resolve.
49
+ */
50
+ function parseTopLevelIpaDigest(bepJson, label) {
51
+ const canonical = canonicalizeLabel(label);
52
+ const events = [];
53
+ for (const line of bepJson.split('\n')) {
54
+ const trimmed = line.trim();
55
+ if (!trimmed)
56
+ continue;
57
+ try {
58
+ events.push(JSON.parse(trimmed));
59
+ }
60
+ catch {
61
+ // Ignore partial/garbled lines (BEP is flushed incrementally).
62
+ }
63
+ }
64
+ // The successful TargetComplete for the requested label (matched against the
65
+ // canonical //pkg:name form Bazel records, so `//App` matches `//App:App`).
66
+ const completed = events.find((e) => e.id?.targetCompleted?.label === canonical && e.completed?.success)
67
+ ?.completed;
68
+ if (!completed) {
69
+ throw new Error(`No successful build of ${label} found in the build event log. ` +
70
+ `Build it first with --config=limrun (e.g. \`bazelisk --digest_function=sha256 build --config=limrun ${label}\`).`);
71
+ }
72
+ // Default output group -> the fileSet (namedSetOfFiles) ids holding its outputs.
73
+ const rootFileSetIds = (completed.outputGroup ?? [])
74
+ .filter((og) => og.name === 'default' || !og.name)
75
+ .flatMap((og) => (og.fileSets ?? []).map((fs) => fs.id))
76
+ .filter((id) => !!id);
77
+ if (rootFileSetIds.length === 0) {
78
+ throw new Error(`Build of ${label} reported no default output files.`);
79
+ }
80
+ // Index namedSetOfFiles by id and walk transitively (sets can nest).
81
+ const namedSets = new Map();
82
+ for (const e of events) {
83
+ const id = e.id?.namedSet?.id;
84
+ if (id && e.namedSetOfFiles)
85
+ namedSets.set(id, e.namedSetOfFiles);
86
+ }
87
+ const seen = new Set();
88
+ const queue = [...rootFileSetIds];
89
+ // Set to the name of an .ipa that was seen but had no bytestream digest (its
90
+ // output was downloaded locally) — distinguishes that case from "no .ipa at all".
91
+ let localOnlyIpa;
92
+ while (queue.length > 0) {
93
+ const id = queue.shift();
94
+ if (seen.has(id))
95
+ continue;
96
+ seen.add(id);
97
+ const set = namedSets.get(id);
98
+ if (!set)
99
+ continue;
100
+ for (const f of set.files ?? []) {
101
+ if (!f.name || !f.name.endsWith('.ipa'))
102
+ continue;
103
+ const digest = f.uri ? parseBytestreamDigest(f.uri) : null;
104
+ if (digest) {
105
+ // The instance cache is keyed by SHA-256. A non-64-hex digest means the
106
+ // build used a different digest function (Bazel 9 defaults to BLAKE3),
107
+ // which the server CAS cannot resolve — surface that clearly here rather
108
+ // than letting it fail later as a cryptic cache miss.
109
+ if (!SHA256_HEX.test(digest.hash)) {
110
+ throw new Error(`Built ${f.name} with a non-SHA256 digest (got ${digest.hash.length} hex chars, expected 64; ` +
111
+ `likely BLAKE3 on Bazel 9). The instance cache is keyed by SHA-256 — rebuild with ` +
112
+ `--digest_function=sha256, e.g. \`bazelisk --digest_function=sha256 build --config=limrun ${label}\`.`);
113
+ }
114
+ return { hash: digest.hash, sizeBytes: digest.sizeBytes, ipaName: f.name };
115
+ }
116
+ localOnlyIpa = f.name;
117
+ }
118
+ for (const nested of set.fileSets ?? []) {
119
+ if (nested.id)
120
+ queue.push(nested.id);
121
+ }
122
+ }
123
+ if (localOnlyIpa) {
124
+ throw new Error(`Found ${label}'s .ipa (${localOnlyIpa}) but it has no remote (bytestream) digest — its ` +
125
+ `output was downloaded locally. Ensure you built with --config=limrun (which keeps outputs ` +
126
+ `in the instance cache via --remote_download_outputs=minimal).`);
127
+ }
128
+ throw new Error(`No .ipa output found for ${label} in the build event log.`);
129
+ }
130
+ //# sourceMappingURL=rbe-bep.js.map
package/rbe-bep.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rbe-bep.js","sourceRoot":"","sources":["src/rbe-bep.ts"],"names":[],"mappings":"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"}
package/rbe-bep.mjs ADDED
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Parses Bazel's Build Event Protocol (BEP, the `--build_event_json_file`
3
+ * newline-delimited JSON) to find a built target's top-level `.ipa` and its
4
+ * content-addressed (CAS) digest.
5
+ *
6
+ * Under `--config=limrun` the generated bazelrc sets `--remote_download_outputs=
7
+ * minimal`, so outputs are NOT downloaded to the client; their BEP `file`
8
+ * entries instead carry a `bytestream://<host>[/<instance>]/blobs/<hash>/<size>`
9
+ * URI. `lim xcode rbe install` reads that digest and hands it to the instance,
10
+ * which fetches the blob from its own RBE cache and installs it — no round-trip.
11
+ */
12
+ /** A SHA-256 digest is exactly 64 lowercase hex chars; the instance CAS is keyed by it. */
13
+ const SHA256_HEX = /^[0-9a-f]{64}$/;
14
+ /** Extracts (hash, size) from a `bytestream://…/blobs/<hash>/<size>` URI. */
15
+ function parseBytestreamDigest(uri) {
16
+ // Tolerate an optional instance-name segment before /blobs/ by anchoring on
17
+ // the /blobs/<hash>/<size> tail rather than a fixed segment count. The hash is
18
+ // left length-agnostic here (validated as SHA-256 by the caller).
19
+ const m = uri.match(/\/blobs\/([0-9a-f]+)\/(\d+)(?:$|\/)/);
20
+ if (!m || m[1] === undefined || m[2] === undefined)
21
+ return null;
22
+ return { hash: m[1], sizeBytes: Number(m[2]) };
23
+ }
24
+ /**
25
+ * Canonicalizes a Bazel target label to the `//pkg:name` form BEP records.
26
+ * Bazel expands the `//pkg` shorthand to `//pkg:<basename(pkg)>` in its
27
+ * targetCompleted events, so `install //App` must match BEP's `//App:App`.
28
+ */
29
+ function canonicalizeLabel(label) {
30
+ if (label.includes(':'))
31
+ return label;
32
+ // Strip trailing slashes with a linear scan rather than a regex: `/\/+$/`
33
+ // backtracks quadratically on a label of many trailing slashes (CodeQL ReDoS).
34
+ let end = label.length;
35
+ while (end > 0 && label[end - 1] === '/')
36
+ end--;
37
+ const pkg = label.slice(0, end);
38
+ const name = pkg.split('/').pop() ?? '';
39
+ return name ? `${pkg}:${name}` : pkg;
40
+ }
41
+ /**
42
+ * Finds the `.ipa` produced for `label` in a BEP stream and returns its CAS
43
+ * digest. Throws a descriptive Error when the target/.ipa is absent, its output
44
+ * was materialized locally (a `file://` URI) instead of left in CAS, or it was
45
+ * built with a non-SHA256 digest the instance cache cannot resolve.
46
+ */
47
+ export function parseTopLevelIpaDigest(bepJson, label) {
48
+ const canonical = canonicalizeLabel(label);
49
+ const events = [];
50
+ for (const line of bepJson.split('\n')) {
51
+ const trimmed = line.trim();
52
+ if (!trimmed)
53
+ continue;
54
+ try {
55
+ events.push(JSON.parse(trimmed));
56
+ }
57
+ catch {
58
+ // Ignore partial/garbled lines (BEP is flushed incrementally).
59
+ }
60
+ }
61
+ // The successful TargetComplete for the requested label (matched against the
62
+ // canonical //pkg:name form Bazel records, so `//App` matches `//App:App`).
63
+ const completed = events.find((e) => e.id?.targetCompleted?.label === canonical && e.completed?.success)
64
+ ?.completed;
65
+ if (!completed) {
66
+ throw new Error(`No successful build of ${label} found in the build event log. ` +
67
+ `Build it first with --config=limrun (e.g. \`bazelisk --digest_function=sha256 build --config=limrun ${label}\`).`);
68
+ }
69
+ // Default output group -> the fileSet (namedSetOfFiles) ids holding its outputs.
70
+ const rootFileSetIds = (completed.outputGroup ?? [])
71
+ .filter((og) => og.name === 'default' || !og.name)
72
+ .flatMap((og) => (og.fileSets ?? []).map((fs) => fs.id))
73
+ .filter((id) => !!id);
74
+ if (rootFileSetIds.length === 0) {
75
+ throw new Error(`Build of ${label} reported no default output files.`);
76
+ }
77
+ // Index namedSetOfFiles by id and walk transitively (sets can nest).
78
+ const namedSets = new Map();
79
+ for (const e of events) {
80
+ const id = e.id?.namedSet?.id;
81
+ if (id && e.namedSetOfFiles)
82
+ namedSets.set(id, e.namedSetOfFiles);
83
+ }
84
+ const seen = new Set();
85
+ const queue = [...rootFileSetIds];
86
+ // Set to the name of an .ipa that was seen but had no bytestream digest (its
87
+ // output was downloaded locally) — distinguishes that case from "no .ipa at all".
88
+ let localOnlyIpa;
89
+ while (queue.length > 0) {
90
+ const id = queue.shift();
91
+ if (seen.has(id))
92
+ continue;
93
+ seen.add(id);
94
+ const set = namedSets.get(id);
95
+ if (!set)
96
+ continue;
97
+ for (const f of set.files ?? []) {
98
+ if (!f.name || !f.name.endsWith('.ipa'))
99
+ continue;
100
+ const digest = f.uri ? parseBytestreamDigest(f.uri) : null;
101
+ if (digest) {
102
+ // The instance cache is keyed by SHA-256. A non-64-hex digest means the
103
+ // build used a different digest function (Bazel 9 defaults to BLAKE3),
104
+ // which the server CAS cannot resolve — surface that clearly here rather
105
+ // than letting it fail later as a cryptic cache miss.
106
+ if (!SHA256_HEX.test(digest.hash)) {
107
+ throw new Error(`Built ${f.name} with a non-SHA256 digest (got ${digest.hash.length} hex chars, expected 64; ` +
108
+ `likely BLAKE3 on Bazel 9). The instance cache is keyed by SHA-256 — rebuild with ` +
109
+ `--digest_function=sha256, e.g. \`bazelisk --digest_function=sha256 build --config=limrun ${label}\`.`);
110
+ }
111
+ return { hash: digest.hash, sizeBytes: digest.sizeBytes, ipaName: f.name };
112
+ }
113
+ localOnlyIpa = f.name;
114
+ }
115
+ for (const nested of set.fileSets ?? []) {
116
+ if (nested.id)
117
+ queue.push(nested.id);
118
+ }
119
+ }
120
+ if (localOnlyIpa) {
121
+ throw new Error(`Found ${label}'s .ipa (${localOnlyIpa}) but it has no remote (bytestream) digest — its ` +
122
+ `output was downloaded locally. Ensure you built with --config=limrun (which keeps outputs ` +
123
+ `in the instance cache via --remote_download_outputs=minimal).`);
124
+ }
125
+ throw new Error(`No .ipa output found for ${label} in the build event log.`);
126
+ }
127
+ //# sourceMappingURL=rbe-bep.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rbe-bep.mjs","sourceRoot":"","sources":["src/rbe-bep.ts"],"names":[],"mappings":"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"}
@@ -3,5 +3,5 @@ export { type Asset, type AssetListResponse, type AssetGetOrCreateResponse, type
3
3
  export { IosInstances, type IosInstance, type IosInstanceCreateParams, type IosInstanceListParams, type IosInstancesItems, } from "./ios-instances.mjs";
4
4
  export { type XcodeInstance, type XcodeInstanceCreateParams, type XcodeInstanceListParams, type XcodeInstancesItems, } from "./xcode-instances.mjs";
5
5
  export { Assets, AssetGetOrUploadParams, AssetGetOrUploadResponse } from "./assets-helpers.mjs";
6
- export { XcodeInstances, type XcodeCreateClientParams, type XcodeClient, type XcodeProjectConfig, type XcodeBuildOptions, type ReactNativeBuildConfig, type SimulatorAttachResult, type SimulatorStatus, type SimulatorBuildStatus, type SimulatorAttachment, type SimulatorDeviceInfo, type SimulatorInstallState, } from "./xcode-instances-helpers.mjs";
6
+ export { XcodeInstances, RbeUnsupportedError, DEFAULT_RBE_TUNNEL_PORT, type XcodeCreateClientParams, type XcodeClient, type XcodeProjectConfig, type XcodeBuildOptions, type ReactNativeBuildConfig, type SimulatorAttachResult, type SimulatorStatus, type SimulatorBuildStatus, type SimulatorAttachment, type SimulatorDeviceInfo, type SimulatorInstallState, type RbeInstallResult, } from "./xcode-instances-helpers.mjs";
7
7
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/resources/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,GAC3B,gCAA4B;AAC7B,OAAO,EACL,KAAK,KAAK,EACV,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,sBAAsB,GAC5B,qBAAiB;AAClB,OAAO,EACL,YAAY,EACZ,KAAK,WAAW,EAChB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,GACvB,4BAAwB;AACzB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,GACzB,8BAA0B;AAE3B,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,6BAAyB;AAC5F,OAAO,EACL,cAAc,EACd,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,GAC3B,sCAAkC"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/resources/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,GAC3B,gCAA4B;AAC7B,OAAO,EACL,KAAK,KAAK,EACV,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,sBAAsB,GAC5B,qBAAiB;AAClB,OAAO,EACL,YAAY,EACZ,KAAK,WAAW,EAChB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,GACvB,4BAAwB;AACzB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,GACzB,8BAA0B;AAE3B,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,6BAAyB;AAC5F,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,sCAAkC"}
@@ -3,5 +3,5 @@ export { type Asset, type AssetListResponse, type AssetGetOrCreateResponse, type
3
3
  export { IosInstances, type IosInstance, type IosInstanceCreateParams, type IosInstanceListParams, type IosInstancesItems, } from "./ios-instances.js";
4
4
  export { type XcodeInstance, type XcodeInstanceCreateParams, type XcodeInstanceListParams, type XcodeInstancesItems, } from "./xcode-instances.js";
5
5
  export { Assets, AssetGetOrUploadParams, AssetGetOrUploadResponse } from "./assets-helpers.js";
6
- export { XcodeInstances, type XcodeCreateClientParams, type XcodeClient, type XcodeProjectConfig, type XcodeBuildOptions, type ReactNativeBuildConfig, type SimulatorAttachResult, type SimulatorStatus, type SimulatorBuildStatus, type SimulatorAttachment, type SimulatorDeviceInfo, type SimulatorInstallState, } from "./xcode-instances-helpers.js";
6
+ export { XcodeInstances, RbeUnsupportedError, DEFAULT_RBE_TUNNEL_PORT, type XcodeCreateClientParams, type XcodeClient, type XcodeProjectConfig, type XcodeBuildOptions, type ReactNativeBuildConfig, type SimulatorAttachResult, type SimulatorStatus, type SimulatorBuildStatus, type SimulatorAttachment, type SimulatorDeviceInfo, type SimulatorInstallState, type RbeInstallResult, } from "./xcode-instances-helpers.js";
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/resources/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,GAC3B,+BAA4B;AAC7B,OAAO,EACL,KAAK,KAAK,EACV,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,sBAAsB,GAC5B,oBAAiB;AAClB,OAAO,EACL,YAAY,EACZ,KAAK,WAAW,EAChB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,GACvB,2BAAwB;AACzB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,GACzB,6BAA0B;AAE3B,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,4BAAyB;AAC5F,OAAO,EACL,cAAc,EACd,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,GAC3B,qCAAkC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/resources/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,GAC3B,+BAA4B;AAC7B,OAAO,EACL,KAAK,KAAK,EACV,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,sBAAsB,GAC5B,oBAAiB;AAClB,OAAO,EACL,YAAY,EACZ,KAAK,WAAW,EAChB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,GACvB,2BAAwB;AACzB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,GACzB,6BAA0B;AAE3B,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,4BAAyB;AAC5F,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,qCAAkC"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.XcodeInstances = exports.Assets = exports.IosInstances = exports.AndroidInstances = void 0;
4
+ exports.DEFAULT_RBE_TUNNEL_PORT = exports.RbeUnsupportedError = exports.XcodeInstances = exports.Assets = exports.IosInstances = exports.AndroidInstances = void 0;
5
5
  var android_instances_1 = require("./android-instances.js");
6
6
  Object.defineProperty(exports, "AndroidInstances", { enumerable: true, get: function () { return android_instances_1.AndroidInstances; } });
7
7
  var ios_instances_1 = require("./ios-instances.js");
@@ -10,4 +10,6 @@ var assets_helpers_1 = require("./assets-helpers.js");
10
10
  Object.defineProperty(exports, "Assets", { enumerable: true, get: function () { return assets_helpers_1.Assets; } });
11
11
  var xcode_instances_helpers_1 = require("./xcode-instances-helpers.js");
12
12
  Object.defineProperty(exports, "XcodeInstances", { enumerable: true, get: function () { return xcode_instances_helpers_1.XcodeInstances; } });
13
+ Object.defineProperty(exports, "RbeUnsupportedError", { enumerable: true, get: function () { return xcode_instances_helpers_1.RbeUnsupportedError; } });
14
+ Object.defineProperty(exports, "DEFAULT_RBE_TUNNEL_PORT", { enumerable: true, get: function () { return xcode_instances_helpers_1.DEFAULT_RBE_TUNNEL_PORT; } });
13
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/resources/index.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;AAEtF,4DAM6B;AAL3B,qHAAA,gBAAgB,OAAA;AAclB,oDAMyB;AALvB,6GAAA,YAAY,OAAA;AAad,sDAA4F;AAAnF,wGAAA,MAAM,OAAA;AACf,wEAamC;AAZjC,yHAAA,cAAc,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/resources/index.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;AAEtF,4DAM6B;AAL3B,qHAAA,gBAAgB,OAAA;AAclB,oDAMyB;AALvB,6GAAA,YAAY,OAAA;AAad,sDAA4F;AAAnF,wGAAA,MAAM,OAAA;AACf,wEAgBmC;AAfjC,yHAAA,cAAc,OAAA;AACd,8HAAA,mBAAmB,OAAA;AACnB,kIAAA,uBAAuB,OAAA"}
@@ -2,5 +2,5 @@
2
2
  export { AndroidInstances, } from "./android-instances.mjs";
3
3
  export { IosInstances, } from "./ios-instances.mjs";
4
4
  export { Assets } from "./assets-helpers.mjs";
5
- export { XcodeInstances, } from "./xcode-instances-helpers.mjs";
5
+ export { XcodeInstances, RbeUnsupportedError, DEFAULT_RBE_TUNNEL_PORT, } from "./xcode-instances-helpers.mjs";
6
6
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/resources/index.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,OAAO,EACL,gBAAgB,GAKjB,gCAA4B;AAS7B,OAAO,EACL,YAAY,GAKb,4BAAwB;AAQzB,OAAO,EAAE,MAAM,EAAoD,6BAAyB;AAC5F,OAAO,EACL,cAAc,GAYf,sCAAkC"}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/resources/index.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,OAAO,EACL,gBAAgB,GAKjB,gCAA4B;AAS7B,OAAO,EACL,YAAY,GAKb,4BAAwB;AAQzB,OAAO,EAAE,MAAM,EAAoD,6BAAyB;AAC5F,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,uBAAuB,GAaxB,sCAAkC"}