@boatdev/sdk 1.11.0 → 1.12.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 (175) hide show
  1. package/.openapi-generator/FILES +42 -0
  2. package/dist/apis/BoatApi.d.ts +191 -14
  3. package/dist/apis/BoatApi.js +466 -14
  4. package/dist/esm/apis/BoatApi.d.ts +191 -14
  5. package/dist/esm/apis/BoatApi.js +466 -14
  6. package/dist/esm/models/CreateSandboxRequest.d.ts +35 -1
  7. package/dist/esm/models/CreateSandboxRequest.js +17 -0
  8. package/dist/esm/models/CreateSandboxRequestFilesInner.d.ts +52 -0
  9. package/dist/esm/models/CreateSandboxRequestFilesInner.js +56 -0
  10. package/dist/esm/models/CreateSandboxResponse.d.ts +7 -0
  11. package/dist/esm/models/CreateSandboxResponse.js +3 -0
  12. package/dist/esm/models/CreateSandboxResponseAllOfHostedPortsInner.d.ts +77 -0
  13. package/dist/esm/models/CreateSandboxResponseAllOfHostedPortsInner.js +64 -0
  14. package/dist/esm/models/FileDeleteResponse.d.ts +57 -0
  15. package/dist/esm/models/FileDeleteResponse.js +59 -0
  16. package/dist/esm/models/FileEntry.d.ts +68 -0
  17. package/dist/esm/models/FileEntry.js +67 -0
  18. package/dist/esm/models/FileFindResponse.d.ts +70 -0
  19. package/dist/esm/models/FileFindResponse.js +66 -0
  20. package/dist/esm/models/FileFindResponseAllOfMatches.d.ts +44 -0
  21. package/dist/esm/models/FileFindResponseAllOfMatches.js +51 -0
  22. package/dist/esm/models/FileFolderRequest.d.ts +38 -0
  23. package/dist/esm/models/FileFolderRequest.js +45 -0
  24. package/dist/esm/models/FileInfoResponse.d.ts +95 -0
  25. package/dist/esm/models/FileInfoResponse.js +85 -0
  26. package/dist/esm/models/FileListResponse.d.ts +70 -0
  27. package/dist/esm/models/FileListResponse.js +68 -0
  28. package/dist/esm/models/FileMoveRequest.d.ts +44 -0
  29. package/dist/esm/models/FileMoveRequest.js +49 -0
  30. package/dist/esm/models/FileMoveResponse.d.ts +63 -0
  31. package/dist/esm/models/FileMoveResponse.js +63 -0
  32. package/dist/esm/models/FilePermissionsRequest.d.ts +38 -0
  33. package/dist/esm/models/FilePermissionsRequest.js +47 -0
  34. package/dist/esm/models/FileReplaceRequest.d.ts +44 -0
  35. package/dist/esm/models/FileReplaceRequest.js +51 -0
  36. package/dist/esm/models/FileReplaceResponse.d.ts +58 -0
  37. package/dist/esm/models/FileReplaceResponse.js +60 -0
  38. package/dist/esm/models/FileReplaceResponseAllOfResults.d.ts +50 -0
  39. package/dist/esm/models/FileReplaceResponseAllOfResults.js +51 -0
  40. package/dist/esm/models/FileSearchResponse.d.ts +69 -0
  41. package/dist/esm/models/FileSearchResponse.js +65 -0
  42. package/dist/esm/models/LimitsFields.d.ts +54 -16
  43. package/dist/esm/models/LimitsFields.js +16 -2
  44. package/dist/esm/models/LimitsFieldsOveragePrices.d.ts +51 -0
  45. package/dist/esm/models/LimitsFieldsOveragePrices.js +48 -0
  46. package/dist/esm/models/LimitsFieldsOveragePricesStartBracketsInner.d.ts +44 -0
  47. package/dist/esm/models/LimitsFieldsOveragePricesStartBracketsInner.js +45 -0
  48. package/dist/esm/models/LimitsFieldsPlanIncluded.d.ts +44 -0
  49. package/dist/esm/models/LimitsFieldsPlanIncluded.js +45 -0
  50. package/dist/esm/models/LimitsFieldsStartLimitsWithWallet.d.ts +44 -0
  51. package/dist/esm/models/LimitsFieldsStartLimitsWithWallet.js +45 -0
  52. package/dist/esm/models/LimitsFieldsWallet.d.ts +32 -0
  53. package/dist/esm/models/LimitsFieldsWallet.js +41 -0
  54. package/dist/esm/models/LimitsResponse.d.ts +54 -16
  55. package/dist/esm/models/LimitsResponse.js +16 -2
  56. package/dist/esm/models/NamedSnapshotAllowance.d.ts +9 -3
  57. package/dist/esm/models/NamedSnapshotAllowance.js +2 -0
  58. package/dist/esm/models/SavedSnapshotAllowance.d.ts +9 -3
  59. package/dist/esm/models/SavedSnapshotAllowance.js +2 -0
  60. package/dist/esm/models/index.d.ts +21 -0
  61. package/dist/esm/models/index.js +21 -0
  62. package/dist/models/CreateSandboxRequest.d.ts +35 -1
  63. package/dist/models/CreateSandboxRequest.js +18 -1
  64. package/dist/models/CreateSandboxRequestFilesInner.d.ts +52 -0
  65. package/dist/models/CreateSandboxRequestFilesInner.js +64 -0
  66. package/dist/models/CreateSandboxResponse.d.ts +7 -0
  67. package/dist/models/CreateSandboxResponse.js +3 -0
  68. package/dist/models/CreateSandboxResponseAllOfHostedPortsInner.d.ts +77 -0
  69. package/dist/models/CreateSandboxResponseAllOfHostedPortsInner.js +72 -0
  70. package/dist/models/FileDeleteResponse.d.ts +57 -0
  71. package/dist/models/FileDeleteResponse.js +67 -0
  72. package/dist/models/FileEntry.d.ts +68 -0
  73. package/dist/models/FileEntry.js +74 -0
  74. package/dist/models/FileFindResponse.d.ts +70 -0
  75. package/dist/models/FileFindResponse.js +74 -0
  76. package/dist/models/FileFindResponseAllOfMatches.d.ts +44 -0
  77. package/dist/models/FileFindResponseAllOfMatches.js +58 -0
  78. package/dist/models/FileFolderRequest.d.ts +38 -0
  79. package/dist/models/FileFolderRequest.js +52 -0
  80. package/dist/models/FileInfoResponse.d.ts +95 -0
  81. package/dist/models/FileInfoResponse.js +93 -0
  82. package/dist/models/FileListResponse.d.ts +70 -0
  83. package/dist/models/FileListResponse.js +76 -0
  84. package/dist/models/FileMoveRequest.d.ts +44 -0
  85. package/dist/models/FileMoveRequest.js +56 -0
  86. package/dist/models/FileMoveResponse.d.ts +63 -0
  87. package/dist/models/FileMoveResponse.js +71 -0
  88. package/dist/models/FilePermissionsRequest.d.ts +38 -0
  89. package/dist/models/FilePermissionsRequest.js +54 -0
  90. package/dist/models/FileReplaceRequest.d.ts +44 -0
  91. package/dist/models/FileReplaceRequest.js +58 -0
  92. package/dist/models/FileReplaceResponse.d.ts +58 -0
  93. package/dist/models/FileReplaceResponse.js +68 -0
  94. package/dist/models/FileReplaceResponseAllOfResults.d.ts +50 -0
  95. package/dist/models/FileReplaceResponseAllOfResults.js +58 -0
  96. package/dist/models/FileSearchResponse.d.ts +69 -0
  97. package/dist/models/FileSearchResponse.js +73 -0
  98. package/dist/models/LimitsFields.d.ts +54 -16
  99. package/dist/models/LimitsFields.js +16 -2
  100. package/dist/models/LimitsFieldsOveragePrices.d.ts +51 -0
  101. package/dist/models/LimitsFieldsOveragePrices.js +55 -0
  102. package/dist/models/LimitsFieldsOveragePricesStartBracketsInner.d.ts +44 -0
  103. package/dist/models/LimitsFieldsOveragePricesStartBracketsInner.js +52 -0
  104. package/dist/models/LimitsFieldsPlanIncluded.d.ts +44 -0
  105. package/dist/models/LimitsFieldsPlanIncluded.js +52 -0
  106. package/dist/models/LimitsFieldsStartLimitsWithWallet.d.ts +44 -0
  107. package/dist/models/LimitsFieldsStartLimitsWithWallet.js +52 -0
  108. package/dist/models/LimitsFieldsWallet.d.ts +32 -0
  109. package/dist/models/LimitsFieldsWallet.js +48 -0
  110. package/dist/models/LimitsResponse.d.ts +54 -16
  111. package/dist/models/LimitsResponse.js +16 -2
  112. package/dist/models/NamedSnapshotAllowance.d.ts +9 -3
  113. package/dist/models/NamedSnapshotAllowance.js +2 -0
  114. package/dist/models/SavedSnapshotAllowance.d.ts +9 -3
  115. package/dist/models/SavedSnapshotAllowance.js +2 -0
  116. package/dist/models/index.d.ts +21 -0
  117. package/dist/models/index.js +21 -0
  118. package/docs/BoatApi.md +744 -48
  119. package/docs/CreateSandboxRequest.md +8 -0
  120. package/docs/CreateSandboxRequestFilesInner.md +36 -0
  121. package/docs/CreateSandboxResponse.md +2 -0
  122. package/docs/CreateSandboxResponseAllOfHostedPortsInner.md +44 -0
  123. package/docs/FileDeleteResponse.md +38 -0
  124. package/docs/FileEntry.md +44 -0
  125. package/docs/FileFindResponse.md +42 -0
  126. package/docs/FileFindResponseAllOfMatches.md +36 -0
  127. package/docs/FileFolderRequest.md +34 -0
  128. package/docs/FileInfoResponse.md +50 -0
  129. package/docs/FileListResponse.md +42 -0
  130. package/docs/FileMoveRequest.md +36 -0
  131. package/docs/FileMoveResponse.md +40 -0
  132. package/docs/FilePermissionsRequest.md +34 -0
  133. package/docs/FileReplaceRequest.md +36 -0
  134. package/docs/FileReplaceResponse.md +38 -0
  135. package/docs/FileReplaceResponseAllOfResults.md +38 -0
  136. package/docs/FileSearchResponse.md +42 -0
  137. package/docs/LimitsFields.md +12 -2
  138. package/docs/LimitsFieldsOveragePrices.md +39 -0
  139. package/docs/LimitsFieldsOveragePricesStartBracketsInner.md +36 -0
  140. package/docs/LimitsFieldsPlanIncluded.md +37 -0
  141. package/docs/LimitsFieldsStartLimitsWithWallet.md +37 -0
  142. package/docs/LimitsFieldsWallet.md +33 -0
  143. package/docs/LimitsResponse.md +12 -2
  144. package/docs/NamedSnapshotAllowance.md +3 -1
  145. package/docs/SavedSnapshotAllowance.md +3 -1
  146. package/package.json +1 -1
  147. package/src/apis/BoatApi.ts +721 -14
  148. package/src/models/CreateSandboxRequest.ts +57 -1
  149. package/src/models/CreateSandboxRequestFilesInner.ts +94 -0
  150. package/src/models/CreateSandboxResponse.ts +15 -0
  151. package/src/models/CreateSandboxResponseAllOfHostedPortsInner.ts +128 -0
  152. package/src/models/FileDeleteResponse.ts +102 -0
  153. package/src/models/FileEntry.ts +120 -0
  154. package/src/models/FileFindResponse.ts +127 -0
  155. package/src/models/FileFindResponseAllOfMatches.ts +84 -0
  156. package/src/models/FileFolderRequest.ts +74 -0
  157. package/src/models/FileInfoResponse.ts +158 -0
  158. package/src/models/FileListResponse.ts +128 -0
  159. package/src/models/FileMoveRequest.ts +83 -0
  160. package/src/models/FileMoveResponse.ts +111 -0
  161. package/src/models/FilePermissionsRequest.ts +75 -0
  162. package/src/models/FileReplaceRequest.ts +84 -0
  163. package/src/models/FileReplaceResponse.ts +110 -0
  164. package/src/models/FileReplaceResponseAllOfResults.ts +91 -0
  165. package/src/models/FileSearchResponse.ts +119 -0
  166. package/src/models/LimitsFields.ts +90 -16
  167. package/src/models/LimitsFieldsOveragePrices.ts +97 -0
  168. package/src/models/LimitsFieldsOveragePricesStartBracketsInner.ts +81 -0
  169. package/src/models/LimitsFieldsPlanIncluded.ts +81 -0
  170. package/src/models/LimitsFieldsStartLimitsWithWallet.ts +81 -0
  171. package/src/models/LimitsFieldsWallet.ts +65 -0
  172. package/src/models/LimitsResponse.ts +90 -16
  173. package/src/models/NamedSnapshotAllowance.ts +11 -3
  174. package/src/models/SavedSnapshotAllowance.ts +11 -3
  175. package/src/models/index.ts +21 -0
