@symbo.ls/sdk 3.1.2 → 3.2.6

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 (187) hide show
  1. package/README.md +143 -2
  2. package/dist/cjs/config/environment.js +98 -30
  3. package/dist/cjs/index.js +144 -24
  4. package/dist/cjs/services/AdminService.js +351 -0
  5. package/dist/cjs/services/AuthService.js +738 -305
  6. package/dist/cjs/services/BaseService.js +158 -6
  7. package/dist/cjs/services/BranchService.js +484 -0
  8. package/dist/cjs/services/CollabService.js +743 -0
  9. package/dist/cjs/services/DnsService.js +340 -0
  10. package/dist/cjs/services/FeatureFlagService.js +175 -0
  11. package/dist/cjs/services/FileService.js +201 -0
  12. package/dist/cjs/services/IntegrationService.js +538 -0
  13. package/dist/cjs/services/MetricsService.js +62 -0
  14. package/dist/cjs/services/PaymentService.js +271 -0
  15. package/dist/cjs/services/PlanService.js +426 -0
  16. package/dist/cjs/services/ProjectService.js +1207 -0
  17. package/dist/cjs/services/PullRequestService.js +503 -0
  18. package/dist/cjs/services/ScreenshotService.js +304 -0
  19. package/dist/cjs/services/SubscriptionService.js +396 -0
  20. package/dist/cjs/services/TrackingService.js +661 -0
  21. package/dist/cjs/services/WaitlistService.js +148 -0
  22. package/dist/cjs/services/index.js +64 -16
  23. package/dist/cjs/state/RootStateManager.js +65 -0
  24. package/dist/cjs/state/rootEventBus.js +74 -0
  25. package/dist/cjs/utils/CollabClient.js +223 -0
  26. package/dist/cjs/utils/TokenManager.js +78 -30
  27. package/dist/cjs/utils/changePreprocessor.js +199 -0
  28. package/dist/cjs/utils/jsonDiff.js +145 -0
  29. package/dist/cjs/utils/ordering.js +309 -0
  30. package/dist/cjs/utils/services.js +301 -103
  31. package/dist/cjs/utils/validation.js +0 -3
  32. package/dist/esm/config/environment.js +98 -30
  33. package/dist/esm/index.js +49505 -8718
  34. package/dist/esm/services/AdminService.js +1132 -0
  35. package/dist/esm/services/AuthService.js +1493 -386
  36. package/dist/esm/services/BaseService.js +757 -6
  37. package/dist/esm/services/BranchService.js +1265 -0
  38. package/dist/esm/services/CollabService.js +26895 -0
  39. package/dist/esm/services/DnsService.js +1121 -0
  40. package/dist/esm/services/FeatureFlagService.js +956 -0
  41. package/dist/esm/services/FileService.js +982 -0
  42. package/dist/esm/services/IntegrationService.js +1319 -0
  43. package/dist/esm/services/MetricsService.js +843 -0
  44. package/dist/esm/services/PaymentService.js +1052 -0
  45. package/dist/esm/services/PlanService.js +1207 -0
  46. package/dist/esm/services/ProjectService.js +2526 -0
  47. package/dist/esm/services/PullRequestService.js +1284 -0
  48. package/dist/esm/services/ScreenshotService.js +1085 -0
  49. package/dist/esm/services/SubscriptionService.js +1177 -0
  50. package/dist/esm/services/TrackingService.js +18454 -0
  51. package/dist/esm/services/WaitlistService.js +929 -0
  52. package/dist/esm/services/index.js +49062 -8569
  53. package/dist/esm/state/RootStateManager.js +90 -0
  54. package/dist/esm/state/rootEventBus.js +56 -0
  55. package/dist/esm/utils/CollabClient.js +18889 -0
  56. package/dist/esm/utils/TokenManager.js +78 -30
  57. package/dist/esm/utils/changePreprocessor.js +542 -0
  58. package/dist/esm/utils/jsonDiff.js +7011 -0
  59. package/dist/esm/utils/ordering.js +291 -0
  60. package/dist/esm/utils/services.js +301 -103
  61. package/dist/esm/utils/validation.js +116 -50
  62. package/dist/node/config/environment.js +98 -30
  63. package/dist/node/index.js +175 -32
  64. package/dist/node/services/AdminService.js +332 -0
  65. package/dist/node/services/AuthService.js +742 -310
  66. package/dist/node/services/BaseService.js +148 -6
  67. package/dist/node/services/BranchService.js +465 -0
  68. package/dist/node/services/CollabService.js +724 -0
  69. package/dist/node/services/DnsService.js +321 -0
  70. package/dist/node/services/FeatureFlagService.js +156 -0
  71. package/dist/node/services/FileService.js +182 -0
  72. package/dist/node/services/IntegrationService.js +519 -0
  73. package/dist/node/services/MetricsService.js +43 -0
  74. package/dist/node/services/PaymentService.js +252 -0
  75. package/dist/node/services/PlanService.js +407 -0
  76. package/dist/node/services/ProjectService.js +1188 -0
  77. package/dist/node/services/PullRequestService.js +484 -0
  78. package/dist/node/services/ScreenshotService.js +285 -0
  79. package/dist/node/services/SubscriptionService.js +377 -0
  80. package/dist/node/services/TrackingService.js +632 -0
  81. package/dist/node/services/WaitlistService.js +129 -0
  82. package/dist/node/services/index.js +64 -16
  83. package/dist/node/state/RootStateManager.js +36 -0
  84. package/dist/node/state/rootEventBus.js +55 -0
  85. package/dist/node/utils/CollabClient.js +194 -0
  86. package/dist/node/utils/TokenManager.js +78 -30
  87. package/dist/node/utils/changePreprocessor.js +180 -0
  88. package/dist/node/utils/jsonDiff.js +116 -0
  89. package/dist/node/utils/ordering.js +290 -0
  90. package/dist/node/utils/services.js +301 -103
  91. package/dist/node/utils/validation.js +0 -3
  92. package/package.json +39 -21
  93. package/src/config/environment.js +99 -28
  94. package/src/index.js +181 -36
  95. package/src/services/AdminService.js +374 -0
  96. package/src/services/AuthService.js +874 -328
  97. package/src/services/BaseService.js +166 -6
  98. package/src/services/BranchService.js +536 -0
  99. package/src/services/CollabService.js +900 -0
  100. package/src/services/DnsService.js +366 -0
  101. package/src/services/FeatureFlagService.js +174 -0
  102. package/src/services/FileService.js +213 -0
  103. package/src/services/IntegrationService.js +548 -0
  104. package/src/services/MetricsService.js +40 -0
  105. package/src/services/PaymentService.js +287 -0
  106. package/src/services/PlanService.js +468 -0
  107. package/src/services/ProjectService.js +1366 -0
  108. package/src/services/PullRequestService.js +537 -0
  109. package/src/services/ScreenshotService.js +258 -0
  110. package/src/services/SubscriptionService.js +425 -0
  111. package/src/services/TrackingService.js +853 -0
  112. package/src/services/WaitlistService.js +130 -0
  113. package/src/services/index.js +80 -13
  114. package/src/services/tests/BranchService/createBranch.test.js +153 -0
  115. package/src/services/tests/BranchService/deleteBranch.test.js +173 -0
  116. package/src/services/tests/BranchService/getBranchChanges.test.js +146 -0
  117. package/src/services/tests/BranchService/listBranches.test.js +87 -0
  118. package/src/services/tests/BranchService/mergeBranch.test.js +210 -0
  119. package/src/services/tests/BranchService/publishVersion.test.js +183 -0
  120. package/src/services/tests/BranchService/renameBranch.test.js +240 -0
  121. package/src/services/tests/BranchService/resetBranch.test.js +152 -0
  122. package/src/services/tests/FeatureFlagService/adminFeatureFlags.test.js +67 -0
  123. package/src/services/tests/FeatureFlagService/getFeatureFlags.test.js +75 -0
  124. package/src/services/tests/FileService/createFileFormData.test.js +74 -0
  125. package/src/services/tests/FileService/getFileUrl.test.js +69 -0
  126. package/src/services/tests/FileService/updateProjectIcon.test.js +109 -0
  127. package/src/services/tests/FileService/uploadDocument.test.js +36 -0
  128. package/src/services/tests/FileService/uploadFile.test.js +78 -0
  129. package/src/services/tests/FileService/uploadFileWithValidation.test.js +114 -0
  130. package/src/services/tests/FileService/uploadImage.test.js +36 -0
  131. package/src/services/tests/FileService/uploadMultipleFiles.test.js +111 -0
  132. package/src/services/tests/FileService/validateFile.test.js +63 -0
  133. package/src/services/tests/PlanService/createPlan.test.js +104 -0
  134. package/src/services/tests/PlanService/createPlanWithValidation.test.js +523 -0
  135. package/src/services/tests/PlanService/deletePlan.test.js +92 -0
  136. package/src/services/tests/PlanService/getActivePlans.test.js +123 -0
  137. package/src/services/tests/PlanService/getAdminPlans.test.js +84 -0
  138. package/src/services/tests/PlanService/getPlan.test.js +50 -0
  139. package/src/services/tests/PlanService/getPlanByKey.test.js +109 -0
  140. package/src/services/tests/PlanService/getPlanWithValidation.test.js +85 -0
  141. package/src/services/tests/PlanService/getPlans.test.js +53 -0
  142. package/src/services/tests/PlanService/getPlansByPriceRange.test.js +109 -0
  143. package/src/services/tests/PlanService/getPlansWithValidation.test.js +48 -0
  144. package/src/services/tests/PlanService/initializePlans.test.js +75 -0
  145. package/src/services/tests/PlanService/updatePlan.test.js +111 -0
  146. package/src/services/tests/PlanService/updatePlanWithValidation.test.js +556 -0
  147. package/src/state/RootStateManager.js +76 -0
  148. package/src/state/rootEventBus.js +67 -0
  149. package/src/utils/CollabClient.js +248 -0
  150. package/src/utils/TokenManager.js +88 -33
  151. package/src/utils/changePreprocessor.js +239 -0
  152. package/src/utils/jsonDiff.js +144 -0
  153. package/src/utils/ordering.js +271 -0
  154. package/src/utils/services.js +326 -107
  155. package/src/utils/validation.js +0 -3
  156. package/dist/cjs/services/AIService.js +0 -155
  157. package/dist/cjs/services/BasedService.js +0 -1185
  158. package/dist/cjs/services/CoreService.js +0 -1751
  159. package/dist/cjs/services/SocketIOService.js +0 -307
  160. package/dist/cjs/services/SocketService.js +0 -161
  161. package/dist/cjs/services/SymstoryService.js +0 -571
  162. package/dist/cjs/utils/basedQuerys.js +0 -181
  163. package/dist/cjs/utils/symstoryClient.js +0 -259
  164. package/dist/esm/services/AIService.js +0 -185
  165. package/dist/esm/services/BasedService.js +0 -5278
  166. package/dist/esm/services/CoreService.js +0 -2264
  167. package/dist/esm/services/SocketIOService.js +0 -470
  168. package/dist/esm/services/SocketService.js +0 -191
  169. package/dist/esm/services/SymstoryService.js +0 -7041
  170. package/dist/esm/utils/basedQuerys.js +0 -163
  171. package/dist/esm/utils/symstoryClient.js +0 -370
  172. package/dist/node/services/AIService.js +0 -136
  173. package/dist/node/services/BasedService.js +0 -1156
  174. package/dist/node/services/CoreService.js +0 -1722
  175. package/dist/node/services/SocketIOService.js +0 -278
  176. package/dist/node/services/SocketService.js +0 -142
  177. package/dist/node/services/SymstoryService.js +0 -542
  178. package/dist/node/utils/basedQuerys.js +0 -162
  179. package/dist/node/utils/symstoryClient.js +0 -230
  180. package/src/services/AIService.js +0 -150
  181. package/src/services/BasedService.js +0 -1301
  182. package/src/services/CoreService.js +0 -1943
  183. package/src/services/SocketIOService.js +0 -334
  184. package/src/services/SocketService.js +0 -168
  185. package/src/services/SymstoryService.js +0 -649
  186. package/src/utils/basedQuerys.js +0 -164
  187. 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
+ }