@timesheet/sdk 1.0.3 → 1.0.6

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 (140) hide show
  1. package/CHANGELOG.md +13 -1
  2. package/README.md +74 -1
  3. package/dist/auth/ApiKeyAuth.d.ts +13 -0
  4. package/dist/auth/ApiKeyAuth.d.ts.map +1 -0
  5. package/dist/auth/Authentication.d.ts +8 -0
  6. package/dist/auth/Authentication.d.ts.map +1 -0
  7. package/dist/auth/OAuth21Auth.d.ts +53 -0
  8. package/dist/auth/OAuth21Auth.d.ts.map +1 -0
  9. package/dist/auth/OAuth2Auth.d.ts +22 -0
  10. package/dist/auth/OAuth2Auth.d.ts.map +1 -0
  11. package/dist/auth/OAuthDiscovery.d.ts +30 -0
  12. package/dist/auth/OAuthDiscovery.d.ts.map +1 -0
  13. package/dist/auth/OAuthMetadata.d.ts +53 -0
  14. package/dist/auth/OAuthMetadata.d.ts.map +1 -0
  15. package/dist/auth/index.d.ts +8 -0
  16. package/dist/auth/index.d.ts.map +1 -0
  17. package/dist/auth/pkce.d.ts +11 -0
  18. package/dist/auth/pkce.d.ts.map +1 -0
  19. package/dist/config/ClientConfig.d.ts +10 -0
  20. package/dist/config/ClientConfig.d.ts.map +1 -0
  21. package/dist/config/RetryConfig.d.ts +17 -0
  22. package/dist/config/RetryConfig.d.ts.map +1 -0
  23. package/dist/config/index.d.ts +3 -0
  24. package/dist/config/index.d.ts.map +1 -0
  25. package/dist/exceptions/TimesheetApiError.d.ts +7 -0
  26. package/dist/exceptions/TimesheetApiError.d.ts.map +1 -0
  27. package/dist/exceptions/TimesheetAuthError.d.ts +5 -0
  28. package/dist/exceptions/TimesheetAuthError.d.ts.map +1 -0
  29. package/dist/exceptions/TimesheetRateLimitError.d.ts +7 -0
  30. package/dist/exceptions/TimesheetRateLimitError.d.ts.map +1 -0
  31. package/dist/exceptions/index.d.ts +4 -0
  32. package/dist/exceptions/index.d.ts.map +1 -0
  33. package/dist/http/ApiClient.d.ts +18 -0
  34. package/dist/http/ApiClient.d.ts.map +1 -0
  35. package/dist/http/index.d.ts +2 -0
  36. package/dist/http/index.d.ts.map +1 -0
  37. package/dist/index.d.ts +15 -1814
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +3 -2
  40. package/dist/index.js.map +7 -1
  41. package/dist/index.mjs +3 -2
  42. package/dist/index.mjs.map +7 -1
  43. package/dist/models/Automation.d.ts +51 -0
  44. package/dist/models/Automation.d.ts.map +1 -0
  45. package/dist/models/Document.d.ts +262 -0
  46. package/dist/models/Document.d.ts.map +1 -0
  47. package/dist/models/Event.d.ts +22 -0
  48. package/dist/models/Event.d.ts.map +1 -0
  49. package/dist/models/Expense.d.ts +62 -0
  50. package/dist/models/Expense.d.ts.map +1 -0
  51. package/dist/models/Note.d.ts +49 -0
  52. package/dist/models/Note.d.ts.map +1 -0
  53. package/dist/models/Organization.d.ts +31 -0
  54. package/dist/models/Organization.d.ts.map +1 -0
  55. package/dist/models/Page.d.ts +17 -0
  56. package/dist/models/Page.d.ts.map +1 -0
  57. package/dist/models/Pause.d.ts +35 -0
  58. package/dist/models/Pause.d.ts.map +1 -0
  59. package/dist/models/Profile.d.ts +42 -0
  60. package/dist/models/Profile.d.ts.map +1 -0
  61. package/dist/models/Project.d.ts +102 -0
  62. package/dist/models/Project.d.ts.map +1 -0
  63. package/dist/models/Rate.d.ts +43 -0
  64. package/dist/models/Rate.d.ts.map +1 -0
  65. package/dist/models/Reports.d.ts +326 -0
  66. package/dist/models/Reports.d.ts.map +1 -0
  67. package/dist/models/Settings.d.ts +31 -0
  68. package/dist/models/Settings.d.ts.map +1 -0
  69. package/dist/models/Tag.d.ts +33 -0
  70. package/dist/models/Tag.d.ts.map +1 -0
  71. package/dist/models/Task.d.ts +150 -0
  72. package/dist/models/Task.d.ts.map +1 -0
  73. package/dist/models/Team.d.ts +72 -0
  74. package/dist/models/Team.d.ts.map +1 -0
  75. package/dist/models/Timer.d.ts +37 -0
  76. package/dist/models/Timer.d.ts.map +1 -0
  77. package/dist/models/Todo.d.ts +57 -0
  78. package/dist/models/Todo.d.ts.map +1 -0
  79. package/dist/models/Webhook.d.ts +46 -0
  80. package/dist/models/Webhook.d.ts.map +1 -0
  81. package/dist/models/common.d.ts +38 -0
  82. package/dist/models/common.d.ts.map +1 -0
  83. package/dist/models/index.d.ts +21 -0
  84. package/dist/models/index.d.ts.map +1 -0
  85. package/dist/resources/AutomationResource.d.ts +14 -0
  86. package/dist/resources/AutomationResource.d.ts.map +1 -0
  87. package/dist/resources/DocumentResource.d.ts +14 -0
  88. package/dist/resources/DocumentResource.d.ts.map +1 -0
  89. package/dist/resources/EventResource.d.ts +18 -0
  90. package/dist/resources/EventResource.d.ts.map +1 -0
  91. package/dist/resources/ExpenseResource.d.ts +20 -0
  92. package/dist/resources/ExpenseResource.d.ts.map +1 -0
  93. package/dist/resources/NoteResource.d.ts +19 -0
  94. package/dist/resources/NoteResource.d.ts.map +1 -0
  95. package/dist/resources/OrganizationResource.d.ts +14 -0
  96. package/dist/resources/OrganizationResource.d.ts.map +1 -0
  97. package/dist/resources/PauseResource.d.ts +14 -0
  98. package/dist/resources/PauseResource.d.ts.map +1 -0
  99. package/dist/resources/ProfileResource.d.ts +9 -0
  100. package/dist/resources/ProfileResource.d.ts.map +1 -0
  101. package/dist/resources/ProjectResource.d.ts +14 -0
  102. package/dist/resources/ProjectResource.d.ts.map +1 -0
  103. package/dist/resources/RateResource.d.ts +14 -0
  104. package/dist/resources/RateResource.d.ts.map +1 -0
  105. package/dist/resources/Resource.d.ts +13 -0
  106. package/dist/resources/Resource.d.ts.map +1 -0
  107. package/dist/resources/SettingsResource.d.ts +9 -0
  108. package/dist/resources/SettingsResource.d.ts.map +1 -0
  109. package/dist/resources/TagResource.d.ts +14 -0
  110. package/dist/resources/TagResource.d.ts.map +1 -0
  111. package/dist/resources/TaskResource.d.ts +14 -0
  112. package/dist/resources/TaskResource.d.ts.map +1 -0
  113. package/dist/resources/TeamResource.d.ts +17 -0
  114. package/dist/resources/TeamResource.d.ts.map +1 -0
  115. package/dist/resources/TimerResource.d.ts +13 -0
  116. package/dist/resources/TimerResource.d.ts.map +1 -0
  117. package/dist/resources/TodoResource.d.ts +14 -0
  118. package/dist/resources/TodoResource.d.ts.map +1 -0
  119. package/dist/resources/WebhookResource.d.ts +14 -0
  120. package/dist/resources/WebhookResource.d.ts.map +1 -0
  121. package/dist/resources/index.d.ts +21 -0
  122. package/dist/resources/index.d.ts.map +1 -0
  123. package/dist/resources/reports/DocumentReportResource.d.ts +10 -0
  124. package/dist/resources/reports/DocumentReportResource.d.ts.map +1 -0
  125. package/dist/resources/reports/ExpenseReportResource.d.ts +9 -0
  126. package/dist/resources/reports/ExpenseReportResource.d.ts.map +1 -0
  127. package/dist/resources/reports/ExportResource.d.ts +24 -0
  128. package/dist/resources/reports/ExportResource.d.ts.map +1 -0
  129. package/dist/resources/reports/NoteReportResource.d.ts +9 -0
  130. package/dist/resources/reports/NoteReportResource.d.ts.map +1 -0
  131. package/dist/resources/reports/ReportsClient.d.ts +15 -0
  132. package/dist/resources/reports/ReportsClient.d.ts.map +1 -0
  133. package/dist/resources/reports/TaskReportResource.d.ts +9 -0
  134. package/dist/resources/reports/TaskReportResource.d.ts.map +1 -0
  135. package/dist/resources/reports/index.d.ts +7 -0
  136. package/dist/resources/reports/index.d.ts.map +1 -0
  137. package/dist/utils/date.d.ts +9 -0
  138. package/dist/utils/date.d.ts.map +1 -0
  139. package/package.json +7 -18
  140. package/dist/index.d.mts +0 -1850
