@symbo.ls/sdk 2.32.2 → 2.32.5

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 (90) hide show
  1. package/dist/cjs/config/environment.js +43 -8
  2. package/dist/cjs/index.js +12 -4
  3. package/dist/cjs/services/AdminService.js +4 -4
  4. package/dist/cjs/services/AuthService.js +36 -149
  5. package/dist/cjs/services/BaseService.js +5 -18
  6. package/dist/cjs/services/BranchService.js +10 -10
  7. package/dist/cjs/services/CollabService.js +94 -61
  8. package/dist/cjs/services/CoreService.js +19 -19
  9. package/dist/cjs/services/DnsService.js +4 -4
  10. package/dist/cjs/services/FileService.js +2 -2
  11. package/dist/cjs/services/PaymentService.js +2 -2
  12. package/dist/cjs/services/PlanService.js +12 -12
  13. package/dist/cjs/services/ProjectService.js +45 -35
  14. package/dist/cjs/services/PullRequestService.js +7 -7
  15. package/dist/cjs/services/ScreenshotService.js +304 -0
  16. package/dist/cjs/services/SubscriptionService.js +14 -14
  17. package/dist/cjs/services/index.js +4 -0
  18. package/dist/cjs/utils/TokenManager.js +16 -5
  19. package/dist/cjs/utils/changePreprocessor.js +134 -0
  20. package/dist/cjs/utils/jsonDiff.js +46 -4
  21. package/dist/cjs/utils/ordering.js +274 -0
  22. package/dist/cjs/utils/services.js +14 -1
  23. package/dist/esm/config/environment.js +43 -8
  24. package/dist/esm/index.js +1099 -417
  25. package/dist/esm/services/AdminService.js +68 -35
  26. package/dist/esm/services/AuthService.js +100 -168
  27. package/dist/esm/services/BaseService.js +64 -31
  28. package/dist/esm/services/BranchService.js +74 -41
  29. package/dist/esm/services/CollabService.js +570 -97
  30. package/dist/esm/services/CoreService.js +83 -50
  31. package/dist/esm/services/DnsService.js +68 -35
  32. package/dist/esm/services/FileService.js +66 -33
  33. package/dist/esm/services/PaymentService.js +66 -33
  34. package/dist/esm/services/PlanService.js +76 -43
  35. package/dist/esm/services/ProjectService.js +547 -66
  36. package/dist/esm/services/PullRequestService.js +71 -38
  37. package/dist/esm/services/ScreenshotService.js +992 -0
  38. package/dist/esm/services/SubscriptionService.js +78 -45
  39. package/dist/esm/services/index.js +1076 -412
  40. package/dist/esm/utils/CollabClient.js +89 -12
  41. package/dist/esm/utils/TokenManager.js +16 -5
  42. package/dist/esm/utils/changePreprocessor.js +442 -0
  43. package/dist/esm/utils/jsonDiff.js +46 -4
  44. package/dist/esm/utils/ordering.js +256 -0
  45. package/dist/esm/utils/services.js +14 -1
  46. package/dist/node/config/environment.js +43 -8
  47. package/dist/node/index.js +14 -5
  48. package/dist/node/services/AdminService.js +4 -4
  49. package/dist/node/services/AuthService.js +36 -139
  50. package/dist/node/services/BaseService.js +5 -18
  51. package/dist/node/services/BranchService.js +10 -10
  52. package/dist/node/services/CollabService.js +95 -62
  53. package/dist/node/services/CoreService.js +19 -19
  54. package/dist/node/services/DnsService.js +4 -4
  55. package/dist/node/services/FileService.js +2 -2
  56. package/dist/node/services/PaymentService.js +2 -2
  57. package/dist/node/services/PlanService.js +12 -12
  58. package/dist/node/services/ProjectService.js +45 -35
  59. package/dist/node/services/PullRequestService.js +7 -7
  60. package/dist/node/services/ScreenshotService.js +285 -0
  61. package/dist/node/services/SubscriptionService.js +14 -14
  62. package/dist/node/services/index.js +4 -0
  63. package/dist/node/utils/TokenManager.js +16 -5
  64. package/dist/node/utils/changePreprocessor.js +115 -0
  65. package/dist/node/utils/jsonDiff.js +46 -4
  66. package/dist/node/utils/ordering.js +255 -0
  67. package/dist/node/utils/services.js +14 -1
  68. package/package.json +7 -6
  69. package/src/config/environment.js +48 -9
  70. package/src/index.js +38 -22
  71. package/src/services/AdminService.js +4 -4
  72. package/src/services/AuthService.js +42 -175
  73. package/src/services/BaseService.js +7 -24
  74. package/src/services/BranchService.js +10 -10
  75. package/src/services/CollabService.js +115 -74
  76. package/src/services/CoreService.js +19 -19
  77. package/src/services/DnsService.js +4 -4
  78. package/src/services/FileService.js +2 -2
  79. package/src/services/PaymentService.js +2 -2
  80. package/src/services/PlanService.js +12 -12
  81. package/src/services/ProjectService.js +50 -35
  82. package/src/services/PullRequestService.js +7 -7
  83. package/src/services/ScreenshotService.js +258 -0
  84. package/src/services/SubscriptionService.js +14 -14
  85. package/src/services/index.js +6 -1
  86. package/src/utils/TokenManager.js +19 -5
  87. package/src/utils/changePreprocessor.js +139 -0
  88. package/src/utils/jsonDiff.js +40 -5
  89. package/src/utils/ordering.js +244 -0
  90. package/src/utils/services.js +15 -1
