@symbo.ls/sdk 2.34.35 → 3.1.1

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 +13 -315
  2. package/dist/cjs/config/environment.js +50 -124
  3. package/dist/cjs/index.js +22 -169
  4. package/dist/cjs/services/AIService.js +155 -0
  5. package/dist/cjs/services/AuthService.js +277 -751
  6. package/dist/cjs/services/BaseService.js +6 -158
  7. package/dist/cjs/services/BasedService.js +679 -0
  8. package/dist/cjs/services/SocketIOService.js +309 -0
  9. package/dist/cjs/services/SocketService.js +161 -0
  10. package/dist/cjs/services/SymstoryService.js +485 -0
  11. package/dist/cjs/services/index.js +16 -64
  12. package/dist/cjs/utils/basedQuerys.js +61 -0
  13. package/dist/cjs/utils/permission.js +4 -4
  14. package/dist/cjs/utils/services.js +80 -301
  15. package/dist/cjs/utils/symstoryClient.js +228 -0
  16. package/dist/cjs/utils/validation.js +3 -0
  17. package/dist/esm/config/environment.js +50 -124
  18. package/dist/esm/index.js +11282 -49789
  19. package/dist/esm/services/AIService.js +185 -0
  20. package/dist/esm/services/AuthService.js +358 -1506
  21. package/dist/esm/services/BaseService.js +6 -757
  22. package/dist/esm/services/BasedService.js +4651 -0
  23. package/dist/esm/services/SocketIOService.js +467 -0
  24. package/dist/esm/services/SocketService.js +191 -0
  25. package/dist/esm/services/SymstoryService.js +6849 -0
  26. package/dist/esm/services/index.js +11188 -49352
  27. package/dist/esm/utils/basedQuerys.js +43 -0
  28. package/dist/esm/utils/permission.js +4 -4
  29. package/dist/esm/utils/services.js +80 -301
  30. package/dist/esm/utils/symstoryClient.js +334 -0
  31. package/dist/esm/utils/validation.js +26 -93
  32. package/dist/node/config/environment.js +50 -124
  33. package/dist/node/index.js +26 -202
  34. package/dist/node/services/AIService.js +136 -0
  35. package/dist/node/services/AuthService.js +278 -751
  36. package/dist/node/services/BaseService.js +6 -148
  37. package/dist/node/services/BasedService.js +650 -0
  38. package/dist/node/services/SocketIOService.js +280 -0
  39. package/dist/node/services/SocketService.js +142 -0
  40. package/dist/node/services/SymstoryService.js +456 -0
  41. package/dist/node/services/index.js +16 -64
  42. package/dist/node/utils/basedQuerys.js +42 -0
  43. package/dist/node/utils/permission.js +4 -4
  44. package/dist/node/utils/services.js +80 -301
  45. package/dist/node/utils/symstoryClient.js +199 -0
  46. package/dist/node/utils/validation.js +3 -0
  47. package/package.json +21 -43
  48. package/src/config/environment.js +50 -126
  49. package/src/index.js +24 -208
  50. package/src/services/AIService.js +150 -0
  51. package/src/services/AuthService.js +298 -893
  52. package/src/services/BaseService.js +6 -166
  53. package/src/services/BasedService.js +722 -0
  54. package/src/services/SocketIOService.js +356 -0
  55. package/src/services/SocketService.js +168 -0
  56. package/src/services/SymstoryService.js +563 -0
  57. package/src/services/index.js +13 -80
  58. package/src/utils/basedQuerys.js +41 -0
  59. package/src/utils/permission.js +4 -4
  60. package/src/utils/services.js +83 -325
  61. package/src/utils/symstoryClient.js +218 -0
  62. package/src/utils/validation.js +3 -0
  63. package/dist/cjs/services/AdminService.js +0 -351
  64. package/dist/cjs/services/BranchService.js +0 -484
  65. package/dist/cjs/services/CollabService.js +0 -743
  66. package/dist/cjs/services/DnsService.js +0 -340
  67. package/dist/cjs/services/FeatureFlagService.js +0 -175
  68. package/dist/cjs/services/FileService.js +0 -201
  69. package/dist/cjs/services/IntegrationService.js +0 -538
  70. package/dist/cjs/services/MetricsService.js +0 -62
  71. package/dist/cjs/services/PaymentService.js +0 -271
  72. package/dist/cjs/services/PlanService.js +0 -426
  73. package/dist/cjs/services/ProjectService.js +0 -1207
  74. package/dist/cjs/services/PullRequestService.js +0 -503
  75. package/dist/cjs/services/ScreenshotService.js +0 -304
  76. package/dist/cjs/services/SubscriptionService.js +0 -396
  77. package/dist/cjs/services/TrackingService.js +0 -661
  78. package/dist/cjs/services/WaitlistService.js +0 -148
  79. package/dist/cjs/state/RootStateManager.js +0 -65
  80. package/dist/cjs/state/rootEventBus.js +0 -74
  81. package/dist/cjs/utils/CollabClient.js +0 -223
  82. package/dist/cjs/utils/TokenManager.js +0 -422
  83. package/dist/cjs/utils/changePreprocessor.js +0 -199
  84. package/dist/cjs/utils/jsonDiff.js +0 -145
  85. package/dist/cjs/utils/ordering.js +0 -309
  86. package/dist/esm/services/AdminService.js +0 -1132
  87. package/dist/esm/services/BranchService.js +0 -1265
  88. package/dist/esm/services/CollabService.js +0 -26838
  89. package/dist/esm/services/DnsService.js +0 -1121
  90. package/dist/esm/services/FeatureFlagService.js +0 -956
  91. package/dist/esm/services/FileService.js +0 -982
  92. package/dist/esm/services/IntegrationService.js +0 -1319
  93. package/dist/esm/services/MetricsService.js +0 -843
  94. package/dist/esm/services/PaymentService.js +0 -1052
  95. package/dist/esm/services/PlanService.js +0 -1207
  96. package/dist/esm/services/ProjectService.js +0 -2526
  97. package/dist/esm/services/PullRequestService.js +0 -1284
  98. package/dist/esm/services/ScreenshotService.js +0 -1085
  99. package/dist/esm/services/SubscriptionService.js +0 -1177
  100. package/dist/esm/services/TrackingService.js +0 -18343
  101. package/dist/esm/services/WaitlistService.js +0 -929
  102. package/dist/esm/state/RootStateManager.js +0 -90
  103. package/dist/esm/state/rootEventBus.js +0 -56
  104. package/dist/esm/utils/CollabClient.js +0 -18901
  105. package/dist/esm/utils/TokenManager.js +0 -408
  106. package/dist/esm/utils/changePreprocessor.js +0 -542
  107. package/dist/esm/utils/jsonDiff.js +0 -7011
  108. package/dist/esm/utils/ordering.js +0 -291
  109. package/dist/node/services/AdminService.js +0 -332
  110. package/dist/node/services/BranchService.js +0 -465
  111. package/dist/node/services/CollabService.js +0 -724
  112. package/dist/node/services/DnsService.js +0 -321
  113. package/dist/node/services/FeatureFlagService.js +0 -156
  114. package/dist/node/services/FileService.js +0 -182
  115. package/dist/node/services/IntegrationService.js +0 -519
  116. package/dist/node/services/MetricsService.js +0 -43
  117. package/dist/node/services/PaymentService.js +0 -252
  118. package/dist/node/services/PlanService.js +0 -407
  119. package/dist/node/services/ProjectService.js +0 -1188
  120. package/dist/node/services/PullRequestService.js +0 -484
  121. package/dist/node/services/ScreenshotService.js +0 -285
  122. package/dist/node/services/SubscriptionService.js +0 -377
  123. package/dist/node/services/TrackingService.js +0 -632
  124. package/dist/node/services/WaitlistService.js +0 -129
  125. package/dist/node/state/RootStateManager.js +0 -36
  126. package/dist/node/state/rootEventBus.js +0 -55
  127. package/dist/node/utils/CollabClient.js +0 -194
  128. package/dist/node/utils/TokenManager.js +0 -403
  129. package/dist/node/utils/changePreprocessor.js +0 -180
  130. package/dist/node/utils/jsonDiff.js +0 -116
  131. package/dist/node/utils/ordering.js +0 -290
  132. package/src/services/AdminService.js +0 -374
  133. package/src/services/BranchService.js +0 -536
  134. package/src/services/CollabService.js +0 -900
  135. package/src/services/DnsService.js +0 -366
  136. package/src/services/FeatureFlagService.js +0 -174
  137. package/src/services/FileService.js +0 -213
  138. package/src/services/IntegrationService.js +0 -548
  139. package/src/services/MetricsService.js +0 -40
  140. package/src/services/PaymentService.js +0 -287
  141. package/src/services/PlanService.js +0 -468
  142. package/src/services/ProjectService.js +0 -1366
  143. package/src/services/PullRequestService.js +0 -537
  144. package/src/services/ScreenshotService.js +0 -258
  145. package/src/services/SubscriptionService.js +0 -425
  146. package/src/services/TrackingService.js +0 -853
  147. package/src/services/WaitlistService.js +0 -130
  148. package/src/services/tests/BranchService/createBranch.test.js +0 -153
  149. package/src/services/tests/BranchService/deleteBranch.test.js +0 -173
  150. package/src/services/tests/BranchService/getBranchChanges.test.js +0 -146
  151. package/src/services/tests/BranchService/listBranches.test.js +0 -87
  152. package/src/services/tests/BranchService/mergeBranch.test.js +0 -210
  153. package/src/services/tests/BranchService/publishVersion.test.js +0 -183
  154. package/src/services/tests/BranchService/renameBranch.test.js +0 -240
  155. package/src/services/tests/BranchService/resetBranch.test.js +0 -152
  156. package/src/services/tests/FeatureFlagService/adminFeatureFlags.test.js +0 -67
  157. package/src/services/tests/FeatureFlagService/getFeatureFlags.test.js +0 -75
  158. package/src/services/tests/FileService/createFileFormData.test.js +0 -74
  159. package/src/services/tests/FileService/getFileUrl.test.js +0 -69
  160. package/src/services/tests/FileService/updateProjectIcon.test.js +0 -109
  161. package/src/services/tests/FileService/uploadDocument.test.js +0 -36
  162. package/src/services/tests/FileService/uploadFile.test.js +0 -78
  163. package/src/services/tests/FileService/uploadFileWithValidation.test.js +0 -114
  164. package/src/services/tests/FileService/uploadImage.test.js +0 -36
  165. package/src/services/tests/FileService/uploadMultipleFiles.test.js +0 -111
  166. package/src/services/tests/FileService/validateFile.test.js +0 -63
  167. package/src/services/tests/PlanService/createPlan.test.js +0 -104
  168. package/src/services/tests/PlanService/createPlanWithValidation.test.js +0 -523
  169. package/src/services/tests/PlanService/deletePlan.test.js +0 -92
  170. package/src/services/tests/PlanService/getActivePlans.test.js +0 -123
  171. package/src/services/tests/PlanService/getAdminPlans.test.js +0 -84
  172. package/src/services/tests/PlanService/getPlan.test.js +0 -50
  173. package/src/services/tests/PlanService/getPlanByKey.test.js +0 -109
  174. package/src/services/tests/PlanService/getPlanWithValidation.test.js +0 -85
  175. package/src/services/tests/PlanService/getPlans.test.js +0 -53
  176. package/src/services/tests/PlanService/getPlansByPriceRange.test.js +0 -109
  177. package/src/services/tests/PlanService/getPlansWithValidation.test.js +0 -48
  178. package/src/services/tests/PlanService/initializePlans.test.js +0 -75
  179. package/src/services/tests/PlanService/updatePlan.test.js +0 -111
  180. package/src/services/tests/PlanService/updatePlanWithValidation.test.js +0 -556
  181. package/src/state/RootStateManager.js +0 -76
  182. package/src/state/rootEventBus.js +0 -67
  183. package/src/utils/CollabClient.js +0 -248
  184. package/src/utils/TokenManager.js +0 -479
  185. package/src/utils/changePreprocessor.js +0 -239
  186. package/src/utils/jsonDiff.js +0 -144
  187. package/src/utils/ordering.js +0 -271
