@sdkwork/sdk-common 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/README.md +89 -0
  2. package/dist/auth/index.d.ts +3 -0
  3. package/dist/auth/index.d.ts.map +1 -0
  4. package/dist/auth/token-manager.cjs +127 -0
  5. package/dist/auth/token-manager.cjs.map +1 -0
  6. package/dist/auth/token-manager.d.ts +80 -0
  7. package/dist/auth/token-manager.d.ts.map +1 -0
  8. package/dist/auth/token-manager.js +127 -0
  9. package/dist/auth/token-manager.js.map +1 -0
  10. package/dist/auth.cjs +9 -0
  11. package/dist/auth.cjs.map +1 -0
  12. package/dist/auth.js +9 -0
  13. package/dist/auth.js.map +1 -0
  14. package/dist/core/index.d.ts +3 -0
  15. package/dist/core/index.d.ts.map +1 -0
  16. package/dist/core/types.cjs +54 -0
  17. package/dist/core/types.cjs.map +1 -0
  18. package/dist/core/types.d.ts +187 -0
  19. package/dist/core/types.d.ts.map +1 -0
  20. package/dist/core/types.js +54 -0
  21. package/dist/core/types.js.map +1 -0
  22. package/dist/core.cjs +11 -0
  23. package/dist/core.cjs.map +1 -0
  24. package/dist/core.js +11 -0
  25. package/dist/core.js.map +1 -0
  26. package/dist/errors/index.d.ts +103 -0
  27. package/dist/errors/index.d.ts.map +1 -0
  28. package/dist/errors.cjs +286 -0
  29. package/dist/errors.cjs.map +1 -0
  30. package/dist/errors.js +286 -0
  31. package/dist/errors.js.map +1 -0
  32. package/dist/http/base-client.cjs +485 -0
  33. package/dist/http/base-client.cjs.map +1 -0
  34. package/dist/http/base-client.d.ts +98 -0
  35. package/dist/http/base-client.d.ts.map +1 -0
  36. package/dist/http/base-client.js +485 -0
  37. package/dist/http/base-client.js.map +1 -0
  38. package/dist/http/index.d.ts +2 -0
  39. package/dist/http/index.d.ts.map +1 -0
  40. package/dist/http.cjs +6 -0
  41. package/dist/http.cjs.map +1 -0
  42. package/dist/http.js +6 -0
  43. package/dist/http.js.map +1 -0
  44. package/dist/index.cjs +48 -0
  45. package/dist/index.cjs.map +1 -0
  46. package/dist/index.d.ts +11 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +48 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/utils/array.d.ts +146 -0
  51. package/dist/utils/array.d.ts.map +1 -0
  52. package/dist/utils/cache.cjs +80 -0
  53. package/dist/utils/cache.cjs.map +1 -0
  54. package/dist/utils/cache.d.ts +25 -0
  55. package/dist/utils/cache.d.ts.map +1 -0
  56. package/dist/utils/cache.js +80 -0
  57. package/dist/utils/cache.js.map +1 -0
  58. package/dist/utils/date.cjs +25 -0
  59. package/dist/utils/date.cjs.map +1 -0
  60. package/dist/utils/date.d.ts +127 -0
  61. package/dist/utils/date.d.ts.map +1 -0
  62. package/dist/utils/date.js +25 -0
  63. package/dist/utils/date.js.map +1 -0
  64. package/dist/utils/encoding.cjs +678 -0
  65. package/dist/utils/encoding.cjs.map +1 -0
  66. package/dist/utils/encoding.d.ts +107 -0
  67. package/dist/utils/encoding.d.ts.map +1 -0
  68. package/dist/utils/encoding.js +679 -0
  69. package/dist/utils/encoding.js.map +1 -0
  70. package/dist/utils/index.d.ts +11 -0
  71. package/dist/utils/index.d.ts.map +1 -0
  72. package/dist/utils/logger.cjs +110 -0
  73. package/dist/utils/logger.cjs.map +1 -0
  74. package/dist/utils/logger.d.ts +28 -0
  75. package/dist/utils/logger.d.ts.map +1 -0
  76. package/dist/utils/logger.js +110 -0
  77. package/dist/utils/logger.js.map +1 -0
  78. package/dist/utils/object.d.ts +131 -0
  79. package/dist/utils/object.d.ts.map +1 -0
  80. package/dist/utils/retry.cjs +73 -0
  81. package/dist/utils/retry.cjs.map +1 -0
  82. package/dist/utils/retry.d.ts +9 -0
  83. package/dist/utils/retry.d.ts.map +1 -0
  84. package/dist/utils/retry.js +73 -0
  85. package/dist/utils/retry.js.map +1 -0
  86. package/dist/utils/string.cjs +820 -0
  87. package/dist/utils/string.cjs.map +1 -0
  88. package/dist/utils/string.d.ts +160 -0
  89. package/dist/utils/string.d.ts.map +1 -0
  90. package/dist/utils/string.js +821 -0
  91. package/dist/utils/string.js.map +1 -0
  92. package/dist/utils/url.d.ts +106 -0
  93. package/dist/utils/url.d.ts.map +1 -0
  94. package/dist/utils/validation.d.ts +157 -0
  95. package/dist/utils/validation.d.ts.map +1 -0
  96. package/dist/utils.cjs +52 -0
  97. package/dist/utils.cjs.map +1 -0
  98. package/dist/utils.js +46 -0
  99. package/dist/utils.js.map +1 -0
  100. package/package.json +80 -0
