whoopper 0.1.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/LICENSE +21 -0
- package/README.md +176 -0
- package/dist/auth/auth-server.d.ts +15 -0
- package/dist/auth/auth-server.d.ts.map +1 -0
- package/dist/auth/auth-server.js +127 -0
- package/dist/auth/auth-server.js.map +1 -0
- package/dist/auth/oauth-provider.d.ts +17 -0
- package/dist/auth/oauth-provider.d.ts.map +1 -0
- package/dist/auth/oauth-provider.js +139 -0
- package/dist/auth/oauth-provider.js.map +1 -0
- package/dist/auth/token-info.d.ts +21 -0
- package/dist/auth/token-info.d.ts.map +1 -0
- package/dist/auth/token-info.js +35 -0
- package/dist/auth/token-info.js.map +1 -0
- package/dist/auth/token-store.d.ts +21 -0
- package/dist/auth/token-store.d.ts.map +1 -0
- package/dist/auth/token-store.js +75 -0
- package/dist/auth/token-store.js.map +1 -0
- package/dist/auth/types.d.ts +42 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +2 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/client.d.ts +27 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +68 -0
- package/dist/client.js.map +1 -0
- package/dist/errors/auth.d.ts +11 -0
- package/dist/errors/auth.d.ts.map +1 -0
- package/dist/errors/auth.js +20 -0
- package/dist/errors/auth.js.map +1 -0
- package/dist/errors/base.d.ts +5 -0
- package/dist/errors/base.d.ts.map +1 -0
- package/dist/errors/base.js +9 -0
- package/dist/errors/base.js.map +1 -0
- package/dist/errors/config.d.ts +5 -0
- package/dist/errors/config.d.ts.map +1 -0
- package/dist/errors/config.js +8 -0
- package/dist/errors/config.js.map +1 -0
- package/dist/errors/http.d.ts +19 -0
- package/dist/errors/http.d.ts.map +1 -0
- package/dist/errors/http.js +36 -0
- package/dist/errors/http.js.map +1 -0
- package/dist/errors/index.d.ts +5 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +5 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/http/errors.d.ts +3 -0
- package/dist/http/errors.d.ts.map +1 -0
- package/dist/http/errors.js +31 -0
- package/dist/http/errors.js.map +1 -0
- package/dist/http/fetch-client.d.ts +31 -0
- package/dist/http/fetch-client.d.ts.map +1 -0
- package/dist/http/fetch-client.js +76 -0
- package/dist/http/fetch-client.js.map +1 -0
- package/dist/http/retry.d.ts +7 -0
- package/dist/http/retry.d.ts.map +1 -0
- package/dist/http/retry.js +36 -0
- package/dist/http/retry.js.map +1 -0
- package/dist/http/throttle.d.ts +16 -0
- package/dist/http/throttle.d.ts.map +1 -0
- package/dist/http/throttle.js +51 -0
- package/dist/http/throttle.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/models/achievements.d.ts +13 -0
- package/dist/models/achievements.d.ts.map +1 -0
- package/dist/models/achievements.js +2 -0
- package/dist/models/achievements.js.map +1 -0
- package/dist/models/common.d.ts +16 -0
- package/dist/models/common.d.ts.map +1 -0
- package/dist/models/common.js +7 -0
- package/dist/models/common.js.map +1 -0
- package/dist/models/cycle.d.ts +19 -0
- package/dist/models/cycle.d.ts.map +1 -0
- package/dist/models/cycle.js +2 -0
- package/dist/models/cycle.js.map +1 -0
- package/dist/models/heart-rate.d.ts +10 -0
- package/dist/models/heart-rate.d.ts.map +1 -0
- package/dist/models/heart-rate.js +2 -0
- package/dist/models/heart-rate.js.map +1 -0
- package/dist/models/index.d.ts +13 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +3 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/internal.d.ts +78 -0
- package/dist/models/internal.d.ts.map +1 -0
- package/dist/models/internal.js +2 -0
- package/dist/models/internal.js.map +1 -0
- package/dist/models/recovery.d.ts +19 -0
- package/dist/models/recovery.d.ts.map +1 -0
- package/dist/models/recovery.js +2 -0
- package/dist/models/recovery.js.map +1 -0
- package/dist/models/sleep.d.ts +38 -0
- package/dist/models/sleep.d.ts.map +1 -0
- package/dist/models/sleep.js +2 -0
- package/dist/models/sleep.js.map +1 -0
- package/dist/models/sports.d.ts +6 -0
- package/dist/models/sports.d.ts.map +1 -0
- package/dist/models/sports.js +190 -0
- package/dist/models/sports.js.map +1 -0
- package/dist/models/stress.d.ts +6 -0
- package/dist/models/stress.d.ts.map +1 -0
- package/dist/models/stress.js +2 -0
- package/dist/models/stress.js.map +1 -0
- package/dist/models/trends.d.ts +10 -0
- package/dist/models/trends.d.ts.map +1 -0
- package/dist/models/trends.js +2 -0
- package/dist/models/trends.js.map +1 -0
- package/dist/models/user.d.ts +12 -0
- package/dist/models/user.d.ts.map +1 -0
- package/dist/models/user.js +2 -0
- package/dist/models/user.js.map +1 -0
- package/dist/models/workout.d.ts +33 -0
- package/dist/models/workout.d.ts.map +1 -0
- package/dist/models/workout.js +2 -0
- package/dist/models/workout.js.map +1 -0
- package/dist/pagination/paginator.d.ts +11 -0
- package/dist/pagination/paginator.d.ts.map +1 -0
- package/dist/pagination/paginator.js +38 -0
- package/dist/pagination/paginator.js.map +1 -0
- package/dist/resources/base.d.ts +17 -0
- package/dist/resources/base.d.ts.map +1 -0
- package/dist/resources/base.js +37 -0
- package/dist/resources/base.js.map +1 -0
- package/dist/resources/official/cycle.d.ts +10 -0
- package/dist/resources/official/cycle.d.ts.map +1 -0
- package/dist/resources/official/cycle.js +13 -0
- package/dist/resources/official/cycle.js.map +1 -0
- package/dist/resources/official/recovery.d.ts +6 -0
- package/dist/resources/official/recovery.d.ts.map +1 -0
- package/dist/resources/official/recovery.js +7 -0
- package/dist/resources/official/recovery.js.map +1 -0
- package/dist/resources/official/sleep.d.ts +6 -0
- package/dist/resources/official/sleep.d.ts.map +1 -0
- package/dist/resources/official/sleep.js +7 -0
- package/dist/resources/official/sleep.js.map +1 -0
- package/dist/resources/official/user.d.ts +8 -0
- package/dist/resources/official/user.d.ts.map +1 -0
- package/dist/resources/official/user.js +13 -0
- package/dist/resources/official/user.js.map +1 -0
- package/dist/resources/official/workout.d.ts +6 -0
- package/dist/resources/official/workout.d.ts.map +1 -0
- package/dist/resources/official/workout.js +7 -0
- package/dist/resources/official/workout.js.map +1 -0
- package/dist/result/result.d.ts +11 -0
- package/dist/result/result.d.ts.map +1 -0
- package/dist/result/result.js +19 -0
- package/dist/result/result.js.map +1 -0
- package/dist/utils/conversions.d.ts +4 -0
- package/dist/utils/conversions.d.ts.map +1 -0
- package/dist/utils/conversions.js +10 -0
- package/dist/utils/conversions.js.map +1 -0
- package/dist/utils/date.d.ts +6 -0
- package/dist/utils/date.d.ts.map +1 -0
- package/dist/utils/date.js +19 -0
- package/dist/utils/date.js.map +1 -0
- package/dist/utils/headers.d.ts +2 -0
- package/dist/utils/headers.d.ts.map +1 -0
- package/dist/utils/headers.js +8 -0
- package/dist/utils/headers.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/sleep-helpers.d.ts +7 -0
- package/dist/utils/sleep-helpers.d.ts.map +1 -0
- package/dist/utils/sleep-helpers.js +49 -0
- package/dist/utils/sleep-helpers.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { writeFile, readFile, chmod, stat } from 'node:fs/promises';
|
|
2
|
+
import { TokenInfo } from './token-info.js';
|
|
3
|
+
export class MemoryTokenStore {
|
|
4
|
+
tokens = new Map();
|
|
5
|
+
async load(key) {
|
|
6
|
+
return this.tokens.get(key) ?? null;
|
|
7
|
+
}
|
|
8
|
+
async save(key, token) {
|
|
9
|
+
this.tokens.set(key, token);
|
|
10
|
+
}
|
|
11
|
+
async clear(key) {
|
|
12
|
+
this.tokens.delete(key);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class FileTokenStore {
|
|
16
|
+
filePath;
|
|
17
|
+
constructor(filePath) {
|
|
18
|
+
this.filePath = filePath;
|
|
19
|
+
}
|
|
20
|
+
async load(key) {
|
|
21
|
+
try {
|
|
22
|
+
await this.checkPermissions();
|
|
23
|
+
const raw = await readFile(this.filePath, 'utf-8');
|
|
24
|
+
const data = JSON.parse(raw);
|
|
25
|
+
const tokenData = data[key];
|
|
26
|
+
if (!tokenData)
|
|
27
|
+
return null;
|
|
28
|
+
return TokenInfo.fromJSON(tokenData);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
if (error.code === 'ENOENT') {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async save(key, token) {
|
|
38
|
+
let data = {};
|
|
39
|
+
try {
|
|
40
|
+
const raw = await readFile(this.filePath, 'utf-8');
|
|
41
|
+
data = JSON.parse(raw);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// File doesn't exist yet, start fresh
|
|
45
|
+
}
|
|
46
|
+
data[key] = token.toJSON();
|
|
47
|
+
await writeFile(this.filePath, JSON.stringify(data, null, 2), 'utf-8');
|
|
48
|
+
await chmod(this.filePath, 0o600);
|
|
49
|
+
}
|
|
50
|
+
async clear(key) {
|
|
51
|
+
try {
|
|
52
|
+
const raw = await readFile(this.filePath, 'utf-8');
|
|
53
|
+
const data = JSON.parse(raw);
|
|
54
|
+
delete data[key];
|
|
55
|
+
await writeFile(this.filePath, JSON.stringify(data, null, 2), 'utf-8');
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// File doesn't exist, nothing to clear
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async checkPermissions() {
|
|
62
|
+
try {
|
|
63
|
+
const stats = await stat(this.filePath);
|
|
64
|
+
const mode = stats.mode & 0o777;
|
|
65
|
+
if (mode !== 0o600) {
|
|
66
|
+
console.warn(`[whoopper] Token file ${this.filePath} has permissions ${mode.toString(8)}, expected 600. ` +
|
|
67
|
+
`Run: chmod 600 ${this.filePath}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// File doesn't exist yet
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=token-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-store.js","sourceRoot":"","sources":["../../src/auth/token-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export interface OAuthConfig {
|
|
2
|
+
clientId: string;
|
|
3
|
+
clientSecret: string;
|
|
4
|
+
redirectUri?: string;
|
|
5
|
+
scopes?: string[];
|
|
6
|
+
}
|
|
7
|
+
export interface InternalAuthConfig {
|
|
8
|
+
cognitoClientId: string;
|
|
9
|
+
}
|
|
10
|
+
export type WhooopperConfig = {
|
|
11
|
+
mode: 'oauth';
|
|
12
|
+
oauth: OAuthConfig;
|
|
13
|
+
} | {
|
|
14
|
+
mode: 'internal';
|
|
15
|
+
internal: InternalAuthConfig;
|
|
16
|
+
} | {
|
|
17
|
+
mode: 'both';
|
|
18
|
+
oauth: OAuthConfig;
|
|
19
|
+
internal: InternalAuthConfig;
|
|
20
|
+
} | {
|
|
21
|
+
mode: 'tokens';
|
|
22
|
+
tokens: TokensConfig;
|
|
23
|
+
};
|
|
24
|
+
export interface TokensConfig {
|
|
25
|
+
official?: {
|
|
26
|
+
accessToken: string;
|
|
27
|
+
refreshToken?: string;
|
|
28
|
+
expiresAt?: number;
|
|
29
|
+
};
|
|
30
|
+
internal?: {
|
|
31
|
+
accessToken: string;
|
|
32
|
+
expiresAt?: number;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export interface TokenResponse {
|
|
36
|
+
access_token: string;
|
|
37
|
+
refresh_token?: string;
|
|
38
|
+
expires_in: number;
|
|
39
|
+
token_type: string;
|
|
40
|
+
scope?: string;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE;QACT,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":""}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { OAuthConfig, TokensConfig } from './auth/types.js';
|
|
2
|
+
import { type TokenStore } from './auth/token-store.js';
|
|
3
|
+
import { UserResource } from './resources/official/user.js';
|
|
4
|
+
import { CycleResource } from './resources/official/cycle.js';
|
|
5
|
+
import { RecoveryResource } from './resources/official/recovery.js';
|
|
6
|
+
import { SleepResource } from './resources/official/sleep.js';
|
|
7
|
+
import { WorkoutResource } from './resources/official/workout.js';
|
|
8
|
+
import type { RetryOptions } from './http/retry.js';
|
|
9
|
+
import type { ThrottleOptions } from './http/throttle.js';
|
|
10
|
+
export interface ClientOptions {
|
|
11
|
+
tokenStore?: TokenStore;
|
|
12
|
+
retry?: Partial<RetryOptions>;
|
|
13
|
+
throttle?: Partial<ThrottleOptions>;
|
|
14
|
+
}
|
|
15
|
+
export declare class WhooopperClient {
|
|
16
|
+
readonly user: UserResource;
|
|
17
|
+
readonly cycle: CycleResource;
|
|
18
|
+
readonly recovery: RecoveryResource;
|
|
19
|
+
readonly sleep: SleepResource;
|
|
20
|
+
readonly workout: WorkoutResource;
|
|
21
|
+
private readonly oauthProvider;
|
|
22
|
+
private constructor();
|
|
23
|
+
static withOAuth(config: OAuthConfig, options?: ClientOptions): WhooopperClient;
|
|
24
|
+
static withTokens(config: TokensConfig, options?: ClientOptions): WhooopperClient;
|
|
25
|
+
authenticate(): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGjE,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAG1E,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI1D,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;CACrC;AAED,qBAAa,eAAe;IAC1B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAElC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuB;IAErD,OAAO;IAYP,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,eAAe;IAkB/E,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,eAAe;IA4B3E,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;CAMpC"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { TokenInfo } from './auth/token-info.js';
|
|
2
|
+
import { OAuthProvider } from './auth/oauth-provider.js';
|
|
3
|
+
import { MemoryTokenStore } from './auth/token-store.js';
|
|
4
|
+
import { FetchClient } from './http/fetch-client.js';
|
|
5
|
+
import { ConfigurationError } from './errors/config.js';
|
|
6
|
+
import { UserResource } from './resources/official/user.js';
|
|
7
|
+
import { CycleResource } from './resources/official/cycle.js';
|
|
8
|
+
import { RecoveryResource } from './resources/official/recovery.js';
|
|
9
|
+
import { SleepResource } from './resources/official/sleep.js';
|
|
10
|
+
import { WorkoutResource } from './resources/official/workout.js';
|
|
11
|
+
const OFFICIAL_BASE_URL = 'https://api.prod.whoop.com/developer/v2';
|
|
12
|
+
export class WhooopperClient {
|
|
13
|
+
user;
|
|
14
|
+
cycle;
|
|
15
|
+
recovery;
|
|
16
|
+
sleep;
|
|
17
|
+
workout;
|
|
18
|
+
oauthProvider;
|
|
19
|
+
constructor(oauthProvider, officialClient) {
|
|
20
|
+
this.oauthProvider = oauthProvider;
|
|
21
|
+
this.user = new UserResource(officialClient);
|
|
22
|
+
this.cycle = new CycleResource(officialClient);
|
|
23
|
+
this.recovery = new RecoveryResource(officialClient);
|
|
24
|
+
this.sleep = new SleepResource(officialClient);
|
|
25
|
+
this.workout = new WorkoutResource(officialClient);
|
|
26
|
+
}
|
|
27
|
+
static withOAuth(config, options) {
|
|
28
|
+
if (!config.clientId || !config.clientSecret) {
|
|
29
|
+
throw new ConfigurationError('clientId and clientSecret are required for OAuth');
|
|
30
|
+
}
|
|
31
|
+
const store = options?.tokenStore ?? new MemoryTokenStore();
|
|
32
|
+
const provider = new OAuthProvider(config, store);
|
|
33
|
+
const client = new FetchClient({
|
|
34
|
+
baseUrl: OFFICIAL_BASE_URL,
|
|
35
|
+
getAccessToken: () => provider.getAccessToken(),
|
|
36
|
+
retry: options?.retry,
|
|
37
|
+
throttle: options?.throttle,
|
|
38
|
+
});
|
|
39
|
+
return new WhooopperClient(provider, client);
|
|
40
|
+
}
|
|
41
|
+
static withTokens(config, options) {
|
|
42
|
+
if (!config.official) {
|
|
43
|
+
throw new ConfigurationError('official token config is required');
|
|
44
|
+
}
|
|
45
|
+
const store = options?.tokenStore ?? new MemoryTokenStore();
|
|
46
|
+
const provider = new OAuthProvider({ clientId: '', clientSecret: '' }, store);
|
|
47
|
+
const tokenInfo = new TokenInfo({
|
|
48
|
+
accessToken: config.official.accessToken,
|
|
49
|
+
refreshToken: config.official.refreshToken,
|
|
50
|
+
expiresAt: config.official.expiresAt ?? Date.now() + 86_400_000,
|
|
51
|
+
});
|
|
52
|
+
provider.setTokenInfo(tokenInfo);
|
|
53
|
+
const client = new FetchClient({
|
|
54
|
+
baseUrl: OFFICIAL_BASE_URL,
|
|
55
|
+
getAccessToken: () => provider.getAccessToken(),
|
|
56
|
+
retry: options?.retry,
|
|
57
|
+
throttle: options?.throttle,
|
|
58
|
+
});
|
|
59
|
+
return new WhooopperClient(provider, client);
|
|
60
|
+
}
|
|
61
|
+
async authenticate() {
|
|
62
|
+
if (!this.oauthProvider) {
|
|
63
|
+
throw new ConfigurationError('No auth provider configured');
|
|
64
|
+
}
|
|
65
|
+
await this.oauthProvider.authenticate();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { WhoopError } from './base.js';
|
|
2
|
+
export declare class AuthenticationError extends WhoopError {
|
|
3
|
+
constructor(message?: string, details?: Record<string, unknown>);
|
|
4
|
+
}
|
|
5
|
+
export declare class TokenExpiredError extends WhoopError {
|
|
6
|
+
constructor(message?: string, details?: Record<string, unknown>);
|
|
7
|
+
}
|
|
8
|
+
export declare class RefreshTokenError extends WhoopError {
|
|
9
|
+
constructor(message?: string, details?: Record<string, unknown>);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/errors/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,qBAAa,mBAAoB,SAAQ,UAAU;gBAE/C,OAAO,SAA0B,EACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAKpC;AAED,qBAAa,iBAAkB,SAAQ,UAAU;gBAE7C,OAAO,SAA6B,EACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAKpC;AAED,qBAAa,iBAAkB,SAAQ,UAAU;gBAE7C,OAAO,SAAmC,EAC1C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAKpC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { WhoopError } from './base.js';
|
|
2
|
+
export class AuthenticationError extends WhoopError {
|
|
3
|
+
constructor(message = 'Authentication failed', details) {
|
|
4
|
+
super(message, details);
|
|
5
|
+
this.name = 'AuthenticationError';
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export class TokenExpiredError extends WhoopError {
|
|
9
|
+
constructor(message = 'Access token has expired', details) {
|
|
10
|
+
super(message, details);
|
|
11
|
+
this.name = 'TokenExpiredError';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export class RefreshTokenError extends WhoopError {
|
|
15
|
+
constructor(message = 'Failed to refresh access token', details) {
|
|
16
|
+
super(message, details);
|
|
17
|
+
this.name = 'RefreshTokenError';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/errors/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,OAAO,mBAAoB,SAAQ,UAAU;IACjD,YACE,OAAO,GAAG,uBAAuB,EACjC,OAAiC;QAEjC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,UAAU;IAC/C,YACE,OAAO,GAAG,0BAA0B,EACpC,OAAiC;QAEjC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,UAAU;IAC/C,YACE,OAAO,GAAG,gCAAgC,EAC1C,OAAiC;QAEjC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/errors/base.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAW,SAAQ,KAAK;aAGjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBADjD,OAAO,EAAE,MAAM,EACC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAKpD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/errors/base.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,UAAW,SAAQ,KAAK;IAGjB;IAFlB,YACE,OAAe,EACC,OAAiC;QAEjD,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,YAAO,GAAP,OAAO,CAA0B;QAGjD,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/errors/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,qBAAa,kBAAmB,SAAQ,UAAU;gBAE9C,OAAO,SAA0B,EACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAKpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/errors/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IAChD,YACE,OAAO,GAAG,uBAAuB,EACjC,OAAiC;QAEjC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { WhoopError } from './base.js';
|
|
2
|
+
export declare class HttpError extends WhoopError {
|
|
3
|
+
readonly statusCode: number;
|
|
4
|
+
constructor(message: string, statusCode: number, details?: Record<string, unknown>);
|
|
5
|
+
}
|
|
6
|
+
export declare class ValidationError extends HttpError {
|
|
7
|
+
constructor(message?: string, details?: Record<string, unknown>);
|
|
8
|
+
}
|
|
9
|
+
export declare class NotFoundError extends HttpError {
|
|
10
|
+
constructor(message?: string, details?: Record<string, unknown>);
|
|
11
|
+
}
|
|
12
|
+
export declare class RateLimitError extends HttpError {
|
|
13
|
+
readonly retryAfter: number | null;
|
|
14
|
+
constructor(retryAfter: number | null, message?: string, details?: Record<string, unknown>);
|
|
15
|
+
}
|
|
16
|
+
export declare class ServerError extends HttpError {
|
|
17
|
+
constructor(statusCode: number, message?: string, details?: Record<string, unknown>);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/errors/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,qBAAa,SAAU,SAAQ,UAAU;aAGrB,UAAU,EAAE,MAAM;gBADlC,OAAO,EAAE,MAAM,EACC,UAAU,EAAE,MAAM,EAClC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAKpC;AAED,qBAAa,eAAgB,SAAQ,SAAS;gBAChC,OAAO,SAAsB,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI7E;AAED,qBAAa,aAAc,SAAQ,SAAS;gBAC9B,OAAO,SAAuB,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI9E;AAED,qBAAa,cAAe,SAAQ,SAAS;aAEzB,UAAU,EAAE,MAAM,GAAG,IAAI;gBAAzB,UAAU,EAAE,MAAM,GAAG,IAAI,EACzC,OAAO,SAAwB,EAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAKpC;AAED,qBAAa,WAAY,SAAQ,SAAS;gBAEtC,UAAU,EAAE,MAAM,EAClB,OAAO,SAAiB,EACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAKpC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { WhoopError } from './base.js';
|
|
2
|
+
export class HttpError extends WhoopError {
|
|
3
|
+
statusCode;
|
|
4
|
+
constructor(message, statusCode, details) {
|
|
5
|
+
super(message, details);
|
|
6
|
+
this.statusCode = statusCode;
|
|
7
|
+
this.name = 'HttpError';
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export class ValidationError extends HttpError {
|
|
11
|
+
constructor(message = 'Validation failed', details) {
|
|
12
|
+
super(message, 400, details);
|
|
13
|
+
this.name = 'ValidationError';
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export class NotFoundError extends HttpError {
|
|
17
|
+
constructor(message = 'Resource not found', details) {
|
|
18
|
+
super(message, 404, details);
|
|
19
|
+
this.name = 'NotFoundError';
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export class RateLimitError extends HttpError {
|
|
23
|
+
retryAfter;
|
|
24
|
+
constructor(retryAfter, message = 'Rate limit exceeded', details) {
|
|
25
|
+
super(message, 429, details);
|
|
26
|
+
this.retryAfter = retryAfter;
|
|
27
|
+
this.name = 'RateLimitError';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export class ServerError extends HttpError {
|
|
31
|
+
constructor(statusCode, message = 'Server error', details) {
|
|
32
|
+
super(message, statusCode, details);
|
|
33
|
+
this.name = 'ServerError';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/errors/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,OAAO,SAAU,SAAQ,UAAU;IAGrB;IAFlB,YACE,OAAe,EACC,UAAkB,EAClC,OAAiC;QAEjC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAHR,eAAU,GAAV,UAAU,CAAQ;QAIlC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,SAAS;IAC5C,YAAY,OAAO,GAAG,mBAAmB,EAAE,OAAiC;QAC1E,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,SAAS;IAC1C,YAAY,OAAO,GAAG,oBAAoB,EAAE,OAAiC;QAC3E,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,SAAS;IAEzB;IADlB,YACkB,UAAyB,EACzC,OAAO,GAAG,qBAAqB,EAC/B,OAAiC;QAEjC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAJb,eAAU,GAAV,UAAU,CAAe;QAKzC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,SAAS;IACxC,YACE,UAAkB,EAClB,OAAO,GAAG,cAAc,EACxB,OAAiC;QAEjC,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { WhoopError } from './base.js';
|
|
2
|
+
export { AuthenticationError, TokenExpiredError, RefreshTokenError, } from './auth.js';
|
|
3
|
+
export { HttpError, ValidationError, NotFoundError, RateLimitError, ServerError, } from './http.js';
|
|
4
|
+
export { ConfigurationError } from './config.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,SAAS,EACT,eAAe,EACf,aAAa,EACb,cAAc,EACd,WAAW,GACZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { WhoopError } from './base.js';
|
|
2
|
+
export { AuthenticationError, TokenExpiredError, RefreshTokenError, } from './auth.js';
|
|
3
|
+
export { HttpError, ValidationError, NotFoundError, RateLimitError, ServerError, } from './http.js';
|
|
4
|
+
export { ConfigurationError } from './config.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,SAAS,EACT,eAAe,EACf,aAAa,EACb,cAAc,EACd,WAAW,GACZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/http/errors.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,OAAO,GACf,UAAU,CA4BZ"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { TokenExpiredError, AuthenticationError } from '../errors/auth.js';
|
|
2
|
+
import { ValidationError, NotFoundError, RateLimitError, ServerError, } from '../errors/http.js';
|
|
3
|
+
export function mapHttpError(status, body, headers) {
|
|
4
|
+
const details = typeof body === 'object' && body !== null
|
|
5
|
+
? body
|
|
6
|
+
: { body };
|
|
7
|
+
const message = typeof body === 'object' && body !== null && 'message' in body
|
|
8
|
+
? String(body.message)
|
|
9
|
+
: `HTTP ${status}`;
|
|
10
|
+
switch (status) {
|
|
11
|
+
case 400:
|
|
12
|
+
return new ValidationError(message, details);
|
|
13
|
+
case 401:
|
|
14
|
+
return new TokenExpiredError(message, details);
|
|
15
|
+
case 403:
|
|
16
|
+
return new AuthenticationError(message, details);
|
|
17
|
+
case 404:
|
|
18
|
+
return new NotFoundError(message, details);
|
|
19
|
+
case 429: {
|
|
20
|
+
const retryAfterHeader = headers.get('retry-after');
|
|
21
|
+
const retryAfter = retryAfterHeader ? Number(retryAfterHeader) : null;
|
|
22
|
+
return new RateLimitError(retryAfter, message, details);
|
|
23
|
+
}
|
|
24
|
+
default:
|
|
25
|
+
if (status >= 500) {
|
|
26
|
+
return new ServerError(status, message, details);
|
|
27
|
+
}
|
|
28
|
+
return new ServerError(status, message, details);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/http/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EACL,eAAe,EACf,aAAa,EACb,cAAc,EACd,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAG3B,MAAM,UAAU,YAAY,CAC1B,MAAc,EACd,IAAa,EACb,OAAgB;IAEhB,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QACvD,CAAC,CAAE,IAAgC;QACnC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACb,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,SAAS,IAAI,IAAI;QAC5E,CAAC,CAAC,MAAM,CAAE,IAAgC,CAAC,OAAO,CAAC;QACnD,CAAC,CAAC,QAAQ,MAAM,EAAE,CAAC;IAErB,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,GAAG;YACN,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,KAAK,GAAG;YACN,OAAO,IAAI,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjD,KAAK,GAAG;YACN,OAAO,IAAI,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACnD,KAAK,GAAG;YACN,OAAO,IAAI,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,KAAK,GAAG,CAAC,CAAC,CAAC;YACT,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACpD,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACtE,OAAO,IAAI,cAAc,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1D,CAAC;QACD;YACE,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;gBAClB,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YACnD,CAAC;YACD,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type RetryOptions } from './retry.js';
|
|
2
|
+
import { type ThrottleOptions } from './throttle.js';
|
|
3
|
+
export interface FetchClientOptions {
|
|
4
|
+
baseUrl: string;
|
|
5
|
+
getAccessToken: () => Promise<string>;
|
|
6
|
+
retry?: Partial<RetryOptions>;
|
|
7
|
+
throttle?: Partial<ThrottleOptions>;
|
|
8
|
+
headers?: Record<string, string>;
|
|
9
|
+
}
|
|
10
|
+
export interface RequestOptions {
|
|
11
|
+
params?: Record<string, string | number | boolean | undefined>;
|
|
12
|
+
headers?: Record<string, string>;
|
|
13
|
+
body?: unknown;
|
|
14
|
+
signal?: AbortSignal;
|
|
15
|
+
}
|
|
16
|
+
export declare class FetchClient {
|
|
17
|
+
private readonly baseUrl;
|
|
18
|
+
private readonly getAccessToken;
|
|
19
|
+
private readonly retryOptions;
|
|
20
|
+
private readonly throttler;
|
|
21
|
+
private readonly defaultHeaders;
|
|
22
|
+
constructor(options: FetchClientOptions);
|
|
23
|
+
get<T>(path: string, options?: RequestOptions): Promise<T>;
|
|
24
|
+
post<T>(path: string, options?: RequestOptions): Promise<T>;
|
|
25
|
+
put<T>(path: string, options?: RequestOptions): Promise<T>;
|
|
26
|
+
delete<T>(path: string, options?: RequestOptions): Promise<T>;
|
|
27
|
+
private request;
|
|
28
|
+
private doRequest;
|
|
29
|
+
private buildUrl;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=fetch-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-client.d.ts","sourceRoot":"","sources":["../../src/http/fetch-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAEvE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwB;IACrD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;gBAE5C,OAAO,EAAE,kBAAkB;IAQjC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAI1D,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAI3D,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAI1D,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;YAIrD,OAAO;YAWP,SAAS;IA0CvB,OAAO,CAAC,QAAQ;CAcjB"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { mapHttpError } from './errors.js';
|
|
2
|
+
import { withRetry } from './retry.js';
|
|
3
|
+
import { RequestThrottler } from './throttle.js';
|
|
4
|
+
export class FetchClient {
|
|
5
|
+
baseUrl;
|
|
6
|
+
getAccessToken;
|
|
7
|
+
retryOptions;
|
|
8
|
+
throttler;
|
|
9
|
+
defaultHeaders;
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.baseUrl = options.baseUrl.replace(/\/$/, '');
|
|
12
|
+
this.getAccessToken = options.getAccessToken;
|
|
13
|
+
this.retryOptions = options.retry ?? {};
|
|
14
|
+
this.throttler = new RequestThrottler(options.throttle);
|
|
15
|
+
this.defaultHeaders = options.headers ?? {};
|
|
16
|
+
}
|
|
17
|
+
async get(path, options) {
|
|
18
|
+
return this.request('GET', path, options);
|
|
19
|
+
}
|
|
20
|
+
async post(path, options) {
|
|
21
|
+
return this.request('POST', path, options);
|
|
22
|
+
}
|
|
23
|
+
async put(path, options) {
|
|
24
|
+
return this.request('PUT', path, options);
|
|
25
|
+
}
|
|
26
|
+
async delete(path, options) {
|
|
27
|
+
return this.request('DELETE', path, options);
|
|
28
|
+
}
|
|
29
|
+
async request(method, path, options) {
|
|
30
|
+
return withRetry(() => this.throttler.execute(() => this.doRequest(method, path, options)), this.retryOptions);
|
|
31
|
+
}
|
|
32
|
+
async doRequest(method, path, options) {
|
|
33
|
+
const url = this.buildUrl(path, options?.params);
|
|
34
|
+
const token = await this.getAccessToken();
|
|
35
|
+
const headers = {
|
|
36
|
+
...this.defaultHeaders,
|
|
37
|
+
Authorization: `Bearer ${token}`,
|
|
38
|
+
...options?.headers,
|
|
39
|
+
};
|
|
40
|
+
if (options?.body !== undefined) {
|
|
41
|
+
headers['Content-Type'] = 'application/json';
|
|
42
|
+
}
|
|
43
|
+
const response = await fetch(url, {
|
|
44
|
+
method,
|
|
45
|
+
headers,
|
|
46
|
+
body: options?.body !== undefined ? JSON.stringify(options.body) : undefined,
|
|
47
|
+
signal: options?.signal,
|
|
48
|
+
});
|
|
49
|
+
if (!response.ok) {
|
|
50
|
+
let body;
|
|
51
|
+
try {
|
|
52
|
+
body = await response.json();
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
body = await response.text().catch(() => null);
|
|
56
|
+
}
|
|
57
|
+
throw mapHttpError(response.status, body, response.headers);
|
|
58
|
+
}
|
|
59
|
+
if (response.status === 204) {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
return response.json();
|
|
63
|
+
}
|
|
64
|
+
buildUrl(path, params) {
|
|
65
|
+
const url = new URL(`${this.baseUrl}${path}`);
|
|
66
|
+
if (params) {
|
|
67
|
+
for (const [key, value] of Object.entries(params)) {
|
|
68
|
+
if (value !== undefined) {
|
|
69
|
+
url.searchParams.set(key, String(value));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return url.toString();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=fetch-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-client.js","sourceRoot":"","sources":["../../src/http/fetch-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAqB,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAwB,MAAM,eAAe,CAAC;AAiBvE,MAAM,OAAO,WAAW;IACL,OAAO,CAAS;IAChB,cAAc,CAAwB;IACtC,YAAY,CAAwB;IACpC,SAAS,CAAmB;IAC5B,cAAc,CAAyB;IAExD,YAAY,OAA2B;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,IAAY,EAAE,OAAwB;QACjD,OAAO,IAAI,CAAC,OAAO,CAAI,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,IAAY,EAAE,OAAwB;QAClD,OAAO,IAAI,CAAC,OAAO,CAAI,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,IAAY,EAAE,OAAwB;QACjD,OAAO,IAAI,CAAC,OAAO,CAAI,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,MAAM,CAAI,IAAY,EAAE,OAAwB;QACpD,OAAO,IAAI,CAAC,OAAO,CAAI,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,MAAc,EACd,IAAY,EACZ,OAAwB;QAExB,OAAO,SAAS,CACd,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAI,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,EAC5E,IAAI,CAAC,YAAY,CAClB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,SAAS,CACrB,MAAc,EACd,IAAY,EACZ,OAAwB;QAExB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE1C,MAAM,OAAO,GAA2B;YACtC,GAAG,IAAI,CAAC,cAAc;YACtB,aAAa,EAAE,UAAU,KAAK,EAAE;YAChC,GAAG,OAAO,EAAE,OAAO;SACpB,CAAC;QAEF,IAAI,OAAO,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;QAC/C,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM;YACN,OAAO;YACP,IAAI,EAAE,OAAO,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;YAC5E,MAAM,EAAE,OAAO,EAAE,MAAM;SACxB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,IAAa,CAAC;YAClB,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC/B,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACjD,CAAC;YACD,MAAM,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,SAAc,CAAC;QACxB,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;IACvC,CAAC;IAEO,QAAQ,CACd,IAAY,EACZ,MAA8D;QAE9D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC;QAC9C,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/http/retry.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAqBD,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,GAAE,OAAO,CAAC,YAAY,CAAM,GAClC,OAAO,CAAC,CAAC,CAAC,CAkBZ"}
|