@@ -23,16 +23,26 @@ const CONFIG = {
23
23
  basedEnv: 'development', // For based api
24
24
  basedProject: 'platform-v2-sm', // For based api
25
25
  basedOrg: 'symbols', // For based api
26
- githubClientId: 'Ov23liHxyWFBxS8f1gnF', // For github api
26
+ githubClientId: 'Ov23liAFrsR0StbAO6PO', // For github api
27
27
  // Environment-specific feature toggles (override common)
28
28
  features: {
29
29
  betaFeatures: true // Enable beta features in local dev
30
- }
30
+ },
31
+ typesenseCollectionName: 'docs',
32
+ typesenseApiKey: 'vZya3L2zpq8L6iI5WWMUZJZABvT63VDb',
33
+ typesenseHost: 'localhost',
34
+ typesensePort: '8108',
35
+ typesenseProtocol: 'http'
31
36
  },
32
37
  development: {
33
38
  socketUrl: 'https://dev.api.symbols.app',
34
39
  apiUrl: 'https://dev.api.symbols.app',
35
- githubClientId: 'Ov23liHxyWFBxS8f1gnF'
40
+ githubClientId: 'Ov23liHxyWFBxS8f1gnF',
41
+ typesenseCollectionName: 'docs',
42
+ typesenseApiKey: 'awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA',
43
+ typesenseHost: 'tl2qpnwxev4cjm36p-1.a1.typesense.net',
44
+ typesensePort: '443',
45
+ typesenseProtocol: 'https'
36
46
  },