package/README.md ADDED
@@ -0,0 +1,89 @@
1
+ # @sdkwork/sdk-common
2
+
3
+ Common foundation package for generated TypeScript SDKs.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @sdkwork/sdk-common
9
+ ```
10
+
11
+ ## Authentication Modes
12
+
13
+ Choose one mode per client instance.
14
+
15
+ 1. API Key mode
16
+ - `Authorization: Bearer {apiKey}`
17
+
18
+ 2. Dual-token mode
19
+ - `Access-Token: {accessToken}`
20
+ - `Authorization: Bearer {authToken}`
21
+
22
+ ## Quick Start
23
+
24
+ ```typescript
25
+ import { createBaseHttpClient } from '@sdkwork/sdk-common/http';
26
+ import { createTokenManager } from '@sdkwork/sdk-common';
27
+
28
+ const tokenManager = createTokenManager({
29
+ accessToken: 'your-access-token',
30
+ authToken: 'your-auth-token',
31
+ });
32
+
33
+ const client = createBaseHttpClient({
34
+ baseUrl: 'https://api.example.com',
35
+ tokenManager,
36
+ });
37
+
38
+ const profile = await client.get<{ id: string; name: string }>('/v1/profile');
39
+ console.log(profile.name);
40
+ ```
41
+
42
+ API key mode example:
43
+
44
+ ```typescript
45
+ import { createBaseHttpClient } from '@sdkwork/sdk-common/http';
46
+
47
+ const client = createBaseHttpClient({
48
+ baseUrl: 'https://api.example.com',
49
+ apiKey: 'your-api-key',
50
+ });
51
+ ```
52
+
53
+ ## Exported Modules
54
+
55
+ - `core`: request/result types, constants, retry/cache/logger config types
56
+ - `auth`: token manager and auth header builder
57
+ - `http`: `BaseHttpClient` and `createBaseHttpClient`
58
+ - `errors`: SDK error hierarchy and type guards
59
+ - `utils`: retry, cache, logger, string/encoding/date/object helpers
60
+
61
+
62
+ ## Publishing
63
+
64
+ This SDK includes cross-platform publish scripts in `bin/`:
65
+ - `bin/publish-core.mjs`
66
+ - `bin/publish.sh`
67
+ - `bin/publish.ps1`
68
+
69
+ ### Check
70
+
71
+ ```bash
72
+ ./bin/publish.sh --action check
73
+ ```
74
+
75
+ ### Publish
76
+
77
+ ```bash
78
+ ./bin/publish.sh --action publish --channel release
79
+ ```
80
+
81
+ ```powershell
82
+ .\bin\publish.ps1 --action publish --channel test --dry-run
83
+ ```
84
+
85
+ > Set `NPM_TOKEN` (and optional `NPM_REGISTRY_URL`) before release publish.
86
+
87
+ ## License
88
+
89
+ MIT
@@ -0,0 +1,3 @@
1
+ export { DefaultAuthTokenManager, createTokenManager, buildAuthHeaders, isTokenValid, requiresRefresh, } from './token-manager';
2
+ export type { AuthTokens, TokenManagerEvents, AuthTokenManager, AuthMode, AuthConfig, OAuthConfig, OAuthTokens, } from './token-manager';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,QAAQ,EACR,UAAU,EACV,WAAW,EACX,WAAW,GACZ,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,127 @@
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
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
6
+ class DefaultAuthTokenManager {
7
+ constructor(initialTokens, events) {
8
+ __publicField(this, "tokens", {});
9
+ __publicField(this, "events");
10
+ if (initialTokens) {
11
+ this.tokens = { ...initialTokens };
12
+ if (initialTokens.expiresIn && !initialTokens.expiresAt) {
13
+ this.tokens.expiresAt = Date.now() + initialTokens.expiresIn * 1e3;
14
+ }
15
+ }
16
+ this.events = events;
17
+ }
18
+ getAccessToken() {
19
+ return this.tokens.accessToken;
20
+ }
21
+ getAuthToken() {
22
+ return this.tokens.authToken;
23
+ }
24
+ getRefreshToken() {
25
+ return this.tokens.refreshToken;
26
+ }
27
+ getTokens() {
28
+ return { ...this.tokens };
29
+ }
30
+ setTokens(tokens) {
31
+ var _a, _b;
32
+ this.tokens = { ...tokens };
33
+ if (tokens.expiresIn && !tokens.expiresAt) {
34
+ this.tokens.expiresAt = Date.now() + tokens.expiresIn * 1e3;
35
+ }
36
+ (_b = (_a = this.events) == null ? void 0 : _a.onTokenSet) == null ? void 0 : _b.call(_a, this.tokens);
37
+ }
38
+ setAccessToken(token) {
39
+ var _a, _b;
40
+ this.tokens.accessToken = token;
41
+ (_b = (_a = this.events) == null ? void 0 : _a.onTokenSet) == null ? void 0 : _b.call(_a, this.tokens);
42
+ }
43
+ setAuthToken(token) {
44
+ var _a, _b;
45
+ this.tokens.authToken = token;
46
+ (_b = (_a = this.events) == null ? void 0 : _a.onTokenSet) == null ? void 0 : _b.call(_a, this.tokens);
47
+ }
48
+ setRefreshToken(token) {
49
+ this.tokens.refreshToken = token;
50
+ }
51
+ clearTokens() {
52
+ var _a, _b;
53
+ this.tokens = {};
54
+ (_b = (_a = this.events) == null ? void 0 : _a.onTokenCleared) == null ? void 0 : _b.call(_a);
55
+ }
56
+ clearAuthToken() {
57
+ this.tokens.authToken = void 0;
58
+ }
59
+ clearAccessToken() {
60
+ this.tokens.accessToken = void 0;
61
+ }
62
+ isExpired() {
63
+ var _a, _b;
64
+ if (!this.tokens.expiresAt) {
65
+ return false;
66
+ }
67
+ const expired = Date.now() >= this.tokens.expiresAt;
68
+ if (expired) {
69
+ (_b = (_a = this.events) == null ? void 0 : _a.onTokenExpired) == null ? void 0 : _b.call(_a);
70
+ }
71
+ return expired;
72
+ }
73
+ isValid() {
74
+ return this.hasToken() && !this.isExpired();
75
+ }
76
+ hasToken() {
77
+ return !!(this.tokens.accessToken || this.tokens.authToken);
78
+ }
79
+ hasAuthToken() {
80
+ return !!this.tokens.authToken;
81
+ }
82
+ hasAccessToken() {
83
+ return !!this.tokens.accessToken;
84
+ }
85
+ willExpireIn(seconds) {
86
+ if (!this.tokens.expiresAt) {
87
+ return false;
88
+ }
89
+ return Date.now() + seconds * 1e3 >= this.tokens.expiresAt;
90
+ }
91
+ }
92
+ function createTokenManager(tokens, events) {
93
+ return new DefaultAuthTokenManager(tokens, events);
94
+ }
95
+ function buildAuthHeaders(authMode, apiKey, tokenManager) {
96
+ const headers = {};
97
+ if (authMode === "apikey") {
98
+ if (apiKey) {
99
+ headers["Authorization"] = `Bearer ${apiKey}`;
100
+ }
101
+ } else if (authMode === "dual-token") {
102
+ if (tokenManager) {
103
+ const accessToken = tokenManager.getAccessToken();
104
+ const authToken = tokenManager.getAuthToken();
105
+ if (accessToken) {
106
+ headers["Access-Token"] = accessToken;
107
+ }
108
+ if (authToken) {
109
+ headers["Authorization"] = `Bearer ${authToken}`;
110
+ }
111
+ }
112
+ }
113
+ return headers;
114
+ }
115
+ function isTokenValid(manager) {
116
+ return (manager == null ? void 0 : manager.isValid()) ?? false;
117
+ }
118
+ function requiresRefresh(manager, thresholdSeconds = 300) {
119
+ if (!manager) return false;
120
+ return manager.willExpireIn(thresholdSeconds);
121
+ }
122
+ exports.DefaultAuthTokenManager = DefaultAuthTokenManager;
123
+ exports.buildAuthHeaders = buildAuthHeaders;
124
+ exports.createTokenManager = createTokenManager;
125
+ exports.isTokenValid = isTokenValid;
126
+ exports.requiresRefresh = requiresRefresh;
127
+ //# sourceMappingURL=token-manager.cjs.map
@@ -0,0 +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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"}
@@ -0,0 +1,80 @@
1
+ export interface AuthTokens {
2
+ accessToken?: string;
3
+ authToken?: string;
4
+ refreshToken?: string;
5
+ expiresIn?: number;
6
+ expiresAt?: number;
7
+ tokenType?: string;
8
+ scope?: string;
9
+ }
10
+ export interface TokenManagerEvents {
11
+ onTokenRefresh?: (tokens: AuthTokens) => void;
12
+ onTokenExpired?: () => void;
13
+ onTokenCleared?: () => void;
14
+ onTokenSet?: (tokens: AuthTokens) => void;
15
+ onTokenInvalid?: () => void;
16
+ }
17
+ export interface AuthTokenManager {
18
+ getAccessToken(): string | undefined;
19
+ getAuthToken(): string | undefined;
20
+ getRefreshToken(): string | undefined;
21
+ getTokens(): AuthTokens;
22
+ setTokens(tokens: AuthTokens): void;
23
+ setAccessToken(token: string): void;
24
+ setAuthToken(token: string): void;
25
+ setRefreshToken(token: string): void;
26
+ clearTokens(): void;
27
+ clearAuthToken(): void;
28
+ clearAccessToken(): void;
29
+ isExpired(): boolean;
30
+ isValid(): boolean;
31
+ hasToken(): boolean;
32
+ hasAuthToken(): boolean;
33
+ hasAccessToken(): boolean;
34
+ willExpireIn(seconds: number): boolean;
35
+ }
36
+ export type AuthMode = 'apikey' | 'dual-token';
37
+ export interface AuthConfig {
38
+ mode: AuthMode;
39
+ apiKey?: string;
40
+ accessToken?: string;
41
+ authToken?: string;
42
+ tokenManager?: AuthTokenManager;
43
+ }
44
+ export declare class DefaultAuthTokenManager implements AuthTokenManager {
45
+ private tokens;
46
+ private readonly events?;
47
+ constructor(initialTokens?: AuthTokens, events?: TokenManagerEvents);
48
+ getAccessToken(): string | undefined;
49
+ getAuthToken(): string | undefined;
50
+ getRefreshToken(): string | undefined;
51
+ getTokens(): AuthTokens;
52
+ setTokens(tokens: AuthTokens): void;
53
+ setAccessToken(token: string): void;
54
+ setAuthToken(token: string): void;
55
+ setRefreshToken(token: string): void;
56
+ clearTokens(): void;
57
+ clearAuthToken(): void;
58
+ clearAccessToken(): void;
59
+ isExpired(): boolean;
60
+ isValid(): boolean;
61
+ hasToken(): boolean;
62
+ hasAuthToken(): boolean;
63
+ hasAccessToken(): boolean;
64
+ willExpireIn(seconds: number): boolean;
65
+ }
66
+ export declare function createTokenManager(tokens?: AuthTokens, events?: TokenManagerEvents): AuthTokenManager;
67
+ export declare function buildAuthHeaders(authMode: AuthMode, apiKey?: string, tokenManager?: AuthTokenManager): Record<string, string>;
68
+ export interface OAuthConfig {
69
+ clientId: string;
70
+ redirectUri: string;
71
+ scope?: string;
72
+ state?: string;
73
+ }
74
+ export interface OAuthTokens extends AuthTokens {
75
+ tokenType: string;
76
+ scope?: string;
77
+ }
78
+ export declare function isTokenValid(manager: AuthTokenManager | undefined): boolean;
79
+ export declare function requiresRefresh(manager: AuthTokenManager | undefined, thresholdSeconds?: number): boolean;
80
+ //# sourceMappingURL=token-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-manager.d.ts","sourceRoot":"","sources":["../../src/auth/token-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
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
+ class DefaultAuthTokenManager {
5
+ constructor(initialTokens, events) {
6
+ __publicField(this, "tokens", {});
7
+ __publicField(this, "events");
8
+ if (initialTokens) {
9
+ this.tokens = { ...initialTokens };
10
+ if (initialTokens.expiresIn && !initialTokens.expiresAt) {
11
+ this.tokens.expiresAt = Date.now() + initialTokens.expiresIn * 1e3;
12
+ }
13
+ }
14
+ this.events = events;
15
+ }
16
+ getAccessToken() {
17
+ return this.tokens.accessToken;
18
+ }
19
+ getAuthToken() {
20
+ return this.tokens.authToken;
21
+ }
22
+ getRefreshToken() {
23
+ return this.tokens.refreshToken;
24
+ }
25
+ getTokens() {
26
+ return { ...this.tokens };
27
+ }
28
+ setTokens(tokens) {
29
+ var _a, _b;
30
+ this.tokens = { ...tokens };
31
+ if (tokens.expiresIn && !tokens.expiresAt) {
32
+ this.tokens.expiresAt = Date.now() + tokens.expiresIn * 1e3;
33
+ }
34
+ (_b = (_a = this.events) == null ? void 0 : _a.onTokenSet) == null ? void 0 : _b.call(_a, this.tokens);
35
+ }
36
+ setAccessToken(token) {
37
+ var _a, _b;
38
+ this.tokens.accessToken = token;
39
+ (_b = (_a = this.events) == null ? void 0 : _a.onTokenSet) == null ? void 0 : _b.call(_a, this.tokens);
40
+ }
41
+ setAuthToken(token) {
42
+ var _a, _b;
43
+ this.tokens.authToken = token;
44
+ (_b = (_a = this.events) == null ? void 0 : _a.onTokenSet) == null ? void 0 : _b.call(_a, this.tokens);
45
+ }
46
+ setRefreshToken(token) {
47
+ this.tokens.refreshToken = token;
48
+ }
49
+ clearTokens() {
50
+ var _a, _b;
51
+ this.tokens = {};
52
+ (_b = (_a = this.events) == null ? void 0 : _a.onTokenCleared) == null ? void 0 : _b.call(_a);
53
+ }
54
+ clearAuthToken() {
55
+ this.tokens.authToken = void 0;
56
+ }
57
+ clearAccessToken() {
58
+ this.tokens.accessToken = void 0;
59
+ }
60
+ isExpired() {
61
+ var _a, _b;
62
+ if (!this.tokens.expiresAt) {
63
+ return false;
64
+ }
65
+ const expired = Date.now() >= this.tokens.expiresAt;
66
+ if (expired) {
67
+ (_b = (_a = this.events) == null ? void 0 : _a.onTokenExpired) == null ? void 0 : _b.call(_a);
68
+ }
69
+ return expired;
70
+ }
71
+ isValid() {
72
+ return this.hasToken() && !this.isExpired();
73
+ }
74
+ hasToken() {
75
+ return !!(this.tokens.accessToken || this.tokens.authToken);
76
+ }
77
+ hasAuthToken() {
78
+ return !!this.tokens.authToken;
79
+ }
80
+ hasAccessToken() {
81
+ return !!this.tokens.accessToken;
82
+ }
83
+ willExpireIn(seconds) {
84
+ if (!this.tokens.expiresAt) {
85
+ return false;
86
+ }
87
+ return Date.now() + seconds * 1e3 >= this.tokens.expiresAt;
88
+ }
89
+ }
90
+ function createTokenManager(tokens, events) {
91
+ return new DefaultAuthTokenManager(tokens, events);
92
+ }
93
+ function buildAuthHeaders(authMode, apiKey, tokenManager) {
94
+ const headers = {};
95
+ if (authMode === "apikey") {
96
+ if (apiKey) {
97
+ headers["Authorization"] = `Bearer ${apiKey}`;
98
+ }
99
+ } else if (authMode === "dual-token") {
100
+ if (tokenManager) {
101
+ const accessToken = tokenManager.getAccessToken();
102
+ const authToken = tokenManager.getAuthToken();
103
+ if (accessToken) {
104
+ headers["Access-Token"] = accessToken;
105
+ }
106
+ if (authToken) {
107
+ headers["Authorization"] = `Bearer ${authToken}`;
108
+ }
109
+ }
110
+ }
111
+ return headers;
112
+ }
113
+ function isTokenValid(manager) {
114
+ return (manager == null ? void 0 : manager.isValid()) ?? false;
115
+ }
116
+ function requiresRefresh(manager, thresholdSeconds = 300) {
117
+ if (!manager) return false;
118
+ return manager.willExpireIn(thresholdSeconds);
119
+ }
120
+ export {
121
+ DefaultAuthTokenManager,
122
+ buildAuthHeaders,
123
+ createTokenManager,
124
+ isTokenValid,
125
+ requiresRefresh
126
+ };
127
+ //# sourceMappingURL=token-manager.js.map
@@ -0,0 +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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"}
package/dist/auth.cjs ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const tokenManager = require("./auth/token-manager.cjs");
4
+ exports.DefaultAuthTokenManager = tokenManager.DefaultAuthTokenManager;
5
+ exports.buildAuthHeaders = tokenManager.buildAuthHeaders;
6
+ exports.createTokenManager = tokenManager.createTokenManager;
7
+ exports.isTokenValid = tokenManager.isTokenValid;
8
+ exports.requiresRefresh = tokenManager.requiresRefresh;
9
+ //# sourceMappingURL=auth.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
package/dist/auth.js ADDED
@@ -0,0 +1,9 @@
1
+ import { DefaultAuthTokenManager, buildAuthHeaders, createTokenManager, isTokenValid, requiresRefresh } from "./auth/token-manager.js";
2
+ export {
3
+ DefaultAuthTokenManager,
4
+ buildAuthHeaders,
5
+ createTokenManager,
6
+ isTokenValid,
7
+ requiresRefresh
8
+ };
9
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,3 @@
1
+ export type { HttpMethod, LogLevel, QueryParams, HttpHeaders, ApiResult, PageResult, Pageable, Page, DeepPartial, PickByType, RequiredByKeys, OptionalByKeys, Awaitable, MaybeArray, Nullable, Optional, Primitive, JsonPrimitive, JsonObject, JsonArray, JsonValue, RequestConfig, RequestOptions, RetryConfig, CacheConfig, LoggerConfig, Interceptors, RequestInterceptor, ResponseInterceptor, ErrorInterceptor, HttpClientConfig, SdkConfig, RequestState, ProgressEvent, UploadOptions, DownloadOptions, StreamOptions, } from './types';
2
+ export { DEFAULT_RETRY_CONFIG, DEFAULT_CACHE_CONFIG, DEFAULT_LOGGER_CONFIG, DEFAULT_TIMEOUT, SUCCESS_CODES, HTTP_STATUS, MIME_TYPES, } from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,WAAW,EACX,SAAS,EACT,UAAU,EACV,QAAQ,EACR,IAAI,EACJ,WAAW,EACX,UAAU,EACV,cAAc,EACd,cAAc,EACd,SAAS,EACT,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,aAAa,EACb,UAAU,EACV,SAAS,EACT,SAAS,EACT,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,aAAa,EACb,aAAa,EACb,eAAe,EACf,aAAa,GACd,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,aAAa,EACb,WAAW,EACX,UAAU,GACX,MAAM,SAAS,CAAC"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const DEFAULT_RETRY_CONFIG = {
4
+ maxRetries: 3,
5
+ retryDelay: 1e3,
6
+ retryBackoff: "exponential",
7
+ maxRetryDelay: 3e4
8
+ };
9
+ const DEFAULT_CACHE_CONFIG = {
10
+ enabled: false,
11
+ ttl: 5 * 60 * 1e3,
12
+ maxSize: 100
13
+ };
14
+ const DEFAULT_LOGGER_CONFIG = {
15
+ level: "info",
16
+ prefix: "[SDK]",
17
+ timestamp: true,
18
+ colors: true
19
+ };
20
+ const DEFAULT_TIMEOUT = 3e4;
21
+ const SUCCESS_CODES = [0, 200, 2e3, "0", "200", "2000"];
22
+ const HTTP_STATUS = {
23
+ OK: 200,
24
+ CREATED: 201,
25
+ NO_CONTENT: 204,
26
+ BAD_REQUEST: 400,
27
+ UNAUTHORIZED: 401,
28
+ FORBIDDEN: 403,
29
+ NOT_FOUND: 404,
30
+ METHOD_NOT_ALLOWED: 405,
31
+ CONFLICT: 409,
32
+ UNPROCESSABLE_ENTITY: 422,
33
+ TOO_MANY_REQUESTS: 429,
34
+ INTERNAL_SERVER_ERROR: 500,
35
+ BAD_GATEWAY: 502,
36
+ SERVICE_UNAVAILABLE: 503,
37
+ GATEWAY_TIMEOUT: 504
38
+ };
39
+ const MIME_TYPES = {
40
+ JSON: "application/json",
41
+ FORM_DATA: "multipart/form-data",
42
+ URL_ENCODED: "application/x-www-form-urlencoded",
43
+ OCTET_STREAM: "application/octet-stream",
44
+ TEXT_PLAIN: "text/plain",
45
+ TEXT_HTML: "text/html"
46
+ };
47
+ exports.DEFAULT_CACHE_CONFIG = DEFAULT_CACHE_CONFIG;
48
+ exports.DEFAULT_LOGGER_CONFIG = DEFAULT_LOGGER_CONFIG;
49
+ exports.DEFAULT_RETRY_CONFIG = DEFAULT_RETRY_CONFIG;
50
+ exports.DEFAULT_TIMEOUT = DEFAULT_TIMEOUT;
51
+ exports.HTTP_STATUS = HTTP_STATUS;
52
+ exports.MIME_TYPES = MIME_TYPES;
53
+ exports.SUCCESS_CODES = SUCCESS_CODES;
54
+ //# sourceMappingURL=types.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.cjs","sources":["../../src/core/types.ts"],"sourcesContent":["export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS';\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent';\n\nexport type QueryParams = Record<string, string | number | boolean | undefined | null>;\n\nexport interface HttpHeaders extends Record<string, string> {}\n\nexport interface ApiResult<T = unknown> {\n code: number | string;\n msg?: string;\n message?: string;\n data: T;\n timestamp?: number;\n traceId?: string;\n}\n\nexport interface PageResult<T> {\n content?: T[];\n list?: T[];\n total: number;\n totalElements?: number;\n page: number;\n pageSize: number;\n size?: number;\n totalPages: number;\n hasMore: boolean;\n first?: boolean;\n last?: boolean;\n empty?: boolean;\n number?: number;\n}\n\nexport interface Pageable {\n page?: number;\n pageSize?: number;\n size?: number;\n sort?: string;\n order?: 'asc' | 'desc';\n}\n\nexport interface Page<T> {\n content: T[];\n totalElements: number;\n totalPages: number;\n number: number;\n size: number;\n first: boolean;\n last: boolean;\n empty: boolean;\n}\n\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n};\n\nexport type PickByType<T, U> = {\n [P in keyof T as T[P] extends U ? P : never]: T[P];\n};\n\nexport type RequiredByKeys<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\n\nexport type OptionalByKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\nexport type Awaitable<T> = T | Promise<T>;\n\nexport type MaybeArray<T> = T | T[];\n\nexport type Nullable<T> = T | null;\n\nexport type Optional<T> = T | undefined;\n\nexport type Primitive = string | number | boolean | null | undefined;\n\nexport type JsonPrimitive = string | number | boolean | null;\n\nexport type JsonObject = { [key: string]: JsonValue };\n\nexport type JsonArray = JsonValue[];\n\nexport type JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\nexport interface RequestConfig {\n url: string;\n method: HttpMethod;\n headers?: HttpHeaders;\n params?: QueryParams;\n body?: unknown;\n timeout?: number;\n signal?: AbortSignal;\n skipAuth?: boolean;\n retryCount?: number;\n metadata?: Record<string, unknown>;\n}\n\nexport interface RequestOptions {\n method?: HttpMethod;\n headers?: HttpHeaders;\n body?: unknown;\n params?: QueryParams;\n signal?: AbortSignal;\n skipAuth?: boolean;\n requiresAuth?: boolean;\n timeout?: number;\n retry?: Partial<RetryConfig>;\n cache?: boolean | number;\n metadata?: Record<string, unknown>;\n}\n\nexport interface RetryConfig {\n maxRetries: number;\n retryDelay: number;\n retryBackoff: 'fixed' | 'linear' | 'exponential';\n maxRetryDelay: number;\n retryCondition?: (error: Error, retryCount: number) => boolean;\n}\n\nexport interface CacheConfig {\n enabled: boolean;\n ttl: number;\n maxSize: number;\n}\n\nexport interface LoggerConfig {\n level: LogLevel;\n prefix?: string;\n timestamp?: boolean;\n colors?: boolean;\n}\n\nexport interface Interceptors {\n request: RequestInterceptor[];\n response: ResponseInterceptor[];\n error: ErrorInterceptor[];\n}\n\nexport type RequestInterceptor = (config: RequestConfig) => RequestConfig | Promise<RequestConfig>;\n\nexport type ResponseInterceptor<T = unknown> = (response: T, config: RequestConfig) => T | Promise<T>;\n\nexport type ErrorInterceptor = (error: Error, config: RequestConfig) => void | Promise<void>;\n\nexport interface HttpClientConfig {\n baseUrl: string;\n timeout?: number;\n headers?: HttpHeaders;\n retry?: Partial<RetryConfig>;\n cache?: Partial<CacheConfig>;\n logger?: Partial<LoggerConfig>;\n interceptors?: Interceptors;\n}\n\nexport interface SdkConfig extends HttpClientConfig {\n tenantId?: string;\n organizationId?: string;\n platform?: string;\n userId?: string | number;\n}\n\nexport interface RequestState {\n pending: boolean;\n loading: boolean;\n error: Error | null;\n data: unknown;\n}\n\nexport interface ProgressEvent {\n loaded: number;\n total: number;\n percentage: number;\n}\n\nexport interface UploadOptions {\n onProgress?: (event: ProgressEvent) => void;\n file: File | Blob;\n fieldName?: string;\n additionalData?: Record<string, string | Blob>;\n}\n\nexport interface DownloadOptions {\n onProgress?: (event: ProgressEvent) => void;\n filename?: string;\n}\n\nexport interface StreamOptions {\n onMessage?: (chunk: string) => void;\n onError?: (error: Error) => void;\n onComplete?: () => void;\n}\n\nexport const DEFAULT_RETRY_CONFIG: RetryConfig = {\n maxRetries: 3,\n retryDelay: 1000,\n retryBackoff: 'exponential',\n maxRetryDelay: 30000,\n};\n\nexport const DEFAULT_CACHE_CONFIG: CacheConfig = {\n enabled: false,\n ttl: 5 * 60 * 1000,\n maxSize: 100,\n};\n\nexport const DEFAULT_LOGGER_CONFIG: LoggerConfig = {\n level: 'info',\n prefix: '[SDK]',\n timestamp: true,\n colors: true,\n};\n\nexport const DEFAULT_TIMEOUT = 30000;\n\nexport const SUCCESS_CODES: (number | string)[] = [0, 200, 2000, '0', '200', '2000'];\n\nexport const HTTP_STATUS = {\n OK: 200,\n CREATED: 201,\n NO_CONTENT: 204,\n BAD_REQUEST: 400,\n UNAUTHORIZED: 401,\n FORBIDDEN: 403,\n NOT_FOUND: 404,\n METHOD_NOT_ALLOWED: 405,\n CONFLICT: 409,\n UNPROCESSABLE_ENTITY: 422,\n TOO_MANY_REQUESTS: 429,\n INTERNAL_SERVER_ERROR: 500,\n BAD_GATEWAY: 502,\n SERVICE_UNAVAILABLE: 503,\n GATEWAY_TIMEOUT: 504,\n} as const;\n\nexport const MIME_TYPES = {\n JSON: 'application/json',\n FORM_DATA: 'multipart/form-data',\n URL_ENCODED: 'application/x-www-form-urlencoded',\n OCTET_STREAM: 'application/octet-stream',\n TEXT_PLAIN: 'text/plain',\n TEXT_HTML: 'text/html',\n} as const;\n"],"names":[],"mappings":";;AA8LO,MAAM,uBAAoC;AAAA,EAC/C,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,eAAe;AACjB;AAEO,MAAM,uBAAoC;AAAA,EAC/C,SAAS;AAAA,EACT,KAAK,IAAI,KAAK;AAAA,EACd,SAAS;AACX;AAEO,MAAM,wBAAsC;AAAA,EACjD,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ;AACV;AAEO,MAAM,kBAAkB;AAExB,MAAM,gBAAqC,CAAC,GAAG,KAAK,KAAM,KAAK,OAAO,MAAM;AAE5E,MAAM,cAAc;AAAA,EACzB,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,cAAc;AAAA,EACd,WAAW;AAAA,EACX,WAAW;AAAA,EACX,oBAAoB;AAAA,EACpB,UAAU;AAAA,EACV,sBAAsB;AAAA,EACtB,mBAAmB;AAAA,EACnB,uBAAuB;AAAA,EACvB,aAAa;AAAA,EACb,qBAAqB;AAAA,EACrB,iBAAiB;AACnB;AAEO,MAAM,aAAa;AAAA,EACxB,MAAM;AAAA,EACN,WAAW;AAAA,EACX,aAAa;AAAA,EACb,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,WAAW;AACb;;;;;;;;"}