@agent-foundry/studio 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +96 -0
  2. package/dist/db/client.d.ts +59 -0
  3. package/dist/db/client.d.ts.map +1 -0
  4. package/dist/db/client.js +51 -0
  5. package/dist/db/client.js.map +1 -0
  6. package/dist/db/deployments.d.ts +65 -0
  7. package/dist/db/deployments.d.ts.map +1 -0
  8. package/dist/db/deployments.js +249 -0
  9. package/dist/db/deployments.js.map +1 -0
  10. package/dist/db/index.d.ts +7 -0
  11. package/dist/db/index.d.ts.map +1 -0
  12. package/dist/db/index.js +7 -0
  13. package/dist/db/index.js.map +1 -0
  14. package/dist/db/projects.d.ts +48 -0
  15. package/dist/db/projects.d.ts.map +1 -0
  16. package/dist/db/projects.js +192 -0
  17. package/dist/db/projects.js.map +1 -0
  18. package/dist/index.d.ts +11 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +15 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/oss/client.d.ts +65 -0
  23. package/dist/oss/client.d.ts.map +1 -0
  24. package/dist/oss/client.js +146 -0
  25. package/dist/oss/client.js.map +1 -0
  26. package/dist/oss/index.d.ts +7 -0
  27. package/dist/oss/index.d.ts.map +1 -0
  28. package/dist/oss/index.js +7 -0
  29. package/dist/oss/index.js.map +1 -0
  30. package/dist/oss/types.d.ts +96 -0
  31. package/dist/oss/types.d.ts.map +1 -0
  32. package/dist/oss/types.js +5 -0
  33. package/dist/oss/types.js.map +1 -0
  34. package/dist/oss/uploader.d.ts +72 -0
  35. package/dist/oss/uploader.d.ts.map +1 -0
  36. package/dist/oss/uploader.js +185 -0
  37. package/dist/oss/uploader.js.map +1 -0
  38. package/dist/types/deployment.d.ts +112 -0
  39. package/dist/types/deployment.d.ts.map +1 -0
  40. package/dist/types/deployment.js +7 -0
  41. package/dist/types/deployment.js.map +1 -0
  42. package/dist/types/index.d.ts +8 -0
  43. package/dist/types/index.d.ts.map +1 -0
  44. package/dist/types/index.js +8 -0
  45. package/dist/types/index.js.map +1 -0
  46. package/dist/types/project.d.ts +90 -0
  47. package/dist/types/project.d.ts.map +1 -0
  48. package/dist/types/project.js +8 -0
  49. package/dist/types/project.js.map +1 -0
  50. package/dist/types/user.d.ts +71 -0
  51. package/dist/types/user.d.ts.map +1 -0
  52. package/dist/types/user.js +8 -0
  53. package/dist/types/user.js.map +1 -0
  54. package/dist/types/workspace.d.ts +88 -0
  55. package/dist/types/workspace.d.ts.map +1 -0
  56. package/dist/types/workspace.js +27 -0
  57. package/dist/types/workspace.js.map +1 -0
  58. package/dist/utils/build.d.ts +78 -0
  59. package/dist/utils/build.d.ts.map +1 -0
  60. package/dist/utils/build.js +148 -0
  61. package/dist/utils/build.js.map +1 -0
  62. package/dist/utils/index.d.ts +6 -0
  63. package/dist/utils/index.d.ts.map +1 -0
  64. package/dist/utils/index.js +6 -0
  65. package/dist/utils/index.js.map +1 -0
  66. package/dist/utils/manifest.d.ts +106 -0
  67. package/dist/utils/manifest.d.ts.map +1 -0
  68. package/dist/utils/manifest.js +109 -0
  69. package/dist/utils/manifest.js.map +1 -0
  70. package/package.json +62 -0
  71. package/src/db/client.ts +92 -0
  72. package/src/db/deployments.ts +316 -0
  73. package/src/db/index.ts +7 -0
  74. package/src/db/projects.ts +246 -0
  75. package/src/db/schema.sql +156 -0
  76. package/src/index.ts +18 -0
  77. package/src/oss/client.ts +183 -0
  78. package/src/oss/index.ts +7 -0
  79. package/src/oss/types.ts +126 -0
  80. package/src/oss/uploader.ts +254 -0
  81. package/src/types/deployment.ts +147 -0
  82. package/src/types/index.ts +8 -0
  83. package/src/types/project.ts +114 -0
  84. package/src/types/user.ts +91 -0
  85. package/src/types/workspace.ts +124 -0
  86. package/src/utils/build.ts +199 -0
  87. package/src/utils/index.ts +6 -0
  88. package/src/utils/manifest.ts +224 -0
