swcombine-sdk 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 (129) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +404 -0
  3. package/dist/cjs/SWCombine.js +120 -0
  4. package/dist/cjs/SWCombine.js.map +1 -0
  5. package/dist/cjs/auth/OAuthClient.js +195 -0
  6. package/dist/cjs/auth/OAuthClient.js.map +1 -0
  7. package/dist/cjs/auth/TokenManager.js +139 -0
  8. package/dist/cjs/auth/TokenManager.js.map +1 -0
  9. package/dist/cjs/auth/permissions.js +281 -0
  10. package/dist/cjs/auth/permissions.js.map +1 -0
  11. package/dist/cjs/auth/scopes.js +285 -0
  12. package/dist/cjs/auth/scopes.js.map +1 -0
  13. package/dist/cjs/http/HttpClient.js +216 -0
  14. package/dist/cjs/http/HttpClient.js.map +1 -0
  15. package/dist/cjs/http/errors.js +156 -0
  16. package/dist/cjs/http/errors.js.map +1 -0
  17. package/dist/cjs/index.js +48 -0
  18. package/dist/cjs/index.js.map +1 -0
  19. package/dist/cjs/resources/ApiResource.js +44 -0
  20. package/dist/cjs/resources/ApiResource.js.map +1 -0
  21. package/dist/cjs/resources/BaseResource.js +33 -0
  22. package/dist/cjs/resources/BaseResource.js.map +1 -0
  23. package/dist/cjs/resources/CharacterResource.js +178 -0
  24. package/dist/cjs/resources/CharacterResource.js.map +1 -0
  25. package/dist/cjs/resources/DatacardResource.js +42 -0
  26. package/dist/cjs/resources/DatacardResource.js.map +1 -0
  27. package/dist/cjs/resources/EventsResource.js +42 -0
  28. package/dist/cjs/resources/EventsResource.js.map +1 -0
  29. package/dist/cjs/resources/FactionResource.js +162 -0
  30. package/dist/cjs/resources/FactionResource.js.map +1 -0
  31. package/dist/cjs/resources/GalaxyResource.js +184 -0
  32. package/dist/cjs/resources/GalaxyResource.js.map +1 -0
  33. package/dist/cjs/resources/InventoryResource.js +95 -0
  34. package/dist/cjs/resources/InventoryResource.js.map +1 -0
  35. package/dist/cjs/resources/LocationResource.js +20 -0
  36. package/dist/cjs/resources/LocationResource.js.map +1 -0
  37. package/dist/cjs/resources/MarketResource.js +44 -0
  38. package/dist/cjs/resources/MarketResource.js.map +1 -0
  39. package/dist/cjs/resources/NewsResource.js +109 -0
  40. package/dist/cjs/resources/NewsResource.js.map +1 -0
  41. package/dist/cjs/resources/TypesResource.js +75 -0
  42. package/dist/cjs/resources/TypesResource.js.map +1 -0
  43. package/dist/cjs/types/index.js +25 -0
  44. package/dist/cjs/types/index.js.map +1 -0
  45. package/dist/esm/SWCombine.js +116 -0
  46. package/dist/esm/SWCombine.js.map +1 -0
  47. package/dist/esm/auth/OAuthClient.js +188 -0
  48. package/dist/esm/auth/OAuthClient.js.map +1 -0
  49. package/dist/esm/auth/TokenManager.js +135 -0
  50. package/dist/esm/auth/TokenManager.js.map +1 -0
  51. package/dist/esm/auth/permissions.js +275 -0
  52. package/dist/esm/auth/permissions.js.map +1 -0
  53. package/dist/esm/auth/scopes.js +274 -0
  54. package/dist/esm/auth/scopes.js.map +1 -0
  55. package/dist/esm/http/HttpClient.js +209 -0
  56. package/dist/esm/http/HttpClient.js.map +1 -0
  57. package/dist/esm/http/errors.js +152 -0
  58. package/dist/esm/http/errors.js.map +1 -0
  59. package/dist/esm/index.js +15 -0
  60. package/dist/esm/index.js.map +1 -0
  61. package/dist/esm/resources/ApiResource.js +40 -0
  62. package/dist/esm/resources/ApiResource.js.map +1 -0
  63. package/dist/esm/resources/BaseResource.js +29 -0
  64. package/dist/esm/resources/BaseResource.js.map +1 -0
  65. package/dist/esm/resources/CharacterResource.js +168 -0
  66. package/dist/esm/resources/CharacterResource.js.map +1 -0
  67. package/dist/esm/resources/DatacardResource.js +38 -0
  68. package/dist/esm/resources/DatacardResource.js.map +1 -0
  69. package/dist/esm/resources/EventsResource.js +38 -0
  70. package/dist/esm/resources/EventsResource.js.map +1 -0
  71. package/dist/esm/resources/FactionResource.js +153 -0
  72. package/dist/esm/resources/FactionResource.js.map +1 -0
  73. package/dist/esm/resources/GalaxyResource.js +175 -0
  74. package/dist/esm/resources/GalaxyResource.js.map +1 -0
  75. package/dist/esm/resources/InventoryResource.js +90 -0
  76. package/dist/esm/resources/InventoryResource.js.map +1 -0
  77. package/dist/esm/resources/LocationResource.js +16 -0
  78. package/dist/esm/resources/LocationResource.js.map +1 -0
  79. package/dist/esm/resources/MarketResource.js +39 -0
  80. package/dist/esm/resources/MarketResource.js.map +1 -0
  81. package/dist/esm/resources/NewsResource.js +103 -0
  82. package/dist/esm/resources/NewsResource.js.map +1 -0
  83. package/dist/esm/resources/TypesResource.js +69 -0
  84. package/dist/esm/resources/TypesResource.js.map +1 -0
  85. package/dist/esm/types/index.js +22 -0
  86. package/dist/esm/types/index.js.map +1 -0
  87. package/dist/types/SWCombine.d.ts +66 -0
  88. package/dist/types/SWCombine.d.ts.map +1 -0
  89. package/dist/types/auth/OAuthClient.d.ts +48 -0
  90. package/dist/types/auth/OAuthClient.d.ts.map +1 -0
  91. package/dist/types/auth/TokenManager.d.ts +66 -0
  92. package/dist/types/auth/TokenManager.d.ts.map +1 -0
  93. package/dist/types/auth/permissions.d.ts +173 -0
  94. package/dist/types/auth/permissions.d.ts.map +1 -0
  95. package/dist/types/auth/scopes.d.ts +309 -0
  96. package/dist/types/auth/scopes.d.ts.map +1 -0
  97. package/dist/types/http/HttpClient.d.ts +64 -0
  98. package/dist/types/http/HttpClient.d.ts.map +1 -0
  99. package/dist/types/http/errors.d.ts +54 -0
  100. package/dist/types/http/errors.d.ts.map +1 -0
  101. package/dist/types/index.d.ts +11 -0
  102. package/dist/types/index.d.ts.map +1 -0
  103. package/dist/types/resources/ApiResource.d.ts +56 -0
  104. package/dist/types/resources/ApiResource.d.ts.map +1 -0
  105. package/dist/types/resources/BaseResource.d.ts +16 -0
  106. package/dist/types/resources/BaseResource.d.ts.map +1 -0
  107. package/dist/types/resources/CharacterResource.d.ts +151 -0
  108. package/dist/types/resources/CharacterResource.d.ts.map +1 -0
  109. package/dist/types/resources/DatacardResource.d.ts +42 -0
  110. package/dist/types/resources/DatacardResource.d.ts.map +1 -0
  111. package/dist/types/resources/EventsResource.d.ts +34 -0
  112. package/dist/types/resources/EventsResource.d.ts.map +1 -0
  113. package/dist/types/resources/FactionResource.d.ts +166 -0
  114. package/dist/types/resources/FactionResource.d.ts.map +1 -0
  115. package/dist/types/resources/GalaxyResource.d.ts +134 -0
  116. package/dist/types/resources/GalaxyResource.d.ts.map +1 -0
  117. package/dist/types/resources/InventoryResource.d.ts +77 -0
  118. package/dist/types/resources/InventoryResource.d.ts.map +1 -0
  119. package/dist/types/resources/LocationResource.d.ts +18 -0
  120. package/dist/types/resources/LocationResource.d.ts.map +1 -0
  121. package/dist/types/resources/MarketResource.d.ts +34 -0
  122. package/dist/types/resources/MarketResource.d.ts.map +1 -0
  123. package/dist/types/resources/NewsResource.d.ts +54 -0
  124. package/dist/types/resources/NewsResource.d.ts.map +1 -0
  125. package/dist/types/resources/TypesResource.d.ts +72 -0
  126. package/dist/types/resources/TypesResource.d.ts.map +1 -0
  127. package/dist/types/types/index.d.ts +296 -0
  128. package/dist/types/types/index.d.ts.map +1 -0
  129. package/package.json +75 -0
