@varity-labs/sdk 2.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/LICENSE +31 -0
  2. package/README.md +253 -0
  3. package/dist/analytics/index.d.ts +7 -0
  4. package/dist/analytics/index.d.ts.map +1 -0
  5. package/dist/analytics/index.js +6 -0
  6. package/dist/analytics/tracker.d.ts +128 -0
  7. package/dist/analytics/tracker.d.ts.map +1 -0
  8. package/dist/analytics/tracker.js +203 -0
  9. package/dist/blockchain/BlockchainService.d.ts +100 -0
  10. package/dist/blockchain/BlockchainService.d.ts.map +1 -0
  11. package/dist/blockchain/BlockchainService.js +188 -0
  12. package/dist/blockchain/NFTLicensingService.d.ts +69 -0
  13. package/dist/blockchain/NFTLicensingService.d.ts.map +1 -0
  14. package/dist/blockchain/NFTLicensingService.js +136 -0
  15. package/dist/blockchain/RevenueSplitService.d.ts +71 -0
  16. package/dist/blockchain/RevenueSplitService.d.ts.map +1 -0
  17. package/dist/blockchain/RevenueSplitService.js +111 -0
  18. package/dist/blockchain/index.d.ts +48 -0
  19. package/dist/blockchain/index.d.ts.map +1 -0
  20. package/dist/blockchain/index.js +46 -0
  21. package/dist/blockchain/types.d.ts +63 -0
  22. package/dist/blockchain/types.d.ts.map +1 -0
  23. package/dist/blockchain/types.js +6 -0
  24. package/dist/chains/arbitrum.d.ts +89 -0
  25. package/dist/chains/arbitrum.d.ts.map +1 -0
  26. package/dist/chains/arbitrum.js +134 -0
  27. package/dist/chains/base.d.ts +84 -0
  28. package/dist/chains/base.d.ts.map +1 -0
  29. package/dist/chains/base.js +131 -0
  30. package/dist/chains/index.d.ts +36 -0
  31. package/dist/chains/index.d.ts.map +1 -0
  32. package/dist/chains/index.js +32 -0
  33. package/dist/chains/registry.d.ts +113 -0
  34. package/dist/chains/registry.d.ts.map +1 -0
  35. package/dist/chains/registry.js +201 -0
  36. package/dist/chains/varityL3.d.ts +81 -0
  37. package/dist/chains/varityL3.d.ts.map +1 -0
  38. package/dist/chains/varityL3.js +125 -0
  39. package/dist/cli/commands/clone.d.ts +8 -0
  40. package/dist/cli/commands/clone.d.ts.map +1 -0
  41. package/dist/cli/commands/clone.js +391 -0
  42. package/dist/cli/commands/dev.d.ts +8 -0
  43. package/dist/cli/commands/dev.d.ts.map +1 -0
  44. package/dist/cli/commands/dev.js +40 -0
  45. package/dist/cli/commands/generate.d.ts +8 -0
  46. package/dist/cli/commands/generate.d.ts.map +1 -0
  47. package/dist/cli/commands/generate.js +303 -0
  48. package/dist/cli/commands/init.d.ts +8 -0
  49. package/dist/cli/commands/init.d.ts.map +1 -0
  50. package/dist/cli/commands/init.js +317 -0
  51. package/dist/cli/commands/validate.d.ts +8 -0
  52. package/dist/cli/commands/validate.d.ts.map +1 -0
  53. package/dist/cli/commands/validate.js +69 -0
  54. package/dist/cli/index.d.ts +8 -0
  55. package/dist/cli/index.d.ts.map +1 -0
  56. package/dist/cli/index.js +33 -0
  57. package/dist/cli/utils/logger.d.ts +17 -0
  58. package/dist/cli/utils/logger.d.ts.map +1 -0
  59. package/dist/cli/utils/logger.js +35 -0
  60. package/dist/cli/utils/prompts.d.ts +21 -0
  61. package/dist/cli/utils/prompts.d.ts.map +1 -0
  62. package/dist/cli/utils/prompts.js +103 -0
  63. package/dist/contracts/abis/iso/AccessControlRegistry.json +1468 -0
  64. package/dist/contracts/abis/iso/DataProofRegistry.json +797 -0
  65. package/dist/contracts/abis/iso/MerchantRegistry.json +1237 -0
  66. package/dist/contracts/abis/iso/RepPerformance.json +1351 -0
  67. package/dist/contracts/abis/iso/ResidualCalculator.json +1118 -0
  68. package/dist/contracts/abis/iso/TransactionVault.json +1588 -0
  69. package/dist/contracts/abis/iso/VarityWalletFactory.json +475 -0
  70. package/dist/contracts/addresses.d.ts +88 -0
  71. package/dist/contracts/addresses.d.ts.map +1 -0
  72. package/dist/contracts/addresses.js +94 -0
  73. package/dist/contracts/index.d.ts +7 -0
  74. package/dist/contracts/index.d.ts.map +1 -0
  75. package/dist/contracts/index.js +6 -0
  76. package/dist/core/VaritySDK.d.ts +177 -0
  77. package/dist/core/VaritySDK.d.ts.map +1 -0
  78. package/dist/core/VaritySDK.js +325 -0
  79. package/dist/core/config.d.ts +120 -0
  80. package/dist/core/config.d.ts.map +1 -0
  81. package/dist/core/config.js +187 -0
  82. package/dist/core/credentials-proxy.d.ts +157 -0
  83. package/dist/core/credentials-proxy.d.ts.map +1 -0
  84. package/dist/core/credentials-proxy.js +345 -0
  85. package/dist/core/credentials.d.ts +219 -0
  86. package/dist/core/credentials.d.ts.map +1 -0
  87. package/dist/core/credentials.js +345 -0
  88. package/dist/core/template-loader.d.ts +15 -0
  89. package/dist/core/template-loader.d.ts.map +1 -0
  90. package/dist/core/template-loader.js +380 -0
  91. package/dist/core/template.d.ts +321 -0
  92. package/dist/core/template.d.ts.map +1 -0
  93. package/dist/core/template.js +189 -0
  94. package/dist/core/types.d.ts +572 -0
  95. package/dist/core/types.d.ts.map +1 -0
  96. package/dist/core/types.js +52 -0
  97. package/dist/dev/dev-server.d.ts +16 -0
  98. package/dist/dev/dev-server.d.ts.map +1 -0
  99. package/dist/dev/dev-server.js +119 -0
  100. package/dist/generators/contracts/generator.d.ts +21 -0
  101. package/dist/generators/contracts/generator.d.ts.map +1 -0
  102. package/dist/generators/contracts/generator.js +252 -0
  103. package/dist/generators/tests/generator.d.ts +20 -0
  104. package/dist/generators/tests/generator.d.ts.map +1 -0
  105. package/dist/generators/tests/generator.js +375 -0
  106. package/dist/generators/types/generator.d.ts +19 -0
  107. package/dist/generators/types/generator.d.ts.map +1 -0
  108. package/dist/generators/types/generator.js +165 -0
  109. package/dist/generators/ui/component-generator.d.ts +20 -0
  110. package/dist/generators/ui/component-generator.d.ts.map +1 -0
  111. package/dist/generators/ui/component-generator.js +749 -0
  112. package/dist/generators/ui/dashboard-generator.d.ts +20 -0
  113. package/dist/generators/ui/dashboard-generator.d.ts.map +1 -0
  114. package/dist/generators/ui/dashboard-generator.js +349 -0
  115. package/dist/index.d.ts +61 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +74 -0
  118. package/dist/modules/analytics/AnalyticsModule.d.ts +349 -0
  119. package/dist/modules/analytics/AnalyticsModule.d.ts.map +1 -0
  120. package/dist/modules/analytics/AnalyticsModule.js +274 -0
  121. package/dist/modules/analytics/index.d.ts +3 -0
  122. package/dist/modules/analytics/index.d.ts.map +1 -0
  123. package/dist/modules/analytics/index.js +1 -0
  124. package/dist/modules/auth/AccessKeyModule.d.ts +189 -0
  125. package/dist/modules/auth/AccessKeyModule.d.ts.map +1 -0
  126. package/dist/modules/auth/AccessKeyModule.js +322 -0
  127. package/dist/modules/auth/AuthModule.d.ts +133 -0
  128. package/dist/modules/auth/AuthModule.d.ts.map +1 -0
  129. package/dist/modules/auth/AuthModule.js +214 -0
  130. package/dist/modules/auth/index.d.ts +8 -0
  131. package/dist/modules/auth/index.d.ts.map +1 -0
  132. package/dist/modules/auth/index.js +6 -0
  133. package/dist/modules/cache/CacheModule.d.ts +279 -0
  134. package/dist/modules/cache/CacheModule.d.ts.map +1 -0
  135. package/dist/modules/cache/CacheModule.js +493 -0
  136. package/dist/modules/cache/index.d.ts +3 -0
  137. package/dist/modules/cache/index.d.ts.map +1 -0
  138. package/dist/modules/cache/index.js +1 -0
  139. package/dist/modules/compute/ComputeModule.d.ts +226 -0
  140. package/dist/modules/compute/ComputeModule.d.ts.map +1 -0
  141. package/dist/modules/compute/ComputeModule.js +379 -0
  142. package/dist/modules/compute/index.d.ts +6 -0
  143. package/dist/modules/compute/index.d.ts.map +1 -0
  144. package/dist/modules/compute/index.js +4 -0
  145. package/dist/modules/contracts/ContractsModule.d.ts +164 -0
  146. package/dist/modules/contracts/ContractsModule.d.ts.map +1 -0
  147. package/dist/modules/contracts/ContractsModule.js +242 -0
  148. package/dist/modules/contracts/index.d.ts +6 -0
  149. package/dist/modules/contracts/index.d.ts.map +1 -0
  150. package/dist/modules/contracts/index.js +4 -0
  151. package/dist/modules/export/ExportModule.d.ts +346 -0
  152. package/dist/modules/export/ExportModule.d.ts.map +1 -0
  153. package/dist/modules/export/ExportModule.js +432 -0
  154. package/dist/modules/export/index.d.ts +3 -0
  155. package/dist/modules/export/index.d.ts.map +1 -0
  156. package/dist/modules/export/index.js +1 -0
  157. package/dist/modules/forecasting/ForecastingModule.d.ts +579 -0
  158. package/dist/modules/forecasting/ForecastingModule.d.ts.map +1 -0
  159. package/dist/modules/forecasting/ForecastingModule.js +310 -0
  160. package/dist/modules/forecasting/index.d.ts +3 -0
  161. package/dist/modules/forecasting/index.d.ts.map +1 -0
  162. package/dist/modules/forecasting/index.js +1 -0
  163. package/dist/modules/monitoring/MonitoringModule.d.ts +359 -0
  164. package/dist/modules/monitoring/MonitoringModule.d.ts.map +1 -0
  165. package/dist/modules/monitoring/MonitoringModule.js +483 -0
  166. package/dist/modules/monitoring/index.d.ts +3 -0
  167. package/dist/modules/monitoring/index.d.ts.map +1 -0
  168. package/dist/modules/monitoring/index.js +1 -0
  169. package/dist/modules/notifications/NotificationsModule.d.ts +336 -0
  170. package/dist/modules/notifications/NotificationsModule.d.ts.map +1 -0
  171. package/dist/modules/notifications/NotificationsModule.js +418 -0
  172. package/dist/modules/notifications/index.d.ts +3 -0
  173. package/dist/modules/notifications/index.d.ts.map +1 -0
  174. package/dist/modules/notifications/index.js +1 -0
  175. package/dist/modules/oracle/OracleModule.d.ts +110 -0
  176. package/dist/modules/oracle/OracleModule.d.ts.map +1 -0
  177. package/dist/modules/oracle/OracleModule.js +151 -0
  178. package/dist/modules/oracle/index.d.ts +6 -0
  179. package/dist/modules/oracle/index.d.ts.map +1 -0
  180. package/dist/modules/oracle/index.js +4 -0
  181. package/dist/modules/storage/S3Module.d.ts +377 -0
  182. package/dist/modules/storage/S3Module.d.ts.map +1 -0
  183. package/dist/modules/storage/S3Module.js +680 -0
  184. package/dist/modules/storage/StorageModule.d.ts +157 -0
  185. package/dist/modules/storage/StorageModule.d.ts.map +1 -0
  186. package/dist/modules/storage/StorageModule.js +302 -0
  187. package/dist/modules/storage/adapters/AdapterFactory.d.ts +100 -0
  188. package/dist/modules/storage/adapters/AdapterFactory.d.ts.map +1 -0
  189. package/dist/modules/storage/adapters/AdapterFactory.js +209 -0
  190. package/dist/modules/storage/adapters/FilecoinAdapter.d.ts +94 -0
  191. package/dist/modules/storage/adapters/FilecoinAdapter.d.ts.map +1 -0
  192. package/dist/modules/storage/adapters/FilecoinAdapter.js +263 -0
  193. package/dist/modules/storage/adapters/IStorageAdapter.d.ts +287 -0
  194. package/dist/modules/storage/adapters/IStorageAdapter.d.ts.map +1 -0
  195. package/dist/modules/storage/adapters/IStorageAdapter.js +81 -0
  196. package/dist/modules/storage/adapters/MultiTierAdapter.d.ts +187 -0
  197. package/dist/modules/storage/adapters/MultiTierAdapter.d.ts.map +1 -0
  198. package/dist/modules/storage/adapters/MultiTierAdapter.js +430 -0
  199. package/dist/modules/storage/adapters/index.d.ts +12 -0
  200. package/dist/modules/storage/adapters/index.d.ts.map +1 -0
  201. package/dist/modules/storage/adapters/index.js +12 -0
  202. package/dist/modules/storage/index.d.ts +16 -0
  203. package/dist/modules/storage/index.d.ts.map +1 -0
  204. package/dist/modules/storage/index.js +15 -0
  205. package/dist/modules/storage/tiering/AccessAnalyzer.d.ts +227 -0
  206. package/dist/modules/storage/tiering/AccessAnalyzer.d.ts.map +1 -0
  207. package/dist/modules/storage/tiering/AccessAnalyzer.js +367 -0
  208. package/dist/modules/storage/tiering/CostOptimizer.d.ts +248 -0
  209. package/dist/modules/storage/tiering/CostOptimizer.d.ts.map +1 -0
  210. package/dist/modules/storage/tiering/CostOptimizer.js +356 -0
  211. package/dist/modules/storage/tiering/MetadataStore.d.ts +287 -0
  212. package/dist/modules/storage/tiering/MetadataStore.d.ts.map +1 -0
  213. package/dist/modules/storage/tiering/MetadataStore.js +535 -0
  214. package/dist/modules/storage/tiering/TieringEngine.d.ts +237 -0
  215. package/dist/modules/storage/tiering/TieringEngine.d.ts.map +1 -0
  216. package/dist/modules/storage/tiering/TieringEngine.js +419 -0
  217. package/dist/modules/storage/tiering/example.d.ts +8 -0
  218. package/dist/modules/storage/tiering/example.d.ts.map +1 -0
  219. package/dist/modules/storage/tiering/example.js +250 -0
  220. package/dist/modules/storage/tiering/index.d.ts +17 -0
  221. package/dist/modules/storage/tiering/index.d.ts.map +1 -0
  222. package/dist/modules/storage/tiering/index.js +13 -0
  223. package/dist/modules/webhooks/WebhooksModule.d.ts +476 -0
  224. package/dist/modules/webhooks/WebhooksModule.d.ts.map +1 -0
  225. package/dist/modules/webhooks/WebhooksModule.js +359 -0
  226. package/dist/modules/webhooks/index.d.ts +3 -0
  227. package/dist/modules/webhooks/index.d.ts.map +1 -0
  228. package/dist/modules/webhooks/index.js +1 -0
  229. package/dist/modules/zk/ZKModule.d.ts +153 -0
  230. package/dist/modules/zk/ZKModule.d.ts.map +1 -0
  231. package/dist/modules/zk/ZKModule.js +262 -0
  232. package/dist/modules/zk/index.d.ts +7 -0
  233. package/dist/modules/zk/index.d.ts.map +1 -0
  234. package/dist/modules/zk/index.js +4 -0
  235. package/dist/thirdweb/BridgeClient.d.ts +228 -0
  236. package/dist/thirdweb/BridgeClient.d.ts.map +1 -0
  237. package/dist/thirdweb/BridgeClient.js +160 -0
  238. package/dist/thirdweb/EngineClient.d.ts +396 -0
  239. package/dist/thirdweb/EngineClient.d.ts.map +1 -0
  240. package/dist/thirdweb/EngineClient.js +386 -0
  241. package/dist/thirdweb/GatewayClient.d.ts +190 -0
  242. package/dist/thirdweb/GatewayClient.d.ts.map +1 -0
  243. package/dist/thirdweb/GatewayClient.js +257 -0
  244. package/dist/thirdweb/NebulaClient.d.ts +292 -0
  245. package/dist/thirdweb/NebulaClient.d.ts.map +1 -0
  246. package/dist/thirdweb/NebulaClient.js +180 -0
  247. package/dist/thirdweb/StorageClient.d.ts +445 -0
  248. package/dist/thirdweb/StorageClient.d.ts.map +1 -0
  249. package/dist/thirdweb/StorageClient.js +405 -0
  250. package/dist/thirdweb/ThirdwebWrapper.d.ts +236 -0
  251. package/dist/thirdweb/ThirdwebWrapper.d.ts.map +1 -0
  252. package/dist/thirdweb/ThirdwebWrapper.js +332 -0
  253. package/dist/thirdweb/index.d.ts +21 -0
  254. package/dist/thirdweb/index.d.ts.map +1 -0
  255. package/dist/thirdweb/index.js +28 -0
  256. package/dist/thirdweb/varity-chain.d.ts +48 -0
  257. package/dist/thirdweb/varity-chain.d.ts.map +1 -0
  258. package/dist/thirdweb/varity-chain.js +64 -0
  259. package/dist/thirdweb/x402Client.d.ts +319 -0
  260. package/dist/thirdweb/x402Client.d.ts.map +1 -0
  261. package/dist/thirdweb/x402Client.js +223 -0
  262. package/dist/tracking/gasTracker.d.ts +158 -0
  263. package/dist/tracking/gasTracker.d.ts.map +1 -0
  264. package/dist/tracking/gasTracker.js +227 -0
  265. package/dist/tracking/index.d.ts +10 -0
  266. package/dist/tracking/index.d.ts.map +1 -0
  267. package/dist/tracking/index.js +8 -0
  268. package/dist/tracking/types.d.ts +327 -0
  269. package/dist/tracking/types.d.ts.map +1 -0
  270. package/dist/tracking/types.js +8 -0
  271. package/dist/ui/components/ChartWidget.d.ts +36 -0
  272. package/dist/ui/components/ChartWidget.d.ts.map +1 -0
  273. package/dist/ui/components/ChartWidget.js +82 -0
  274. package/dist/ui/components/DashboardLayout.d.ts +41 -0
  275. package/dist/ui/components/DashboardLayout.d.ts.map +1 -0
  276. package/dist/ui/components/DashboardLayout.js +102 -0
  277. package/dist/ui/components/DataTable.d.ts +49 -0
  278. package/dist/ui/components/DataTable.d.ts.map +1 -0
  279. package/dist/ui/components/DataTable.js +96 -0
  280. package/dist/ui/components/EntityForm.d.ts +60 -0
  281. package/dist/ui/components/EntityForm.d.ts.map +1 -0
  282. package/dist/ui/components/EntityForm.js +182 -0
  283. package/dist/ui/components/KPICard.d.ts +29 -0
  284. package/dist/ui/components/KPICard.d.ts.map +1 -0
  285. package/dist/ui/components/KPICard.js +61 -0
  286. package/dist/ui/components/Modal.d.ts +34 -0
  287. package/dist/ui/components/Modal.d.ts.map +1 -0
  288. package/dist/ui/components/Modal.js +30 -0
  289. package/dist/ui/components/index.d.ts +18 -0
  290. package/dist/ui/components/index.d.ts.map +1 -0
  291. package/dist/ui/components/index.js +11 -0
  292. package/dist/validation/template-validator.d.ts +25 -0
  293. package/dist/validation/template-validator.d.ts.map +1 -0
  294. package/dist/validation/template-validator.js +305 -0
  295. package/package.json +102 -0