package/CHANGELOG.md CHANGED
@@ -6,6 +6,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
8
 
9
+ ## [1.0.4] - 2026-01-04
10
+
11
+ ### Added
12
+ - OAuth 2.1 Discovery support (RFC 8414):
13
+ - `OAuthDiscovery` class for endpoint discovery from `/.well-known/oauth-authorization-server`
14
+ - Support for Protected Resource Metadata (RFC 9728)
15
+ - Support for OpenID Connect Discovery (`/.well-known/openid-configuration`)
16
+ - Discovery result caching with configurable TTL
17
+ - `discoverOAuth()` convenience function for quick discovery
18
+ - Custom `authorizationEndpoint` and `tokenEndpoint` options in OAuth21Auth methods
19
+
9
20
  ## [1.0.3] - 2026-01-04
10
21
 
11
22
  ### Added
@@ -89,7 +100,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
89
100
  - Removed complex mocking in favor of simple validation tests
90
101
  - Updated GitHub Actions to use non-deprecated action versions
91
102
 
92
- [Unreleased]: https://github.com/timesheetIO/timesheet-typescript/compare/v1.0.3...HEAD
103
+ [Unreleased]: https://github.com/timesheetIO/timesheet-typescript/compare/v1.0.4...HEAD
104
+ [1.0.4]: https://github.com/timesheetIO/timesheet-typescript/compare/v1.0.3...v1.0.4
93
105
  [1.0.3]: https://github.com/timesheetIO/timesheet-typescript/compare/v1.0.2...v1.0.3
