@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.
Files changed (183) hide show
  1. package/README.md +141 -0
  2. package/dist/cjs/config/environment.js +94 -10
  3. package/dist/cjs/index.js +152 -12
  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 +439 -116
  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 +60 -4
  23. package/dist/cjs/state/RootStateManager.js +2 -23
  24. package/dist/cjs/state/rootEventBus.js +9 -0
  25. package/dist/cjs/utils/CollabClient.js +78 -12
  26. package/dist/cjs/utils/TokenManager.js +16 -3
  27. package/dist/cjs/utils/changePreprocessor.js +199 -0
  28. package/dist/cjs/utils/jsonDiff.js +46 -4
  29. package/dist/cjs/utils/ordering.js +309 -0
  30. package/dist/cjs/utils/services.js +285 -128
  31. package/dist/cjs/utils/validation.js +0 -3
  32. package/dist/esm/config/environment.js +94 -10
  33. package/dist/esm/index.js +47862 -18248
  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 +24956 -16089
  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 +47373 -18027
  53. package/dist/esm/state/RootStateManager.js +11 -23
  54. package/dist/esm/state/rootEventBus.js +9 -0
  55. package/dist/esm/utils/CollabClient.js +17526 -16120
  56. package/dist/esm/utils/TokenManager.js +16 -3
  57. package/dist/esm/utils/changePreprocessor.js +542 -0
  58. package/dist/esm/utils/jsonDiff.js +958 -43
  59. package/dist/esm/utils/ordering.js +291 -0
  60. package/dist/esm/utils/services.js +285 -128
  61. package/dist/esm/utils/validation.js +116 -50
  62. package/dist/node/config/environment.js +94 -10
  63. package/dist/node/index.js +183 -16
  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 +439 -116
  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 +60 -4
  83. package/dist/node/state/RootStateManager.js +2 -23
  84. package/dist/node/state/rootEventBus.js +9 -0
  85. package/dist/node/utils/CollabClient.js +77 -11
  86. package/dist/node/utils/TokenManager.js +16 -3
  87. package/dist/node/utils/changePreprocessor.js +180 -0
  88. package/dist/node/utils/jsonDiff.js +46 -4
  89. package/dist/node/utils/ordering.js +290 -0
  90. package/dist/node/utils/services.js +285 -128
  91. package/dist/node/utils/validation.js +0 -3
  92. package/package.json +30 -18
  93. package/src/config/environment.js +95 -10
  94. package/src/index.js +190 -23
  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 +557 -148
  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 +79 -5
  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 +37 -32
  148. package/src/state/rootEventBus.js +19 -0
  149. package/src/utils/CollabClient.js +99 -12
  150. package/src/utils/TokenManager.js +20 -3
  151. package/src/utils/changePreprocessor.js +239 -0
  152. package/src/utils/jsonDiff.js +40 -5
  153. package/src/utils/ordering.js +271 -0
  154. package/src/utils/services.js +306 -139
  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 -2295
  159. package/dist/cjs/services/SocketService.js +0 -309
  160. package/dist/cjs/services/SymstoryService.js +0 -571
  161. package/dist/cjs/utils/basedQuerys.js +0 -181
  162. package/dist/cjs/utils/symstoryClient.js +0 -259
  163. package/dist/esm/services/AIService.js +0 -185
  164. package/dist/esm/services/BasedService.js +0 -5262
  165. package/dist/esm/services/CoreService.js +0 -2827
  166. package/dist/esm/services/SocketService.js +0 -456
  167. package/dist/esm/services/SymstoryService.js +0 -7025
  168. package/dist/esm/utils/basedQuerys.js +0 -163
  169. package/dist/esm/utils/symstoryClient.js +0 -354
  170. package/dist/node/services/AIService.js +0 -136
  171. package/dist/node/services/BasedService.js +0 -1156
  172. package/dist/node/services/CoreService.js +0 -2266
  173. package/dist/node/services/SocketService.js +0 -280
  174. package/dist/node/services/SymstoryService.js +0 -542
  175. package/dist/node/utils/basedQuerys.js +0 -162
  176. package/dist/node/utils/symstoryClient.js +0 -230
  177. package/src/services/AIService.js +0 -150
  178. package/src/services/BasedService.js +0 -1302
  179. package/src/services/CoreService.js +0 -2548
  180. package/src/services/SocketService.js +0 -336
  181. package/src/services/SymstoryService.js +0 -649
  182. package/src/utils/basedQuerys.js +0 -164
  183. 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
+ }