package/README.md CHANGED
@@ -12,8 +12,8 @@ import { SDK } from '@symbo.ls/sdk'
12
12
 
13
13
  const sdk = new SDK({
14
14
  useNewServices: true, // Use new service implementations
15
- apiUrl: 'https://api.symbols.app',
16
- socketUrl: 'https://api.symbols.app',
15
+ baseUrl: 'https://api.symbols.app',
16
+ socketUrl: 'https://socket.symbols.app',
17
17
  timeout: 30000,
18
18
  retryAttempts: 3,
19
19
  debug: false
@@ -377,147 +377,6 @@ const ai = sdk.getService('ai')
377
377
  const response = await ai.prompt(query, options)
378
378
  ```
379
379
 
380
- ### Tracking Service (Grafana Faro)
381
- ```javascript
382
- // 1) Initialize SDK with tracking config (early in app startup)
383
- const sdk = new SDK({
384
- useNewServices: true,
385
- apiUrl: 'https://api.symbols.app',
386
- // Tracking configuration mirrors TrackingService options
387
- tracking: {
388
- url: 'https://<your-faro-receiver-url>', // FO ingest/collector URL
389
- appName: 'Symbols Platform',
390
- environment: 'development', // 'production' | 'staging' | 'testing' | 'development'
391
- appVersion: '1.0.0',
392
- sessionTracking: true,
393
- enableTracing: true, // adds browser tracing when available
394
- globalAttributes: { region: 'us-east-1' }
395
- }
396
- })
397
- await sdk.initialize()
398
-
399
- // 2) Get the tracking service
400
- const tracking = sdk.getService('tracking')
401
-
402
- // 3) Send signals
403
- tracking.trackEvent('purchase', { amount: 42, currency: 'USD' })
404
- tracking.trackMeasurement('cart_value', { value: 42 })
405
- tracking.logError('checkout failed', { step: 'payment' })
406
- tracking.trackView('Checkout', { stage: 'payment' })
407
- tracking.setUser({ id: 'u_123', email: 'user@example.com' })
408
- ```
409
-
410
- #### Configuration
411
- Provide these under `tracking` when creating the `SDK` (or later via `tracking.configureTracking()`):
412
-
413
- - `url` string: Frontend Observability/Faro ingestion URL. If omitted and no custom transports are provided, tracking is disabled.
414
- - `appName` string: Logical application name used in Grafana dashboards.
415
- - `appVersion` string: App version shown in Grafana.
416
- - `environment` string: One of your environments; default resolves from runtime (`production`, `staging`, `testing`, `development`).
417
- - `sessionTracking` boolean: Enable Faro session tracking. Default: `true`.
418
- - `enableTracing` boolean: Enable web tracing and send to Tempo (if collector configured). Default: `true`.
419
- - `globalAttributes` object: Key/values merged into every signal.
420
- - `user` object: Initial user attributes.
421
- - `maxQueueSize` number: Max queued calls before client setup. Default: `100`.
422
- - `isolate` boolean: Create an isolated Faro instance.
423
- - `transports` array | `transport` any: Custom transports (advanced).
424
- - `instrumentations` array | `instrumentationsFactory(runtime) => Promise<array>` | `webInstrumentationOptions` object: Control Faro web instrumentations.
425
-
426
- Note:
427
- - Tracking is automatically disabled in non‑browser environments.
428
- - Calls are queued until the Faro client is ready. For specific calls, pass `{ queue: false }` to skip queuing.
429
-
430
- #### Method reference
431
- The following methods are available via `sdk.getService('tracking')` and map to `utils/services.js`:
432
-
433
- - `configureTracking(trackingOptions)` / `configure(trackingOptions)`: Merge/override runtime tracking options (supports all config keys above).
434
- - `trackEvent(name, attributes?, options?)`
435
- - `name` string (required)
436
- - `attributes` object merged with global attributes
437
- - `options` object:
438
- - `domain` string | null
439
- - `queue` boolean (whether to queue if client not ready)
440
- - Additional transport options are forwarded to Faro
441
- - Example:
442
- ```javascript
443
- tracking.trackEvent('signup_attempt', { method: 'email' }, { domain: 'auth' })
444
- ```
445
- - `trackError(error, options?)` / `captureException(error, options?)`
446
- - `error` Error | string
447
- - `options` can be:
448
- - object with Faro error options (`context`, `type`, `stackFrames`, `skipDedupe`, `timestampOverwriteMs`, etc.)
449
- - or a plain context object (shorthand)
450
- - `queue` boolean supported
451
- - Example:
452
- ```javascript
453
- tracking.trackError(new Error('Login failed'), { context: { screen: 'Login' } })
454
- ```
455
- - `logMessage(message, level='info', context?)`
456
- - Convenience wrappers: `logDebug`, `logInfo`, `logWarning`/`logWarn`, `logErrorMessage`/`logError`
457
- - `message` string | string[]
458
- - `context` object merged with global attributes
459
- - Example:
460
- ```javascript
461
- tracking.logWarning('Slow response', { route: '/checkout', ttfbMs: 900 })
462
- ```
463
- - `addBreadcrumb(message, attributes?)`
464
- - Adds a low‑cost breadcrumb via `trackEvent('breadcrumb', ...)`
465
- - Example:
466
- ```javascript
467
- tracking.addBreadcrumb('Open modal', { id: 'planLimits' })
468
- ```
469
- - `trackMeasurement(type, values, options?)`
470
- - `type` string (required)
471
- - `values` object | number. If number, it becomes `{ value: <number> }`.
472
- - `options`:
473
- - `attributes` object (merged into payload.attributes)
474
- - `context` object (transport context)
475
- - `queue` boolean
476
- - Any additional transport options
477
- - Example:
478
- ```javascript
479
- tracking.trackMeasurement('cart_value', 42, { context: { currency: 'USD' } })
480
- ```
481
- - `trackView(name, attributes?)`
482
- - Sets the current view/page in Faro
483
- - Example:
484
- ```javascript
485
- tracking.trackView('Dashboard', { section: 'Analytics' })
486
- ```
487
- - `setUser(user, options?)` / `clearUser()`
488
- - `user` object with arbitrary attributes; supports `{ queue: boolean }`
489
- - Example:
490
- ```javascript
491
- tracking.setUser({ id: 'u_123', role: 'admin' })
492
- ```
493
- - `setSession(session, options?)` / `clearSession()`
494
- - Attach custom session data; supports `{ queue: boolean, ...sessionOptions }`
495
- - `setGlobalAttributes(attributes)` / `setGlobalAttribute(key, value)` / `removeGlobalAttribute(key)`
496
- - Manage the global attributes merged into every signal
497
- - `flushQueue()`
498
- - Immediately runs all queued calls (no‑op if client not ready)
499
- - `getClient()`
500
- - Returns the underlying Faro client (or `null` if not ready)
501
- - `isEnabled()` / `isInitialized()`
502
- - Status helpers
503
-
504
- #### Example: auth error tracking from services
505
- The SDK’s services automatically send errors to tracking:
506
- ```javascript
507
- try {
508
- await auth.login(email, password)
509
- } catch (error) {
510
- // BaseService forwards details to tracking.trackError(...)
511
- }
512
- ```
513
-
514
- #### Visualizing in Grafana
515
- - Use the Frontend Observability (Faro) data source and pick:
516
- - Service = your `appName`
517
- - Environment = your `environment`
518
- - Panels for page loads and Web Vitals require web instrumentations and real page traffic.
519
- - If self‑hosting with a Faro collector → Loki/Tempo, ensure the FO app is installed and the dashboard uses the FO data source; otherwise create custom panels with LogQL over Loki.
520
-
521
380
  ## Error Handling
522
381
  ```javascript
523
382
  try {
@@ -537,8 +396,8 @@ sdk.destroy()
537
396
  ```javascript
538
397
  const options = {
539
398
  useNewServices: true,
540
- apiUrl: 'https://api.symbols.app',
541
- socketUrl: 'https://api.symbols.app',
399
+ baseUrl: 'https://api.symbols.app',
400
+ socketUrl: 'https://socket.symbols.app',
542
401
  timeout: 30000,
543
402
  retryAttempts: 3,
544
403
  debug: false
@@ -559,7 +418,7 @@ const canEdit = sdk.hasPermission(projectId, 'edit')
559
418
  const hasCopilot = sdk.checkProjectFeature(projectTier, 'aiCopilot')
560
419
 
561
420
  // Check if user has global admin access
562
- const isAdmin = sdk.hasGlobalPermission('admin', 'governance')
421
+ const isAdmin = sdk.hasGlobalPermission('admin', 'manageUsers')
563
422
  ```
564
423
 
565
424
  ## Permission Types
@@ -635,11 +494,11 @@ if (isProjectAdmin) {
635
494
  const canMerge = projectId => {
636
495
  const hasPermission = sdk.hasPermission(projectId, 'merge')
637
496
  const isProtectedBranch = sdk.getBranchProtection(projectId)
638
-
497
+
639
498
  if (isProtectedBranch) {
640
499
  return hasPermission && sdk.hasPermission(projectId, 'manage')
641
500
  }
642
-
501
+
643
502
  return hasPermission
644
503
  }
645
504
  ```
@@ -651,8 +510,8 @@ const canMerge = projectId => {
651
510
  const ROLE_PERMISSIONS = {
652
511
  guest: ['viewPublicProjects'],
653
512
  user: ['viewPublicProjects', 'createProject'],
654
- admin: ['viewPublicProjects', 'createProject', 'governance'],
655
- superAdmin: ['viewPublicProjects', 'createProject', 'governance', 'managePlatform']
513
+ admin: ['viewPublicProjects', 'createProject', 'manageUsers'],
514
+ superAdmin: ['viewPublicProjects', 'createProject', 'manageUsers', 'managePlatform']
656
515
  }
657
516
  ```
658
517
 
@@ -692,7 +551,7 @@ if (canInvite) {
692
551
  const tier = sdk.getProjectTier(projectId)
693
552
  const maxMembers = TIER_LIMITS[tier].teamMembers
694
553
  const currentSize = await sdk.getCurrentTeamSize()
695
-
554
+
696
555
  if (currentSize < maxMembers) {
697
556
  await sdk.inviteTeamMember(email, 'editor')
698
557
  }
@@ -704,7 +563,7 @@ if (canInvite) {
704
563
  const handleAIFeature = async (projectId) => {
705
564
  const tier = await sdk.getProjectTier(projectId)
706
565
  const copilotAccess = sdk.checkProjectFeature(tier, 'aiCopilot')
707
-
566
+
708
567
  if (copilotAccess) {
709
568
  const tokensLeft = await sdk.getAITokensRemaining(projectId)
710
569
  return {
@@ -713,7 +572,7 @@ const handleAIFeature = async (projectId) => {
713
572
  maxTokens: copilotAccess
714
573
  }
715
574
  }
716
-
575
+
717
576
  return { hasAccess: false }
718
577
  }
719
578
  ```
@@ -723,7 +582,7 @@ const handleAIFeature = async (projectId) => {
723
582
  const protectBranch = async (projectId, branchName) => {
724
583
  const canManage = sdk.hasPermission(projectId, 'manage')
725
584
  if (!canManage) return false
726
-
585
+
727
586
  return sdk.setBranchProtection(projectId, branchName, {
728
587
  requireReview: true,
729
588
  requiredApprovals: 2,
@@ -755,166 +614,5 @@ try {
755
614
  }
756
615
  ```
757
616
 
758
- ## Token Management
759
-
760
- The SDK now includes automatic token management with persistence and refresh capabilities:
761
-
762
- ### Features
763
- - **Automatic Token Refresh**: Tokens are refreshed automatically before expiration
764
- - **Persistent Storage**: Tokens persist across page refreshes using localStorage
765
- - **Secure Handling**: Automatic cleanup on logout and error handling
766
- - **Flexible Storage**: Supports localStorage, sessionStorage, or memory storage
767
-
768
- ### Configuration
769
- ```javascript
770
- import { getTokenManager } from '@symbols/sdk'
771
-
772
- // Configure token management (optional - handled automatically by CoreService)
773
- const tokenManager = getTokenManager({
774
- storageType: 'localStorage', // 'localStorage' | 'sessionStorage' | 'memory'
775
- refreshBuffer: 60 * 1000, // Refresh 1 minute before expiry
776
- apiUrl: '/api',
777
- onTokenRefresh: (tokens) => console.log('Token refreshed'),
778
- onTokenExpired: () => console.log('Session expired'),
779
- onTokenError: (error) => console.error('Token error:', error)
780
- })
781
- ```
782
-
783
- ### Usage with CoreService
784
- ```javascript
785
- // Initialize SDK - token management is automatic
786
- const symbols = new Symbols({
787
- appKey: 'your-app-key',
788
- authToken: 'your-initial-token' // Optional
789
- })
790
-
791
- // Login - tokens are automatically managed
792
- const loginResult = await symbols.login('user@example.com', 'password')
793
-
794
- // All subsequent API calls automatically use fresh tokens
795
- const projects = await symbols.getProjects()
796
- const projectData = await symbols.getProjectData('projectId123')
797
-
798
- // Logout - tokens are automatically cleared
799
- await symbols.logout()
800
- ```
801
-
802
- ## New Core Service Methods
803
-
804
- ### Project Data Management (Symstory Replacement)
805
- ```javascript
806
- // Apply changes to project
807
- await symbols.applyProjectChanges('projectId', [
808
- ['update', ['components', 'Button'], { color: 'blue' }],
809
- ['delete', ['pages', 'oldPage']]
810
- ], { message: 'Update button color', type: 'patch' })
811
-
812
- // Get current project data
813
- const projectData = await symbols.getProjectData('projectId', {
814
- branch: 'main',
815
- includeHistory: true
816
- })
817
-
818
- // Restore to previous version
819
- await symbols.restoreProjectVersion('projectId', '1.2.0', {
820
- message: 'Rollback to stable version'
821
- })
822
-
823
- // Helper methods for single operations
824
- await symbols.updateProjectItem('projectId', ['components', 'Button'], { color: 'red' })
825
- await symbols.deleteProjectItem('projectId', ['pages', 'unused'])
826
- await symbols.setProjectValue('projectId', ['settings', 'theme'], 'dark')
827
- ```
828
-
829
- ### Pull Request Management
830
- ```javascript
831
- // Create pull request
832
- const pr = await symbols.createPullRequest('projectId', {
833
- source: 'feature/new-ui',
834
- target: 'main',
835
- title: 'Add new UI components',
836
- description: 'Modern UI overhaul'
837
- })
838
-
839
- // List pull requests
840
- const { pullRequests, pagination } = await symbols.listPullRequests('projectId', {
841
- status: 'open',
842
- page: 1,
843
- limit: 10
844
- })
845
-
846
- // Review pull request
847
- await symbols.approvePullRequest('projectId', 'pr_123', 'Great work!')
848
-
849
- // Request changes
850
- await symbols.requestPullRequestChanges('projectId', 'pr_123', [
851
- {
852
- file: 'src/Button.js',
853
- line: 25,
854
- comment: 'Add error handling',
855
- type: 'issue'
856
- }
857
- ])
858
-
859
- // Merge pull request
860
- await symbols.mergePullRequest('projectId', 'pr_123')
861
-
862
- // Get diff
863
- const diff = await symbols.getPullRequestDiff('projectId', 'pr_123')
864
- ```
865
-
866
- ### Branch Management
867
- ```javascript
868
- // List branches
869
- const branches = await symbols.listBranches('projectId')
870
-
871
- // Create branch
872
- await symbols.createFeatureBranch('projectId', 'user authentication')
873
- // Creates: 'feature/user-authentication'
874
-
875
- // Check branch status
876
- const status = await symbols.getBranchStatus('projectId', 'feature/new-ui')
877
-
878
- // Preview merge
879
- const preview = await symbols.previewMerge('projectId', 'feature/new-ui', 'main')
880
- if (preview.data.conflicts.length === 0) {
881
- // Commit merge if no conflicts
882
- await symbols.commitMerge('projectId', 'feature/new-ui', {
883
- message: 'Add new UI features',
884
- type: 'minor'
885
- })
886
- }
887
-
888
- // Delete branch safely
889
- await symbols.deleteBranchSafely('projectId', 'feature/old-feature')
890
-
891
- // Publish version
892
- await symbols.publishVersion('projectId', {
893
- version: '1.2.0',
894
- branch: 'main'
895
- })
896
- ```
897
-
898
- ## Error Handling
899
-
900
- The SDK provides comprehensive error handling for all scenarios:
901
-
902
- ```javascript
903
- try {
904
- await symbols.mergePullRequest('projectId', 'pr_123')
905
- } catch (error) {
906
- if (error.message.includes('conflicts')) {
907
- // Handle merge conflicts
908
- console.log('Manual conflict resolution required')
909
- } else if (error.message.includes('403')) {
910
- // Handle permission errors
911
- console.log('Insufficient permissions')
912
- } else {
913
- // Handle other errors
914
- console.error('Operation failed:', error.message)
915
- }
916
- }
917
- ```
918
-
919
617
 
920
618
 
@@ -17,11 +17,9 @@ var __copyProps = (to, from, except, desc) => {
17
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
18
  var environment_exports = {};
19
19
  __export(environment_exports, {
20
- default: () => environment_default,
21
- getConfig: () => getConfig
20
+ default: () => environment_default
22
21
  });
23
22
  module.exports = __toCommonJS(environment_exports);
24
- var import_utils = require("@domql/utils");
25
23
  const CONFIG = {
26
24
  // Common defaults for all environments
27
25
  common: {
@@ -30,140 +28,69 @@ const CONFIG = {
30
28
  // Feature toggles that apply across all environments by default
31
29
  features: {
32
30
  newUserOnboarding: true,
33
- betaFeatures: false,
34
- // Tracking is enabled by default unless overridden per environment
35
- trackingEnabled: true
31
+ betaFeatures: false
36
32
  }
37
33
  },
38
34
  // Environment-specific configurations
39
35
  local: {
40
- // local
36
+ baseUrl: "http://localhost:3000",
37
+ // For symstory api
41
38
  socketUrl: "http://localhost:8080",
42
39
  // For socket api
43
- apiUrl: "http://localhost:8080",
40
+ routerUrl: "http://localhost:3090",
41
+ // For router api
42
+ apiUrl: "http://localhost:13335",
44
43
  // For server api
45
44
  basedEnv: "development",
46
45
  // For based api
47
- basedProject: "platform-v2-sm",
46
+ basedProject: "platform-v2",
48
47
  // For based api
49
48
  basedOrg: "symbols",
50
49
  // For based api
51
- githubClientId: "Ov23liAFrsR0StbAO6PO",
50
+ githubClientId: "Ov23liHxyWFBxS8f1gnF",
52
51
  // For github api
53
- grafanaUrl: "",
54
- // For grafana tracing
55
- grafanaAppName: "Symbols Localhost",
56
52
  // Environment-specific feature toggles (override common)
57
53
  features: {
58
- // Disable tracking by default on localhost/dev machines
59
- trackingEnabled: false,
54
+ betaFeatures: true
60
55
  // Enable beta features in local dev
61
- betaFeatures: true,
62
- // Preserve common defaults explicitly for local
63
- newUserOnboarding: true
64
- },
65
- typesenseCollectionName: "docs",
66
- typesenseApiKey: "vZya3L2zpq8L6iI5WWMUZJZABvT63VDb",
67
- typesenseHost: "localhost",
68
- typesensePort: "8108",
69
- typesenseProtocol: "http"
56
+ }
70
57
  },
71
58
  development: {
72
- socketUrl: "https://dev.api.symbols.app",
73
- apiUrl: "https://dev.api.symbols.app",
74
- githubClientId: "Ov23liHxyWFBxS8f1gnF",
75
- grafanaUrl: "https://faro-collector-prod-us-east-0.grafana.net/collect/7a3ba473cee2025c68513667024316b8",
76
- // For grafana tracing
77
- grafanaAppName: "Symbols Dev",
78
- typesenseCollectionName: "docs",
79
- typesenseApiKey: "awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA",
80
- typesenseHost: "tl2qpnwxev4cjm36p-1.a1.typesense.net",
81
- typesensePort: "443",
82
- typesenseProtocol: "https"
83
- },
84
- testing: {
85
- socketUrl: "https://test.api.symbols.app",
86
- apiUrl: "https://test.api.symbols.app",
87
- basedEnv: "testing",
88
- basedProject: "platform-v2-sm",
59
+ baseUrl: "https://story.symbo.ls",
60
+ socketUrl: "https://socket.symbols.app",
61
+ routerUrl: "https://router.symbols.app",
62
+ apiUrl: "https://api.symbols.app",
63
+ basedEnv: "development",
64
+ basedProject: "platform-v2",
89
65
  basedOrg: "symbols",
90
- githubClientId: "Ov23liHxyWFBxS8f1gnF",
91
- grafanaUrl: "",
92
- // For grafana tracing
93
- grafanaAppName: "Symbols Test",
94
- typesenseCollectionName: "docs",
95
- typesenseApiKey: "awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA",
96
- typesenseHost: "tl2qpnwxev4cjm36p-1.a1.typesense.net",
97
- typesensePort: "443",
98
- typesenseProtocol: "https"
99
- },
100
- upcoming: {
101
- socketUrl: "https://upcoming.api.symbols.app",
102
- apiUrl: "https://upcoming.api.symbols.app",
103
- githubClientId: "Ov23liWF7NvdZ056RV5J",
104
- grafanaUrl: "",
105
- // For grafana tracing
106
- grafanaAppName: "Symbols Upcoming",
107
- typesenseCollectionName: "docs",
108
- typesenseApiKey: "awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA",
109
- typesenseHost: "tl2qpnwxev4cjm36p-1.a1.typesense.net",
110
- typesensePort: "443",
111
- typesenseProtocol: "https"
66
+ githubClientId: "Ov23liHxyWFBxS8f1gnF"
112
67
  },
113
68
  staging: {
114
- socketUrl: "https://staging.api.symbols.app",
69
+ baseUrl: "https://staging.story.symbo.ls",
70
+ socketUrl: "https://staging.socket.symbols.app",
71
+ routerUrl: "https://staging.router.symbols.app",
115
72
  apiUrl: "https://staging.api.symbols.app",
116
73
  basedEnv: "staging",
117
- basedProject: "platform-v2-sm",
118
- basedOrg: "symbols",
119
- githubClientId: "Ov23ligwZDQVD0VfuWNa",
120
- grafanaUrl: "",
121
- // For grafana tracing
122
- grafanaAppName: "Symbols Staging",
123
- typesenseCollectionName: "docs",
124
- typesenseApiKey: "awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA",
125
- typesenseHost: "tl2qpnwxev4cjm36p-1.a1.typesense.net",
126
- typesensePort: "443",
127
- typesenseProtocol: "https"
128
- },
129
- preview: {
130
- socketUrl: "https://api.symbols.app",
131
- apiUrl: "https://api.symbols.app",
132
- basedEnv: "production",
133
- basedProject: "platform-v2-sm",
74
+ basedProject: "platform-v2",
134
75
  basedOrg: "symbols",
135
- githubClientId: "Ov23liFAlOEIXtX3dBtR",
136
- grafanaUrl: "https://faro-collector-prod-us-east-0.grafana.net/collect/5c1089f3c3eea4ec5658e05c3f53baae",
137
- // For grafana tracing
138
- grafanaAppName: "Symbols Preview",
139
- typesenseCollectionName: "docs",
140
- typesenseApiKey: "awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA",
141
- typesenseHost: "tl2qpnwxev4cjm36p-1.a1.typesense.net",
142
- typesensePort: "443",
143
- typesenseProtocol: "https"
76
+ githubClientId: "Ov23ligwZDQVD0VfuWNa"
144
77
  },
145
78
  production: {
146
- socketUrl: "https://api.symbols.app",
79
+ baseUrl: "https://story.symbo.ls",
80
+ socketUrl: "https://socket.symbols.app",
81
+ routerUrl: "https://router.symbols.app",
147
82
  apiUrl: "https://api.symbols.app",
148
83
  basedEnv: "production",
149
- basedProject: "platform-v2-sm",
84
+ basedProject: "platform-v2",
150
85
  basedOrg: "symbols",
151
- githubClientId: "Ov23liFAlOEIXtX3dBtR",
152
- grafanaUrl: "https://faro-collector-prod-us-east-0.grafana.net/collect/5c1089f3c3eea4ec5658e05c3f53baae",
153
- // For grafana tracing
154
- grafanaAppName: "Symbols",
155
- typesenseCollectionName: "docs",
156
- typesenseApiKey: "awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA",
157
- typesenseHost: "tl2qpnwxev4cjm36p-1.a1.typesense.net",
158
- typesensePort: "443",
159
- typesenseProtocol: "https"
86
+ githubClientId: "Ov23liFAlOEIXtX3dBtR"
160
87
  }
161
88
  };
162
89
  const getEnvironment = () => {
163
- // @preserve-env
164
- const env = process.env.SYMBOLS_APP_ENV || process.env.NODE_ENV;
90
+ const env = process.env.SYMBOLS_APP_ENV || "" || "development";
165
91
  if (!CONFIG[env]) {
166
- throw new Error(`Unknown environment "${env}"`);
92
+ console.warn(`Unknown environment "${env}", falling back to development`);
93
+ return "development";
167
94
  }
168
95
  return env;
169
96
  };
@@ -173,33 +100,25 @@ const getConfig = () => {
173
100
  const envConfig = { ...CONFIG.common, ...CONFIG[env] };
174
101
  const finalConfig = {
175
102
  ...envConfig,
176
- // Deep-merge feature flags so env-specific overrides don't drop common defaults
177
- features: {
178
- ...CONFIG.common.features || {},
179
- ...CONFIG[env] && CONFIG[env].features || {}
180
- },
103
+ baseUrl: process.env.SYMBOLS_APP_BASE_URL || envConfig.baseUrl,
181
104
  socketUrl: process.env.SYMBOLS_APP_SOCKET_URL || envConfig.socketUrl,
105
+ routerUrl: process.env.SYMBOLS_APP_ROUTER_URL || envConfig.routerUrl,
182
106
  apiUrl: process.env.SYMBOLS_APP_API_URL || envConfig.apiUrl,
183
107
  basedEnv: process.env.SYMBOLS_APP_BASED_ENV || envConfig.basedEnv,
184
108
  basedProject: process.env.SYMBOLS_APP_BASED_PROJECT || envConfig.basedProject,
185
109
  basedOrg: process.env.SYMBOLS_APP_BASED_ORG || envConfig.basedOrg,
186
110
  githubClientId: process.env.SYMBOLS_APP_GITHUB_CLIENT_ID || envConfig.githubClientId,
187
- grafanaUrl: process.env.SYMBOLS_APP_GRAFANA_URL || envConfig.grafanaUrl,
188
- typesenseCollectionName: process.env.TYPESENSE_COLLECTION_NAME || envConfig.typesenseCollectionName,
189
- typesenseApiKey: process.env.TYPESENSE_API_KEY || envConfig.typesenseApiKey,
190
- typesenseHost: process.env.TYPESENSE_HOST || envConfig.typesenseHost,
191
- typesensePort: process.env.TYPESENSE_PORT || envConfig.typesensePort,
192
- typesenseProtocol: process.env.TYPESENSE_PROTOCOL || envConfig.typesenseProtocol,
193
- isDevelopment: (0, import_utils.isDevelopment)(env),
194
- isTesting: env === "testing",
111
+ isDevelopment: env === "development" || env === "local",
195
112
  isStaging: env === "staging",
196
- isPreview: env === "preview",
197
113
  isProduction: env === "production"
198
- // Store all environment variables for potential future use
199
114
  };
200
115
  const requiredFields = [
116
+ "baseUrl",
201
117
  "socketUrl",
202
118
  "apiUrl",
119
+ "basedEnv",
120
+ "basedProject",
121
+ "basedOrg",
203
122
  "githubClientId",
204
123
  "googleClientId"
205
124
  ];
@@ -210,19 +129,26 @@ const getConfig = () => {
210
129
  );
211
130
  }
212
131
  if (finalConfig.isDevelopment) {
213
- console.warn(
132
+ console.log(
214
133
  "environment in SDK:",
215
- env || process.env.NODE_ENV || process.env.NODE_ENV
134
+ env,
135
+ "",
136
+ process.env.SYMBOLS_APP_ENV
216
137
  );
217
138
  console.log(finalConfig);
218
- } else if (global.window) {
219
- global.window.finalConfig = finalConfig;
220
139
  }
221
140
  return finalConfig;
222
141
  } catch (error) {
223
142
  console.error("Failed to load environment configuration:", error);
224
143
  return {
225
- ...CONFIG.development
144
+ baseUrl: "https://story.symbo.ls",
145
+ socketUrl: "https://socket.symbols.app",
146
+ routerUrl: "https://router.symbols.app",
147
+ apiUrl: "https://api.symbols.app",
148
+ basedEnv: "development",
149
+ basedProject: "platform-v2",
150
+ basedOrg: "symbols",
151
+ githubClientId: "Ov23liHxyWFBxS8f1gnF"
226
152
  };
227
153
  }
228
154
  };