94
106
  [1.0.2]: https://github.com/timesheetIO/timesheet-typescript/compare/v1.0.1...v1.0.2
95
107
  [1.0.1]: https://github.com/timesheetIO/timesheet-typescript/compare/v1.0.0...v1.0.1
package/README.md CHANGED
@@ -12,7 +12,7 @@ The official TypeScript SDK for the [Timesheet API](https://timesheet.io), provi
12
12
 
13
13
  - ✅ **Type-Safe** - Full TypeScript support with comprehensive types
14
14
  - ✅ **Modern Architecture** - Promise-based with async/await support
15
- - ✅ **Authentication** - Built-in API Key, OAuth2, and OAuth 2.1 (PKCE) support
15
+ - ✅ **Authentication** - Built-in API Key, OAuth2, and OAuth 2.1 (PKCE) with automatic discovery (RFC 8414)
16
16
  - ✅ **Error Handling** - Typed exceptions for better error management
17
17
  - ✅ **Pagination** - Automatic pagination with async iterators
18
18
  - ✅ **Retry Logic** - Configurable retry with exponential backoff
@@ -127,6 +127,79 @@ const client = new TimesheetClient({
127
127
  });
128
128
  ```
129
129
 
130
+ #### OAuth 2.1 with Endpoint Discovery (RFC 8414)
131
+
132
+ The SDK supports automatic endpoint discovery from `/.well-known/oauth-authorization-server`, allowing you to dynamically configure OAuth endpoints:
133
+
134
+ ```typescript
135
+ import { OAuth21Auth, OAuthDiscovery, generatePkceCodePair } from '@timesheet/sdk';
136
+
137
+ // Step 1: Discover OAuth endpoints
138
+ const discovery = new OAuthDiscovery();
139
+ const metadata = await discovery.discover('https://api.timesheet.io');
140
+
141
+ console.log('Authorization endpoint:', metadata.authorizationServer.authorization_endpoint);
142
+ console.log('Token endpoint:', metadata.authorizationServer.token_endpoint);
143
+ console.log('Supported scopes:', metadata.authorizationServer.scopes_supported);
144
+
145
+ // Step 2: Generate PKCE and build authorization URL using discovered endpoints
146
+ const pkce = generatePkceCodePair();
147
+
148
+ const authUrl = OAuth21Auth.buildAuthorizationUrl({
149
+ clientId: 'your-client-id',
150
+ redirectUri: 'https://your-app.com/callback',
151
+ codeChallenge: pkce.codeChallenge,
152
+ codeChallengeMethod: pkce.codeChallengeMethod,
153
+ scope: 'read write',
154
+ state: 'random-csrf-state',
155
+ authorizationEndpoint: metadata.authorizationServer.authorization_endpoint,
156
+ });
157
+
158
+ // Store pkce.codeVerifier and token endpoint securely, then redirect user
159
+ sessionStorage.setItem('pkce_verifier', pkce.codeVerifier);
160
+ sessionStorage.setItem('token_endpoint', metadata.authorizationServer.token_endpoint);
161
+
162
+ // Step 3: After callback, exchange code using discovered token endpoint
163
+ const auth = await OAuth21Auth.fromAuthorizationCode({
164
+ clientId: 'your-client-id',
165
+ authorizationCode: codeFromCallback,
166
+ redirectUri: 'https://your-app.com/callback',
167
+ codeVerifier: sessionStorage.getItem('pkce_verifier'),
168
+ tokenEndpoint: sessionStorage.getItem('token_endpoint'),
169
+ });
170
+
171
+ const client = new TimesheetClient({
172
+ authentication: auth
173
+ });
174
+ ```
175
+
176
+ The `OAuthDiscovery` class provides caching and additional discovery options:
177
+
178
+ ```typescript
179
+ import { OAuthDiscovery, discoverOAuth } from '@timesheet/sdk';
180
+
181
+ // Using convenience function (uses shared cached instance)
182
+ const result = await discoverOAuth('https://api.timesheet.io');
183
+
184
+ // Using class with custom options
185
+ const discovery = new OAuthDiscovery({
186
+ cacheTtl: 3600000, // Cache for 1 hour (default)
187
+ timeout: 10000, // Request timeout in ms
188
+ fetchOpenIdConfig: true, // Also fetch OpenID Connect config
189
+ fetchProtectedResource: true, // Also fetch protected resource metadata (RFC 9728)
190
+ });
191
+
192
+ const metadata = await discovery.discover('https://api.timesheet.io');
193
+
194
+ // Check cache status
195
+ if (discovery.isCached('https://api.timesheet.io')) {
196
+ console.log('Using cached metadata');
197
+ }
198
+
199
+ // Clear cache when needed
200
+ discovery.clearCache();
201
+ ```
202
+
130
203
  #### Using OAuth 2.1 with existing tokens
131
204
 
132
205
  ```typescript
@@ -0,0 +1,13 @@
1
+ import type { AxiosRequestConfig } from 'axios';
2
+ import type { Authentication } from './Authentication';
3
+ export declare class ApiKeyAuth implements Authentication {
4
+ private readonly apiKey;
5
+ constructor(apiKey: string);
6
+ private isValidFormat;
7
+ applyAuth(config: AxiosRequestConfig): void;
8
+ needsRefresh(): boolean;
9
+ refresh(): Promise<void>;
10
+ getAuthHeaders(): Promise<Record<string, string>>;
11
+ isValid(): boolean;
12
+ }
13
+ //# sourceMappingURL=ApiKeyAuth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiKeyAuth.d.ts","sourceRoot":"","sources":["../../src/auth/ApiKeyAuth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAQvD,qBAAa,UAAW,YAAW,cAAc;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAuB3C,OAAO,CAAC,aAAa;IAMrB,SAAS,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAO3C,YAAY,IAAI,OAAO;IAMjB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAKxB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAMvD,OAAO,IAAI,OAAO;CAOnB"}
@@ -0,0 +1,8 @@
1
+ import type { AxiosRequestConfig } from 'axios';
2
+ export interface Authentication {
3
+ applyAuth(config: AxiosRequestConfig): void;
4
+ needsRefresh(): boolean;
5
+ refresh(): Promise<void>;
6
+ getAuthHeaders(): Promise<Record<string, string>>;
7
+ }
8
+ //# sourceMappingURL=Authentication.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Authentication.d.ts","sourceRoot":"","sources":["../../src/auth/Authentication.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAKhD,MAAM,WAAW,cAAc;IAM7B,SAAS,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAO5C,YAAY,IAAI,OAAO,CAAC;IAOxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAKzB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACnD"}
@@ -0,0 +1,53 @@
1
+ import type { AxiosRequestConfig } from 'axios';
2
+ import type { Authentication } from './Authentication';
3
+ import { type CodeChallengeMethod, type PkceCodePair } from './pkce';
4
+ export interface AuthorizationUrlOptions {
5
+ clientId: string;
6
+ redirectUri: string;
7
+ codeChallenge: string;
8
+ codeChallengeMethod?: CodeChallengeMethod;
9
+ state?: string;
10
+ scope?: string;
11
+ resource?: string;
12
+ authorizationEndpoint?: string;
13
+ }
14
+ export interface TokenExchangeOptions {
15
+ clientId: string;
16
+ clientSecret?: string;
17
+ authorizationCode: string;
18
+ redirectUri: string;
19
+ codeVerifier: string;
20
+ resource?: string;
21
+ tokenEndpoint?: string;
22
+ }
23
+ export interface OAuth21RefreshOptions {
24
+ clientId: string;
25
+ clientSecret?: string;
26
+ refreshToken: string;
27
+ resource?: string;
28
+ tokenEndpoint?: string;
29
+ }
30
+ export declare class OAuth21Auth implements Authentication {
31
+ private static readonly DEFAULT_TOKEN_ENDPOINT;
32
+ private static readonly DEFAULT_AUTH_ENDPOINT;
33
+ private accessToken;
34
+ private refreshToken?;
35
+ private readonly clientId?;
36
+ private readonly clientSecret?;
37
+ private readonly resource?;
38
+ private readonly tokenEndpoint;
39
+ private tokenExpiry?;
40
+ private refreshPromise?;
41
+ constructor(accessToken: string);
42
+ constructor(options: OAuth21RefreshOptions);
43
+ applyAuth(config: AxiosRequestConfig): void;
44
+ needsRefresh(): boolean;
45
+ refresh(): Promise<void>;
46
+ private performRefresh;
47
+ getAuthHeaders(): Promise<Record<string, string>>;
48
+ static fromAuthorizationCode(options: TokenExchangeOptions): Promise<OAuth21Auth>;
49
+ static buildAuthorizationUrl(options: AuthorizationUrlOptions): string;
50
+ static generatePkce(method?: CodeChallengeMethod): PkceCodePair;
51
+ private parseTokenExpiry;
52
+ }
53
+ //# sourceMappingURL=OAuth21Auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OAuth21Auth.d.ts","sourceRoot":"","sources":["../../src/auth/OAuth21Auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAGhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,YAAY,EAClB,MAAM,QAAQ,CAAC;AAKhB,MAAM,WAAW,uBAAuB;IAEtC,QAAQ,EAAE,MAAM,CAAC;IAEjB,WAAW,EAAE,MAAM,CAAC;IAEpB,aAAa,EAAE,MAAM,CAAC;IAEtB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAE1C,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAKD,MAAM,WAAW,oBAAoB;IAEnC,QAAQ,EAAE,MAAM,CAAC;IAEjB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,iBAAiB,EAAE,MAAM,CAAC;IAE1B,WAAW,EAAE,MAAM,CAAC;IAEpB,YAAY,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAKD,MAAM,WAAW,qBAAqB;IAEpC,QAAQ,EAAE,MAAM,CAAC;IAEjB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,YAAY,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAsDD,qBAAa,WAAY,YAAW,cAAc;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAA2C;IACzF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAA0C;IAEvF,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,WAAW,CAAC,CAAO;IAC3B,OAAO,CAAC,cAAc,CAAC,CAAgB;gBAQ3B,WAAW,EAAE,MAAM;gBAOnB,OAAO,EAAE,qBAAqB;IAoB1C,SAAS,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAO3C,YAAY,IAAI,OAAO;IAcjB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAkBhB,cAAc;IAqCtB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;WAkB1C,qBAAqB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,CAAC;IAuEvF,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM;IA6DtE,MAAM,CAAC,YAAY,CAAC,MAAM,GAAE,mBAA4B,GAAG,YAAY;IAIvE,OAAO,CAAC,gBAAgB;CAkBzB"}
@@ -0,0 +1,22 @@
1
+ import type { AxiosRequestConfig } from 'axios';
2
+ import type { Authentication } from './Authentication';
3
+ export declare class OAuth2Auth implements Authentication {
4
+ private static readonly TOKEN_ENDPOINT;
5
+ private accessToken;
6
+ private refreshToken?;
7
+ private readonly clientId?;
8
+ private readonly clientSecret?;
9
+ private tokenExpiry?;
10
+ private refreshPromise?;
11
+ constructor(accessToken: string);
12
+ constructor(clientId: string, clientSecret: string, refreshToken: string);
13
+ applyAuth(config: AxiosRequestConfig): void;
14
+ needsRefresh(): boolean;
15
+ refresh(): Promise<void>;
16
+ private performRefresh;
17
+ getAuthHeaders(): Promise<Record<string, string>>;
18
+ static fromAuthorizationCode(clientId: string, clientSecret: string, authorizationCode: string, redirectUri: string): Promise<OAuth2Auth>;
19
+ static buildAuthorizationUrl(clientId: string, redirectUri: string, state?: string): string;
20
+ private parseTokenExpiry;
21
+ }
22
+ //# sourceMappingURL=OAuth2Auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OAuth2Auth.d.ts","sourceRoot":"","sources":["../../src/auth/OAuth2Auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAGhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOvD,qBAAa,UAAW,YAAW,cAAc;IAC/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAA2C;IAEjF,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAS;IACvC,OAAO,CAAC,WAAW,CAAC,CAAO;IAC3B,OAAO,CAAC,cAAc,CAAC,CAAgB;gBAO3B,WAAW,EAAE,MAAM;gBASnB,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;IAiBxE,SAAS,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAO3C,YAAY,IAAI,OAAO;IAcjB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAkBhB,cAAc;IAqCtB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;WAoB1C,qBAAqB,CAChC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,MAAM,EACzB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,CAAC;IA+CtB,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAc3F,OAAO,CAAC,gBAAgB;CAkBzB"}
@@ -0,0 +1,30 @@
1
+ import type { AuthorizationServerMetadata, OpenIdConfiguration, ProtectedResourceMetadata, OAuthDiscoveryResult } from './OAuthMetadata';
2
+ export interface OAuthDiscoveryOptions {
3
+ cacheTtl?: number;
4
+ timeout?: number;
5
+ fetchOpenIdConfig?: boolean;
6
+ fetchProtectedResource?: boolean;
7
+ }
8
+ export declare class OAuthDiscovery {
9
+ private static readonly DEFAULT_CACHE_TTL;
10
+ private static readonly DEFAULT_TIMEOUT;
11
+ private readonly cache;
12
+ private readonly options;
13
+ constructor(options?: OAuthDiscoveryOptions);
14
+ discover(issuerUrl: string): Promise<OAuthDiscoveryResult>;
15
+ fetchAuthorizationServerMetadata(issuerUrl: string): Promise<AuthorizationServerMetadata>;
16
+ fetchOpenIdConfiguration(issuerUrl: string): Promise<OpenIdConfiguration>;
17
+ fetchProtectedResourceMetadata(resourceUrl: string): Promise<ProtectedResourceMetadata>;
18
+ clearCache(): void;
19
+ clearCacheForIssuer(issuerUrl: string): void;
20
+ isCached(issuerUrl: string): boolean;
21
+ private normalizeIssuerUrl;
22
+ private getCached;
23
+ private setCache;
24
+ private validateAuthorizationServerMetadata;
25
+ private validateOpenIdConfiguration;
26
+ private validateProtectedResourceMetadata;
27
+ }
28
+ export declare function getDefaultDiscovery(): OAuthDiscovery;
29
+ export declare function discoverOAuth(issuerUrl: string, options?: OAuthDiscoveryOptions): Promise<OAuthDiscoveryResult>;
30
+ //# sourceMappingURL=OAuthDiscovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OAuthDiscovery.d.ts","sourceRoot":"","sources":["../../src/auth/OAuthDiscovery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,2BAA2B,EAC3B,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAKzB,MAAM,WAAW,qBAAqB;IAEpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAG5B,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AA+BD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAkB;IAC3D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAS;IAEhD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsC;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;gBAE9C,OAAO,GAAE,qBAA0B;IA0BzC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAgD1D,gCAAgC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAyBzF,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAyBzE,8BAA8B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAsB7F,UAAU,IAAI,IAAI;IAOlB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAO5C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAKpC,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,mCAAmC;IAmB3C,OAAO,CAAC,2BAA2B;IAenC,OAAO,CAAC,iCAAiC;CAQ1C;AAUD,wBAAgB,mBAAmB,IAAI,cAAc,CAKpD;AAiBD,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,oBAAoB,CAAC,CAG/B"}
@@ -0,0 +1,53 @@
1
+ export interface AuthorizationServerMetadata {
2
+ issuer: string;
3
+ authorization_endpoint: string;
4
+ token_endpoint: string;
5
+ registration_endpoint?: string;
6
+ scopes_supported?: string[];
7
+ response_types_supported: string[];
8
+ grant_types_supported?: string[];
9
+ token_endpoint_auth_methods_supported?: string[];
10
+ code_challenge_methods_supported?: string[];
11
+ revocation_endpoint?: string;
12
+ revocation_endpoint_auth_methods_supported?: string[];
13
+ introspection_endpoint?: string;
14
+ introspection_endpoint_auth_methods_supported?: string[];
15
+ service_documentation?: string;
16
+ }
17
+ export interface ProtectedResourceMetadata {
18
+ resource: string;
19
+ authorization_servers: string[];
20
+ scopes_supported?: string[];
21
+ bearer_methods_supported?: string[];
22
+ resource_documentation?: string;
23
+ resource_signing_alg_values_supported?: string[];
24
+ }
25
+ export interface OpenIdConfiguration {
26
+ issuer: string;
27
+ authorization_endpoint: string;
28
+ token_endpoint: string;
29
+ userinfo_endpoint?: string;
30
+ jwks_uri: string;
31
+ registration_endpoint?: string;
32
+ scopes_supported?: string[];
33
+ response_types_supported: string[];
34
+ response_modes_supported?: string[];
35
+ grant_types_supported?: string[];
36
+ token_endpoint_auth_methods_supported?: string[];
37
+ token_endpoint_auth_signing_alg_values_supported?: string[];
38
+ service_documentation?: string;
39
+ ui_locales_supported?: string[];
40
+ op_policy_uri?: string;
41
+ op_tos_uri?: string;
42
+ revocation_endpoint?: string;
43
+ introspection_endpoint?: string;
44
+ code_challenge_methods_supported?: string[];
45
+ }
46
+ export interface OAuthDiscoveryResult {
47
+ issuer: string;
48
+ authorizationServer: AuthorizationServerMetadata;
49
+ protectedResource?: ProtectedResourceMetadata;
50
+ openIdConfiguration?: OpenIdConfiguration;
51
+ fetchedAt: Date;
52
+ }
53
+ //# sourceMappingURL=OAuthMetadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OAuthMetadata.d.ts","sourceRoot":"","sources":["../../src/auth/OAuthMetadata.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,2BAA2B;IAE1C,MAAM,EAAE,MAAM,CAAC;IAGf,sBAAsB,EAAE,MAAM,CAAC;IAG/B,cAAc,EAAE,MAAM,CAAC;IAGvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAG/B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAG5B,wBAAwB,EAAE,MAAM,EAAE,CAAC;IAGnC,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IAGjC,qCAAqC,CAAC,EAAE,MAAM,EAAE,CAAC;IAGjD,gCAAgC,CAAC,EAAE,MAAM,EAAE,CAAC;IAG5C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAG7B,0CAA0C,CAAC,EAAE,MAAM,EAAE,CAAC;IAGtD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAGhC,6CAA6C,CAAC,EAAE,MAAM,EAAE,CAAC;IAGzD,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAMD,MAAM,WAAW,yBAAyB;IAExC,QAAQ,EAAE,MAAM,CAAC;IAGjB,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAGhC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAG5B,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;IAGpC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAGhC,qCAAqC,CAAC,EAAE,MAAM,EAAE,CAAC;CAClD;AAMD,MAAM,WAAW,mBAAmB;IAElC,MAAM,EAAE,MAAM,CAAC;IAGf,sBAAsB,EAAE,MAAM,CAAC;IAG/B,cAAc,EAAE,MAAM,CAAC;IAGvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAG3B,QAAQ,EAAE,MAAM,CAAC;IAGjB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAG/B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAG5B,wBAAwB,EAAE,MAAM,EAAE,CAAC;IAGnC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;IAGpC,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IAGjC,qCAAqC,CAAC,EAAE,MAAM,EAAE,CAAC;IAGjD,gDAAgD,CAAC,EAAE,MAAM,EAAE,CAAC;IAG5D,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAG/B,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAGhC,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAG7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAGhC,gCAAgC,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7C;AAKD,MAAM,WAAW,oBAAoB;IAEnC,MAAM,EAAE,MAAM,CAAC;IAGf,mBAAmB,EAAE,2BAA2B,CAAC;IAGjD,iBAAiB,CAAC,EAAE,yBAAyB,CAAC;IAG9C,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAG1C,SAAS,EAAE,IAAI,CAAC;CACjB"}
@@ -0,0 +1,8 @@
1
+ export * from './Authentication';
2
+ export * from './ApiKeyAuth';
3
+ export * from './OAuth2Auth';
4
+ export * from './OAuth21Auth';
5
+ export * from './pkce';
6
+ export * from './OAuthMetadata';
7
+ export * from './OAuthDiscovery';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,11 @@
1
+ export type CodeChallengeMethod = 'S256' | 'plain';
2
+ export interface PkceCodePair {
3
+ codeVerifier: string;
4
+ codeChallenge: string;
5
+ codeChallengeMethod: CodeChallengeMethod;
6
+ }
7
+ export declare function generateCodeVerifier(length?: number): string;
8
+ export declare function generateCodeChallenge(codeVerifier: string, method?: CodeChallengeMethod): string;
9
+ export declare function generatePkceCodePair(method?: CodeChallengeMethod, verifierLength?: number): PkceCodePair;
10
+ export declare function isValidCodeVerifier(codeVerifier: string): boolean;
11
+ //# sourceMappingURL=pkce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pkce.d.ts","sourceRoot":"","sources":["../../src/auth/pkce.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,OAAO,CAAC;AAKnD,MAAM,WAAW,YAAY;IAE3B,YAAY,EAAE,MAAM,CAAC;IAErB,aAAa,EAAE,MAAM,CAAC;IAEtB,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C;AAWD,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,MAAW,GAAG,MAAM,CAQhE;AAeD,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EACpB,MAAM,GAAE,mBAA4B,GACnC,MAAM,CAQR;AAgCD,wBAAgB,oBAAoB,CAClC,MAAM,GAAE,mBAA4B,EACpC,cAAc,GAAE,MAAW,GAC1B,YAAY,CASd;AAQD,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAQjE"}
@@ -0,0 +1,10 @@
1
+ import type { AxiosInstance } from 'axios';
2
+ import type { Authentication } from '../auth/Authentication';
3
+ import type { RetryConfig } from './RetryConfig';
4
+ export interface ClientConfig {
5
+ baseUrl: string;
6
+ authentication: Authentication;
7
+ retryConfig: RetryConfig;
8
+ httpClient?: AxiosInstance;
9
+ }
10
+ //# sourceMappingURL=ClientConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClientConfig.d.ts","sourceRoot":"","sources":["../../src/config/ClientConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAKjD,MAAM,WAAW,YAAY;IAI3B,OAAO,EAAE,MAAM,CAAC;IAKhB,cAAc,EAAE,cAAc,CAAC;IAK/B,WAAW,EAAE,WAAW,CAAC;IAKzB,UAAU,CAAC,EAAE,aAAa,CAAC;CAC5B"}
@@ -0,0 +1,17 @@
1
+ export declare class RetryConfig {
2
+ readonly maxRetries: number;
3
+ readonly initialDelay: number;
4
+ readonly maxDelay: number;
5
+ readonly backoffMultiplier: number;
6
+ readonly retryableStatusCodes: number[];
7
+ constructor(options?: Partial<RetryConfigOptions>);
8
+ static default(): RetryConfig;
9
+ }
10
+ export interface RetryConfigOptions {
11
+ maxRetries: number;
12
+ initialDelay: number;
13
+ maxDelay: number;
14
+ backoffMultiplier: number;
15
+ retryableStatusCodes: number[];
16
+ }
17
+ //# sourceMappingURL=RetryConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RetryConfig.d.ts","sourceRoot":"","sources":["../../src/config/RetryConfig.ts"],"names":[],"mappings":"AAGA,qBAAa,WAAW;IACtB,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,iBAAiB,EAAE,MAAM,CAAC;IAC1C,SAAgB,oBAAoB,EAAE,MAAM,EAAE,CAAC;gBAEnC,OAAO,GAAE,OAAO,CAAC,kBAAkB,CAAM;IAWrD,MAAM,CAAC,OAAO,IAAI,WAAW;CAG9B;AAKD,MAAM,WAAW,kBAAkB;IAKjC,UAAU,EAAE,MAAM,CAAC;IAMnB,YAAY,EAAE,MAAM,CAAC;IAMrB,QAAQ,EAAE,MAAM,CAAC;IAMjB,iBAAiB,EAAE,MAAM,CAAC;IAM1B,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC"}
@@ -0,0 +1,3 @@
1
+ export * from './ClientConfig';
2
+ export * from './RetryConfig';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare class TimesheetApiError extends Error {
2
+ readonly statusCode?: number;
3
+ readonly responseBody?: string;
4
+ readonly errorCode?: string;
5
+ constructor(message: string, statusCode?: number, responseBody?: string, errorCode?: string);
6
+ }
7
+ //# sourceMappingURL=TimesheetApiError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimesheetApiError.d.ts","sourceRoot":"","sources":["../../src/exceptions/TimesheetApiError.ts"],"names":[],"mappings":"AAGA,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,SAAgB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpC,SAAgB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtC,SAAgB,SAAS,CAAC,EAAE,MAAM,CAAC;gBAUvB,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAmB5F"}
@@ -0,0 +1,5 @@
1
+ import { TimesheetApiError } from './TimesheetApiError';
2
+ export declare class TimesheetAuthError extends TimesheetApiError {
3
+ constructor(message: string, statusCode?: number, responseBody?: string);
4
+ }
5
+ //# sourceMappingURL=TimesheetAuthError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimesheetAuthError.d.ts","sourceRoot":"","sources":["../../src/exceptions/TimesheetAuthError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAKxD,qBAAa,kBAAmB,SAAQ,iBAAiB;gBAQ3C,OAAO,EAAE,MAAM,EAAE,UAAU,GAAE,MAAY,EAAE,YAAY,CAAC,EAAE,MAAM;CAI7E"}
@@ -0,0 +1,7 @@
1
+ import { TimesheetApiError } from './TimesheetApiError';
2
+ export declare class TimesheetRateLimitError extends TimesheetApiError {
3
+ readonly retryAfter?: string;
4
+ constructor(message: string, retryAfter?: string);
5
+ getRetryAfterDate(): Date | null;
6
+ }
7
+ //# sourceMappingURL=TimesheetRateLimitError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimesheetRateLimitError.d.ts","sourceRoot":"","sources":["../../src/exceptions/TimesheetRateLimitError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAKxD,qBAAa,uBAAwB,SAAQ,iBAAiB;IAC5D,SAAgB,UAAU,CAAC,EAAE,MAAM,CAAC;gBAQxB,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAWhD,iBAAiB,IAAI,IAAI,GAAG,IAAI;CAmBjC"}
@@ -0,0 +1,4 @@
1
+ export * from './TimesheetApiError';
2
+ export * from './TimesheetAuthError';
3
+ export * from './TimesheetRateLimitError';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/exceptions/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1,18 @@
1
+ /// <reference types="node" />
2
+ import type { AxiosRequestConfig } from 'axios';
3
+ import type { ClientConfig } from '../config';
4
+ export declare class ApiClient {
5
+ private readonly config;
6
+ private readonly httpClient;
7
+ constructor(config: ClientConfig);
8
+ request<T>(config: AxiosRequestConfig): Promise<T>;
9
+ get<T, P = Record<string, unknown>>(path: string, params?: P): Promise<T>;
10
+ post<T, P = Record<string, unknown>>(path: string, data?: unknown, params?: P): Promise<T>;
11
+ put<T, P = Record<string, unknown>>(path: string, data?: unknown, params?: P): Promise<T>;
12
+ delete<T, P = Record<string, unknown>>(path: string, params?: P): Promise<T>;
13
+ postMultipart<T>(path: string, formData: FormData): Promise<T>;
14
+ private sleep;
15
+ getBaseUrl(): string;
16
+ getAuthHeaders(): Promise<Record<string, string> | undefined>;
17
+ }
18
+ //# sourceMappingURL=ApiClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiClient.d.ts","sourceRoot":"","sources":["../../src/http/ApiClient.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAiB,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAE/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAW9C,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;gBAE/B,MAAM,EAAE,YAAY;IAiC1B,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAoElD,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAWzE,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAY1F,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAYzF,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAa5E,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;IAcpE,OAAO,CAAC,KAAK;IAOb,UAAU,IAAI,MAAM;IAQd,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CAMpE"}
@@ -0,0 +1,2 @@
1
+ export * from './ApiClient';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}