@chanomhub/sdk 1.2.3 → 1.2.5
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__/client.test.js +13 -6
- package/dist/__tests__/client.test.js.map +1 -1
- package/dist/__tests__/imageUrl.test.js +88 -25
- package/dist/__tests__/imageUrl.test.js.map +1 -1
- package/dist/config.d.ts +37 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +7 -3
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/repositories/index.d.ts +1 -0
- package/dist/repositories/index.d.ts.map +1 -1
- package/dist/repositories/index.js +3 -1
- package/dist/repositories/index.js.map +1 -1
- package/dist/repositories/subscriptionsRepository.d.ts +44 -0
- package/dist/repositories/subscriptionsRepository.d.ts.map +1 -0
- package/dist/repositories/subscriptionsRepository.js +74 -0
- package/dist/repositories/subscriptionsRepository.js.map +1 -0
- package/dist/transforms/imageUrl.d.ts +23 -7
- package/dist/transforms/imageUrl.d.ts.map +1 -1
- package/dist/transforms/imageUrl.js +96 -26
- package/dist/transforms/imageUrl.js.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/subscription.d.ts +63 -0
- package/dist/types/subscription.d.ts.map +1 -0
- package/dist/types/subscription.js +6 -0
- package/dist/types/subscription.js.map +1 -0
- package/package.json +1 -1
|
@@ -4,13 +4,20 @@ const vitest_1 = require("vitest");
|
|
|
4
4
|
const index_1 = require("../index");
|
|
5
5
|
const config_1 = require("../config");
|
|
6
6
|
const CDN_URL = config_1.DEFAULT_CONFIG.cdnUrl;
|
|
7
|
+
const STORAGE_URL = config_1.DEFAULT_CONFIG.storageUrl;
|
|
8
|
+
// Helper to build expected imgproxy URL
|
|
9
|
+
const buildImgproxyUrl = (filename) => {
|
|
10
|
+
const sourceUrl = `${STORAGE_URL}/${filename}`;
|
|
11
|
+
const encodedUrl = encodeURIComponent(sourceUrl);
|
|
12
|
+
return `${CDN_URL}/insecure/plain/${encodedUrl}@webp`;
|
|
13
|
+
};
|
|
7
14
|
(0, vitest_1.describe)('Chanomhub SDK Integration Tests (MSW)', () => {
|
|
8
15
|
(0, vitest_1.it)('should fetch and transform articles correctly', async () => {
|
|
9
16
|
const client = (0, index_1.createChanomhubClient)();
|
|
10
17
|
const articles = await client.articles.getAll();
|
|
11
18
|
(0, vitest_1.expect)(articles).toHaveLength(2);
|
|
12
|
-
// Check transformation locally (filename only ->
|
|
13
|
-
(0, vitest_1.expect)(articles[0].mainImage).toBe(
|
|
19
|
+
// Check transformation locally (filename only -> imgproxy URL)
|
|
20
|
+
(0, vitest_1.expect)(articles[0].mainImage).toBe(buildImgproxyUrl('article1.jpg'));
|
|
14
21
|
// Check no double transformation (full URL stays full URL)
|
|
15
22
|
(0, vitest_1.expect)(articles[1].mainImage).toBe('https://external.com/image.jpg');
|
|
16
23
|
});
|
|
@@ -20,12 +27,12 @@ const CDN_URL = config_1.DEFAULT_CONFIG.cdnUrl;
|
|
|
20
27
|
(0, vitest_1.expect)(article).not.toBeNull();
|
|
21
28
|
(0, vitest_1.expect)(article.slug).toBe('test-article-1');
|
|
22
29
|
// Check flat field
|
|
23
|
-
(0, vitest_1.expect)(article.mainImage).toBe(
|
|
30
|
+
(0, vitest_1.expect)(article.mainImage).toBe(buildImgproxyUrl('article1.jpg'));
|
|
24
31
|
// Check nested author image
|
|
25
|
-
(0, vitest_1.expect)(article.author.image).toBe(
|
|
32
|
+
(0, vitest_1.expect)(article.author.image).toBe(buildImgproxyUrl('john.jpg'));
|
|
26
33
|
// Check array of images
|
|
27
|
-
(0, vitest_1.expect)(article.images[0].url).toBe(
|
|
28
|
-
(0, vitest_1.expect)(article.images[1].url).toBe(
|
|
34
|
+
(0, vitest_1.expect)(article.images[0].url).toBe(buildImgproxyUrl('img1.jpg'));
|
|
35
|
+
(0, vitest_1.expect)(article.images[1].url).toBe(buildImgproxyUrl('img2.jpg'));
|
|
29
36
|
});
|
|
30
37
|
(0, vitest_1.it)('should return null when article not found', async () => {
|
|
31
38
|
const client = (0, index_1.createChanomhubClient)();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../__tests__/client.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,oCAAiD;AACjD,sCAA2C;AAE3C,MAAM,OAAO,GAAG,uBAAc,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../__tests__/client.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,60 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const vitest_1 = require("vitest");
|
|
4
4
|
const imageUrl_1 = require("../transforms/imageUrl");
|
|
5
|
-
const CDN_URL = 'https://
|
|
5
|
+
const CDN_URL = 'https://imgproxy.chanomhub.com';
|
|
6
6
|
const STORAGE_URL = 'https://cdn.chanomhub.com';
|
|
7
|
+
// Helper to build expected imgproxy URL (default format: webp)
|
|
8
|
+
const buildImgproxyUrl = (filename, optionsPath) => {
|
|
9
|
+
const sourceUrl = `${STORAGE_URL}/${filename}`;
|
|
10
|
+
const encodedUrl = encodeURIComponent(sourceUrl);
|
|
11
|
+
if (optionsPath) {
|
|
12
|
+
return `${CDN_URL}/insecure/${optionsPath}/plain/${encodedUrl}@webp`;
|
|
13
|
+
}
|
|
14
|
+
return `${CDN_URL}/insecure/plain/${encodedUrl}@webp`;
|
|
15
|
+
};
|
|
16
|
+
(0, vitest_1.describe)('buildImgproxyPath', () => {
|
|
17
|
+
(0, vitest_1.it)('should return empty string for empty options', () => {
|
|
18
|
+
(0, vitest_1.expect)((0, imageUrl_1.buildImgproxyPath)({})).toBe('');
|
|
19
|
+
});
|
|
20
|
+
(0, vitest_1.it)('should build resize options', () => {
|
|
21
|
+
const options = { width: 300, height: 200 };
|
|
22
|
+
(0, vitest_1.expect)((0, imageUrl_1.buildImgproxyPath)(options)).toBe('rs:fit:300:200:0');
|
|
23
|
+
});
|
|
24
|
+
(0, vitest_1.it)('should build resize with type and enlarge', () => {
|
|
25
|
+
const options = { resizeType: 'fill', width: 400, enlarge: true };
|
|
26
|
+
(0, vitest_1.expect)((0, imageUrl_1.buildImgproxyPath)(options)).toBe('rs:fill:400:0:1');
|
|
27
|
+
});
|
|
28
|
+
(0, vitest_1.it)('should build quality option', () => {
|
|
29
|
+
const options = { quality: 80 };
|
|
30
|
+
(0, vitest_1.expect)((0, imageUrl_1.buildImgproxyPath)(options)).toBe('q:80');
|
|
31
|
+
});
|
|
32
|
+
(0, vitest_1.it)('should build gravity option', () => {
|
|
33
|
+
const options = { gravity: 'sm' };
|
|
34
|
+
(0, vitest_1.expect)((0, imageUrl_1.buildImgproxyPath)(options)).toBe('g:sm');
|
|
35
|
+
});
|
|
36
|
+
(0, vitest_1.it)('should build dpr option', () => {
|
|
37
|
+
const options = { dpr: 2 };
|
|
38
|
+
(0, vitest_1.expect)((0, imageUrl_1.buildImgproxyPath)(options)).toBe('dpr:2');
|
|
39
|
+
});
|
|
40
|
+
(0, vitest_1.it)('should build blur option', () => {
|
|
41
|
+
const options = { blur: 10 };
|
|
42
|
+
(0, vitest_1.expect)((0, imageUrl_1.buildImgproxyPath)(options)).toBe('bl:10');
|
|
43
|
+
});
|
|
44
|
+
(0, vitest_1.it)('should build sharpen option', () => {
|
|
45
|
+
const options = { sharpen: 0.5 };
|
|
46
|
+
(0, vitest_1.expect)((0, imageUrl_1.buildImgproxyPath)(options)).toBe('sh:0.5');
|
|
47
|
+
});
|
|
48
|
+
(0, vitest_1.it)('should combine multiple options', () => {
|
|
49
|
+
const options = {
|
|
50
|
+
resizeType: 'fill',
|
|
51
|
+
width: 300,
|
|
52
|
+
height: 200,
|
|
53
|
+
quality: 85,
|
|
54
|
+
gravity: 'ce',
|
|
55
|
+
};
|
|
56
|
+
(0, vitest_1.expect)((0, imageUrl_1.buildImgproxyPath)(options)).toBe('rs:fill:300:200:0/q:85/g:ce');
|
|
57
|
+
});
|
|
58
|
+
});
|
|
7
59
|
(0, vitest_1.describe)('resolveImageUrl', () => {
|
|
8
60
|
(0, vitest_1.it)('should return null for null input', () => {
|
|
9
61
|
(0, vitest_1.expect)((0, imageUrl_1.resolveImageUrl)(null, CDN_URL)).toBeNull();
|
|
@@ -19,11 +71,20 @@ const STORAGE_URL = 'https://cdn.chanomhub.com';
|
|
|
19
71
|
const url = 'https://example.com/image.jpg';
|
|
20
72
|
(0, vitest_1.expect)((0, imageUrl_1.resolveImageUrl)(url, CDN_URL)).toBe(url);
|
|
21
73
|
});
|
|
22
|
-
(0, vitest_1.it)('should
|
|
23
|
-
|
|
74
|
+
(0, vitest_1.it)('should create imgproxy URL for filename only', () => {
|
|
75
|
+
const result = (0, imageUrl_1.resolveImageUrl)('abc.jpg', CDN_URL);
|
|
76
|
+
(0, vitest_1.expect)(result).toBe(buildImgproxyUrl('abc.jpg'));
|
|
24
77
|
});
|
|
25
78
|
(0, vitest_1.it)('should handle filenames with paths', () => {
|
|
26
|
-
|
|
79
|
+
const result = (0, imageUrl_1.resolveImageUrl)('uploads/abc.jpg', CDN_URL);
|
|
80
|
+
(0, vitest_1.expect)(result).toBe(buildImgproxyUrl('uploads/abc.jpg'));
|
|
81
|
+
});
|
|
82
|
+
(0, vitest_1.it)('should allow custom storage URL', () => {
|
|
83
|
+
const customStorage = 'https://custom-storage.com';
|
|
84
|
+
const result = (0, imageUrl_1.resolveImageUrl)('abc.jpg', CDN_URL, customStorage);
|
|
85
|
+
const sourceUrl = `${customStorage}/abc.jpg`;
|
|
86
|
+
const encodedUrl = encodeURIComponent(sourceUrl);
|
|
87
|
+
(0, vitest_1.expect)(result).toBe(`${CDN_URL}/insecure/plain/${encodedUrl}@webp`);
|
|
27
88
|
});
|
|
28
89
|
});
|
|
29
90
|
(0, vitest_1.describe)('transformImageUrlsDeep', () => {
|
|
@@ -40,10 +101,10 @@ const STORAGE_URL = 'https://cdn.chanomhub.com';
|
|
|
40
101
|
title: 'Test Article',
|
|
41
102
|
};
|
|
42
103
|
const result = (0, imageUrl_1.transformImageUrlsDeep)(data, CDN_URL);
|
|
43
|
-
(0, vitest_1.expect)(result.mainImage).toBe(
|
|
44
|
-
(0, vitest_1.expect)(result.coverImage).toBe(
|
|
45
|
-
(0, vitest_1.expect)(result.backgroundImage).toBe(
|
|
46
|
-
(0, vitest_1.expect)(result.image).toBe(
|
|
104
|
+
(0, vitest_1.expect)(result.mainImage).toBe(buildImgproxyUrl('main.jpg'));
|
|
105
|
+
(0, vitest_1.expect)(result.coverImage).toBe(buildImgproxyUrl('cover.jpg'));
|
|
106
|
+
(0, vitest_1.expect)(result.backgroundImage).toBe(buildImgproxyUrl('bg.jpg'));
|
|
107
|
+
(0, vitest_1.expect)(result.image).toBe(buildImgproxyUrl('profile.jpg'));
|
|
47
108
|
(0, vitest_1.expect)(result.title).toBe('Test Article'); // Non-image field unchanged
|
|
48
109
|
});
|
|
49
110
|
(0, vitest_1.it)('should not transform already full URLs', () => {
|
|
@@ -58,8 +119,8 @@ const STORAGE_URL = 'https://cdn.chanomhub.com';
|
|
|
58
119
|
images: [{ url: 'image1.jpg' }, { url: 'image2.jpg' }],
|
|
59
120
|
};
|
|
60
121
|
const result = (0, imageUrl_1.transformImageUrlsDeep)(data, CDN_URL);
|
|
61
|
-
(0, vitest_1.expect)(result.images[0].url).toBe(
|
|
62
|
-
(0, vitest_1.expect)(result.images[1].url).toBe(
|
|
122
|
+
(0, vitest_1.expect)(result.images[0].url).toBe(buildImgproxyUrl('image1.jpg'));
|
|
123
|
+
(0, vitest_1.expect)(result.images[1].url).toBe(buildImgproxyUrl('image2.jpg'));
|
|
63
124
|
});
|
|
64
125
|
(0, vitest_1.it)('should recursively transform nested objects', () => {
|
|
65
126
|
const data = {
|
|
@@ -71,14 +132,14 @@ const STORAGE_URL = 'https://cdn.chanomhub.com';
|
|
|
71
132
|
},
|
|
72
133
|
};
|
|
73
134
|
const result = (0, imageUrl_1.transformImageUrlsDeep)(data, CDN_URL);
|
|
74
|
-
(0, vitest_1.expect)(result.article.mainImage).toBe(
|
|
75
|
-
(0, vitest_1.expect)(result.article.author.image).toBe(
|
|
135
|
+
(0, vitest_1.expect)(result.article.mainImage).toBe(buildImgproxyUrl('article.jpg'));
|
|
136
|
+
(0, vitest_1.expect)(result.article.author.image).toBe(buildImgproxyUrl('author.jpg'));
|
|
76
137
|
});
|
|
77
138
|
(0, vitest_1.it)('should handle arrays at root level', () => {
|
|
78
139
|
const data = [{ mainImage: 'img1.jpg' }, { mainImage: 'img2.jpg' }];
|
|
79
140
|
const result = (0, imageUrl_1.transformImageUrlsDeep)(data, CDN_URL);
|
|
80
|
-
(0, vitest_1.expect)(result[0].mainImage).toBe(
|
|
81
|
-
(0, vitest_1.expect)(result[1].mainImage).toBe(
|
|
141
|
+
(0, vitest_1.expect)(result[0].mainImage).toBe(buildImgproxyUrl('img1.jpg'));
|
|
142
|
+
(0, vitest_1.expect)(result[1].mainImage).toBe(buildImgproxyUrl('img2.jpg'));
|
|
82
143
|
});
|
|
83
144
|
});
|
|
84
145
|
(0, vitest_1.describe)('getFallbackUrl', () => {
|
|
@@ -86,23 +147,25 @@ const STORAGE_URL = 'https://cdn.chanomhub.com';
|
|
|
86
147
|
(0, vitest_1.expect)((0, imageUrl_1.getFallbackUrl)(null, CDN_URL)).toBeNull();
|
|
87
148
|
(0, vitest_1.expect)((0, imageUrl_1.getFallbackUrl)(undefined, CDN_URL)).toBeNull();
|
|
88
149
|
});
|
|
89
|
-
(0, vitest_1.it)('should return
|
|
90
|
-
(0, vitest_1.expect)((0, imageUrl_1.getFallbackUrl)('abc.jpg', CDN_URL)).toBe(
|
|
150
|
+
(0, vitest_1.it)('should return storage URL for filename', () => {
|
|
151
|
+
(0, vitest_1.expect)((0, imageUrl_1.getFallbackUrl)('abc.jpg', CDN_URL)).toBe(`${STORAGE_URL}/abc.jpg`);
|
|
91
152
|
});
|
|
92
|
-
(0, vitest_1.it)('should
|
|
93
|
-
|
|
94
|
-
|
|
153
|
+
(0, vitest_1.it)('should extract source URL from imgproxy URL', () => {
|
|
154
|
+
// Build an imgproxy URL and verify we can extract the original
|
|
155
|
+
const imgproxyUrl = buildImgproxyUrl('abc.jpg');
|
|
156
|
+
(0, vitest_1.expect)((0, imageUrl_1.getFallbackUrl)(imgproxyUrl, CDN_URL)).toBe(`${STORAGE_URL}/abc.jpg`);
|
|
95
157
|
});
|
|
96
|
-
(0, vitest_1.it)('should handle
|
|
97
|
-
const
|
|
98
|
-
(0, vitest_1.expect)((0, imageUrl_1.getFallbackUrl)(
|
|
158
|
+
(0, vitest_1.it)('should handle imgproxy URL with path', () => {
|
|
159
|
+
const imgproxyUrl = buildImgproxyUrl('uploads/abc.jpg');
|
|
160
|
+
(0, vitest_1.expect)((0, imageUrl_1.getFallbackUrl)(imgproxyUrl, CDN_URL)).toBe(`${STORAGE_URL}/uploads/abc.jpg`);
|
|
99
161
|
});
|
|
100
162
|
(0, vitest_1.it)('should return other external URLs as-is', () => {
|
|
101
163
|
const url = 'https://other-cdn.com/image.jpg';
|
|
102
|
-
(0, vitest_1.expect)((0, imageUrl_1.getFallbackUrl)(url, CDN_URL
|
|
164
|
+
(0, vitest_1.expect)((0, imageUrl_1.getFallbackUrl)(url, CDN_URL)).toBe(url);
|
|
103
165
|
});
|
|
104
|
-
(0, vitest_1.it)('should
|
|
105
|
-
|
|
166
|
+
(0, vitest_1.it)('should use custom storage URL for filename', () => {
|
|
167
|
+
const customStorage = 'https://custom-storage.com';
|
|
168
|
+
(0, vitest_1.expect)((0, imageUrl_1.getFallbackUrl)('abc.jpg', CDN_URL, customStorage)).toBe(`${customStorage}/abc.jpg`);
|
|
106
169
|
});
|
|
107
170
|
});
|
|
108
171
|
//# sourceMappingURL=imageUrl.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imageUrl.test.js","sourceRoot":"","sources":["../../__tests__/imageUrl.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,
|
|
1
|
+
{"version":3,"file":"imageUrl.test.js","sourceRoot":"","sources":["../../__tests__/imageUrl.test.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,13 +1,47 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Chanomhub SDK Configuration
|
|
3
3
|
*/
|
|
4
|
+
/** Imgproxy resize type */
|
|
5
|
+
export type ImgproxyResizeType = 'fit' | 'fill' | 'fill-down' | 'force' | 'auto';
|
|
6
|
+
/** Imgproxy gravity (for cropping) */
|
|
7
|
+
export type ImgproxyGravity = 'no' | 'so' | 'ea' | 'we' | 'noea' | 'nowe' | 'soea' | 'sowe' | 'ce' | 'sm' | 'fp';
|
|
8
|
+
/** Imgproxy output format */
|
|
9
|
+
export type ImgproxyFormat = 'webp' | 'avif' | 'jpg' | 'png' | 'gif' | 'ico' | 'heic' | 'bmp' | 'tiff';
|
|
10
|
+
/**
|
|
11
|
+
* Imgproxy processing options
|
|
12
|
+
* @see https://docs.imgproxy.net/usage/processing
|
|
13
|
+
*/
|
|
14
|
+
export interface ImgproxyOptions {
|
|
15
|
+
/** Output format (default: 'webp') */
|
|
16
|
+
format?: ImgproxyFormat;
|
|
17
|
+
/** Resize type (default: 'fit') */
|
|
18
|
+
resizeType?: ImgproxyResizeType;
|
|
19
|
+
/** Target width (0 = auto based on height) */
|
|
20
|
+
width?: number;
|
|
21
|
+
/** Target height (0 = auto based on width) */
|
|
22
|
+
height?: number;
|
|
23
|
+
/** Quality 1-100 (0 = use server default) */
|
|
24
|
+
quality?: number;
|
|
25
|
+
/** Gravity for cropping (default: 'ce' center) */
|
|
26
|
+
gravity?: ImgproxyGravity;
|
|
27
|
+
/** Allow enlarging smaller images */
|
|
28
|
+
enlarge?: boolean;
|
|
29
|
+
/** Device pixel ratio (1-8) */
|
|
30
|
+
dpr?: number;
|
|
31
|
+
/** Blur radius (0 = no blur) */
|
|
32
|
+
blur?: number;
|
|
33
|
+
/** Sharpen sigma (0 = no sharpen) */
|
|
34
|
+
sharpen?: number;
|
|
35
|
+
}
|
|
4
36
|
export interface ChanomhubConfig {
|
|
5
37
|
/** API base URL */
|
|
6
38
|
apiUrl: string;
|
|
7
|
-
/**
|
|
39
|
+
/** Imgproxy base URL for image processing */
|
|
8
40
|
cdnUrl: string;
|
|
9
|
-
/** Original storage base URL (
|
|
41
|
+
/** Original storage base URL (source images) */
|
|
10
42
|
storageUrl?: string;
|
|
43
|
+
/** Default imgproxy options */
|
|
44
|
+
imgproxyOptions?: ImgproxyOptions;
|
|
11
45
|
/** Authentication token (optional) */
|
|
12
46
|
token?: string;
|
|
13
47
|
/** Default cache duration in seconds (0 = no cache) */
|
|
@@ -17,6 +51,7 @@ export interface ChanomhubConfig {
|
|
|
17
51
|
/** Supabase anon key (required for OAuth) */
|
|
18
52
|
supabaseAnonKey?: string;
|
|
19
53
|
}
|
|
54
|
+
export declare const DEFAULT_IMGPROXY_OPTIONS: ImgproxyOptions;
|
|
20
55
|
export declare const DEFAULT_CONFIG: ChanomhubConfig;
|
|
21
56
|
/** Article status enum */
|
|
22
57
|
export type ArticleStatus = 'DRAFT' | 'PENDING_REVIEW' | 'PUBLISHED' | 'ARCHIVED' | 'NOT_APPROVED' | 'NEEDS_REVISION';
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,eAAe;IAC5B,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,2BAA2B;AAC3B,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AAEjF,sCAAsC;AACtC,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjH,6BAA6B;AAC7B,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAEvG;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC5B,sCAAsC;IACtC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,mCAAmC;IACnC,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,qCAAqC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+BAA+B;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC5B,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,eAAO,MAAM,wBAAwB,EAAE,eAEtC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,eAM5B,CAAC;AAEF,0BAA0B;AAC1B,MAAM,MAAM,aAAa,GACnB,OAAO,GACP,gBAAgB,GAChB,WAAW,GACX,UAAU,GACV,cAAc,GACd,gBAAgB,CAAC;AAEvB,uBAAuB;AACvB,MAAM,MAAM,UAAU,GAChB,OAAO,GACP,MAAM,GACN,OAAO,GACP,QAAQ,GACR,OAAO,GACP,eAAe,GACf,SAAS,GACT,UAAU,GACV,OAAO,GACP,aAAa,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -3,11 +3,15 @@
|
|
|
3
3
|
* Chanomhub SDK Configuration
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.DEFAULT_CONFIG = void 0;
|
|
6
|
+
exports.DEFAULT_CONFIG = exports.DEFAULT_IMGPROXY_OPTIONS = void 0;
|
|
7
|
+
exports.DEFAULT_IMGPROXY_OPTIONS = {
|
|
8
|
+
format: 'webp',
|
|
9
|
+
};
|
|
7
10
|
exports.DEFAULT_CONFIG = {
|
|
8
11
|
apiUrl: 'https://api.chanomhub.com',
|
|
9
|
-
cdnUrl: 'https://
|
|
10
|
-
storageUrl: 'https://cdn.chanomhub.com',
|
|
12
|
+
cdnUrl: 'https://imgproxy.chanomhub.com',
|
|
13
|
+
storageUrl: 'https://cdn.chanomhub.com',
|
|
14
|
+
imgproxyOptions: exports.DEFAULT_IMGPROXY_OPTIONS,
|
|
11
15
|
defaultCacheSeconds: 3600,
|
|
12
16
|
};
|
|
13
17
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":";AAAA;;GAEG;;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAyDU,QAAA,wBAAwB,GAAoB;IACrD,MAAM,EAAE,MAAM;CACjB,CAAC;AAEW,QAAA,cAAc,GAAoB;IAC3C,MAAM,EAAE,2BAA2B;IACnC,MAAM,EAAE,gCAAgC;IACxC,UAAU,EAAE,2BAA2B;IACvC,eAAe,EAAE,gCAAwB;IACzC,mBAAmB,EAAE,IAAI;CAC5B,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -31,12 +31,12 @@
|
|
|
31
31
|
* ```
|
|
32
32
|
*/
|
|
33
33
|
import { type GraphQLFetcher } from './client';
|
|
34
|
-
import { type ArticleRepository, type FavoritesRepository, type UsersRepository, type SearchRepository, type AuthRepository, type DownloadsRepository } from './repositories';
|
|
34
|
+
import { type ArticleRepository, type FavoritesRepository, type UsersRepository, type SearchRepository, type AuthRepository, type DownloadsRepository, type SubscriptionsRepository } from './repositories';
|
|
35
35
|
import { type ChanomhubConfig } from './config';
|
|
36
36
|
export * from './types';
|
|
37
37
|
export * from './config';
|
|
38
38
|
export * from './errors';
|
|
39
|
-
export { resolveImageUrl, getFallbackUrl } from './transforms/imageUrl';
|
|
39
|
+
export { resolveImageUrl, getFallbackUrl, buildImgproxyPath } from './transforms/imageUrl';
|
|
40
40
|
/** Chanomhub SDK Client interface */
|
|
41
41
|
export interface ChanomhubClient {
|
|
42
42
|
/** Article operations */
|
|
@@ -51,6 +51,8 @@ export interface ChanomhubClient {
|
|
|
51
51
|
auth: AuthRepository;
|
|
52
52
|
/** Downloads management operations */
|
|
53
53
|
downloads: DownloadsRepository;
|
|
54
|
+
/** Subscriptions operations */
|
|
55
|
+
subscriptions: SubscriptionsRepository;
|
|
54
56
|
/** Raw GraphQL fetcher for custom queries */
|
|
55
57
|
graphql: GraphQLFetcher;
|
|
56
58
|
/** SDK configuration */
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAyC,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AACtF,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAyC,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AACtF,OAAO,EAQH,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC/B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAGhE,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE3F,qCAAqC;AACrC,MAAM,WAAW,eAAe;IAC5B,yBAAyB;IACzB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,2BAA2B;IAC3B,SAAS,EAAE,mBAAmB,CAAC;IAC/B,8BAA8B;IAC9B,KAAK,EAAE,eAAe,CAAC;IACvB,wBAAwB;IACxB,MAAM,EAAE,gBAAgB,CAAC;IACzB,qEAAqE;IACrE,IAAI,EAAE,cAAc,CAAC;IACrB,sCAAsC;IACtC,SAAS,EAAE,mBAAmB,CAAC;IAC/B,+BAA+B;IAC/B,aAAa,EAAE,uBAAuB,CAAC;IACvC,6CAA6C;IAC7C,OAAO,EAAE,cAAc,CAAC;IACxB,wBAAwB;IACxB,MAAM,EAAE,eAAe,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,GAAG,eAAe,CA2B5F;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACrC,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,GACtC,eAAe,CAMjB;AAGD,eAAe,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -46,7 +46,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
46
46
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
47
47
|
};
|
|
48
48
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
|
-
exports.getFallbackUrl = exports.resolveImageUrl = void 0;
|
|
49
|
+
exports.buildImgproxyPath = exports.getFallbackUrl = exports.resolveImageUrl = void 0;
|
|
50
50
|
exports.createChanomhubClient = createChanomhubClient;
|
|
51
51
|
exports.createAuthenticatedClient = createAuthenticatedClient;
|
|
52
52
|
const client_1 = require("./client");
|
|
@@ -59,6 +59,7 @@ __exportStar(require("./errors"), exports);
|
|
|
59
59
|
var imageUrl_1 = require("./transforms/imageUrl");
|
|
60
60
|
Object.defineProperty(exports, "resolveImageUrl", { enumerable: true, get: function () { return imageUrl_1.resolveImageUrl; } });
|
|
61
61
|
Object.defineProperty(exports, "getFallbackUrl", { enumerable: true, get: function () { return imageUrl_1.getFallbackUrl; } });
|
|
62
|
+
Object.defineProperty(exports, "buildImgproxyPath", { enumerable: true, get: function () { return imageUrl_1.buildImgproxyPath; } });
|
|
62
63
|
/**
|
|
63
64
|
* Creates a Chanomhub API client
|
|
64
65
|
*
|
|
@@ -94,6 +95,7 @@ function createChanomhubClient(config = {}) {
|
|
|
94
95
|
const search = (0, repositories_1.createSearchRepository)(graphql);
|
|
95
96
|
const auth = (0, repositories_1.createAuthRepository)(rest, fullConfig);
|
|
96
97
|
const downloads = (0, repositories_1.createDownloadsRepository)(rest, fullConfig);
|
|
98
|
+
const subscriptions = (0, repositories_1.createSubscriptionsRepository)(rest, fullConfig);
|
|
97
99
|
return {
|
|
98
100
|
articles,
|
|
99
101
|
favorites,
|
|
@@ -101,6 +103,7 @@ function createChanomhubClient(config = {}) {
|
|
|
101
103
|
search,
|
|
102
104
|
auth,
|
|
103
105
|
downloads,
|
|
106
|
+
subscriptions,
|
|
104
107
|
graphql,
|
|
105
108
|
config: fullConfig,
|
|
106
109
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;;;;;;;;;;;;;;;;;AAuEH,sDA2BC;AAUD,8DASC;AAnHD,qCAAsF;AACtF,iDAewB;AACxB,qCAAgE;AAEhE,kBAAkB;AAClB,0CAAwB;AACxB,2CAAyB;AACzB,2CAAyB;AACzB,kDAA2F;AAAlF,2GAAA,eAAe,OAAA;AAAE,0GAAA,cAAc,OAAA;AAAE,6GAAA,iBAAiB,OAAA;AAwB3D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,SAAgB,qBAAqB,CAAC,SAAmC,EAAE;IACvE,MAAM,UAAU,GAAoB;QAChC,GAAG,uBAAc;QACjB,GAAG,MAAM;KACZ,CAAC;IAEF,MAAM,OAAO,GAAG,IAAA,4BAAmB,EAAC,UAAU,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,IAAA,yBAAgB,EAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAA,sCAAuB,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,IAAA,wCAAyB,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,IAAA,oCAAqB,EAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAA,qCAAsB,EAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,IAAA,mCAAoB,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,IAAA,wCAAyB,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,IAAA,4CAA6B,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAEtE,OAAO;QACH,QAAQ;QACR,SAAS;QACT,KAAK;QACL,MAAM;QACN,IAAI;QACJ,SAAS;QACT,aAAa;QACb,OAAO;QACP,MAAM,EAAE,UAAU;KACrB,CAAC;AACN,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,yBAAyB,CACrC,KAAa,EACb,SAAmC,EAAE;IAErC,OAAO,qBAAqB,CAAC;QACzB,GAAG,MAAM;QACT,KAAK;QACL,mBAAmB,EAAE,CAAC,EAAE,2CAA2C;KACtE,CAAC,CAAC;AACP,CAAC;AAED,iBAAiB;AACjB,kBAAe,qBAAqB,CAAC"}
|
|
@@ -7,4 +7,5 @@ export { createUsersRepository, type UsersRepository } from './usersRepository';
|
|
|
7
7
|
export { createSearchRepository, type SearchRepository, type SearchOptions, } from './searchRepository';
|
|
8
8
|
export { createAuthRepository, type AuthRepository } from './authRepository';
|
|
9
9
|
export { createDownloadsRepository, type DownloadsRepository } from './downloadsRepository';
|
|
10
|
+
export { createSubscriptionsRepository, type SubscriptionsRepository, } from './subscriptionsRepository';
|
|
10
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../repositories/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,uBAAuB,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EACH,yBAAyB,EACzB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EACH,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../repositories/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,uBAAuB,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EACH,yBAAyB,EACzB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EACH,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5F,OAAO,EACH,6BAA6B,EAC7B,KAAK,uBAAuB,GAC/B,MAAM,2BAA2B,CAAC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Chanomhub SDK - Repositories Index
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.createDownloadsRepository = exports.createAuthRepository = exports.createSearchRepository = exports.createUsersRepository = exports.createFavoritesRepository = exports.createArticleRepository = void 0;
|
|
6
|
+
exports.createSubscriptionsRepository = exports.createDownloadsRepository = exports.createAuthRepository = exports.createSearchRepository = exports.createUsersRepository = exports.createFavoritesRepository = exports.createArticleRepository = void 0;
|
|
7
7
|
var articleRepository_1 = require("./articleRepository");
|
|
8
8
|
Object.defineProperty(exports, "createArticleRepository", { enumerable: true, get: function () { return articleRepository_1.createArticleRepository; } });
|
|
9
9
|
var favoritesRepository_1 = require("./favoritesRepository");
|
|
@@ -16,4 +16,6 @@ var authRepository_1 = require("./authRepository");
|
|
|
16
16
|
Object.defineProperty(exports, "createAuthRepository", { enumerable: true, get: function () { return authRepository_1.createAuthRepository; } });
|
|
17
17
|
var downloadsRepository_1 = require("./downloadsRepository");
|
|
18
18
|
Object.defineProperty(exports, "createDownloadsRepository", { enumerable: true, get: function () { return downloadsRepository_1.createDownloadsRepository; } });
|
|
19
|
+
var subscriptionsRepository_1 = require("./subscriptionsRepository");
|
|
20
|
+
Object.defineProperty(exports, "createSubscriptionsRepository", { enumerable: true, get: function () { return subscriptionsRepository_1.createSubscriptionsRepository; } });
|
|
19
21
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../repositories/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,yDAAsF;AAA7E,4HAAA,uBAAuB,OAAA;AAChC,6DAI+B;AAH3B,gIAAA,yBAAyB,OAAA;AAI7B,qDAAgF;AAAvE,wHAAA,qBAAqB,OAAA;AAC9B,uDAI4B;AAHxB,0HAAA,sBAAsB,OAAA;AAI1B,mDAA6E;AAApE,sHAAA,oBAAoB,OAAA;AAC7B,6DAA4F;AAAnF,gIAAA,yBAAyB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../repositories/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,yDAAsF;AAA7E,4HAAA,uBAAuB,OAAA;AAChC,6DAI+B;AAH3B,gIAAA,yBAAyB,OAAA;AAI7B,qDAAgF;AAAvE,wHAAA,qBAAqB,OAAA;AAC9B,uDAI4B;AAHxB,0HAAA,sBAAsB,OAAA;AAI1B,mDAA6E;AAApE,sHAAA,oBAAoB,OAAA;AAC7B,6DAA4F;AAAnF,gIAAA,yBAAyB,OAAA;AAClC,qEAGmC;AAF/B,wIAAA,6BAA6B,OAAA"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chanomhub SDK - Subscriptions Repository
|
|
3
|
+
*
|
|
4
|
+
* Provides API methods for managing subscriptions and plans.
|
|
5
|
+
*/
|
|
6
|
+
import type { RestFetcher } from '../client';
|
|
7
|
+
import type { ChanomhubConfig } from '../config';
|
|
8
|
+
import type { Subscription, SubscriptionPlan, CreateSubscriptionRequest, CreateSubscriptionPlanRequest } from '../types/subscription';
|
|
9
|
+
export interface SubscriptionsRepository {
|
|
10
|
+
/**
|
|
11
|
+
* Create a new subscription
|
|
12
|
+
* @param data - Subscription data
|
|
13
|
+
* @returns Created subscription
|
|
14
|
+
*/
|
|
15
|
+
create(data: CreateSubscriptionRequest): Promise<Subscription | null>;
|
|
16
|
+
/**
|
|
17
|
+
* Get all user subscriptions
|
|
18
|
+
* @returns List of subscriptions
|
|
19
|
+
*/
|
|
20
|
+
getAll(): Promise<Subscription[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Cancel a subscription
|
|
23
|
+
* @param id - Subscription ID
|
|
24
|
+
* @returns Cancelled subscription
|
|
25
|
+
*/
|
|
26
|
+
cancel(id: number): Promise<Subscription | null>;
|
|
27
|
+
/**
|
|
28
|
+
* Create a new subscription plan (Admin only)
|
|
29
|
+
* @param data - Subscription plan data
|
|
30
|
+
* @returns Created subscription plan
|
|
31
|
+
*/
|
|
32
|
+
createPlan(data: CreateSubscriptionPlanRequest): Promise<SubscriptionPlan | null>;
|
|
33
|
+
/**
|
|
34
|
+
* Get all available subscription plans
|
|
35
|
+
* @param refresh - Force refresh (optional)
|
|
36
|
+
* @returns List of subscription plans
|
|
37
|
+
*/
|
|
38
|
+
getPlans(refresh?: boolean): Promise<SubscriptionPlan[]>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Creates a subscriptions repository with the given REST client
|
|
42
|
+
*/
|
|
43
|
+
export declare function createSubscriptionsRepository(fetcher: RestFetcher, config: ChanomhubConfig): SubscriptionsRepository;
|
|
44
|
+
//# sourceMappingURL=subscriptionsRepository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscriptionsRepository.d.ts","sourceRoot":"","sources":["../../repositories/subscriptionsRepository.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,OAAO,KAAK,EACR,YAAY,EACZ,gBAAgB,EAChB,yBAAyB,EACzB,6BAA6B,EAChC,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,uBAAuB;IACpC;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAEtE;;;OAGG;IACH,MAAM,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAElC;;;;OAIG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAEjD;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,6BAA6B,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAElF;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;CAC5D;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CACzC,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,eAAe,GACxB,uBAAuB,CAkGzB"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Chanomhub SDK - Subscriptions Repository
|
|
4
|
+
*
|
|
5
|
+
* Provides API methods for managing subscriptions and plans.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.createSubscriptionsRepository = createSubscriptionsRepository;
|
|
9
|
+
const errors_1 = require("../errors");
|
|
10
|
+
/**
|
|
11
|
+
* Creates a subscriptions repository with the given REST client
|
|
12
|
+
*/
|
|
13
|
+
function createSubscriptionsRepository(fetcher, config) {
|
|
14
|
+
function requireAuth() {
|
|
15
|
+
if (!config.token) {
|
|
16
|
+
throw new errors_1.AuthenticationError('Authentication required for subscriptions management. Use createAuthenticatedClient() or provide a token.');
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async function create(data) {
|
|
20
|
+
requireAuth();
|
|
21
|
+
const { data: response, error } = await fetcher('/api/subscriptions', { method: 'POST', body: data });
|
|
22
|
+
if (error) {
|
|
23
|
+
console.error('Failed to create subscription:', error);
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
return response;
|
|
27
|
+
}
|
|
28
|
+
async function getAll() {
|
|
29
|
+
requireAuth();
|
|
30
|
+
const { data, error } = await fetcher('/api/subscriptions', { method: 'GET' });
|
|
31
|
+
if (error) {
|
|
32
|
+
console.error('Failed to get subscriptions:', error);
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
return data !== null && data !== void 0 ? data : [];
|
|
36
|
+
}
|
|
37
|
+
async function cancel(id) {
|
|
38
|
+
requireAuth();
|
|
39
|
+
const { data: response, error } = await fetcher(`/api/subscriptions/${id}`, { method: 'DELETE' });
|
|
40
|
+
if (error) {
|
|
41
|
+
console.error('Failed to cancel subscription:', error);
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
return response;
|
|
45
|
+
}
|
|
46
|
+
async function createPlan(data) {
|
|
47
|
+
requireAuth();
|
|
48
|
+
const { data: response, error } = await fetcher('/api/subscriptions/plans', { method: 'POST', body: data });
|
|
49
|
+
if (error) {
|
|
50
|
+
console.error('Failed to create subscription plan:', error);
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
return response;
|
|
54
|
+
}
|
|
55
|
+
async function getPlans(refresh) {
|
|
56
|
+
const url = refresh
|
|
57
|
+
? '/api/subscriptions/plans?refresh=true'
|
|
58
|
+
: '/api/subscriptions/plans';
|
|
59
|
+
const { data, error } = await fetcher(url, { method: 'GET' });
|
|
60
|
+
if (error) {
|
|
61
|
+
console.error('Failed to get subscription plans:', error);
|
|
62
|
+
return [];
|
|
63
|
+
}
|
|
64
|
+
return data !== null && data !== void 0 ? data : [];
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
create,
|
|
68
|
+
getAll,
|
|
69
|
+
cancel,
|
|
70
|
+
createPlan,
|
|
71
|
+
getPlans,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=subscriptionsRepository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscriptionsRepository.js","sourceRoot":"","sources":["../../repositories/subscriptionsRepository.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAmDH,sEAqGC;AApJD,sCAAgD;AA4ChD;;GAEG;AACH,SAAgB,6BAA6B,CACzC,OAAoB,EACpB,MAAuB;IAEvB,SAAS,WAAW;QAChB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,4BAAmB,CACzB,2GAA2G,CAC9G,CAAC;QACN,CAAC;IACL,CAAC;IAED,KAAK,UAAU,MAAM,CAAC,IAA+B;QACjD,WAAW,EAAE,CAAC;QAEd,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAC3C,oBAAoB,EACpB,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAA0C,EAAE,CACvE,CAAC;QAEF,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,KAAK,UAAU,MAAM;QACjB,WAAW,EAAE,CAAC;QAEd,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CACjC,oBAAoB,EACpB,EAAE,MAAM,EAAE,KAAK,EAAE,CACpB,CAAC;QAEF,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;YACrD,OAAO,EAAE,CAAC;QACd,CAAC;QAED,OAAO,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,UAAU,MAAM,CAAC,EAAU;QAC5B,WAAW,EAAE,CAAC;QAEd,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAC3C,sBAAsB,EAAE,EAAE,EAC1B,EAAE,MAAM,EAAE,QAAQ,EAAE,CACvB,CAAC;QAEF,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,KAAK,UAAU,UAAU,CAAC,IAAmC;QACzD,WAAW,EAAE,CAAC;QAEd,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAC3C,0BAA0B,EAC1B,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAA0C,EAAE,CACvE,CAAC;QAEF,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,KAAK,UAAU,QAAQ,CAAC,OAAiB;QACrC,MAAM,GAAG,GAAG,OAAO;YACf,CAAC,CAAC,uCAAuC;YACzC,CAAC,CAAC,0BAA0B,CAAC;QAEjC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CACjC,GAAG,EACH,EAAE,MAAM,EAAE,KAAK,EAAE,CACpB,CAAC;QAEF,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;YAC1D,OAAO,EAAE,CAAC;QACd,CAAC;QAED,OAAO,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC;IACtB,CAAC;IAED,OAAO;QACH,MAAM;QACN,MAAM;QACN,MAAM;QACN,UAAU;QACV,QAAQ;KACX,CAAC;AACN,CAAC"}
|
|
@@ -1,22 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Image URL Transformation
|
|
3
3
|
*
|
|
4
|
-
* Transforms filename-only URLs to
|
|
4
|
+
* Transforms filename-only URLs to imgproxy URLs with processing options
|
|
5
5
|
*/
|
|
6
|
+
import { ImgproxyOptions } from '../config';
|
|
6
7
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
8
|
+
* Builds the imgproxy processing options path from ImgproxyOptions
|
|
9
|
+
* @see https://docs.imgproxy.net/usage/processing
|
|
10
|
+
*/
|
|
11
|
+
export declare function buildImgproxyPath(options?: ImgproxyOptions): string;
|
|
12
|
+
/**
|
|
13
|
+
* Resolves an image URL using imgproxy format.
|
|
14
|
+
* - If it's just a filename (e.g., "abc.jpg"), creates an imgproxy URL
|
|
9
15
|
* - If it's already a full URL, returns it as-is
|
|
10
16
|
* - Handles null/undefined gracefully
|
|
17
|
+
*
|
|
18
|
+
* imgproxy URL format: {cdnUrl}/insecure/{options}/plain/{sourceUrl}@{format}
|
|
19
|
+
*
|
|
20
|
+
* @param imageUrl - Image filename or full URL
|
|
21
|
+
* @param cdnUrl - Imgproxy base URL
|
|
22
|
+
* @param storageUrl - Source image storage URL
|
|
23
|
+
* @param options - Imgproxy processing options
|
|
11
24
|
*/
|
|
12
|
-
export declare function resolveImageUrl(imageUrl: string | null | undefined, cdnUrl: string): string | null;
|
|
25
|
+
export declare function resolveImageUrl(imageUrl: string | null | undefined, cdnUrl: string, storageUrl?: string, options?: ImgproxyOptions): string | null;
|
|
13
26
|
/**
|
|
14
27
|
* Generates a fallback URL (original source) for an image.
|
|
15
28
|
* Useful when the CDN is unavailable or fails to load.
|
|
16
29
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
30
|
+
* For imgproxy URLs, extracts the original source URL from the path.
|
|
31
|
+
* imgproxy URL format: {cdnUrl}/insecure/plain/{encodedSourceUrl}@{format}
|
|
32
|
+
*
|
|
33
|
+
* @param imageUrl - The full image URL (potentially from imgproxy) or filename
|
|
34
|
+
* @param cdnUrl - The imgproxy base URL to detect
|
|
35
|
+
* @param storageUrl - The original storage base URL (optional, used for filename-only inputs)
|
|
20
36
|
*/
|
|
21
37
|
export declare function getFallbackUrl(imageUrl: string | null | undefined, cdnUrl: string, storageUrl?: string): string | null;
|
|
22
38
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imageUrl.d.ts","sourceRoot":"","sources":["../../transforms/imageUrl.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH
|
|
1
|
+
{"version":3,"file":"imageUrl.d.ts","sourceRoot":"","sources":["../../transforms/imageUrl.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAA4B,MAAM,WAAW,CAAC;AAKtE;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,eAAoB,GAAG,MAAM,CAyCvE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,MAAM,EAAE,MAAM,EACd,UAAU,GAAE,MAA4B,EACxC,OAAO,GAAE,eAA0C,GACpD,MAAM,GAAG,IAAI,CAyBf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,MAAM,EAAE,MAAM,EACd,UAAU,GAAE,MAA4B,GACzC,MAAM,GAAG,IAAI,CAgCf;AAKD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAoCpE"}
|
|
@@ -2,59 +2,129 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Image URL Transformation
|
|
4
4
|
*
|
|
5
|
-
* Transforms filename-only URLs to
|
|
5
|
+
* Transforms filename-only URLs to imgproxy URLs with processing options
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.buildImgproxyPath = buildImgproxyPath;
|
|
8
9
|
exports.resolveImageUrl = resolveImageUrl;
|
|
9
10
|
exports.getFallbackUrl = getFallbackUrl;
|
|
10
11
|
exports.transformImageUrlsDeep = transformImageUrlsDeep;
|
|
12
|
+
const config_1 = require("../config");
|
|
13
|
+
/** Default storage URL for source images */
|
|
14
|
+
const DEFAULT_STORAGE_URL = 'https://cdn.chanomhub.com';
|
|
11
15
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
16
|
+
* Builds the imgproxy processing options path from ImgproxyOptions
|
|
17
|
+
* @see https://docs.imgproxy.net/usage/processing
|
|
18
|
+
*/
|
|
19
|
+
function buildImgproxyPath(options = {}) {
|
|
20
|
+
var _a, _b;
|
|
21
|
+
const parts = [];
|
|
22
|
+
// Resize: rs:%type:%width:%height:%enlarge
|
|
23
|
+
if (options.resizeType || options.width || options.height || options.enlarge !== undefined) {
|
|
24
|
+
const rs = [
|
|
25
|
+
'rs',
|
|
26
|
+
options.resizeType || 'fit',
|
|
27
|
+
(_a = options.width) !== null && _a !== void 0 ? _a : 0,
|
|
28
|
+
(_b = options.height) !== null && _b !== void 0 ? _b : 0,
|
|
29
|
+
options.enlarge ? 1 : 0,
|
|
30
|
+
];
|
|
31
|
+
parts.push(rs.join(':'));
|
|
32
|
+
}
|
|
33
|
+
// Quality: q:%quality
|
|
34
|
+
if (options.quality && options.quality > 0) {
|
|
35
|
+
parts.push(`q:${options.quality}`);
|
|
36
|
+
}
|
|
37
|
+
// Gravity: g:%gravity
|
|
38
|
+
if (options.gravity) {
|
|
39
|
+
parts.push(`g:${options.gravity}`);
|
|
40
|
+
}
|
|
41
|
+
// DPR: dpr:%dpr
|
|
42
|
+
if (options.dpr && options.dpr > 1) {
|
|
43
|
+
parts.push(`dpr:${options.dpr}`);
|
|
44
|
+
}
|
|
45
|
+
// Blur: bl:%sigma
|
|
46
|
+
if (options.blur && options.blur > 0) {
|
|
47
|
+
parts.push(`bl:${options.blur}`);
|
|
48
|
+
}
|
|
49
|
+
// Sharpen: sh:%sigma
|
|
50
|
+
if (options.sharpen && options.sharpen > 0) {
|
|
51
|
+
parts.push(`sh:${options.sharpen}`);
|
|
52
|
+
}
|
|
53
|
+
return parts.join('/');
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Resolves an image URL using imgproxy format.
|
|
57
|
+
* - If it's just a filename (e.g., "abc.jpg"), creates an imgproxy URL
|
|
14
58
|
* - If it's already a full URL, returns it as-is
|
|
15
59
|
* - Handles null/undefined gracefully
|
|
60
|
+
*
|
|
61
|
+
* imgproxy URL format: {cdnUrl}/insecure/{options}/plain/{sourceUrl}@{format}
|
|
62
|
+
*
|
|
63
|
+
* @param imageUrl - Image filename or full URL
|
|
64
|
+
* @param cdnUrl - Imgproxy base URL
|
|
65
|
+
* @param storageUrl - Source image storage URL
|
|
66
|
+
* @param options - Imgproxy processing options
|
|
16
67
|
*/
|
|
17
|
-
function resolveImageUrl(imageUrl, cdnUrl) {
|
|
68
|
+
function resolveImageUrl(imageUrl, cdnUrl, storageUrl = DEFAULT_STORAGE_URL, options = config_1.DEFAULT_IMGPROXY_OPTIONS) {
|
|
18
69
|
if (!imageUrl)
|
|
19
70
|
return null;
|
|
20
71
|
// Already a full URL - return as-is
|
|
21
72
|
if (imageUrl.startsWith('http://') || imageUrl.startsWith('https://')) {
|
|
22
73
|
return imageUrl;
|
|
23
74
|
}
|
|
24
|
-
//
|
|
25
|
-
|
|
75
|
+
// Build the source URL
|
|
76
|
+
const sourceUrl = `${storageUrl}/${imageUrl}`;
|
|
77
|
+
// Build processing options path
|
|
78
|
+
const optionsPath = buildImgproxyPath(options);
|
|
79
|
+
// Get format (default: webp)
|
|
80
|
+
const format = options.format || 'webp';
|
|
81
|
+
// Build imgproxy URL: /insecure/{options}/plain/{sourceUrl}@{format}
|
|
82
|
+
const encodedSourceUrl = encodeURIComponent(sourceUrl);
|
|
83
|
+
if (optionsPath) {
|
|
84
|
+
return `${cdnUrl}/insecure/${optionsPath}/plain/${encodedSourceUrl}@${format}`;
|
|
85
|
+
}
|
|
86
|
+
return `${cdnUrl}/insecure/plain/${encodedSourceUrl}@${format}`;
|
|
26
87
|
}
|
|
27
88
|
/**
|
|
28
89
|
* Generates a fallback URL (original source) for an image.
|
|
29
90
|
* Useful when the CDN is unavailable or fails to load.
|
|
30
91
|
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
92
|
+
* For imgproxy URLs, extracts the original source URL from the path.
|
|
93
|
+
* imgproxy URL format: {cdnUrl}/insecure/plain/{encodedSourceUrl}@{format}
|
|
94
|
+
*
|
|
95
|
+
* @param imageUrl - The full image URL (potentially from imgproxy) or filename
|
|
96
|
+
* @param cdnUrl - The imgproxy base URL to detect
|
|
97
|
+
* @param storageUrl - The original storage base URL (optional, used for filename-only inputs)
|
|
34
98
|
*/
|
|
35
|
-
function getFallbackUrl(imageUrl, cdnUrl, storageUrl) {
|
|
99
|
+
function getFallbackUrl(imageUrl, cdnUrl, storageUrl = DEFAULT_STORAGE_URL) {
|
|
36
100
|
if (!imageUrl)
|
|
37
101
|
return null;
|
|
38
|
-
|
|
39
|
-
// If it's a full CDN URL, strip the CDN prefix
|
|
102
|
+
// If it's an imgproxy URL, extract the source URL
|
|
40
103
|
if (imageUrl.startsWith(cdnUrl)) {
|
|
41
|
-
//
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
//
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
104
|
+
// Parse imgproxy URL: {cdnUrl}/insecure/plain/{encodedSourceUrl}@{format}
|
|
105
|
+
const plainMatch = imageUrl.match(/\/plain\/([^@]+)(?:@\w+)?$/);
|
|
106
|
+
if (plainMatch) {
|
|
107
|
+
// Decode the source URL
|
|
108
|
+
return decodeURIComponent(plainMatch[1]);
|
|
109
|
+
}
|
|
110
|
+
// If it's a base64 encoded URL (no /plain/), try to decode
|
|
111
|
+
const base64Match = imageUrl.match(/\/insecure\/([^.]+)(?:\.\w+)?$/);
|
|
112
|
+
if (base64Match) {
|
|
113
|
+
try {
|
|
114
|
+
return Buffer.from(base64Match[1], 'base64url').toString('utf-8');
|
|
115
|
+
}
|
|
116
|
+
catch (_a) {
|
|
117
|
+
// Failed to decode, return as-is
|
|
118
|
+
}
|
|
119
|
+
}
|
|
51
120
|
return imageUrl;
|
|
52
121
|
}
|
|
53
|
-
//
|
|
54
|
-
if (
|
|
55
|
-
return
|
|
122
|
+
// If it's another full URL (not our CDN), return as-is
|
|
123
|
+
if (imageUrl.startsWith('http://') || imageUrl.startsWith('https://')) {
|
|
124
|
+
return imageUrl;
|
|
56
125
|
}
|
|
57
|
-
|
|
126
|
+
// Filename only - prepend storage URL
|
|
127
|
+
return `${storageUrl}/${imageUrl}`;
|
|
58
128
|
}
|
|
59
129
|
/** Known image field names */
|
|
60
130
|
const IMAGE_FIELDS = new Set(['mainImage', 'backgroundImage', 'coverImage', 'image']);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imageUrl.js","sourceRoot":"","sources":["../../transforms/imageUrl.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;
|
|
1
|
+
{"version":3,"file":"imageUrl.js","sourceRoot":"","sources":["../../transforms/imageUrl.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,YAAY,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAC9C,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,YAAY,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAC9C,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
|
package/dist/types/index.js
CHANGED
|
@@ -22,4 +22,5 @@ __exportStar(require("./article"), exports);
|
|
|
22
22
|
__exportStar(require("./user"), exports);
|
|
23
23
|
__exportStar(require("./auth"), exports);
|
|
24
24
|
__exportStar(require("./download"), exports);
|
|
25
|
+
__exportStar(require("./subscription"), exports);
|
|
25
26
|
//# sourceMappingURL=index.js.map
|
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,2CAAyB;AACzB,4CAA0B;AAC1B,yCAAuB;AAEvB,yCAAuB;AACvB,6CAA2B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,2CAAyB;AACzB,4CAA0B;AAC1B,yCAAuB;AAEvB,yCAAuB;AACvB,6CAA2B;AAC3B,iDAA+B"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chanomhub SDK - Subscription Types
|
|
3
|
+
*/
|
|
4
|
+
/** Subscription status */
|
|
5
|
+
export type SubscriptionStatus = 'ACTIVE' | 'CANCELED' | 'SUSPENDED' | 'PAST_DUE' | 'UNPAID';
|
|
6
|
+
/** Payment method */
|
|
7
|
+
export type PaymentMethod = 'POINTS' | 'TRUEMONEY' | 'SLIP2GO';
|
|
8
|
+
/** Subscription entity */
|
|
9
|
+
export interface Subscription {
|
|
10
|
+
id: number;
|
|
11
|
+
userId: number;
|
|
12
|
+
planId: string;
|
|
13
|
+
status: SubscriptionStatus;
|
|
14
|
+
currentPeriodStart: string;
|
|
15
|
+
currentPeriodEnd: string;
|
|
16
|
+
cancelAtPeriodEnd: boolean;
|
|
17
|
+
startDate: string;
|
|
18
|
+
endDate?: string | null;
|
|
19
|
+
createdAt: string;
|
|
20
|
+
updatedAt: string;
|
|
21
|
+
}
|
|
22
|
+
/** Subscription plan entity */
|
|
23
|
+
export interface SubscriptionPlan {
|
|
24
|
+
planId: string;
|
|
25
|
+
name: string;
|
|
26
|
+
description?: string | null;
|
|
27
|
+
pointsCost: number;
|
|
28
|
+
durationDays: number;
|
|
29
|
+
roleId: number;
|
|
30
|
+
isActive: boolean;
|
|
31
|
+
}
|
|
32
|
+
/** Request to create a new subscription */
|
|
33
|
+
export interface CreateSubscriptionRequest {
|
|
34
|
+
planId: string;
|
|
35
|
+
paymentMethod?: PaymentMethod;
|
|
36
|
+
}
|
|
37
|
+
/** Request to create a new subscription plan */
|
|
38
|
+
export interface CreateSubscriptionPlanRequest {
|
|
39
|
+
planId: string;
|
|
40
|
+
name: string;
|
|
41
|
+
description?: string;
|
|
42
|
+
pointsCost: number;
|
|
43
|
+
durationDays: number;
|
|
44
|
+
roleId: number;
|
|
45
|
+
isActive?: boolean;
|
|
46
|
+
}
|
|
47
|
+
/** Response for subscription plan creation */
|
|
48
|
+
export interface SubscriptionPlanResponse {
|
|
49
|
+
plan: SubscriptionPlan;
|
|
50
|
+
}
|
|
51
|
+
/** Response for subscription creation */
|
|
52
|
+
export interface SubscriptionResponse {
|
|
53
|
+
subscription: Subscription;
|
|
54
|
+
}
|
|
55
|
+
/** List of user subscriptions */
|
|
56
|
+
export interface SubscriptionsListResponse {
|
|
57
|
+
subscriptions: Subscription[];
|
|
58
|
+
}
|
|
59
|
+
/** List of subscription plans */
|
|
60
|
+
export interface SubscriptionPlansListResponse {
|
|
61
|
+
plans: SubscriptionPlan[];
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=subscription.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../../types/subscription.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,0BAA0B;AAC1B,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE7F,qBAAqB;AACrB,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;AAE/D,0BAA0B;AAC1B,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,kBAAkB,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,+BAA+B;AAC/B,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,2CAA2C;AAC3C,MAAM,WAAW,yBAAyB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,aAAa,CAAC;CACjC;AAED,gDAAgD;AAChD,MAAM,WAAW,6BAA6B;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,8CAA8C;AAC9C,MAAM,WAAW,wBAAwB;IACrC,IAAI,EAAE,gBAAgB,CAAC;CAC1B;AAED,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACjC,YAAY,EAAE,YAAY,CAAC;CAC9B;AAED,iCAAiC;AACjC,MAAM,WAAW,yBAAyB;IACtC,aAAa,EAAE,YAAY,EAAE,CAAC;CACjC;AAED,iCAAiC;AACjC,MAAM,WAAW,6BAA6B;IAC1C,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscription.js","sourceRoot":"","sources":["../../types/subscription.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|