@chanomhub/sdk 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/errors.test.d.ts +2 -0
- package/dist/__tests__/errors.test.d.ts.map +1 -0
- package/dist/__tests__/errors.test.js +116 -0
- package/dist/__tests__/errors.test.js.map +1 -0
- package/dist/__tests__/mocks/handlers.d.ts +1 -1
- package/dist/__tests__/mocks/handlers.d.ts.map +1 -1
- package/dist/__tests__/mocks/handlers.js +134 -0
- package/dist/__tests__/mocks/handlers.js.map +1 -1
- package/dist/__tests__/repositories.test.d.ts +2 -0
- package/dist/__tests__/repositories.test.d.ts.map +1 -0
- package/dist/__tests__/repositories.test.js +103 -0
- package/dist/__tests__/repositories.test.js.map +1 -0
- package/dist/client.d.ts +18 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +53 -0
- package/dist/client.js.map +1 -1
- package/dist/errors/index.d.ts +42 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +93 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/repositories/articleRepository.d.ts +4 -1
- package/dist/repositories/articleRepository.d.ts.map +1 -1
- package/dist/repositories/articleRepository.js +40 -0
- package/dist/repositories/articleRepository.js.map +1 -1
- package/dist/repositories/favoritesRepository.d.ts +20 -0
- package/dist/repositories/favoritesRepository.d.ts.map +1 -0
- package/dist/repositories/favoritesRepository.js +32 -0
- package/dist/repositories/favoritesRepository.js.map +1 -0
- package/dist/repositories/index.d.ts +3 -0
- package/dist/repositories/index.d.ts.map +1 -1
- package/dist/repositories/index.js +7 -1
- package/dist/repositories/index.js.map +1 -1
- package/dist/repositories/searchRepository.d.ts +28 -0
- package/dist/repositories/searchRepository.d.ts.map +1 -0
- package/dist/repositories/searchRepository.js +74 -0
- package/dist/repositories/searchRepository.js.map +1 -0
- package/dist/repositories/usersRepository.d.ts +20 -0
- package/dist/repositories/usersRepository.d.ts.map +1 -0
- package/dist/repositories/usersRepository.js +54 -0
- package/dist/repositories/usersRepository.js.map +1 -0
- package/dist/types/common.d.ts +7 -0
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/user.d.ts +28 -0
- package/dist/types/user.d.ts.map +1 -0
- package/dist/types/user.js +6 -0
- package/dist/types/user.js.map +1 -0
- package/package.json +5 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.test.d.ts","sourceRoot":"","sources":["../../__tests__/errors.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const errors_1 = require("../errors");
|
|
5
|
+
(0, vitest_1.describe)('Error Classes', () => {
|
|
6
|
+
(0, vitest_1.describe)('ChanomhubError', () => {
|
|
7
|
+
(0, vitest_1.it)('should create error with message and defaults', () => {
|
|
8
|
+
const error = new errors_1.ChanomhubError('Test error');
|
|
9
|
+
(0, vitest_1.expect)(error.message).toBe('Test error');
|
|
10
|
+
(0, vitest_1.expect)(error.statusCode).toBe(500);
|
|
11
|
+
(0, vitest_1.expect)(error.code).toBe('UNKNOWN_ERROR');
|
|
12
|
+
(0, vitest_1.expect)(error.name).toBe('ChanomhubError');
|
|
13
|
+
});
|
|
14
|
+
(0, vitest_1.it)('should create error with custom status and code', () => {
|
|
15
|
+
const error = new errors_1.ChanomhubError('Custom', 418, 'TEAPOT');
|
|
16
|
+
(0, vitest_1.expect)(error.statusCode).toBe(418);
|
|
17
|
+
(0, vitest_1.expect)(error.code).toBe('TEAPOT');
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
(0, vitest_1.describe)('AuthenticationError', () => {
|
|
21
|
+
(0, vitest_1.it)('should create with default message', () => {
|
|
22
|
+
const error = new errors_1.AuthenticationError();
|
|
23
|
+
(0, vitest_1.expect)(error.message).toBe('Authentication required');
|
|
24
|
+
(0, vitest_1.expect)(error.statusCode).toBe(401);
|
|
25
|
+
(0, vitest_1.expect)(error.code).toBe('AUTHENTICATION_ERROR');
|
|
26
|
+
(0, vitest_1.expect)(error.name).toBe('AuthenticationError');
|
|
27
|
+
});
|
|
28
|
+
(0, vitest_1.it)('should create with custom message', () => {
|
|
29
|
+
const error = new errors_1.AuthenticationError('Token expired');
|
|
30
|
+
(0, vitest_1.expect)(error.message).toBe('Token expired');
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
(0, vitest_1.describe)('AuthorizationError', () => {
|
|
34
|
+
(0, vitest_1.it)('should create with correct properties', () => {
|
|
35
|
+
const error = new errors_1.AuthorizationError();
|
|
36
|
+
(0, vitest_1.expect)(error.message).toBe('Permission denied');
|
|
37
|
+
(0, vitest_1.expect)(error.statusCode).toBe(403);
|
|
38
|
+
(0, vitest_1.expect)(error.code).toBe('AUTHORIZATION_ERROR');
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
(0, vitest_1.describe)('NotFoundError', () => {
|
|
42
|
+
(0, vitest_1.it)('should create with correct properties', () => {
|
|
43
|
+
const error = new errors_1.NotFoundError();
|
|
44
|
+
(0, vitest_1.expect)(error.message).toBe('Resource not found');
|
|
45
|
+
(0, vitest_1.expect)(error.statusCode).toBe(404);
|
|
46
|
+
(0, vitest_1.expect)(error.code).toBe('NOT_FOUND');
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
(0, vitest_1.describe)('ValidationError', () => {
|
|
50
|
+
(0, vitest_1.it)('should create with errors object', () => {
|
|
51
|
+
const validationErrors = { email: ['Invalid email'], password: ['Too short'] };
|
|
52
|
+
const error = new errors_1.ValidationError('Validation failed', validationErrors);
|
|
53
|
+
(0, vitest_1.expect)(error.statusCode).toBe(400);
|
|
54
|
+
(0, vitest_1.expect)(error.code).toBe('VALIDATION_ERROR');
|
|
55
|
+
(0, vitest_1.expect)(error.errors).toEqual(validationErrors);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
(0, vitest_1.describe)('NetworkError', () => {
|
|
59
|
+
(0, vitest_1.it)('should create with correct properties', () => {
|
|
60
|
+
const error = new errors_1.NetworkError('Connection timeout');
|
|
61
|
+
(0, vitest_1.expect)(error.message).toBe('Connection timeout');
|
|
62
|
+
(0, vitest_1.expect)(error.statusCode).toBe(0);
|
|
63
|
+
(0, vitest_1.expect)(error.code).toBe('NETWORK_ERROR');
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
(0, vitest_1.describe)('RateLimitError', () => {
|
|
67
|
+
(0, vitest_1.it)('should create with retryAfter', () => {
|
|
68
|
+
const error = new errors_1.RateLimitError('Too many requests', 60);
|
|
69
|
+
(0, vitest_1.expect)(error.statusCode).toBe(429);
|
|
70
|
+
(0, vitest_1.expect)(error.code).toBe('RATE_LIMIT');
|
|
71
|
+
(0, vitest_1.expect)(error.retryAfter).toBe(60);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
(0, vitest_1.describe)('createErrorFromStatus', () => {
|
|
75
|
+
(0, vitest_1.it)('should create AuthenticationError for 401', () => {
|
|
76
|
+
const error = (0, errors_1.createErrorFromStatus)(401, 'Unauthorized');
|
|
77
|
+
(0, vitest_1.expect)(error).toBeInstanceOf(errors_1.AuthenticationError);
|
|
78
|
+
});
|
|
79
|
+
(0, vitest_1.it)('should create AuthorizationError for 403', () => {
|
|
80
|
+
const error = (0, errors_1.createErrorFromStatus)(403, 'Forbidden');
|
|
81
|
+
(0, vitest_1.expect)(error).toBeInstanceOf(errors_1.AuthorizationError);
|
|
82
|
+
});
|
|
83
|
+
(0, vitest_1.it)('should create NotFoundError for 404', () => {
|
|
84
|
+
const error = (0, errors_1.createErrorFromStatus)(404, 'Not found');
|
|
85
|
+
(0, vitest_1.expect)(error).toBeInstanceOf(errors_1.NotFoundError);
|
|
86
|
+
});
|
|
87
|
+
(0, vitest_1.it)('should create ValidationError for 400', () => {
|
|
88
|
+
const error = (0, errors_1.createErrorFromStatus)(400, 'Bad request');
|
|
89
|
+
(0, vitest_1.expect)(error).toBeInstanceOf(errors_1.ValidationError);
|
|
90
|
+
});
|
|
91
|
+
(0, vitest_1.it)('should create RateLimitError for 429', () => {
|
|
92
|
+
const error = (0, errors_1.createErrorFromStatus)(429, 'Rate limited');
|
|
93
|
+
(0, vitest_1.expect)(error).toBeInstanceOf(errors_1.RateLimitError);
|
|
94
|
+
});
|
|
95
|
+
(0, vitest_1.it)('should create ChanomhubError for unknown status', () => {
|
|
96
|
+
const error = (0, errors_1.createErrorFromStatus)(500, 'Server error');
|
|
97
|
+
(0, vitest_1.expect)(error).toBeInstanceOf(errors_1.ChanomhubError);
|
|
98
|
+
(0, vitest_1.expect)(error.statusCode).toBe(500);
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
(0, vitest_1.describe)('Error inheritance', () => {
|
|
102
|
+
(0, vitest_1.it)('all errors should be instanceof ChanomhubError', () => {
|
|
103
|
+
(0, vitest_1.expect)(new errors_1.AuthenticationError()).toBeInstanceOf(errors_1.ChanomhubError);
|
|
104
|
+
(0, vitest_1.expect)(new errors_1.AuthorizationError()).toBeInstanceOf(errors_1.ChanomhubError);
|
|
105
|
+
(0, vitest_1.expect)(new errors_1.NotFoundError()).toBeInstanceOf(errors_1.ChanomhubError);
|
|
106
|
+
(0, vitest_1.expect)(new errors_1.ValidationError()).toBeInstanceOf(errors_1.ChanomhubError);
|
|
107
|
+
(0, vitest_1.expect)(new errors_1.NetworkError()).toBeInstanceOf(errors_1.ChanomhubError);
|
|
108
|
+
(0, vitest_1.expect)(new errors_1.RateLimitError()).toBeInstanceOf(errors_1.ChanomhubError);
|
|
109
|
+
});
|
|
110
|
+
(0, vitest_1.it)('all errors should be instanceof Error', () => {
|
|
111
|
+
(0, vitest_1.expect)(new errors_1.ChanomhubError('test')).toBeInstanceOf(Error);
|
|
112
|
+
(0, vitest_1.expect)(new errors_1.AuthenticationError()).toBeInstanceOf(Error);
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
//# sourceMappingURL=errors.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../../__tests__/errors.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const handlers: import("msw").GraphQLHandler[];
|
|
1
|
+
export declare const handlers: (import("msw").GraphQLHandler | import("msw").HttpHandler)[];
|
|
2
2
|
//# sourceMappingURL=handlers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../../__tests__/mocks/handlers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../../__tests__/mocks/handlers.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,QAAQ,8DAyPpB,CAAC"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.handlers = void 0;
|
|
4
4
|
const msw_1 = require("msw");
|
|
5
|
+
const BASE_URL = 'https://api.chanomhub.com';
|
|
5
6
|
exports.handlers = [
|
|
6
7
|
// Happy path: Get Articles
|
|
7
8
|
msw_1.graphql.query('GetArticles', () => {
|
|
@@ -40,6 +41,51 @@ exports.handlers = [
|
|
|
40
41
|
},
|
|
41
42
|
});
|
|
42
43
|
}),
|
|
44
|
+
// Paginated Articles
|
|
45
|
+
msw_1.graphql.query('GetArticlesPaginated', () => {
|
|
46
|
+
return msw_1.HttpResponse.json({
|
|
47
|
+
data: {
|
|
48
|
+
articles: [
|
|
49
|
+
{ id: 1, title: 'Article 1', slug: 'article-1', mainImage: 'img1.jpg', author: { name: 'A1', image: null }, tags: [], platforms: [], categories: [], creators: [], images: [] },
|
|
50
|
+
{ id: 2, title: 'Article 2', slug: 'article-2', mainImage: 'img2.jpg', author: { name: 'A2', image: null }, tags: [], platforms: [], categories: [], creators: [], images: [] },
|
|
51
|
+
],
|
|
52
|
+
articlesCount: 100,
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
}),
|
|
56
|
+
// Search Articles
|
|
57
|
+
msw_1.graphql.query('SearchArticles', () => {
|
|
58
|
+
return msw_1.HttpResponse.json({
|
|
59
|
+
data: {
|
|
60
|
+
articles: [
|
|
61
|
+
{ id: 1, title: 'Found Article', slug: 'found-article', mainImage: 'found.jpg', author: { name: 'Author', image: null }, tags: [], engine: { id: 'e1', name: 'RenPy' } },
|
|
62
|
+
],
|
|
63
|
+
articlesCount: 1,
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
}),
|
|
67
|
+
// Articles by Tag/Platform/Category
|
|
68
|
+
msw_1.graphql.query('GetArticlesByTag', () => {
|
|
69
|
+
return msw_1.HttpResponse.json({
|
|
70
|
+
data: {
|
|
71
|
+
articles: [{ id: 1, title: 'Tagged Article', slug: 'tagged', mainImage: null, author: { name: 'A', image: null }, tags: [], platforms: [], categories: [], creators: [], images: [] }],
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
}),
|
|
75
|
+
msw_1.graphql.query('GetArticlesByPlatform', () => {
|
|
76
|
+
return msw_1.HttpResponse.json({
|
|
77
|
+
data: {
|
|
78
|
+
articles: [{ id: 1, title: 'Platform Article', slug: 'platform', mainImage: null, author: { name: 'A', image: null }, tags: [], platforms: [], categories: [], creators: [], images: [] }],
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
}),
|
|
82
|
+
msw_1.graphql.query('GetArticlesByCategory', () => {
|
|
83
|
+
return msw_1.HttpResponse.json({
|
|
84
|
+
data: {
|
|
85
|
+
articles: [{ id: 1, title: 'Category Article', slug: 'category', mainImage: null, author: { name: 'A', image: null }, tags: [], platforms: [], categories: [], creators: [], images: [] }],
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
}),
|
|
43
89
|
// Happy path: Get Article By Slug
|
|
44
90
|
msw_1.graphql.query('GetArticleBySlug', ({ variables }) => {
|
|
45
91
|
const { slug } = variables;
|
|
@@ -88,6 +134,42 @@ exports.handlers = [
|
|
|
88
134
|
},
|
|
89
135
|
});
|
|
90
136
|
}),
|
|
137
|
+
// Get Article with Downloads
|
|
138
|
+
msw_1.graphql.query('GetArticleWithDownloads', () => {
|
|
139
|
+
return msw_1.HttpResponse.json({
|
|
140
|
+
data: {
|
|
141
|
+
article: {
|
|
142
|
+
id: 1,
|
|
143
|
+
title: 'Article With Downloads',
|
|
144
|
+
slug: 'with-downloads',
|
|
145
|
+
description: 'Desc',
|
|
146
|
+
body: 'Body',
|
|
147
|
+
ver: '1.0',
|
|
148
|
+
createdAt: '2023-01-01',
|
|
149
|
+
updatedAt: '2023-01-01',
|
|
150
|
+
status: 'PUBLISHED',
|
|
151
|
+
engine: { id: 'e1', name: 'RenPy' },
|
|
152
|
+
mainImage: 'main.jpg',
|
|
153
|
+
backgroundImage: null,
|
|
154
|
+
coverImage: null,
|
|
155
|
+
favorited: false,
|
|
156
|
+
favoritesCount: 5,
|
|
157
|
+
sequentialCode: '001',
|
|
158
|
+
author: { name: 'Author', bio: null, image: null, backgroundImage: null, following: false, socialMediaLinks: [] },
|
|
159
|
+
images: [],
|
|
160
|
+
creators: [],
|
|
161
|
+
tags: [],
|
|
162
|
+
platforms: [],
|
|
163
|
+
categories: [],
|
|
164
|
+
mods: [],
|
|
165
|
+
},
|
|
166
|
+
downloads: [
|
|
167
|
+
{ id: 1, name: 'Download 1', url: 'https://dl.com/1', isActive: true, vipOnly: false },
|
|
168
|
+
],
|
|
169
|
+
officialDownloadSources: [],
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
}),
|
|
91
173
|
// Error path: Internal Server Error simulation
|
|
92
174
|
msw_1.graphql.query('ServerErrorQuery', () => {
|
|
93
175
|
return new msw_1.HttpResponse(null, { status: 500 });
|
|
@@ -100,5 +182,57 @@ exports.handlers = [
|
|
|
100
182
|
]
|
|
101
183
|
});
|
|
102
184
|
}),
|
|
185
|
+
// ===================== REST API Handlers =====================
|
|
186
|
+
// Favorites - Add
|
|
187
|
+
msw_1.http.post(`${BASE_URL}/api/articles/:slug/favorite`, ({ params }) => {
|
|
188
|
+
const { slug } = params;
|
|
189
|
+
if (slug === 'unauthorized') {
|
|
190
|
+
return new msw_1.HttpResponse(null, { status: 401 });
|
|
191
|
+
}
|
|
192
|
+
return msw_1.HttpResponse.json({
|
|
193
|
+
article: { id: 1, slug, title: 'Favorited Article', favorited: true, favoritesCount: 11 }
|
|
194
|
+
});
|
|
195
|
+
}),
|
|
196
|
+
// Favorites - Remove
|
|
197
|
+
msw_1.http.delete(`${BASE_URL}/api/articles/:slug/favorite`, ({ params }) => {
|
|
198
|
+
const { slug } = params;
|
|
199
|
+
return msw_1.HttpResponse.json({
|
|
200
|
+
article: { id: 1, slug, title: 'Unfavorited Article', favorited: false, favoritesCount: 10 }
|
|
201
|
+
});
|
|
202
|
+
}),
|
|
203
|
+
// Users - Get Current User
|
|
204
|
+
msw_1.http.get(`${BASE_URL}/api/user`, ({ request }) => {
|
|
205
|
+
const auth = request.headers.get('Authorization');
|
|
206
|
+
if (!auth) {
|
|
207
|
+
return new msw_1.HttpResponse(null, { status: 401 });
|
|
208
|
+
}
|
|
209
|
+
return msw_1.HttpResponse.json({
|
|
210
|
+
user: { id: 1, email: 'test@example.com', username: 'testuser', bio: 'Hello', image: 'avatar.jpg' }
|
|
211
|
+
});
|
|
212
|
+
}),
|
|
213
|
+
// Profiles - Get Profile
|
|
214
|
+
msw_1.http.get(`${BASE_URL}/api/profiles/:username`, ({ params }) => {
|
|
215
|
+
const { username } = params;
|
|
216
|
+
if (username === 'notfound') {
|
|
217
|
+
return new msw_1.HttpResponse(null, { status: 404 });
|
|
218
|
+
}
|
|
219
|
+
return msw_1.HttpResponse.json({
|
|
220
|
+
profile: { username, bio: 'User bio', image: 'profile.jpg', following: false }
|
|
221
|
+
});
|
|
222
|
+
}),
|
|
223
|
+
// Profiles - Follow
|
|
224
|
+
msw_1.http.post(`${BASE_URL}/api/profiles/:username/follow`, ({ params }) => {
|
|
225
|
+
const { username } = params;
|
|
226
|
+
return msw_1.HttpResponse.json({
|
|
227
|
+
profile: { username, bio: 'User bio', image: 'profile.jpg', following: true }
|
|
228
|
+
});
|
|
229
|
+
}),
|
|
230
|
+
// Profiles - Unfollow
|
|
231
|
+
msw_1.http.delete(`${BASE_URL}/api/profiles/:username/follow`, ({ params }) => {
|
|
232
|
+
const { username } = params;
|
|
233
|
+
return msw_1.HttpResponse.json({
|
|
234
|
+
profile: { username, bio: 'User bio', image: 'profile.jpg', following: false }
|
|
235
|
+
});
|
|
236
|
+
}),
|
|
103
237
|
];
|
|
104
238
|
//# sourceMappingURL=handlers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../../__tests__/mocks/handlers.ts"],"names":[],"mappings":";;;AAAA,6BAAkD;
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../../__tests__/mocks/handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repositories.test.d.ts","sourceRoot":"","sources":["../../__tests__/repositories.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const index_1 = require("../index");
|
|
5
|
+
(0, vitest_1.describe)('Repositories Integration Tests', () => {
|
|
6
|
+
(0, vitest_1.describe)('ArticleRepository', () => {
|
|
7
|
+
(0, vitest_1.it)('should get paginated articles', async () => {
|
|
8
|
+
const client = (0, index_1.createChanomhubClient)();
|
|
9
|
+
const result = await client.articles.getAllPaginated({ limit: 10, offset: 0 });
|
|
10
|
+
(0, vitest_1.expect)(result.items).toHaveLength(2);
|
|
11
|
+
(0, vitest_1.expect)(result.total).toBe(100);
|
|
12
|
+
(0, vitest_1.expect)(result.page).toBe(1);
|
|
13
|
+
(0, vitest_1.expect)(result.pageSize).toBe(10);
|
|
14
|
+
});
|
|
15
|
+
(0, vitest_1.it)('should get articles by tag', async () => {
|
|
16
|
+
const client = (0, index_1.createChanomhubClient)();
|
|
17
|
+
const articles = await client.articles.getByTag('renpy');
|
|
18
|
+
(0, vitest_1.expect)(articles).toHaveLength(1);
|
|
19
|
+
(0, vitest_1.expect)(articles[0].title).toBe('Tagged Article');
|
|
20
|
+
});
|
|
21
|
+
(0, vitest_1.it)('should get articles by platform', async () => {
|
|
22
|
+
const client = (0, index_1.createChanomhubClient)();
|
|
23
|
+
const articles = await client.articles.getByPlatform('windows');
|
|
24
|
+
(0, vitest_1.expect)(articles).toHaveLength(1);
|
|
25
|
+
(0, vitest_1.expect)(articles[0].title).toBe('Platform Article');
|
|
26
|
+
});
|
|
27
|
+
(0, vitest_1.it)('should get articles by category', async () => {
|
|
28
|
+
const client = (0, index_1.createChanomhubClient)();
|
|
29
|
+
const articles = await client.articles.getByCategory('action');
|
|
30
|
+
(0, vitest_1.expect)(articles).toHaveLength(1);
|
|
31
|
+
(0, vitest_1.expect)(articles[0].title).toBe('Category Article');
|
|
32
|
+
});
|
|
33
|
+
(0, vitest_1.it)('should get article with downloads', async () => {
|
|
34
|
+
const client = (0, index_1.createChanomhubClient)();
|
|
35
|
+
const result = await client.articles.getWithDownloads('with-downloads');
|
|
36
|
+
(0, vitest_1.expect)(result.article).not.toBeNull();
|
|
37
|
+
(0, vitest_1.expect)(result.downloads).toHaveLength(1);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
(0, vitest_1.describe)('SearchRepository', () => {
|
|
41
|
+
(0, vitest_1.it)('should search articles', async () => {
|
|
42
|
+
const client = (0, index_1.createChanomhubClient)();
|
|
43
|
+
const result = await client.search.articles('test query');
|
|
44
|
+
(0, vitest_1.expect)(result.items).toHaveLength(1);
|
|
45
|
+
(0, vitest_1.expect)(result.items[0].title).toBe('Found Article');
|
|
46
|
+
(0, vitest_1.expect)(result.total).toBe(1);
|
|
47
|
+
});
|
|
48
|
+
(0, vitest_1.it)('should search with filters', async () => {
|
|
49
|
+
const client = (0, index_1.createChanomhubClient)();
|
|
50
|
+
const result = await client.search.articles('game', { tag: 'renpy', limit: 5 });
|
|
51
|
+
(0, vitest_1.expect)(result.items).toHaveLength(1);
|
|
52
|
+
(0, vitest_1.expect)(result.pageSize).toBe(5);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
(0, vitest_1.describe)('FavoritesRepository', () => {
|
|
56
|
+
(0, vitest_1.it)('should add article to favorites', async () => {
|
|
57
|
+
const client = (0, index_1.createAuthenticatedClient)('test-token');
|
|
58
|
+
const result = await client.favorites.add('test-article');
|
|
59
|
+
(0, vitest_1.expect)(result).not.toBeNull();
|
|
60
|
+
(0, vitest_1.expect)(result === null || result === void 0 ? void 0 : result.article.favorited).toBe(true);
|
|
61
|
+
});
|
|
62
|
+
(0, vitest_1.it)('should remove article from favorites', async () => {
|
|
63
|
+
const client = (0, index_1.createAuthenticatedClient)('test-token');
|
|
64
|
+
const result = await client.favorites.remove('test-article');
|
|
65
|
+
(0, vitest_1.expect)(result).not.toBeNull();
|
|
66
|
+
(0, vitest_1.expect)(result === null || result === void 0 ? void 0 : result.article.favorited).toBe(false);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
(0, vitest_1.describe)('UsersRepository', () => {
|
|
70
|
+
(0, vitest_1.it)('should get current user when authenticated', async () => {
|
|
71
|
+
const client = (0, index_1.createAuthenticatedClient)('test-token');
|
|
72
|
+
const user = await client.users.getCurrentUser();
|
|
73
|
+
(0, vitest_1.expect)(user).not.toBeNull();
|
|
74
|
+
(0, vitest_1.expect)(user === null || user === void 0 ? void 0 : user.username).toBe('testuser');
|
|
75
|
+
(0, vitest_1.expect)(user === null || user === void 0 ? void 0 : user.email).toBe('test@example.com');
|
|
76
|
+
});
|
|
77
|
+
(0, vitest_1.it)('should return null when not authenticated', async () => {
|
|
78
|
+
const client = (0, index_1.createChanomhubClient)();
|
|
79
|
+
const user = await client.users.getCurrentUser();
|
|
80
|
+
(0, vitest_1.expect)(user).toBeNull();
|
|
81
|
+
});
|
|
82
|
+
(0, vitest_1.it)('should get user profile', async () => {
|
|
83
|
+
const client = (0, index_1.createChanomhubClient)();
|
|
84
|
+
const profile = await client.users.getProfile('testuser');
|
|
85
|
+
(0, vitest_1.expect)(profile).not.toBeNull();
|
|
86
|
+
(0, vitest_1.expect)(profile === null || profile === void 0 ? void 0 : profile.username).toBe('testuser');
|
|
87
|
+
(0, vitest_1.expect)(profile === null || profile === void 0 ? void 0 : profile.following).toBe(false);
|
|
88
|
+
});
|
|
89
|
+
(0, vitest_1.it)('should follow user', async () => {
|
|
90
|
+
const client = (0, index_1.createAuthenticatedClient)('test-token');
|
|
91
|
+
const profile = await client.users.follow('testuser');
|
|
92
|
+
(0, vitest_1.expect)(profile).not.toBeNull();
|
|
93
|
+
(0, vitest_1.expect)(profile === null || profile === void 0 ? void 0 : profile.following).toBe(true);
|
|
94
|
+
});
|
|
95
|
+
(0, vitest_1.it)('should unfollow user', async () => {
|
|
96
|
+
const client = (0, index_1.createAuthenticatedClient)('test-token');
|
|
97
|
+
const profile = await client.users.unfollow('testuser');
|
|
98
|
+
(0, vitest_1.expect)(profile).not.toBeNull();
|
|
99
|
+
(0, vitest_1.expect)(profile === null || profile === void 0 ? void 0 : profile.following).toBe(false);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
//# sourceMappingURL=repositories.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repositories.test.js","sourceRoot":"","sources":["../../__tests__/repositories.test.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -22,4 +22,22 @@ export interface FetchOptions {
|
|
|
22
22
|
*/
|
|
23
23
|
export declare function createGraphQLClient(config: ChanomhubConfig): <T>(query: string, variables?: Record<string, unknown>, options?: FetchOptions) => Promise<GraphQLResponse<T>>;
|
|
24
24
|
export type GraphQLFetcher = ReturnType<typeof createGraphQLClient>;
|
|
25
|
+
/**
|
|
26
|
+
* REST API response type
|
|
27
|
+
*/
|
|
28
|
+
export interface RestResponse<T> {
|
|
29
|
+
data: T | null;
|
|
30
|
+
error?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Creates a REST API client for non-GraphQL endpoints
|
|
34
|
+
*
|
|
35
|
+
* @param config - SDK configuration
|
|
36
|
+
* @returns REST fetch function
|
|
37
|
+
*/
|
|
38
|
+
export declare function createRestClient(config: ChanomhubConfig): <T>(endpoint: string, options?: {
|
|
39
|
+
method?: "GET" | "POST" | "PUT" | "DELETE";
|
|
40
|
+
body?: Record<string, unknown>;
|
|
41
|
+
}) => Promise<RestResponse<T>>;
|
|
42
|
+
export type RestFetcher = ReturnType<typeof createRestClient>;
|
|
25
43
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD,MAAM,WAAW,YAAY;IACzB,6BAA6B;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,IACpB,CAAC,EAChC,OAAO,MAAM,EACb,YAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACvC,UAAS,YAAiB,KAC3B,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CA8DjC;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD,MAAM,WAAW,YAAY;IACzB,6BAA6B;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,IACpB,CAAC,EAChC,OAAO,MAAM,EACb,YAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACvC,UAAS,YAAiB,KAC3B,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CA8DjC;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC3B,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,IACpB,CAAC,EAC7B,UAAU,MAAM,EAChB,UAAS;IACL,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7B,KACP,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAqD9B;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
|
package/dist/client.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.createGraphQLClient = createGraphQLClient;
|
|
10
|
+
exports.createRestClient = createRestClient;
|
|
10
11
|
const imageUrl_1 = require("./transforms/imageUrl");
|
|
11
12
|
/**
|
|
12
13
|
* Creates a GraphQL fetcher function with automatic image URL transformation
|
|
@@ -70,4 +71,56 @@ function createGraphQLClient(config) {
|
|
|
70
71
|
}
|
|
71
72
|
};
|
|
72
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Creates a REST API client for non-GraphQL endpoints
|
|
76
|
+
*
|
|
77
|
+
* @param config - SDK configuration
|
|
78
|
+
* @returns REST fetch function
|
|
79
|
+
*/
|
|
80
|
+
function createRestClient(config) {
|
|
81
|
+
return async function restFetch(endpoint, options = {}) {
|
|
82
|
+
const { method = 'GET', body } = options;
|
|
83
|
+
const headers = {
|
|
84
|
+
'Content-Type': 'application/json',
|
|
85
|
+
'Accept': 'application/json',
|
|
86
|
+
};
|
|
87
|
+
if (config.token) {
|
|
88
|
+
headers['Authorization'] = `Bearer ${config.token}`;
|
|
89
|
+
}
|
|
90
|
+
const fetchOptions = {
|
|
91
|
+
method,
|
|
92
|
+
headers,
|
|
93
|
+
cache: 'no-store', // REST calls are typically mutations, no caching
|
|
94
|
+
};
|
|
95
|
+
if (body) {
|
|
96
|
+
fetchOptions.body = JSON.stringify(body);
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
const res = await fetch(`${config.apiUrl}${endpoint}`, fetchOptions);
|
|
100
|
+
if (!res.ok) {
|
|
101
|
+
const errorText = await res.text();
|
|
102
|
+
console.error('REST fetch error:', res.status, errorText);
|
|
103
|
+
return {
|
|
104
|
+
data: null,
|
|
105
|
+
error: `HTTP ${res.status}: ${res.statusText}`,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
// Some endpoints may return empty body (204)
|
|
109
|
+
if (res.status === 204) {
|
|
110
|
+
return { data: null };
|
|
111
|
+
}
|
|
112
|
+
const json = await res.json();
|
|
113
|
+
// Transform image URLs if present
|
|
114
|
+
const transformedData = (0, imageUrl_1.transformImageUrlsDeep)(json, config.cdnUrl);
|
|
115
|
+
return { data: transformedData };
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
console.error('REST fetch exception:', error);
|
|
119
|
+
return {
|
|
120
|
+
data: null,
|
|
121
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
}
|
|
73
126
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../client.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAqBH,kDAmEC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chanomhub SDK - Error Classes
|
|
3
|
+
*
|
|
4
|
+
* Typed errors for better error handling in applications
|
|
5
|
+
*/
|
|
6
|
+
/** Base error class for all SDK errors */
|
|
7
|
+
export declare class ChanomhubError extends Error {
|
|
8
|
+
readonly statusCode: number;
|
|
9
|
+
readonly code: string;
|
|
10
|
+
constructor(message: string, statusCode?: number, code?: string);
|
|
11
|
+
}
|
|
12
|
+
/** Authentication error (401) - Missing or invalid token */
|
|
13
|
+
export declare class AuthenticationError extends ChanomhubError {
|
|
14
|
+
constructor(message?: string);
|
|
15
|
+
}
|
|
16
|
+
/** Authorization error (403) - Insufficient permissions */
|
|
17
|
+
export declare class AuthorizationError extends ChanomhubError {
|
|
18
|
+
constructor(message?: string);
|
|
19
|
+
}
|
|
20
|
+
/** Not found error (404) - Resource doesn't exist */
|
|
21
|
+
export declare class NotFoundError extends ChanomhubError {
|
|
22
|
+
constructor(message?: string);
|
|
23
|
+
}
|
|
24
|
+
/** Validation error (400) - Invalid request data */
|
|
25
|
+
export declare class ValidationError extends ChanomhubError {
|
|
26
|
+
readonly errors?: Record<string, string[]>;
|
|
27
|
+
constructor(message?: string, errors?: Record<string, string[]>);
|
|
28
|
+
}
|
|
29
|
+
/** Network error - Fetch failures, timeouts, etc. */
|
|
30
|
+
export declare class NetworkError extends ChanomhubError {
|
|
31
|
+
constructor(message?: string);
|
|
32
|
+
}
|
|
33
|
+
/** Rate limit error (429) - Too many requests */
|
|
34
|
+
export declare class RateLimitError extends ChanomhubError {
|
|
35
|
+
readonly retryAfter?: number;
|
|
36
|
+
constructor(message?: string, retryAfter?: number);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Creates the appropriate error class based on HTTP status code
|
|
40
|
+
*/
|
|
41
|
+
export declare function createErrorFromStatus(status: number, message: string): ChanomhubError;
|
|
42
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../errors/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,0CAA0C;AAC1C,qBAAa,cAAe,SAAQ,KAAK;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,OAAO,EAAE,MAAM,EAAE,UAAU,GAAE,MAAY,EAAE,IAAI,GAAE,MAAwB;CAWxF;AAED,4DAA4D;AAC5D,qBAAa,mBAAoB,SAAQ,cAAc;gBACvC,OAAO,GAAE,MAAkC;CAI1D;AAED,2DAA2D;AAC3D,qBAAa,kBAAmB,SAAQ,cAAc;gBACtC,OAAO,GAAE,MAA4B;CAIpD;AAED,qDAAqD;AACrD,qBAAa,aAAc,SAAQ,cAAc;gBACjC,OAAO,GAAE,MAA6B;CAIrD;AAED,oDAAoD;AACpD,qBAAa,eAAgB,SAAQ,cAAc;IAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBAE/B,OAAO,GAAE,MAA4B,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAKvF;AAED,qDAAqD;AACrD,qBAAa,YAAa,SAAQ,cAAc;gBAChC,OAAO,GAAE,MAAiC;CAIzD;AAED,iDAAiD;AACjD,qBAAa,cAAe,SAAQ,cAAc;IAC9C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;gBAEjB,OAAO,GAAE,MAA8B,EAAE,UAAU,CAAC,EAAE,MAAM;CAK3E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CAerF"}
|