@pinepaper.studio/mcp-server 1.2.2 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +109 -2
- package/dist/assets/asset-manager.d.ts +75 -0
- package/dist/assets/asset-manager.d.ts.map +1 -0
- package/dist/assets/asset-manager.js +156 -0
- package/dist/assets/asset-manager.js.map +1 -0
- package/dist/assets/index.d.ts +12 -0
- package/dist/assets/index.d.ts.map +1 -0
- package/dist/assets/index.js +12 -0
- package/dist/assets/index.js.map +1 -0
- package/dist/assets/repositories/fontawesome.d.ts +43 -0
- package/dist/assets/repositories/fontawesome.d.ts.map +1 -0
- package/dist/assets/repositories/fontawesome.js +163 -0
- package/dist/assets/repositories/fontawesome.js.map +1 -0
- package/dist/assets/repositories/iconify.d.ts +44 -0
- package/dist/assets/repositories/iconify.d.ts.map +1 -0
- package/dist/assets/repositories/iconify.js +208 -0
- package/dist/assets/repositories/iconify.js.map +1 -0
- package/dist/assets/repositories/openclipart.d.ts +41 -0
- package/dist/assets/repositories/openclipart.d.ts.map +1 -0
- package/dist/assets/repositories/openclipart.js +138 -0
- package/dist/assets/repositories/openclipart.js.map +1 -0
- package/dist/assets/repositories/svgrepo.d.ts +61 -0
- package/dist/assets/repositories/svgrepo.d.ts.map +1 -0
- package/dist/assets/repositories/svgrepo.js +276 -0
- package/dist/assets/repositories/svgrepo.js.map +1 -0
- package/dist/assets/types.d.ts +85 -0
- package/dist/assets/types.d.ts.map +1 -0
- package/dist/assets/types.js +7 -0
- package/dist/assets/types.js.map +1 -0
- package/dist/execution/canvas-state.d.ts +65 -0
- package/dist/execution/canvas-state.d.ts.map +1 -0
- package/dist/execution/canvas-state.js +165 -0
- package/dist/execution/canvas-state.js.map +1 -0
- package/dist/execution/index.d.ts +8 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +8 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/metrics/index.d.ts +8 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +8 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/performance-tracker.d.ts +96 -0
- package/dist/metrics/performance-tracker.d.ts.map +1 -0
- package/dist/metrics/performance-tracker.js +270 -0
- package/dist/metrics/performance-tracker.js.map +1 -0
- package/dist/metrics/types.d.ts +86 -0
- package/dist/metrics/types.d.ts.map +1 -0
- package/dist/metrics/types.js +7 -0
- package/dist/metrics/types.js.map +1 -0
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +476 -0
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/handlers.d.ts.map +1 -1
- package/dist/tools/handlers.js +301 -37
- package/dist/tools/handlers.js.map +1 -1
- package/dist/tools/p5-compat/index.d.ts +8 -0
- package/dist/tools/p5-compat/index.d.ts.map +1 -0
- package/dist/tools/p5-compat/index.js +8 -0
- package/dist/tools/p5-compat/index.js.map +1 -0
- package/dist/tools/p5-compat/p5-helpers.d.ts +25 -0
- package/dist/tools/p5-compat/p5-helpers.d.ts.map +1 -0
- package/dist/tools/p5-compat/p5-helpers.js +399 -0
- package/dist/tools/p5-compat/p5-helpers.js.map +1 -0
- package/dist/types/code-generator.d.ts +4 -0
- package/dist/types/code-generator.d.ts.map +1 -1
- package/dist/types/code-generator.js +8 -0
- package/dist/types/code-generator.js.map +1 -1
- package/dist/types/schemas.d.ts +77 -0
- package/dist/types/schemas.d.ts.map +1 -1
- package/dist/types/schemas.js +34 -0
- package/dist/types/schemas.js.map +1 -1
- package/manifest.json +18 -2
- package/package.json +1 -1
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Iconify Asset Repository Adapter
|
|
3
|
+
*
|
|
4
|
+
* Fetches SVG icons from iconify.design
|
|
5
|
+
* Repository info: 200,000+ icons from various icon sets with different licenses
|
|
6
|
+
*/
|
|
7
|
+
import { AssetRepository, AssetResult, AssetMetadata } from '../types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Iconify adapter
|
|
10
|
+
*
|
|
11
|
+
* Uses the Iconify API to search and download icons from multiple icon sets
|
|
12
|
+
*/
|
|
13
|
+
export declare class IconifyAdapter implements AssetRepository {
|
|
14
|
+
name: string;
|
|
15
|
+
private apiUrl;
|
|
16
|
+
/**
|
|
17
|
+
* Search for icons on Iconify
|
|
18
|
+
*
|
|
19
|
+
* @param query Search term
|
|
20
|
+
* @param limit Maximum results to return
|
|
21
|
+
*/
|
|
22
|
+
search(query: string, limit: number): Promise<AssetResult[]>;
|
|
23
|
+
/**
|
|
24
|
+
* Download SVG content
|
|
25
|
+
*
|
|
26
|
+
* @param assetId Asset ID from search results (format: iconify_collection_icon-name)
|
|
27
|
+
*/
|
|
28
|
+
download(assetId: string): Promise<string>;
|
|
29
|
+
/**
|
|
30
|
+
* Get asset metadata
|
|
31
|
+
*
|
|
32
|
+
* @param assetId Asset ID
|
|
33
|
+
*/
|
|
34
|
+
getMetadata(assetId: string): Promise<AssetMetadata>;
|
|
35
|
+
/**
|
|
36
|
+
* Parse license from collection info
|
|
37
|
+
*/
|
|
38
|
+
private parseLicense;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Create Iconify adapter instance
|
|
42
|
+
*/
|
|
43
|
+
export declare function createIconifyAdapter(): AssetRepository;
|
|
44
|
+
//# sourceMappingURL=iconify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iconify.d.ts","sourceRoot":"","sources":["../../../src/assets/repositories/iconify.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;AAsBxF;;;;GAIG;AACH,qBAAa,cAAe,YAAW,eAAe;IACpD,IAAI,SAAa;IAEjB,OAAO,CAAC,MAAM,CAAgC;IAE9C;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAmDlE;;;;OAIG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkChD;;;;OAIG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA6C1D;;OAEG;IACH,OAAO,CAAC,YAAY;CA+DrB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,eAAe,CAEtD"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Iconify Asset Repository Adapter
|
|
3
|
+
*
|
|
4
|
+
* Fetches SVG icons from iconify.design
|
|
5
|
+
* Repository info: 200,000+ icons from various icon sets with different licenses
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Iconify adapter
|
|
9
|
+
*
|
|
10
|
+
* Uses the Iconify API to search and download icons from multiple icon sets
|
|
11
|
+
*/
|
|
12
|
+
export class IconifyAdapter {
|
|
13
|
+
name = 'iconify';
|
|
14
|
+
apiUrl = 'https://api.iconify.design';
|
|
15
|
+
/**
|
|
16
|
+
* Search for icons on Iconify
|
|
17
|
+
*
|
|
18
|
+
* @param query Search term
|
|
19
|
+
* @param limit Maximum results to return
|
|
20
|
+
*/
|
|
21
|
+
async search(query, limit) {
|
|
22
|
+
try {
|
|
23
|
+
// Iconify search endpoint
|
|
24
|
+
const searchUrl = `${this.apiUrl}/search?query=${encodeURIComponent(query)}&limit=${limit}`;
|
|
25
|
+
const response = await fetch(searchUrl, {
|
|
26
|
+
headers: {
|
|
27
|
+
'User-Agent': 'PinePaper-MCP-Server/1.2.2',
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
if (!response.ok) {
|
|
31
|
+
throw new Error(`Iconify search failed: ${response.status} ${response.statusText}`);
|
|
32
|
+
}
|
|
33
|
+
const data = (await response.json());
|
|
34
|
+
if (!data.icons || !Array.isArray(data.icons)) {
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
// Convert to AssetResult format
|
|
38
|
+
const results = [];
|
|
39
|
+
for (const iconName of data.icons.slice(0, limit)) {
|
|
40
|
+
// Icon name format: "collection:icon-name"
|
|
41
|
+
const [collection, name] = iconName.split(':');
|
|
42
|
+
// Get collection info for license
|
|
43
|
+
const collectionInfo = data.collections?.[collection];
|
|
44
|
+
const license = this.parseLicense(collectionInfo);
|
|
45
|
+
results.push({
|
|
46
|
+
id: `iconify_${iconName.replace(':', '_')}`,
|
|
47
|
+
repository: 'iconify',
|
|
48
|
+
title: name?.replace(/-/g, ' ') || iconName,
|
|
49
|
+
description: `${name} icon from ${collectionInfo?.name || collection}`,
|
|
50
|
+
previewUrl: `https://api.iconify.design/${iconName}.svg`,
|
|
51
|
+
downloadUrl: `https://api.iconify.design/${iconName}.svg`,
|
|
52
|
+
license,
|
|
53
|
+
tags: [query, collection],
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return results;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.error('[IconifyAdapter] Search error:', error);
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Download SVG content
|
|
65
|
+
*
|
|
66
|
+
* @param assetId Asset ID from search results (format: iconify_collection_icon-name)
|
|
67
|
+
*/
|
|
68
|
+
async download(assetId) {
|
|
69
|
+
try {
|
|
70
|
+
// Convert asset ID back to icon name
|
|
71
|
+
const iconName = assetId
|
|
72
|
+
.replace('iconify_', '')
|
|
73
|
+
.replace('_', ':'); // Replace first underscore with colon
|
|
74
|
+
// Download SVG from Iconify API
|
|
75
|
+
const svgUrl = `${this.apiUrl}/${iconName}.svg`;
|
|
76
|
+
const response = await fetch(svgUrl, {
|
|
77
|
+
headers: {
|
|
78
|
+
'User-Agent': 'PinePaper-MCP-Server/1.2.2',
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
if (!response.ok) {
|
|
82
|
+
throw new Error(`Failed to download icon: ${response.status}`);
|
|
83
|
+
}
|
|
84
|
+
const svg = await response.text();
|
|
85
|
+
// Validate SVG
|
|
86
|
+
if (!svg.trim().startsWith('<svg') && !svg.includes('<svg')) {
|
|
87
|
+
throw new Error('Downloaded content is not valid SVG');
|
|
88
|
+
}
|
|
89
|
+
return svg;
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
console.error('[IconifyAdapter] Download error:', error);
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get asset metadata
|
|
98
|
+
*
|
|
99
|
+
* @param assetId Asset ID
|
|
100
|
+
*/
|
|
101
|
+
async getMetadata(assetId) {
|
|
102
|
+
try {
|
|
103
|
+
const iconName = assetId.replace('iconify_', '').replace('_', ':');
|
|
104
|
+
const [collection] = iconName.split(':');
|
|
105
|
+
// Fetch collection info
|
|
106
|
+
const collectionUrl = `${this.apiUrl}/collection?prefix=${collection}`;
|
|
107
|
+
const response = await fetch(collectionUrl, {
|
|
108
|
+
headers: {
|
|
109
|
+
'User-Agent': 'PinePaper-MCP-Server/1.2.2',
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
if (response.ok) {
|
|
113
|
+
const data = await response.json();
|
|
114
|
+
const license = this.parseLicense(data);
|
|
115
|
+
return {
|
|
116
|
+
id: assetId,
|
|
117
|
+
repository: this.name,
|
|
118
|
+
title: iconName,
|
|
119
|
+
license,
|
|
120
|
+
downloadedAt: Date.now(),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
console.error('[IconifyAdapter] Metadata error:', error);
|
|
126
|
+
}
|
|
127
|
+
// Fallback metadata
|
|
128
|
+
return {
|
|
129
|
+
id: assetId,
|
|
130
|
+
repository: this.name,
|
|
131
|
+
title: assetId.replace('iconify_', ''),
|
|
132
|
+
license: {
|
|
133
|
+
type: 'Mixed',
|
|
134
|
+
name: 'Various Licenses (check collection)',
|
|
135
|
+
requiresAttribution: true,
|
|
136
|
+
allowsCommercial: false,
|
|
137
|
+
},
|
|
138
|
+
downloadedAt: Date.now(),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Parse license from collection info
|
|
143
|
+
*/
|
|
144
|
+
parseLicense(collectionInfo) {
|
|
145
|
+
if (!collectionInfo?.license) {
|
|
146
|
+
return {
|
|
147
|
+
type: 'Mixed',
|
|
148
|
+
name: 'Various Licenses',
|
|
149
|
+
requiresAttribution: true,
|
|
150
|
+
allowsCommercial: false,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
const license = collectionInfo.license;
|
|
154
|
+
const spdx = license.spdx || license.title || '';
|
|
155
|
+
// Map common licenses
|
|
156
|
+
if (spdx.includes('MIT')) {
|
|
157
|
+
return {
|
|
158
|
+
type: 'MIT',
|
|
159
|
+
name: 'MIT License',
|
|
160
|
+
requiresAttribution: true,
|
|
161
|
+
allowsCommercial: true,
|
|
162
|
+
url: license.url || 'https://opensource.org/licenses/MIT',
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
if (spdx.includes('Apache')) {
|
|
166
|
+
return {
|
|
167
|
+
type: 'Apache-2.0',
|
|
168
|
+
name: 'Apache License 2.0',
|
|
169
|
+
requiresAttribution: true,
|
|
170
|
+
allowsCommercial: true,
|
|
171
|
+
url: license.url || 'https://www.apache.org/licenses/LICENSE-2.0',
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
if (spdx.includes('CC0')) {
|
|
175
|
+
return {
|
|
176
|
+
type: 'CC0',
|
|
177
|
+
name: 'Public Domain (CC0)',
|
|
178
|
+
requiresAttribution: false,
|
|
179
|
+
allowsCommercial: true,
|
|
180
|
+
url: license.url || 'https://creativecommons.org/publicdomain/zero/1.0/',
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
if (spdx.includes('CC-BY')) {
|
|
184
|
+
return {
|
|
185
|
+
type: 'CC-BY-4.0',
|
|
186
|
+
name: 'Creative Commons Attribution',
|
|
187
|
+
requiresAttribution: true,
|
|
188
|
+
allowsCommercial: true,
|
|
189
|
+
url: license.url || 'https://creativecommons.org/licenses/by/4.0/',
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
// Generic license
|
|
193
|
+
return {
|
|
194
|
+
type: spdx || 'Unknown',
|
|
195
|
+
name: license.title || 'Check Collection License',
|
|
196
|
+
requiresAttribution: true,
|
|
197
|
+
allowsCommercial: false,
|
|
198
|
+
url: license.url,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Create Iconify adapter instance
|
|
204
|
+
*/
|
|
205
|
+
export function createIconifyAdapter() {
|
|
206
|
+
return new IconifyAdapter();
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=iconify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iconify.js","sourceRoot":"","sources":["../../../src/assets/repositories/iconify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClipart Asset Repository Adapter
|
|
3
|
+
*
|
|
4
|
+
* Fetches SVG assets from openclipart.org
|
|
5
|
+
* Repository info: 150,000+ public domain clipart (CC0 license)
|
|
6
|
+
*/
|
|
7
|
+
import { AssetRepository, AssetResult, AssetMetadata } from '../types.js';
|
|
8
|
+
/**
|
|
9
|
+
* OpenClipart adapter
|
|
10
|
+
*
|
|
11
|
+
* Uses the OpenClipart API to search and download public domain SVG clipart
|
|
12
|
+
*/
|
|
13
|
+
export declare class OpenClipartAdapter implements AssetRepository {
|
|
14
|
+
name: string;
|
|
15
|
+
private baseUrl;
|
|
16
|
+
private apiUrl;
|
|
17
|
+
/**
|
|
18
|
+
* Search for assets on OpenClipart
|
|
19
|
+
*
|
|
20
|
+
* @param query Search term
|
|
21
|
+
* @param limit Maximum results to return
|
|
22
|
+
*/
|
|
23
|
+
search(query: string, limit: number): Promise<AssetResult[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Download SVG content
|
|
26
|
+
*
|
|
27
|
+
* @param assetId Asset ID from search results
|
|
28
|
+
*/
|
|
29
|
+
download(assetId: string): Promise<string>;
|
|
30
|
+
/**
|
|
31
|
+
* Get asset metadata
|
|
32
|
+
*
|
|
33
|
+
* @param assetId Asset ID
|
|
34
|
+
*/
|
|
35
|
+
getMetadata(assetId: string): Promise<AssetMetadata>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Create OpenClipart adapter instance
|
|
39
|
+
*/
|
|
40
|
+
export declare function createOpenClipartAdapter(): AssetRepository;
|
|
41
|
+
//# sourceMappingURL=openclipart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclipart.d.ts","sourceRoot":"","sources":["../../../src/assets/repositories/openclipart.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;AAwBxF;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,eAAe;IACxD,IAAI,SAAiB;IAErB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,MAAM,CAAyC;IAEvD;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA4ClE;;;;OAIG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwDhD;;;;OAIG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;CAe3D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,eAAe,CAE1D"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClipart Asset Repository Adapter
|
|
3
|
+
*
|
|
4
|
+
* Fetches SVG assets from openclipart.org
|
|
5
|
+
* Repository info: 150,000+ public domain clipart (CC0 license)
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* OpenClipart adapter
|
|
9
|
+
*
|
|
10
|
+
* Uses the OpenClipart API to search and download public domain SVG clipart
|
|
11
|
+
*/
|
|
12
|
+
export class OpenClipartAdapter {
|
|
13
|
+
name = 'openclipart';
|
|
14
|
+
baseUrl = 'https://openclipart.org';
|
|
15
|
+
apiUrl = 'https://openclipart.org/search/json';
|
|
16
|
+
/**
|
|
17
|
+
* Search for assets on OpenClipart
|
|
18
|
+
*
|
|
19
|
+
* @param query Search term
|
|
20
|
+
* @param limit Maximum results to return
|
|
21
|
+
*/
|
|
22
|
+
async search(query, limit) {
|
|
23
|
+
try {
|
|
24
|
+
// OpenClipart API endpoint
|
|
25
|
+
const searchUrl = `${this.apiUrl}?query=${encodeURIComponent(query)}&amount=${limit}`;
|
|
26
|
+
const response = await fetch(searchUrl, {
|
|
27
|
+
headers: {
|
|
28
|
+
'User-Agent': 'PinePaper-MCP-Server/1.2.2',
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
if (!response.ok) {
|
|
32
|
+
throw new Error(`OpenClipart search failed: ${response.status} ${response.statusText}`);
|
|
33
|
+
}
|
|
34
|
+
const data = (await response.json());
|
|
35
|
+
if (!data.payload || !Array.isArray(data.payload)) {
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
// Convert to AssetResult format
|
|
39
|
+
return data.payload.slice(0, limit).map((item) => ({
|
|
40
|
+
id: `openclipart_${item.id}`,
|
|
41
|
+
repository: 'openclipart',
|
|
42
|
+
title: item.title || 'Untitled',
|
|
43
|
+
description: item.description || `${item.title} from OpenClipart`,
|
|
44
|
+
previewUrl: item.png_thumb?.url || item.svg?.url || '',
|
|
45
|
+
downloadUrl: item.svg?.url || '',
|
|
46
|
+
license: {
|
|
47
|
+
type: 'CC0',
|
|
48
|
+
name: 'Public Domain (CC0)',
|
|
49
|
+
requiresAttribution: false,
|
|
50
|
+
allowsCommercial: true,
|
|
51
|
+
url: 'https://creativecommons.org/publicdomain/zero/1.0/',
|
|
52
|
+
},
|
|
53
|
+
tags: item.tags || [query],
|
|
54
|
+
}));
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
console.error('[OpenClipartAdapter] Search error:', error);
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Download SVG content
|
|
63
|
+
*
|
|
64
|
+
* @param assetId Asset ID from search results
|
|
65
|
+
*/
|
|
66
|
+
async download(assetId) {
|
|
67
|
+
try {
|
|
68
|
+
// For OpenClipart, the download URL should be stored with the asset
|
|
69
|
+
// If we need to fetch it, we'd query the API again
|
|
70
|
+
const clipartId = assetId.replace('openclipart_', '');
|
|
71
|
+
// Fetch the detail page to get download URL
|
|
72
|
+
const detailUrl = `${this.baseUrl}/detail/${clipartId}`;
|
|
73
|
+
const response = await fetch(detailUrl, {
|
|
74
|
+
headers: {
|
|
75
|
+
'User-Agent': 'PinePaper-MCP-Server/1.2.2',
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
if (!response.ok) {
|
|
79
|
+
throw new Error(`Failed to fetch detail page: ${response.status}`);
|
|
80
|
+
}
|
|
81
|
+
const html = await response.text();
|
|
82
|
+
// Extract SVG download URL from page
|
|
83
|
+
const svgUrlMatch = html.match(/href="([^"]*\.svg)"/i);
|
|
84
|
+
if (!svgUrlMatch) {
|
|
85
|
+
throw new Error('Could not find SVG download URL');
|
|
86
|
+
}
|
|
87
|
+
const svgUrl = svgUrlMatch[1].startsWith('http')
|
|
88
|
+
? svgUrlMatch[1]
|
|
89
|
+
: `${this.baseUrl}${svgUrlMatch[1]}`;
|
|
90
|
+
// Download the SVG
|
|
91
|
+
const svgResponse = await fetch(svgUrl, {
|
|
92
|
+
headers: {
|
|
93
|
+
'User-Agent': 'PinePaper-MCP-Server/1.2.2',
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
if (!svgResponse.ok) {
|
|
97
|
+
throw new Error(`Failed to download SVG: ${svgResponse.status}`);
|
|
98
|
+
}
|
|
99
|
+
const svg = await svgResponse.text();
|
|
100
|
+
// Validate SVG
|
|
101
|
+
if (!svg.trim().startsWith('<svg') && !svg.includes('<svg')) {
|
|
102
|
+
throw new Error('Downloaded content is not valid SVG');
|
|
103
|
+
}
|
|
104
|
+
return svg;
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
console.error('[OpenClipartAdapter] Download error:', error);
|
|
108
|
+
throw error;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get asset metadata
|
|
113
|
+
*
|
|
114
|
+
* @param assetId Asset ID
|
|
115
|
+
*/
|
|
116
|
+
async getMetadata(assetId) {
|
|
117
|
+
return {
|
|
118
|
+
id: assetId,
|
|
119
|
+
repository: this.name,
|
|
120
|
+
title: assetId.replace('openclipart_', ''),
|
|
121
|
+
license: {
|
|
122
|
+
type: 'CC0',
|
|
123
|
+
name: 'Public Domain (CC0)',
|
|
124
|
+
requiresAttribution: false,
|
|
125
|
+
allowsCommercial: true,
|
|
126
|
+
url: 'https://creativecommons.org/publicdomain/zero/1.0/',
|
|
127
|
+
},
|
|
128
|
+
downloadedAt: Date.now(),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Create OpenClipart adapter instance
|
|
134
|
+
*/
|
|
135
|
+
export function createOpenClipartAdapter() {
|
|
136
|
+
return new OpenClipartAdapter();
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=openclipart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclipart.js","sourceRoot":"","sources":["../../../src/assets/repositories/openclipart.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SVGRepo Asset Repository Adapter
|
|
3
|
+
*
|
|
4
|
+
* Fetches SVG assets from svgrepo.com
|
|
5
|
+
* Repository info: 500,000+ free SVG icons with various licenses
|
|
6
|
+
*/
|
|
7
|
+
import { AssetRepository, AssetResult, AssetMetadata } from '../types.js';
|
|
8
|
+
/**
|
|
9
|
+
* SVGRepo adapter - Real implementation
|
|
10
|
+
*
|
|
11
|
+
* Searches and downloads SVG assets from svgrepo.com
|
|
12
|
+
*/
|
|
13
|
+
export declare class SVGRepoAdapter implements AssetRepository {
|
|
14
|
+
name: string;
|
|
15
|
+
private baseUrl;
|
|
16
|
+
private searchUrl;
|
|
17
|
+
/**
|
|
18
|
+
* Search for assets on SVGRepo
|
|
19
|
+
*
|
|
20
|
+
* @param query Search term (e.g., "rocket", "heart")
|
|
21
|
+
* @param limit Maximum results to return
|
|
22
|
+
*/
|
|
23
|
+
search(query: string, limit: number): Promise<AssetResult[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Download SVG content
|
|
26
|
+
*
|
|
27
|
+
* @param assetId Asset ID from search results (format: svgrepo_12345_slug)
|
|
28
|
+
*/
|
|
29
|
+
download(assetId: string): Promise<string>;
|
|
30
|
+
/**
|
|
31
|
+
* Get asset metadata
|
|
32
|
+
*
|
|
33
|
+
* @param assetId Asset ID
|
|
34
|
+
*/
|
|
35
|
+
getMetadata(assetId: string): Promise<AssetMetadata>;
|
|
36
|
+
/**
|
|
37
|
+
* Parse search results from HTML
|
|
38
|
+
*/
|
|
39
|
+
private parseSearchResults;
|
|
40
|
+
/**
|
|
41
|
+
* Parse license information from page HTML
|
|
42
|
+
*/
|
|
43
|
+
private parseLicenseFromPage;
|
|
44
|
+
/**
|
|
45
|
+
* Extract download URL from asset page
|
|
46
|
+
*/
|
|
47
|
+
private extractDownloadUrl;
|
|
48
|
+
/**
|
|
49
|
+
* Convert asset URL to asset ID
|
|
50
|
+
*/
|
|
51
|
+
private urlToAssetId;
|
|
52
|
+
/**
|
|
53
|
+
* Convert asset ID back to URL
|
|
54
|
+
*/
|
|
55
|
+
private assetIdToUrl;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Create SVGRepo adapter instance
|
|
59
|
+
*/
|
|
60
|
+
export declare function createSVGRepoAdapter(): AssetRepository;
|
|
61
|
+
//# sourceMappingURL=svgrepo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svgrepo.d.ts","sourceRoot":"","sources":["../../../src/assets/repositories/svgrepo.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;AAWxF;;;;GAIG;AACH,qBAAa,cAAe,YAAW,eAAe;IACpD,IAAI,SAAa;IAEjB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,SAAS,CAAqC;IAEtD;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAwClE;;;;OAIG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkDhD;;;;OAIG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA+C1D;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA6C1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgC5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA0B1B;;OAEG;IACH,OAAO,CAAC,YAAY;IAWpB;;OAEG;IACH,OAAO,CAAC,YAAY;CAQrB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,eAAe,CAEtD"}
|