cloreai 4.0.2 → 5.0.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.
package/README.md CHANGED
@@ -9,12 +9,10 @@ Features:
9
9
  [p-queue](https://github.com/sindresorhus/p-queue)
10
10
  - Convenient error handling
11
11
  - Full type safety
12
- - Supports GigaSPOT
13
12
 
14
13
  Official documentation: [clore.ai/api-docs](https://clore.ai/api-docs)
15
14
 
16
- Official GigaSPOT documentation:
17
- [gigaspot-api-docs.clore.ai](https://gigaspot-api-docs.clore.ai)
15
+ Official changelog: [clore.ai/changelog](https://clore.ai/changelog)
18
16
 
19
17
  ## Installation
20
18
 
@@ -105,6 +103,7 @@ await cloreai.setServerSettings({
105
103
  'USD-Blockchain': { on_demand: 1, spot: 1 },
106
104
  'bitcoin': { on_demand: 1, spot: 1 },
107
105
  },
106
+ 'auto_renew_allowed': true,
108
107
  })
109
108
  ```
110
109
 
@@ -126,85 +125,60 @@ await cloreai.cancelOrder({
126
125
  })
127
126
  ```
128
127
 
129
- ### 10. create_order
128
+ ### 10. cancelOrders
129
+
130
+ ```typescript
131
+ await cloreai.cancelOrders({
132
+ order_ids: [8383],
133
+ })
134
+ ```
135
+
136
+ ### 11. create_order
130
137
 
131
138
  ```typescript
132
139
  await cloreai.createOrder({
133
- type: 'on-demand',
134
140
  currency: 'CLORE-Blockchain',
135
141
  image: 'cloreai/jupyter:ubuntu24.04-v2',
136
142
  renting_server: 5738,
143
+ type: 'on-demand',
137
144
  ports: { 22: 'tcp', 8888: 'http' },
138
145
  env: { SSH_PASSWORD: 'SSH_PASSWORD', JUPYTER_TOKEN: 'JUPYTER_TOKEN' },
139
146
  jupyter_token: 'JUPYTER_TOKEN',
140
147
  ssh_password: 'SSH_PASSWORD',
141
148
  required_price: 50,
142
149
  remember_password: true,
150
+ auto_renew: true,
151
+ auto_renew_max_price: 50,
143
152
  })
144
153
  ```
145
154
 
146
- ### 11. poh_balance
147
-
148
- ```typescript
149
- const pohBalance = await cloreai.pohBalance()
150
- ```
151
-
152
- ### 12. renter_fees
153
-
154
- ```typescript
155
- const renterFees = await cloreai.renterFees()
156
- ```
157
-
158
- ### GigaSPOT
159
-
160
- #### getGigaspot
155
+ ### 12. set_order_auto_renew
161
156
 
162
157
  ```typescript
163
- const gigaspot = await cloreai.gigaspot.getGigaspot()
158
+ await cloreai.setOrderAutoRenew({
159
+ order_id: 38,
160
+ rental_hours: null,
161
+ auto_renew: true,
162
+ auto_renew_max_price: 300,
163
+ })
164
164
  ```
165
165
 
166
- #### createGigaspotOrders
166
+ ### 13. order_renewals
167
167
 
168
168
  ```typescript
169
- import { gigaspotBaseImages } from 'cloreai'
170
-
171
- await cloreai.gigaspot.createGigaspotOrders([
172
- {
173
- currency: 'CLORE-Blockchain',
174
- image: gigaspotBaseImages.UBUNTU, // Use the base image constant
175
- renting_server: 5941,
176
- price: 50,
177
- oc: [
178
- {
179
- pl: 150,
180
- },
181
- ],
182
- },
183
- ])
169
+ const orderRenewals = await cloreai.orderRenewals({ order_id: 38 })
184
170
  ```
185
171
 
186
- #### editGigaspotOrders
172
+ ### 14. poh_balance
187
173
 
188
174
  ```typescript
189
- await cloreai.gigaspot.editGigaspotOrders([
190
- {
191
- order_id: 58991,
192
- price: 50,
193
- oc: [
194
- {
195
- pl: 150,
196
- },
197
- ],
198
- },
199
- ])
175
+ const pohBalance = await cloreai.pohBalance()
200
176
  ```
201
177
 
202
- #### cancelOrders
178
+ ### 15. renter_fees
203
179
 
204
180
  ```typescript
205
- await cloreai.gigaspot.cancelOrders({
206
- order_ids: [8383],
207
- })
181
+ const renterFees = await cloreai.renterFees()
208
182
  ```
209
183
 
210
184
  ## Fetch Options
@@ -221,9 +195,16 @@ const marketplace = await cloreai.marketplace({
221
195
 
222
196
  Use the `CloreaiError` class for error handling.
223
197
 
224
- Errors have fields with information `error.statusCode` and `error.description`.
198
+ To check the error type based on its code, use the `statusCodes` constant.
199
+
200
+ Errors include an `error.data` field, which contains the server
201
+ response—including a code and a description of the error—and, in some cases,
202
+ additional fields with further error details.
225
203
 
226
- Use the constant `statusCodes` to check the error type.
204
+ This class only catches errors when a response has been successfully received,
205
+ but the response code is not equal to `statusCodes.NORMAL` (0). Be sure to
206
+ implement a pattern for propagating unknown exceptions (such as connection
207
+ errors, etc.), as shown in the example below.
227
208
 
228
209
  ```typescript
229
210
  import { CloreaiError, statusCodes } from 'cloreai'
@@ -232,9 +213,9 @@ try {
232
213
  const marketplace = await cloreai.marketplace()
233
214
  } catch (error) {
234
215
  if (error instanceof CloreaiError) {
235
- console.log(error.statusCode, error.description)
216
+ console.log('Error data:', error.data)
236
217
 
237
- if (error.statusCode === statusCodes.EXCEEDED) {
218
+ if (error.data.code === statusCodes.EXCEEDED) {
238
219
  console.log('Rate limit exceeded error')
239
220
  }
240
221
  } else {
package/dist/Cloreai.d.ts CHANGED
@@ -1,17 +1,19 @@
1
- import PQueue, { type Options as PQueueOptions, type Queue, type QueueAddOptions } from 'p-queue';
1
+ import PQueue, { type Options as QueueOptions } from 'p-queue';
2
2
  import type { CancelOrderRequestData, CancelOrderResponseData } from './resources/cancelOrder.ts';
3
+ import type { CancelOrdersRequestData, CancelOrdersResponseData } from './resources/cancelOrders.ts';
3
4
  import type { CreateOrderRequestData, CreateOrderResponseData } from './resources/createOrder.ts';
4
5
  import type { MarketplaceResponseData } from './resources/marketplace.ts';
5
6
  import type { MyOrdersRequestParams, MyOrdersResponseData } from './resources/myOrders.ts';
6
7
  import type { MyServersResponseData } from './resources/myServers.ts';
8
+ import type { OrderRenewalsRequestData, OrderRenewalsResponseData } from './resources/orderRenewals.ts';
7
9
  import type { PohBalanceResponseData } from './resources/pohBalance.ts';
8
10
  import type { RenterFeesResponseData } from './resources/renterFees.ts';
9
11
  import type { ServerConfigRequestData, ServerConfigResponseData } from './resources/serverConfig.ts';
12
+ import type { SetOrderAutoRenewRequestData, SetOrderAutoRenewResponseData } from './resources/setOrderAutoRenew.ts';
10
13
  import type { SetServerSettingsRequestData, SetServerSettingsResponseData } from './resources/setServerSettings.ts';
11
14
  import type { SetSpotPriceRequestData, SetSpotPriceResponseData } from './resources/setSpotPrice.ts';
12
15
  import type { SpotMarketplaceRequestParams, SpotMarketplaceResponseData } from './resources/spotMarketplace.ts';
13
16
  import type { WalletsResponseData } from './resources/wallets.ts';
14
- import Gigaspot from './Gigaspot.ts';
15
17
  export interface Options {
16
18
  baseURL?: string;
17
19
  fetchOptions?: RequestInit;
@@ -19,7 +21,6 @@ export interface Options {
19
21
  queueOptions?: QueueOptions;
20
22
  queueCreateOrderOptions?: QueueOptions;
21
23
  }
22
- export type QueueOptions = PQueueOptions<Queue<() => Promise<unknown>, QueueAddOptions>, QueueAddOptions>;
23
24
  declare class Cloreai {
24
25
  #private;
25
26
  apiKey: string;
@@ -28,7 +29,6 @@ declare class Cloreai {
28
29
  fetch: typeof fetch;
29
30
  queue: PQueue;
30
31
  queueCreateOrder: PQueue;
31
- gigaspot: Gigaspot;
32
32
  constructor(apiKey: string, options?: Options);
33
33
  wallets(init?: RequestInit): Promise<WalletsResponseData>;
34
34
  myServers(init?: RequestInit): Promise<MyServersResponseData>;
@@ -39,7 +39,10 @@ declare class Cloreai {
39
39
  setServerSettings(data: SetServerSettingsRequestData, init?: RequestInit): Promise<SetServerSettingsResponseData>;
40
40
  setSpotPrice(data: SetSpotPriceRequestData, init?: RequestInit): Promise<SetSpotPriceResponseData>;
41
41
  cancelOrder(data: CancelOrderRequestData, init?: RequestInit): Promise<CancelOrderResponseData>;
42
+ cancelOrders(data: CancelOrdersRequestData, init?: RequestInit): Promise<CancelOrdersResponseData>;
42
43
  createOrder(data: CreateOrderRequestData, init?: RequestInit): Promise<CreateOrderResponseData>;
44
+ setOrderAutoRenew(data: SetOrderAutoRenewRequestData, init?: RequestInit): Promise<SetOrderAutoRenewResponseData>;
45
+ orderRenewals(data: OrderRenewalsRequestData, init?: RequestInit): Promise<OrderRenewalsResponseData>;
43
46
  pohBalance(init?: RequestInit): Promise<PohBalanceResponseData>;
44
47
  renterFees(init?: RequestInit): Promise<RenterFeesResponseData>;
45
48
  }
package/dist/Cloreai.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import PQueue, {} from 'p-queue';
2
2
  import { CloreaiError } from "./CloreaiError.js";
3
3
  import { priorityLevels, RATE_LIMIT, RATE_LIMIT_CREATE_ORDER, statusCodes } from "./constants.js";
4
- import Gigaspot from "./Gigaspot.js";
5
4
  class Cloreai {
6
5
  apiKey;
7
6
  baseURL;
@@ -9,7 +8,6 @@ class Cloreai {
9
8
  fetch;
10
9
  queue;
11
10
  queueCreateOrder;
12
- gigaspot;
13
11
  constructor(apiKey, options = {}) {
14
12
  this.apiKey = apiKey;
15
13
  this.baseURL = options.baseURL ?? 'https://api.clore.ai/v1';
@@ -27,7 +25,6 @@ class Cloreai {
27
25
  concurrency: 1,
28
26
  ...options.queueCreateOrderOptions,
29
27
  });
30
- this.gigaspot = new Gigaspot(this, this.#fetch.bind(this));
31
28
  }
32
29
  async #fetch(input, init = {}) {
33
30
  const headers = new Headers({
@@ -50,34 +47,12 @@ class Cloreai {
50
47
  headers,
51
48
  signal,
52
49
  };
53
- const url = new URL(input);
54
- const request = new Request(url, mergedInit);
55
- let response;
56
- try {
57
- response = await this.fetch(request);
58
- }
59
- catch (error) {
60
- throw new CloreaiError(error instanceof Error ? error.message : String(error), {
61
- cause: error,
62
- init: mergedInit,
63
- request,
64
- });
65
- }
50
+ const request = new Request(input, mergedInit);
51
+ const response = await this.fetch(request);
66
52
  const originalJson = response.json;
67
53
  // @ts-expect-error: json is readonly
68
54
  response.json = async () => {
69
- let data;
70
- try {
71
- data = await originalJson.call(response);
72
- }
73
- catch (error) {
74
- throw new CloreaiError(error instanceof Error ? error.message : String(error), {
75
- cause: error,
76
- init: mergedInit,
77
- request,
78
- response,
79
- });
80
- }
55
+ const data = await originalJson.call(response);
81
56
  if (data.code === statusCodes.NORMAL) {
82
57
  return data;
83
58
  }
@@ -86,11 +61,8 @@ class Cloreai {
86
61
  ? `Code "${data.code}, error "${data.error}"`
87
62
  : `Code "${data.code}"`;
88
63
  throw new CloreaiError(errorMessage, {
89
- init: mergedInit,
90
64
  request,
91
65
  response,
92
- statusCode: data.code,
93
- description: data.error ?? '',
94
66
  data,
95
67
  });
96
68
  };
@@ -223,9 +195,23 @@ class Cloreai {
223
195
  });
224
196
  return await response.json();
225
197
  }
198
+ async cancelOrders(data, init = {}) {
199
+ const url = new URL(this.baseURL + '/cancel_orders');
200
+ const response = await this.queue.add(async () => {
201
+ return await this.#fetch(url, {
202
+ ...init,
203
+ method: 'POST',
204
+ body: JSON.stringify(data),
205
+ });
206
+ }, {
207
+ priority: priorityLevels.HIGH,
208
+ signal: init.signal ?? undefined,
209
+ });
210
+ return await response.json();
211
+ }
226
212
  async createOrder(data, init = {}) {
227
213
  const url = new URL(this.baseURL + '/create_order');
228
- const response = await this.queue.add(async () => {
214
+ const response = await this.queueCreateOrder.add(async () => {
229
215
  return await this.#fetch(url, {
230
216
  ...init,
231
217
  method: 'POST',
@@ -237,6 +223,34 @@ class Cloreai {
237
223
  });
238
224
  return await response.json();
239
225
  }
226
+ async setOrderAutoRenew(data, init = {}) {
227
+ const url = new URL(this.baseURL + '/set_order_auto_renew');
228
+ const response = await this.queue.add(async () => {
229
+ return await this.#fetch(url, {
230
+ ...init,
231
+ method: 'POST',
232
+ body: JSON.stringify(data),
233
+ });
234
+ }, {
235
+ priority: priorityLevels.NORMAL,
236
+ signal: init.signal ?? undefined,
237
+ });
238
+ return await response.json();
239
+ }
240
+ async orderRenewals(data, init = {}) {
241
+ const url = new URL(this.baseURL + '/order_renewals');
242
+ const response = await this.queue.add(async () => {
243
+ return await this.#fetch(url, {
244
+ ...init,
245
+ method: 'POST',
246
+ body: JSON.stringify(data),
247
+ });
248
+ }, {
249
+ priority: priorityLevels.NORMAL,
250
+ signal: init.signal ?? undefined,
251
+ });
252
+ return await response.json();
253
+ }
240
254
  async pohBalance(init = {}) {
241
255
  const url = new URL(this.baseURL + '/poh_balance');
242
256
  const response = await this.queue.add(async () => {
@@ -1,17 +1,18 @@
1
+ import type { ResponseData } from './types.ts';
2
+ export interface ErrorData extends ResponseData {
3
+ max_step?: number;
4
+ time_to_lowering?: number;
5
+ min_price?: number;
6
+ [key: string]: unknown;
7
+ }
1
8
  export interface CloreaiErrorOptions extends ErrorOptions {
2
- init?: RequestInit;
3
- request?: Request;
4
- response?: Response;
5
- statusCode?: number;
6
- description?: string;
7
- data?: unknown;
9
+ request: Request;
10
+ response: Response;
11
+ data: ErrorData;
8
12
  }
9
13
  export declare class CloreaiError extends Error {
10
- init?: RequestInit;
11
- request?: Request;
12
- response?: Response;
13
- statusCode?: number;
14
- description?: string;
15
- data?: unknown;
16
- constructor(message?: string, options?: CloreaiErrorOptions);
14
+ request: Request;
15
+ response: Response;
16
+ data: ErrorData;
17
+ constructor(message: string, options: CloreaiErrorOptions);
17
18
  }
@@ -1,13 +1,12 @@
1
1
  export class CloreaiError extends Error {
2
- init;
3
2
  request;
4
3
  response;
5
- statusCode;
6
- description;
7
4
  data;
8
5
  constructor(message, options) {
9
- super(message);
6
+ super(message, options);
10
7
  this.name = 'CloreaiError';
11
- Object.assign(this, options);
8
+ this.request = options.request;
9
+ this.response = options.response;
10
+ this.data = options.data;
12
11
  }
13
12
  }
@@ -1,9 +1,5 @@
1
1
  export declare const RATE_LIMIT = 1000;
2
2
  export declare const RATE_LIMIT_CREATE_ORDER = 5000;
3
- export declare const gigaspotBaseImages: Readonly<{
4
- UBUNTU: "a3f9c4d7e5b088d8a0bff880";
5
- HIVEOS: "c9a4e2f6b7d488d8f0bab0ff";
6
- }>;
7
3
  export declare const statusCodes: Readonly<{
8
4
  NORMAL: 0;
9
5
  DATABASE_ERROR: 1;
package/dist/constants.js CHANGED
@@ -1,9 +1,5 @@
1
1
  export const RATE_LIMIT = 1000;
2
2
  export const RATE_LIMIT_CREATE_ORDER = 5000;
3
- export const gigaspotBaseImages = Object.freeze({
4
- UBUNTU: 'a3f9c4d7e5b088d8a0bff880',
5
- HIVEOS: 'c9a4e2f6b7d488d8f0bab0ff',
6
- });
7
3
  export const statusCodes = Object.freeze({
8
4
  NORMAL: 0,
9
5
  DATABASE_ERROR: 1,
package/dist/index.d.ts CHANGED
@@ -4,16 +4,15 @@ export * from './CloreaiError.ts';
4
4
  export * from './constants.ts';
5
5
  export type * from './resources/cancelOrder.ts';
6
6
  export type * from './resources/cancelOrders.ts';
7
- export type * from './resources/createGigaspotOrders.ts';
8
7
  export type * from './resources/createOrder.ts';
9
- export type * from './resources/editGigaspotOrders.ts';
10
- export type * from './resources/getGigaspot.ts';
11
8
  export type * from './resources/marketplace.ts';
12
9
  export type * from './resources/myOrders.ts';
13
10
  export type * from './resources/myServers.ts';
11
+ export type * from './resources/orderRenewals.ts';
14
12
  export type * from './resources/pohBalance.ts';
15
13
  export type * from './resources/renterFees.ts';
16
14
  export type * from './resources/serverConfig.ts';
15
+ export type * from './resources/setOrderAutoRenew.ts';
17
16
  export type * from './resources/setServerSettings.ts';
18
17
  export type * from './resources/setSpotPrice.ts';
19
18
  export type * from './resources/spotMarketplace.ts';
@@ -3,5 +3,5 @@ export interface CancelOrdersRequestData {
3
3
  order_ids: number[];
4
4
  }
5
5
  export interface CancelOrdersResponseData extends ResponseData {
6
- failed_to_cancel: string[];
6
+ failed_to_cancel: number[];
7
7
  }
@@ -1,17 +1,10 @@
1
1
  import type { Currency, OrderType, ResponseData } from '../types.ts';
2
- export type CreateOrderRequestData = CreateOrderOnDemand | CreateOrderSpot;
3
- export interface CreateOrderOnDemand extends CreateOrderBase {
4
- type: 'on-demand';
5
- }
6
- export interface CreateOrderSpot extends CreateOrderBase {
7
- type: 'spot';
8
- spotprice: number;
9
- }
10
- export interface CreateOrderBase {
11
- type: OrderType;
2
+ export interface CreateOrderRequestData {
12
3
  currency: Currency;
13
4
  image: string;
14
5
  renting_server: number;
6
+ type: OrderType;
7
+ spotprice?: number;
15
8
  ports?: Record<string, string>;
16
9
  env?: Record<string, string>;
17
10
  jupyter_token?: string;
@@ -22,5 +15,10 @@ export interface CreateOrderBase {
22
15
  autossh_entrypoint?: boolean;
23
16
  remember_password?: boolean;
24
17
  dockerhub_auth?: string;
18
+ gpu_count?: number;
19
+ gpu_indices?: number[];
20
+ rental_hours?: number;
21
+ auto_renew?: boolean;
22
+ auto_renew_max_price?: number;
25
23
  }
26
24
  export type CreateOrderResponseData = ResponseData;
@@ -10,11 +10,17 @@ export interface MarketplaceServer {
10
10
  price: Price;
11
11
  rented: boolean;
12
12
  specs: Specs;
13
+ partial_gpu_rental: false | MarketplaceServerPartialGpuRental;
13
14
  reliability: number;
14
15
  allowed_coins: Currency[];
16
+ auto_renew_allowed: boolean;
15
17
  rating: Rating;
16
18
  gpu_array: string[];
17
- gigaspot?: boolean;
18
19
  oc?: boolean;
19
20
  cuda_version: string;
20
21
  }
22
+ export interface MarketplaceServerPartialGpuRental {
23
+ total_gpus: number;
24
+ available_gpus: number;
25
+ free_indices: number[];
26
+ }
@@ -10,18 +10,32 @@ export interface MyOrdersOrder {
10
10
  id: number;
11
11
  creation_fee: number;
12
12
  price: number;
13
+ oc_price: number;
14
+ original_price_usd?: number;
13
15
  mrl: number;
14
16
  image: string;
15
17
  currency: Currency;
16
- original_price_usd?: number;
17
18
  spend: number;
18
19
  ct: number;
20
+ p: number;
19
21
  specs: Specs;
22
+ gpu_count: number;
23
+ total_gpus: number;
24
+ gpu_array: string[];
20
25
  si: number;
26
+ rental_hours: number;
27
+ rental_end: number;
28
+ term_start: number;
29
+ term_end: number;
30
+ term_mrl: number;
31
+ last_renewal_at: number;
32
+ auto_renew: boolean;
33
+ auto_renew_max_price: number;
34
+ renewals_count: number;
35
+ ssh_auth: string;
21
36
  my_past_rating?: number;
22
37
  auto_login: string;
23
38
  mon_container: number;
24
- online: boolean;
25
39
  pub_cluster: string[];
26
40
  tcp_ports: string[];
27
41
  http_port: string;
@@ -30,7 +44,9 @@ export interface MyOrdersOrder {
30
44
  reliability: number;
31
45
  owner: number;
32
46
  cuda_version: string;
33
- gpu_array: string[];
34
47
  spot?: boolean;
35
48
  expired?: boolean;
49
+ paused?: boolean;
50
+ online: boolean;
51
+ autossh: boolean;
36
52
  }
@@ -10,7 +10,16 @@ export interface MyServersServer {
10
10
  pricing: Pricing;
11
11
  online: boolean;
12
12
  min_spot_pricing: Pricing;
13
- allowed_currencies: Currency[];
14
13
  init_token?: string;
15
- specs?: Specs;
14
+ specs: Specs;
15
+ allowed_currencies: Currency[];
16
+ auto_renew_allowed: boolean;
17
+ rented: boolean;
18
+ remaining_time: number;
19
+ rented_currency: Currency;
20
+ rented_price: number;
21
+ rental_state: string;
22
+ rented_gpus: number;
23
+ total_gpus: number;
24
+ rented_price_by_currency: Pricing;
16
25
  }
@@ -0,0 +1,21 @@
1
+ import type { ResponseData } from '../types.ts';
2
+ export interface OrderRenewalsRequestData {
3
+ order_id: number;
4
+ }
5
+ export interface OrderRenewalsResponseData extends ResponseData {
6
+ renewals: OrderRenewal;
7
+ }
8
+ export interface OrderRenewal {
9
+ order_id: number;
10
+ renewal_no: number;
11
+ outcome: string;
12
+ reason: string;
13
+ decided_at: number;
14
+ applied_at: number;
15
+ old_price: number;
16
+ new_price: number;
17
+ cap: number;
18
+ term_seconds: number;
19
+ term_start: number;
20
+ term_end: number;
21
+ }
@@ -3,6 +3,9 @@ export interface RenterFeesResponseData extends ResponseData {
3
3
  renter_fees: RenterFees;
4
4
  poh_config: RenterFeesPohConfig;
5
5
  creation_fees: RenterFeesCreationFees;
6
+ creation_fee_delay_minutes: number;
7
+ minimal_balance_when_creating_order: RenterFeesMinimalBalance;
8
+ terminate_order_when_customer_has_less_balance_than_for_minutes: number;
6
9
  poh_balance: number;
7
10
  }
8
11
  export interface RenterFees {
@@ -11,6 +14,7 @@ export interface RenterFees {
11
14
  }
12
15
  export interface RenterFee {
13
16
  base: Pricing;
17
+ extra: Pricing;
14
18
  }
15
19
  export interface RenterFeesPohConfig {
16
20
  max_reduction_percent: number;
@@ -20,3 +24,7 @@ export interface RenterFeesCreationFees {
20
24
  on_demand: Pricing;
21
25
  spot: Pricing;
22
26
  }
27
+ export interface RenterFeesMinimalBalance {
28
+ on_demand: Pricing;
29
+ spot: Pricing;
30
+ }
@@ -17,11 +17,24 @@ export interface ServerConfig {
17
17
  initialized: boolean;
18
18
  id: number;
19
19
  rental_status: number;
20
+ partial_rental_enabled: boolean;
21
+ auto_renew_allowed: boolean;
20
22
  specs: Specs;
21
23
  background_job: ServerConfigBackgroundJob;
24
+ init_communication_token: string;
22
25
  allowed_coins: Currency[];
23
26
  autoprice: AutoPrice;
24
27
  usd_pricing: PricingInOriginalUsd;
28
+ remaining_time: number;
29
+ rental_state: string;
30
+ rented_gpus: number;
31
+ total_gpus: number;
32
+ update_channel: string;
33
+ requested_channel: string;
34
+ target_backend_version: number;
35
+ driver: ServerConfigDriver;
36
+ rented_price_by_currency: Pricing;
37
+ tenants: ServerConfigTenant[];
25
38
  }
26
39
  export interface ServerConfigBackgroundJob {
27
40
  times_updated: number;
@@ -29,3 +42,15 @@ export interface ServerConfigBackgroundJob {
29
42
  command: string;
30
43
  env: Record<string, string>;
31
44
  }
45
+ export interface ServerConfigDriver {
46
+ version: string;
47
+ status: string;
48
+ latest: string;
49
+ }
50
+ export interface ServerConfigTenant {
51
+ rental_type: string;
52
+ currency: Currency;
53
+ price: number;
54
+ remaining_time: number;
55
+ gpu_count: number;
56
+ }
@@ -0,0 +1,8 @@
1
+ import type { ResponseData } from '../types.ts';
2
+ export interface SetOrderAutoRenewRequestData {
3
+ order_id: number;
4
+ rental_hours?: number | null;
5
+ auto_renew?: boolean;
6
+ auto_renew_max_price?: number;
7
+ }
8
+ export type SetOrderAutoRenewResponseData = ResponseData;
@@ -14,5 +14,6 @@ export interface SetServerSettingsRequestData {
14
14
  'enabled-bitcoin'?: boolean;
15
15
  'autoprice'?: AutoPrice;
16
16
  'usd_pricing'?: PricingInOriginalUsd;
17
+ 'auto_renew_allowed'?: boolean;
17
18
  }
18
19
  export type SetServerSettingsResponseData = ResponseData;
@@ -3,13 +3,4 @@ export interface SetSpotPriceRequestData {
3
3
  order_id: number;
4
4
  desired_price: number;
5
5
  }
6
- export type SetSpotPriceResponseData = SetSpotPriceMaxStep | SetSpotPriceTimeToLowering | SetSpotPriceNormal;
7
- export interface SetSpotPriceMaxStep extends ResponseData {
8
- error: 'exceeded_max_step';
9
- max_step: number;
10
- }
11
- export interface SetSpotPriceTimeToLowering extends ResponseData {
12
- error: 'can_lower_every_600_seconds';
13
- time_to_lowering: number;
14
- }
15
- export type SetSpotPriceNormal = Omit<ResponseData, 'error'>;
6
+ export type SetSpotPriceResponseData = ResponseData;
package/dist/types.d.ts CHANGED
@@ -23,25 +23,6 @@ export interface Price {
23
23
  usd: PricingInUsd;
24
24
  original_usd?: PricingInOriginalUsd;
25
25
  }
26
- export interface Net {
27
- cc: string;
28
- down: number;
29
- up: number;
30
- test_history: string[];
31
- }
32
- export interface Gpu {
33
- type: string;
34
- mem: number;
35
- pcie_gen: number;
36
- pcie_width: number;
37
- }
38
- export interface Overclock {
39
- model: string;
40
- core_offset: number | null;
41
- mem_offset: number | null;
42
- core_lock: number | null;
43
- mem_lock: number | null;
44
- }
45
26
  export interface Specs {
46
27
  mb: string;
47
28
  cpu: string;
@@ -55,6 +36,7 @@ export interface Specs {
55
36
  backend_version: number;
56
37
  pcie_rev: number;
57
38
  pcie_width: number;
39
+ update_channel: string;
58
40
  xfs?: number;
59
41
  stock_oc_override?: boolean;
60
42
  pl: number[];
@@ -62,14 +44,26 @@ export interface Specs {
62
44
  stock_pl: number[];
63
45
  stock_oc: Overclock[] | 'default';
64
46
  }
47
+ export interface Net {
48
+ cc: string;
49
+ down: number;
50
+ up: number;
51
+ test_history: string[];
52
+ }
53
+ export interface Gpu {
54
+ type: string;
55
+ mem: number;
56
+ pcie_gen: number;
57
+ pcie_width: number;
58
+ }
59
+ export interface Overclock {
60
+ model: string;
61
+ core_offset: number | null;
62
+ mem_offset: number | null;
63
+ core_lock: number | null;
64
+ mem_lock: number | null;
65
+ }
65
66
  export interface Rating {
66
67
  avg: number;
67
68
  cnt: number;
68
69
  }
69
- export interface GigaspotOverclock {
70
- pl: number;
71
- core_offset?: number;
72
- mem_offset?: number;
73
- core_lock?: number;
74
- mem_lock?: number;
75
- }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cloreai",
3
- "version": "4.0.2",
3
+ "version": "5.0.0",
4
4
  "description": "CLORE.AI API client",
5
5
  "keywords": [
6
6
  "cloreai",
@@ -29,18 +29,18 @@
29
29
  "typecheck": "tsc --noEmit"
30
30
  },
31
31
  "dependencies": {
32
- "p-queue": "^9.3.0"
32
+ "p-queue": "^10.0.0"
33
33
  },
34
34
  "devDependencies": {
35
- "@tsconfig/node-lts": "^24.0.0",
35
+ "@tsconfig/node-lts": "^24.0.1",
36
36
  "@tsconfig/node-ts": "^23.6.4",
37
37
  "@tsconfig/strictest": "^2.0.8",
38
- "@types/node": "^25.9.1",
39
- "eslint": "^10.4.1",
40
- "eslint-config-vladpuz": "^4.0.1",
38
+ "@types/node": "^26.6.5",
39
+ "eslint": "^10.13.0",
40
+ "eslint-config-vladpuz": "^4.4.1",
41
41
  "husky": "^9.1.7",
42
- "prettier": "^3.8.3",
43
- "prettier-config-vladpuz": "^3.0.0",
42
+ "prettier": "^3.9.10",
43
+ "prettier-config-vladpuz": "^3.0.2",
44
44
  "rimraf": "^6.1.3",
45
45
  "typescript": "^6.0.3"
46
46
  }
@@ -1,15 +0,0 @@
1
- import type Cloreai from './Cloreai.ts';
2
- import type { CancelOrdersRequestData, CancelOrdersResponseData } from './resources/cancelOrders.ts';
3
- import type { CreateGigaspotOrdersRequestData, CreateGigaspotOrdersResponseData } from './resources/createGigaspotOrders.ts';
4
- import type { EditGigaspotOrdersRequestData, EditGigaspotOrdersResponseData } from './resources/editGigaspotOrders.ts';
5
- import type { GetGigaspotResponseData } from './resources/getGigaspot.ts';
6
- type Fetch = (input: string | URL, init?: RequestInit) => Promise<Response>;
7
- declare class Gigaspot {
8
- #private;
9
- constructor(cloreai: Cloreai, fetch: Fetch);
10
- getGigaspot(init?: RequestInit): Promise<GetGigaspotResponseData>;
11
- createGigaspotOrders(data: CreateGigaspotOrdersRequestData, init?: RequestInit): Promise<CreateGigaspotOrdersResponseData>;
12
- editGigaspotOrders(data: EditGigaspotOrdersRequestData, init?: RequestInit): Promise<EditGigaspotOrdersResponseData>;
13
- cancelOrders(data: CancelOrdersRequestData, init?: RequestInit): Promise<CancelOrdersResponseData>;
14
- }
15
- export default Gigaspot;
package/dist/Gigaspot.js DELETED
@@ -1,71 +0,0 @@
1
- import { priorityLevels } from "./constants.js";
2
- class Gigaspot {
3
- #cloreai;
4
- #fetch;
5
- constructor(cloreai, fetch) {
6
- this.#cloreai = cloreai;
7
- this.#fetch = fetch;
8
- }
9
- async getGigaspot(init = {}) {
10
- const url = new URL(this.#cloreai.baseURL + '/get_gigaspot');
11
- const response = await this.#cloreai.queue.add(async () => {
12
- return await this.#fetch(url, {
13
- ...init,
14
- method: 'GET',
15
- });
16
- }, {
17
- priority: priorityLevels.NORMAL,
18
- signal: init.signal ?? undefined,
19
- });
20
- const data = await response.json();
21
- const snapshotResponse = await fetch(data.v1_snapshot_url);
22
- const snapshotData = await snapshotResponse.json();
23
- return {
24
- ...data,
25
- snapshot: snapshotData,
26
- };
27
- }
28
- async createGigaspotOrders(data, init = {}) {
29
- const url = new URL(this.#cloreai.baseURL + '/create_gigaspot_orders');
30
- const response = await this.#cloreai.queue.add(async () => {
31
- return await this.#fetch(url, {
32
- ...init,
33
- method: 'POST',
34
- body: JSON.stringify(data),
35
- });
36
- }, {
37
- priority: priorityLevels.HIGH,
38
- signal: init.signal ?? undefined,
39
- });
40
- return await response.json();
41
- }
42
- async editGigaspotOrders(data, init = {}) {
43
- const url = new URL(this.#cloreai.baseURL + '/edit_gigaspot_orders');
44
- const response = await this.#cloreai.queue.add(async () => {
45
- return await this.#fetch(url, {
46
- ...init,
47
- method: 'POST',
48
- body: JSON.stringify(data),
49
- });
50
- }, {
51
- priority: priorityLevels.HIGH,
52
- signal: init.signal ?? undefined,
53
- });
54
- return await response.json();
55
- }
56
- async cancelOrders(data, init = {}) {
57
- const url = new URL(this.#cloreai.baseURL + '/cancel_orders');
58
- const response = await this.#cloreai.queue.add(async () => {
59
- return await this.#fetch(url, {
60
- ...init,
61
- method: 'POST',
62
- body: JSON.stringify(data),
63
- });
64
- }, {
65
- priority: priorityLevels.HIGH,
66
- signal: init.signal ?? undefined,
67
- });
68
- return await response.json();
69
- }
70
- }
71
- export default Gigaspot;
@@ -1,15 +0,0 @@
1
- import type { Currency, GigaspotOverclock, ResponseData } from '../types.ts';
2
- export type CreateGigaspotOrdersRequestData = CreateGigaspotOrdersOrder[];
3
- export interface CreateGigaspotOrdersOrder {
4
- currency: Currency;
5
- image: string;
6
- renting_server: number;
7
- price: number;
8
- oc: GigaspotOverclock[];
9
- env?: Record<string, string>;
10
- }
11
- export interface CreateGigaspotOrdersResponseData extends ResponseData {
12
- failed_to_oc_servers: number[];
13
- failed_to_rent_servers: number[];
14
- too_low_bids_servers: number[];
15
- }
@@ -1,12 +0,0 @@
1
- import type { GigaspotOverclock, ResponseData } from '../types.ts';
2
- export type EditGigaspotOrdersRequestData = EditGigaspotOrdersOrder[];
3
- export interface EditGigaspotOrdersOrder {
4
- order_id: number;
5
- price: number;
6
- oc: GigaspotOverclock[];
7
- }
8
- export interface EditGigaspotOrdersResponseData extends ResponseData {
9
- success_to_update_ids: number[];
10
- failed_to_update_ids: number[];
11
- too_low_bid_ids: number[];
12
- }
@@ -1,46 +0,0 @@
1
- import type { Currency, Pricing, ResponseData } from '../types.ts';
2
- export interface GetGigaspotResponseData extends GetGigaspotResponseDataBase {
3
- snapshot: GetGigaspotSnapshot;
4
- }
5
- export interface GetGigaspotResponseDataBase extends ResponseData {
6
- my_user_id: number;
7
- v1_snapshot_url: string;
8
- creation_fees: Pricing;
9
- }
10
- export type GetGigaspotSnapshot = Record<string, GetGigaspotSnapshotServer>;
11
- export interface GetGigaspotSnapshotServer {
12
- bids: GetGigaspotSnapshotServerBid[];
13
- on_demand_rented: boolean;
14
- online: boolean;
15
- cpu: string;
16
- cores: number;
17
- threads: number;
18
- ram: number;
19
- gpus: GetGigaspotSnapshotServerGpu[];
20
- working_properly: boolean;
21
- cuda: string;
22
- max_rental_length: number;
23
- cc: string;
24
- host: number;
25
- reliability: number;
26
- min_bid: number;
27
- energy_price: number;
28
- }
29
- export interface GetGigaspotSnapshotServerBid {
30
- owner: number;
31
- id: number;
32
- active: boolean;
33
- to_cache: boolean;
34
- cached: boolean;
35
- price: number;
36
- currency: Currency;
37
- pl: number;
38
- }
39
- export interface GetGigaspotSnapshotServerGpu {
40
- pl: [number, number];
41
- mem_lock: [number, number];
42
- core_lock: [number, number];
43
- mem_offset: [number, number];
44
- core_offset: [number, number];
45
- model: string;
46
- }
@@ -1 +0,0 @@
1
- export {};