@@ -47,7 +47,18 @@ import { DesktopRequestToJSON, } from '../models/DesktopRequest';
47
47
  import { DesktopResponseFromJSON, } from '../models/DesktopResponse';
48
48
  import { EnvironmentItemChangeResponseFromJSON, } from '../models/EnvironmentItemChangeResponse';
49
49
  import { EventsResponseFromJSON, } from '../models/EventsResponse';
50
+ import { FileDeleteResponseFromJSON, } from '../models/FileDeleteResponse';
51
+ import { FileFindResponseFromJSON, } from '../models/FileFindResponse';
52
+ import { FileFolderRequestToJSON, } from '../models/FileFolderRequest';
53
+ import { FileInfoResponseFromJSON, } from '../models/FileInfoResponse';
54
+ import { FileListResponseFromJSON, } from '../models/FileListResponse';
55
+ import { FileMoveRequestToJSON, } from '../models/FileMoveRequest';
56
+ import { FileMoveResponseFromJSON, } from '../models/FileMoveResponse';
57
+ import { FilePermissionsRequestToJSON, } from '../models/FilePermissionsRequest';
50
58
  import { FileReadResponseFromJSON, } from '../models/FileReadResponse';
59
+ import { FileReplaceRequestToJSON, } from '../models/FileReplaceRequest';
60
+ import { FileReplaceResponseFromJSON, } from '../models/FileReplaceResponse';
61
+ import { FileSearchResponseFromJSON, } from '../models/FileSearchResponse';
51
62
  import { FileUrlRequestToJSON, } from '../models/FileUrlRequest';
