diff --git a/src/resource_clients/user.ts b/src/resource_clients/user.ts index d116264e..77b57729 100644 --- a/src/resource_clients/user.ts +++ b/src/resource_clients/user.ts @@ -64,6 +64,19 @@ export class UserClient extends ResourceClient { return undefined; } + + /** + * https://docs.apify.com/api/v2/#/reference/users/account-and-usage-limits + */ + async updateLimits(options: LimitsUpdateOptions): Promise { + const requestOpts: ApifyRequestConfig = { + url: this._url('limits'), + method: 'PUT', + params: this._params(), + data: options, + }; + await this.httpClient.call(requestOpts); + } } // @@ -207,6 +220,8 @@ export interface Limits { dataRetentionDays: number; } +export type LimitsUpdateOptions = Pick + export interface Current { monthlyUsageUsd: number; monthlyActorComputeUnits: number; diff --git a/test/mock_server/routes/users.js b/test/mock_server/routes/users.js index 6a8a43bf..dc5faae7 100644 --- a/test/mock_server/routes/users.js +++ b/test/mock_server/routes/users.js @@ -8,6 +8,7 @@ const ROUTES = [ { id: 'get-user', method: 'GET', path: '/:userId' }, { id: 'get-monthly-usage', method: 'GET', path: '/:userId/usage/monthly' }, { id: 'get-limits', method: 'GET', path: '/:userId/limits' }, + { id: 'update-limits', method: 'PUT', path: '/:userId/limits' }, ]; addRoutes(users, ROUTES); diff --git a/test/users.test.js b/test/users.test.js index d77ca874..0f4c6453 100644 --- a/test/users.test.js +++ b/test/users.test.js @@ -82,5 +82,17 @@ describe('User methods', () => { expect(browserRes).toEqual(res); validateRequest({}, { userId }); }); + + test('updateLimits() works', async () => { + const userId = 'me'; + + const res = await client.user(userId).updateLimits({ maxMonthlyUsageUsd: 1000 }); + expect(res).toBeUndefined(); + validateRequest({}, { userId }, { maxMonthlyUsageUsd: 1000 }); + + const browserRes = await page.evaluate((id) => client.user(id).updateLimits({ maxMonthlyUsageUsd: 1000 }), userId); + expect(browserRes).toBeUndefined(); + validateRequest({}, { userId }, { maxMonthlyUsageUsd: 1000 }); + }); }); });