37
47
  testing: {
38
48
  socketUrl: 'https://test.api.symbols.app',
@@ -40,12 +50,22 @@ const CONFIG = {
40
50
  basedEnv: 'testing',
41
51
  basedProject: 'platform-v2-sm',
42
52
  basedOrg: 'symbols',
43
- githubClientId: 'Ov23liHxyWFBxS8f1gnF'
53
+ githubClientId: 'Ov23liHxyWFBxS8f1gnF',
54
+ typesenseCollectionName: 'docs',
55
+ typesenseApiKey: 'awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA',
56
+ typesenseHost: 'tl2qpnwxev4cjm36p-1.a1.typesense.net',
57
+ typesensePort: '443',
58
+ typesenseProtocol: 'https'
44
59
  },
45
60
  upcoming: {
46
61
  socketUrl: 'https://upcoming.api.symbols.app',
47
62
  apiUrl: 'https://upcoming.api.symbols.app',
48
- githubClientId: 'Ov23liWF7NvdZ056RV5J'
63
+ githubClientId: 'Ov23liWF7NvdZ056RV5J',
64
+ typesenseCollectionName: 'docs',
65
+ typesenseApiKey: 'awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA',
66
+ typesenseHost: 'tl2qpnwxev4cjm36p-1.a1.typesense.net',
67
+ typesensePort: '443',
68
+ typesenseProtocol: 'https'
49
69
  },
50
70
  staging: {
51
71
  socketUrl: 'https://staging.api.symbols.app',
@@ -53,7 +73,12 @@ const CONFIG = {
53
73
  basedEnv: 'staging',
54
74
  basedProject: 'platform-v2-sm',
55
75
  basedOrg: 'symbols',
56
- githubClientId: 'Ov23ligwZDQVD0VfuWNa'
76
+ githubClientId: 'Ov23ligwZDQVD0VfuWNa',
77
+ typesenseCollectionName: 'docs',
78
+ typesenseApiKey: 'awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA',
79
+ typesenseHost: 'tl2qpnwxev4cjm36p-1.a1.typesense.net',
80
+ typesensePort: '443',
81
+ typesenseProtocol: 'https'
57
82
  },
58
83
  production: {
59
84
  socketUrl: 'https://api.symbols.app',
@@ -61,7 +86,12 @@ const CONFIG = {
61
86
  basedEnv: 'production',
62
87
  basedProject: 'platform-v2-sm',
63
88
  basedOrg: 'symbols',
64
- githubClientId: 'Ov23liFAlOEIXtX3dBtR'
89
+ githubClientId: 'Ov23liFAlOEIXtX3dBtR',
90
+ typesenseCollectionName: 'docs',
91
+ typesenseApiKey: 'awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA',
92
+ typesenseHost: 'tl2qpnwxev4cjm36p-1.a1.typesense.net',
93
+ typesensePort: '443',
94
+ typesenseProtocol: 'https'
65
95
  }
66
96
  }
67
97
 
@@ -95,6 +125,15 @@ export const getConfig = () => {
95
125
  basedOrg: process.env.SYMBOLS_APP_BASED_ORG || envConfig.basedOrg,
96
126
  githubClientId:
97
127
  process.env.SYMBOLS_APP_GITHUB_CLIENT_ID || envConfig.githubClientId,
128
+ typesenseCollectionName:
129
+ process.env.TYPESENSE_COLLECTION_NAME ||
130
+ envConfig.typesenseCollectionName,
131
+ typesenseApiKey:
132
+ process.env.TYPESENSE_API_KEY || envConfig.typesenseApiKey,
133
+ typesenseHost: process.env.TYPESENSE_HOST || envConfig.typesenseHost,
134
+ typesensePort: process.env.TYPESENSE_PORT || envConfig.typesensePort,
135
+ typesenseProtocol:
136
+ process.env.TYPESENSE_PROTOCOL || envConfig.typesenseProtocol,
98
137
  isDevelopment: isDevelopment(env),
99
138
  isTesting: env === 'testing',
100
139
  isStaging: env === 'staging',
@@ -110,7 +149,7 @@ export const getConfig = () => {
110
149
  'googleClientId'
111
150
  ]
112
151
 
113
- const missingFields = requiredFields.filter(field => !finalConfig[field])
152
+ const missingFields = requiredFields.filter((field) => !finalConfig[field])
114
153
 
115
154
  if (missingFields.length > 0) {
116
155
  console.error(
@@ -119,7 +158,7 @@ export const getConfig = () => {
119
158
  }
120
159
 
121
160
  if (finalConfig.isDevelopment) {
122
- console.log(
161
+ console.warn(
123
162
  'environment in SDK:',
124
163
  env || process.env.NODE_ENV || process.env.NODE_ENV
125
164
  )
package/src/index.js CHANGED
@@ -10,24 +10,29 @@ import {
10
10
  createBranchService,
11
11
  createPullRequestService,
12
12
  createAdminService,
13
- createSubscriptionService
13
+ createSubscriptionService,
14
+ createScreenshotService
14
15
  } from './services/index.js'
15
16
 
16
17
  import { SERVICE_METHODS } from './utils/services.js'
17
18
  import environment from './config/environment.js'
19
+ import { rootBus } from './state/rootEventBus.js'
18
20
 
19
21
  export class SDK {
20
- constructor (options = {}) {
22
+ constructor(options = {}) {
21
23
  this._services = new Map()
22
24
  this._context = {}
23
25
  this._options = this._validateOptions(options)
24
26
 
27
+ // Expose root event bus on SDK instance
28
+ this.rootBus = rootBus
29
+
25
30
  // Create proxy methods for direct service access
26
31
  this._createServiceProxies()
27
32
  }
28
33
 
29
34
  // Initialize SDK with context
30
- async initialize (context = {}) {
35
+ async initialize(context = {}) {
31
36
  this._context = {
32
37
  ...this._context,
33
38
  ...context
@@ -120,6 +125,13 @@ export class SDK {
120
125
  context: this._context,
121
126
  options: this._options
122
127
  })
128
+ ),
129
+ this._initService(
130
+ 'screenshot',
131
+ createScreenshotService({
132
+ context: this._context,
133
+ options: this._options
134
+ })
123
135
  )
124
136
  ])
125
137
 
@@ -127,7 +139,7 @@ export class SDK {
127
139
  }
128
140
 
129
141
  // Private helper to initialize a service
130
- async _initService (name, service) {
142
+ async _initService(name, service) {
131
143
  // Add service reference to context for inter-service communication
132
144
  this._context.services = {
133
145
  ...this._context.services,
@@ -143,7 +155,7 @@ export class SDK {
143
155
  this._services.set(name, service)
144
156
  }
145
157
 
146
- _validateOptions (options) {
158
+ _validateOptions(options) {
147
159
  const defaults = {
148
160
  useNewServices: true, // Use new service implementations by default
149
161
  apiUrl: environment.apiUrl,
@@ -157,7 +169,7 @@ export class SDK {
157
169
  }
158
170
 
159
171
  // Get service instance
160
- getService (name) {
172
+ getService(name) {
161
173
  if (!this._services.has(name)) {
162
174
  throw new Error(`Service '${name}' not found`)
163
175
  }
@@ -165,10 +177,13 @@ export class SDK {
165
177
  }
166
178
 
167
179
  // Update context
168
- updateContext (newContext) {
180
+ updateContext(newContext) {
181
+ // Do not persist authToken in SDK context; TokenManager is the source of truth
182
+ const { authToken, ...sanitized } = newContext || {}
183
+
169
184
  this._context = {
170
185
  ...this._context,
171
- ...newContext
186
+ ...sanitized
172
187
  }
173
188
 
174
189
  // Update context for all services
@@ -178,15 +193,16 @@ export class SDK {
178
193
  }
179
194
 
180
195
  // Check if SDK is ready
181
- isReady () {
196
+ isReady() {
182
197
  const sdkServices = Array.from(this._services.values())
183
- return sdkServices.length > 0 && sdkServices.every(service =>
184
- service.isReady()
198
+ return (
199
+ sdkServices.length > 0 &&
200
+ sdkServices.every((service) => service.isReady())
185
201
  )
186
202
  }
187
203
 
188
204
  // Get SDK status
189
- getStatus () {
205
+ getStatus() {
190
206
  return {
191
207
  ready: this.isReady(),
192
208
  services: Array.from(this._services.entries()).map(([name, service]) => ({
@@ -198,7 +214,7 @@ export class SDK {
198
214
  }
199
215
 
200
216
  // Create proxy methods for direct service access
201
- _createServiceProxies () {
217
+ _createServiceProxies() {
202
218
  for (const [methodName, serviceName] of Object.entries(SERVICE_METHODS)) {
203
219
  // Skip if method already exists on SDK
204
220
  if (!this[methodName]) {
@@ -226,20 +242,20 @@ export class SDK {
226
242
  const destroyPromises = Array.from(this._services.entries())
227
243
  .filter(([, service]) => typeof service.destroy === 'function')
228
244
  .map(async ([name, service]) => {
229
- await service.destroy();
230
- console.log(`Service ${name} destroyed successfully`);
231
- });
245
+ await service.destroy()
246
+ console.log(`Service ${name} destroyed successfully`)
247
+ })
232
248
 
233
- await Promise.all(destroyPromises);
249
+ await Promise.all(destroyPromises)
234
250
 
235
251
  // Clear services and reset state
236
- this._services.clear();
237
- this._context = {};
252
+ this._services.clear()
253
+ this._context = {}
238
254
 
239
- return true;
255
+ return true
240
256
  } catch (error) {
241
- console.error('Error during SDK destruction:', error);
242
- throw error;
257
+ console.error('Error during SDK destruction:', error)
258
+ throw error
243
259
  }
244
260
  }
245
261
  }
@@ -59,7 +59,7 @@ export class AdminService extends BaseService {
59
59
  }
60
60
  throw new Error(response.message)
61
61
  } catch (error) {
62
- throw new Error(`Failed to get admin users: ${error.message}`)
62
+ throw new Error(`Failed to get admin users: ${error.message}`, { cause: error })
63
63
  }
64
64
  }
65
65
 
@@ -97,7 +97,7 @@ export class AdminService extends BaseService {
97
97
  }
98
98
  throw new Error(response.message)
99
99
  } catch (error) {
100
- throw new Error(`Failed to assign projects to user: ${error.message}`)
100
+ throw new Error(`Failed to assign projects to user: ${error.message}`, { cause: error })
101
101
  }
102
102
  }
103
103
 
@@ -132,7 +132,7 @@ export class AdminService extends BaseService {
132
132
  if (error.message?.includes('Duplicate')) {
133
133
  throw new Error('Username already exists')
134
134
  }
135
- throw new Error(`Failed to update user: ${error.message}`)
135
+ throw new Error(`Failed to update user: ${error.message}`, { cause: error })
136
136
  }
137
137
  }
138
138
 
@@ -274,7 +274,7 @@ export class AdminService extends BaseService {
274
274
 
275
275
  return stats
276
276
  } catch (error) {
277
- throw new Error(`Failed to get user stats: ${error.message}`)
277
+ throw new Error(`Failed to get user stats: ${error.message}`, { cause: error })
278
278
  }
279
279
  }
280
280