@rool-dev/sdk 0.9.0-dev.a397f4d → 0.9.0-dev.bab1e95

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/media.js DELETED
@@ -1,228 +0,0 @@
1
- // =============================================================================
2
- // Media Client
3
- // REST API wrapper for file upload/download/list/delete
4
- // =============================================================================
5
- export class MediaClient {
6
- config;
7
- constructor(config) {
8
- this.config = config;
9
- }
10
- baseUrl(spaceId) {
11
- return `${this.config.mediaUrl}/${encodeURIComponent(spaceId)}`;
12
- }
13
- /**
14
- * Extract filename from a media URL.
15
- * URL format: {baseUrl}/{spaceId}/{filename}
16
- */
17
- extractFilename(url) {
18
- const parts = new URL(url).pathname.split('/');
19
- const filename = parts[parts.length - 1];
20
- if (!filename)
21
- throw new Error('Invalid media URL: cannot extract filename');
22
- return filename;
23
- }
24
- /**
25
- * Check if a URL is a backend URL (requires auth).
26
- */
27
- isBackendUrl(url) {
28
- if (url.startsWith('/'))
29
- return true;
30
- try {
31
- const parsed = new URL(url);
32
- return parsed.origin === this.config.backendOrigin;
33
- }
34
- catch {
35
- return false;
36
- }
37
- }
38
- /**
39
- * List all media files for a space.
40
- */
41
- async list(spaceId) {
42
- const tokens = await this.config.authManager.getTokens();
43
- if (!tokens)
44
- throw new Error('Not authenticated');
45
- const headers = { Authorization: `Bearer ${tokens.accessToken}`, 'X-Rool-Token': tokens.roolToken };
46
- const response = await fetch(this.baseUrl(spaceId), {
47
- method: 'GET',
48
- headers,
49
- });
50
- if (!response.ok) {
51
- throw new Error(`Failed to list media: ${response.status} ${response.statusText}`);
52
- }
53
- return response.json();
54
- }
55
- /**
56
- * Upload a file to a space. Returns the URL.
57
- * Accepts File, Blob, or base64 data with content type.
58
- */
59
- async upload(spaceId, file) {
60
- const tokens = await this.config.authManager.getTokens();
61
- if (!tokens)
62
- throw new Error('Not authenticated');
63
- let body;
64
- const headers = {
65
- Authorization: `Bearer ${tokens.accessToken}`,
66
- 'X-Rool-Token': tokens.roolToken,
67
- };
68
- if (file instanceof File || file instanceof Blob) {
69
- const formData = new FormData();
70
- formData.append('file', file);
71
- body = formData;
72
- }
73
- else {
74
- headers['Content-Type'] = 'application/json';
75
- body = JSON.stringify({
76
- data: file.data,
77
- contentType: file.contentType,
78
- });
79
- }
80
- const response = await fetch(this.baseUrl(spaceId), {
81
- method: 'POST',
82
- headers,
83
- body,
84
- });
85
- if (!response.ok) {
86
- throw new Error(`Failed to upload media: ${response.status} ${response.statusText}`);
87
- }
88
- const item = await response.json();
89
- return item.url;
90
- }
91
- /**
92
- * Fetch any URL, returning headers and a blob() method (like fetch Response).
93
- * For backend URLs: adds auth headers.
94
- * For external URLs: tries direct fetch first, falls back to server proxy if CORS blocks it.
95
- */
96
- async fetch(spaceId, url, options) {
97
- let response;
98
- if (this.isBackendUrl(url)) {
99
- response = await this.fetchWithAuth(url);
100
- }
101
- else if (options?.forceProxy) {
102
- // Skip direct fetch, go straight to proxy
103
- response = await this.fetchViaProxy(spaceId, url);
104
- }
105
- else {
106
- // External URL: try direct fetch first
107
- try {
108
- const directResponse = await fetch(url, { method: 'GET', mode: 'cors' });
109
- if (directResponse.ok) {
110
- response = directResponse;
111
- }
112
- else {
113
- // Non-OK response, fall through to proxy
114
- response = await this.fetchViaProxy(spaceId, url);
115
- }
116
- }
117
- catch {
118
- // CORS or network error, fall through to proxy
119
- response = await this.fetchViaProxy(spaceId, url);
120
- }
121
- }
122
- const contentLength = response.headers.get('content-length');
123
- return {
124
- contentType: response.headers.get('content-type') || 'application/octet-stream',
125
- size: contentLength ? parseInt(contentLength, 10) : null,
126
- blob: () => response.blob(),
127
- };
128
- }
129
- /**
130
- * Fetch a backend URL with auth headers.
131
- */
132
- async fetchWithAuth(url) {
133
- const tokens = await this.config.authManager.getTokens();
134
- if (!tokens)
135
- throw new Error('Not authenticated');
136
- const headers = { Authorization: `Bearer ${tokens.accessToken}`, 'X-Rool-Token': tokens.roolToken };
137
- const response = await fetch(url, {
138
- method: 'GET',
139
- headers,
140
- });
141
- if (!response.ok) {
142
- throw new Error(`Failed to fetch media: ${response.status} ${response.statusText}`);
143
- }
144
- return response;
145
- }
146
- /**
147
- * Fetch an external URL via the server proxy (bypasses CORS).
148
- * Uses POST /fetch/:spaceId with cache-control hint for media.
149
- */
150
- async fetchViaProxy(spaceId, url) {
151
- const response = await this.proxyFetch(spaceId, url, {
152
- headers: { 'Cache-Control': 'private, max-age=3600' },
153
- });
154
- if (!response.ok) {
155
- throw new Error(`Failed to fetch media via proxy: ${response.status} ${response.statusText}`);
156
- }
157
- return response;
158
- }
159
- /**
160
- * Delete a media file by URL.
161
- */
162
- async delete(spaceId, url) {
163
- const tokens = await this.config.authManager.getTokens();
164
- if (!tokens)
165
- throw new Error('Not authenticated');
166
- const headers = { Authorization: `Bearer ${tokens.accessToken}`, 'X-Rool-Token': tokens.roolToken };
167
- const filename = this.extractFilename(url);
168
- const response = await fetch(`${this.baseUrl(spaceId)}/${encodeURIComponent(filename)}`, {
169
- method: 'DELETE',
170
- headers,
171
- });
172
- if (!response.ok && response.status !== 204) {
173
- throw new Error(`Failed to delete media: ${response.status} ${response.statusText}`);
174
- }
175
- }
176
- /**
177
- * Proxied fetch — execute an HTTP request via the server, bypassing CORS.
178
- * Uses POST /fetch/:spaceId on the backend.
179
- */
180
- async proxyFetch(spaceId, url, init) {
181
- const tokens = await this.config.authManager.getTokens();
182
- if (!tokens)
183
- throw new Error('Not authenticated');
184
- const fetchUrl = `${this.config.backendOrigin}/fetch/${encodeURIComponent(spaceId)}`;
185
- const response = await fetch(fetchUrl, {
186
- method: 'POST',
187
- headers: {
188
- 'Content-Type': 'application/json',
189
- Authorization: `Bearer ${tokens.accessToken}`,
190
- 'X-Rool-Token': tokens.roolToken,
191
- },
192
- body: JSON.stringify({
193
- url,
194
- method: init?.method,
195
- headers: init?.headers,
196
- body: init?.body,
197
- }),
198
- });
199
- return response;
200
- }
201
- /**
202
- * Import a space from a zip archive.
203
- * Creates a new space with the given name and imports objects, relations, and media.
204
- * Returns the new space ID.
205
- */
206
- async importArchive(name, archive) {
207
- const tokens = await this.config.authManager.getTokens();
208
- if (!tokens)
209
- throw new Error('Not authenticated');
210
- const headers = { Authorization: `Bearer ${tokens.accessToken}`, 'X-Rool-Token': tokens.roolToken };
211
- const formData = new FormData();
212
- formData.append('name', name);
213
- formData.append('archive', archive, 'archive.zip');
214
- const importUrl = `${this.config.backendOrigin}/spaces/import`;
215
- const response = await fetch(importUrl, {
216
- method: 'POST',
217
- headers,
218
- body: formData,
219
- });
220
- if (!response.ok) {
221
- const errorText = await response.text().catch(() => response.statusText);
222
- throw new Error(`Failed to import space: ${response.status} ${errorText}`);
223
- }
224
- const result = await response.json();
225
- return result.spaceId;
226
- }
227
- }
228
- //# sourceMappingURL=media.js.map
package/dist/media.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"media.js","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"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"}