@symbo.ls/sdk 3.1.1 → 3.2.3
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 +174 -13
- package/dist/cjs/config/environment.js +32 -42
- package/dist/cjs/index.js +31 -24
- package/dist/cjs/services/AIService.js +3 -3
- package/dist/cjs/services/AuthService.js +44 -3
- package/dist/cjs/services/BasedService.js +530 -24
- package/dist/cjs/services/CollabService.js +420 -0
- package/dist/cjs/services/CoreService.js +2295 -0
- package/dist/cjs/services/SocketService.js +207 -59
- package/dist/cjs/services/SymstoryService.js +135 -49
- package/dist/cjs/services/index.js +8 -16
- package/dist/cjs/state/RootStateManager.js +86 -0
- package/dist/cjs/state/rootEventBus.js +65 -0
- package/dist/cjs/utils/CollabClient.js +157 -0
- package/dist/cjs/utils/TokenManager.js +409 -0
- package/dist/cjs/utils/basedQuerys.js +120 -0
- package/dist/cjs/utils/jsonDiff.js +103 -0
- package/dist/cjs/utils/permission.js +4 -4
- package/dist/cjs/utils/services.js +133 -69
- package/dist/cjs/utils/symstoryClient.js +33 -2
- package/dist/esm/config/environment.js +32 -42
- package/dist/esm/index.js +20586 -11525
- package/dist/esm/services/AIService.js +3 -3
- package/dist/esm/services/AuthService.js +48 -7
- package/dist/esm/services/BasedService.js +676 -65
- package/dist/esm/services/CollabService.js +18028 -0
- package/dist/esm/services/CoreService.js +2827 -0
- package/dist/esm/services/SocketService.js +323 -58
- package/dist/esm/services/SymstoryService.js +287 -111
- package/dist/esm/services/index.js +20456 -11470
- package/dist/esm/state/RootStateManager.js +102 -0
- package/dist/esm/state/rootEventBus.js +47 -0
- package/dist/esm/utils/CollabClient.js +17483 -0
- package/dist/esm/utils/TokenManager.js +395 -0
- package/dist/esm/utils/basedQuerys.js +120 -0
- package/dist/esm/utils/jsonDiff.js +6096 -0
- package/dist/esm/utils/permission.js +4 -4
- package/dist/esm/utils/services.js +133 -69
- package/dist/esm/utils/symstoryClient.js +63 -43
- package/dist/esm/utils/validation.js +89 -19
- package/dist/node/config/environment.js +32 -42
- package/dist/node/index.js +37 -28
- package/dist/node/services/AIService.js +3 -3
- package/dist/node/services/AuthService.js +44 -3
- package/dist/node/services/BasedService.js +531 -25
- package/dist/node/services/CollabService.js +401 -0
- package/dist/node/services/CoreService.js +2266 -0
- package/dist/node/services/SocketService.js +197 -59
- package/dist/node/services/SymstoryService.js +135 -49
- package/dist/node/services/index.js +8 -16
- package/dist/node/state/RootStateManager.js +57 -0
- package/dist/node/state/rootEventBus.js +46 -0
- package/dist/node/utils/CollabClient.js +128 -0
- package/dist/node/utils/TokenManager.js +390 -0
- package/dist/node/utils/basedQuerys.js +120 -0
- package/dist/node/utils/jsonDiff.js +74 -0
- package/dist/node/utils/permission.js +4 -4
- package/dist/node/utils/services.js +133 -69
- package/dist/node/utils/symstoryClient.js +33 -2
- package/package.json +23 -14
- package/src/config/environment.js +33 -42
- package/src/index.js +45 -28
- package/src/services/AIService.js +3 -3
- package/src/services/AuthService.js +52 -3
- package/src/services/BasedService.js +603 -23
- package/src/services/CollabService.js +491 -0
- package/src/services/CoreService.js +2548 -0
- package/src/services/SocketService.js +227 -59
- package/src/services/SymstoryService.js +150 -64
- package/src/services/index.js +7 -14
- package/src/state/RootStateManager.js +71 -0
- package/src/state/rootEventBus.js +48 -0
- package/src/utils/CollabClient.js +161 -0
- package/src/utils/TokenManager.js +462 -0
- package/src/utils/basedQuerys.js +123 -0
- package/src/utils/jsonDiff.js +109 -0
- package/src/utils/permission.js +4 -4
- package/src/utils/services.js +144 -69
- package/src/utils/symstoryClient.js +36 -2
- package/dist/cjs/services/SocketIOService.js +0 -309
- package/dist/esm/services/SocketIOService.js +0 -467
- package/dist/node/services/SocketIOService.js +0 -280
- package/src/services/SocketIOService.js +0 -356
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
|
+
apiUrl: 'https://api.symbols.app',
|
|
16
|
+
socketUrl: 'https://api.symbols.app',
|
|
17
17
|
timeout: 30000,
|
|
18
18
|
retryAttempts: 3,
|
|
19
19
|
debug: false
|
|
@@ -396,8 +396,8 @@ sdk.destroy()
|
|
|
396
396
|
```javascript
|
|
397
397
|
const options = {
|
|
398
398
|
useNewServices: true,
|
|
399
|
-
|
|
400
|
-
socketUrl: 'https://
|
|
399
|
+
apiUrl: 'https://api.symbols.app',
|
|
400
|
+
socketUrl: 'https://api.symbols.app',
|
|
401
401
|
timeout: 30000,
|
|
402
402
|
retryAttempts: 3,
|
|
403
403
|
debug: false
|
|
@@ -418,7 +418,7 @@ const canEdit = sdk.hasPermission(projectId, 'edit')
|
|
|
418
418
|
const hasCopilot = sdk.checkProjectFeature(projectTier, 'aiCopilot')
|
|
419
419
|
|
|
420
420
|
// Check if user has global admin access
|
|
421
|
-
const isAdmin = sdk.hasGlobalPermission('admin', '
|
|
421
|
+
const isAdmin = sdk.hasGlobalPermission('admin', 'governance')
|
|
422
422
|
```
|
|
423
423
|
|
|
424
424
|
## Permission Types
|
|
@@ -494,11 +494,11 @@ if (isProjectAdmin) {
|
|
|
494
494
|
const canMerge = projectId => {
|
|
495
495
|
const hasPermission = sdk.hasPermission(projectId, 'merge')
|
|
496
496
|
const isProtectedBranch = sdk.getBranchProtection(projectId)
|
|
497
|
-
|
|
497
|
+
|
|
498
498
|
if (isProtectedBranch) {
|
|
499
499
|
return hasPermission && sdk.hasPermission(projectId, 'manage')
|
|
500
500
|
}
|
|
501
|
-
|
|
501
|
+
|
|
502
502
|
return hasPermission
|
|
503
503
|
}
|
|
504
504
|
```
|
|
@@ -510,8 +510,8 @@ const canMerge = projectId => {
|
|
|
510
510
|
const ROLE_PERMISSIONS = {
|
|
511
511
|
guest: ['viewPublicProjects'],
|
|
512
512
|
user: ['viewPublicProjects', 'createProject'],
|
|
513
|
-
admin: ['viewPublicProjects', 'createProject', '
|
|
514
|
-
superAdmin: ['viewPublicProjects', 'createProject', '
|
|
513
|
+
admin: ['viewPublicProjects', 'createProject', 'governance'],
|
|
514
|
+
superAdmin: ['viewPublicProjects', 'createProject', 'governance', 'managePlatform']
|
|
515
515
|
}
|
|
516
516
|
```
|
|
517
517
|
|
|
@@ -551,7 +551,7 @@ if (canInvite) {
|
|
|
551
551
|
const tier = sdk.getProjectTier(projectId)
|
|
552
552
|
const maxMembers = TIER_LIMITS[tier].teamMembers
|
|
553
553
|
const currentSize = await sdk.getCurrentTeamSize()
|
|
554
|
-
|
|
554
|
+
|
|
555
555
|
if (currentSize < maxMembers) {
|
|
556
556
|
await sdk.inviteTeamMember(email, 'editor')
|
|
557
557
|
}
|
|
@@ -563,7 +563,7 @@ if (canInvite) {
|
|
|
563
563
|
const handleAIFeature = async (projectId) => {
|
|
564
564
|
const tier = await sdk.getProjectTier(projectId)
|
|
565
565
|
const copilotAccess = sdk.checkProjectFeature(tier, 'aiCopilot')
|
|
566
|
-
|
|
566
|
+
|
|
567
567
|
if (copilotAccess) {
|
|
568
568
|
const tokensLeft = await sdk.getAITokensRemaining(projectId)
|
|
569
569
|
return {
|
|
@@ -572,7 +572,7 @@ const handleAIFeature = async (projectId) => {
|
|
|
572
572
|
maxTokens: copilotAccess
|
|
573
573
|
}
|
|
574
574
|
}
|
|
575
|
-
|
|
575
|
+
|
|
576
576
|
return { hasAccess: false }
|
|
577
577
|
}
|
|
578
578
|
```
|
|
@@ -582,7 +582,7 @@ const handleAIFeature = async (projectId) => {
|
|
|
582
582
|
const protectBranch = async (projectId, branchName) => {
|
|
583
583
|
const canManage = sdk.hasPermission(projectId, 'manage')
|
|
584
584
|
if (!canManage) return false
|
|
585
|
-
|
|
585
|
+
|
|
586
586
|
return sdk.setBranchProtection(projectId, branchName, {
|
|
587
587
|
requireReview: true,
|
|
588
588
|
requiredApprovals: 2,
|
|
@@ -614,5 +614,166 @@ try {
|
|
|
614
614
|
}
|
|
615
615
|
```
|
|
616
616
|
|
|
617
|
+
## Token Management
|
|
618
|
+
|
|
619
|
+
The SDK now includes automatic token management with persistence and refresh capabilities:
|
|
620
|
+
|
|
621
|
+
### Features
|
|
622
|
+
- **Automatic Token Refresh**: Tokens are refreshed automatically before expiration
|
|
623
|
+
- **Persistent Storage**: Tokens persist across page refreshes using localStorage
|
|
624
|
+
- **Secure Handling**: Automatic cleanup on logout and error handling
|
|
625
|
+
- **Flexible Storage**: Supports localStorage, sessionStorage, or memory storage
|
|
626
|
+
|
|
627
|
+
### Configuration
|
|
628
|
+
```javascript
|
|
629
|
+
import { getTokenManager } from '@symbols/sdk'
|
|
630
|
+
|
|
631
|
+
// Configure token management (optional - handled automatically by CoreService)
|
|
632
|
+
const tokenManager = getTokenManager({
|
|
633
|
+
storageType: 'localStorage', // 'localStorage' | 'sessionStorage' | 'memory'
|
|
634
|
+
refreshBuffer: 60 * 1000, // Refresh 1 minute before expiry
|
|
635
|
+
apiUrl: '/api',
|
|
636
|
+
onTokenRefresh: (tokens) => console.log('Token refreshed'),
|
|
637
|
+
onTokenExpired: () => console.log('Session expired'),
|
|
638
|
+
onTokenError: (error) => console.error('Token error:', error)
|
|
639
|
+
})
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
### Usage with CoreService
|
|
643
|
+
```javascript
|
|
644
|
+
// Initialize SDK - token management is automatic
|
|
645
|
+
const symbols = new Symbols({
|
|
646
|
+
appKey: 'your-app-key',
|
|
647
|
+
authToken: 'your-initial-token' // Optional
|
|
648
|
+
})
|
|
649
|
+
|
|
650
|
+
// Login - tokens are automatically managed
|
|
651
|
+
const loginResult = await symbols.login('user@example.com', 'password')
|
|
652
|
+
|
|
653
|
+
// All subsequent API calls automatically use fresh tokens
|
|
654
|
+
const projects = await symbols.getProjects()
|
|
655
|
+
const projectData = await symbols.getProjectData('projectId123')
|
|
656
|
+
|
|
657
|
+
// Logout - tokens are automatically cleared
|
|
658
|
+
await symbols.logout()
|
|
659
|
+
```
|
|
660
|
+
|
|
661
|
+
## New Core Service Methods
|
|
662
|
+
|
|
663
|
+
### Project Data Management (Symstory Replacement)
|
|
664
|
+
```javascript
|
|
665
|
+
// Apply changes to project
|
|
666
|
+
await symbols.applyProjectChanges('projectId', [
|
|
667
|
+
['update', ['components', 'Button'], { color: 'blue' }],
|
|
668
|
+
['delete', ['pages', 'oldPage']]
|
|
669
|
+
], { message: 'Update button color', type: 'patch' })
|
|
670
|
+
|
|
671
|
+
// Get current project data
|
|
672
|
+
const projectData = await symbols.getProjectData('projectId', {
|
|
673
|
+
branch: 'main',
|
|
674
|
+
includeHistory: true
|
|
675
|
+
})
|
|
676
|
+
|
|
677
|
+
// Restore to previous version
|
|
678
|
+
await symbols.restoreProjectVersion('projectId', '1.2.0', {
|
|
679
|
+
message: 'Rollback to stable version'
|
|
680
|
+
})
|
|
681
|
+
|
|
682
|
+
// Helper methods for single operations
|
|
683
|
+
await symbols.updateProjectItem('projectId', ['components', 'Button'], { color: 'red' })
|
|
684
|
+
await symbols.deleteProjectItem('projectId', ['pages', 'unused'])
|
|
685
|
+
await symbols.setProjectValue('projectId', ['settings', 'theme'], 'dark')
|
|
686
|
+
```
|
|
687
|
+
|
|
688
|
+
### Pull Request Management
|
|
689
|
+
```javascript
|
|
690
|
+
// Create pull request
|
|
691
|
+
const pr = await symbols.createPullRequest('projectId', {
|
|
692
|
+
source: 'feature/new-ui',
|
|
693
|
+
target: 'main',
|
|
694
|
+
title: 'Add new UI components',
|
|
695
|
+
description: 'Modern UI overhaul'
|
|
696
|
+
})
|
|
697
|
+
|
|
698
|
+
// List pull requests
|
|
699
|
+
const { pullRequests, pagination } = await symbols.listPullRequests('projectId', {
|
|
700
|
+
status: 'open',
|
|
701
|
+
page: 1,
|
|
702
|
+
limit: 10
|
|
703
|
+
})
|
|
704
|
+
|
|
705
|
+
// Review pull request
|
|
706
|
+
await symbols.approvePullRequest('projectId', 'pr_123', 'Great work!')
|
|
707
|
+
|
|
708
|
+
// Request changes
|
|
709
|
+
await symbols.requestPullRequestChanges('projectId', 'pr_123', [
|
|
710
|
+
{
|
|
711
|
+
file: 'src/Button.js',
|
|
712
|
+
line: 25,
|
|
713
|
+
comment: 'Add error handling',
|
|
714
|
+
type: 'issue'
|
|
715
|
+
}
|
|
716
|
+
])
|
|
717
|
+
|
|
718
|
+
// Merge pull request
|
|
719
|
+
await symbols.mergePullRequest('projectId', 'pr_123')
|
|
720
|
+
|
|
721
|
+
// Get diff
|
|
722
|
+
const diff = await symbols.getPullRequestDiff('projectId', 'pr_123')
|
|
723
|
+
```
|
|
724
|
+
|
|
725
|
+
### Branch Management
|
|
726
|
+
```javascript
|
|
727
|
+
// List branches
|
|
728
|
+
const branches = await symbols.listBranches('projectId')
|
|
729
|
+
|
|
730
|
+
// Create branch
|
|
731
|
+
await symbols.createFeatureBranch('projectId', 'user authentication')
|
|
732
|
+
// Creates: 'feature/user-authentication'
|
|
733
|
+
|
|
734
|
+
// Check branch status
|
|
735
|
+
const status = await symbols.getBranchStatus('projectId', 'feature/new-ui')
|
|
736
|
+
|
|
737
|
+
// Preview merge
|
|
738
|
+
const preview = await symbols.previewMerge('projectId', 'feature/new-ui', 'main')
|
|
739
|
+
if (preview.data.conflicts.length === 0) {
|
|
740
|
+
// Commit merge if no conflicts
|
|
741
|
+
await symbols.commitMerge('projectId', 'feature/new-ui', {
|
|
742
|
+
message: 'Add new UI features',
|
|
743
|
+
type: 'minor'
|
|
744
|
+
})
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
// Delete branch safely
|
|
748
|
+
await symbols.deleteBranchSafely('projectId', 'feature/old-feature')
|
|
749
|
+
|
|
750
|
+
// Publish version
|
|
751
|
+
await symbols.publishVersion('projectId', {
|
|
752
|
+
version: '1.2.0',
|
|
753
|
+
branch: 'main'
|
|
754
|
+
})
|
|
755
|
+
```
|
|
756
|
+
|
|
757
|
+
## Error Handling
|
|
758
|
+
|
|
759
|
+
The SDK provides comprehensive error handling for all scenarios:
|
|
760
|
+
|
|
761
|
+
```javascript
|
|
762
|
+
try {
|
|
763
|
+
await symbols.mergePullRequest('projectId', 'pr_123')
|
|
764
|
+
} catch (error) {
|
|
765
|
+
if (error.message.includes('conflicts')) {
|
|
766
|
+
// Handle merge conflicts
|
|
767
|
+
console.log('Manual conflict resolution required')
|
|
768
|
+
} else if (error.message.includes('403')) {
|
|
769
|
+
// Handle permission errors
|
|
770
|
+
console.log('Insufficient permissions')
|
|
771
|
+
} else {
|
|
772
|
+
// Handle other errors
|
|
773
|
+
console.error('Operation failed:', error.message)
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
```
|
|
777
|
+
|
|
617
778
|
|
|
618
779
|
|
|
@@ -17,9 +17,11 @@ 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
|
|
20
|
+
default: () => environment_default,
|
|
21
|
+
getConfig: () => getConfig
|
|
21
22
|
});
|
|
22
23
|
module.exports = __toCommonJS(environment_exports);
|
|
24
|
+
var import_utils = require("@domql/utils");
|
|
23
25
|
const CONFIG = {
|
|
24
26
|
// Common defaults for all environments
|
|
25
27
|
common: {
|
|
@@ -33,17 +35,14 @@ const CONFIG = {
|
|
|
33
35
|
},
|
|
34
36
|
// Environment-specific configurations
|
|
35
37
|
local: {
|
|
36
|
-
|
|
37
|
-
// For symstory api
|
|
38
|
+
// local
|
|
38
39
|
socketUrl: "http://localhost:8080",
|
|
39
40
|
// For socket api
|
|
40
|
-
|
|
41
|
-
// For router api
|
|
42
|
-
apiUrl: "http://localhost:13335",
|
|
41
|
+
apiUrl: "http://localhost:8080",
|
|
43
42
|
// For server api
|
|
44
43
|
basedEnv: "development",
|
|
45
44
|
// For based api
|
|
46
|
-
basedProject: "platform-v2",
|
|
45
|
+
basedProject: "platform-v2-sm",
|
|
47
46
|
// For based api
|
|
48
47
|
basedOrg: "symbols",
|
|
49
48
|
// For based api
|
|
@@ -56,41 +55,45 @@ const CONFIG = {
|
|
|
56
55
|
}
|
|
57
56
|
},
|
|
58
57
|
development: {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
58
|
+
socketUrl: "https://dev.api.symbols.app",
|
|
59
|
+
apiUrl: "https://dev.api.symbols.app",
|
|
60
|
+
githubClientId: "Ov23liHxyWFBxS8f1gnF"
|
|
61
|
+
},
|
|
62
|
+
testing: {
|
|
63
|
+
socketUrl: "https://test.api.symbols.app",
|
|
64
|
+
apiUrl: "https://test.api.symbols.app",
|
|
65
|
+
basedEnv: "testing",
|
|
66
|
+
basedProject: "platform-v2-sm",
|
|
65
67
|
basedOrg: "symbols",
|
|
66
68
|
githubClientId: "Ov23liHxyWFBxS8f1gnF"
|
|
67
69
|
},
|
|
70
|
+
upcoming: {
|
|
71
|
+
socketUrl: "https://upcoming.api.symbols.app",
|
|
72
|
+
apiUrl: "https://upcoming.api.symbols.app",
|
|
73
|
+
githubClientId: "Ov23liWF7NvdZ056RV5J"
|
|
74
|
+
},
|
|
68
75
|
staging: {
|
|
69
|
-
|
|
70
|
-
socketUrl: "https://staging.socket.symbols.app",
|
|
71
|
-
routerUrl: "https://staging.router.symbols.app",
|
|
76
|
+
socketUrl: "https://staging.api.symbols.app",
|
|
72
77
|
apiUrl: "https://staging.api.symbols.app",
|
|
73
78
|
basedEnv: "staging",
|
|
74
|
-
basedProject: "platform-v2",
|
|
79
|
+
basedProject: "platform-v2-sm",
|
|
75
80
|
basedOrg: "symbols",
|
|
76
81
|
githubClientId: "Ov23ligwZDQVD0VfuWNa"
|
|
77
82
|
},
|
|
78
83
|
production: {
|
|
79
|
-
|
|
80
|
-
socketUrl: "https://socket.symbols.app",
|
|
81
|
-
routerUrl: "https://router.symbols.app",
|
|
84
|
+
socketUrl: "https://api.symbols.app",
|
|
82
85
|
apiUrl: "https://api.symbols.app",
|
|
83
86
|
basedEnv: "production",
|
|
84
|
-
basedProject: "platform-v2",
|
|
87
|
+
basedProject: "platform-v2-sm",
|
|
85
88
|
basedOrg: "symbols",
|
|
86
89
|
githubClientId: "Ov23liFAlOEIXtX3dBtR"
|
|
87
90
|
}
|
|
88
91
|
};
|
|
89
92
|
const getEnvironment = () => {
|
|
90
|
-
|
|
93
|
+
// @preserve-env
|
|
94
|
+
const env = process.env.SYMBOLS_APP_ENV || process.env.NODE_ENV;
|
|
91
95
|
if (!CONFIG[env]) {
|
|
92
|
-
|
|
93
|
-
return "development";
|
|
96
|
+
throw new Error(`Unknown environment "${env}"`);
|
|
94
97
|
}
|
|
95
98
|
return env;
|
|
96
99
|
};
|
|
@@ -100,25 +103,21 @@ const getConfig = () => {
|
|
|
100
103
|
const envConfig = { ...CONFIG.common, ...CONFIG[env] };
|
|
101
104
|
const finalConfig = {
|
|
102
105
|
...envConfig,
|
|
103
|
-
baseUrl: process.env.SYMBOLS_APP_BASE_URL || envConfig.baseUrl,
|
|
104
106
|
socketUrl: process.env.SYMBOLS_APP_SOCKET_URL || envConfig.socketUrl,
|
|
105
|
-
routerUrl: process.env.SYMBOLS_APP_ROUTER_URL || envConfig.routerUrl,
|
|
106
107
|
apiUrl: process.env.SYMBOLS_APP_API_URL || envConfig.apiUrl,
|
|
107
108
|
basedEnv: process.env.SYMBOLS_APP_BASED_ENV || envConfig.basedEnv,
|
|
108
109
|
basedProject: process.env.SYMBOLS_APP_BASED_PROJECT || envConfig.basedProject,
|
|
109
110
|
basedOrg: process.env.SYMBOLS_APP_BASED_ORG || envConfig.basedOrg,
|
|
110
111
|
githubClientId: process.env.SYMBOLS_APP_GITHUB_CLIENT_ID || envConfig.githubClientId,
|
|
111
|
-
isDevelopment:
|
|
112
|
+
isDevelopment: (0, import_utils.isDevelopment)(env),
|
|
113
|
+
isTesting: env === "testing",
|
|
112
114
|
isStaging: env === "staging",
|
|
113
115
|
isProduction: env === "production"
|
|
116
|
+
// Store all environment variables for potential future use
|
|
114
117
|
};
|
|
115
118
|
const requiredFields = [
|
|
116
|
-
"baseUrl",
|
|
117
119
|
"socketUrl",
|
|
118
120
|
"apiUrl",
|
|
119
|
-
"basedEnv",
|
|
120
|
-
"basedProject",
|
|
121
|
-
"basedOrg",
|
|
122
121
|
"githubClientId",
|
|
123
122
|
"googleClientId"
|
|
124
123
|
];
|
|
@@ -131,9 +130,7 @@ const getConfig = () => {
|
|
|
131
130
|
if (finalConfig.isDevelopment) {
|
|
132
131
|
console.log(
|
|
133
132
|
"environment in SDK:",
|
|
134
|
-
env
|
|
135
|
-
"",
|
|
136
|
-
process.env.SYMBOLS_APP_ENV
|
|
133
|
+
env || process.env.NODE_ENV || process.env.NODE_ENV
|
|
137
134
|
);
|
|
138
135
|
console.log(finalConfig);
|
|
139
136
|
}
|
|
@@ -141,14 +138,7 @@ const getConfig = () => {
|
|
|
141
138
|
} catch (error) {
|
|
142
139
|
console.error("Failed to load environment configuration:", error);
|
|
143
140
|
return {
|
|
144
|
-
|
|
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"
|
|
141
|
+
...CONFIG.development
|
|
152
142
|
};
|
|
153
143
|
}
|
|
154
144
|
};
|
package/dist/cjs/index.js
CHANGED
|
@@ -28,14 +28,17 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
28
28
|
var index_exports = {};
|
|
29
29
|
__export(index_exports, {
|
|
30
30
|
SDK: () => SDK,
|
|
31
|
+
createAuthService: () => import_services3.createAuthService,
|
|
32
|
+
createCollabService: () => import_services3.createCollabService,
|
|
33
|
+
createCoreService: () => import_services3.createCoreService,
|
|
31
34
|
default: () => index_default,
|
|
32
35
|
environment: () => import_environment2.default
|
|
33
36
|
});
|
|
34
37
|
module.exports = __toCommonJS(index_exports);
|
|
35
38
|
var import_services = require("./services/index.js");
|
|
36
39
|
var import_services2 = require("./utils/services.js");
|
|
37
|
-
var import_SymstoryService = require("./services/SymstoryService.js");
|
|
38
40
|
var import_environment = __toESM(require("./config/environment.js"), 1);
|
|
41
|
+
var import_services3 = require("./services/index.js");
|
|
39
42
|
var import_environment2 = __toESM(require("./config/environment.js"), 1);
|
|
40
43
|
class SDK {
|
|
41
44
|
constructor(options = {}) {
|
|
@@ -44,19 +47,13 @@ class SDK {
|
|
|
44
47
|
this._options = this._validateOptions(options);
|
|
45
48
|
this._createServiceProxies();
|
|
46
49
|
}
|
|
50
|
+
// Initialize SDK with context
|
|
47
51
|
async initialize(context = {}) {
|
|
48
52
|
this._context = {
|
|
49
53
|
...this._context,
|
|
50
54
|
...context
|
|
51
55
|
};
|
|
52
56
|
await Promise.all([
|
|
53
|
-
this._initService(
|
|
54
|
-
"based",
|
|
55
|
-
(0, import_services.createBasedService)({
|
|
56
|
-
context: this._context,
|
|
57
|
-
options: this._options
|
|
58
|
-
})
|
|
59
|
-
),
|
|
60
57
|
this._initService(
|
|
61
58
|
"auth",
|
|
62
59
|
(0, import_services.createAuthService)({
|
|
@@ -65,22 +62,15 @@ class SDK {
|
|
|
65
62
|
})
|
|
66
63
|
),
|
|
67
64
|
this._initService(
|
|
68
|
-
"
|
|
69
|
-
(0, import_services.
|
|
65
|
+
"core",
|
|
66
|
+
(0, import_services.createCoreService)({
|
|
70
67
|
context: this._context,
|
|
71
68
|
options: this._options
|
|
72
69
|
})
|
|
73
70
|
),
|
|
74
71
|
this._initService(
|
|
75
|
-
"
|
|
76
|
-
(0, import_services.
|
|
77
|
-
context: this._context,
|
|
78
|
-
options: this._options
|
|
79
|
-
})
|
|
80
|
-
),
|
|
81
|
-
this._initService(
|
|
82
|
-
"ai",
|
|
83
|
-
(0, import_services.createAIService)({
|
|
72
|
+
"collab",
|
|
73
|
+
(0, import_services.createCollabService)({
|
|
84
74
|
context: this._context,
|
|
85
75
|
options: this._options
|
|
86
76
|
})
|
|
@@ -104,7 +94,7 @@ class SDK {
|
|
|
104
94
|
const defaults = {
|
|
105
95
|
useNewServices: true,
|
|
106
96
|
// Use new service implementations by default
|
|
107
|
-
|
|
97
|
+
apiUrl: import_environment.default.apiUrl,
|
|
108
98
|
socketUrl: import_environment.default.socketUrl,
|
|
109
99
|
timeout: 3e4,
|
|
110
100
|
retryAttempts: 3,
|
|
@@ -127,14 +117,12 @@ class SDK {
|
|
|
127
117
|
};
|
|
128
118
|
for (const service of this._services.values()) {
|
|
129
119
|
service.updateContext(this._context);
|
|
130
|
-
if (service instanceof import_SymstoryService.SymstoryService) {
|
|
131
|
-
service.init();
|
|
132
|
-
}
|
|
133
120
|
}
|
|
134
121
|
}
|
|
135
122
|
// Check if SDK is ready
|
|
136
123
|
isReady() {
|
|
137
|
-
|
|
124
|
+
const sdkServices = Array.from(this._services.values());
|
|
125
|
+
return sdkServices.length > 0 && sdkServices.every(
|
|
138
126
|
(service) => service.isReady()
|
|
139
127
|
);
|
|
140
128
|
}
|
|
@@ -165,5 +153,24 @@ class SDK {
|
|
|
165
153
|
}
|
|
166
154
|
}
|
|
167
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Destroys all services and cleans up resources
|
|
158
|
+
* @returns {Promise<boolean>} Returns true when cleanup is complete
|
|
159
|
+
*/
|
|
160
|
+
async destroy() {
|
|
161
|
+
try {
|
|
162
|
+
const destroyPromises = Array.from(this._services.entries()).filter(([, service]) => typeof service.destroy === "function").map(async ([name, service]) => {
|
|
163
|
+
await service.destroy();
|
|
164
|
+
console.log(`Service ${name} destroyed successfully`);
|
|
165
|
+
});
|
|
166
|
+
await Promise.all(destroyPromises);
|
|
167
|
+
this._services.clear();
|
|
168
|
+
this._context = {};
|
|
169
|
+
return true;
|
|
170
|
+
} catch (error) {
|
|
171
|
+
console.error("Error during SDK destruction:", error);
|
|
172
|
+
throw error;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
168
175
|
}
|
|
169
176
|
var index_default = SDK;
|
|
@@ -27,7 +27,7 @@ class AIService extends import_BaseService.BaseService {
|
|
|
27
27
|
this._client = null;
|
|
28
28
|
this._initialized = false;
|
|
29
29
|
this._defaultConfig = {
|
|
30
|
-
|
|
30
|
+
apiUrl: "https://api.openai.com/v1/engines/text-curie/completions",
|
|
31
31
|
temperature: 0,
|
|
32
32
|
maxTokens: 2e3,
|
|
33
33
|
headers: {
|
|
@@ -71,7 +71,7 @@ class AIService extends import_BaseService.BaseService {
|
|
|
71
71
|
};
|
|
72
72
|
}
|
|
73
73
|
validateConfig(config = {}) {
|
|
74
|
-
const requiredFields = ["
|
|
74
|
+
const requiredFields = ["apiUrl", "temperature", "maxTokens"];
|
|
75
75
|
const missingFields = requiredFields.filter((field) => !config[field]);
|
|
76
76
|
if (missingFields.length > 0) {
|
|
77
77
|
throw new Error(
|
|
@@ -99,7 +99,7 @@ class AIService extends import_BaseService.BaseService {
|
|
|
99
99
|
...opts
|
|
100
100
|
})
|
|
101
101
|
};
|
|
102
|
-
const response = await this._request(config.
|
|
102
|
+
const response = await this._request(config.apiUrl, options);
|
|
103
103
|
return response;
|
|
104
104
|
} catch (error) {
|
|
105
105
|
throw new Error(`AI prompt failed: ${error.message}`);
|
|
@@ -109,15 +109,53 @@ class AuthService extends import_BaseService.BaseService {
|
|
|
109
109
|
async googleAuth(idToken) {
|
|
110
110
|
try {
|
|
111
111
|
const based = this._getBasedService("googleAuth");
|
|
112
|
-
|
|
112
|
+
const response = await based.call("users:google-auth", { idToken });
|
|
113
|
+
if (this._initialized) {
|
|
114
|
+
this.updateContext({ authToken: response.token });
|
|
115
|
+
}
|
|
116
|
+
based.setAuthState({
|
|
117
|
+
token: response.token,
|
|
118
|
+
userId: response.userId,
|
|
119
|
+
persistent: true
|
|
120
|
+
});
|
|
121
|
+
return response;
|
|
113
122
|
} catch (error) {
|
|
114
123
|
throw new Error(`Google auth failed: ${error.message}`);
|
|
115
124
|
}
|
|
116
125
|
}
|
|
126
|
+
async googleAuthCallback(code, redirectUri) {
|
|
127
|
+
try {
|
|
128
|
+
const based = this._getBasedService("googleAuthCallback");
|
|
129
|
+
const response = await based.call("users:google-auth-callback", {
|
|
130
|
+
code,
|
|
131
|
+
redirectUri
|
|
132
|
+
});
|
|
133
|
+
if (this._initialized) {
|
|
134
|
+
this.updateContext({ authToken: response.token });
|
|
135
|
+
}
|
|
136
|
+
based.setAuthState({
|
|
137
|
+
token: response.token,
|
|
138
|
+
userId: response.userId,
|
|
139
|
+
persistent: true
|
|
140
|
+
});
|
|
141
|
+
return response;
|
|
142
|
+
} catch (error) {
|
|
143
|
+
throw new Error(`Google auth callback failed: ${error.message}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
117
146
|
async githubAuth(code) {
|
|
118
147
|
try {
|
|
119
148
|
const based = this._getBasedService("githubAuth");
|
|
120
|
-
|
|
149
|
+
const response = await based.call("users:github-auth", { code });
|
|
150
|
+
if (this._initialized) {
|
|
151
|
+
this.updateContext({ authToken: response.token });
|
|
152
|
+
}
|
|
153
|
+
based.setAuthState({
|
|
154
|
+
token: response.token,
|
|
155
|
+
userId: response.userId,
|
|
156
|
+
persistent: true
|
|
157
|
+
});
|
|
158
|
+
return response;
|
|
121
159
|
} catch (error) {
|
|
122
160
|
throw new Error(`GitHub auth failed: ${error.message}`);
|
|
123
161
|
}
|
|
@@ -126,7 +164,7 @@ class AuthService extends import_BaseService.BaseService {
|
|
|
126
164
|
this._requireReady("logout");
|
|
127
165
|
try {
|
|
128
166
|
const based = this._getBasedService("logout");
|
|
129
|
-
await based.call("logout");
|
|
167
|
+
await based.call("users:logout");
|
|
130
168
|
this.updateContext({ authToken: null });
|
|
131
169
|
} catch (error) {
|
|
132
170
|
throw new Error(`Logout failed: ${error.message}`);
|
|
@@ -308,6 +346,7 @@ class AuthService extends import_BaseService.BaseService {
|
|
|
308
346
|
}, 0);
|
|
309
347
|
}
|
|
310
348
|
async getProjectMembers(projectId) {
|
|
349
|
+
var _a;
|
|
311
350
|
this._requireReady("getProjectMembers");
|
|
312
351
|
if (!projectId) {
|
|
313
352
|
throw new Error("Project ID is required");
|
|
@@ -316,6 +355,8 @@ class AuthService extends import_BaseService.BaseService {
|
|
|
316
355
|
const based = this._getBasedService("getProjectMembers");
|
|
317
356
|
return await based.call("projects:get-members", { projectId });
|
|
318
357
|
} catch (error) {
|
|
358
|
+
if ((_a = error.message) == null ? void 0 : _a.includes("Authentication failed. Please try again"))
|
|
359
|
+
window.location.reload();
|
|
319
360
|
throw new Error(`Failed to get project members: ${error.message}`);
|
|
320
361
|
}
|
|
321
362
|
}
|