@@ -0,0 +1,430 @@
1
+ /**
2
+ * Varity SDK - Multi-Tier Storage Adapter
3
+ *
4
+ * Implements intelligent hot/cold storage tiering with automatic promotion/demotion
5
+ * based on access patterns. Optimizes costs while maintaining performance.
6
+ */
7
+ import { StorageBackend, StorageLayer, StorageTier } from '@varity-labs/types';
8
+ import { BaseStorageAdapter } from './IStorageAdapter';
9
+ import { FilecoinAdapter } from './FilecoinAdapter';
10
+ /**
11
+ * Multi-tier storage adapter with automatic cost optimization
12
+ *
13
+ * Features:
14
+ * - Hot/Cold tier management
15
+ * - Automatic tier transitions based on access patterns
16
+ * - Access tracking and analytics
17
+ * - Cost optimization through intelligent tiering
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * const config: MultiTierStorageConfig = {
22
+ * hotTier: { backend: StorageBackend.FILECOIN_IPFS, replication: 3 },
23
+ * coldTier: { backend: StorageBackend.FILECOIN_IPFS, replication: 2 },
24
+ * autoTiering: {
25
+ * enabled: true,
26
+ * policy: TieringPolicy.ACCESS_BASED,
27
+ * checkInterval: 24
28
+ * }
29
+ * }
30
+ * const adapter = new MultiTierAdapter(sdk, config)
31
+ * ```
32
+ */
33
+ export class MultiTierAdapter extends BaseStorageAdapter {
34
+ constructor(sdk, config) {
35
+ super(StorageBackend.MULTI_TIER);
36
+ this.autoTieringInterval = null;
37
+ this.sdk = sdk;
38
+ this.config = config;
39
+ this.hotTierAdapter = new FilecoinAdapter(sdk);
40
+ this.coldTierAdapter = new FilecoinAdapter(sdk);
41
+ this.tieringMetadata = new Map();
42
+ // Start auto-tiering background process if enabled
43
+ if (this.config.autoTiering.enabled) {
44
+ this.startAutoTiering();
45
+ }
46
+ }
47
+ /**
48
+ * Upload to appropriate tier based on options or auto-tiering rules
49
+ *
50
+ * @param data - Data to upload
51
+ * @param options - Upload options
52
+ * @returns Storage result with tier information
53
+ */
54
+ async upload(data, options) {
55
+ const targetTier = options.tier || this.determineInitialTier(data, options);
56
+ const adapter = this.getAdapterForTier(targetTier);
57
+ const result = await adapter.upload(data, {
58
+ ...options,
59
+ tier: targetTier
60
+ });
61
+ // Store tiering metadata
62
+ this.tieringMetadata.set(result.identifier, {
63
+ tier: targetTier,
64
+ lastAccessed: new Date(),
65
+ accessCount: 1,
66
+ createdAt: new Date(),
67
+ size: result.size,
68
+ layer: options.layer
69
+ });
70
+ // Persist metadata to storage (optional, for cross-instance consistency)
71
+ await this.persistMetadata(result.identifier);
72
+ return {
73
+ ...result,
74
+ tier: targetTier
75
+ };
76
+ }
77
+ /**
78
+ * Download from appropriate tier, update access metadata
79
+ *
80
+ * @param identifier - Storage identifier
81
+ * @returns Downloaded data
82
+ */
83
+ async download(identifier) {
84
+ const metadata = await this.loadMetadata(identifier);
85
+ const currentTier = metadata?.tier || StorageTier.COLD;
86
+ const adapter = this.getAdapterForTier(currentTier);
87
+ const data = await adapter.download(identifier);
88
+ // Update access metadata
89
+ if (metadata) {
90
+ metadata.lastAccessed = new Date();
91
+ metadata.accessCount++;
92
+ // Consider promoting to hot tier if access threshold exceeded
93
+ if (this.config.autoTiering.enabled &&
94
+ currentTier === StorageTier.COLD &&
95
+ this.shouldPromote(metadata)) {
96
+ // Schedule promotion (don't block download)
97
+ this.schedulePromotion(identifier, StorageTier.HOT);
98
+ }
99
+ await this.persistMetadata(identifier);
100
+ }
101
+ return data;
102
+ }
103
+ /**
104
+ * Delete from all tiers
105
+ *
106
+ * @param identifier - Storage identifier
107
+ */
108
+ async delete(identifier) {
109
+ const metadata = await this.loadMetadata(identifier);
110
+ const currentTier = metadata?.tier || StorageTier.COLD;
111
+ const adapter = this.getAdapterForTier(currentTier);
112
+ await adapter.delete(identifier);
113
+ // Clean up metadata
114
+ this.tieringMetadata.delete(identifier);
115
+ await this.deleteMetadata(identifier);
116
+ }
117
+ /**
118
+ * Check if object exists in any tier
119
+ *
120
+ * @param identifier - Storage identifier
121
+ * @returns True if exists
122
+ */
123
+ async exists(identifier) {
124
+ // Check hot tier first (faster)
125
+ const hotExists = await this.hotTierAdapter.exists(identifier);
126
+ if (hotExists)
127
+ return true;
128
+ // Check cold tier
129
+ return await this.coldTierAdapter.exists(identifier);
130
+ }
131
+ /**
132
+ * List objects across all tiers
133
+ *
134
+ * @param options - List options
135
+ * @returns Array of storage items
136
+ */
137
+ async list(options) {
138
+ // Combine results from all tiers
139
+ const [hotItems, coldItems] = await Promise.all([
140
+ this.hotTierAdapter.list(options),
141
+ this.coldTierAdapter.list(options)
142
+ ]);
143
+ // Deduplicate and merge
144
+ const itemMap = new Map();
145
+ for (const item of [...hotItems, ...coldItems]) {
146
+ if (!itemMap.has(item.key)) {
147
+ itemMap.set(item.key, item);
148
+ }
149
+ }
150
+ return Array.from(itemMap.values());
151
+ }
152
+ /**
153
+ * Get metadata for an object
154
+ *
155
+ * @param identifier - Storage identifier
156
+ * @returns Storage metadata
157
+ */
158
+ async getMetadata(identifier) {
159
+ const metadata = await this.loadMetadata(identifier);
160
+ const currentTier = metadata?.tier || StorageTier.COLD;
161
+ const adapter = this.getAdapterForTier(currentTier);
162
+ const storageMetadata = await adapter.getMetadata(identifier);
163
+ return {
164
+ ...storageMetadata,
165
+ tier: currentTier,
166
+ accessCount: metadata?.accessCount,
167
+ lastAccessed: metadata?.lastAccessed
168
+ };
169
+ }
170
+ /**
171
+ * Promote object to a hotter tier
172
+ *
173
+ * @param identifier - Storage identifier
174
+ * @param targetTier - Target tier
175
+ */
176
+ async promoteTier(identifier, targetTier) {
177
+ const metadata = await this.loadMetadata(identifier);
178
+ if (!metadata || metadata.tier === targetTier)
179
+ return;
180
+ // Download from current tier
181
+ const data = await this.download(identifier);
182
+ // Upload to target tier
183
+ const targetAdapter = this.getAdapterForTier(targetTier);
184
+ await targetAdapter.upload(data, {
185
+ layer: metadata.layer,
186
+ tier: targetTier
187
+ });
188
+ // Delete from old tier
189
+ const oldAdapter = this.getAdapterForTier(metadata.tier);
190
+ await oldAdapter.delete(identifier);
191
+ // Update metadata
192
+ metadata.tier = targetTier;
193
+ this.tieringMetadata.set(identifier, metadata);
194
+ await this.persistMetadata(identifier);
195
+ }
196
+ /**
197
+ * Demote object to a colder tier (for cost optimization)
198
+ *
199
+ * @param identifier - Storage identifier
200
+ * @param targetTier - Target tier
201
+ */
202
+ async demoteTier(identifier, targetTier) {
203
+ await this.promoteTier(identifier, targetTier); // Same logic
204
+ }
205
+ /**
206
+ * Get access URL for an object
207
+ *
208
+ * @param identifier - Storage identifier
209
+ * @param expiresIn - Expiration time in seconds
210
+ * @returns Gateway URL
211
+ */
212
+ async getAccessUrl(identifier, expiresIn) {
213
+ const metadata = await this.loadMetadata(identifier);
214
+ const currentTier = metadata?.tier || StorageTier.COLD;
215
+ const adapter = this.getAdapterForTier(currentTier);
216
+ return adapter.getAccessUrl(identifier, expiresIn);
217
+ }
218
+ /**
219
+ * Health check for multi-tier backend
220
+ *
221
+ * @returns Combined health status
222
+ */
223
+ async healthCheck() {
224
+ const startTime = Date.now();
225
+ try {
226
+ const [hotHealth, coldHealth] = await Promise.all([
227
+ this.hotTierAdapter.healthCheck(),
228
+ this.coldTierAdapter.healthCheck()
229
+ ]);
230
+ const healthy = hotHealth.healthy && coldHealth.healthy;
231
+ const latencyMs = Date.now() - startTime;
232
+ return {
233
+ healthy,
234
+ latencyMs,
235
+ error: !healthy
236
+ ? `Hot tier: ${hotHealth.error || 'OK'}, Cold tier: ${coldHealth.error || 'OK'}`
237
+ : undefined
238
+ };
239
+ }
240
+ catch (error) {
241
+ return {
242
+ healthy: false,
243
+ latencyMs: Date.now() - startTime,
244
+ error: error instanceof Error ? error.message : 'Unknown error'
245
+ };
246
+ }
247
+ }
248
+ /**
249
+ * Determine initial tier based on data size and options
250
+ *
251
+ * @param data - Data to upload
252
+ * @param options - Upload options
253
+ * @returns Recommended tier
254
+ */
255
+ determineInitialTier(data, options) {
256
+ let size = 0;
257
+ if (data instanceof Buffer) {
258
+ size = data.length;
259
+ }
260
+ else if (data instanceof Blob) {
261
+ size = data.size;
262
+ }
263
+ else if (typeof data === 'string') {
264
+ size = Buffer.from(data).length;
265
+ }
266
+ // Small files go to hot tier by default
267
+ const sizeThresholdMB = 1; // 1MB threshold
268
+ if (size < sizeThresholdMB * 1024 * 1024) {
269
+ return StorageTier.HOT;
270
+ }
271
+ // Large files go to cold tier
272
+ return StorageTier.COLD;
273
+ }
274
+ /**
275
+ * Get adapter for a specific tier
276
+ *
277
+ * @param tier - Storage tier
278
+ * @returns Adapter instance
279
+ */
280
+ getAdapterForTier(tier) {
281
+ return tier === StorageTier.HOT ? this.hotTierAdapter : this.coldTierAdapter;
282
+ }
283
+ /**
284
+ * Check if object should be promoted to hot tier
285
+ *
286
+ * @param metadata - Tiering metadata
287
+ * @returns True if should promote
288
+ */
289
+ shouldPromote(metadata) {
290
+ const accessThreshold = 5; // Configurable threshold
291
+ return metadata.accessCount >= accessThreshold;
292
+ }
293
+ /**
294
+ * Check if object should be demoted to cold tier
295
+ *
296
+ * @param metadata - Tiering metadata
297
+ * @returns True if should demote
298
+ */
299
+ shouldDemote(metadata) {
300
+ const daysSinceAccess = (Date.now() - metadata.lastAccessed.getTime()) / (24 * 60 * 60 * 1000);
301
+ const threshold = 30; // 30 days without access
302
+ return daysSinceAccess >= threshold;
303
+ }
304
+ /**
305
+ * Schedule promotion for an object
306
+ *
307
+ * @param identifier - Storage identifier
308
+ * @param targetTier - Target tier
309
+ */
310
+ async schedulePromotion(identifier, targetTier) {
311
+ // In a production system, this would use a job queue
312
+ // For now, we'll do it synchronously in the background
313
+ setTimeout(async () => {
314
+ try {
315
+ await this.promoteTier(identifier, targetTier);
316
+ }
317
+ catch (error) {
318
+ console.error(`Failed to promote ${identifier} to ${targetTier}:`, error);
319
+ }
320
+ }, 0);
321
+ }
322
+ /**
323
+ * Start auto-tiering background process
324
+ */
325
+ startAutoTiering() {
326
+ const checkIntervalHours = this.config.autoTiering.checkInterval || 24;
327
+ const intervalMs = checkIntervalHours * 60 * 60 * 1000;
328
+ this.autoTieringInterval = setInterval(() => {
329
+ this.runAutoTiering();
330
+ }, intervalMs);
331
+ }
332
+ /**
333
+ * Stop auto-tiering background process
334
+ */
335
+ stopAutoTiering() {
336
+ if (this.autoTieringInterval) {
337
+ clearInterval(this.autoTieringInterval);
338
+ this.autoTieringInterval = null;
339
+ }
340
+ }
341
+ /**
342
+ * Run auto-tiering checks for all objects
343
+ */
344
+ async runAutoTiering() {
345
+ for (const [identifier, metadata] of this.tieringMetadata.entries()) {
346
+ try {
347
+ // Check for demotion (hot -> cold)
348
+ if (metadata.tier === StorageTier.HOT && this.shouldDemote(metadata)) {
349
+ await this.demoteTier(identifier, StorageTier.COLD);
350
+ }
351
+ // Promotion is handled on-demand during download
352
+ }
353
+ catch (error) {
354
+ console.error(`Auto-tiering failed for ${identifier}:`, error);
355
+ }
356
+ }
357
+ }
358
+ /**
359
+ * Persist metadata to storage
360
+ *
361
+ * @param identifier - Storage identifier
362
+ */
363
+ async persistMetadata(identifier) {
364
+ const metadata = this.tieringMetadata.get(identifier);
365
+ if (!metadata)
366
+ return;
367
+ // Store metadata in a special metadata layer
368
+ const metadataKey = `metadata:${identifier}`;
369
+ try {
370
+ await this.hotTierAdapter.upload(Buffer.from(JSON.stringify(metadata)), {
371
+ layer: StorageLayer.VARITY_INTERNAL,
372
+ tier: StorageTier.HOT,
373
+ metadata: { type: 'tiering-metadata' }
374
+ });
375
+ }
376
+ catch (error) {
377
+ console.error(`Failed to persist metadata for ${identifier}:`, error);
378
+ }
379
+ }
380
+ /**
381
+ * Load metadata from storage
382
+ *
383
+ * @param identifier - Storage identifier
384
+ * @returns Tiering metadata or null
385
+ */
386
+ async loadMetadata(identifier) {
387
+ // Check in-memory cache first
388
+ let metadata = this.tieringMetadata.get(identifier);
389
+ if (metadata)
390
+ return metadata;
391
+ // Load from storage
392
+ const metadataKey = `metadata:${identifier}`;
393
+ try {
394
+ const data = await this.hotTierAdapter.download(metadataKey);
395
+ metadata = JSON.parse(data.toString());
396
+ if (metadata) {
397
+ // Convert date strings back to Date objects
398
+ metadata.lastAccessed = new Date(metadata.lastAccessed);
399
+ metadata.createdAt = new Date(metadata.createdAt);
400
+ this.tieringMetadata.set(identifier, metadata);
401
+ return metadata;
402
+ }
403
+ }
404
+ catch (error) {
405
+ // Metadata not found, object might be in cold tier
406
+ }
407
+ return null;
408
+ }
409
+ /**
410
+ * Delete metadata from storage
411
+ *
412
+ * @param identifier - Storage identifier
413
+ */
414
+ async deleteMetadata(identifier) {
415
+ const metadataKey = `metadata:${identifier}`;
416
+ try {
417
+ await this.hotTierAdapter.delete(metadataKey);
418
+ }
419
+ catch (error) {
420
+ // Ignore errors
421
+ }
422
+ }
423
+ /**
424
+ * Clean up resources
425
+ */
426
+ destroy() {
427
+ this.stopAutoTiering();
428
+ this.tieringMetadata.clear();
429
+ }
430
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Varity SDK - Storage Adapters
3
+ *
4
+ * Export all storage adapter interfaces and implementations
5
+ */
6
+ export { IStorageAdapter, UnsupportedOperationError, BaseStorageAdapter } from './IStorageAdapter';
7
+ export type { IStorageAdapter as StorageAdapter } from './IStorageAdapter';
8
+ export { FilecoinAdapter } from './FilecoinAdapter';
9
+ export { MultiTierAdapter } from './MultiTierAdapter';
10
+ export { AdapterFactory } from './AdapterFactory';
11
+ export type { AdapterFactoryConfig } from './AdapterFactory';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/storage/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,kBAAkB,EACnB,MAAM,mBAAmB,CAAA;AAE1B,YAAY,EACV,eAAe,IAAI,cAAc,EAClC,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGrD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Varity SDK - Storage Adapters
3
+ *
4
+ * Export all storage adapter interfaces and implementations
5
+ */
6
+ // Base interfaces and classes
7
+ export { UnsupportedOperationError, BaseStorageAdapter } from './IStorageAdapter';
8
+ // Adapter implementations
9
+ export { FilecoinAdapter } from './FilecoinAdapter';
10
+ export { MultiTierAdapter } from './MultiTierAdapter';
11
+ // Factory for creating adapters
12
+ export { AdapterFactory } from './AdapterFactory';
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Storage Module - Exports
3
+ *
4
+ * Exports both the main StorageModule and the new adapter architecture
5
+ * for advanced use cases and multi-backend support.
6
+ */
7
+ export { StorageModule } from './StorageModule';
8
+ export type { UploadResult, DataPointer, Pin, PinFilters, CelestiaReceipt } from './StorageModule';
9
+ export { S3Module } from './S3Module';
10
+ export type { S3PutObjectParams, S3GetObjectParams, S3GetObjectResponse, S3DeleteObjectParams, S3ListObjectsParams, S3HeadObjectParams, S3HeadObjectResponse } from './S3Module';
11
+ export { IStorageAdapter, BaseStorageAdapter, UnsupportedOperationError } from './adapters/IStorageAdapter';
12
+ export { FilecoinAdapter } from './adapters/FilecoinAdapter';
13
+ export { MultiTierAdapter } from './adapters/MultiTierAdapter';
14
+ export { AdapterFactory } from './adapters/AdapterFactory';
15
+ export type { AdapterFactoryConfig } from './adapters/AdapterFactory';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/storage/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,YAAY,EACV,YAAY,EACZ,WAAW,EACX,GAAG,EACH,UAAU,EACV,eAAe,EAChB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,YAAY,CAAA;AAGnB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,yBAAyB,EAC1B,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Storage Module - Exports
3
+ *
4
+ * Exports both the main StorageModule and the new adapter architecture
5
+ * for advanced use cases and multi-backend support.
6
+ */
7
+ // Main storage module (backward compatible)
8
+ export { StorageModule } from './StorageModule';
9
+ // S3-compatible storage module
10
+ export { S3Module } from './S3Module';
11
+ // NEW: Storage adapters for advanced multi-backend support
12
+ export { BaseStorageAdapter, UnsupportedOperationError } from './adapters/IStorageAdapter';
13
+ export { FilecoinAdapter } from './adapters/FilecoinAdapter';
14
+ export { MultiTierAdapter } from './adapters/MultiTierAdapter';
15
+ export { AdapterFactory } from './adapters/AdapterFactory';