52
63
  import { FileUrlResponseFromJSON, } from '../models/FileUrlResponse';
53
64
  import { FileWriteRequestToJSON, } from '../models/FileWriteRequest';
@@ -857,6 +868,54 @@ export class BoatApi extends runtime.BaseAPI {
857
868
  const response = await this.createEnvironmentRaw(requestParameters, initOverrides);
858
869
  return await response.value();
859
870
  }
871
+ /**
872
+ * Creates request options for createFolder without sending the request
873
+ */
874
+ async createFolderRequestOpts(input) {
875
+ const requestParameters = runtime.unflattenBody(input, 'fileFolderRequest', ['sandboxId'], []);
876
+ if (requestParameters['sandboxId'] == null) {
877
+ throw new runtime.RequiredError('sandboxId', 'Required parameter "sandboxId" was null or undefined when calling createFolder().');
878
+ }
879
+ if (requestParameters['fileFolderRequest'] == null) {
880
+ throw new runtime.RequiredError('fileFolderRequest', 'Required parameter "fileFolderRequest" was null or undefined when calling createFolder().');
881
+ }
882
+ const queryParameters = {};
883
+ const headerParameters = {};
884
+ headerParameters['Content-Type'] = 'application/json';
885
+ if (this.configuration && this.configuration.accessToken) {
886
+ const token = this.configuration.accessToken;
887
+ const tokenString = await token("BoatBearerAuth", []);
888
+ if (tokenString) {
889
+ headerParameters["Authorization"] = `Bearer ${tokenString}`;
890
+ }
891
+ }
892
+ let urlPath = `/sandboxes/{sandboxId}/files/folder`;
893
+ urlPath = urlPath.replace('{sandboxId}', encodeURIComponent(String(requestParameters['sandboxId'])));
894
+ return {
895
+ path: urlPath,
896
+ method: 'POST',
897
+ headers: headerParameters,
898
+ query: queryParameters,
899
+ body: FileFolderRequestToJSON(requestParameters['fileFolderRequest']),
900
+ };
901
+ }
902
+ /**
903
+ * Missing parent directories are created. An existing directory is not an error. Needs `file.write`.
904
+ * Create a directory in a sandbox
905
+ */
906
+ async createFolderRaw(requestParameters, initOverrides) {
907
+ const requestOptions = await this.createFolderRequestOpts(requestParameters);
908
+ const response = await this.request(requestOptions, initOverrides);
909
+ return new runtime.JSONApiResponse(response, (jsonValue) => FileInfoResponseFromJSON(jsonValue));
910
+ }
911
+ /**
912
+ * Missing parent directories are created. An existing directory is not an error. Needs `file.write`.
913
+ * Create a directory in a sandbox
914
+ */
915
+ async createFolder(requestParameters, initOverrides) {
916
+ const response = await this.createFolderRaw(requestParameters, initOverrides);
917
+ return await response.value();
918
+ }
860
919
  /**
861
920
  * Creates request options for createScopedApiKey without sending the request
862
921
  */
@@ -885,7 +944,7 @@ export class BoatApi extends runtime.BaseAPI {
885
944
  };
886
945
  }
887
946
  /**
888
- * Creates a scoped, expiring API key. Requires a dashboard/CLI session or an admin-scoped token. The secret is returned once. This dedicated path returns a typed 503 until scoped credential creation is activated.
947
+ * Creates a scoped, expiring API key. Requires a dashboard/CLI session or an admin-scoped token. The secret is returned once. An unknown field is a 400, so a misspelled scope never creates a full-access key. environmentIds takes your own environments and the org environments you can use. This dedicated path returns a typed 503 until scoped credential creation is activated.
889
948
  * Create a scoped API key
890
949
  */
