@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.
- package/README.md +13 -315
- package/dist/cjs/config/environment.js +50 -124
- package/dist/cjs/index.js +22 -169
- package/dist/cjs/services/AIService.js +155 -0
- package/dist/cjs/services/AuthService.js +277 -751
- package/dist/cjs/services/BaseService.js +6 -158
- package/dist/cjs/services/BasedService.js +679 -0
- package/dist/cjs/services/SocketIOService.js +309 -0
- package/dist/cjs/services/SocketService.js +161 -0
- package/dist/cjs/services/SymstoryService.js +485 -0
- package/dist/cjs/services/index.js +16 -64
- package/dist/cjs/utils/basedQuerys.js +61 -0
- package/dist/cjs/utils/permission.js +4 -4
- package/dist/cjs/utils/services.js +80 -301
- package/dist/cjs/utils/symstoryClient.js +228 -0
- package/dist/cjs/utils/validation.js +3 -0
- package/dist/esm/config/environment.js +50 -124
- package/dist/esm/index.js +11282 -49789
- package/dist/esm/services/AIService.js +185 -0
- package/dist/esm/services/AuthService.js +358 -1506
- package/dist/esm/services/BaseService.js +6 -757
- package/dist/esm/services/BasedService.js +4651 -0
- package/dist/esm/services/SocketIOService.js +467 -0
- package/dist/esm/services/SocketService.js +191 -0
- package/dist/esm/services/SymstoryService.js +6849 -0
- package/dist/esm/services/index.js +11188 -49352
- package/dist/esm/utils/basedQuerys.js +43 -0
- package/dist/esm/utils/permission.js +4 -4
- package/dist/esm/utils/services.js +80 -301
- package/dist/esm/utils/symstoryClient.js +334 -0
- package/dist/esm/utils/validation.js +26 -93
- package/dist/node/config/environment.js +50 -124
- package/dist/node/index.js +26 -202
- package/dist/node/services/AIService.js +136 -0
- package/dist/node/services/AuthService.js +278 -751
- package/dist/node/services/BaseService.js +6 -148
- package/dist/node/services/BasedService.js +650 -0
- package/dist/node/services/SocketIOService.js +280 -0
- package/dist/node/services/SocketService.js +142 -0
- package/dist/node/services/SymstoryService.js +456 -0
- package/dist/node/services/index.js +16 -64
- package/dist/node/utils/basedQuerys.js +42 -0
- package/dist/node/utils/permission.js +4 -4
- package/dist/node/utils/services.js +80 -301
- package/dist/node/utils/symstoryClient.js +199 -0
- package/dist/node/utils/validation.js +3 -0
- package/package.json +21 -43
- package/src/config/environment.js +50 -126
- package/src/index.js +24 -208
- package/src/services/AIService.js +150 -0
- package/src/services/AuthService.js +298 -893
- package/src/services/BaseService.js +6 -166
- package/src/services/BasedService.js +722 -0
- package/src/services/SocketIOService.js +356 -0
- package/src/services/SocketService.js +168 -0
- package/src/services/SymstoryService.js +563 -0
- package/src/services/index.js +13 -80
- package/src/utils/basedQuerys.js +41 -0
- package/src/utils/permission.js +4 -4
- package/src/utils/services.js +83 -325
- package/src/utils/symstoryClient.js +218 -0
- package/src/utils/validation.js +3 -0
- package/dist/cjs/services/AdminService.js +0 -351
- package/dist/cjs/services/BranchService.js +0 -484
- package/dist/cjs/services/CollabService.js +0 -743
- package/dist/cjs/services/DnsService.js +0 -340
- package/dist/cjs/services/FeatureFlagService.js +0 -175
- package/dist/cjs/services/FileService.js +0 -201
- package/dist/cjs/services/IntegrationService.js +0 -538
- package/dist/cjs/services/MetricsService.js +0 -62
- package/dist/cjs/services/PaymentService.js +0 -271
- package/dist/cjs/services/PlanService.js +0 -426
- package/dist/cjs/services/ProjectService.js +0 -1207
- package/dist/cjs/services/PullRequestService.js +0 -503
- package/dist/cjs/services/ScreenshotService.js +0 -304
- package/dist/cjs/services/SubscriptionService.js +0 -396
- package/dist/cjs/services/TrackingService.js +0 -661
- package/dist/cjs/services/WaitlistService.js +0 -148
- package/dist/cjs/state/RootStateManager.js +0 -65
- package/dist/cjs/state/rootEventBus.js +0 -74
- package/dist/cjs/utils/CollabClient.js +0 -223
- package/dist/cjs/utils/TokenManager.js +0 -422
- package/dist/cjs/utils/changePreprocessor.js +0 -199
- package/dist/cjs/utils/jsonDiff.js +0 -145
- package/dist/cjs/utils/ordering.js +0 -309
- package/dist/esm/services/AdminService.js +0 -1132
- package/dist/esm/services/BranchService.js +0 -1265
- package/dist/esm/services/CollabService.js +0 -26838
- package/dist/esm/services/DnsService.js +0 -1121
- package/dist/esm/services/FeatureFlagService.js +0 -956
- package/dist/esm/services/FileService.js +0 -982
- package/dist/esm/services/IntegrationService.js +0 -1319
- package/dist/esm/services/MetricsService.js +0 -843
- package/dist/esm/services/PaymentService.js +0 -1052
- package/dist/esm/services/PlanService.js +0 -1207
- package/dist/esm/services/ProjectService.js +0 -2526
- package/dist/esm/services/PullRequestService.js +0 -1284
- package/dist/esm/services/ScreenshotService.js +0 -1085
- package/dist/esm/services/SubscriptionService.js +0 -1177
- package/dist/esm/services/TrackingService.js +0 -18343
- package/dist/esm/services/WaitlistService.js +0 -929
- package/dist/esm/state/RootStateManager.js +0 -90
- package/dist/esm/state/rootEventBus.js +0 -56
- package/dist/esm/utils/CollabClient.js +0 -18901
- package/dist/esm/utils/TokenManager.js +0 -408
- package/dist/esm/utils/changePreprocessor.js +0 -542
- package/dist/esm/utils/jsonDiff.js +0 -7011
- package/dist/esm/utils/ordering.js +0 -291
- package/dist/node/services/AdminService.js +0 -332
- package/dist/node/services/BranchService.js +0 -465
- package/dist/node/services/CollabService.js +0 -724
- package/dist/node/services/DnsService.js +0 -321
- package/dist/node/services/FeatureFlagService.js +0 -156
- package/dist/node/services/FileService.js +0 -182
- package/dist/node/services/IntegrationService.js +0 -519
- package/dist/node/services/MetricsService.js +0 -43
- package/dist/node/services/PaymentService.js +0 -252
- package/dist/node/services/PlanService.js +0 -407
- package/dist/node/services/ProjectService.js +0 -1188
- package/dist/node/services/PullRequestService.js +0 -484
- package/dist/node/services/ScreenshotService.js +0 -285
- package/dist/node/services/SubscriptionService.js +0 -377
- package/dist/node/services/TrackingService.js +0 -632
- package/dist/node/services/WaitlistService.js +0 -129
- package/dist/node/state/RootStateManager.js +0 -36
- package/dist/node/state/rootEventBus.js +0 -55
- package/dist/node/utils/CollabClient.js +0 -194
- package/dist/node/utils/TokenManager.js +0 -403
- package/dist/node/utils/changePreprocessor.js +0 -180
- package/dist/node/utils/jsonDiff.js +0 -116
- package/dist/node/utils/ordering.js +0 -290
- package/src/services/AdminService.js +0 -374
- package/src/services/BranchService.js +0 -536
- package/src/services/CollabService.js +0 -900
- package/src/services/DnsService.js +0 -366
- package/src/services/FeatureFlagService.js +0 -174
- package/src/services/FileService.js +0 -213
- package/src/services/IntegrationService.js +0 -548
- package/src/services/MetricsService.js +0 -40
- package/src/services/PaymentService.js +0 -287
- package/src/services/PlanService.js +0 -468
- package/src/services/ProjectService.js +0 -1366
- package/src/services/PullRequestService.js +0 -537
- package/src/services/ScreenshotService.js +0 -258
- package/src/services/SubscriptionService.js +0 -425
- package/src/services/TrackingService.js +0 -853
- package/src/services/WaitlistService.js +0 -130
- package/src/services/tests/BranchService/createBranch.test.js +0 -153
- package/src/services/tests/BranchService/deleteBranch.test.js +0 -173
- package/src/services/tests/BranchService/getBranchChanges.test.js +0 -146
- package/src/services/tests/BranchService/listBranches.test.js +0 -87
- package/src/services/tests/BranchService/mergeBranch.test.js +0 -210
- package/src/services/tests/BranchService/publishVersion.test.js +0 -183
- package/src/services/tests/BranchService/renameBranch.test.js +0 -240
- package/src/services/tests/BranchService/resetBranch.test.js +0 -152
- package/src/services/tests/FeatureFlagService/adminFeatureFlags.test.js +0 -67
- package/src/services/tests/FeatureFlagService/getFeatureFlags.test.js +0 -75
- package/src/services/tests/FileService/createFileFormData.test.js +0 -74
- package/src/services/tests/FileService/getFileUrl.test.js +0 -69
- package/src/services/tests/FileService/updateProjectIcon.test.js +0 -109
- package/src/services/tests/FileService/uploadDocument.test.js +0 -36
- package/src/services/tests/FileService/uploadFile.test.js +0 -78
- package/src/services/tests/FileService/uploadFileWithValidation.test.js +0 -114
- package/src/services/tests/FileService/uploadImage.test.js +0 -36
- package/src/services/tests/FileService/uploadMultipleFiles.test.js +0 -111
- package/src/services/tests/FileService/validateFile.test.js +0 -63
- package/src/services/tests/PlanService/createPlan.test.js +0 -104
- package/src/services/tests/PlanService/createPlanWithValidation.test.js +0 -523
- package/src/services/tests/PlanService/deletePlan.test.js +0 -92
- package/src/services/tests/PlanService/getActivePlans.test.js +0 -123
- package/src/services/tests/PlanService/getAdminPlans.test.js +0 -84
- package/src/services/tests/PlanService/getPlan.test.js +0 -50
- package/src/services/tests/PlanService/getPlanByKey.test.js +0 -109
- package/src/services/tests/PlanService/getPlanWithValidation.test.js +0 -85
- package/src/services/tests/PlanService/getPlans.test.js +0 -53
- package/src/services/tests/PlanService/getPlansByPriceRange.test.js +0 -109
- package/src/services/tests/PlanService/getPlansWithValidation.test.js +0 -48
- package/src/services/tests/PlanService/initializePlans.test.js +0 -75
- package/src/services/tests/PlanService/updatePlan.test.js +0 -111
- package/src/services/tests/PlanService/updatePlanWithValidation.test.js +0 -556
- package/src/state/RootStateManager.js +0 -76
- package/src/state/rootEventBus.js +0 -67
- package/src/utils/CollabClient.js +0 -248
- package/src/utils/TokenManager.js +0 -479
- package/src/utils/changePreprocessor.js +0 -239
- package/src/utils/jsonDiff.js +0 -144
- 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
|
-
|
|
16
|
-
socketUrl: 'https://
|
|
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
|
-
|
|
541
|
-
socketUrl: 'https://
|
|
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', '
|
|
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', '
|
|
655
|
-
superAdmin: ['viewPublicProjects', 'createProject', '
|
|
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
|
-
|
|
36
|
+
baseUrl: "http://localhost:3000",
|
|
37
|
+
// For symstory api
|
|
41
38
|
socketUrl: "http://localhost:8080",
|
|
42
39
|
// For socket api
|
|
43
|
-
|
|
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
|
|
46
|
+
basedProject: "platform-v2",
|
|
48
47
|
// For based api
|
|
49
48
|
basedOrg: "symbols",
|
|
50
49
|
// For based api
|
|
51
|
-
githubClientId: "
|
|
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
|
-
|
|
59
|
-
trackingEnabled: false,
|
|
54
|
+
betaFeatures: true
|
|
60
55
|
// Enable beta features in local dev
|
|
61
|
-
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|
-
|
|
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
|
|
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: "
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
132
|
+
console.log(
|
|
214
133
|
"environment in SDK:",
|
|
215
|
-
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
|
-
|
|
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
|
};
|