@@ -0,0 +1,192 @@
1
+ /**
2
+ * Projects Repository
3
+ *
4
+ * CRUD operations for studio_projects table.
5
+ */
6
+ /**
7
+ * Convert database row to StudioProject
8
+ */
9
+ function rowToProject(row) {
10
+ return {
11
+ id: row.id,
12
+ userId: row.user_id,
13
+ name: row.name,
14
+ slug: row.slug,
15
+ description: row.description ?? undefined,
16
+ rootPath: row.root_path,
17
+ framework: row.framework,
18
+ config: row.config,
19
+ parentProjectId: row.parent_project_id ?? undefined,
20
+ createdAt: row.created_at,
21
+ updatedAt: row.updated_at,
22
+ };
23
+ }
24
+ /**
25
+ * Projects Repository - manages studio_projects table
26
+ */
27
+ export class ProjectsRepository {
28
+ constructor(supabase) {
29
+ this.supabase = supabase;
30
+ this.TABLE = 'studio_projects';
31
+ }
32
+ /**
33
+ * Create a new project
34
+ */
35
+ async create(input) {
36
+ const { data: { user } } = await this.supabase.auth.getUser();
37
+ if (!user) {
38
+ throw new Error('Not authenticated');
39
+ }
40
+ const { data, error } = await this.supabase
41
+ .from(this.TABLE)
42
+ .insert({
43
+ user_id: user.id,
44
+ name: input.name,
45
+ slug: input.slug,
46
+ description: input.description,
47
+ root_path: input.rootPath,
48
+ framework: input.framework ?? 'vite-react',
49
+ config: input.config ?? {},
50
+ parent_project_id: input.parentProjectId,
51
+ })
52
+ .select()
53
+ .single();
54
+ if (error) {
55
+ throw new Error(`Failed to create project: ${error.message}`);
56
+ }
57
+ return rowToProject(data);
58
+ }
59
+ /**
60
+ * Get a project by ID
61
+ */
62
+ async getById(id) {
63
+ const { data, error } = await this.supabase
64
+ .from(this.TABLE)
65
+ .select()
66
+ .eq('id', id)
67
+ .single();
68
+ if (error) {
69
+ if (error.code === 'PGRST116') {
70
+ return null; // Not found
71
+ }
72
+ throw new Error(`Failed to get project: ${error.message}`);
73
+ }
74
+ return rowToProject(data);
75
+ }
76
+ /**
77
+ * Get a project by slug (for current user)
78
+ */
79
+ async getBySlug(slug) {
80
+ const { data, error } = await this.supabase
81
+ .from(this.TABLE)
82
+ .select()
83
+ .eq('slug', slug)
84
+ .single();
85
+ if (error) {
86
+ if (error.code === 'PGRST116') {
87
+ return null; // Not found
88
+ }
89
+ throw new Error(`Failed to get project: ${error.message}`);
90
+ }
91
+ return rowToProject(data);
92
+ }
93
+ /**
94
+ * List projects with optional filters
95
+ */
96
+ async list(filters = {}) {
97
+ let query = this.supabase.from(this.TABLE).select();
98
+ // Apply filters
99
+ if (filters.framework) {
100
+ query = query.eq('framework', filters.framework);
101
+ }
102
+ if (filters.search) {
103
+ query = query.ilike('name', `%${filters.search}%`);
104
+ }
105
+ // Ordering
106
+ const orderBy = filters.orderBy ?? 'createdAt';
107
+ const orderColumn = orderBy === 'createdAt' ? 'created_at' :
108
+ orderBy === 'updatedAt' ? 'updated_at' : 'name';
109
+ const ascending = filters.orderDir === 'asc';
110
+ query = query.order(orderColumn, { ascending });
111
+ // Pagination
112
+ if (filters.limit) {
113
+ query = query.limit(filters.limit);
114
+ }
115
+ if (filters.offset) {
116
+ query = query.range(filters.offset, filters.offset + (filters.limit ?? 50) - 1);
117
+ }
118
+ const { data, error } = await query;
119
+ if (error) {
120
+ throw new Error(`Failed to list projects: ${error.message}`);
121
+ }
122
+ return data.map(rowToProject);
123
+ }
124
+ /**
125
+ * Update a project
126
+ */
127
+ async update(id, input) {
128
+ const updateData = {};
129
+ if (input.name !== undefined) {
130
+ updateData.name = input.name;
131
+ }
132
+ if (input.description !== undefined) {
133
+ updateData.description = input.description;
134
+ }
135
+ if (input.config !== undefined) {
136
+ // Merge with existing config
137
+ const existing = await this.getById(id);
138
+ if (!existing) {
139
+ throw new Error('Project not found');
140
+ }
141
+ updateData.config = { ...existing.config, ...input.config };
142
+ }
143
+ const { data, error } = await this.supabase
144
+ .from(this.TABLE)
145
+ .update(updateData)
146
+ .eq('id', id)
147
+ .select()
148
+ .single();
149
+ if (error) {
150
+ throw new Error(`Failed to update project: ${error.message}`);
151
+ }
152
+ return rowToProject(data);
153
+ }
154
+ /**
155
+ * Delete a project
156
+ */
157
+ async delete(id) {
158
+ const { error } = await this.supabase
159
+ .from(this.TABLE)
160
+ .delete()
161
+ .eq('id', id);
162
+ if (error) {
163
+ throw new Error(`Failed to delete project: ${error.message}`);
164
+ }
165
+ }
166
+ /**
167
+ * Fork a project (create a copy)
168
+ */
169
+ async fork(id, newSlug, newRootPath) {
170
+ const original = await this.getById(id);
171
+ if (!original) {
172
+ throw new Error('Original project not found');
173
+ }
174
+ return this.create({
175
+ name: `${original.name} (Fork)`,
176
+ slug: newSlug,
177
+ description: original.description,
178
+ rootPath: newRootPath,
179
+ framework: original.framework,
180
+ config: original.config,
181
+ parentProjectId: original.id,
182
+ });
183
+ }
184
+ /**
185
+ * Check if a slug is available for current user
186
+ */
187
+ async isSlugAvailable(slug) {
188
+ const existing = await this.getBySlug(slug);
189
+ return existing === null;
190
+ }
191
+ }
192
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/db/projects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @agent-foundry/studio
3
+ *
4
+ * Full SDK for Agent Foundry Build Studio.
5
+ * Provides types, Alibaba Cloud OSS upload utilities, and Supabase database client.
6
+ */
7
+ export * from './types';
8
+ export * from './oss';
9
+ export * from './db';
10
+ export * from './utils';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,cAAc,SAAS,CAAC;AAGxB,cAAc,OAAO,CAAC;AAGtB,cAAc,MAAM,CAAC;AAGrB,cAAc,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @agent-foundry/studio
3
+ *
4
+ * Full SDK for Agent Foundry Build Studio.
5
+ * Provides types, Alibaba Cloud OSS upload utilities, and Supabase database client.
6
+ */
7
+ // Re-export all types
8
+ export * from './types';
9
+ // Re-export OSS utilities
10
+ export * from './oss';
11
+ // Re-export database client
12
+ export * from './db';
13
+ // Re-export utilities
14
+ export * from './utils';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,sBAAsB;AACtB,cAAc,SAAS,CAAC;AAExB,0BAA0B;AAC1B,cAAc,OAAO,CAAC;AAEtB,4BAA4B;AAC5B,cAAc,MAAM,CAAC;AAErB,sBAAsB;AACtB,cAAc,SAAS,CAAC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Alibaba Cloud OSS Client
3
+ *
4
+ * Wrapper around ali-oss SDK for browser/WebView usage.
5
+ */
6
+ import type { OSSClientConfig, UploadFile } from './types';
7
+ /**
8
+ * Progress callback type
9
+ */
10
+ export type ProgressCallback = (percent: number, checkpoint?: unknown) => void;
11
+ /**
12
+ * AliOSSClient - wrapper for ali-oss SDK
13
+ *
14
+ * Provides simplified interface for uploading files to Alibaba Cloud OSS
15
+ * using STS credentials.
16
+ */
17
+ export declare class AliOSSClient {
18
+ private client;
19
+ private credentials;
20
+ constructor(config: OSSClientConfig);
21
+ /**
22
+ * Check if credentials are expired
23
+ */
24
+ isExpired(): boolean;
25
+ /**
26
+ * Upload a single file
27
+ *
28
+ * @param key - Object key (path in bucket)
29
+ * @param content - File content
30
+ * @param contentType - MIME type
31
+ * @param _onProgress - Progress callback (not supported for simple uploads)
32
+ */
33
+ uploadFile(key: string, content: Blob | ArrayBuffer | string, contentType?: string, _onProgress?: ProgressCallback): Promise<{
34
+ url: string;
35
+ etag: string;
36
+ }>;
37
+ /**
38
+ * Upload multiple files with progress tracking
39
+ *
40
+ * @param files - Array of files to upload
41
+ * @param keyPrefix - Prefix for all object keys
42
+ * @param onProgress - Progress callback for overall progress
43
+ */
44
+ uploadFiles(files: UploadFile[], keyPrefix: string, onProgress?: (uploadedCount: number, totalCount: number, currentFile: string) => void): Promise<{
45
+ url: string;
46
+ totalBytes: number;
47
+ }>;
48
+ /**
49
+ * Get public URL for an object
50
+ */
51
+ getPublicUrl(key: string): string;
52
+ /**
53
+ * Check if an object exists
54
+ */
55
+ exists(key: string): Promise<boolean>;
56
+ /**
57
+ * Delete an object
58
+ */
59
+ delete(key: string): Promise<void>;
60
+ /**
61
+ * List objects with prefix
62
+ */
63
+ list(prefix: string, maxKeys?: number): Promise<string[]>;
64
+ }
65
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/oss/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAkB,UAAU,EAAE,MAAM,SAAS,CAAC;AAE3E;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAE/E;;;;;GAKG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,WAAW,CAAiB;gBAExB,MAAM,EAAE,eAAe;IAenC;;OAEG;IACH,SAAS,IAAI,OAAO;IAOpB;;;;;;;OAOG;IACG,UAAU,CACd,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,IAAI,GAAG,WAAW,GAAG,MAAM,EACpC,WAAW,CAAC,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,gBAAgB,GAC7B,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IA4BzC;;;;;;OAMG;IACG,WAAW,CACf,KAAK,EAAE,UAAU,EAAE,EACnB,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,GACpF,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAuC/C;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IASjC;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS3C;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,SAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAQ7D"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Alibaba Cloud OSS Client
3
+ *
4
+ * Wrapper around ali-oss SDK for browser/WebView usage.
5
+ */
6
+ import OSS from 'ali-oss';
7
+ /**
8
+ * AliOSSClient - wrapper for ali-oss SDK
9
+ *
10
+ * Provides simplified interface for uploading files to Alibaba Cloud OSS
11
+ * using STS credentials.
12
+ */
13
+ export class AliOSSClient {
14
+ constructor(config) {
15
+ this.credentials = config.credentials;
16
+ this.client = new OSS({
17
+ region: config.region,
18
+ bucket: config.bucket,
19
+ accessKeyId: config.credentials.accessKeyId,
20
+ accessKeySecret: config.credentials.accessKeySecret,
21
+ stsToken: config.credentials.securityToken,
22
+ timeout: config.timeout ?? 60000,
23
+ // Enable for browser usage
24
+ secure: true,
25
+ });
26
+ }
27
+ /**
28
+ * Check if credentials are expired
29
+ */
30
+ isExpired() {
31
+ const expiration = new Date(this.credentials.expiration);
32
+ // Consider expired 5 minutes before actual expiration
33
+ const buffer = 5 * 60 * 1000;
34
+ return Date.now() > expiration.getTime() - buffer;
35
+ }
36
+ /**
37
+ * Upload a single file
38
+ *
39
+ * @param key - Object key (path in bucket)
40
+ * @param content - File content
41
+ * @param contentType - MIME type
42
+ * @param _onProgress - Progress callback (not supported for simple uploads)
43
+ */
44
+ async uploadFile(key, content, contentType, _onProgress) {
45
+ if (this.isExpired()) {
46
+ throw new Error('STS credentials have expired. Please refresh credentials.');
47
+ }
48
+ // Convert content to appropriate format
49
+ let body;
50
+ if (content instanceof ArrayBuffer) {
51
+ body = new Blob([content]);
52
+ }
53
+ else {
54
+ body = content;
55
+ }
56
+ const options = {
57
+ headers: contentType ? { 'Content-Type': contentType } : undefined,
58
+ };
59
+ // Note: Progress callback is not supported for simple put operations
60
+ // Only multipart uploads support progress tracking
61
+ const result = await this.client.put(key, body, options);
62
+ return {
63
+ url: result.url,
64
+ etag: result.res.headers['etag'],
65
+ };
66
+ }
67
+ /**
68
+ * Upload multiple files with progress tracking
69
+ *
70
+ * @param files - Array of files to upload
71
+ * @param keyPrefix - Prefix for all object keys
72
+ * @param onProgress - Progress callback for overall progress
73
+ */
74
+ async uploadFiles(files, keyPrefix, onProgress) {
75
+ if (this.isExpired()) {
76
+ throw new Error('STS credentials have expired. Please refresh credentials.');
77
+ }
78
+ let totalBytes = 0;
79
+ const totalCount = files.length;
80
+ for (let i = 0; i < files.length; i++) {
81
+ const file = files[i];
82
+ const key = `${keyPrefix}/${file.path}`.replace(/\/+/g, '/');
83
+ // Get content size
84
+ let size = 0;
85
+ if (file.content instanceof Blob) {
86
+ size = file.content.size;
87
+ }
88
+ else if (file.content instanceof ArrayBuffer) {
89
+ size = file.content.byteLength;
90
+ }
91
+ else if (typeof file.content === 'string') {
92
+ size = new Blob([file.content]).size;
93
+ }
94
+ await this.uploadFile(key, file.content, file.contentType);
95
+ totalBytes += size;
96
+ if (onProgress) {
97
+ onProgress(i + 1, totalCount, file.path);
98
+ }
99
+ }
100
+ // Return URL to index.html or root
101
+ const baseUrl = this.getPublicUrl(keyPrefix);
102
+ return {
103
+ url: baseUrl,
104
+ totalBytes,
105
+ };
106
+ }
107
+ /**
108
+ * Get public URL for an object
109
+ */
110
+ getPublicUrl(key) {
111
+ // Construct public URL based on bucket and region
112
+ const bucket = this.client.options.bucket;
113
+ const region = this.client.options.region;
114
+ // Standard OSS URL format
115
+ return `https://${bucket}.${region}.aliyuncs.com/${key}`;
116
+ }
117
+ /**
118
+ * Check if an object exists
119
+ */
120
+ async exists(key) {
121
+ try {
122
+ await this.client.head(key);
123
+ return true;
124
+ }
125
+ catch {
126
+ return false;
127
+ }
128
+ }
129
+ /**
130
+ * Delete an object
131
+ */
132
+ async delete(key) {
133
+ await this.client.delete(key);
134
+ }
135
+ /**
136
+ * List objects with prefix
137
+ */
138
+ async list(prefix, maxKeys = 100) {
139
+ const result = await this.client.list({
140
+ prefix,
141
+ 'max-keys': maxKeys,
142
+ }, {});
143
+ return (result.objects || []).map((obj) => obj.name);
144
+ }
145
+ }
146
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/oss/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * OSS module - Alibaba Cloud OSS upload utilities
3
+ */
4
+ export * from './types';
5
+ export { AliOSSClient } from './client';
6
+ export { DirectUploader, type DirectUploaderConfig } from './uploader';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/oss/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * OSS module - Alibaba Cloud OSS upload utilities
3
+ */
4
+ export * from './types';
5
+ export { AliOSSClient } from './client';
6
+ export { DirectUploader } from './uploader';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/oss/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,cAAc,EAA6B,MAAM,YAAY,CAAC"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * OSS-specific types for Alibaba Cloud integration
3
+ */
4
+ /**
5
+ * STS (Security Token Service) credentials for temporary access
6
+ */
7
+ export interface STSCredentials {
8
+ /** Temporary access key ID */
9
+ accessKeyId: string;
10
+ /** Temporary access key secret */
11
+ accessKeySecret: string;
12
+ /** Security token */
13
+ securityToken: string;
14
+ /** Token expiration timestamp (ISO string) */
15
+ expiration: string;
16
+ }
17
+ /**
18
+ * Response from BFF when requesting upload credentials
19
+ */
20
+ export interface UploadTokenResponse {
21
+ /** STS credentials for OSS access */
22
+ credentials: STSCredentials;
23
+ /** OSS bucket name */
24
+ bucket: string;
25
+ /** Region endpoint (e.g., "oss-cn-hangzhou.aliyuncs.com") */
26
+ region: string;
27
+ /** Object key prefix for this upload */
28
+ keyPrefix: string;
29
+ /** Deployment ID for tracking */
30
+ deploymentId: string;
31
+ }
32
+ /**
33
+ * File to upload
34
+ */
35
+ export interface UploadFile {
36
+ /** Relative path within the bundle (e.g., "index.html", "assets/main.js") */
37
+ path: string;
38
+ /** File content */
39
+ content: Blob | ArrayBuffer | string;
40
+ /** Content type (MIME type) */
41
+ contentType?: string;
42
+ }
43
+ /**
44
+ * Upload progress event
45
+ */
46
+ export interface UploadProgress {
47
+ /** Current file being uploaded */
48
+ currentFile: string;
49
+ /** Number of files uploaded so far */
50
+ uploadedCount: number;
51
+ /** Total number of files to upload */
52
+ totalCount: number;
53
+ /** Bytes uploaded for current file */
54
+ uploadedBytes: number;
55
+ /** Total bytes for current file */
56
+ totalBytes: number;
57
+ /** Overall progress percentage (0-100) */
58
+ percent: number;
59
+ /** Current stage */
60
+ stage: 'preparing' | 'uploading' | 'finalizing';
61
+ }
62
+ /**
63
+ * Upload result
64
+ */
65
+ export interface UploadResult {
66
+ /** Whether upload was successful */
67
+ success: boolean;
68
+ /** Deployment ID */
69
+ deploymentId: string;
70
+ /** Public URL of the deployed app */
71
+ url?: string;
72
+ /** OSS bucket */
73
+ bucket?: string;
74
+ /** OSS key prefix */
75
+ keyPrefix?: string;
76
+ /** Total bytes uploaded */
77
+ totalBytes: number;
78
+ /** Number of files uploaded */
79
+ fileCount: number;
80
+ /** Error message if failed */
81
+ error?: string;
82
+ }
83
+ /**
84
+ * OSS client configuration
85
+ */
86
+ export interface OSSClientConfig {
87
+ /** Region (e.g., "oss-cn-hangzhou") */
88
+ region: string;
89
+ /** Bucket name */
90
+ bucket: string;
91
+ /** STS credentials */
92
+ credentials: STSCredentials;
93
+ /** Request timeout in milliseconds */
94
+ timeout?: number;
95
+ }
96
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/oss/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;IAEpB,kCAAkC;IAClC,eAAe,EAAE,MAAM,CAAC;IAExB,qBAAqB;IACrB,aAAa,EAAE,MAAM,CAAC;IAEtB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,qCAAqC;IACrC,WAAW,EAAE,cAAc,CAAC;IAE5B,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IAEf,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IAEf,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAElB,iCAAiC;IACjC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IAEb,mBAAmB;IACnB,OAAO,EAAE,IAAI,GAAG,WAAW,GAAG,MAAM,CAAC;IAErC,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IAEpB,sCAAsC;IACtC,aAAa,EAAE,MAAM,CAAC;IAEtB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IAEnB,sCAAsC;IACtC,aAAa,EAAE,MAAM,CAAC;IAEtB,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IAEnB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAEhB,oBAAoB;IACpB,KAAK,EAAE,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IAEjB,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC;IAErB,qCAAqC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,iBAAiB;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IAEnB,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;IAElB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IAEf,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IAEf,sBAAsB;IACtB,WAAW,EAAE,cAAc,CAAC;IAE5B,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * OSS-specific types for Alibaba Cloud integration
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/oss/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Direct Uploader
3
+ *
4
+ * High-level interface for uploading build artifacts to OSS.
5
+ * Handles STS credential fetching, multipart upload, and progress tracking.
6
+ */
7
+ import type { UploadFile, UploadProgress, UploadResult } from './types';
8
+ /**
9
+ * Configuration for DirectUploader
10
+ */
11
+ export interface DirectUploaderConfig {
12
+ /** BFF base URL (e.g., "http://localhost:11001") */
13
+ bffBaseUrl: string;
14
+ /** Supabase JWT token for authentication */
15
+ authToken: string;
16
+ /** Request timeout in milliseconds */
17
+ timeout?: number;
18
+ }
19
+ /**
20
+ * Upload options
21
+ */
22
+ export interface UploadOptions {
23
+ /** Project ID */
24
+ projectId: string;
25
+ /** Files to upload */
26
+ files: UploadFile[];
27
+ /** Optional: specific version string */
28
+ version?: string;
29
+ /** Progress callback */
30
+ onProgress?: (progress: UploadProgress) => void;
31
+ }
32
+ /**
33
+ * DirectUploader - handles the complete upload flow
34
+ *
35
+ * 1. Requests STS credentials from BFF
36
+ * 2. Uploads files directly to OSS
37
+ * 3. Notifies BFF of completion
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * const uploader = new DirectUploader({
42
+ * bffBaseUrl: 'http://localhost:11001',
43
+ * authToken: 'eyJ...',
44
+ * });
45
+ *
46
+ * const result = await uploader.upload({
47
+ * projectId: 'project-uuid',
48
+ * files: [
49
+ * { path: 'index.html', content: indexHtml, contentType: 'text/html' },
50
+ * { path: 'assets/main.js', content: mainJs, contentType: 'application/javascript' },
51
+ * ],
52
+ * onProgress: (p) => console.log(`${p.percent}%`),
53
+ * });
54
+ * ```
55
+ */
56
+ export declare class DirectUploader {
57
+ private config;
58
+ constructor(config: DirectUploaderConfig);
59
+ /**
60
+ * Upload files to OSS
61
+ */
62
+ upload(options: UploadOptions): Promise<UploadResult>;
63
+ /**
64
+ * Request upload token from BFF
65
+ */
66
+ private getUploadToken;
67
+ /**
68
+ * Notify BFF that upload is complete
69
+ */
70
+ private completeUpload;
71
+ }
72
+ //# sourceMappingURL=uploader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploader.d.ts","sourceRoot":"","sources":["../../src/oss/uploader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,YAAY,EAEb,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IAEnB,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;IAElB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAElB,sBAAsB;IACtB,KAAK,EAAE,UAAU,EAAE,CAAC;IAEpB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,wBAAwB;IACxB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;CACjD;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAuB;gBAEzB,MAAM,EAAE,oBAAoB;IAIxC;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAsH3D;;OAEG;YACW,cAAc;IAqB5B;;OAEG;YACW,cAAc;CA4B7B"}