@@ -0,0 +1,209 @@
1
+ /**
2
+ * HTTP client for making requests to SW Combine API
3
+ */
4
+ import axios from 'axios';
5
+ import { SWCError } from './errors.js';
6
+ /**
7
+ * HTTP client that handles requests, retries, and token refresh
8
+ */
9
+ export class HttpClient {
10
+ constructor(options, tokenManager) {
11
+ this.tokenManager = tokenManager;
12
+ this.maxRetries = options.maxRetries ?? 3;
13
+ this.retryDelay = options.retryDelay ?? 1000;
14
+ this.debug = options.debug ?? false;
15
+ // Create axios instance
16
+ this.axios = axios.create({
17
+ baseURL: options.baseURL ?? 'https://www.swcombine.com/ws/v2.0/',
18
+ timeout: options.timeout ?? 30000,
19
+ headers: {
20
+ 'Accept': 'application/json',
21
+ 'Content-Type': 'application/x-www-form-urlencoded',
22
+ },
23
+ });
24
+ // Set up interceptors
25
+ this.setupRequestInterceptor();
26
+ this.setupResponseInterceptor();
27
+ }
28
+ /**
29
+ * Set up request interceptor to add auth token
30
+ */
31
+ setupRequestInterceptor() {
32
+ this.axios.interceptors.request.use(async (config) => {
33
+ // Add access token if available
34
+ if (this.tokenManager) {
35
+ try {
36
+ const token = await this.tokenManager.getAccessToken();
37
+ if (token) {
38
+ // Try query parameter method instead of header
39
+ // SW Combine API docs say: "Access tokens are sent to a Resource in the HTTP
40
+ // Authorization header, or as a query string parameter"
41
+ config.params = config.params || {};
42
+ config.params.access_token = token;
43
+ if (this.debug) {
44
+ console.log(`[SWC SDK] Added auth token as query param: ${token.substring(0, 20)}...`);
45
+ }
46
+ }
47
+ else {
48
+ if (this.debug) {
49
+ console.log(`[SWC SDK] No token available from TokenManager`);
50
+ }
51
+ }
52
+ }
53
+ catch (error) {
54
+ if (this.debug) {
55
+ console.log(`[SWC SDK] Error getting token: ${error.message}`);
56
+ }
57
+ // Don't fail the request, just proceed without token
58
+ }
59
+ }
60
+ if (this.debug) {
61
+ console.log(`[SWC SDK] ${config.method?.toUpperCase()} ${config.url}`);
62
+ console.log(`[SWC SDK] Query params:`, config.params);
63
+ }
64
+ return config;
65
+ }, (error) => {
66
+ return Promise.reject(error);
67
+ });
68
+ }
69
+ /**
70
+ * Set up response interceptor to handle errors and retries
71
+ */
72
+ setupResponseInterceptor() {
73
+ this.axios.interceptors.response.use((response) => {
74
+ // Extract data from swcapi wrapper if present
75
+ if (response.data && typeof response.data === 'object' && 'swcapi' in response.data) {
76
+ const swcapiData = response.data.swcapi;
77
+ // Get the first key's value (e.g., swcapi.character -> character data)
78
+ const keys = Object.keys(swcapiData);
79
+ if (keys.length === 1) {
80
+ response.data = swcapiData[keys[0]];
81
+ }
82
+ else {
83
+ // If multiple keys or no keys, return the swcapi object itself
84
+ response.data = swcapiData;
85
+ }
86
+ }
87
+ return response;
88
+ }, async (error) => {
89
+ const config = error.config;
90
+ // Handle 401 - attempt token refresh
91
+ if (error.response?.status === 401 && this.tokenManager) {
92
+ try {
93
+ await this.tokenManager.refreshToken();
94
+ // Retry the request with new token
95
+ return this.axios.request(config);
96
+ }
97
+ catch (refreshError) {
98
+ // Token refresh failed, throw auth error
99
+ throw SWCError.fromHttpResponse(401, error.response?.data, error.response?.headers['x-request-id']);
100
+ }
101
+ }
102
+ // Handle retryable errors
103
+ if (this.shouldRetry(error, config._retryCount ?? 0)) {
104
+ config._retryCount = (config._retryCount ?? 0) + 1;
105
+ // Wait before retrying (exponential backoff)
106
+ const delay = this.retryDelay * Math.pow(2, config._retryCount - 1);
107
+ await this.sleep(delay);
108
+ if (this.debug) {
109
+ console.log(`[SWC SDK] Retrying request (attempt ${config._retryCount}/${this.maxRetries})`);
110
+ }
111
+ return this.axios.request(config);
112
+ }
113
+ // Convert to SWCError
114
+ if (error.response) {
115
+ throw SWCError.fromHttpResponse(error.response.status, error.response.data, error.response.headers['x-request-id']);
116
+ }
117
+ else if (error.request) {
118
+ throw SWCError.fromNetworkError(error);
119
+ }
120
+ else {
121
+ throw new SWCError(error.message, {
122
+ type: 'unknown',
123
+ cause: error,
124
+ });
125
+ }
126
+ });
127
+ }
128
+ /**
129
+ * Determine if a request should be retried
130
+ */
131
+ shouldRetry(error, retryCount) {
132
+ // Don't retry if we've exceeded max retries
133
+ if (retryCount >= this.maxRetries) {
134
+ return false;
135
+ }
136
+ // Network errors are retryable
137
+ if (!error.response) {
138
+ return true;
139
+ }
140
+ const status = error.response.status;
141
+ const responseData = error.response.data;
142
+ // Check if HTTP 400 is actually a rate limit error
143
+ const isRateLimitError = status === 400 &&
144
+ (responseData?.error === 'rate_limit_exceeded' ||
145
+ responseData?.message?.toLowerCase().includes('rate limit') ||
146
+ responseData?.error_description?.toLowerCase().includes('rate limit'));
147
+ // Retry rate limit errors (429 or 400 with rate limit content)
148
+ if (status === 429 || isRateLimitError) {
149
+ return true;
150
+ }
151
+ // Don't retry other 4xx errors
152
+ if (status >= 400 && status < 500) {
153
+ return false;
154
+ }
155
+ // Retry 5xx server errors
156
+ if (status >= 500) {
157
+ return true;
158
+ }
159
+ return false;
160
+ }
161
+ /**
162
+ * Sleep for specified milliseconds
163
+ */
164
+ sleep(ms) {
165
+ return new Promise((resolve) => setTimeout(resolve, ms));
166
+ }
167
+ /**
168
+ * Make a GET request
169
+ */
170
+ async get(url, config) {
171
+ const response = await this.axios.get(url, config);
172
+ return response.data;
173
+ }
174
+ /**
175
+ * Make a POST request
176
+ */
177
+ async post(url, data, config) {
178
+ const response = await this.axios.post(url, data, config);
179
+ return response.data;
180
+ }
181
+ /**
182
+ * Make a PUT request
183
+ */
184
+ async put(url, data, config) {
185
+ const response = await this.axios.put(url, data, config);
186
+ return response.data;
187
+ }
188
+ /**
189
+ * Make a DELETE request
190
+ */
191
+ async delete(url, config) {
192
+ const response = await this.axios.delete(url, config);
193
+ return response.data;
194
+ }
195
+ /**
196
+ * Make a custom request
197
+ */
198
+ async request(config) {
199
+ const response = await this.axios.request(config);
200
+ return response.data;
201
+ }
202
+ /**
203
+ * Set token manager (useful for late initialization)
204
+ */
205
+ setTokenManager(tokenManager) {
206
+ this.tokenManager = tokenManager;
207
+ }
208
+ }
209
+ //# sourceMappingURL=HttpClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../../src/http/HttpClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Error handling for SW Combine SDK
3
+ */
4
+ /**
5
+ * Custom error class for SW Combine API errors
6
+ */
7
+ export class SWCError extends Error {
8
+ constructor(message, options) {
9
+ super(message);
10
+ this.name = 'SWCError';
11
+ this.type = options.type;
12
+ this.statusCode = options.statusCode;
13
+ this.requestId = options.requestId;
14
+ this.response = options.response;
15
+ this.retryable = options.retryable ?? this.determineRetryable(options.type, options.statusCode);
16
+ this.retryAfter = options.retryAfter;
17
+ this.cause = options.cause;
18
+ // Maintains proper stack trace for where our error was thrown (only available on V8)
19
+ if (Error.captureStackTrace) {
20
+ Error.captureStackTrace(this, SWCError);
21
+ }
22
+ }
23
+ /**
24
+ * Determine if an error is retryable based on type and status code
25
+ */
26
+ determineRetryable(type, statusCode) {
27
+ // Network errors are always retryable
28
+ if (type === 'network') {
29
+ return true;
30
+ }
31
+ // Server errors (5xx) are retryable
32
+ if (type === 'server' || (statusCode && statusCode >= 500 && statusCode < 600)) {
33
+ return true;
34
+ }
35
+ // Rate limit errors are technically retryable (with backoff)
36
+ if (type === 'rate_limit') {
37
+ return true;
38
+ }
39
+ // Everything else is not retryable
40
+ return false;
41
+ }
42
+ /**
43
+ * Create an error from an HTTP status code and response
44
+ */
45
+ static fromHttpResponse(statusCode, response, requestId) {
46
+ let type;
47
+ let message;
48
+ // Check if this is a rate limit error (SW Combine uses HTTP 400 for rate limiting)
49
+ const isRateLimitError = statusCode === 400 &&
50
+ (response?.error === 'rate_limit_exceeded' ||
51
+ response?.message?.toLowerCase().includes('rate limit') ||
52
+ response?.error_description?.toLowerCase().includes('rate limit'));
53
+ // Determine error type from status code and content
54
+ if (isRateLimitError) {
55
+ type = 'rate_limit';
56
+ message = 'Rate limit exceeded. Please wait before making more requests.';
57
+ }
58
+ else {
59
+ switch (statusCode) {
60
+ case 401:
61
+ type = 'auth';
62
+ message = 'Authentication failed. Check your credentials or token.';
63
+ break;
64
+ case 403:
65
+ type = 'auth';
66
+ message = 'Forbidden. You do not have permission to access this resource.';
67
+ break;
68
+ case 404:
69
+ type = 'not_found';
70
+ message = 'Resource not found.';
71
+ break;
72
+ case 400:
73
+ case 422:
74
+ type = 'validation';
75
+ message = 'Invalid request parameters.';
76
+ break;
77
+ case 429:
78
+ type = 'rate_limit';
79
+ message = 'Rate limit exceeded. Please wait before making more requests.';
80
+ break;
81
+ default:
82
+ if (statusCode >= 500) {
83
+ type = 'server';
84
+ message = 'Server error occurred. Please try again later.';
85
+ }
86
+ else {
87
+ type = 'unknown';
88
+ message = 'An unknown error occurred.';
89
+ }
90
+ }
91
+ }
92
+ // Use error message from response if available
93
+ if (response?.error_description) {
94
+ message = response.error_description;
95
+ }
96
+ else if (response?.message) {
97
+ message = response.message;
98
+ }
99
+ else if (response?.error) {
100
+ message = typeof response.error === 'string' ? response.error : message;
101
+ }
102
+ // Extract retry-after header for rate limit errors
103
+ const retryAfter = type === 'rate_limit' ? response?.retry_after : undefined;
104
+ return new SWCError(message, {
105
+ type,
106
+ statusCode,
107
+ requestId,
108
+ response,
109
+ retryAfter,
110
+ });
111
+ }
112
+ /**
113
+ * Create an error from a network failure
114
+ */
115
+ static fromNetworkError(error) {
116
+ return new SWCError(`Network error: ${error.message}`, {
117
+ type: 'network',
118
+ retryable: true,
119
+ cause: error,
120
+ });
121
+ }
122
+ /**
123
+ * Check if an error is a SWCError
124
+ */
125
+ static isSWCError(error) {
126
+ return error instanceof SWCError;
127
+ }
128
+ /**
129
+ * Get a user-friendly error message
130
+ */
131
+ toUserFriendlyMessage() {
132
+ switch (this.type) {
133
+ case 'auth':
134
+ return 'Authentication failed. Please check your credentials and try again.';
135
+ case 'rate_limit':
136
+ return this.retryAfter
137
+ ? `Rate limit exceeded. Please wait ${this.retryAfter} seconds before trying again.`
138
+ : 'Rate limit exceeded. Please wait before making more requests.';
139
+ case 'not_found':
140
+ return 'The requested resource was not found.';
141
+ case 'validation':
142
+ return 'Invalid request. Please check your parameters and try again.';
143
+ case 'server':
144
+ return 'A server error occurred. Please try again later.';
145
+ case 'network':
146
+ return 'Network connection failed. Please check your internet connection and try again.';
147
+ default:
148
+ return 'An unexpected error occurred. Please try again.';
149
+ }
150
+ }
151
+ }
152
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/http/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * SW Combine SDK for Node.js
3
+ * Main entry point
4
+ */
5
+ // Main client
6
+ export { SWCombine } from './SWCombine.js';
7
+ // Error handling
8
+ export { SWCError } from './http/errors.js';
9
+ // Types
10
+ export * from './types/index.js';
11
+ // OAuth permissions
12
+ export * from './auth/permissions.js';
13
+ // OAuth scopes
14
+ export { Scopes, CharacterScopes, MessageScopes, PersonalInventoryScopes, FactionScopes, FactionInventoryScopes, getAllScopes, getAllCharacterScopes, getAllMessageScopes, getAllPersonalInventoryScopes, getAllFactionScopes, getAllFactionInventoryScopes, getReadOnlyScopes, getMinimalScopes, } from './auth/scopes.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,iBAAiB;AACjB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,QAAQ;AACR,cAAc,kBAAkB,CAAC;AAEjC,oBAAoB;AACpB,cAAc,uBAAuB,CAAC;AAEtC,eAAe;AACf,OAAO,EACL,MAAM,EACN,eAAe,EACf,aAAa,EACb,uBAAuB,EACvB,aAAa,EACb,sBAAsB,EACtB,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,6BAA6B,EAC7B,mBAAmB,EACnB,4BAA4B,EAC5B,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * API utility endpoints
3
+ */
4
+ import { BaseResource } from './BaseResource.js';
5
+ /**
6
+ * API resource for utility endpoints
7
+ */
8
+ export class ApiResource extends BaseResource {
9
+ /**
10
+ * Print a HelloWorld message
11
+ */
12
+ async helloWorld() {
13
+ return this.request('GET', '/api/helloworld');
14
+ }
15
+ /**
16
+ * Print a HelloWorld message for authorized clients
17
+ */
18
+ async helloAuth() {
19
+ return this.request('GET', '/api/helloauth');
20
+ }
21
+ /**
22
+ * Get list of available web services permissions
23
+ */
24
+ async permissions() {
25
+ return this.request('GET', '/api/permissions');
26
+ }
27
+ /**
28
+ * Get current rate limit status
29
+ */
30
+ async rateLimits() {
31
+ return this.request('GET', '/api/ratelimits');
32
+ }
33
+ /**
34
+ * Get current time or convert times
35
+ */
36
+ async time() {
37
+ return this.request('GET', '/api/time');
38
+ }
39
+ }
40
+ //# sourceMappingURL=ApiResource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiResource.js","sourceRoot":"","sources":["../../../src/resources/ApiResource.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAiCjD;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,YAAY;IAC3C;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,OAAO,CAAqB,KAAK,EAAE,iBAAiB,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,OAAO,IAAI,CAAC,OAAO,CAAoB,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC,OAAO,CAAe,KAAK,EAAE,kBAAkB,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,OAAO,CAAgB,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,OAAO,IAAI,CAAC,OAAO,CAAe,KAAK,EAAE,WAAW,CAAC,CAAC;IACxD,CAAC;CACF"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Base class for all API resources
3
+ */
4
+ /**
5
+ * Base resource class that all API resources extend
6
+ */
7
+ export class BaseResource {
8
+ constructor(http) {
9
+ this.http = http;
10
+ }
11
+ /**
12
+ * Make a request to the API
13
+ */
14
+ async request(method, path, data) {
15
+ switch (method.toUpperCase()) {
16
+ case 'GET':
17
+ return this.http.get(path);
18
+ case 'POST':
19
+ return this.http.post(path, data);
20
+ case 'PUT':
21
+ return this.http.put(path, data);
22
+ case 'DELETE':
23
+ return this.http.delete(path);
24
+ default:
25
+ throw new Error(`Unsupported HTTP method: ${method}`);
26
+ }
27
+ }
28
+ }
29
+ //# sourceMappingURL=BaseResource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseResource.js","sourceRoot":"","sources":["../../../src/resources/BaseResource.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,OAAgB,YAAY;IAGhC,YAAY,IAAgB;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,OAAO,CAAI,MAAc,EAAE,IAAY,EAAE,IAAc;QACrE,QAAQ,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7B,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAI,IAAI,CAAC,CAAC;YAChC,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAI,IAAI,EAAE,IAAI,CAAC,CAAC;YACvC,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAI,IAAI,EAAE,IAAI,CAAC,CAAC;YACtC,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAI,IAAI,CAAC,CAAC;YACnC;gBACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Character resource for accessing character data
3
+ */
4
+ import { BaseResource } from './BaseResource.js';
5
+ /**
6
+ * Character messages resource
7
+ */
8
+ export class CharacterMessagesResource extends BaseResource {
9
+ /**
10
+ * List messages sent or received by character (paginated)
11
+ * @param options - Character UID, message mode, and optional pagination parameters
12
+ * @example
13
+ * const messages = await client.character.messages.list({ uid: '1:12345', mode: 'received' });
14
+ * const moreMessages = await client.character.messages.list({ uid: '1:12345', mode: 'received', start_index: 51, item_count: 50 });
15
+ */
16
+ async list(options) {
17
+ const params = {
18
+ start_index: options.start_index || 1,
19
+ item_count: options.item_count || 50,
20
+ };
21
+ return this.http.get(`/character/${options.uid}/messages/${options.mode}`, { params });
22
+ }
23
+ /**
24
+ * Get a specific message
25
+ */
26
+ async get(options) {
27
+ return this.request('GET', `/character/${options.uid}/messages/${options.messageId}`);
28
+ }
29
+ /**
30
+ * Delete a message
31
+ */
32
+ async delete(options) {
33
+ return this.request('DELETE', `/character/${options.uid}/messages/${options.messageId}`);
34
+ }
35
+ /**
36
+ * Send a message
37
+ */
38
+ async create(options) {
39
+ return this.request('PUT', `/character/${options.uid}/messages/sent`, {
40
+ recipient: options.recipient,
41
+ subject: options.subject,
42
+ body: options.body,
43
+ });
44
+ }
45
+ }
46
+ /**
47
+ * Character skills resource
48
+ */
49
+ export class CharacterSkillsResource extends BaseResource {
50
+ /**
51
+ * Get character's skills
52
+ */
53
+ async list(options) {
54
+ return this.request('GET', `/character/${options.uid}/skills`);
55
+ }
56
+ }
57
+ /**
58
+ * Character privileges resource
59
+ */
60
+ export class CharacterPrivilegesResource extends BaseResource {
61
+ /**
62
+ * Get character's privileges
63
+ */
64
+ async list(options) {
65
+ return this.request('GET', `/character/${options.uid}/privileges`);
66
+ }
67
+ /**
68
+ * Get or update a specific privilege
69
+ */
70
+ async get(options) {
71
+ return this.request('GET', `/character/${options.uid}/privileges/${options.privilegeGroup}/${options.privilege}`);
72
+ }
73
+ /**
74
+ * Update a specific privilege
75
+ */
76
+ async update(options) {
77
+ return this.request('POST', `/character/${options.uid}/privileges/${options.privilegeGroup}/${options.privilege}`, { value: options.value });
78
+ }
79
+ }
80
+ /**
81
+ * Character credits resource
82
+ */
83
+ export class CharacterCreditsResource extends BaseResource {
84
+ /**
85
+ * Get character's credits
86
+ */
87
+ async get(options) {
88
+ return this.request('GET', `/character/${options.uid}/credits`);
89
+ }
90
+ /**
91
+ * Update character's credits (transfer)
92
+ */
93
+ async update(options) {
94
+ return this.request('POST', `/character/${options.uid}/credits`, {
95
+ amount: options.amount,
96
+ recipient: options.recipient,
97
+ });
98
+ }
99
+ }
100
+ /**
101
+ * Character credit log resource
102
+ */
103
+ export class CharacterCreditlogResource extends BaseResource {
104
+ /**
105
+ * Get character's credit log (paginated)
106
+ * @param options - Character UID and optional pagination/filtering parameters
107
+ * @example
108
+ * const creditlog = await client.character.creditlog.list({ uid: '1:12345' });
109
+ * const moreLogs = await client.character.creditlog.list({ uid: '1:12345', start_index: 51, item_count: 100 });
110
+ * const oldestLogs = await client.character.creditlog.list({ uid: '1:12345', start_id: 1 });
111
+ */
112
+ async list(options) {
113
+ const params = {
114
+ start_index: options.start_index || 1,
115
+ item_count: options.item_count || 50,
116
+ };
117
+ if (options.start_id !== undefined) {
118
+ params.start_id = options.start_id;
119
+ }
120
+ return this.http.get(`/character/${options.uid}/creditlog`, { params });
121
+ }
122
+ }
123
+ /**
124
+ * Character permissions resource
125
+ */
126
+ export class CharacterPermissionsResource extends BaseResource {
127
+ /**
128
+ * Get permissions granted to API client for this character
129
+ */
130
+ async list(options) {
131
+ return this.request('GET', `/character/${options.uid}/permissions`);
132
+ }
133
+ }
134
+ /**
135
+ * Character resource for managing characters
136
+ */
137
+ export class CharacterResource extends BaseResource {
138
+ constructor(http) {
139
+ super(http);
140
+ this.messages = new CharacterMessagesResource(http);
141
+ this.skills = new CharacterSkillsResource(http);
142
+ this.privileges = new CharacterPrivilegesResource(http);
143
+ this.credits = new CharacterCreditsResource(http);
144
+ this.creditlog = new CharacterCreditlogResource(http);
145
+ this.permissions = new CharacterPermissionsResource(http);
146
+ }
147
+ /**
148
+ * Get the currently authenticated user's character
149
+ * Requires authentication
150
+ * @returns The authenticated character's full profile
151
+ */
152
+ async me() {
153
+ return this.request('GET', '/character/');
154
+ }
155
+ /**
156
+ * Get character by UID
157
+ */
158
+ async get(options) {
159
+ return this.request('GET', `/character/${options.uid}`);
160
+ }
161
+ /**
162
+ * Get character UID by handle (username)
163
+ */
164
+ async getByHandle(options) {
165
+ return this.request('GET', `/character/handlecheck/${options.handle}`);
166
+ }
167
+ }
168
+ //# sourceMappingURL=CharacterResource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CharacterResource.js","sourceRoot":"","sources":["../../../src/resources/CharacterResource.ts"],"names":[],"mappings":"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"}