@sdkwork/sdk-common 1.0.0 → 1.0.2

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
@@ -22,8 +22,7 @@ Choose one mode per client instance.
22
22
  ## Quick Start
23
23
 
24
24
  ```typescript
25
- import { createBaseHttpClient } from '@sdkwork/sdk-common/http';
26
- import { createTokenManager } from '@sdkwork/sdk-common';
25
+ import { createBaseHttpClient, createTokenManager } from '@sdkwork/sdk-common';
27
26
 
28
27
  const tokenManager = createTokenManager({
29
28
  accessToken: 'your-access-token',
@@ -42,7 +41,7 @@ console.log(profile.name);
42
41
  API key mode example:
43
42
 
44
43
  ```typescript
45
- import { createBaseHttpClient } from '@sdkwork/sdk-common/http';
44
+ import { createBaseHttpClient } from '@sdkwork/sdk-common';
46
45
 
47
46
  const client = createBaseHttpClient({
48
47
  baseUrl: 'https://api.example.com',
@@ -86,4 +85,4 @@ This SDK includes cross-platform publish scripts in `bin/`:
86
85
 
87
86
  ## License
88
87
 
89
- MIT
88
+ MIT
@@ -1,12 +1,9 @@
1
1
  "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
6
3
  class DefaultAuthTokenManager {
4
+ tokens = {};
5
+ events;
7
6
  constructor(initialTokens, events) {
8
- __publicField(this, "tokens", {});
9
- __publicField(this, "events");
10
7
  if (initialTokens) {
11
8
  this.tokens = { ...initialTokens };
12
9
  if (initialTokens.expiresIn && !initialTokens.expiresAt) {
@@ -28,30 +25,26 @@ class DefaultAuthTokenManager {
28
25
  return { ...this.tokens };
29
26
  }
30
27
  setTokens(tokens) {
31
- var _a, _b;
32
28
  this.tokens = { ...tokens };
33
29
  if (tokens.expiresIn && !tokens.expiresAt) {
34
30
  this.tokens.expiresAt = Date.now() + tokens.expiresIn * 1e3;
35
31
  }
36
- (_b = (_a = this.events) == null ? void 0 : _a.onTokenSet) == null ? void 0 : _b.call(_a, this.tokens);
32
+ this.events?.onTokenSet?.(this.tokens);
37
33
  }
38
34
  setAccessToken(token) {
39
- var _a, _b;
40
35
  this.tokens.accessToken = token;
41
- (_b = (_a = this.events) == null ? void 0 : _a.onTokenSet) == null ? void 0 : _b.call(_a, this.tokens);
36
+ this.events?.onTokenSet?.(this.tokens);
42
37
  }
43
38
  setAuthToken(token) {
44
- var _a, _b;
45
39
  this.tokens.authToken = token;
46
- (_b = (_a = this.events) == null ? void 0 : _a.onTokenSet) == null ? void 0 : _b.call(_a, this.tokens);
40
+ this.events?.onTokenSet?.(this.tokens);
47
41
  }
48
42
  setRefreshToken(token) {
49
43
  this.tokens.refreshToken = token;
50
44
  }
51
45
  clearTokens() {
52
- var _a, _b;
53
46
  this.tokens = {};
54
- (_b = (_a = this.events) == null ? void 0 : _a.onTokenCleared) == null ? void 0 : _b.call(_a);
47
+ this.events?.onTokenCleared?.();
55
48
  }
56
49
  clearAuthToken() {
57
50
  this.tokens.authToken = void 0;
@@ -60,13 +53,12 @@ class DefaultAuthTokenManager {
60
53
  this.tokens.accessToken = void 0;
61
54
  }
62
55
  isExpired() {
63
- var _a, _b;
64
56
  if (!this.tokens.expiresAt) {
65
57
  return false;
66
58
  }
67
59
  const expired = Date.now() >= this.tokens.expiresAt;
68
60
  if (expired) {
69
- (_b = (_a = this.events) == null ? void 0 : _a.onTokenExpired) == null ? void 0 : _b.call(_a);
61
+ this.events?.onTokenExpired?.();
70
62
  }
71
63
  return expired;
72
64
  }
@@ -113,7 +105,7 @@ function buildAuthHeaders(authMode, apiKey, tokenManager) {
113
105
  return headers;
114
106
  }
115
107
  function isTokenValid(manager) {
116
- return (manager == null ? void 0 : manager.isValid()) ?? false;
108
+ return manager?.isValid() ?? false;
117
109
  }
118
110
  function requiresRefresh(manager, thresholdSeconds = 300) {
119
111
  if (!manager) return false;
@@ -1 +1 @@
1
- {"version":3,"file":"token-manager.cjs","sources":["../../src/auth/token-manager.ts"],"sourcesContent":["export interface AuthTokens {\n accessToken?: string;\n authToken?: string;\n refreshToken?: string;\n expiresIn?: number;\n expiresAt?: number;\n tokenType?: string;\n scope?: string;\n}\n\nexport interface TokenManagerEvents {\n onTokenRefresh?: (tokens: AuthTokens) => void;\n onTokenExpired?: () => void;\n onTokenCleared?: () => void;\n onTokenSet?: (tokens: AuthTokens) => void;\n onTokenInvalid?: () => void;\n}\n\nexport interface AuthTokenManager {\n getAccessToken(): string | undefined;\n getAuthToken(): string | undefined;\n getRefreshToken(): string | undefined;\n getTokens(): AuthTokens;\n setTokens(tokens: AuthTokens): void;\n setAccessToken(token: string): void;\n setAuthToken(token: string): void;\n setRefreshToken(token: string): void;\n clearTokens(): void;\n clearAuthToken(): void;\n clearAccessToken(): void;\n isExpired(): boolean;\n isValid(): boolean;\n hasToken(): boolean;\n hasAuthToken(): boolean;\n hasAccessToken(): boolean;\n willExpireIn(seconds: number): boolean;\n}\n\nexport type AuthMode = 'apikey' | 'dual-token';\n\nexport interface AuthConfig {\n mode: AuthMode;\n apiKey?: string;\n accessToken?: string;\n authToken?: string;\n tokenManager?: AuthTokenManager;\n}\n\nexport class DefaultAuthTokenManager implements AuthTokenManager {\n private tokens: AuthTokens = {};\n private readonly events?: TokenManagerEvents;\n\n constructor(initialTokens?: AuthTokens, events?: TokenManagerEvents) {\n if (initialTokens) {\n this.tokens = { ...initialTokens };\n if (initialTokens.expiresIn && !initialTokens.expiresAt) {\n this.tokens.expiresAt = Date.now() + initialTokens.expiresIn * 1000;\n }\n }\n this.events = events;\n }\n\n getAccessToken(): string | undefined {\n return this.tokens.accessToken;\n }\n\n getAuthToken(): string | undefined {\n return this.tokens.authToken;\n }\n\n getRefreshToken(): string | undefined {\n return this.tokens.refreshToken;\n }\n\n getTokens(): AuthTokens {\n return { ...this.tokens };\n }\n\n setTokens(tokens: AuthTokens): void {\n this.tokens = { ...tokens };\n if (tokens.expiresIn && !tokens.expiresAt) {\n this.tokens.expiresAt = Date.now() + tokens.expiresIn * 1000;\n }\n this.events?.onTokenSet?.(this.tokens);\n }\n\n setAccessToken(token: string): void {\n this.tokens.accessToken = token;\n this.events?.onTokenSet?.(this.tokens);\n }\n\n setAuthToken(token: string): void {\n this.tokens.authToken = token;\n this.events?.onTokenSet?.(this.tokens);\n }\n\n setRefreshToken(token: string): void {\n this.tokens.refreshToken = token;\n }\n\n clearTokens(): void {\n this.tokens = {};\n this.events?.onTokenCleared?.();\n }\n\n clearAuthToken(): void {\n this.tokens.authToken = undefined;\n }\n\n clearAccessToken(): void {\n this.tokens.accessToken = undefined;\n }\n\n isExpired(): boolean {\n if (!this.tokens.expiresAt) {\n return false;\n }\n const expired = Date.now() >= this.tokens.expiresAt;\n if (expired) {\n this.events?.onTokenExpired?.();\n }\n return expired;\n }\n\n isValid(): boolean {\n return this.hasToken() && !this.isExpired();\n }\n\n hasToken(): boolean {\n return !!(this.tokens.accessToken || this.tokens.authToken);\n }\n\n hasAuthToken(): boolean {\n return !!this.tokens.authToken;\n }\n\n hasAccessToken(): boolean {\n return !!this.tokens.accessToken;\n }\n\n willExpireIn(seconds: number): boolean {\n if (!this.tokens.expiresAt) {\n return false;\n }\n return Date.now() + seconds * 1000 >= this.tokens.expiresAt;\n }\n}\n\nexport function createTokenManager(tokens?: AuthTokens, events?: TokenManagerEvents): AuthTokenManager {\n return new DefaultAuthTokenManager(tokens, events);\n}\n\nexport function buildAuthHeaders(\n authMode: AuthMode,\n apiKey?: string,\n tokenManager?: AuthTokenManager\n): Record<string, string> {\n const headers: Record<string, string> = {};\n\n if (authMode === 'apikey') {\n if (apiKey) {\n headers['Authorization'] = `Bearer ${apiKey}`;\n }\n } else if (authMode === 'dual-token') {\n if (tokenManager) {\n const accessToken = tokenManager.getAccessToken();\n const authToken = tokenManager.getAuthToken();\n\n if (accessToken) {\n headers['Access-Token'] = accessToken;\n }\n\n if (authToken) {\n headers['Authorization'] = `Bearer ${authToken}`;\n }\n }\n }\n\n return headers;\n}\n\nexport interface OAuthConfig {\n clientId: string;\n redirectUri: string;\n scope?: string;\n state?: string;\n}\n\nexport interface OAuthTokens extends AuthTokens {\n tokenType: string;\n scope?: string;\n}\n\nexport function isTokenValid(manager: AuthTokenManager | undefined): boolean {\n return manager?.isValid() ?? false;\n}\n\nexport function requiresRefresh(manager: AuthTokenManager | undefined, thresholdSeconds: number = 300): boolean {\n if (!manager) return false;\n return manager.willExpireIn(thresholdSeconds);\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token-manager.cjs","sources":["../../src/auth/token-manager.ts"],"sourcesContent":["export interface AuthTokens {\n accessToken?: string;\n authToken?: string;\n refreshToken?: string;\n expiresIn?: number;\n expiresAt?: number;\n tokenType?: string;\n scope?: string;\n}\n\nexport interface TokenManagerEvents {\n onTokenRefresh?: (tokens: AuthTokens) => void;\n onTokenExpired?: () => void;\n onTokenCleared?: () => void;\n onTokenSet?: (tokens: AuthTokens) => void;\n onTokenInvalid?: () => void;\n}\n\nexport interface AuthTokenManager {\n getAccessToken(): string | undefined;\n getAuthToken(): string | undefined;\n getRefreshToken(): string | undefined;\n getTokens(): AuthTokens;\n setTokens(tokens: AuthTokens): void;\n setAccessToken(token: string): void;\n setAuthToken(token: string): void;\n setRefreshToken(token: string): void;\n clearTokens(): void;\n clearAuthToken(): void;\n clearAccessToken(): void;\n isExpired(): boolean;\n isValid(): boolean;\n hasToken(): boolean;\n hasAuthToken(): boolean;\n hasAccessToken(): boolean;\n willExpireIn(seconds: number): boolean;\n}\n\nexport type AuthMode = 'apikey' | 'dual-token';\n\nexport interface AuthConfig {\n mode: AuthMode;\n apiKey?: string;\n accessToken?: string;\n authToken?: string;\n tokenManager?: AuthTokenManager;\n}\n\nexport class DefaultAuthTokenManager implements AuthTokenManager {\n private tokens: AuthTokens = {};\n private readonly events?: TokenManagerEvents;\n\n constructor(initialTokens?: AuthTokens, events?: TokenManagerEvents) {\n if (initialTokens) {\n this.tokens = { ...initialTokens };\n if (initialTokens.expiresIn && !initialTokens.expiresAt) {\n this.tokens.expiresAt = Date.now() + initialTokens.expiresIn * 1000;\n }\n }\n this.events = events;\n }\n\n getAccessToken(): string | undefined {\n return this.tokens.accessToken;\n }\n\n getAuthToken(): string | undefined {\n return this.tokens.authToken;\n }\n\n getRefreshToken(): string | undefined {\n return this.tokens.refreshToken;\n }\n\n getTokens(): AuthTokens {\n return { ...this.tokens };\n }\n\n setTokens(tokens: AuthTokens): void {\n this.tokens = { ...tokens };\n if (tokens.expiresIn && !tokens.expiresAt) {\n this.tokens.expiresAt = Date.now() + tokens.expiresIn * 1000;\n }\n this.events?.onTokenSet?.(this.tokens);\n }\n\n setAccessToken(token: string): void {\n this.tokens.accessToken = token;\n this.events?.onTokenSet?.(this.tokens);\n }\n\n setAuthToken(token: string): void {\n this.tokens.authToken = token;\n this.events?.onTokenSet?.(this.tokens);\n }\n\n setRefreshToken(token: string): void {\n this.tokens.refreshToken = token;\n }\n\n clearTokens(): void {\n this.tokens = {};\n this.events?.onTokenCleared?.();\n }\n\n clearAuthToken(): void {\n this.tokens.authToken = undefined;\n }\n\n clearAccessToken(): void {\n this.tokens.accessToken = undefined;\n }\n\n isExpired(): boolean {\n if (!this.tokens.expiresAt) {\n return false;\n }\n const expired = Date.now() >= this.tokens.expiresAt;\n if (expired) {\n this.events?.onTokenExpired?.();\n }\n return expired;\n }\n\n isValid(): boolean {\n return this.hasToken() && !this.isExpired();\n }\n\n hasToken(): boolean {\n return !!(this.tokens.accessToken || this.tokens.authToken);\n }\n\n hasAuthToken(): boolean {\n return !!this.tokens.authToken;\n }\n\n hasAccessToken(): boolean {\n return !!this.tokens.accessToken;\n }\n\n willExpireIn(seconds: number): boolean {\n if (!this.tokens.expiresAt) {\n return false;\n }\n return Date.now() + seconds * 1000 >= this.tokens.expiresAt;\n }\n}\n\nexport function createTokenManager(tokens?: AuthTokens, events?: TokenManagerEvents): AuthTokenManager {\n return new DefaultAuthTokenManager(tokens, events);\n}\n\nexport function buildAuthHeaders(\n authMode: AuthMode,\n apiKey?: string,\n tokenManager?: AuthTokenManager\n): Record<string, string> {\n const headers: Record<string, string> = {};\n\n if (authMode === 'apikey') {\n if (apiKey) {\n headers['Authorization'] = `Bearer ${apiKey}`;\n }\n } else if (authMode === 'dual-token') {\n if (tokenManager) {\n const accessToken = tokenManager.getAccessToken();\n const authToken = tokenManager.getAuthToken();\n\n if (accessToken) {\n headers['Access-Token'] = accessToken;\n }\n\n if (authToken) {\n headers['Authorization'] = `Bearer ${authToken}`;\n }\n }\n }\n\n return headers;\n}\n\nexport interface OAuthConfig {\n clientId: string;\n redirectUri: string;\n scope?: string;\n state?: string;\n}\n\nexport interface OAuthTokens extends AuthTokens {\n tokenType: string;\n scope?: string;\n}\n\nexport function isTokenValid(manager: AuthTokenManager | undefined): boolean {\n return manager?.isValid() ?? false;\n}\n\nexport function requiresRefresh(manager: AuthTokenManager | undefined, thresholdSeconds: number = 300): boolean {\n if (!manager) return false;\n return manager.willExpireIn(thresholdSeconds);\n}\n"],"names":[],"mappings":"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"}
@@ -1,10 +1,7 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
1
  class DefaultAuthTokenManager {
2
+ tokens = {};
3
+ events;
5
4
  constructor(initialTokens, events) {
6
- __publicField(this, "tokens", {});
7
- __publicField(this, "events");
8
5
  if (initialTokens) {
9
6
  this.tokens = { ...initialTokens };
10
7
  if (initialTokens.expiresIn && !initialTokens.expiresAt) {
@@ -26,30 +23,26 @@ class DefaultAuthTokenManager {
26
23
  return { ...this.tokens };
27
24
  }
28
25
  setTokens(tokens) {
29
- var _a, _b;
30
26
  this.tokens = { ...tokens };
31
27
  if (tokens.expiresIn && !tokens.expiresAt) {
32
28
  this.tokens.expiresAt = Date.now() + tokens.expiresIn * 1e3;
33
29
  }
34
- (_b = (_a = this.events) == null ? void 0 : _a.onTokenSet) == null ? void 0 : _b.call(_a, this.tokens);
30
+ this.events?.onTokenSet?.(this.tokens);
35
31
  }
36
32
  setAccessToken(token) {
37
- var _a, _b;
38
33
  this.tokens.accessToken = token;
39
- (_b = (_a = this.events) == null ? void 0 : _a.onTokenSet) == null ? void 0 : _b.call(_a, this.tokens);
34
+ this.events?.onTokenSet?.(this.tokens);
40
35
  }
41
36
  setAuthToken(token) {
42
- var _a, _b;
43
37
  this.tokens.authToken = token;
44
- (_b = (_a = this.events) == null ? void 0 : _a.onTokenSet) == null ? void 0 : _b.call(_a, this.tokens);
38
+ this.events?.onTokenSet?.(this.tokens);
45
39
  }
46
40
  setRefreshToken(token) {
47
41
  this.tokens.refreshToken = token;
48
42
  }
49
43
  clearTokens() {
50
- var _a, _b;
51
44
  this.tokens = {};
52
- (_b = (_a = this.events) == null ? void 0 : _a.onTokenCleared) == null ? void 0 : _b.call(_a);
45
+ this.events?.onTokenCleared?.();
53
46
  }
54
47
  clearAuthToken() {
55
48
  this.tokens.authToken = void 0;
@@ -58,13 +51,12 @@ class DefaultAuthTokenManager {
58
51
  this.tokens.accessToken = void 0;
59
52
  }
60
53
  isExpired() {
61
- var _a, _b;
62
54
  if (!this.tokens.expiresAt) {
63
55
  return false;
64
56
  }
65
57
  const expired = Date.now() >= this.tokens.expiresAt;
66
58
  if (expired) {
67
- (_b = (_a = this.events) == null ? void 0 : _a.onTokenExpired) == null ? void 0 : _b.call(_a);
59
+ this.events?.onTokenExpired?.();
68
60
  }
69
61
  return expired;
70
62
  }
@@ -111,7 +103,7 @@ function buildAuthHeaders(authMode, apiKey, tokenManager) {
111
103
  return headers;
112
104
  }
113
105
  function isTokenValid(manager) {
114
- return (manager == null ? void 0 : manager.isValid()) ?? false;
106
+ return manager?.isValid() ?? false;
115
107
  }
116
108
  function requiresRefresh(manager, thresholdSeconds = 300) {
117
109
  if (!manager) return false;
@@ -1 +1 @@
1
- {"version":3,"file":"token-manager.js","sources":["../../src/auth/token-manager.ts"],"sourcesContent":["export interface AuthTokens {\n accessToken?: string;\n authToken?: string;\n refreshToken?: string;\n expiresIn?: number;\n expiresAt?: number;\n tokenType?: string;\n scope?: string;\n}\n\nexport interface TokenManagerEvents {\n onTokenRefresh?: (tokens: AuthTokens) => void;\n onTokenExpired?: () => void;\n onTokenCleared?: () => void;\n onTokenSet?: (tokens: AuthTokens) => void;\n onTokenInvalid?: () => void;\n}\n\nexport interface AuthTokenManager {\n getAccessToken(): string | undefined;\n getAuthToken(): string | undefined;\n getRefreshToken(): string | undefined;\n getTokens(): AuthTokens;\n setTokens(tokens: AuthTokens): void;\n setAccessToken(token: string): void;\n setAuthToken(token: string): void;\n setRefreshToken(token: string): void;\n clearTokens(): void;\n clearAuthToken(): void;\n clearAccessToken(): void;\n isExpired(): boolean;\n isValid(): boolean;\n hasToken(): boolean;\n hasAuthToken(): boolean;\n hasAccessToken(): boolean;\n willExpireIn(seconds: number): boolean;\n}\n\nexport type AuthMode = 'apikey' | 'dual-token';\n\nexport interface AuthConfig {\n mode: AuthMode;\n apiKey?: string;\n accessToken?: string;\n authToken?: string;\n tokenManager?: AuthTokenManager;\n}\n\nexport class DefaultAuthTokenManager implements AuthTokenManager {\n private tokens: AuthTokens = {};\n private readonly events?: TokenManagerEvents;\n\n constructor(initialTokens?: AuthTokens, events?: TokenManagerEvents) {\n if (initialTokens) {\n this.tokens = { ...initialTokens };\n if (initialTokens.expiresIn && !initialTokens.expiresAt) {\n this.tokens.expiresAt = Date.now() + initialTokens.expiresIn * 1000;\n }\n }\n this.events = events;\n }\n\n getAccessToken(): string | undefined {\n return this.tokens.accessToken;\n }\n\n getAuthToken(): string | undefined {\n return this.tokens.authToken;\n }\n\n getRefreshToken(): string | undefined {\n return this.tokens.refreshToken;\n }\n\n getTokens(): AuthTokens {\n return { ...this.tokens };\n }\n\n setTokens(tokens: AuthTokens): void {\n this.tokens = { ...tokens };\n if (tokens.expiresIn && !tokens.expiresAt) {\n this.tokens.expiresAt = Date.now() + tokens.expiresIn * 1000;\n }\n this.events?.onTokenSet?.(this.tokens);\n }\n\n setAccessToken(token: string): void {\n this.tokens.accessToken = token;\n this.events?.onTokenSet?.(this.tokens);\n }\n\n setAuthToken(token: string): void {\n this.tokens.authToken = token;\n this.events?.onTokenSet?.(this.tokens);\n }\n\n setRefreshToken(token: string): void {\n this.tokens.refreshToken = token;\n }\n\n clearTokens(): void {\n this.tokens = {};\n this.events?.onTokenCleared?.();\n }\n\n clearAuthToken(): void {\n this.tokens.authToken = undefined;\n }\n\n clearAccessToken(): void {\n this.tokens.accessToken = undefined;\n }\n\n isExpired(): boolean {\n if (!this.tokens.expiresAt) {\n return false;\n }\n const expired = Date.now() >= this.tokens.expiresAt;\n if (expired) {\n this.events?.onTokenExpired?.();\n }\n return expired;\n }\n\n isValid(): boolean {\n return this.hasToken() && !this.isExpired();\n }\n\n hasToken(): boolean {\n return !!(this.tokens.accessToken || this.tokens.authToken);\n }\n\n hasAuthToken(): boolean {\n return !!this.tokens.authToken;\n }\n\n hasAccessToken(): boolean {\n return !!this.tokens.accessToken;\n }\n\n willExpireIn(seconds: number): boolean {\n if (!this.tokens.expiresAt) {\n return false;\n }\n return Date.now() + seconds * 1000 >= this.tokens.expiresAt;\n }\n}\n\nexport function createTokenManager(tokens?: AuthTokens, events?: TokenManagerEvents): AuthTokenManager {\n return new DefaultAuthTokenManager(tokens, events);\n}\n\nexport function buildAuthHeaders(\n authMode: AuthMode,\n apiKey?: string,\n tokenManager?: AuthTokenManager\n): Record<string, string> {\n const headers: Record<string, string> = {};\n\n if (authMode === 'apikey') {\n if (apiKey) {\n headers['Authorization'] = `Bearer ${apiKey}`;\n }\n } else if (authMode === 'dual-token') {\n if (tokenManager) {\n const accessToken = tokenManager.getAccessToken();\n const authToken = tokenManager.getAuthToken();\n\n if (accessToken) {\n headers['Access-Token'] = accessToken;\n }\n\n if (authToken) {\n headers['Authorization'] = `Bearer ${authToken}`;\n }\n }\n }\n\n return headers;\n}\n\nexport interface OAuthConfig {\n clientId: string;\n redirectUri: string;\n scope?: string;\n state?: string;\n}\n\nexport interface OAuthTokens extends AuthTokens {\n tokenType: string;\n scope?: string;\n}\n\nexport function isTokenValid(manager: AuthTokenManager | undefined): boolean {\n return manager?.isValid() ?? false;\n}\n\nexport function requiresRefresh(manager: AuthTokenManager | undefined, thresholdSeconds: number = 300): boolean {\n if (!manager) return false;\n return manager.willExpireIn(thresholdSeconds);\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token-manager.js","sources":["../../src/auth/token-manager.ts"],"sourcesContent":["export interface AuthTokens {\n accessToken?: string;\n authToken?: string;\n refreshToken?: string;\n expiresIn?: number;\n expiresAt?: number;\n tokenType?: string;\n scope?: string;\n}\n\nexport interface TokenManagerEvents {\n onTokenRefresh?: (tokens: AuthTokens) => void;\n onTokenExpired?: () => void;\n onTokenCleared?: () => void;\n onTokenSet?: (tokens: AuthTokens) => void;\n onTokenInvalid?: () => void;\n}\n\nexport interface AuthTokenManager {\n getAccessToken(): string | undefined;\n getAuthToken(): string | undefined;\n getRefreshToken(): string | undefined;\n getTokens(): AuthTokens;\n setTokens(tokens: AuthTokens): void;\n setAccessToken(token: string): void;\n setAuthToken(token: string): void;\n setRefreshToken(token: string): void;\n clearTokens(): void;\n clearAuthToken(): void;\n clearAccessToken(): void;\n isExpired(): boolean;\n isValid(): boolean;\n hasToken(): boolean;\n hasAuthToken(): boolean;\n hasAccessToken(): boolean;\n willExpireIn(seconds: number): boolean;\n}\n\nexport type AuthMode = 'apikey' | 'dual-token';\n\nexport interface AuthConfig {\n mode: AuthMode;\n apiKey?: string;\n accessToken?: string;\n authToken?: string;\n tokenManager?: AuthTokenManager;\n}\n\nexport class DefaultAuthTokenManager implements AuthTokenManager {\n private tokens: AuthTokens = {};\n private readonly events?: TokenManagerEvents;\n\n constructor(initialTokens?: AuthTokens, events?: TokenManagerEvents) {\n if (initialTokens) {\n this.tokens = { ...initialTokens };\n if (initialTokens.expiresIn && !initialTokens.expiresAt) {\n this.tokens.expiresAt = Date.now() + initialTokens.expiresIn * 1000;\n }\n }\n this.events = events;\n }\n\n getAccessToken(): string | undefined {\n return this.tokens.accessToken;\n }\n\n getAuthToken(): string | undefined {\n return this.tokens.authToken;\n }\n\n getRefreshToken(): string | undefined {\n return this.tokens.refreshToken;\n }\n\n getTokens(): AuthTokens {\n return { ...this.tokens };\n }\n\n setTokens(tokens: AuthTokens): void {\n this.tokens = { ...tokens };\n if (tokens.expiresIn && !tokens.expiresAt) {\n this.tokens.expiresAt = Date.now() + tokens.expiresIn * 1000;\n }\n this.events?.onTokenSet?.(this.tokens);\n }\n\n setAccessToken(token: string): void {\n this.tokens.accessToken = token;\n this.events?.onTokenSet?.(this.tokens);\n }\n\n setAuthToken(token: string): void {\n this.tokens.authToken = token;\n this.events?.onTokenSet?.(this.tokens);\n }\n\n setRefreshToken(token: string): void {\n this.tokens.refreshToken = token;\n }\n\n clearTokens(): void {\n this.tokens = {};\n this.events?.onTokenCleared?.();\n }\n\n clearAuthToken(): void {\n this.tokens.authToken = undefined;\n }\n\n clearAccessToken(): void {\n this.tokens.accessToken = undefined;\n }\n\n isExpired(): boolean {\n if (!this.tokens.expiresAt) {\n return false;\n }\n const expired = Date.now() >= this.tokens.expiresAt;\n if (expired) {\n this.events?.onTokenExpired?.();\n }\n return expired;\n }\n\n isValid(): boolean {\n return this.hasToken() && !this.isExpired();\n }\n\n hasToken(): boolean {\n return !!(this.tokens.accessToken || this.tokens.authToken);\n }\n\n hasAuthToken(): boolean {\n return !!this.tokens.authToken;\n }\n\n hasAccessToken(): boolean {\n return !!this.tokens.accessToken;\n }\n\n willExpireIn(seconds: number): boolean {\n if (!this.tokens.expiresAt) {\n return false;\n }\n return Date.now() + seconds * 1000 >= this.tokens.expiresAt;\n }\n}\n\nexport function createTokenManager(tokens?: AuthTokens, events?: TokenManagerEvents): AuthTokenManager {\n return new DefaultAuthTokenManager(tokens, events);\n}\n\nexport function buildAuthHeaders(\n authMode: AuthMode,\n apiKey?: string,\n tokenManager?: AuthTokenManager\n): Record<string, string> {\n const headers: Record<string, string> = {};\n\n if (authMode === 'apikey') {\n if (apiKey) {\n headers['Authorization'] = `Bearer ${apiKey}`;\n }\n } else if (authMode === 'dual-token') {\n if (tokenManager) {\n const accessToken = tokenManager.getAccessToken();\n const authToken = tokenManager.getAuthToken();\n\n if (accessToken) {\n headers['Access-Token'] = accessToken;\n }\n\n if (authToken) {\n headers['Authorization'] = `Bearer ${authToken}`;\n }\n }\n }\n\n return headers;\n}\n\nexport interface OAuthConfig {\n clientId: string;\n redirectUri: string;\n scope?: string;\n state?: string;\n}\n\nexport interface OAuthTokens extends AuthTokens {\n tokenType: string;\n scope?: string;\n}\n\nexport function isTokenValid(manager: AuthTokenManager | undefined): boolean {\n return manager?.isValid() ?? false;\n}\n\nexport function requiresRefresh(manager: AuthTokenManager | undefined, thresholdSeconds: number = 300): boolean {\n if (!manager) return false;\n return manager.willExpireIn(thresholdSeconds);\n}\n"],"names":[],"mappings":"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"}
package/dist/errors.cjs CHANGED
@@ -1,25 +1,22 @@
1
1
  "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
6
3
  const types = require("./core/types.cjs");
7
4
  class SdkError extends Error {
5
+ code;
6
+ httpStatus;
7
+ details;
8
+ timestamp;
9
+ traceId;
10
+ metadata;
8
11
  constructor(message, code = "UNKNOWN", httpStatus, options) {
9
- super(message, { cause: options == null ? void 0 : options.cause });
10
- __publicField(this, "code");
11
- __publicField(this, "httpStatus");
12
- __publicField(this, "details");
13
- __publicField(this, "timestamp");
14
- __publicField(this, "traceId");
15
- __publicField(this, "metadata");
12
+ super(message, { cause: options?.cause });
16
13
  this.name = this.constructor.name;
17
14
  this.code = code;
18
15
  this.httpStatus = httpStatus;
19
- this.details = options == null ? void 0 : options.details;
16
+ this.details = options?.details;
20
17
  this.timestamp = Date.now();
21
- this.traceId = options == null ? void 0 : options.traceId;
22
- this.metadata = options == null ? void 0 : options.metadata;
18
+ this.traceId = options?.traceId;
19
+ this.metadata = options?.metadata;
23
20
  Object.setPrototypeOf(this, new.target.prototype);
24
21
  }
25
22
  static fromApiResult(result, httpStatus) {
@@ -121,9 +118,9 @@ class NetworkError extends SdkError {
121
118
  }
122
119
  }
123
120
  class TimeoutError extends SdkError {
121
+ timeout;
124
122
  constructor(message = "Request timeout", timeout, options) {
125
123
  super(message, "TIMEOUT", void 0, options);
126
- __publicField(this, "timeout");
127
124
  this.timeout = timeout;
128
125
  }
129
126
  toJSON() {
@@ -173,16 +170,16 @@ class ConflictError extends SdkError {
173
170
  }
174
171
  }
175
172
  class MethodNotAllowedError extends SdkError {
173
+ allowedMethods;
176
174
  constructor(message = "Method not allowed", allowedMethods, options) {
177
175
  super(message, "VALIDATION_ERROR", types.HTTP_STATUS.METHOD_NOT_ALLOWED, options);
178
- __publicField(this, "allowedMethods");
179
176
  this.allowedMethods = allowedMethods;
180
177
  }
181
178
  }
182
179
  class RateLimitError extends SdkError {
180
+ retryAfter;
183
181
  constructor(message = "Rate limit exceeded", retryAfter, options) {
184
182
  super(message, "RATE_LIMIT", types.HTTP_STATUS.TOO_MANY_REQUESTS, options);
185
- __publicField(this, "retryAfter");
186
183
  this.retryAfter = retryAfter;
187
184
  }
188
185
  toJSON() {
@@ -213,10 +210,10 @@ class GatewayTimeoutError extends ServerError {
213
210
  }
214
211
  }
215
212
  class BusinessError extends SdkError {
213
+ businessCode;
214
+ data;
216
215
  constructor(message, code, data, options) {
217
216
  super(message, "BUSINESS_ERROR", void 0, options);
218
- __publicField(this, "businessCode");
219
- __publicField(this, "data");
220
217
  this.businessCode = code;
221
218
  this.data = data;
222
219
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.cjs","sources":["../src/errors/index.ts"],"sourcesContent":["import type { ApiResult } from '../core/types';\nimport { HTTP_STATUS } from '../core/types';\n\nexport type ErrorCode = \n | 'UNKNOWN'\n | 'NETWORK_ERROR'\n | 'TIMEOUT'\n | 'CANCELLED'\n | 'UNAUTHORIZED'\n | 'FORBIDDEN'\n | 'NOT_FOUND'\n | 'VALIDATION_ERROR'\n | 'RATE_LIMIT'\n | 'SERVER_ERROR'\n | 'TOKEN_EXPIRED'\n | 'TOKEN_INVALID'\n | 'BUSINESS_ERROR'\n | 'CONFLICT'\n | 'SERVICE_UNAVAILABLE'\n | 'BAD_GATEWAY'\n | 'GATEWAY_TIMEOUT';\n\nexport interface ErrorDetail {\n field?: string;\n message?: string;\n value?: unknown;\n code?: string;\n constraint?: string;\n}\n\nexport interface ErrorOptions {\n cause?: Error;\n details?: ErrorDetail[];\n traceId?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport class SdkError extends Error {\n public readonly code: ErrorCode;\n public readonly httpStatus?: number;\n public readonly details?: ErrorDetail[];\n public readonly timestamp: number;\n public readonly traceId?: string;\n public readonly metadata?: Record<string, unknown>;\n\n constructor(\n message: string,\n code: ErrorCode = 'UNKNOWN',\n httpStatus?: number,\n options?: ErrorOptions\n ) {\n super(message, { cause: options?.cause });\n this.name = this.constructor.name;\n this.code = code;\n this.httpStatus = httpStatus;\n this.details = options?.details;\n this.timestamp = Date.now();\n this.traceId = options?.traceId;\n this.metadata = options?.metadata;\n \n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static fromApiResult(result: ApiResult, httpStatus?: number): SdkError {\n const code = String(result.code);\n const message = result.msg || result.message || 'Unknown error';\n \n switch (code) {\n case '400':\n case '4000':\n return new ValidationError(message);\n case '401':\n case '4010':\n return new AuthenticationError(message);\n case '403':\n case '4030':\n return new ForbiddenError(message);\n case '404':\n case '4040':\n return new NotFoundError(message);\n case '409':\n case '4090':\n return new ConflictError(message);\n case '429':\n case '4290':\n return new RateLimitError(message);\n default:\n if (code.startsWith('5')) {\n return new ServerError(message, httpStatus ?? HTTP_STATUS.INTERNAL_SERVER_ERROR);\n }\n return new BusinessError(message, result.code, result.data);\n }\n }\n\n static fromHttpStatus(status: number, message?: string): SdkError {\n const defaultMessage = message ?? `HTTP Error ${status}`;\n \n switch (status) {\n case HTTP_STATUS.BAD_REQUEST:\n case HTTP_STATUS.UNPROCESSABLE_ENTITY:\n return new ValidationError(defaultMessage);\n case HTTP_STATUS.UNAUTHORIZED:\n return new AuthenticationError(defaultMessage);\n case HTTP_STATUS.FORBIDDEN:\n return new ForbiddenError(defaultMessage);\n case HTTP_STATUS.NOT_FOUND:\n return new NotFoundError(defaultMessage);\n case HTTP_STATUS.METHOD_NOT_ALLOWED:\n return new ValidationError(defaultMessage);\n case HTTP_STATUS.CONFLICT:\n return new ConflictError(defaultMessage);\n case HTTP_STATUS.TOO_MANY_REQUESTS:\n return new RateLimitError(defaultMessage);\n case HTTP_STATUS.INTERNAL_SERVER_ERROR:\n return new ServerError(defaultMessage, status);\n case HTTP_STATUS.BAD_GATEWAY:\n return new BadGatewayError(defaultMessage);\n case HTTP_STATUS.SERVICE_UNAVAILABLE:\n return new ServiceUnavailableError(defaultMessage);\n case HTTP_STATUS.GATEWAY_TIMEOUT:\n return new GatewayTimeoutError(defaultMessage);\n default:\n if (status >= 500) {\n return new ServerError(defaultMessage, status);\n }\n return new NetworkError(defaultMessage);\n }\n }\n\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n httpStatus: this.httpStatus,\n details: this.details,\n timestamp: this.timestamp,\n traceId: this.traceId,\n metadata: this.metadata,\n };\n }\n\n toString(): string {\n return `${this.name}: ${this.message} (code: ${this.code})`;\n }\n\n isRetryable(): boolean {\n return isRetryableError(this);\n }\n\n isAuthError(): boolean {\n return this.code === 'UNAUTHORIZED' || this.code === 'TOKEN_EXPIRED' || this.code === 'TOKEN_INVALID';\n }\n\n isNetworkError(): boolean {\n return this.code === 'NETWORK_ERROR' || this.code === 'TIMEOUT';\n }\n\n isClientError(): boolean {\n return this.httpStatus !== undefined && this.httpStatus >= 400 && this.httpStatus < 500;\n }\n\n isServerError(): boolean {\n return this.httpStatus !== undefined && this.httpStatus >= 500;\n }\n}\n\nexport class NetworkError extends SdkError {\n constructor(message: string = 'Network error', options?: ErrorOptions) {\n super(message, 'NETWORK_ERROR', undefined, options);\n }\n}\n\nexport class TimeoutError extends SdkError {\n public readonly timeout?: number;\n\n constructor(message: string = 'Request timeout', timeout?: number, options?: ErrorOptions) {\n super(message, 'TIMEOUT', undefined, options);\n this.timeout = timeout;\n }\n\n toJSON(): Record<string, unknown> {\n return { ...super.toJSON(), timeout: this.timeout };\n }\n}\n\nexport class CancelledError extends SdkError {\n constructor(message: string = 'Request cancelled', options?: ErrorOptions) {\n super(message, 'CANCELLED', undefined, options);\n }\n}\n\nexport class AuthenticationError extends SdkError {\n constructor(message: string = 'Authentication failed', options?: ErrorOptions) {\n super(message, 'UNAUTHORIZED', HTTP_STATUS.UNAUTHORIZED, options);\n }\n}\n\nexport class TokenExpiredError extends AuthenticationError {\n constructor(message: string = 'Token expired', options?: ErrorOptions) {\n super(message, options);\n (this as { code: ErrorCode }).code = 'TOKEN_EXPIRED';\n }\n}\n\nexport class TokenInvalidError extends AuthenticationError {\n constructor(message: string = 'Invalid token', options?: ErrorOptions) {\n super(message, options);\n (this as { code: ErrorCode }).code = 'TOKEN_INVALID';\n }\n}\n\nexport class ForbiddenError extends SdkError {\n constructor(message: string = 'Access forbidden', options?: ErrorOptions) {\n super(message, 'FORBIDDEN', HTTP_STATUS.FORBIDDEN, options);\n }\n}\n\nexport class NotFoundError extends SdkError {\n constructor(message: string = 'Resource not found', options?: ErrorOptions) {\n super(message, 'NOT_FOUND', HTTP_STATUS.NOT_FOUND, options);\n }\n}\n\nexport class ValidationError extends SdkError {\n constructor(message: string = 'Validation error', details?: ErrorDetail[], options?: ErrorOptions) {\n super(message, 'VALIDATION_ERROR', HTTP_STATUS.BAD_REQUEST, { ...options, details });\n }\n}\n\nexport class ConflictError extends SdkError {\n constructor(message: string = 'Resource conflict', options?: ErrorOptions) {\n super(message, 'CONFLICT', HTTP_STATUS.CONFLICT, options);\n }\n}\n\nexport class MethodNotAllowedError extends SdkError {\n public readonly allowedMethods?: string[];\n\n constructor(message: string = 'Method not allowed', allowedMethods?: string[], options?: ErrorOptions) {\n super(message, 'VALIDATION_ERROR', HTTP_STATUS.METHOD_NOT_ALLOWED, options);\n this.allowedMethods = allowedMethods;\n }\n}\n\nexport class RateLimitError extends SdkError {\n public readonly retryAfter?: number;\n\n constructor(message: string = 'Rate limit exceeded', retryAfter?: number, options?: ErrorOptions) {\n super(message, 'RATE_LIMIT', HTTP_STATUS.TOO_MANY_REQUESTS, options);\n this.retryAfter = retryAfter;\n }\n\n toJSON(): Record<string, unknown> {\n return { ...super.toJSON(), retryAfter: this.retryAfter };\n }\n}\n\nexport class ServerError extends SdkError {\n constructor(message: string = 'Server error', httpStatus: number = HTTP_STATUS.INTERNAL_SERVER_ERROR, options?: ErrorOptions) {\n super(message, 'SERVER_ERROR', httpStatus, options);\n }\n}\n\nexport class BadGatewayError extends ServerError {\n constructor(message: string = 'Bad gateway', options?: ErrorOptions) {\n super(message, HTTP_STATUS.BAD_GATEWAY, options);\n (this as { code: ErrorCode }).code = 'BAD_GATEWAY';\n }\n}\n\nexport class ServiceUnavailableError extends ServerError {\n constructor(message: string = 'Service unavailable', options?: ErrorOptions) {\n super(message, HTTP_STATUS.SERVICE_UNAVAILABLE, options);\n (this as { code: ErrorCode }).code = 'SERVICE_UNAVAILABLE';\n }\n}\n\nexport class GatewayTimeoutError extends ServerError {\n constructor(message: string = 'Gateway timeout', options?: ErrorOptions) {\n super(message, HTTP_STATUS.GATEWAY_TIMEOUT, options);\n (this as { code: ErrorCode }).code = 'GATEWAY_TIMEOUT';\n }\n}\n\nexport class BusinessError extends SdkError {\n public readonly businessCode?: string | number;\n public readonly data?: unknown;\n\n constructor(message: string, code?: string | number, data?: unknown, options?: ErrorOptions) {\n super(message, 'BUSINESS_ERROR', undefined, options);\n this.businessCode = code;\n this.data = data;\n }\n\n toJSON(): Record<string, unknown> {\n return { ...super.toJSON(), businessCode: this.businessCode, data: this.data };\n }\n}\n\nexport function isSdkError(error: unknown): error is SdkError {\n return error instanceof SdkError;\n}\n\nexport function isNetworkError(error: unknown): error is NetworkError {\n return error instanceof NetworkError;\n}\n\nexport function isTimeoutError(error: unknown): error is TimeoutError {\n return error instanceof TimeoutError;\n}\n\nexport function isCancelledError(error: unknown): error is CancelledError {\n return error instanceof CancelledError;\n}\n\nexport function isAuthError(error: unknown): error is AuthenticationError {\n return error instanceof AuthenticationError;\n}\n\nexport function isValidationError(error: unknown): error is ValidationError {\n return error instanceof ValidationError;\n}\n\nexport function isRateLimitError(error: unknown): error is RateLimitError {\n return error instanceof RateLimitError;\n}\n\nexport function isServerError(error: unknown): error is ServerError {\n return error instanceof ServerError;\n}\n\nexport function isBusinessError(error: unknown): error is BusinessError {\n return error instanceof BusinessError;\n}\n\nexport function isRetryableError(error: unknown): boolean {\n if (!(error instanceof SdkError)) return false;\n \n return (\n error instanceof NetworkError ||\n error instanceof TimeoutError ||\n error instanceof ServerError ||\n error instanceof RateLimitError ||\n error instanceof BadGatewayError ||\n error instanceof ServiceUnavailableError ||\n error instanceof GatewayTimeoutError\n );\n}\n"],"names":["HTTP_STATUS"],"mappings":"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"}
1
+ {"version":3,"file":"errors.cjs","sources":["../src/errors/index.ts"],"sourcesContent":["import type { ApiResult } from '../core/types';\nimport { HTTP_STATUS } from '../core/types';\n\nexport type ErrorCode = \n | 'UNKNOWN'\n | 'NETWORK_ERROR'\n | 'TIMEOUT'\n | 'CANCELLED'\n | 'UNAUTHORIZED'\n | 'FORBIDDEN'\n | 'NOT_FOUND'\n | 'VALIDATION_ERROR'\n | 'RATE_LIMIT'\n | 'SERVER_ERROR'\n | 'TOKEN_EXPIRED'\n | 'TOKEN_INVALID'\n | 'BUSINESS_ERROR'\n | 'CONFLICT'\n | 'SERVICE_UNAVAILABLE'\n | 'BAD_GATEWAY'\n | 'GATEWAY_TIMEOUT';\n\nexport interface ErrorDetail {\n field?: string;\n message?: string;\n value?: unknown;\n code?: string;\n constraint?: string;\n}\n\nexport interface ErrorOptions {\n cause?: Error;\n details?: ErrorDetail[];\n traceId?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport class SdkError extends Error {\n public readonly code: ErrorCode;\n public readonly httpStatus?: number;\n public readonly details?: ErrorDetail[];\n public readonly timestamp: number;\n public readonly traceId?: string;\n public readonly metadata?: Record<string, unknown>;\n\n constructor(\n message: string,\n code: ErrorCode = 'UNKNOWN',\n httpStatus?: number,\n options?: ErrorOptions\n ) {\n super(message, { cause: options?.cause });\n this.name = this.constructor.name;\n this.code = code;\n this.httpStatus = httpStatus;\n this.details = options?.details;\n this.timestamp = Date.now();\n this.traceId = options?.traceId;\n this.metadata = options?.metadata;\n \n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static fromApiResult(result: ApiResult, httpStatus?: number): SdkError {\n const code = String(result.code);\n const message = result.msg || result.message || 'Unknown error';\n \n switch (code) {\n case '400':\n case '4000':\n return new ValidationError(message);\n case '401':\n case '4010':\n return new AuthenticationError(message);\n case '403':\n case '4030':\n return new ForbiddenError(message);\n case '404':\n case '4040':\n return new NotFoundError(message);\n case '409':\n case '4090':\n return new ConflictError(message);\n case '429':\n case '4290':\n return new RateLimitError(message);\n default:\n if (code.startsWith('5')) {\n return new ServerError(message, httpStatus ?? HTTP_STATUS.INTERNAL_SERVER_ERROR);\n }\n return new BusinessError(message, result.code, result.data);\n }\n }\n\n static fromHttpStatus(status: number, message?: string): SdkError {\n const defaultMessage = message ?? `HTTP Error ${status}`;\n \n switch (status) {\n case HTTP_STATUS.BAD_REQUEST:\n case HTTP_STATUS.UNPROCESSABLE_ENTITY:\n return new ValidationError(defaultMessage);\n case HTTP_STATUS.UNAUTHORIZED:\n return new AuthenticationError(defaultMessage);\n case HTTP_STATUS.FORBIDDEN:\n return new ForbiddenError(defaultMessage);\n case HTTP_STATUS.NOT_FOUND:\n return new NotFoundError(defaultMessage);\n case HTTP_STATUS.METHOD_NOT_ALLOWED:\n return new ValidationError(defaultMessage);\n case HTTP_STATUS.CONFLICT:\n return new ConflictError(defaultMessage);\n case HTTP_STATUS.TOO_MANY_REQUESTS:\n return new RateLimitError(defaultMessage);\n case HTTP_STATUS.INTERNAL_SERVER_ERROR:\n return new ServerError(defaultMessage, status);\n case HTTP_STATUS.BAD_GATEWAY:\n return new BadGatewayError(defaultMessage);\n case HTTP_STATUS.SERVICE_UNAVAILABLE:\n return new ServiceUnavailableError(defaultMessage);\n case HTTP_STATUS.GATEWAY_TIMEOUT:\n return new GatewayTimeoutError(defaultMessage);\n default:\n if (status >= 500) {\n return new ServerError(defaultMessage, status);\n }\n return new NetworkError(defaultMessage);\n }\n }\n\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n httpStatus: this.httpStatus,\n details: this.details,\n timestamp: this.timestamp,\n traceId: this.traceId,\n metadata: this.metadata,\n };\n }\n\n toString(): string {\n return `${this.name}: ${this.message} (code: ${this.code})`;\n }\n\n isRetryable(): boolean {\n return isRetryableError(this);\n }\n\n isAuthError(): boolean {\n return this.code === 'UNAUTHORIZED' || this.code === 'TOKEN_EXPIRED' || this.code === 'TOKEN_INVALID';\n }\n\n isNetworkError(): boolean {\n return this.code === 'NETWORK_ERROR' || this.code === 'TIMEOUT';\n }\n\n isClientError(): boolean {\n return this.httpStatus !== undefined && this.httpStatus >= 400 && this.httpStatus < 500;\n }\n\n isServerError(): boolean {\n return this.httpStatus !== undefined && this.httpStatus >= 500;\n }\n}\n\nexport class NetworkError extends SdkError {\n constructor(message: string = 'Network error', options?: ErrorOptions) {\n super(message, 'NETWORK_ERROR', undefined, options);\n }\n}\n\nexport class TimeoutError extends SdkError {\n public readonly timeout?: number;\n\n constructor(message: string = 'Request timeout', timeout?: number, options?: ErrorOptions) {\n super(message, 'TIMEOUT', undefined, options);\n this.timeout = timeout;\n }\n\n toJSON(): Record<string, unknown> {\n return { ...super.toJSON(), timeout: this.timeout };\n }\n}\n\nexport class CancelledError extends SdkError {\n constructor(message: string = 'Request cancelled', options?: ErrorOptions) {\n super(message, 'CANCELLED', undefined, options);\n }\n}\n\nexport class AuthenticationError extends SdkError {\n constructor(message: string = 'Authentication failed', options?: ErrorOptions) {\n super(message, 'UNAUTHORIZED', HTTP_STATUS.UNAUTHORIZED, options);\n }\n}\n\nexport class TokenExpiredError extends AuthenticationError {\n constructor(message: string = 'Token expired', options?: ErrorOptions) {\n super(message, options);\n (this as { code: ErrorCode }).code = 'TOKEN_EXPIRED';\n }\n}\n\nexport class TokenInvalidError extends AuthenticationError {\n constructor(message: string = 'Invalid token', options?: ErrorOptions) {\n super(message, options);\n (this as { code: ErrorCode }).code = 'TOKEN_INVALID';\n }\n}\n\nexport class ForbiddenError extends SdkError {\n constructor(message: string = 'Access forbidden', options?: ErrorOptions) {\n super(message, 'FORBIDDEN', HTTP_STATUS.FORBIDDEN, options);\n }\n}\n\nexport class NotFoundError extends SdkError {\n constructor(message: string = 'Resource not found', options?: ErrorOptions) {\n super(message, 'NOT_FOUND', HTTP_STATUS.NOT_FOUND, options);\n }\n}\n\nexport class ValidationError extends SdkError {\n constructor(message: string = 'Validation error', details?: ErrorDetail[], options?: ErrorOptions) {\n super(message, 'VALIDATION_ERROR', HTTP_STATUS.BAD_REQUEST, { ...options, details });\n }\n}\n\nexport class ConflictError extends SdkError {\n constructor(message: string = 'Resource conflict', options?: ErrorOptions) {\n super(message, 'CONFLICT', HTTP_STATUS.CONFLICT, options);\n }\n}\n\nexport class MethodNotAllowedError extends SdkError {\n public readonly allowedMethods?: string[];\n\n constructor(message: string = 'Method not allowed', allowedMethods?: string[], options?: ErrorOptions) {\n super(message, 'VALIDATION_ERROR', HTTP_STATUS.METHOD_NOT_ALLOWED, options);\n this.allowedMethods = allowedMethods;\n }\n}\n\nexport class RateLimitError extends SdkError {\n public readonly retryAfter?: number;\n\n constructor(message: string = 'Rate limit exceeded', retryAfter?: number, options?: ErrorOptions) {\n super(message, 'RATE_LIMIT', HTTP_STATUS.TOO_MANY_REQUESTS, options);\n this.retryAfter = retryAfter;\n }\n\n toJSON(): Record<string, unknown> {\n return { ...super.toJSON(), retryAfter: this.retryAfter };\n }\n}\n\nexport class ServerError extends SdkError {\n constructor(message: string = 'Server error', httpStatus: number = HTTP_STATUS.INTERNAL_SERVER_ERROR, options?: ErrorOptions) {\n super(message, 'SERVER_ERROR', httpStatus, options);\n }\n}\n\nexport class BadGatewayError extends ServerError {\n constructor(message: string = 'Bad gateway', options?: ErrorOptions) {\n super(message, HTTP_STATUS.BAD_GATEWAY, options);\n (this as { code: ErrorCode }).code = 'BAD_GATEWAY';\n }\n}\n\nexport class ServiceUnavailableError extends ServerError {\n constructor(message: string = 'Service unavailable', options?: ErrorOptions) {\n super(message, HTTP_STATUS.SERVICE_UNAVAILABLE, options);\n (this as { code: ErrorCode }).code = 'SERVICE_UNAVAILABLE';\n }\n}\n\nexport class GatewayTimeoutError extends ServerError {\n constructor(message: string = 'Gateway timeout', options?: ErrorOptions) {\n super(message, HTTP_STATUS.GATEWAY_TIMEOUT, options);\n (this as { code: ErrorCode }).code = 'GATEWAY_TIMEOUT';\n }\n}\n\nexport class BusinessError extends SdkError {\n public readonly businessCode?: string | number;\n public readonly data?: unknown;\n\n constructor(message: string, code?: string | number, data?: unknown, options?: ErrorOptions) {\n super(message, 'BUSINESS_ERROR', undefined, options);\n this.businessCode = code;\n this.data = data;\n }\n\n toJSON(): Record<string, unknown> {\n return { ...super.toJSON(), businessCode: this.businessCode, data: this.data };\n }\n}\n\nexport function isSdkError(error: unknown): error is SdkError {\n return error instanceof SdkError;\n}\n\nexport function isNetworkError(error: unknown): error is NetworkError {\n return error instanceof NetworkError;\n}\n\nexport function isTimeoutError(error: unknown): error is TimeoutError {\n return error instanceof TimeoutError;\n}\n\nexport function isCancelledError(error: unknown): error is CancelledError {\n return error instanceof CancelledError;\n}\n\nexport function isAuthError(error: unknown): error is AuthenticationError {\n return error instanceof AuthenticationError;\n}\n\nexport function isValidationError(error: unknown): error is ValidationError {\n return error instanceof ValidationError;\n}\n\nexport function isRateLimitError(error: unknown): error is RateLimitError {\n return error instanceof RateLimitError;\n}\n\nexport function isServerError(error: unknown): error is ServerError {\n return error instanceof ServerError;\n}\n\nexport function isBusinessError(error: unknown): error is BusinessError {\n return error instanceof BusinessError;\n}\n\nexport function isRetryableError(error: unknown): boolean {\n if (!(error instanceof SdkError)) return false;\n \n return (\n error instanceof NetworkError ||\n error instanceof TimeoutError ||\n error instanceof ServerError ||\n error instanceof RateLimitError ||\n error instanceof BadGatewayError ||\n error instanceof ServiceUnavailableError ||\n error instanceof GatewayTimeoutError\n );\n}\n"],"names":["HTTP_STATUS"],"mappings":"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"}
package/dist/errors.js CHANGED
@@ -1,23 +1,20 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
1
  import { HTTP_STATUS } from "./core/types.js";
5
2
  class SdkError extends Error {
3
+ code;
4
+ httpStatus;
5
+ details;
6
+ timestamp;
7
+ traceId;
8
+ metadata;
6
9
  constructor(message, code = "UNKNOWN", httpStatus, options) {
7
- super(message, { cause: options == null ? void 0 : options.cause });
8
- __publicField(this, "code");
9
- __publicField(this, "httpStatus");
10
- __publicField(this, "details");
11
- __publicField(this, "timestamp");
12
- __publicField(this, "traceId");
13
- __publicField(this, "metadata");
10
+ super(message, { cause: options?.cause });
14
11
  this.name = this.constructor.name;
15
12
  this.code = code;
16
13
  this.httpStatus = httpStatus;
17
- this.details = options == null ? void 0 : options.details;
14
+ this.details = options?.details;
18
15
  this.timestamp = Date.now();
19
- this.traceId = options == null ? void 0 : options.traceId;
20
- this.metadata = options == null ? void 0 : options.metadata;
16
+ this.traceId = options?.traceId;
17
+ this.metadata = options?.metadata;
21
18
  Object.setPrototypeOf(this, new.target.prototype);
22
19
  }
23
20
  static fromApiResult(result, httpStatus) {
@@ -119,9 +116,9 @@ class NetworkError extends SdkError {
119
116
  }
120
117
  }
121
118
  class TimeoutError extends SdkError {
119
+ timeout;
122
120
  constructor(message = "Request timeout", timeout, options) {
123
121
  super(message, "TIMEOUT", void 0, options);
124
- __publicField(this, "timeout");
125
122
  this.timeout = timeout;
126
123
  }
127
124
  toJSON() {
@@ -171,16 +168,16 @@ class ConflictError extends SdkError {
171
168
  }
172
169
  }
173
170
  class MethodNotAllowedError extends SdkError {
171
+ allowedMethods;
174
172
  constructor(message = "Method not allowed", allowedMethods, options) {
175
173
  super(message, "VALIDATION_ERROR", HTTP_STATUS.METHOD_NOT_ALLOWED, options);
176
- __publicField(this, "allowedMethods");
177
174
  this.allowedMethods = allowedMethods;
178
175
  }
179
176
  }
180
177
  class RateLimitError extends SdkError {
178
+ retryAfter;
181
179
  constructor(message = "Rate limit exceeded", retryAfter, options) {
182
180
  super(message, "RATE_LIMIT", HTTP_STATUS.TOO_MANY_REQUESTS, options);
183
- __publicField(this, "retryAfter");
184
181
  this.retryAfter = retryAfter;
185
182
  }
186
183
  toJSON() {
@@ -211,10 +208,10 @@ class GatewayTimeoutError extends ServerError {
211
208
  }
212
209
  }
213
210
  class BusinessError extends SdkError {
211
+ businessCode;
212
+ data;
214
213
  constructor(message, code, data, options) {
215
214
  super(message, "BUSINESS_ERROR", void 0, options);
216
- __publicField(this, "businessCode");
217
- __publicField(this, "data");
218
215
  this.businessCode = code;
219
216
  this.data = data;
220
217
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sources":["../src/errors/index.ts"],"sourcesContent":["import type { ApiResult } from '../core/types';\nimport { HTTP_STATUS } from '../core/types';\n\nexport type ErrorCode = \n | 'UNKNOWN'\n | 'NETWORK_ERROR'\n | 'TIMEOUT'\n | 'CANCELLED'\n | 'UNAUTHORIZED'\n | 'FORBIDDEN'\n | 'NOT_FOUND'\n | 'VALIDATION_ERROR'\n | 'RATE_LIMIT'\n | 'SERVER_ERROR'\n | 'TOKEN_EXPIRED'\n | 'TOKEN_INVALID'\n | 'BUSINESS_ERROR'\n | 'CONFLICT'\n | 'SERVICE_UNAVAILABLE'\n | 'BAD_GATEWAY'\n | 'GATEWAY_TIMEOUT';\n\nexport interface ErrorDetail {\n field?: string;\n message?: string;\n value?: unknown;\n code?: string;\n constraint?: string;\n}\n\nexport interface ErrorOptions {\n cause?: Error;\n details?: ErrorDetail[];\n traceId?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport class SdkError extends Error {\n public readonly code: ErrorCode;\n public readonly httpStatus?: number;\n public readonly details?: ErrorDetail[];\n public readonly timestamp: number;\n public readonly traceId?: string;\n public readonly metadata?: Record<string, unknown>;\n\n constructor(\n message: string,\n code: ErrorCode = 'UNKNOWN',\n httpStatus?: number,\n options?: ErrorOptions\n ) {\n super(message, { cause: options?.cause });\n this.name = this.constructor.name;\n this.code = code;\n this.httpStatus = httpStatus;\n this.details = options?.details;\n this.timestamp = Date.now();\n this.traceId = options?.traceId;\n this.metadata = options?.metadata;\n \n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static fromApiResult(result: ApiResult, httpStatus?: number): SdkError {\n const code = String(result.code);\n const message = result.msg || result.message || 'Unknown error';\n \n switch (code) {\n case '400':\n case '4000':\n return new ValidationError(message);\n case '401':\n case '4010':\n return new AuthenticationError(message);\n case '403':\n case '4030':\n return new ForbiddenError(message);\n case '404':\n case '4040':\n return new NotFoundError(message);\n case '409':\n case '4090':\n return new ConflictError(message);\n case '429':\n case '4290':\n return new RateLimitError(message);\n default:\n if (code.startsWith('5')) {\n return new ServerError(message, httpStatus ?? HTTP_STATUS.INTERNAL_SERVER_ERROR);\n }\n return new BusinessError(message, result.code, result.data);\n }\n }\n\n static fromHttpStatus(status: number, message?: string): SdkError {\n const defaultMessage = message ?? `HTTP Error ${status}`;\n \n switch (status) {\n case HTTP_STATUS.BAD_REQUEST:\n case HTTP_STATUS.UNPROCESSABLE_ENTITY:\n return new ValidationError(defaultMessage);\n case HTTP_STATUS.UNAUTHORIZED:\n return new AuthenticationError(defaultMessage);\n case HTTP_STATUS.FORBIDDEN:\n return new ForbiddenError(defaultMessage);\n case HTTP_STATUS.NOT_FOUND:\n return new NotFoundError(defaultMessage);\n case HTTP_STATUS.METHOD_NOT_ALLOWED:\n return new ValidationError(defaultMessage);\n case HTTP_STATUS.CONFLICT:\n return new ConflictError(defaultMessage);\n case HTTP_STATUS.TOO_MANY_REQUESTS:\n return new RateLimitError(defaultMessage);\n case HTTP_STATUS.INTERNAL_SERVER_ERROR:\n return new ServerError(defaultMessage, status);\n case HTTP_STATUS.BAD_GATEWAY:\n return new BadGatewayError(defaultMessage);\n case HTTP_STATUS.SERVICE_UNAVAILABLE:\n return new ServiceUnavailableError(defaultMessage);\n case HTTP_STATUS.GATEWAY_TIMEOUT:\n return new GatewayTimeoutError(defaultMessage);\n default:\n if (status >= 500) {\n return new ServerError(defaultMessage, status);\n }\n return new NetworkError(defaultMessage);\n }\n }\n\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n httpStatus: this.httpStatus,\n details: this.details,\n timestamp: this.timestamp,\n traceId: this.traceId,\n metadata: this.metadata,\n };\n }\n\n toString(): string {\n return `${this.name}: ${this.message} (code: ${this.code})`;\n }\n\n isRetryable(): boolean {\n return isRetryableError(this);\n }\n\n isAuthError(): boolean {\n return this.code === 'UNAUTHORIZED' || this.code === 'TOKEN_EXPIRED' || this.code === 'TOKEN_INVALID';\n }\n\n isNetworkError(): boolean {\n return this.code === 'NETWORK_ERROR' || this.code === 'TIMEOUT';\n }\n\n isClientError(): boolean {\n return this.httpStatus !== undefined && this.httpStatus >= 400 && this.httpStatus < 500;\n }\n\n isServerError(): boolean {\n return this.httpStatus !== undefined && this.httpStatus >= 500;\n }\n}\n\nexport class NetworkError extends SdkError {\n constructor(message: string = 'Network error', options?: ErrorOptions) {\n super(message, 'NETWORK_ERROR', undefined, options);\n }\n}\n\nexport class TimeoutError extends SdkError {\n public readonly timeout?: number;\n\n constructor(message: string = 'Request timeout', timeout?: number, options?: ErrorOptions) {\n super(message, 'TIMEOUT', undefined, options);\n this.timeout = timeout;\n }\n\n toJSON(): Record<string, unknown> {\n return { ...super.toJSON(), timeout: this.timeout };\n }\n}\n\nexport class CancelledError extends SdkError {\n constructor(message: string = 'Request cancelled', options?: ErrorOptions) {\n super(message, 'CANCELLED', undefined, options);\n }\n}\n\nexport class AuthenticationError extends SdkError {\n constructor(message: string = 'Authentication failed', options?: ErrorOptions) {\n super(message, 'UNAUTHORIZED', HTTP_STATUS.UNAUTHORIZED, options);\n }\n}\n\nexport class TokenExpiredError extends AuthenticationError {\n constructor(message: string = 'Token expired', options?: ErrorOptions) {\n super(message, options);\n (this as { code: ErrorCode }).code = 'TOKEN_EXPIRED';\n }\n}\n\nexport class TokenInvalidError extends AuthenticationError {\n constructor(message: string = 'Invalid token', options?: ErrorOptions) {\n super(message, options);\n (this as { code: ErrorCode }).code = 'TOKEN_INVALID';\n }\n}\n\nexport class ForbiddenError extends SdkError {\n constructor(message: string = 'Access forbidden', options?: ErrorOptions) {\n super(message, 'FORBIDDEN', HTTP_STATUS.FORBIDDEN, options);\n }\n}\n\nexport class NotFoundError extends SdkError {\n constructor(message: string = 'Resource not found', options?: ErrorOptions) {\n super(message, 'NOT_FOUND', HTTP_STATUS.NOT_FOUND, options);\n }\n}\n\nexport class ValidationError extends SdkError {\n constructor(message: string = 'Validation error', details?: ErrorDetail[], options?: ErrorOptions) {\n super(message, 'VALIDATION_ERROR', HTTP_STATUS.BAD_REQUEST, { ...options, details });\n }\n}\n\nexport class ConflictError extends SdkError {\n constructor(message: string = 'Resource conflict', options?: ErrorOptions) {\n super(message, 'CONFLICT', HTTP_STATUS.CONFLICT, options);\n }\n}\n\nexport class MethodNotAllowedError extends SdkError {\n public readonly allowedMethods?: string[];\n\n constructor(message: string = 'Method not allowed', allowedMethods?: string[], options?: ErrorOptions) {\n super(message, 'VALIDATION_ERROR', HTTP_STATUS.METHOD_NOT_ALLOWED, options);\n this.allowedMethods = allowedMethods;\n }\n}\n\nexport class RateLimitError extends SdkError {\n public readonly retryAfter?: number;\n\n constructor(message: string = 'Rate limit exceeded', retryAfter?: number, options?: ErrorOptions) {\n super(message, 'RATE_LIMIT', HTTP_STATUS.TOO_MANY_REQUESTS, options);\n this.retryAfter = retryAfter;\n }\n\n toJSON(): Record<string, unknown> {\n return { ...super.toJSON(), retryAfter: this.retryAfter };\n }\n}\n\nexport class ServerError extends SdkError {\n constructor(message: string = 'Server error', httpStatus: number = HTTP_STATUS.INTERNAL_SERVER_ERROR, options?: ErrorOptions) {\n super(message, 'SERVER_ERROR', httpStatus, options);\n }\n}\n\nexport class BadGatewayError extends ServerError {\n constructor(message: string = 'Bad gateway', options?: ErrorOptions) {\n super(message, HTTP_STATUS.BAD_GATEWAY, options);\n (this as { code: ErrorCode }).code = 'BAD_GATEWAY';\n }\n}\n\nexport class ServiceUnavailableError extends ServerError {\n constructor(message: string = 'Service unavailable', options?: ErrorOptions) {\n super(message, HTTP_STATUS.SERVICE_UNAVAILABLE, options);\n (this as { code: ErrorCode }).code = 'SERVICE_UNAVAILABLE';\n }\n}\n\nexport class GatewayTimeoutError extends ServerError {\n constructor(message: string = 'Gateway timeout', options?: ErrorOptions) {\n super(message, HTTP_STATUS.GATEWAY_TIMEOUT, options);\n (this as { code: ErrorCode }).code = 'GATEWAY_TIMEOUT';\n }\n}\n\nexport class BusinessError extends SdkError {\n public readonly businessCode?: string | number;\n public readonly data?: unknown;\n\n constructor(message: string, code?: string | number, data?: unknown, options?: ErrorOptions) {\n super(message, 'BUSINESS_ERROR', undefined, options);\n this.businessCode = code;\n this.data = data;\n }\n\n toJSON(): Record<string, unknown> {\n return { ...super.toJSON(), businessCode: this.businessCode, data: this.data };\n }\n}\n\nexport function isSdkError(error: unknown): error is SdkError {\n return error instanceof SdkError;\n}\n\nexport function isNetworkError(error: unknown): error is NetworkError {\n return error instanceof NetworkError;\n}\n\nexport function isTimeoutError(error: unknown): error is TimeoutError {\n return error instanceof TimeoutError;\n}\n\nexport function isCancelledError(error: unknown): error is CancelledError {\n return error instanceof CancelledError;\n}\n\nexport function isAuthError(error: unknown): error is AuthenticationError {\n return error instanceof AuthenticationError;\n}\n\nexport function isValidationError(error: unknown): error is ValidationError {\n return error instanceof ValidationError;\n}\n\nexport function isRateLimitError(error: unknown): error is RateLimitError {\n return error instanceof RateLimitError;\n}\n\nexport function isServerError(error: unknown): error is ServerError {\n return error instanceof ServerError;\n}\n\nexport function isBusinessError(error: unknown): error is BusinessError {\n return error instanceof BusinessError;\n}\n\nexport function isRetryableError(error: unknown): boolean {\n if (!(error instanceof SdkError)) return false;\n \n return (\n error instanceof NetworkError ||\n error instanceof TimeoutError ||\n error instanceof ServerError ||\n error instanceof RateLimitError ||\n error instanceof BadGatewayError ||\n error instanceof ServiceUnavailableError ||\n error instanceof GatewayTimeoutError\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sources":["../src/errors/index.ts"],"sourcesContent":["import type { ApiResult } from '../core/types';\nimport { HTTP_STATUS } from '../core/types';\n\nexport type ErrorCode = \n | 'UNKNOWN'\n | 'NETWORK_ERROR'\n | 'TIMEOUT'\n | 'CANCELLED'\n | 'UNAUTHORIZED'\n | 'FORBIDDEN'\n | 'NOT_FOUND'\n | 'VALIDATION_ERROR'\n | 'RATE_LIMIT'\n | 'SERVER_ERROR'\n | 'TOKEN_EXPIRED'\n | 'TOKEN_INVALID'\n | 'BUSINESS_ERROR'\n | 'CONFLICT'\n | 'SERVICE_UNAVAILABLE'\n | 'BAD_GATEWAY'\n | 'GATEWAY_TIMEOUT';\n\nexport interface ErrorDetail {\n field?: string;\n message?: string;\n value?: unknown;\n code?: string;\n constraint?: string;\n}\n\nexport interface ErrorOptions {\n cause?: Error;\n details?: ErrorDetail[];\n traceId?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport class SdkError extends Error {\n public readonly code: ErrorCode;\n public readonly httpStatus?: number;\n public readonly details?: ErrorDetail[];\n public readonly timestamp: number;\n public readonly traceId?: string;\n public readonly metadata?: Record<string, unknown>;\n\n constructor(\n message: string,\n code: ErrorCode = 'UNKNOWN',\n httpStatus?: number,\n options?: ErrorOptions\n ) {\n super(message, { cause: options?.cause });\n this.name = this.constructor.name;\n this.code = code;\n this.httpStatus = httpStatus;\n this.details = options?.details;\n this.timestamp = Date.now();\n this.traceId = options?.traceId;\n this.metadata = options?.metadata;\n \n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static fromApiResult(result: ApiResult, httpStatus?: number): SdkError {\n const code = String(result.code);\n const message = result.msg || result.message || 'Unknown error';\n \n switch (code) {\n case '400':\n case '4000':\n return new ValidationError(message);\n case '401':\n case '4010':\n return new AuthenticationError(message);\n case '403':\n case '4030':\n return new ForbiddenError(message);\n case '404':\n case '4040':\n return new NotFoundError(message);\n case '409':\n case '4090':\n return new ConflictError(message);\n case '429':\n case '4290':\n return new RateLimitError(message);\n default:\n if (code.startsWith('5')) {\n return new ServerError(message, httpStatus ?? HTTP_STATUS.INTERNAL_SERVER_ERROR);\n }\n return new BusinessError(message, result.code, result.data);\n }\n }\n\n static fromHttpStatus(status: number, message?: string): SdkError {\n const defaultMessage = message ?? `HTTP Error ${status}`;\n \n switch (status) {\n case HTTP_STATUS.BAD_REQUEST:\n case HTTP_STATUS.UNPROCESSABLE_ENTITY:\n return new ValidationError(defaultMessage);\n case HTTP_STATUS.UNAUTHORIZED:\n return new AuthenticationError(defaultMessage);\n case HTTP_STATUS.FORBIDDEN:\n return new ForbiddenError(defaultMessage);\n case HTTP_STATUS.NOT_FOUND:\n return new NotFoundError(defaultMessage);\n case HTTP_STATUS.METHOD_NOT_ALLOWED:\n return new ValidationError(defaultMessage);\n case HTTP_STATUS.CONFLICT:\n return new ConflictError(defaultMessage);\n case HTTP_STATUS.TOO_MANY_REQUESTS:\n return new RateLimitError(defaultMessage);\n case HTTP_STATUS.INTERNAL_SERVER_ERROR:\n return new ServerError(defaultMessage, status);\n case HTTP_STATUS.BAD_GATEWAY:\n return new BadGatewayError(defaultMessage);\n case HTTP_STATUS.SERVICE_UNAVAILABLE:\n return new ServiceUnavailableError(defaultMessage);\n case HTTP_STATUS.GATEWAY_TIMEOUT:\n return new GatewayTimeoutError(defaultMessage);\n default:\n if (status >= 500) {\n return new ServerError(defaultMessage, status);\n }\n return new NetworkError(defaultMessage);\n }\n }\n\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n httpStatus: this.httpStatus,\n details: this.details,\n timestamp: this.timestamp,\n traceId: this.traceId,\n metadata: this.metadata,\n };\n }\n\n toString(): string {\n return `${this.name}: ${this.message} (code: ${this.code})`;\n }\n\n isRetryable(): boolean {\n return isRetryableError(this);\n }\n\n isAuthError(): boolean {\n return this.code === 'UNAUTHORIZED' || this.code === 'TOKEN_EXPIRED' || this.code === 'TOKEN_INVALID';\n }\n\n isNetworkError(): boolean {\n return this.code === 'NETWORK_ERROR' || this.code === 'TIMEOUT';\n }\n\n isClientError(): boolean {\n return this.httpStatus !== undefined && this.httpStatus >= 400 && this.httpStatus < 500;\n }\n\n isServerError(): boolean {\n return this.httpStatus !== undefined && this.httpStatus >= 500;\n }\n}\n\nexport class NetworkError extends SdkError {\n constructor(message: string = 'Network error', options?: ErrorOptions) {\n super(message, 'NETWORK_ERROR', undefined, options);\n }\n}\n\nexport class TimeoutError extends SdkError {\n public readonly timeout?: number;\n\n constructor(message: string = 'Request timeout', timeout?: number, options?: ErrorOptions) {\n super(message, 'TIMEOUT', undefined, options);\n this.timeout = timeout;\n }\n\n toJSON(): Record<string, unknown> {\n return { ...super.toJSON(), timeout: this.timeout };\n }\n}\n\nexport class CancelledError extends SdkError {\n constructor(message: string = 'Request cancelled', options?: ErrorOptions) {\n super(message, 'CANCELLED', undefined, options);\n }\n}\n\nexport class AuthenticationError extends SdkError {\n constructor(message: string = 'Authentication failed', options?: ErrorOptions) {\n super(message, 'UNAUTHORIZED', HTTP_STATUS.UNAUTHORIZED, options);\n }\n}\n\nexport class TokenExpiredError extends AuthenticationError {\n constructor(message: string = 'Token expired', options?: ErrorOptions) {\n super(message, options);\n (this as { code: ErrorCode }).code = 'TOKEN_EXPIRED';\n }\n}\n\nexport class TokenInvalidError extends AuthenticationError {\n constructor(message: string = 'Invalid token', options?: ErrorOptions) {\n super(message, options);\n (this as { code: ErrorCode }).code = 'TOKEN_INVALID';\n }\n}\n\nexport class ForbiddenError extends SdkError {\n constructor(message: string = 'Access forbidden', options?: ErrorOptions) {\n super(message, 'FORBIDDEN', HTTP_STATUS.FORBIDDEN, options);\n }\n}\n\nexport class NotFoundError extends SdkError {\n constructor(message: string = 'Resource not found', options?: ErrorOptions) {\n super(message, 'NOT_FOUND', HTTP_STATUS.NOT_FOUND, options);\n }\n}\n\nexport class ValidationError extends SdkError {\n constructor(message: string = 'Validation error', details?: ErrorDetail[], options?: ErrorOptions) {\n super(message, 'VALIDATION_ERROR', HTTP_STATUS.BAD_REQUEST, { ...options, details });\n }\n}\n\nexport class ConflictError extends SdkError {\n constructor(message: string = 'Resource conflict', options?: ErrorOptions) {\n super(message, 'CONFLICT', HTTP_STATUS.CONFLICT, options);\n }\n}\n\nexport class MethodNotAllowedError extends SdkError {\n public readonly allowedMethods?: string[];\n\n constructor(message: string = 'Method not allowed', allowedMethods?: string[], options?: ErrorOptions) {\n super(message, 'VALIDATION_ERROR', HTTP_STATUS.METHOD_NOT_ALLOWED, options);\n this.allowedMethods = allowedMethods;\n }\n}\n\nexport class RateLimitError extends SdkError {\n public readonly retryAfter?: number;\n\n constructor(message: string = 'Rate limit exceeded', retryAfter?: number, options?: ErrorOptions) {\n super(message, 'RATE_LIMIT', HTTP_STATUS.TOO_MANY_REQUESTS, options);\n this.retryAfter = retryAfter;\n }\n\n toJSON(): Record<string, unknown> {\n return { ...super.toJSON(), retryAfter: this.retryAfter };\n }\n}\n\nexport class ServerError extends SdkError {\n constructor(message: string = 'Server error', httpStatus: number = HTTP_STATUS.INTERNAL_SERVER_ERROR, options?: ErrorOptions) {\n super(message, 'SERVER_ERROR', httpStatus, options);\n }\n}\n\nexport class BadGatewayError extends ServerError {\n constructor(message: string = 'Bad gateway', options?: ErrorOptions) {\n super(message, HTTP_STATUS.BAD_GATEWAY, options);\n (this as { code: ErrorCode }).code = 'BAD_GATEWAY';\n }\n}\n\nexport class ServiceUnavailableError extends ServerError {\n constructor(message: string = 'Service unavailable', options?: ErrorOptions) {\n super(message, HTTP_STATUS.SERVICE_UNAVAILABLE, options);\n (this as { code: ErrorCode }).code = 'SERVICE_UNAVAILABLE';\n }\n}\n\nexport class GatewayTimeoutError extends ServerError {\n constructor(message: string = 'Gateway timeout', options?: ErrorOptions) {\n super(message, HTTP_STATUS.GATEWAY_TIMEOUT, options);\n (this as { code: ErrorCode }).code = 'GATEWAY_TIMEOUT';\n }\n}\n\nexport class BusinessError extends SdkError {\n public readonly businessCode?: string | number;\n public readonly data?: unknown;\n\n constructor(message: string, code?: string | number, data?: unknown, options?: ErrorOptions) {\n super(message, 'BUSINESS_ERROR', undefined, options);\n this.businessCode = code;\n this.data = data;\n }\n\n toJSON(): Record<string, unknown> {\n return { ...super.toJSON(), businessCode: this.businessCode, data: this.data };\n }\n}\n\nexport function isSdkError(error: unknown): error is SdkError {\n return error instanceof SdkError;\n}\n\nexport function isNetworkError(error: unknown): error is NetworkError {\n return error instanceof NetworkError;\n}\n\nexport function isTimeoutError(error: unknown): error is TimeoutError {\n return error instanceof TimeoutError;\n}\n\nexport function isCancelledError(error: unknown): error is CancelledError {\n return error instanceof CancelledError;\n}\n\nexport function isAuthError(error: unknown): error is AuthenticationError {\n return error instanceof AuthenticationError;\n}\n\nexport function isValidationError(error: unknown): error is ValidationError {\n return error instanceof ValidationError;\n}\n\nexport function isRateLimitError(error: unknown): error is RateLimitError {\n return error instanceof RateLimitError;\n}\n\nexport function isServerError(error: unknown): error is ServerError {\n return error instanceof ServerError;\n}\n\nexport function isBusinessError(error: unknown): error is BusinessError {\n return error instanceof BusinessError;\n}\n\nexport function isRetryableError(error: unknown): boolean {\n if (!(error instanceof SdkError)) return false;\n \n return (\n error instanceof NetworkError ||\n error instanceof TimeoutError ||\n error instanceof ServerError ||\n error instanceof RateLimitError ||\n error instanceof BadGatewayError ||\n error instanceof ServiceUnavailableError ||\n error instanceof GatewayTimeoutError\n );\n}\n"],"names":[],"mappings":"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"}