891
950
  async createScopedApiKeyRaw(requestParameters, initOverrides) {
@@ -894,7 +953,7 @@ export class BoatApi extends runtime.BaseAPI {
894
953
  return new runtime.JSONApiResponse(response, (jsonValue) => ApiKeySecretResponseFromJSON(jsonValue));
895
954
  }
896
955
  /**
897
- * Creates a scoped, expiring API key. Requires a dashboard/CLI session or an admin-scoped token. The secret is returned once. This dedicated path returns a typed 503 until scoped credential creation is activated.
956
+ * Creates a scoped, expiring API key. Requires a dashboard/CLI session or an admin-scoped token. The secret is returned once. An unknown field is a 400, so a misspelled scope never creates a full-access key. environmentIds takes your own environments and the org environments you can use. This dedicated path returns a typed 503 until scoped credential creation is activated.
898
957
  * Create a scoped API key
899
958
  */
900
959
  async createScopedApiKey(requestParameters, initOverrides) {
@@ -1413,6 +1472,57 @@ export class BoatApi extends runtime.BaseAPI {
1413
1472
  const response = await this.deleteEnvironmentVarRaw(requestParameters, initOverrides);
1414
1473
  return await response.value();
1415
1474
  }
1475
+ /**
1476
+ * Creates request options for deleteFile without sending the request
1477
+ */
1478
+ async deleteFileRequestOpts(requestParameters) {
1479
+ if (requestParameters['sandboxId'] == null) {
1480
+ throw new runtime.RequiredError('sandboxId', 'Required parameter "sandboxId" was null or undefined when calling deleteFile().');
1481
+ }
1482
+ if (requestParameters['path'] == null) {
1483
+ throw new runtime.RequiredError('path', 'Required parameter "path" was null or undefined when calling deleteFile().');
1484
+ }
1485
+ const queryParameters = {};
1486
+ if (requestParameters['path'] != null) {
1487
+ queryParameters['path'] = requestParameters['path'];
1488
+ }
1489
+ if (requestParameters['recursive'] != null) {
1490
+ queryParameters['recursive'] = requestParameters['recursive'];
1491
+ }
1492
+ const headerParameters = {};
1493
+ if (this.configuration && this.configuration.accessToken) {
1494
+ const token = this.configuration.accessToken;
1495
+ const tokenString = await token("BoatBearerAuth", []);
1496
+ if (tokenString) {
1497
+ headerParameters["Authorization"] = `Bearer ${tokenString}`;
1498
+ }
1499
+ }
1500
+ let urlPath = `/sandboxes/{sandboxId}/files`;
1501
+ urlPath = urlPath.replace('{sandboxId}', encodeURIComponent(String(requestParameters['sandboxId'])));
1502
+ return {
1503
+ path: urlPath,
1504
+ method: 'DELETE',
1505
+ headers: headerParameters,
1506
+ query: queryParameters,
1507
+ };
1508
+ }
1509
+ /**
1510
+ * A directory needs `recursive=true`. A symlink is deleted itself, never its target. /home/user and /tmp themselves cannot be deleted. Needs `file.write`.
1511
+ * Delete a file or directory in a sandbox
1512
+ */
1513
+ async deleteFileRaw(requestParameters, initOverrides) {
1514
+ const requestOptions = await this.deleteFileRequestOpts(requestParameters);
1515
+ const response = await this.request(requestOptions, initOverrides);
1516
+ return new runtime.JSONApiResponse(response, (jsonValue) => FileDeleteResponseFromJSON(jsonValue));
1517
+ }
1518
+ /**
1519
+ * A directory needs `recursive=true`. A symlink is deleted itself, never its target. /home/user and /tmp themselves cannot be deleted. Needs `file.write`.
1520
+ * Delete a file or directory in a sandbox
1521
+ */
1522
+ async deleteFile(requestParameters, initOverrides) {
1523
+ const response = await this.deleteFileRaw(requestParameters, initOverrides);
1524
+ return await response.value();
1525
+ }
1416
1526
  /**
1417
1527
  * Creates request options for deleteNamedSnapshot without sending the request
1418
1528
  * @deprecated
@@ -1873,6 +1983,60 @@ export class BoatApi extends runtime.BaseAPI {
1873
1983
  const response = await this.eventsRaw(requestParameters, initOverrides);
1874
1984
  return await response.value();
1875
1985
  }
1986
+ /**
1987
+ * Creates request options for findInFiles without sending the request
1988
+ */
1989
+ async findInFilesRequestOpts(requestParameters) {
1990
+ if (requestParameters['sandboxId'] == null) {
1991
+ throw new runtime.RequiredError('sandboxId', 'Required parameter "sandboxId" was null or undefined when calling findInFiles().');
1992
+ }
1993
+ if (requestParameters['pattern'] == null) {
1994
+ throw new runtime.RequiredError('pattern', 'Required parameter "pattern" was null or undefined when calling findInFiles().');
1995
+ }
1996
+ const queryParameters = {};
1997
+ if (requestParameters['path'] != null) {
1998
+ queryParameters['path'] = requestParameters['path'];
1999
+ }
2000
+ if (requestParameters['pattern'] != null) {
2001
+ queryParameters['pattern'] = requestParameters['pattern'];
2002
+ }
2003
+ if (requestParameters['regex'] != null) {
2004
+ queryParameters['regex'] = requestParameters['regex'];
2005
+ }
2006
+ const headerParameters = {};
2007
+ if (this.configuration && this.configuration.accessToken) {
2008
+ const token = this.configuration.accessToken;
2009
+ const tokenString = await token("BoatBearerAuth", []);
2010
+ if (tokenString) {
2011
+ headerParameters["Authorization"] = `Bearer ${tokenString}`;
2012
+ }
2013
+ }
2014
+ let urlPath = `/sandboxes/{sandboxId}/files/find`;
2015
+ urlPath = urlPath.replace('{sandboxId}', encodeURIComponent(String(requestParameters['sandboxId'])));
2016
+ return {
2017
+ path: urlPath,
2018
+ method: 'GET',
2019
+ headers: headerParameters,
2020
+ query: queryParameters,
2021
+ };
2022
+ }
2023
+ /**
2024
+ * Every line under `path` that contains `pattern`. `pattern` is plain text; with `regex=true` it is an extended regular expression. Binary files are skipped and symlinks are not followed. Needs `file.read`.
2025
+ * Find text in sandbox files
2026
+ */
2027
+ async findInFilesRaw(requestParameters, initOverrides) {
2028
+ const requestOptions = await this.findInFilesRequestOpts(requestParameters);
2029
+ const response = await this.request(requestOptions, initOverrides);
2030
+ return new runtime.JSONApiResponse(response, (jsonValue) => FileFindResponseFromJSON(jsonValue));
2031
+ }
2032
+ /**
2033
+ * Every line under `path` that contains `pattern`. `pattern` is plain text; with `regex=true` it is an extended regular expression. Binary files are skipped and symlinks are not followed. Needs `file.read`.
2034
+ * Find text in sandbox files
2035
+ */
2036
+ async findInFiles(requestParameters, initOverrides) {
2037
+ const response = await this.findInFilesRaw(requestParameters, initOverrides);
2038
+ return await response.value();
2039
+ }
1876
2040
  /**
1877
2041
  * Creates request options for fork without sending the request
1878
2042
  */
@@ -2181,6 +2345,54 @@ export class BoatApi extends runtime.BaseAPI {
2181
2345
  const response = await this.getDeletionOperationRaw(requestParameters, initOverrides);
2182
2346
  return await response.value();
2183
2347
  }
2348
+ /**
2349
+ * Creates request options for getFileInfo without sending the request
2350
+ */
2351
+ async getFileInfoRequestOpts(requestParameters) {
2352
+ if (requestParameters['sandboxId'] == null) {
2353
+ throw new runtime.RequiredError('sandboxId', 'Required parameter "sandboxId" was null or undefined when calling getFileInfo().');
2354
+ }
2355
+ if (requestParameters['path'] == null) {
2356
+ throw new runtime.RequiredError('path', 'Required parameter "path" was null or undefined when calling getFileInfo().');
2357
+ }
2358
+ const queryParameters = {};
2359
+ if (requestParameters['path'] != null) {
2360
+ queryParameters['path'] = requestParameters['path'];
2361
+ }
2362
+ const headerParameters = {};
2363
+ if (this.configuration && this.configuration.accessToken) {
2364
+ const token = this.configuration.accessToken;
2365
+ const tokenString = await token("BoatBearerAuth", []);
2366
+ if (tokenString) {
2367
+ headerParameters["Authorization"] = `Bearer ${tokenString}`;
2368
+ }
2369
+ }
2370
+ let urlPath = `/sandboxes/{sandboxId}/files/info`;
2371
+ urlPath = urlPath.replace('{sandboxId}', encodeURIComponent(String(requestParameters['sandboxId'])));
2372
+ return {
2373
+ path: urlPath,
2374
+ method: 'GET',
2375
+ headers: headerParameters,
2376
+ query: queryParameters,
2377
+ };
2378
+ }
2379
+ /**
2380
+ * Size, permission bits, type and modification time. Needs `file.read`.
2381
+ * Get file or directory details in a sandbox
2382
+ */
2383
+ async getFileInfoRaw(requestParameters, initOverrides) {
2384
+ const requestOptions = await this.getFileInfoRequestOpts(requestParameters);
2385
+ const response = await this.request(requestOptions, initOverrides);
2386
+ return new runtime.JSONApiResponse(response, (jsonValue) => FileInfoResponseFromJSON(jsonValue));
2387
+ }
2388
+ /**
2389
+ * Size, permission bits, type and modification time. Needs `file.read`.
2390
+ * Get file or directory details in a sandbox
2391
+ */
2392
+ async getFileInfo(requestParameters, initOverrides) {
2393
+ const response = await this.getFileInfoRaw(requestParameters, initOverrides);
2394
+ return await response.value();
2395
+ }
2184
2396
  /**
2185
2397
  * Creates request options for getLatestSandboxSnapshot without sending the request
2186
2398
  */
@@ -2730,7 +2942,7 @@ export class BoatApi extends runtime.BaseAPI {
2730
2942
  };
2731
2943
  }
2732
2944
  /**
2733
- * Check remaining machine starts, compute time, credits, access readiness, and concurrent-sandbox capacity for the wallet a create would bill: the `org` / `X-Boat-Org` you pass (id or name), else the account\'s active wallet, else personal. The response carries `teamId` when an organization wallet was read.
2945
+ * Check remaining machine starts, included VM time, the wallet, overage prices, access readiness, and concurrent-sandbox capacity for the wallet a create would bill: the `org` / `X-Boat-Org` you pass (id or name), else the account\'s active wallet, else personal. The response carries `teamId` when an organization wallet was read.
2734
2946
  * Get Boat limits
2735
2947
  */
2736
2948
  async limitsRaw(requestParameters, initOverrides) {
@@ -2739,7 +2951,7 @@ export class BoatApi extends runtime.BaseAPI {
2739
2951
  return new runtime.JSONApiResponse(response, (jsonValue) => LimitsResponseFromJSON(jsonValue));
2740
2952
  }
2741
2953
  /**
2742
- * Check remaining machine starts, compute time, credits, access readiness, and concurrent-sandbox capacity for the wallet a create would bill: the `org` / `X-Boat-Org` you pass (id or name), else the account\'s active wallet, else personal. The response carries `teamId` when an organization wallet was read.
2954
+ * Check remaining machine starts, included VM time, the wallet, overage prices, access readiness, and concurrent-sandbox capacity for the wallet a create would bill: the `org` / `X-Boat-Org` you pass (id or name), else the account\'s active wallet, else personal. The response carries `teamId` when an organization wallet was read.
2743
2955
  * Get Boat limits
2744
2956
  */
2745
2957
  async limits(requestParameters = {}, initOverrides) {
@@ -2830,6 +3042,51 @@ export class BoatApi extends runtime.BaseAPI {
2830
3042
  const response = await this.listCredentialProfilesRaw(initOverrides);
2831
3043
  return await response.value();
2832
3044
  }
3045
+ /**
3046
+ * Creates request options for listFiles without sending the request
3047
+ */
3048
+ async listFilesRequestOpts(requestParameters) {
3049
+ if (requestParameters['sandboxId'] == null) {
3050
+ throw new runtime.RequiredError('sandboxId', 'Required parameter "sandboxId" was null or undefined when calling listFiles().');
3051
+ }
3052
+ const queryParameters = {};
3053
+ if (requestParameters['path'] != null) {
3054
+ queryParameters['path'] = requestParameters['path'];
3055
+ }
3056
+ const headerParameters = {};
3057
+ if (this.configuration && this.configuration.accessToken) {
3058
+ const token = this.configuration.accessToken;
3059
+ const tokenString = await token("BoatBearerAuth", []);
3060
+ if (tokenString) {
3061
+ headerParameters["Authorization"] = `Bearer ${tokenString}`;
3062
+ }
3063
+ }
3064
+ let urlPath = `/sandboxes/{sandboxId}/files/list`;
3065
+ urlPath = urlPath.replace('{sandboxId}', encodeURIComponent(String(requestParameters['sandboxId'])));
3066
+ return {
3067
+ path: urlPath,
3068
+ method: 'GET',
3069
+ headers: headerParameters,
3070
+ query: queryParameters,
3071
+ };
3072
+ }
3073
+ /**
3074
+ * One level, sorted by name. A symlink is listed as a symlink, not followed. Defaults to /home/user. Needs `file.read`.
3075
+ * List a directory in a sandbox
3076
+ */
3077
+ async listFilesRaw(requestParameters, initOverrides) {
3078
+ const requestOptions = await this.listFilesRequestOpts(requestParameters);
3079
+ const response = await this.request(requestOptions, initOverrides);
3080
+ return new runtime.JSONApiResponse(response, (jsonValue) => FileListResponseFromJSON(jsonValue));
3081
+ }
3082
+ /**
3083
+ * One level, sorted by name. A symlink is listed as a symlink, not followed. Defaults to /home/user. Needs `file.read`.
3084
+ * List a directory in a sandbox
3085
+ */
3086
+ async listFiles(requestParameters, initOverrides) {
3087
+ const response = await this.listFilesRaw(requestParameters, initOverrides);
3088
+ return await response.value();
3089
+ }
2833
3090
  /**
2834
3091
  * Creates request options for listNamedSnapshots without sending the request
2835
3092
  * @deprecated
@@ -3163,6 +3420,54 @@ export class BoatApi extends runtime.BaseAPI {
3163
3420
  const response = await this.meRaw(initOverrides);
3164
3421
  return await response.value();
3165
3422
  }
3423
+ /**
3424
+ * Creates request options for moveFile without sending the request
3425
+ */
3426
+ async moveFileRequestOpts(input) {
3427
+ const requestParameters = runtime.unflattenBody(input, 'fileMoveRequest', ['sandboxId'], []);
3428
+ if (requestParameters['sandboxId'] == null) {
3429
+ throw new runtime.RequiredError('sandboxId', 'Required parameter "sandboxId" was null or undefined when calling moveFile().');
3430
+ }
3431
+ if (requestParameters['fileMoveRequest'] == null) {
3432
+ throw new runtime.RequiredError('fileMoveRequest', 'Required parameter "fileMoveRequest" was null or undefined when calling moveFile().');
3433
+ }
3434
+ const queryParameters = {};
3435
+ const headerParameters = {};
3436
+ headerParameters['Content-Type'] = 'application/json';
3437
+ if (this.configuration && this.configuration.accessToken) {
3438
+ const token = this.configuration.accessToken;
3439
+ const tokenString = await token("BoatBearerAuth", []);
3440
+ if (tokenString) {
3441
+ headerParameters["Authorization"] = `Bearer ${tokenString}`;
3442
+ }
3443
+ }
3444
+ let urlPath = `/sandboxes/{sandboxId}/files/move`;
3445
+ urlPath = urlPath.replace('{sandboxId}', encodeURIComponent(String(requestParameters['sandboxId'])));
3446
+ return {
3447
+ path: urlPath,
3448
+ method: 'POST',
3449
+ headers: headerParameters,
3450
+ query: queryParameters,
3451
+ body: FileMoveRequestToJSON(requestParameters['fileMoveRequest']),
3452
+ };
3453
+ }
3454
+ /**
3455
+ * Works across /home/user and /tmp. A symlink is moved itself, never its target. Needs `file.write`.
3456
+ * Move or rename a file or directory in a sandbox
3457
+ */
3458
+ async moveFileRaw(requestParameters, initOverrides) {
3459
+ const requestOptions = await this.moveFileRequestOpts(requestParameters);
3460
+ const response = await this.request(requestOptions, initOverrides);
3461
+ return new runtime.JSONApiResponse(response, (jsonValue) => FileMoveResponseFromJSON(jsonValue));
3462
+ }
3463
+ /**
3464
+ * Works across /home/user and /tmp. A symlink is moved itself, never its target. Needs `file.write`.
3465
+ * Move or rename a file or directory in a sandbox
3466
+ */
3467
+ async moveFile(requestParameters, initOverrides) {
3468
+ const response = await this.moveFileRaw(requestParameters, initOverrides);
3469
+ return await response.value();
3470
+ }
3166
3471
  /**
3167
3472
  * Creates request options for processes without sending the request
3168
3473
  */
@@ -3334,7 +3639,7 @@ export class BoatApi extends runtime.BaseAPI {
3334
3639
  };
3335
3640
  }
3336
3641
  /**
3337
- * Files up to 5 MiB. For a larger file, use `POST /sandboxes/{sandboxId}/files/download-url`.
3642
+ * Files up to 5 MiB. For a larger file, use `POST /sandboxes/{sandboxId}/files/download-url`. On a sandbox that is still starting, the call waits until it is ready (up to 60 s, like a command), so it reads the sandbox\'s own disk and never the machine\'s stock one.
3338
3643
  * Read a file from a sandbox
3339
3644
  */
3340
3645
  async readFileRaw(requestParameters, initOverrides) {
@@ -3343,7 +3648,7 @@ export class BoatApi extends runtime.BaseAPI {
3343
3648
  return new runtime.JSONApiResponse(response, (jsonValue) => FileReadResponseFromJSON(jsonValue));
3344
3649
  }
3345
3650
  /**
3346
- * Files up to 5 MiB. For a larger file, use `POST /sandboxes/{sandboxId}/files/download-url`.
3651
+ * Files up to 5 MiB. For a larger file, use `POST /sandboxes/{sandboxId}/files/download-url`. On a sandbox that is still starting, the call waits until it is ready (up to 60 s, like a command), so it reads the sandbox\'s own disk and never the machine\'s stock one.
3347
3652
  * Read a file from a sandbox
3348
3653
  */
3349
3654
  async readFile(requestParameters, initOverrides) {
@@ -3392,6 +3697,54 @@ export class BoatApi extends runtime.BaseAPI {
3392
3697
  const response = await this.recoverRaw(requestParameters, initOverrides);
3393
3698
  return await response.value();
3394
3699
  }
3700
+ /**
3701
+ * Creates request options for replaceInFiles without sending the request
3702
+ */
3703
+ async replaceInFilesRequestOpts(input) {
3704
+ const requestParameters = runtime.unflattenBody(input, 'fileReplaceRequest', ['sandboxId'], []);
3705
+ if (requestParameters['sandboxId'] == null) {
3706
+ throw new runtime.RequiredError('sandboxId', 'Required parameter "sandboxId" was null or undefined when calling replaceInFiles().');
3707
+ }
3708
+ if (requestParameters['fileReplaceRequest'] == null) {
3709
+ throw new runtime.RequiredError('fileReplaceRequest', 'Required parameter "fileReplaceRequest" was null or undefined when calling replaceInFiles().');
3710
+ }
3711
+ const queryParameters = {};
3712
+ const headerParameters = {};
3713
+ headerParameters['Content-Type'] = 'application/json';
3714
+ if (this.configuration && this.configuration.accessToken) {
3715
+ const token = this.configuration.accessToken;
3716
+ const tokenString = await token("BoatBearerAuth", []);
3717
+ if (tokenString) {
3718
+ headerParameters["Authorization"] = `Bearer ${tokenString}`;
3719
+ }
3720
+ }
3721
+ let urlPath = `/sandboxes/{sandboxId}/files/replace`;
3722
+ urlPath = urlPath.replace('{sandboxId}', encodeURIComponent(String(requestParameters['sandboxId'])));
3723
+ return {
3724
+ path: urlPath,
3725
+ method: 'POST',
3726
+ headers: headerParameters,
3727
+ query: queryParameters,
3728
+ body: FileReplaceRequestToJSON(requestParameters['fileReplaceRequest']),
3729
+ };
3730
+ }
3731
+ /**
3732
+ * Replaces every occurrence of `pattern` with `newValue` in each file. Needs `file.write`.
3733
+ * Replace text in sandbox files
3734
+ */
3735
+ async replaceInFilesRaw(requestParameters, initOverrides) {
3736
+ const requestOptions = await this.replaceInFilesRequestOpts(requestParameters);
3737
+ const response = await this.request(requestOptions, initOverrides);
3738
+ return new runtime.JSONApiResponse(response, (jsonValue) => FileReplaceResponseFromJSON(jsonValue));
3739
+ }
3740
+ /**
3741
+ * Replaces every occurrence of `pattern` with `newValue` in each file. Needs `file.write`.
3742
+ * Replace text in sandbox files
3743
+ */
3744
+ async replaceInFiles(requestParameters, initOverrides) {
3745
+ const response = await this.replaceInFilesRaw(requestParameters, initOverrides);
3746
+ return await response.value();
3747
+ }
3395
3748
  /**
3396
3749
  * Creates request options for repos without sending the request
3397
3750
  */
@@ -3517,7 +3870,7 @@ export class BoatApi extends runtime.BaseAPI {
3517
3870
  };
3518
3871
  }
3519
3872
  /**
3520
- * Revokes the key immediately. Requires a dashboard or CLI session.
3873
+ * Revokes the key immediately. Requires a dashboard or CLI session, or an admin-scoped key. A key revokes itself or a key it could create (same or fewer actions, sandboxes and environments, no later expiry).
3521
3874
  * Revoke an API key
3522
3875
  */
3523
3876
  async revokeApiKeyRaw(requestParameters, initOverrides) {
@@ -3526,7 +3879,7 @@ export class BoatApi extends runtime.BaseAPI {
3526
3879
  return new runtime.JSONApiResponse(response, (jsonValue) => ApiKeyRevokeResponseFromJSON(jsonValue));
3527
3880
  }
3528
3881
  /**
3529
- * Revokes the key immediately. Requires a dashboard or CLI session.
3882
+ * Revokes the key immediately. Requires a dashboard or CLI session, or an admin-scoped key. A key revokes itself or a key it could create (same or fewer actions, sandboxes and environments, no later expiry).
3530
3883
  * Revoke an API key
3531
3884
  */
3532
3885
  async revokeApiKey(requestParameters, initOverrides) {
@@ -3605,7 +3958,7 @@ export class BoatApi extends runtime.BaseAPI {
3605
3958
  };
3606
3959
  }
3607
3960
  /**
3608
- * Replaces the raw secret without changing expiry or scope. Requires a dashboard or CLI session.
3961
+ * Replaces the raw secret without changing expiry or scope. Requires a dashboard or CLI session, or an admin-scoped key. A key rotates itself or a key it could create.
3609
3962
  * Rotate an API key
3610
3963
  */
3611
3964
  async rotateApiKeyRaw(requestParameters, initOverrides) {
@@ -3614,7 +3967,7 @@ export class BoatApi extends runtime.BaseAPI {
3614
3967
  return new runtime.JSONApiResponse(response, (jsonValue) => ApiKeySecretResponseFromJSON(jsonValue));
3615
3968
  }
3616
3969
  /**
3617
- * Replaces the raw secret without changing expiry or scope. Requires a dashboard or CLI session.
3970
+ * Replaces the raw secret without changing expiry or scope. Requires a dashboard or CLI session, or an admin-scoped key. A key rotates itself or a key it could create.
3618
3971
  * Rotate an API key
3619
3972
  */
3620
3973
  async rotateApiKey(requestParameters, initOverrides) {
@@ -3813,6 +4166,57 @@ export class BoatApi extends runtime.BaseAPI {
3813
4166
  const response = await this.saveSavedSnapshotRaw(requestParameters, initOverrides);
3814
4167
  return await response.value();
3815
4168
  }
4169
+ /**
4170
+ * Creates request options for searchFiles without sending the request
4171
+ */
4172
+ async searchFilesRequestOpts(requestParameters) {
4173
+ if (requestParameters['sandboxId'] == null) {
4174
+ throw new runtime.RequiredError('sandboxId', 'Required parameter "sandboxId" was null or undefined when calling searchFiles().');
4175
+ }
4176
+ if (requestParameters['pattern'] == null) {
4177
+ throw new runtime.RequiredError('pattern', 'Required parameter "pattern" was null or undefined when calling searchFiles().');
4178
+ }
4179
+ const queryParameters = {};
4180
+ if (requestParameters['path'] != null) {
4181
+ queryParameters['path'] = requestParameters['path'];
4182
+ }
4183
+ if (requestParameters['pattern'] != null) {
4184
+ queryParameters['pattern'] = requestParameters['pattern'];
4185
+ }
4186
+ const headerParameters = {};
4187
+ if (this.configuration && this.configuration.accessToken) {
4188
+ const token = this.configuration.accessToken;
4189
+ const tokenString = await token("BoatBearerAuth", []);
4190
+ if (tokenString) {
4191
+ headerParameters["Authorization"] = `Bearer ${tokenString}`;
4192
+ }
4193
+ }
4194
+ let urlPath = `/sandboxes/{sandboxId}/files/search`;
4195
+ urlPath = urlPath.replace('{sandboxId}', encodeURIComponent(String(requestParameters['sandboxId'])));
4196
+ return {
4197
+ path: urlPath,
4198
+ method: 'GET',
4199
+ headers: headerParameters,
4200
+ query: queryParameters,
4201
+ };
4202
+ }
4203
+ /**
4204
+ * Every file and directory under `path` whose name matches the glob `pattern` (for example `*.py`). Symlinks are not followed. Needs `file.read`.
4205
+ * Search files by name in a sandbox
4206
+ */
4207
+ async searchFilesRaw(requestParameters, initOverrides) {
4208
+ const requestOptions = await this.searchFilesRequestOpts(requestParameters);
4209
+ const response = await this.request(requestOptions, initOverrides);
4210
+ return new runtime.JSONApiResponse(response, (jsonValue) => FileSearchResponseFromJSON(jsonValue));
4211
+ }
4212
+ /**
4213
+ * Every file and directory under `path` whose name matches the glob `pattern` (for example `*.py`). Symlinks are not followed. Needs `file.read`.
4214
+ * Search files by name in a sandbox
4215
+ */
4216
+ async searchFiles(requestParameters, initOverrides) {
4217
+ const response = await this.searchFilesRaw(requestParameters, initOverrides);
4218
+ return await response.value();
4219
+ }
3816
4220
  /**
3817
4221
  * Creates request options for secrets without sending the request
3818
4222
  */
@@ -4149,6 +4553,54 @@ export class BoatApi extends runtime.BaseAPI {
4149
4553
  const response = await this.setEnvironmentVarRaw(requestParameters, initOverrides);
4150
4554
  return await response.value();
4151
4555
  }
4556
+ /**
4557
+ * Creates request options for setFilePermissions without sending the request
4558
+ */
4559
+ async setFilePermissionsRequestOpts(input) {
4560
+ const requestParameters = runtime.unflattenBody(input, 'filePermissionsRequest', ['sandboxId'], []);
4561
+ if (requestParameters['sandboxId'] == null) {
4562
+ throw new runtime.RequiredError('sandboxId', 'Required parameter "sandboxId" was null or undefined when calling setFilePermissions().');
4563
+ }
4564
+ if (requestParameters['filePermissionsRequest'] == null) {
4565
+ throw new runtime.RequiredError('filePermissionsRequest', 'Required parameter "filePermissionsRequest" was null or undefined when calling setFilePermissions().');
4566
+ }
4567
+ const queryParameters = {};
4568
+ const headerParameters = {};
4569
+ headerParameters['Content-Type'] = 'application/json';
4570
+ if (this.configuration && this.configuration.accessToken) {
4571
+ const token = this.configuration.accessToken;
4572
+ const tokenString = await token("BoatBearerAuth", []);
4573
+ if (tokenString) {
4574
+ headerParameters["Authorization"] = `Bearer ${tokenString}`;
4575
+ }
4576
+ }
4577
+ let urlPath = `/sandboxes/{sandboxId}/files/permissions`;
4578
+ urlPath = urlPath.replace('{sandboxId}', encodeURIComponent(String(requestParameters['sandboxId'])));
4579
+ return {
4580
+ path: urlPath,
4581
+ method: 'POST',
4582
+ headers: headerParameters,
4583
+ query: queryParameters,
4584
+ body: FilePermissionsRequestToJSON(requestParameters['filePermissionsRequest']),
4585
+ };
4586
+ }
4587
+ /**
4588
+ * Sets the permission bits. Files belong to the sandbox user; the owner and group do not change. Needs `file.write`.
4589
+ * Set file permissions in a sandbox
4590
+ */
4591
+ async setFilePermissionsRaw(requestParameters, initOverrides) {
4592
+ const requestOptions = await this.setFilePermissionsRequestOpts(requestParameters);
4593
+ const response = await this.request(requestOptions, initOverrides);
4594
+ return new runtime.JSONApiResponse(response, (jsonValue) => FileInfoResponseFromJSON(jsonValue));
4595
+ }
4596
+ /**
4597
+ * Sets the permission bits. Files belong to the sandbox user; the owner and group do not change. Needs `file.write`.
4598
+ * Set file permissions in a sandbox
4599
+ */
4600
+ async setFilePermissions(requestParameters, initOverrides) {
4601
+ const response = await this.setFilePermissionsRaw(requestParameters, initOverrides);
4602
+ return await response.value();
4603
+ }
4152
4604
  /**
4153
4605
  * Creates request options for setSandboxAiAccess without sending the request
4154
4606
  */
@@ -4645,7 +5097,7 @@ export class BoatApi extends runtime.BaseAPI {
4645
5097
  };
4646
5098
  }
4647
5099
  /**
4648
- * With the proxy on, sandboxes get placeholder keys and base URLs that point at Boat. Boat swaps in the real key on each request. Real keys never enter the sandbox. Running sandboxes switch at their next start. While on, the account pays $1 of Boat time for each UTC day, plus $1 per 1,000 proxied requests, charged to the wallet each sandbox bills. For an organization, only its owner can change the switch. Needs an API key with `account.admin`.
5100
+ * With the proxy on, sandboxes get placeholder keys and base URLs that point at Boat. Boat swaps in the real key on each request. Real keys never enter the sandbox. Running sandboxes switch at their next start. While on, the wallet of the account pays $1 for each UTC day, plus $1 per 1,000 proxied requests, charged to the wallet each sandbox bills. For an organization, only its owner can change the switch. Needs an API key with `account.admin`.
4649
5101
  * Turn the AI credentials proxy on or off
4650
5102
  */
4651
5103
  async updateAiProxyRaw(requestParameters, initOverrides) {
@@ -4654,7 +5106,7 @@ export class BoatApi extends runtime.BaseAPI {
4654
5106
  return new runtime.JSONApiResponse(response, (jsonValue) => AiProxySettingsFromJSON(jsonValue));
4655
5107
  }
4656
5108
  /**
4657
- * With the proxy on, sandboxes get placeholder keys and base URLs that point at Boat. Boat swaps in the real key on each request. Real keys never enter the sandbox. Running sandboxes switch at their next start. While on, the account pays $1 of Boat time for each UTC day, plus $1 per 1,000 proxied requests, charged to the wallet each sandbox bills. For an organization, only its owner can change the switch. Needs an API key with `account.admin`.
5109
+ * With the proxy on, sandboxes get placeholder keys and base URLs that point at Boat. Boat swaps in the real key on each request. Real keys never enter the sandbox. Running sandboxes switch at their next start. While on, the wallet of the account pays $1 for each UTC day, plus $1 per 1,000 proxied requests, charged to the wallet each sandbox bills. For an organization, only its owner can change the switch. Needs an API key with `account.admin`.
4658
5110
  * Turn the AI credentials proxy on or off
4659
5111
  */
4660
5112
  async updateAiProxy(requestParameters, initOverrides) {
@@ -5070,7 +5522,7 @@ export class BoatApi extends runtime.BaseAPI {
5070
5522
  };
5071
5523
  }
5072
5524
  /**
5073
- * Files up to 5 MiB after decoding. For a larger file, use `POST /sandboxes/{sandboxId}/files/upload-url`.
5525
+ * Files up to 5 MiB after decoding. For a larger file, use `POST /sandboxes/{sandboxId}/files/upload-url`. On a sandbox that is still starting, the call waits until it is ready (up to 60 s, like a command): a sandbox\'s files are in place only once it is ready, so a write any earlier would not stay. A `200` always means the file is on the sandbox\'s disk.
5074
5526
  * Write a file in a sandbox
5075
5527
  */
5076
5528
  async writeFileRaw(requestParameters, initOverrides) {
@@ -5079,7 +5531,7 @@ export class BoatApi extends runtime.BaseAPI {
5079
5531
  return new runtime.JSONApiResponse(response, (jsonValue) => FileWriteResponseFromJSON(jsonValue));
5080
5532
  }
5081
5533
  /**
5082
- * Files up to 5 MiB after decoding. For a larger file, use `POST /sandboxes/{sandboxId}/files/upload-url`.
5534
+ * Files up to 5 MiB after decoding. For a larger file, use `POST /sandboxes/{sandboxId}/files/upload-url`. On a sandbox that is still starting, the call waits until it is ready (up to 60 s, like a command): a sandbox\'s files are in place only once it is ready, so a write any earlier would not stay. A `200` always means the file is on the sandbox\'s disk.
5083
5535
  * Write a file in a sandbox
5084
5536
  */
5085
5537
  async writeFile(requestParameters, initOverrides) {