From bf97c0f5bf8d0cbd8decb60382f0605243b00dd5 Mon Sep 17 00:00:00 2001 From: Martin Forejt Date: Thu, 24 Oct 2024 15:58:39 +0200 Subject: [PATCH] feat: add user.updateLimits (#595) Resolves #329 - add `updateLimits` function to `UserClient`, which does `PUT: /v2/users/:userId/limits` Api docs PR here: https://github.com/apify/openapi/pull/103 Endpoint is already implemented, only api docs and client was missing --- src/resource_clients/user.ts | 15 +++++++++++++++ test/mock_server/routes/users.js | 1 + test/users.test.js | 12 ++++++++++++ 3 files changed, 28 insertions(+) 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 }); + }); }); });