@symbo.ls/sdk 3.2.3 → 3.2.7
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 +141 -0
- package/dist/cjs/config/environment.js +94 -10
- package/dist/cjs/index.js +152 -12
- package/dist/cjs/services/AdminService.js +351 -0
- package/dist/cjs/services/AuthService.js +738 -305
- package/dist/cjs/services/BaseService.js +158 -6
- package/dist/cjs/services/BranchService.js +484 -0
- package/dist/cjs/services/CollabService.js +439 -116
- package/dist/cjs/services/DnsService.js +340 -0
- package/dist/cjs/services/FeatureFlagService.js +175 -0
- package/dist/cjs/services/FileService.js +201 -0
- package/dist/cjs/services/IntegrationService.js +538 -0
- package/dist/cjs/services/MetricsService.js +62 -0
- package/dist/cjs/services/PaymentService.js +271 -0
- package/dist/cjs/services/PlanService.js +426 -0
- package/dist/cjs/services/ProjectService.js +1207 -0
- package/dist/cjs/services/PullRequestService.js +503 -0
- package/dist/cjs/services/ScreenshotService.js +304 -0
- package/dist/cjs/services/SubscriptionService.js +396 -0
- package/dist/cjs/services/TrackingService.js +661 -0
- package/dist/cjs/services/WaitlistService.js +148 -0
- package/dist/cjs/services/index.js +60 -4
- package/dist/cjs/state/RootStateManager.js +2 -23
- package/dist/cjs/state/rootEventBus.js +9 -0
- package/dist/cjs/utils/CollabClient.js +78 -12
- package/dist/cjs/utils/TokenManager.js +16 -3
- package/dist/cjs/utils/changePreprocessor.js +199 -0
- package/dist/cjs/utils/jsonDiff.js +46 -4
- package/dist/cjs/utils/ordering.js +309 -0
- package/dist/cjs/utils/services.js +285 -128
- package/dist/cjs/utils/validation.js +0 -3
- package/dist/esm/config/environment.js +94 -10
- package/dist/esm/index.js +47862 -18248
- package/dist/esm/services/AdminService.js +1132 -0
- package/dist/esm/services/AuthService.js +1493 -386
- package/dist/esm/services/BaseService.js +757 -6
- package/dist/esm/services/BranchService.js +1265 -0
- package/dist/esm/services/CollabService.js +24956 -16089
- package/dist/esm/services/DnsService.js +1121 -0
- package/dist/esm/services/FeatureFlagService.js +956 -0
- package/dist/esm/services/FileService.js +982 -0
- package/dist/esm/services/IntegrationService.js +1319 -0
- package/dist/esm/services/MetricsService.js +843 -0
- package/dist/esm/services/PaymentService.js +1052 -0
- package/dist/esm/services/PlanService.js +1207 -0
- package/dist/esm/services/ProjectService.js +2526 -0
- package/dist/esm/services/PullRequestService.js +1284 -0
- package/dist/esm/services/ScreenshotService.js +1085 -0
- package/dist/esm/services/SubscriptionService.js +1177 -0
- package/dist/esm/services/TrackingService.js +18454 -0
- package/dist/esm/services/WaitlistService.js +929 -0
- package/dist/esm/services/index.js +47373 -18027
- package/dist/esm/state/RootStateManager.js +11 -23
- package/dist/esm/state/rootEventBus.js +9 -0
- package/dist/esm/utils/CollabClient.js +17526 -16120
- package/dist/esm/utils/TokenManager.js +16 -3
- package/dist/esm/utils/changePreprocessor.js +542 -0
- package/dist/esm/utils/jsonDiff.js +958 -43
- package/dist/esm/utils/ordering.js +291 -0
- package/dist/esm/utils/services.js +285 -128
- package/dist/esm/utils/validation.js +116 -50
- package/dist/node/config/environment.js +94 -10
- package/dist/node/index.js +183 -16
- package/dist/node/services/AdminService.js +332 -0
- package/dist/node/services/AuthService.js +742 -310
- package/dist/node/services/BaseService.js +148 -6
- package/dist/node/services/BranchService.js +465 -0
- package/dist/node/services/CollabService.js +439 -116
- package/dist/node/services/DnsService.js +321 -0
- package/dist/node/services/FeatureFlagService.js +156 -0
- package/dist/node/services/FileService.js +182 -0
- package/dist/node/services/IntegrationService.js +519 -0
- package/dist/node/services/MetricsService.js +43 -0
- package/dist/node/services/PaymentService.js +252 -0
- package/dist/node/services/PlanService.js +407 -0
- package/dist/node/services/ProjectService.js +1188 -0
- package/dist/node/services/PullRequestService.js +484 -0
- package/dist/node/services/ScreenshotService.js +285 -0
- package/dist/node/services/SubscriptionService.js +377 -0
- package/dist/node/services/TrackingService.js +632 -0
- package/dist/node/services/WaitlistService.js +129 -0
- package/dist/node/services/index.js +60 -4
- package/dist/node/state/RootStateManager.js +2 -23
- package/dist/node/state/rootEventBus.js +9 -0
- package/dist/node/utils/CollabClient.js +77 -11
- package/dist/node/utils/TokenManager.js +16 -3
- package/dist/node/utils/changePreprocessor.js +180 -0
- package/dist/node/utils/jsonDiff.js +46 -4
- package/dist/node/utils/ordering.js +290 -0
- package/dist/node/utils/services.js +285 -128
- package/dist/node/utils/validation.js +0 -3
- package/package.json +30 -18
- package/src/config/environment.js +95 -10
- package/src/index.js +190 -23
- package/src/services/AdminService.js +374 -0
- package/src/services/AuthService.js +874 -328
- package/src/services/BaseService.js +166 -6
- package/src/services/BranchService.js +536 -0
- package/src/services/CollabService.js +557 -148
- package/src/services/DnsService.js +366 -0
- package/src/services/FeatureFlagService.js +174 -0
- package/src/services/FileService.js +213 -0
- package/src/services/IntegrationService.js +548 -0
- package/src/services/MetricsService.js +40 -0
- package/src/services/PaymentService.js +287 -0
- package/src/services/PlanService.js +468 -0
- package/src/services/ProjectService.js +1366 -0
- package/src/services/PullRequestService.js +537 -0
- package/src/services/ScreenshotService.js +258 -0
- package/src/services/SubscriptionService.js +425 -0
- package/src/services/TrackingService.js +853 -0
- package/src/services/WaitlistService.js +130 -0
- package/src/services/index.js +79 -5
- package/src/services/tests/BranchService/createBranch.test.js +153 -0
- package/src/services/tests/BranchService/deleteBranch.test.js +173 -0
- package/src/services/tests/BranchService/getBranchChanges.test.js +146 -0
- package/src/services/tests/BranchService/listBranches.test.js +87 -0
- package/src/services/tests/BranchService/mergeBranch.test.js +210 -0
- package/src/services/tests/BranchService/publishVersion.test.js +183 -0
- package/src/services/tests/BranchService/renameBranch.test.js +240 -0
- package/src/services/tests/BranchService/resetBranch.test.js +152 -0
- package/src/services/tests/FeatureFlagService/adminFeatureFlags.test.js +67 -0
- package/src/services/tests/FeatureFlagService/getFeatureFlags.test.js +75 -0
- package/src/services/tests/FileService/createFileFormData.test.js +74 -0
- package/src/services/tests/FileService/getFileUrl.test.js +69 -0
- package/src/services/tests/FileService/updateProjectIcon.test.js +109 -0
- package/src/services/tests/FileService/uploadDocument.test.js +36 -0
- package/src/services/tests/FileService/uploadFile.test.js +78 -0
- package/src/services/tests/FileService/uploadFileWithValidation.test.js +114 -0
- package/src/services/tests/FileService/uploadImage.test.js +36 -0
- package/src/services/tests/FileService/uploadMultipleFiles.test.js +111 -0
- package/src/services/tests/FileService/validateFile.test.js +63 -0
- package/src/services/tests/PlanService/createPlan.test.js +104 -0
- package/src/services/tests/PlanService/createPlanWithValidation.test.js +523 -0
- package/src/services/tests/PlanService/deletePlan.test.js +92 -0
- package/src/services/tests/PlanService/getActivePlans.test.js +123 -0
- package/src/services/tests/PlanService/getAdminPlans.test.js +84 -0
- package/src/services/tests/PlanService/getPlan.test.js +50 -0
- package/src/services/tests/PlanService/getPlanByKey.test.js +109 -0
- package/src/services/tests/PlanService/getPlanWithValidation.test.js +85 -0
- package/src/services/tests/PlanService/getPlans.test.js +53 -0
- package/src/services/tests/PlanService/getPlansByPriceRange.test.js +109 -0
- package/src/services/tests/PlanService/getPlansWithValidation.test.js +48 -0
- package/src/services/tests/PlanService/initializePlans.test.js +75 -0
- package/src/services/tests/PlanService/updatePlan.test.js +111 -0
- package/src/services/tests/PlanService/updatePlanWithValidation.test.js +556 -0
- package/src/state/RootStateManager.js +37 -32
- package/src/state/rootEventBus.js +19 -0
- package/src/utils/CollabClient.js +99 -12
- package/src/utils/TokenManager.js +20 -3
- package/src/utils/changePreprocessor.js +239 -0
- package/src/utils/jsonDiff.js +40 -5
- package/src/utils/ordering.js +271 -0
- package/src/utils/services.js +306 -139
- package/src/utils/validation.js +0 -3
- package/dist/cjs/services/AIService.js +0 -155
- package/dist/cjs/services/BasedService.js +0 -1185
- package/dist/cjs/services/CoreService.js +0 -2295
- package/dist/cjs/services/SocketService.js +0 -309
- package/dist/cjs/services/SymstoryService.js +0 -571
- package/dist/cjs/utils/basedQuerys.js +0 -181
- package/dist/cjs/utils/symstoryClient.js +0 -259
- package/dist/esm/services/AIService.js +0 -185
- package/dist/esm/services/BasedService.js +0 -5262
- package/dist/esm/services/CoreService.js +0 -2827
- package/dist/esm/services/SocketService.js +0 -456
- package/dist/esm/services/SymstoryService.js +0 -7025
- package/dist/esm/utils/basedQuerys.js +0 -163
- package/dist/esm/utils/symstoryClient.js +0 -354
- package/dist/node/services/AIService.js +0 -136
- package/dist/node/services/BasedService.js +0 -1156
- package/dist/node/services/CoreService.js +0 -2266
- package/dist/node/services/SocketService.js +0 -280
- package/dist/node/services/SymstoryService.js +0 -542
- package/dist/node/utils/basedQuerys.js +0 -162
- package/dist/node/utils/symstoryClient.js +0 -230
- package/src/services/AIService.js +0 -150
- package/src/services/BasedService.js +0 -1302
- package/src/services/CoreService.js +0 -2548
- package/src/services/SocketService.js +0 -336
- package/src/services/SymstoryService.js +0 -649
- package/src/utils/basedQuerys.js +0 -164
- package/src/utils/symstoryClient.js +0 -252
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { BaseService } from './BaseService.js'
|
|
2
|
+
|
|
3
|
+
export class FileService extends BaseService {
|
|
4
|
+
// ==================== FILE METHODS ====================
|
|
5
|
+
|
|
6
|
+
async uploadFile (file, options = {}) {
|
|
7
|
+
this._requireReady('uploadFile')
|
|
8
|
+
if (!file) {
|
|
9
|
+
throw new Error('File is required for upload')
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const formData = new FormData()
|
|
13
|
+
formData.append('file', file)
|
|
14
|
+
|
|
15
|
+
// Add optional parameters only if they exist
|
|
16
|
+
const hasProjectIdOption = Object.hasOwn(options, 'projectId')
|
|
17
|
+
const projectId = hasProjectIdOption ? options.projectId : this._context.project?.id
|
|
18
|
+
if (projectId != null && projectId !== '') {
|
|
19
|
+
formData.append('projectId', projectId)
|
|
20
|
+
}
|
|
21
|
+
if (options.tags) {
|
|
22
|
+
formData.append('tags', JSON.stringify(options.tags))
|
|
23
|
+
}
|
|
24
|
+
if (options.visibility) {
|
|
25
|
+
formData.append('visibility', options.visibility || 'public')
|
|
26
|
+
}
|
|
27
|
+
if (options.metadata) {
|
|
28
|
+
formData.append('metadata', JSON.stringify(options.metadata))
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
try {
|
|
32
|
+
const response = await this._request('/files/upload', {
|
|
33
|
+
method: 'POST',
|
|
34
|
+
body: formData,
|
|
35
|
+
headers: {}, // Let browser set Content-Type for FormData
|
|
36
|
+
methodName: 'uploadFile'
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
if (!response.success) {
|
|
40
|
+
throw new Error(response.message)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return response.data
|
|
44
|
+
} catch (error) {
|
|
45
|
+
throw new Error(`File upload failed: ${error.message}`, { cause: error })
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
async updateProjectIcon (projectId, iconFile) {
|
|
50
|
+
this._requireReady('updateProjectIcon')
|
|
51
|
+
if (!projectId || !iconFile) {
|
|
52
|
+
throw new Error('Project ID and icon file are required')
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const formData = new FormData()
|
|
56
|
+
formData.append('icon', iconFile)
|
|
57
|
+
formData.append('projectId', projectId)
|
|
58
|
+
|
|
59
|
+
try {
|
|
60
|
+
const response = await this._request('/files/upload-project-icon', {
|
|
61
|
+
method: 'POST',
|
|
62
|
+
body: formData,
|
|
63
|
+
headers: {}, // Let browser set Content-Type for FormData
|
|
64
|
+
methodName: 'updateProjectIcon'
|
|
65
|
+
})
|
|
66
|
+
if (response.success) {
|
|
67
|
+
return response.data
|
|
68
|
+
}
|
|
69
|
+
throw new Error(response.message)
|
|
70
|
+
} catch (error) {
|
|
71
|
+
throw new Error(`Failed to update project icon: ${error.message}`, { cause: error })
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// ==================== FILE HELPER METHODS ====================
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Helper method to upload file with validation
|
|
79
|
+
*/
|
|
80
|
+
async uploadFileWithValidation (file, options = {}) {
|
|
81
|
+
if (!file) {
|
|
82
|
+
throw new Error('File is required')
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Validate file size (optional)
|
|
86
|
+
const maxSize = options.maxSize || 10 * 1024 * 1024 // 10MB default
|
|
87
|
+
if (file.size > maxSize) {
|
|
88
|
+
throw new Error(`File size exceeds maximum allowed size of ${maxSize / (1024 * 1024)}MB`)
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Validate file type (optional)
|
|
92
|
+
const allowedTypes = options.allowedTypes || ['image/*', 'application/pdf', 'text/*']
|
|
93
|
+
if (allowedTypes.length > 0) {
|
|
94
|
+
const isValidType = allowedTypes.some(type => {
|
|
95
|
+
if (type.endsWith('/*')) {
|
|
96
|
+
return file.type.startsWith(type.replace('/*', ''))
|
|
97
|
+
}
|
|
98
|
+
return file.type === type
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
if (!isValidType) {
|
|
102
|
+
throw new Error(`File type '${file.type}' is not allowed. Allowed types: ${allowedTypes.join(', ')}`)
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return await this.uploadFile(file, options)
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Helper method to upload image file specifically
|
|
111
|
+
*/
|
|
112
|
+
async uploadImage (imageFile, options = {}) {
|
|
113
|
+
const imageOptions = {
|
|
114
|
+
...options,
|
|
115
|
+
allowedTypes: ['image/jpeg', 'image/png', 'image/gif', 'image/webp'],
|
|
116
|
+
maxSize: options.maxSize || 5 * 1024 * 1024 // 5MB for images
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return await this.uploadFileWithValidation(imageFile, imageOptions)
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Helper method to upload document file
|
|
124
|
+
*/
|
|
125
|
+
async uploadDocument (documentFile, options = {}) {
|
|
126
|
+
const documentOptions = {
|
|
127
|
+
...options,
|
|
128
|
+
allowedTypes: ['application/pdf', 'text/plain', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'],
|
|
129
|
+
maxSize: options.maxSize || 20 * 1024 * 1024 // 20MB for documents
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return await this.uploadFileWithValidation(documentFile, documentOptions)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Helper method to get file URL by ID
|
|
137
|
+
*/
|
|
138
|
+
getFileUrl (fileId) {
|
|
139
|
+
if (!fileId) {
|
|
140
|
+
throw new Error('File ID is required')
|
|
141
|
+
}
|
|
142
|
+
return `${this._apiUrl}/core/files/public/${fileId}/download`
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Helper method to validate file before upload
|
|
147
|
+
*/
|
|
148
|
+
validateFile (file, options = {}) {
|
|
149
|
+
const errors = []
|
|
150
|
+
|
|
151
|
+
if (!file) {
|
|
152
|
+
errors.push('File is required')
|
|
153
|
+
return errors
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// Check file size
|
|
157
|
+
const maxSize = options.maxSize || 10 * 1024 * 1024
|
|
158
|
+
if (file.size > maxSize) {
|
|
159
|
+
errors.push(`File size (${(file.size / (1024 * 1024)).toFixed(2)}MB) exceeds maximum allowed size of ${maxSize / (1024 * 1024)}MB`)
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// Check file type
|
|
163
|
+
const allowedTypes = options.allowedTypes || []
|
|
164
|
+
if (allowedTypes.length > 0) {
|
|
165
|
+
const isValidType = allowedTypes.some(type => {
|
|
166
|
+
if (type.endsWith('/*')) {
|
|
167
|
+
return file.type.startsWith(type.replace('/*', ''))
|
|
168
|
+
}
|
|
169
|
+
return file.type === type
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
if (!isValidType) {
|
|
173
|
+
errors.push(`File type '${file.type}' is not allowed. Allowed types: ${allowedTypes.join(', ')}`)
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return errors
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Helper method to create FormData with file and metadata
|
|
182
|
+
*/
|
|
183
|
+
createFileFormData (file, metadata = {}) {
|
|
184
|
+
const formData = new FormData()
|
|
185
|
+
formData.append('file', file)
|
|
186
|
+
|
|
187
|
+
// Add metadata as JSON string
|
|
188
|
+
if (Object.keys(metadata).length > 0) {
|
|
189
|
+
formData.append('metadata', JSON.stringify(metadata))
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
return formData
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Helper method to upload multiple files
|
|
197
|
+
*/
|
|
198
|
+
async uploadMultipleFiles (files, options = {}) {
|
|
199
|
+
if (!Array.isArray(files) || files.length === 0) {
|
|
200
|
+
throw new Error('Files array is required and must not be empty')
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
const uploadPromises = files.map(file => this.uploadFile(file, options))
|
|
204
|
+
const results = await Promise.allSettled(uploadPromises)
|
|
205
|
+
|
|
206
|
+
return results.map((result, index) => ({
|
|
207
|
+
file: files[index],
|
|
208
|
+
success: result.status === 'fulfilled',
|
|
209
|
+
data: result.status === 'fulfilled' ? result.value : null,
|
|
210
|
+
error: result.status === 'rejected' ? result.reason.message : null
|
|
211
|
+
}))
|
|
212
|
+
}
|
|
213
|
+
}
|