@cmdoss/memwal-sdk 0.6.2 → 0.8.0
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/ARCHITECTURE.md +547 -547
- package/BENCHMARKS.md +238 -238
- package/README.md +310 -181
- package/dist/ai-sdk/tools.d.ts +2 -2
- package/dist/ai-sdk/tools.js +2 -2
- package/dist/client/ClientMemoryManager.js +2 -2
- package/dist/client/ClientMemoryManager.js.map +1 -1
- package/dist/client/PersonalDataWallet.d.ts.map +1 -1
- package/dist/client/SimplePDWClient.d.ts +29 -1
- package/dist/client/SimplePDWClient.d.ts.map +1 -1
- package/dist/client/SimplePDWClient.js +45 -13
- package/dist/client/SimplePDWClient.js.map +1 -1
- package/dist/client/namespaces/EmbeddingsNamespace.d.ts +1 -1
- package/dist/client/namespaces/EmbeddingsNamespace.js +1 -1
- package/dist/client/namespaces/MemoryNamespace.d.ts +31 -0
- package/dist/client/namespaces/MemoryNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/MemoryNamespace.js +272 -39
- package/dist/client/namespaces/MemoryNamespace.js.map +1 -1
- package/dist/client/namespaces/consolidated/AINamespace.d.ts +2 -2
- package/dist/client/namespaces/consolidated/AINamespace.js +2 -2
- package/dist/client/namespaces/consolidated/BlockchainNamespace.d.ts +12 -2
- package/dist/client/namespaces/consolidated/BlockchainNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/consolidated/BlockchainNamespace.js +62 -4
- package/dist/client/namespaces/consolidated/BlockchainNamespace.js.map +1 -1
- package/dist/client/namespaces/consolidated/StorageNamespace.d.ts +67 -2
- package/dist/client/namespaces/consolidated/StorageNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/consolidated/StorageNamespace.js +549 -16
- package/dist/client/namespaces/consolidated/StorageNamespace.js.map +1 -1
- package/dist/config/ConfigurationHelper.js +61 -61
- package/dist/config/defaults.js +2 -2
- package/dist/config/defaults.js.map +1 -1
- package/dist/graph/GraphService.js +21 -21
- package/dist/graph/GraphService.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/seal/EncryptionService.d.ts +9 -5
- package/dist/infrastructure/seal/EncryptionService.d.ts.map +1 -1
- package/dist/infrastructure/seal/EncryptionService.js +37 -15
- package/dist/infrastructure/seal/EncryptionService.js.map +1 -1
- package/dist/infrastructure/seal/SealService.d.ts +13 -5
- package/dist/infrastructure/seal/SealService.d.ts.map +1 -1
- package/dist/infrastructure/seal/SealService.js +36 -34
- package/dist/infrastructure/seal/SealService.js.map +1 -1
- package/dist/langchain/createPDWRAG.js +30 -30
- package/dist/retrieval/MemoryDecryptionPipeline.d.ts.map +1 -1
- package/dist/retrieval/MemoryDecryptionPipeline.js +2 -1
- package/dist/retrieval/MemoryDecryptionPipeline.js.map +1 -1
- package/dist/retrieval/MemoryRetrievalService.d.ts +31 -0
- package/dist/retrieval/MemoryRetrievalService.d.ts.map +1 -1
- package/dist/retrieval/MemoryRetrievalService.js +44 -4
- package/dist/retrieval/MemoryRetrievalService.js.map +1 -1
- package/dist/services/CapabilityService.d.ts.map +1 -1
- package/dist/services/CapabilityService.js +30 -14
- package/dist/services/CapabilityService.js.map +1 -1
- package/dist/services/CrossContextPermissionService.d.ts.map +1 -1
- package/dist/services/CrossContextPermissionService.js +9 -7
- package/dist/services/CrossContextPermissionService.js.map +1 -1
- package/dist/services/EmbeddingService.d.ts +28 -1
- package/dist/services/EmbeddingService.d.ts.map +1 -1
- package/dist/services/EmbeddingService.js +54 -0
- package/dist/services/EmbeddingService.js.map +1 -1
- package/dist/services/EncryptionService.d.ts.map +1 -1
- package/dist/services/EncryptionService.js +6 -5
- package/dist/services/EncryptionService.js.map +1 -1
- package/dist/services/GeminiAIService.js +309 -309
- package/dist/services/IndexManager.d.ts +5 -1
- package/dist/services/IndexManager.d.ts.map +1 -1
- package/dist/services/IndexManager.js +17 -40
- package/dist/services/IndexManager.js.map +1 -1
- package/dist/services/QueryService.js +1 -1
- package/dist/services/QueryService.js.map +1 -1
- package/dist/services/StorageService.d.ts +11 -0
- package/dist/services/StorageService.d.ts.map +1 -1
- package/dist/services/StorageService.js +73 -10
- package/dist/services/StorageService.js.map +1 -1
- package/dist/services/TransactionService.d.ts +20 -0
- package/dist/services/TransactionService.d.ts.map +1 -1
- package/dist/services/TransactionService.js +43 -0
- package/dist/services/TransactionService.js.map +1 -1
- package/dist/services/ViewService.js +2 -2
- package/dist/services/ViewService.js.map +1 -1
- package/dist/services/storage/QuiltBatchManager.d.ts +101 -1
- package/dist/services/storage/QuiltBatchManager.d.ts.map +1 -1
- package/dist/services/storage/QuiltBatchManager.js +410 -20
- package/dist/services/storage/QuiltBatchManager.js.map +1 -1
- package/dist/services/storage/index.d.ts +1 -1
- package/dist/services/storage/index.d.ts.map +1 -1
- package/dist/services/storage/index.js.map +1 -1
- package/dist/utils/LRUCache.d.ts +106 -0
- package/dist/utils/LRUCache.d.ts.map +1 -0
- package/dist/utils/LRUCache.js +281 -0
- package/dist/utils/LRUCache.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/memoryIndexOnChain.d.ts +212 -0
- package/dist/utils/memoryIndexOnChain.d.ts.map +1 -0
- package/dist/utils/memoryIndexOnChain.js +312 -0
- package/dist/utils/memoryIndexOnChain.js.map +1 -0
- package/dist/utils/rebuildIndexNode.d.ts +29 -0
- package/dist/utils/rebuildIndexNode.d.ts.map +1 -1
- package/dist/utils/rebuildIndexNode.js +366 -98
- package/dist/utils/rebuildIndexNode.js.map +1 -1
- package/dist/vector/HnswWasmService.d.ts +20 -5
- package/dist/vector/HnswWasmService.d.ts.map +1 -1
- package/dist/vector/HnswWasmService.js +73 -40
- package/dist/vector/HnswWasmService.js.map +1 -1
- package/dist/vector/IHnswService.d.ts +10 -1
- package/dist/vector/IHnswService.d.ts.map +1 -1
- package/dist/vector/IHnswService.js.map +1 -1
- package/dist/vector/NodeHnswService.d.ts +16 -0
- package/dist/vector/NodeHnswService.d.ts.map +1 -1
- package/dist/vector/NodeHnswService.js +84 -5
- package/dist/vector/NodeHnswService.js.map +1 -1
- package/dist/vector/createHnswService.d.ts +1 -1
- package/dist/vector/createHnswService.js +1 -1
- package/dist/vector/index.d.ts +1 -1
- package/dist/vector/index.js +1 -1
- package/package.json +157 -157
- package/src/access/PermissionService.ts +635 -635
- package/src/aggregation/AggregationService.ts +389 -389
- package/src/ai-sdk/PDWVectorStore.ts +715 -715
- package/src/ai-sdk/index.ts +65 -65
- package/src/ai-sdk/tools.ts +460 -460
- package/src/ai-sdk/types.ts +404 -404
- package/src/batch/BatchManager.ts +597 -597
- package/src/batch/BatchingService.ts +429 -429
- package/src/batch/MemoryProcessingCache.ts +492 -492
- package/src/batch/index.ts +30 -30
- package/src/browser.ts +200 -200
- package/src/client/ClientMemoryManager.ts +987 -987
- package/src/client/PersonalDataWallet.ts +345 -345
- package/src/client/SimplePDWClient.ts +1289 -1222
- package/src/client/factory.ts +154 -154
- package/src/client/namespaces/AnalyticsNamespace.ts +377 -377
- package/src/client/namespaces/BatchNamespace.ts +356 -356
- package/src/client/namespaces/CacheNamespace.ts +123 -123
- package/src/client/namespaces/CapabilityNamespace.ts +217 -217
- package/src/client/namespaces/ClassifyNamespace.ts +169 -169
- package/src/client/namespaces/ContextNamespace.ts +297 -297
- package/src/client/namespaces/EmbeddingsNamespace.ts +99 -99
- package/src/client/namespaces/EncryptionNamespace.ts +221 -221
- package/src/client/namespaces/GraphNamespace.ts +468 -468
- package/src/client/namespaces/IndexNamespace.ts +361 -361
- package/src/client/namespaces/MemoryNamespace.ts +1422 -1135
- package/src/client/namespaces/PermissionsNamespace.ts +254 -254
- package/src/client/namespaces/PipelineNamespace.ts +220 -220
- package/src/client/namespaces/SearchNamespace.ts +1049 -1049
- package/src/client/namespaces/StorageNamespace.ts +458 -458
- package/src/client/namespaces/TxNamespace.ts +260 -260
- package/src/client/namespaces/WalletNamespace.ts +243 -243
- package/src/client/namespaces/consolidated/AINamespace.ts +449 -449
- package/src/client/namespaces/consolidated/BlockchainNamespace.ts +607 -546
- package/src/client/namespaces/consolidated/SecurityNamespace.ts +648 -648
- package/src/client/namespaces/consolidated/StorageNamespace.ts +1141 -497
- package/src/client/namespaces/consolidated/index.ts +39 -39
- package/src/client/signers/KeypairSigner.ts +108 -108
- package/src/client/signers/UnifiedSigner.ts +110 -110
- package/src/client/signers/WalletAdapterSigner.ts +159 -159
- package/src/client/signers/index.ts +26 -26
- package/src/config/ConfigurationHelper.ts +412 -412
- package/src/config/defaults.ts +51 -51
- package/src/config/index.ts +8 -8
- package/src/config/validation.ts +70 -70
- package/src/core/index.ts +14 -14
- package/src/core/interfaces/IService.ts +307 -307
- package/src/core/interfaces/index.ts +8 -8
- package/src/core/types/capability.ts +297 -297
- package/src/core/types/index.ts +870 -870
- package/src/core/types/wallet.ts +270 -270
- package/src/core/types.ts +9 -9
- package/src/core/wallet.ts +222 -222
- package/src/embedding/index.ts +19 -19
- package/src/embedding/types.ts +357 -357
- package/src/errors/index.ts +602 -602
- package/src/errors/recovery.ts +461 -461
- package/src/errors/validation.ts +567 -567
- package/src/generated/pdw/capability.ts +319 -319
- package/src/graph/GraphService.ts +887 -887
- package/src/graph/KnowledgeGraphManager.ts +728 -728
- package/src/graph/index.ts +25 -25
- package/src/index.ts +498 -474
- package/src/infrastructure/index.ts +22 -22
- package/src/infrastructure/seal/EncryptionService.ts +628 -603
- package/src/infrastructure/seal/SealService.ts +613 -615
- package/src/infrastructure/seal/index.ts +9 -9
- package/src/infrastructure/sui/BlockchainManager.ts +627 -627
- package/src/infrastructure/sui/SuiService.ts +888 -888
- package/src/infrastructure/sui/index.ts +9 -9
- package/src/infrastructure/walrus/StorageManager.ts +604 -604
- package/src/infrastructure/walrus/WalrusStorageService.ts +612 -612
- package/src/infrastructure/walrus/index.ts +9 -9
- package/src/langchain/PDWEmbeddings.ts +145 -145
- package/src/langchain/PDWVectorStore.ts +456 -456
- package/src/langchain/createPDWRAG.ts +303 -303
- package/src/langchain/index.ts +47 -47
- package/src/permissions/ConsentRepository.browser.ts +249 -249
- package/src/permissions/ConsentRepository.ts +364 -364
- package/src/pipeline/MemoryPipeline.ts +862 -862
- package/src/pipeline/PipelineManager.ts +683 -683
- package/src/pipeline/index.ts +26 -26
- package/src/retrieval/AdvancedSearchService.ts +629 -629
- package/src/retrieval/MemoryAnalyticsService.ts +711 -711
- package/src/retrieval/MemoryDecryptionPipeline.ts +825 -824
- package/src/retrieval/MemoryRetrievalService.ts +904 -830
- package/src/retrieval/index.ts +42 -42
- package/src/services/BatchService.ts +352 -352
- package/src/services/CapabilityService.ts +464 -448
- package/src/services/ClassifierService.ts +465 -465
- package/src/services/CrossContextPermissionService.ts +486 -484
- package/src/services/EmbeddingService.ts +771 -706
- package/src/services/EncryptionService.ts +712 -711
- package/src/services/GeminiAIService.ts +753 -753
- package/src/services/IndexManager.ts +977 -1004
- package/src/services/MemoryIndexService.ts +1003 -1003
- package/src/services/MemoryService.ts +369 -369
- package/src/services/QueryService.ts +890 -890
- package/src/services/StorageService.ts +1182 -1111
- package/src/services/TransactionService.ts +838 -790
- package/src/services/VectorService.ts +462 -462
- package/src/services/ViewService.ts +484 -484
- package/src/services/index.ts +25 -25
- package/src/services/storage/BlobAttributesManager.ts +333 -333
- package/src/services/storage/KnowledgeGraphManager.ts +425 -425
- package/src/services/storage/MemorySearchManager.ts +387 -387
- package/src/services/storage/QuiltBatchManager.ts +1130 -660
- package/src/services/storage/WalrusMetadataManager.ts +268 -268
- package/src/services/storage/WalrusStorageManager.ts +287 -287
- package/src/services/storage/index.ts +57 -52
- package/src/types/index.ts +13 -13
- package/src/utils/LRUCache.ts +378 -0
- package/src/utils/index.ts +76 -68
- package/src/utils/memoryIndexOnChain.ts +507 -0
- package/src/utils/rebuildIndex.ts +290 -290
- package/src/utils/rebuildIndexNode.ts +771 -424
- package/src/vector/BrowserHnswIndexService.ts +758 -758
- package/src/vector/HnswWasmService.ts +731 -679
- package/src/vector/IHnswService.ts +233 -224
- package/src/vector/NodeHnswService.ts +833 -735
- package/src/vector/VectorManager.ts +478 -478
- package/src/vector/createHnswService.ts +135 -135
- package/src/vector/index.ts +56 -56
- package/src/wallet/ContextWalletService.ts +656 -656
- package/src/wallet/MainWalletService.ts +317 -317
|
@@ -1,413 +1,413 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Configuration Utilities for Personal Data Wallet SDK
|
|
3
|
-
*
|
|
4
|
-
* Provides helpers for managing API keys, environment variables,
|
|
5
|
-
* and configuration validation across the SDK.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
export interface SDKConfig {
|
|
9
|
-
// AI/Embedding configuration
|
|
10
|
-
geminiApiKey?: string;
|
|
11
|
-
embeddingModel?: string;
|
|
12
|
-
|
|
13
|
-
// Blockchain configuration
|
|
14
|
-
suiNetwork?: 'testnet' | 'mainnet' | 'devnet' | 'localnet';
|
|
15
|
-
suiPackageId?: string;
|
|
16
|
-
suiAdminPrivateKey?: string;
|
|
17
|
-
|
|
18
|
-
// Storage configuration
|
|
19
|
-
walrusNetwork?: 'testnet' | 'mainnet';
|
|
20
|
-
walrusUploadRelay?: string;
|
|
21
|
-
|
|
22
|
-
// SEAL encryption configuration
|
|
23
|
-
sealKeyServerUrl?: string;
|
|
24
|
-
sealKeyServerObjectId?: string;
|
|
25
|
-
sealSessionTTL?: number;
|
|
26
|
-
sealEnableBatch?: boolean;
|
|
27
|
-
sealBatchSize?: number;
|
|
28
|
-
sealDecryptionTimeout?: number;
|
|
29
|
-
sealVerifyServers?: boolean;
|
|
30
|
-
sealEnableAudit?: boolean;
|
|
31
|
-
|
|
32
|
-
// Feature flags
|
|
33
|
-
enableEncryption?: boolean;
|
|
34
|
-
enableBatching?: boolean;
|
|
35
|
-
enableMonitoring?: boolean;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export interface EnvironmentConfig {
|
|
39
|
-
// Gemini AI
|
|
40
|
-
GEMINI_API_KEY?: string;
|
|
41
|
-
GOOGLE_AI_API_KEY?: string;
|
|
42
|
-
|
|
43
|
-
// Sui Blockchain
|
|
44
|
-
SUI_NETWORK?: string;
|
|
45
|
-
SUI_PACKAGE_ID?: string;
|
|
46
|
-
SUI_ADMIN_PRIVATE_KEY?: string;
|
|
47
|
-
|
|
48
|
-
// Walrus Storage
|
|
49
|
-
WALRUS_NETWORK?: string;
|
|
50
|
-
WALRUS_UPLOAD_RELAY?: string;
|
|
51
|
-
|
|
52
|
-
// SEAL Encryption
|
|
53
|
-
SEAL_KEY_SERVER_URL?: string;
|
|
54
|
-
SEAL_KEY_SERVER_OBJECT_ID?: string;
|
|
55
|
-
SEAL_SESSION_TTL?: string;
|
|
56
|
-
SEAL_ENABLE_BATCH?: string;
|
|
57
|
-
SEAL_BATCH_SIZE?: string;
|
|
58
|
-
SEAL_DECRYPTION_TIMEOUT?: string;
|
|
59
|
-
SEAL_VERIFY_SERVERS?: string;
|
|
60
|
-
SEAL_ENABLE_AUDIT?: string;
|
|
61
|
-
|
|
62
|
-
// Feature toggles
|
|
63
|
-
PDW_ENABLE_ENCRYPTION?: string;
|
|
64
|
-
PDW_ENABLE_BATCHING?: string;
|
|
65
|
-
PDW_ENABLE_MONITORING?: string;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Configuration helper with environment variable support
|
|
70
|
-
*/
|
|
71
|
-
export class ConfigurationHelper {
|
|
72
|
-
constructor() {
|
|
73
|
-
// Instance constructor for backwards compatibility
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Get Gemini API key from various sources
|
|
77
|
-
*/
|
|
78
|
-
static getGeminiApiKey(providedKey?: string): string {
|
|
79
|
-
const apiKey = providedKey ||
|
|
80
|
-
process.env.GEMINI_API_KEY ||
|
|
81
|
-
process.env.GOOGLE_AI_API_KEY;
|
|
82
|
-
|
|
83
|
-
if (!apiKey) {
|
|
84
|
-
throw new Error(
|
|
85
|
-
'🔑 Gemini API key is required. Set it via:\n\n' +
|
|
86
|
-
'1. Direct configuration:\n' +
|
|
87
|
-
' const pipeline = createQuickStartPipeline("BASIC", {\n' +
|
|
88
|
-
' embedding: { apiKey: "your-api-key" }\n' +
|
|
89
|
-
' });\n\n' +
|
|
90
|
-
'2. Environment variable:\n' +
|
|
91
|
-
' export GEMINI_API_KEY="your-api-key"\n' +
|
|
92
|
-
' # or\n' +
|
|
93
|
-
' export GOOGLE_AI_API_KEY="your-api-key"\n\n' +
|
|
94
|
-
'3. .env file:\n' +
|
|
95
|
-
' GEMINI_API_KEY=your-api-key\n\n' +
|
|
96
|
-
'📝 Get your free API key from: https://makersuite.google.com/app/apikey'
|
|
97
|
-
);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
return apiKey;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Get Sui configuration from environment
|
|
105
|
-
*/
|
|
106
|
-
static getSuiConfig(): {
|
|
107
|
-
network: 'testnet' | 'mainnet' | 'devnet' | 'localnet';
|
|
108
|
-
packageId?: string;
|
|
109
|
-
adminPrivateKey?: string;
|
|
110
|
-
} {
|
|
111
|
-
const network = (process.env.SUI_NETWORK as any) || 'testnet';
|
|
112
|
-
|
|
113
|
-
return {
|
|
114
|
-
network,
|
|
115
|
-
packageId: process.env.SUI_PACKAGE_ID,
|
|
116
|
-
adminPrivateKey: process.env.SUI_ADMIN_PRIVATE_KEY
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Get Walrus configuration from environment
|
|
122
|
-
*/
|
|
123
|
-
static getWalrusConfig(): {
|
|
124
|
-
network: 'testnet' | 'mainnet';
|
|
125
|
-
uploadRelay?: string;
|
|
126
|
-
} {
|
|
127
|
-
const network = (process.env.WALRUS_NETWORK as any) || 'testnet';
|
|
128
|
-
|
|
129
|
-
return {
|
|
130
|
-
network,
|
|
131
|
-
uploadRelay: process.env.WALRUS_UPLOAD_RELAY
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Get SEAL key server configuration from environment
|
|
137
|
-
*/
|
|
138
|
-
static getSealConfig(): {
|
|
139
|
-
keyServerUrl?: string;
|
|
140
|
-
keyServerObjectId?: string;
|
|
141
|
-
sessionTTL: number;
|
|
142
|
-
enableBatch: boolean;
|
|
143
|
-
batchSize: number;
|
|
144
|
-
decryptionTimeout: number;
|
|
145
|
-
verifyServers: boolean;
|
|
146
|
-
enableAudit: boolean;
|
|
147
|
-
network: string;
|
|
148
|
-
retryAttempts: number;
|
|
149
|
-
} {
|
|
150
|
-
return {
|
|
151
|
-
keyServerUrl: process.env.SEAL_KEY_SERVER_URL || 'https://testnet.seal.mysten.app',
|
|
152
|
-
keyServerObjectId: process.env.SEAL_KEY_SERVER_OBJECT_ID,
|
|
153
|
-
sessionTTL: process.env.SEAL_SESSION_TTL ? parseInt(process.env.SEAL_SESSION_TTL) : 60,
|
|
154
|
-
enableBatch: process.env.SEAL_ENABLE_BATCH === 'true',
|
|
155
|
-
batchSize: process.env.SEAL_BATCH_SIZE ? parseInt(process.env.SEAL_BATCH_SIZE) : 10,
|
|
156
|
-
decryptionTimeout: process.env.SEAL_DECRYPTION_TIMEOUT ? parseInt(process.env.SEAL_DECRYPTION_TIMEOUT) : 30000,
|
|
157
|
-
verifyServers: process.env.SEAL_VERIFY_SERVERS !== 'false', // Default true
|
|
158
|
-
enableAudit: process.env.SEAL_ENABLE_AUDIT === 'true',
|
|
159
|
-
network: process.env.SEAL_NETWORK || 'testnet',
|
|
160
|
-
retryAttempts: process.env.SEAL_RETRY_ATTEMPTS ? parseInt(process.env.SEAL_RETRY_ATTEMPTS) : 3
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* Instance method for getSealConfig (for backwards compatibility)
|
|
166
|
-
*/
|
|
167
|
-
getSealConfig(): {
|
|
168
|
-
keyServerUrl?: string;
|
|
169
|
-
keyServerObjectId?: string;
|
|
170
|
-
sessionTTL: number;
|
|
171
|
-
enableBatch: boolean;
|
|
172
|
-
batchSize: number;
|
|
173
|
-
decryptionTimeout: number;
|
|
174
|
-
verifyServers: boolean;
|
|
175
|
-
enableAudit: boolean;
|
|
176
|
-
network: string;
|
|
177
|
-
retryAttempts: number;
|
|
178
|
-
} {
|
|
179
|
-
return ConfigurationHelper.getSealConfig();
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
/**
|
|
183
|
-
* Load configuration from environment variables
|
|
184
|
-
*/
|
|
185
|
-
static loadFromEnvironment(): SDKConfig {
|
|
186
|
-
return {
|
|
187
|
-
// AI Configuration
|
|
188
|
-
geminiApiKey: process.env.GEMINI_API_KEY || process.env.GOOGLE_AI_API_KEY,
|
|
189
|
-
embeddingModel: process.env.EMBEDDING_MODEL || 'text-embedding-004',
|
|
190
|
-
|
|
191
|
-
// Blockchain Configuration
|
|
192
|
-
suiNetwork: (process.env.SUI_NETWORK as any) || 'testnet',
|
|
193
|
-
suiPackageId: process.env.SUI_PACKAGE_ID,
|
|
194
|
-
suiAdminPrivateKey: process.env.SUI_ADMIN_PRIVATE_KEY,
|
|
195
|
-
|
|
196
|
-
// Storage Configuration
|
|
197
|
-
walrusNetwork: (process.env.WALRUS_NETWORK as any) || 'testnet',
|
|
198
|
-
walrusUploadRelay: process.env.WALRUS_UPLOAD_RELAY,
|
|
199
|
-
|
|
200
|
-
// Feature Flags
|
|
201
|
-
enableEncryption: this.parseBooleanEnv('PDW_ENABLE_ENCRYPTION', true),
|
|
202
|
-
enableBatching: this.parseBooleanEnv('PDW_ENABLE_BATCHING', true),
|
|
203
|
-
enableMonitoring: this.parseBooleanEnv('PDW_ENABLE_MONITORING', true)
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
/**
|
|
208
|
-
* Validate that required configuration is present
|
|
209
|
-
*/
|
|
210
|
-
static validateConfig(config: Partial<SDKConfig>): {
|
|
211
|
-
isValid: boolean;
|
|
212
|
-
errors: string[];
|
|
213
|
-
warnings: string[];
|
|
214
|
-
} {
|
|
215
|
-
const errors: string[] = [];
|
|
216
|
-
const warnings: string[] = [];
|
|
217
|
-
|
|
218
|
-
// Check for Gemini API key
|
|
219
|
-
try {
|
|
220
|
-
this.getGeminiApiKey(config.geminiApiKey);
|
|
221
|
-
} catch (error) {
|
|
222
|
-
errors.push('Missing Gemini API key for AI embedding generation');
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
// Validate Sui configuration
|
|
226
|
-
if (config.suiPackageId && !config.suiPackageId.startsWith('0x')) {
|
|
227
|
-
errors.push('Invalid Sui package ID format (should start with 0x)');
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
if (config.suiAdminPrivateKey && config.suiAdminPrivateKey.length < 32) {
|
|
231
|
-
warnings.push('Sui admin private key seems too short');
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
// Network consistency check
|
|
235
|
-
if (config.suiNetwork !== config.walrusNetwork) {
|
|
236
|
-
warnings.push('Sui and Walrus networks should typically match');
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
return {
|
|
240
|
-
isValid: errors.length === 0,
|
|
241
|
-
errors,
|
|
242
|
-
warnings
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
/**
|
|
247
|
-
* Create a complete configuration with smart defaults
|
|
248
|
-
*/
|
|
249
|
-
static createConfig(overrides: Partial<SDKConfig> = {}): SDKConfig {
|
|
250
|
-
const envConfig = this.loadFromEnvironment();
|
|
251
|
-
const merged = { ...envConfig, ...overrides };
|
|
252
|
-
|
|
253
|
-
// Validate the final configuration
|
|
254
|
-
const validation = this.validateConfig(merged);
|
|
255
|
-
|
|
256
|
-
if (!validation.isValid) {
|
|
257
|
-
throw new Error(
|
|
258
|
-
`Configuration validation failed:\n${validation.errors.join('\n')}`
|
|
259
|
-
);
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
if (validation.warnings.length > 0) {
|
|
263
|
-
console.warn('⚠️ Configuration warnings:', validation.warnings);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
return merged;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
/**
|
|
270
|
-
* Print current configuration (masking sensitive data)
|
|
271
|
-
*/
|
|
272
|
-
static printConfig(config: SDKConfig): void {
|
|
273
|
-
const masked = {
|
|
274
|
-
...config,
|
|
275
|
-
geminiApiKey: config.geminiApiKey ? this.maskApiKey(config.geminiApiKey) : undefined,
|
|
276
|
-
suiAdminPrivateKey: config.suiAdminPrivateKey ? this.maskPrivateKey(config.suiAdminPrivateKey) : undefined
|
|
277
|
-
};
|
|
278
|
-
|
|
279
|
-
console.log('📋 PDW SDK Configuration:');
|
|
280
|
-
console.table(masked);
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
/**
|
|
284
|
-
* Generate example .env file content
|
|
285
|
-
*/
|
|
286
|
-
static generateEnvTemplate(): string {
|
|
287
|
-
return `# Personal Data Wallet SDK Configuration
|
|
288
|
-
# Copy this to your .env file and fill in your values
|
|
289
|
-
|
|
290
|
-
# 🧠 AI/Embedding Configuration (Required)
|
|
291
|
-
GEMINI_API_KEY=your_gemini_api_key_here
|
|
292
|
-
# Get your key from: https://makersuite.google.com/app/apikey
|
|
293
|
-
|
|
294
|
-
# ⛓️ Sui Blockchain Configuration (Optional)
|
|
295
|
-
SUI_NETWORK=testnet
|
|
296
|
-
SUI_PACKAGE_ID=your_deployed_package_id_here
|
|
297
|
-
SUI_ADMIN_PRIVATE_KEY=your_sui_private_key_here
|
|
298
|
-
|
|
299
|
-
# 🗄️ Walrus Storage Configuration (Optional)
|
|
300
|
-
WALRUS_NETWORK=testnet
|
|
301
|
-
WALRUS_UPLOAD_RELAY=https://upload-relay.testnet.walrus.space
|
|
302
|
-
|
|
303
|
-
# 🔐 SEAL Encryption Configuration (Optional)
|
|
304
|
-
# Uses official Mysten Labs testnet servers by default
|
|
305
|
-
# Configure custom key server if needed:
|
|
306
|
-
SEAL_KEY_SERVER_URL=your_custom_key_server_url
|
|
307
|
-
SEAL_KEY_SERVER_OBJECT_ID=your_custom_key_server_object_id
|
|
308
|
-
SEAL_SESSION_TTL=60
|
|
309
|
-
SEAL_ENABLE_BATCH=true
|
|
310
|
-
SEAL_BATCH_SIZE=10
|
|
311
|
-
SEAL_DECRYPTION_TIMEOUT=30000
|
|
312
|
-
SEAL_VERIFY_SERVERS=true
|
|
313
|
-
SEAL_ENABLE_AUDIT=false
|
|
314
|
-
|
|
315
|
-
# 🎛️ Feature Flags (Optional)
|
|
316
|
-
PDW_ENABLE_ENCRYPTION=true
|
|
317
|
-
PDW_ENABLE_BATCHING=true
|
|
318
|
-
PDW_ENABLE_MONITORING=true
|
|
319
|
-
|
|
320
|
-
# 🔧 Advanced Settings (Optional)
|
|
321
|
-
EMBEDDING_MODEL=text-embedding-004
|
|
322
|
-
`;
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
/**
|
|
326
|
-
* Generate SEAL-specific environment template
|
|
327
|
-
*/
|
|
328
|
-
static generateSealEnvTemplate(): string {
|
|
329
|
-
return `# SEAL Encryption Configuration for Personal Data Wallet SDK
|
|
330
|
-
|
|
331
|
-
# 🔑 SEAL Key Server Configuration
|
|
332
|
-
SEAL_KEY_SERVER_URL=https://testnet.seal.mysten.app
|
|
333
|
-
SEAL_NETWORK=testnet
|
|
334
|
-
|
|
335
|
-
# 🔧 SEAL Performance Settings
|
|
336
|
-
SEAL_BATCH_SIZE=10
|
|
337
|
-
SEAL_RETRY_ATTEMPTS=3
|
|
338
|
-
SEAL_DECRYPTION_TIMEOUT=30000
|
|
339
|
-
SEAL_SESSION_TTL=60
|
|
340
|
-
|
|
341
|
-
# 🛡️ SEAL Security Settings
|
|
342
|
-
SEAL_VERIFY_SERVERS=true
|
|
343
|
-
SEAL_ENABLE_AUDIT=false
|
|
344
|
-
SEAL_ENABLE_BATCH=true
|
|
345
|
-
|
|
346
|
-
# 📦 Deployed Contract Configuration
|
|
347
|
-
SUI_PACKAGE_ID=0x067706fc08339b715dab0383bd853b04d06ef6dff3a642c5e7056222da038bde
|
|
348
|
-
SUI_NETWORK=testnet
|
|
349
|
-
|
|
350
|
-
# 🔑 Testnet Key Servers (Official Mysten Labs)
|
|
351
|
-
SEAL_KEY_SERVER_1_URL=https://seal-key-server-testnet-1.mystenlabs.com
|
|
352
|
-
SEAL_KEY_SERVER_1_OBJECT=0x73d05d62c18d9374e3ea529e8e0ed6161da1a141a94d3f76ae3fe4e99356db75
|
|
353
|
-
SEAL_KEY_SERVER_2_URL=https://seal-key-server-testnet-2.mystenlabs.com
|
|
354
|
-
SEAL_KEY_SERVER_2_OBJECT=0xf5d14a81a982144ae441cd7d64b09027f116a468bd36e7eca494f750591623c8
|
|
355
|
-
`;
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
/**
|
|
359
|
-
* Instance method for generateSealEnvTemplate (for backwards compatibility)
|
|
360
|
-
*/
|
|
361
|
-
generateSealEnvTemplate(): string {
|
|
362
|
-
return ConfigurationHelper.generateSealEnvTemplate();
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
// Private helper methods
|
|
366
|
-
private static parseBooleanEnv(key: string, defaultValue: boolean): boolean {
|
|
367
|
-
const value = process.env[key];
|
|
368
|
-
if (value === undefined) return defaultValue;
|
|
369
|
-
return value.toLowerCase() === 'true' || value === '1';
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
private static maskApiKey(apiKey: string): string {
|
|
373
|
-
if (apiKey.length <= 8) return '*'.repeat(apiKey.length);
|
|
374
|
-
return apiKey.substring(0, 4) + '*'.repeat(apiKey.length - 8) + apiKey.substring(apiKey.length - 4);
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
private static maskPrivateKey(privateKey: string): string {
|
|
378
|
-
if (privateKey.length <= 16) return '*'.repeat(privateKey.length);
|
|
379
|
-
return privateKey.substring(0, 6) + '*'.repeat(privateKey.length - 12) + privateKey.substring(privateKey.length - 6);
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
/**
|
|
384
|
-
* Quick configuration helpers
|
|
385
|
-
*/
|
|
386
|
-
export const Config = {
|
|
387
|
-
/**
|
|
388
|
-
* Create configuration from environment variables
|
|
389
|
-
*/
|
|
390
|
-
fromEnv: (): SDKConfig => ConfigurationHelper.loadFromEnvironment(),
|
|
391
|
-
|
|
392
|
-
/**
|
|
393
|
-
* Create configuration with validation
|
|
394
|
-
*/
|
|
395
|
-
create: (overrides?: Partial<SDKConfig>): SDKConfig => ConfigurationHelper.createConfig(overrides),
|
|
396
|
-
|
|
397
|
-
/**
|
|
398
|
-
* Validate existing configuration
|
|
399
|
-
*/
|
|
400
|
-
validate: (config: Partial<SDKConfig>) => ConfigurationHelper.validateConfig(config),
|
|
401
|
-
|
|
402
|
-
/**
|
|
403
|
-
* Get Gemini API key with helpful error messages
|
|
404
|
-
*/
|
|
405
|
-
getGeminiKey: (key?: string): string => ConfigurationHelper.getGeminiApiKey(key),
|
|
406
|
-
|
|
407
|
-
/**
|
|
408
|
-
* Generate .env template
|
|
409
|
-
*/
|
|
410
|
-
generateEnvTemplate: (): string => ConfigurationHelper.generateEnvTemplate()
|
|
411
|
-
};
|
|
412
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Utilities for Personal Data Wallet SDK
|
|
3
|
+
*
|
|
4
|
+
* Provides helpers for managing API keys, environment variables,
|
|
5
|
+
* and configuration validation across the SDK.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export interface SDKConfig {
|
|
9
|
+
// AI/Embedding configuration
|
|
10
|
+
geminiApiKey?: string;
|
|
11
|
+
embeddingModel?: string;
|
|
12
|
+
|
|
13
|
+
// Blockchain configuration
|
|
14
|
+
suiNetwork?: 'testnet' | 'mainnet' | 'devnet' | 'localnet';
|
|
15
|
+
suiPackageId?: string;
|
|
16
|
+
suiAdminPrivateKey?: string;
|
|
17
|
+
|
|
18
|
+
// Storage configuration
|
|
19
|
+
walrusNetwork?: 'testnet' | 'mainnet';
|
|
20
|
+
walrusUploadRelay?: string;
|
|
21
|
+
|
|
22
|
+
// SEAL encryption configuration
|
|
23
|
+
sealKeyServerUrl?: string;
|
|
24
|
+
sealKeyServerObjectId?: string;
|
|
25
|
+
sealSessionTTL?: number;
|
|
26
|
+
sealEnableBatch?: boolean;
|
|
27
|
+
sealBatchSize?: number;
|
|
28
|
+
sealDecryptionTimeout?: number;
|
|
29
|
+
sealVerifyServers?: boolean;
|
|
30
|
+
sealEnableAudit?: boolean;
|
|
31
|
+
|
|
32
|
+
// Feature flags
|
|
33
|
+
enableEncryption?: boolean;
|
|
34
|
+
enableBatching?: boolean;
|
|
35
|
+
enableMonitoring?: boolean;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface EnvironmentConfig {
|
|
39
|
+
// Gemini AI
|
|
40
|
+
GEMINI_API_KEY?: string;
|
|
41
|
+
GOOGLE_AI_API_KEY?: string;
|
|
42
|
+
|
|
43
|
+
// Sui Blockchain
|
|
44
|
+
SUI_NETWORK?: string;
|
|
45
|
+
SUI_PACKAGE_ID?: string;
|
|
46
|
+
SUI_ADMIN_PRIVATE_KEY?: string;
|
|
47
|
+
|
|
48
|
+
// Walrus Storage
|
|
49
|
+
WALRUS_NETWORK?: string;
|
|
50
|
+
WALRUS_UPLOAD_RELAY?: string;
|
|
51
|
+
|
|
52
|
+
// SEAL Encryption
|
|
53
|
+
SEAL_KEY_SERVER_URL?: string;
|
|
54
|
+
SEAL_KEY_SERVER_OBJECT_ID?: string;
|
|
55
|
+
SEAL_SESSION_TTL?: string;
|
|
56
|
+
SEAL_ENABLE_BATCH?: string;
|
|
57
|
+
SEAL_BATCH_SIZE?: string;
|
|
58
|
+
SEAL_DECRYPTION_TIMEOUT?: string;
|
|
59
|
+
SEAL_VERIFY_SERVERS?: string;
|
|
60
|
+
SEAL_ENABLE_AUDIT?: string;
|
|
61
|
+
|
|
62
|
+
// Feature toggles
|
|
63
|
+
PDW_ENABLE_ENCRYPTION?: string;
|
|
64
|
+
PDW_ENABLE_BATCHING?: string;
|
|
65
|
+
PDW_ENABLE_MONITORING?: string;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Configuration helper with environment variable support
|
|
70
|
+
*/
|
|
71
|
+
export class ConfigurationHelper {
|
|
72
|
+
constructor() {
|
|
73
|
+
// Instance constructor for backwards compatibility
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get Gemini API key from various sources
|
|
77
|
+
*/
|
|
78
|
+
static getGeminiApiKey(providedKey?: string): string {
|
|
79
|
+
const apiKey = providedKey ||
|
|
80
|
+
process.env.GEMINI_API_KEY ||
|
|
81
|
+
process.env.GOOGLE_AI_API_KEY;
|
|
82
|
+
|
|
83
|
+
if (!apiKey) {
|
|
84
|
+
throw new Error(
|
|
85
|
+
'🔑 Gemini API key is required. Set it via:\n\n' +
|
|
86
|
+
'1. Direct configuration:\n' +
|
|
87
|
+
' const pipeline = createQuickStartPipeline("BASIC", {\n' +
|
|
88
|
+
' embedding: { apiKey: "your-api-key" }\n' +
|
|
89
|
+
' });\n\n' +
|
|
90
|
+
'2. Environment variable:\n' +
|
|
91
|
+
' export GEMINI_API_KEY="your-api-key"\n' +
|
|
92
|
+
' # or\n' +
|
|
93
|
+
' export GOOGLE_AI_API_KEY="your-api-key"\n\n' +
|
|
94
|
+
'3. .env file:\n' +
|
|
95
|
+
' GEMINI_API_KEY=your-api-key\n\n' +
|
|
96
|
+
'📝 Get your free API key from: https://makersuite.google.com/app/apikey'
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return apiKey;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Get Sui configuration from environment
|
|
105
|
+
*/
|
|
106
|
+
static getSuiConfig(): {
|
|
107
|
+
network: 'testnet' | 'mainnet' | 'devnet' | 'localnet';
|
|
108
|
+
packageId?: string;
|
|
109
|
+
adminPrivateKey?: string;
|
|
110
|
+
} {
|
|
111
|
+
const network = (process.env.SUI_NETWORK as any) || 'testnet';
|
|
112
|
+
|
|
113
|
+
return {
|
|
114
|
+
network,
|
|
115
|
+
packageId: process.env.SUI_PACKAGE_ID,
|
|
116
|
+
adminPrivateKey: process.env.SUI_ADMIN_PRIVATE_KEY
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Get Walrus configuration from environment
|
|
122
|
+
*/
|
|
123
|
+
static getWalrusConfig(): {
|
|
124
|
+
network: 'testnet' | 'mainnet';
|
|
125
|
+
uploadRelay?: string;
|
|
126
|
+
} {
|
|
127
|
+
const network = (process.env.WALRUS_NETWORK as any) || 'testnet';
|
|
128
|
+
|
|
129
|
+
return {
|
|
130
|
+
network,
|
|
131
|
+
uploadRelay: process.env.WALRUS_UPLOAD_RELAY
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Get SEAL key server configuration from environment
|
|
137
|
+
*/
|
|
138
|
+
static getSealConfig(): {
|
|
139
|
+
keyServerUrl?: string;
|
|
140
|
+
keyServerObjectId?: string;
|
|
141
|
+
sessionTTL: number;
|
|
142
|
+
enableBatch: boolean;
|
|
143
|
+
batchSize: number;
|
|
144
|
+
decryptionTimeout: number;
|
|
145
|
+
verifyServers: boolean;
|
|
146
|
+
enableAudit: boolean;
|
|
147
|
+
network: string;
|
|
148
|
+
retryAttempts: number;
|
|
149
|
+
} {
|
|
150
|
+
return {
|
|
151
|
+
keyServerUrl: process.env.SEAL_KEY_SERVER_URL || 'https://testnet.seal.mysten.app',
|
|
152
|
+
keyServerObjectId: process.env.SEAL_KEY_SERVER_OBJECT_ID,
|
|
153
|
+
sessionTTL: process.env.SEAL_SESSION_TTL ? parseInt(process.env.SEAL_SESSION_TTL) : 60,
|
|
154
|
+
enableBatch: process.env.SEAL_ENABLE_BATCH === 'true',
|
|
155
|
+
batchSize: process.env.SEAL_BATCH_SIZE ? parseInt(process.env.SEAL_BATCH_SIZE) : 10,
|
|
156
|
+
decryptionTimeout: process.env.SEAL_DECRYPTION_TIMEOUT ? parseInt(process.env.SEAL_DECRYPTION_TIMEOUT) : 30000,
|
|
157
|
+
verifyServers: process.env.SEAL_VERIFY_SERVERS !== 'false', // Default true
|
|
158
|
+
enableAudit: process.env.SEAL_ENABLE_AUDIT === 'true',
|
|
159
|
+
network: process.env.SEAL_NETWORK || 'testnet',
|
|
160
|
+
retryAttempts: process.env.SEAL_RETRY_ATTEMPTS ? parseInt(process.env.SEAL_RETRY_ATTEMPTS) : 3
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Instance method for getSealConfig (for backwards compatibility)
|
|
166
|
+
*/
|
|
167
|
+
getSealConfig(): {
|
|
168
|
+
keyServerUrl?: string;
|
|
169
|
+
keyServerObjectId?: string;
|
|
170
|
+
sessionTTL: number;
|
|
171
|
+
enableBatch: boolean;
|
|
172
|
+
batchSize: number;
|
|
173
|
+
decryptionTimeout: number;
|
|
174
|
+
verifyServers: boolean;
|
|
175
|
+
enableAudit: boolean;
|
|
176
|
+
network: string;
|
|
177
|
+
retryAttempts: number;
|
|
178
|
+
} {
|
|
179
|
+
return ConfigurationHelper.getSealConfig();
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Load configuration from environment variables
|
|
184
|
+
*/
|
|
185
|
+
static loadFromEnvironment(): SDKConfig {
|
|
186
|
+
return {
|
|
187
|
+
// AI Configuration
|
|
188
|
+
geminiApiKey: process.env.GEMINI_API_KEY || process.env.GOOGLE_AI_API_KEY,
|
|
189
|
+
embeddingModel: process.env.EMBEDDING_MODEL || 'text-embedding-004',
|
|
190
|
+
|
|
191
|
+
// Blockchain Configuration
|
|
192
|
+
suiNetwork: (process.env.SUI_NETWORK as any) || 'testnet',
|
|
193
|
+
suiPackageId: process.env.SUI_PACKAGE_ID,
|
|
194
|
+
suiAdminPrivateKey: process.env.SUI_ADMIN_PRIVATE_KEY,
|
|
195
|
+
|
|
196
|
+
// Storage Configuration
|
|
197
|
+
walrusNetwork: (process.env.WALRUS_NETWORK as any) || 'testnet',
|
|
198
|
+
walrusUploadRelay: process.env.WALRUS_UPLOAD_RELAY,
|
|
199
|
+
|
|
200
|
+
// Feature Flags
|
|
201
|
+
enableEncryption: this.parseBooleanEnv('PDW_ENABLE_ENCRYPTION', true),
|
|
202
|
+
enableBatching: this.parseBooleanEnv('PDW_ENABLE_BATCHING', true),
|
|
203
|
+
enableMonitoring: this.parseBooleanEnv('PDW_ENABLE_MONITORING', true)
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Validate that required configuration is present
|
|
209
|
+
*/
|
|
210
|
+
static validateConfig(config: Partial<SDKConfig>): {
|
|
211
|
+
isValid: boolean;
|
|
212
|
+
errors: string[];
|
|
213
|
+
warnings: string[];
|
|
214
|
+
} {
|
|
215
|
+
const errors: string[] = [];
|
|
216
|
+
const warnings: string[] = [];
|
|
217
|
+
|
|
218
|
+
// Check for Gemini API key
|
|
219
|
+
try {
|
|
220
|
+
this.getGeminiApiKey(config.geminiApiKey);
|
|
221
|
+
} catch (error) {
|
|
222
|
+
errors.push('Missing Gemini API key for AI embedding generation');
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// Validate Sui configuration
|
|
226
|
+
if (config.suiPackageId && !config.suiPackageId.startsWith('0x')) {
|
|
227
|
+
errors.push('Invalid Sui package ID format (should start with 0x)');
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
if (config.suiAdminPrivateKey && config.suiAdminPrivateKey.length < 32) {
|
|
231
|
+
warnings.push('Sui admin private key seems too short');
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// Network consistency check
|
|
235
|
+
if (config.suiNetwork !== config.walrusNetwork) {
|
|
236
|
+
warnings.push('Sui and Walrus networks should typically match');
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
return {
|
|
240
|
+
isValid: errors.length === 0,
|
|
241
|
+
errors,
|
|
242
|
+
warnings
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Create a complete configuration with smart defaults
|
|
248
|
+
*/
|
|
249
|
+
static createConfig(overrides: Partial<SDKConfig> = {}): SDKConfig {
|
|
250
|
+
const envConfig = this.loadFromEnvironment();
|
|
251
|
+
const merged = { ...envConfig, ...overrides };
|
|
252
|
+
|
|
253
|
+
// Validate the final configuration
|
|
254
|
+
const validation = this.validateConfig(merged);
|
|
255
|
+
|
|
256
|
+
if (!validation.isValid) {
|
|
257
|
+
throw new Error(
|
|
258
|
+
`Configuration validation failed:\n${validation.errors.join('\n')}`
|
|
259
|
+
);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
if (validation.warnings.length > 0) {
|
|
263
|
+
console.warn('⚠️ Configuration warnings:', validation.warnings);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
return merged;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Print current configuration (masking sensitive data)
|
|
271
|
+
*/
|
|
272
|
+
static printConfig(config: SDKConfig): void {
|
|
273
|
+
const masked = {
|
|
274
|
+
...config,
|
|
275
|
+
geminiApiKey: config.geminiApiKey ? this.maskApiKey(config.geminiApiKey) : undefined,
|
|
276
|
+
suiAdminPrivateKey: config.suiAdminPrivateKey ? this.maskPrivateKey(config.suiAdminPrivateKey) : undefined
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
console.log('📋 PDW SDK Configuration:');
|
|
280
|
+
console.table(masked);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Generate example .env file content
|
|
285
|
+
*/
|
|
286
|
+
static generateEnvTemplate(): string {
|
|
287
|
+
return `# Personal Data Wallet SDK Configuration
|
|
288
|
+
# Copy this to your .env file and fill in your values
|
|
289
|
+
|
|
290
|
+
# 🧠 AI/Embedding Configuration (Required)
|
|
291
|
+
GEMINI_API_KEY=your_gemini_api_key_here
|
|
292
|
+
# Get your key from: https://makersuite.google.com/app/apikey
|
|
293
|
+
|
|
294
|
+
# ⛓️ Sui Blockchain Configuration (Optional)
|
|
295
|
+
SUI_NETWORK=testnet
|
|
296
|
+
SUI_PACKAGE_ID=your_deployed_package_id_here
|
|
297
|
+
SUI_ADMIN_PRIVATE_KEY=your_sui_private_key_here
|
|
298
|
+
|
|
299
|
+
# 🗄️ Walrus Storage Configuration (Optional)
|
|
300
|
+
WALRUS_NETWORK=testnet
|
|
301
|
+
WALRUS_UPLOAD_RELAY=https://upload-relay.testnet.walrus.space
|
|
302
|
+
|
|
303
|
+
# 🔐 SEAL Encryption Configuration (Optional)
|
|
304
|
+
# Uses official Mysten Labs testnet servers by default
|
|
305
|
+
# Configure custom key server if needed:
|
|
306
|
+
SEAL_KEY_SERVER_URL=your_custom_key_server_url
|
|
307
|
+
SEAL_KEY_SERVER_OBJECT_ID=your_custom_key_server_object_id
|
|
308
|
+
SEAL_SESSION_TTL=60
|
|
309
|
+
SEAL_ENABLE_BATCH=true
|
|
310
|
+
SEAL_BATCH_SIZE=10
|
|
311
|
+
SEAL_DECRYPTION_TIMEOUT=30000
|
|
312
|
+
SEAL_VERIFY_SERVERS=true
|
|
313
|
+
SEAL_ENABLE_AUDIT=false
|
|
314
|
+
|
|
315
|
+
# 🎛️ Feature Flags (Optional)
|
|
316
|
+
PDW_ENABLE_ENCRYPTION=true
|
|
317
|
+
PDW_ENABLE_BATCHING=true
|
|
318
|
+
PDW_ENABLE_MONITORING=true
|
|
319
|
+
|
|
320
|
+
# 🔧 Advanced Settings (Optional)
|
|
321
|
+
EMBEDDING_MODEL=text-embedding-004
|
|
322
|
+
`;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* Generate SEAL-specific environment template
|
|
327
|
+
*/
|
|
328
|
+
static generateSealEnvTemplate(): string {
|
|
329
|
+
return `# SEAL Encryption Configuration for Personal Data Wallet SDK
|
|
330
|
+
|
|
331
|
+
# 🔑 SEAL Key Server Configuration
|
|
332
|
+
SEAL_KEY_SERVER_URL=https://testnet.seal.mysten.app
|
|
333
|
+
SEAL_NETWORK=testnet
|
|
334
|
+
|
|
335
|
+
# 🔧 SEAL Performance Settings
|
|
336
|
+
SEAL_BATCH_SIZE=10
|
|
337
|
+
SEAL_RETRY_ATTEMPTS=3
|
|
338
|
+
SEAL_DECRYPTION_TIMEOUT=30000
|
|
339
|
+
SEAL_SESSION_TTL=60
|
|
340
|
+
|
|
341
|
+
# 🛡️ SEAL Security Settings
|
|
342
|
+
SEAL_VERIFY_SERVERS=true
|
|
343
|
+
SEAL_ENABLE_AUDIT=false
|
|
344
|
+
SEAL_ENABLE_BATCH=true
|
|
345
|
+
|
|
346
|
+
# 📦 Deployed Contract Configuration
|
|
347
|
+
SUI_PACKAGE_ID=0x067706fc08339b715dab0383bd853b04d06ef6dff3a642c5e7056222da038bde
|
|
348
|
+
SUI_NETWORK=testnet
|
|
349
|
+
|
|
350
|
+
# 🔑 Testnet Key Servers (Official Mysten Labs)
|
|
351
|
+
SEAL_KEY_SERVER_1_URL=https://seal-key-server-testnet-1.mystenlabs.com
|
|
352
|
+
SEAL_KEY_SERVER_1_OBJECT=0x73d05d62c18d9374e3ea529e8e0ed6161da1a141a94d3f76ae3fe4e99356db75
|
|
353
|
+
SEAL_KEY_SERVER_2_URL=https://seal-key-server-testnet-2.mystenlabs.com
|
|
354
|
+
SEAL_KEY_SERVER_2_OBJECT=0xf5d14a81a982144ae441cd7d64b09027f116a468bd36e7eca494f750591623c8
|
|
355
|
+
`;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* Instance method for generateSealEnvTemplate (for backwards compatibility)
|
|
360
|
+
*/
|
|
361
|
+
generateSealEnvTemplate(): string {
|
|
362
|
+
return ConfigurationHelper.generateSealEnvTemplate();
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
// Private helper methods
|
|
366
|
+
private static parseBooleanEnv(key: string, defaultValue: boolean): boolean {
|
|
367
|
+
const value = process.env[key];
|
|
368
|
+
if (value === undefined) return defaultValue;
|
|
369
|
+
return value.toLowerCase() === 'true' || value === '1';
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
private static maskApiKey(apiKey: string): string {
|
|
373
|
+
if (apiKey.length <= 8) return '*'.repeat(apiKey.length);
|
|
374
|
+
return apiKey.substring(0, 4) + '*'.repeat(apiKey.length - 8) + apiKey.substring(apiKey.length - 4);
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
private static maskPrivateKey(privateKey: string): string {
|
|
378
|
+
if (privateKey.length <= 16) return '*'.repeat(privateKey.length);
|
|
379
|
+
return privateKey.substring(0, 6) + '*'.repeat(privateKey.length - 12) + privateKey.substring(privateKey.length - 6);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Quick configuration helpers
|
|
385
|
+
*/
|
|
386
|
+
export const Config = {
|
|
387
|
+
/**
|
|
388
|
+
* Create configuration from environment variables
|
|
389
|
+
*/
|
|
390
|
+
fromEnv: (): SDKConfig => ConfigurationHelper.loadFromEnvironment(),
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* Create configuration with validation
|
|
394
|
+
*/
|
|
395
|
+
create: (overrides?: Partial<SDKConfig>): SDKConfig => ConfigurationHelper.createConfig(overrides),
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* Validate existing configuration
|
|
399
|
+
*/
|
|
400
|
+
validate: (config: Partial<SDKConfig>) => ConfigurationHelper.validateConfig(config),
|
|
401
|
+
|
|
402
|
+
/**
|
|
403
|
+
* Get Gemini API key with helpful error messages
|
|
404
|
+
*/
|
|
405
|
+
getGeminiKey: (key?: string): string => ConfigurationHelper.getGeminiApiKey(key),
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* Generate .env template
|
|
409
|
+
*/
|
|
410
|
+
generateEnvTemplate: (): string => ConfigurationHelper.generateEnvTemplate()
|
|
411
|
+
};
|
|
412
|
+
|
|
413
413
|
export default ConfigurationHelper;
|