@opendatalabs/vana-sdk 0.1.0-alpha.f2de4f7 → 0.1.0-alpha.f35bb9c

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 (165) hide show
  1. package/dist/browser.cjs.map +1 -1
  2. package/dist/browser.d.ts +33 -1
  3. package/dist/browser.js.map +1 -1
  4. package/dist/chains/index.cjs.map +1 -1
  5. package/dist/chains/index.d.ts +30 -1
  6. package/dist/chains/index.js.map +1 -1
  7. package/dist/config/chains.cjs.map +1 -1
  8. package/dist/config/chains.d.ts +99 -0
  9. package/dist/config/chains.js.map +1 -1
  10. package/dist/contracts/contractController.cjs.map +1 -1
  11. package/dist/contracts/contractController.d.ts +66 -10
  12. package/dist/contracts/contractController.js.map +1 -1
  13. package/dist/controllers/data.cjs +173 -141
  14. package/dist/controllers/data.cjs.map +1 -1
  15. package/dist/controllers/data.d.ts +213 -175
  16. package/dist/controllers/data.js +173 -141
  17. package/dist/controllers/data.js.map +1 -1
  18. package/dist/controllers/permissions.cjs +185 -191
  19. package/dist/controllers/permissions.cjs.map +1 -1
  20. package/dist/controllers/permissions.d.ts +29 -73
  21. package/dist/controllers/permissions.js +185 -191
  22. package/dist/controllers/permissions.js.map +1 -1
  23. package/dist/controllers/protocol.cjs.map +1 -1
  24. package/dist/controllers/protocol.d.ts +27 -28
  25. package/dist/controllers/protocol.js.map +1 -1
  26. package/dist/controllers/schemas.cjs +23 -21
  27. package/dist/controllers/schemas.cjs.map +1 -1
  28. package/dist/controllers/schemas.d.ts +47 -40
  29. package/dist/controllers/schemas.js +23 -21
  30. package/dist/controllers/schemas.js.map +1 -1
  31. package/dist/controllers/server.cjs +17 -15
  32. package/dist/controllers/server.cjs.map +1 -1
  33. package/dist/controllers/server.d.ts +46 -38
  34. package/dist/controllers/server.js +17 -15
  35. package/dist/controllers/server.js.map +1 -1
  36. package/dist/core/apiClient.cjs +53 -3
  37. package/dist/core/apiClient.cjs.map +1 -1
  38. package/dist/core/apiClient.d.ts +132 -7
  39. package/dist/core/apiClient.js +53 -3
  40. package/dist/core/apiClient.js.map +1 -1
  41. package/dist/core/generics.cjs +30 -3
  42. package/dist/core/generics.cjs.map +1 -1
  43. package/dist/core/generics.d.ts +95 -6
  44. package/dist/core/generics.js +30 -3
  45. package/dist/core/generics.js.map +1 -1
  46. package/dist/core.cjs +29 -12
  47. package/dist/core.cjs.map +1 -1
  48. package/dist/core.d.ts +2 -1
  49. package/dist/core.js +29 -12
  50. package/dist/core.js.map +1 -1
  51. package/dist/index.cjs.map +1 -1
  52. package/dist/index.js.map +1 -1
  53. package/dist/index.node.cjs +3 -3
  54. package/dist/index.node.cjs.map +1 -1
  55. package/dist/index.node.d.ts +8 -9
  56. package/dist/index.node.js +2 -2
  57. package/dist/index.node.js.map +1 -1
  58. package/dist/node.cjs.map +1 -1
  59. package/dist/node.d.ts +39 -1
  60. package/dist/node.js.map +1 -1
  61. package/dist/platform/browser.cjs +160 -2
  62. package/dist/platform/browser.cjs.map +1 -1
  63. package/dist/platform/browser.d.ts +232 -12
  64. package/dist/platform/browser.js +160 -2
  65. package/dist/platform/browser.js.map +1 -1
  66. package/dist/platform/interface.cjs.map +1 -1
  67. package/dist/platform/interface.d.ts +283 -90
  68. package/dist/platform/node.cjs +163 -2
  69. package/dist/platform/node.cjs.map +1 -1
  70. package/dist/platform/node.d.ts +69 -6
  71. package/dist/platform/node.js +163 -2
  72. package/dist/platform/node.js.map +1 -1
  73. package/dist/server/relayerHandler.cjs +214 -0
  74. package/dist/server/relayerHandler.cjs.map +1 -0
  75. package/dist/server/relayerHandler.d.ts +36 -0
  76. package/dist/server/relayerHandler.js +190 -0
  77. package/dist/server/relayerHandler.js.map +1 -0
  78. package/dist/storage/manager.cjs +108 -25
  79. package/dist/storage/manager.cjs.map +1 -1
  80. package/dist/storage/manager.d.ts +119 -25
  81. package/dist/storage/manager.js +108 -25
  82. package/dist/storage/manager.js.map +1 -1
  83. package/dist/storage/providers/callback-storage.cjs +86 -15
  84. package/dist/storage/providers/callback-storage.cjs.map +1 -1
  85. package/dist/storage/providers/callback-storage.d.ts +109 -20
  86. package/dist/storage/providers/callback-storage.js +86 -15
  87. package/dist/storage/providers/callback-storage.js.map +1 -1
  88. package/dist/storage/providers/pinata.cjs.map +1 -1
  89. package/dist/storage/providers/pinata.d.ts +12 -14
  90. package/dist/storage/providers/pinata.js.map +1 -1
  91. package/dist/tests/factories/mockFactory.d.ts +2 -2
  92. package/dist/tests/relayer-integration.test.d.ts +1 -0
  93. package/dist/tests/relayer-unified.test.d.ts +1 -0
  94. package/dist/tests/server-relayer-handler.test.d.ts +1 -0
  95. package/dist/types/blockchain.cjs.map +1 -1
  96. package/dist/types/blockchain.d.ts +39 -11
  97. package/dist/types/chains.cjs.map +1 -1
  98. package/dist/types/chains.d.ts +74 -7
  99. package/dist/types/chains.js.map +1 -1
  100. package/dist/types/config.cjs.map +1 -1
  101. package/dist/types/config.d.ts +46 -191
  102. package/dist/types/config.js.map +1 -1
  103. package/dist/types/contracts.cjs.map +1 -1
  104. package/dist/types/contracts.d.ts +71 -7
  105. package/dist/types/controller-context.cjs.map +1 -1
  106. package/dist/types/controller-context.d.ts +3 -2
  107. package/dist/types/data.cjs.map +1 -1
  108. package/dist/types/data.d.ts +4 -6
  109. package/dist/types/generics.cjs.map +1 -1
  110. package/dist/types/generics.d.ts +80 -9
  111. package/dist/types/index.cjs.map +1 -1
  112. package/dist/types/index.d.ts +27 -2
  113. package/dist/types/index.js.map +1 -1
  114. package/dist/types/operations.cjs.map +1 -1
  115. package/dist/types/operations.d.ts +132 -15
  116. package/dist/types/operations.js.map +1 -1
  117. package/dist/types/permissions.cjs.map +1 -1
  118. package/dist/types/permissions.d.ts +15 -20
  119. package/dist/types/personal.cjs.map +1 -1
  120. package/dist/types/personal.d.ts +131 -14
  121. package/dist/types/relayer.cjs.map +1 -1
  122. package/dist/types/relayer.d.ts +262 -35
  123. package/dist/types/storage.cjs.map +1 -1
  124. package/dist/types/storage.d.ts +9 -21
  125. package/dist/types/storage.js.map +1 -1
  126. package/dist/utils/grantFiles.cjs.map +1 -1
  127. package/dist/utils/grantFiles.d.ts +10 -20
  128. package/dist/utils/grantFiles.js.map +1 -1
  129. package/dist/utils/grantValidation.cjs.map +1 -1
  130. package/dist/utils/grantValidation.d.ts +95 -16
  131. package/dist/utils/grantValidation.js.map +1 -1
  132. package/dist/utils/grants.cjs.map +1 -1
  133. package/dist/utils/grants.d.ts +93 -12
  134. package/dist/utils/grants.js.map +1 -1
  135. package/dist/utils/lazy-import.cjs.map +1 -1
  136. package/dist/utils/lazy-import.d.ts +32 -7
  137. package/dist/utils/lazy-import.js.map +1 -1
  138. package/dist/utils/signatureCache.cjs +8 -2
  139. package/dist/utils/signatureCache.cjs.map +1 -1
  140. package/dist/utils/signatureCache.d.ts +49 -8
  141. package/dist/utils/signatureCache.js +8 -2
  142. package/dist/utils/signatureCache.js.map +1 -1
  143. package/dist/utils/transactionHelpers.cjs.map +1 -1
  144. package/dist/utils/transactionHelpers.d.ts +12 -12
  145. package/dist/utils/transactionHelpers.js.map +1 -1
  146. package/dist/utils/typedDataConverter.cjs.map +1 -1
  147. package/dist/utils/typedDataConverter.d.ts +39 -3
  148. package/dist/utils/typedDataConverter.js.map +1 -1
  149. package/dist/utils/urlResolver.cjs +7 -0
  150. package/dist/utils/urlResolver.cjs.map +1 -1
  151. package/dist/utils/urlResolver.d.ts +22 -4
  152. package/dist/utils/urlResolver.js +7 -0
  153. package/dist/utils/urlResolver.js.map +1 -1
  154. package/dist/utils/wallet.cjs +2 -1
  155. package/dist/utils/wallet.cjs.map +1 -1
  156. package/dist/utils/wallet.d.ts +78 -16
  157. package/dist/utils/wallet.js +2 -1
  158. package/dist/utils/wallet.js.map +1 -1
  159. package/package.json +1 -1
  160. package/dist/server/handler.cjs +0 -101
  161. package/dist/server/handler.cjs.map +0 -1
  162. package/dist/server/handler.d.ts +0 -87
  163. package/dist/server/handler.js +0 -77
  164. package/dist/server/handler.js.map +0 -1
  165. /package/dist/tests/{server-handler.test.d.ts → permissions-revoke-relayer.test.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/browser.ts"],"sourcesContent":["/**\n * Re-export Browser platform adapter for dynamic imports\n */\nexport { BrowserPlatformAdapter } from \"./platform/browser\";\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,qBAAuC;","names":[]}
1
+ {"version":3,"sources":["../src/browser.ts"],"sourcesContent":["/**\n * Browser-specific entry point for the Vana SDK.\n *\n * @remarks\n * This module provides the browser implementation of the Vana SDK,\n * optimized for web applications and browser environments. It includes\n * platform-specific implementations using Web APIs for cryptography,\n * storage, and networking operations.\n *\n * Import this module when building web applications:\n * ```typescript\n * import { BrowserPlatformAdapter } from '@opendatalabs/vana-sdk/browser';\n * ```\n *\n * Features:\n * - Web Crypto API for encryption operations\n * - SessionStorage for caching\n * - Fetch API for HTTP requests\n * - Optimized bundle size for browser deployment\n *\n * @example\n * ```typescript\n * // In a React/Vue/Angular application\n * import { BrowserPlatformAdapter } from '@opendatalabs/vana-sdk/browser';\n * import { Vana } from '@opendatalabs/vana-sdk-experimental';\n *\n * const vana = new Vana({\n * platform: new BrowserPlatformAdapter(),\n * network: 'moksha'\n * });\n * ```\n *\n * @category Browser\n * @module browser\n */\nexport { BrowserPlatformAdapter } from \"./platform/browser\";\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAmCA,qBAAuC;","names":[]}
package/dist/browser.d.ts CHANGED
@@ -1,4 +1,36 @@
1
1
  /**
2
- * Re-export Browser platform adapter for dynamic imports
2
+ * Browser-specific entry point for the Vana SDK.
3
+ *
4
+ * @remarks
5
+ * This module provides the browser implementation of the Vana SDK,
6
+ * optimized for web applications and browser environments. It includes
7
+ * platform-specific implementations using Web APIs for cryptography,
8
+ * storage, and networking operations.
9
+ *
10
+ * Import this module when building web applications:
11
+ * ```typescript
12
+ * import { BrowserPlatformAdapter } from '@opendatalabs/vana-sdk/browser';
13
+ * ```
14
+ *
15
+ * Features:
16
+ * - Web Crypto API for encryption operations
17
+ * - SessionStorage for caching
18
+ * - Fetch API for HTTP requests
19
+ * - Optimized bundle size for browser deployment
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * // In a React/Vue/Angular application
24
+ * import { BrowserPlatformAdapter } from '@opendatalabs/vana-sdk/browser';
25
+ * import { Vana } from '@opendatalabs/vana-sdk-experimental';
26
+ *
27
+ * const vana = new Vana({
28
+ * platform: new BrowserPlatformAdapter(),
29
+ * network: 'moksha'
30
+ * });
31
+ * ```
32
+ *
33
+ * @category Browser
34
+ * @module browser
3
35
  */
4
36
  export { BrowserPlatformAdapter } from "./platform/browser";
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/browser.ts"],"sourcesContent":["/**\n * Re-export Browser platform adapter for dynamic imports\n */\nexport { BrowserPlatformAdapter } from \"./platform/browser\";\n"],"mappings":"AAGA,SAAS,8BAA8B;","names":[]}
1
+ {"version":3,"sources":["../src/browser.ts"],"sourcesContent":["/**\n * Browser-specific entry point for the Vana SDK.\n *\n * @remarks\n * This module provides the browser implementation of the Vana SDK,\n * optimized for web applications and browser environments. It includes\n * platform-specific implementations using Web APIs for cryptography,\n * storage, and networking operations.\n *\n * Import this module when building web applications:\n * ```typescript\n * import { BrowserPlatformAdapter } from '@opendatalabs/vana-sdk/browser';\n * ```\n *\n * Features:\n * - Web Crypto API for encryption operations\n * - SessionStorage for caching\n * - Fetch API for HTTP requests\n * - Optimized bundle size for browser deployment\n *\n * @example\n * ```typescript\n * // In a React/Vue/Angular application\n * import { BrowserPlatformAdapter } from '@opendatalabs/vana-sdk/browser';\n * import { Vana } from '@opendatalabs/vana-sdk-experimental';\n *\n * const vana = new Vana({\n * platform: new BrowserPlatformAdapter(),\n * network: 'moksha'\n * });\n * ```\n *\n * @category Browser\n * @module browser\n */\nexport { BrowserPlatformAdapter } from \"./platform/browser\";\n"],"mappings":"AAmCA,SAAS,8BAA8B;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/chains/index.ts"],"sourcesContent":["/**\n * Chain configuration exports\n */\n\nexport type { VanaChainConfig } from \"./definitions\";\nexport {\n vanaMainnet,\n moksha,\n mokshaTestnet,\n getChainConfig,\n getAllChains,\n} from \"./definitions\";\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,yBAMO;","names":[]}
1
+ {"version":3,"sources":["../../src/chains/index.ts"],"sourcesContent":["/**\n * Provides chain configurations for the Vana network ecosystem.\n *\n * @remarks\n * This module exports all chain definitions and utilities needed to connect\n * to Vana networks. It includes configurations for mainnet and testnet\n * environments with their respective RPC endpoints, contract addresses,\n * and network parameters.\n *\n * Available networks:\n * - **Vana Mainnet** (chainId: 1480) - Production network\n * - **Moksha Testnet** (chainId: 14800) - Test network\n *\n * @example\n * ```typescript\n * import { moksha, vanaMainnet, getChainConfig } from '@opendatalabs/vana-sdk/chains';\n * import { createPublicClient, http } from 'viem';\n *\n * // Connect to moksha testnet\n * const client = createPublicClient({\n * chain: moksha,\n * transport: http()\n * });\n *\n * // Get chain config by ID\n * const config = getChainConfig(14800);\n * console.log(config?.name); // \"Moksha Testnet\"\n * ```\n *\n * @category Chains\n * @module chains\n */\n\nexport type { VanaChainConfig } from \"./definitions\";\nexport {\n vanaMainnet,\n moksha,\n mokshaTestnet,\n getChainConfig,\n getAllChains,\n} from \"./definitions\";\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkCA,yBAMO;","names":[]}
@@ -1,5 +1,34 @@
1
1
  /**
2
- * Chain configuration exports
2
+ * Provides chain configurations for the Vana network ecosystem.
3
+ *
4
+ * @remarks
5
+ * This module exports all chain definitions and utilities needed to connect
6
+ * to Vana networks. It includes configurations for mainnet and testnet
7
+ * environments with their respective RPC endpoints, contract addresses,
8
+ * and network parameters.
9
+ *
10
+ * Available networks:
11
+ * - **Vana Mainnet** (chainId: 1480) - Production network
12
+ * - **Moksha Testnet** (chainId: 14800) - Test network
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * import { moksha, vanaMainnet, getChainConfig } from '@opendatalabs/vana-sdk/chains';
17
+ * import { createPublicClient, http } from 'viem';
18
+ *
19
+ * // Connect to moksha testnet
20
+ * const client = createPublicClient({
21
+ * chain: moksha,
22
+ * transport: http()
23
+ * });
24
+ *
25
+ * // Get chain config by ID
26
+ * const config = getChainConfig(14800);
27
+ * console.log(config?.name); // "Moksha Testnet"
28
+ * ```
29
+ *
30
+ * @category Chains
31
+ * @module chains
3
32
  */
4
33
  export type { VanaChainConfig } from "./definitions";
5
34
  export { vanaMainnet, moksha, mokshaTestnet, getChainConfig, getAllChains, } from "./definitions";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/chains/index.ts"],"sourcesContent":["/**\n * Chain configuration exports\n */\n\nexport type { VanaChainConfig } from \"./definitions\";\nexport {\n vanaMainnet,\n moksha,\n mokshaTestnet,\n getChainConfig,\n getAllChains,\n} from \"./definitions\";\n"],"mappings":"AAKA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
1
+ {"version":3,"sources":["../../src/chains/index.ts"],"sourcesContent":["/**\n * Provides chain configurations for the Vana network ecosystem.\n *\n * @remarks\n * This module exports all chain definitions and utilities needed to connect\n * to Vana networks. It includes configurations for mainnet and testnet\n * environments with their respective RPC endpoints, contract addresses,\n * and network parameters.\n *\n * Available networks:\n * - **Vana Mainnet** (chainId: 1480) - Production network\n * - **Moksha Testnet** (chainId: 14800) - Test network\n *\n * @example\n * ```typescript\n * import { moksha, vanaMainnet, getChainConfig } from '@opendatalabs/vana-sdk/chains';\n * import { createPublicClient, http } from 'viem';\n *\n * // Connect to moksha testnet\n * const client = createPublicClient({\n * chain: moksha,\n * transport: http()\n * });\n *\n * // Get chain config by ID\n * const config = getChainConfig(14800);\n * console.log(config?.name); // \"Moksha Testnet\"\n * ```\n *\n * @category Chains\n * @module chains\n */\n\nexport type { VanaChainConfig } from \"./definitions\";\nexport {\n vanaMainnet,\n moksha,\n mokshaTestnet,\n getChainConfig,\n getAllChains,\n} from \"./definitions\";\n"],"mappings":"AAkCA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/config/chains.ts"],"sourcesContent":["import type { Abi, Chain } from \"viem\";\nimport { defineChain } from \"viem\";\n\nexport const mokshaTestnet = defineChain({\n id: 14800,\n caipNetworkId: \"eip155:14800\",\n chainNamespace: \"eip155\",\n name: \"Moksha Testnet\",\n nativeCurrency: {\n name: \"VANA\",\n symbol: \"VANA\",\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.moksha.vana.org\"],\n },\n },\n blockExplorers: {\n default: {\n url: \"https://moksha.vanascan.io\",\n name: \"Vanascan - Moksha\",\n },\n blockscout: {\n url: \"https://moksha.vanascan.io\",\n name: \"Vanascan - Moksha\",\n },\n },\n contracts: {},\n abis: {},\n});\n\nexport const vanaMainnet = defineChain({\n id: 1480,\n caipNetworkId: \"eip155:1480\",\n chainNamespace: \"eip155\",\n name: \"Vana\",\n nativeCurrency: {\n name: \"VANA\",\n symbol: \"VANA\",\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.vana.org\"],\n },\n },\n blockExplorers: {\n default: {\n url: \"https://vanascan.io\",\n name: \"Vanascan\",\n },\n blockscout: {\n url: \"https://vanascan.io\",\n name: \"Vanascan\",\n },\n },\n contracts: {},\n abis: {},\n});\n\nexport interface Chains {\n [key: number]: Chain & { abis?: Record<string, Abi> };\n}\n\nexport const chains: Chains = {\n [mokshaTestnet.id]: mokshaTestnet,\n [vanaMainnet.id]: vanaMainnet,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAA4B;AAErB,MAAM,oBAAgB,yBAAY;AAAA,EACvC,IAAI;AAAA,EACJ,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,MAAM;AAAA,EACN,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,MACP,MAAM,CAAC,6BAA6B;AAAA,IACtC;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,MACP,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA,IACA,YAAY;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,WAAW,CAAC;AAAA,EACZ,MAAM,CAAC;AACT,CAAC;AAEM,MAAM,kBAAc,yBAAY;AAAA,EACrC,IAAI;AAAA,EACJ,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,MAAM;AAAA,EACN,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,MACP,MAAM,CAAC,sBAAsB;AAAA,IAC/B;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,MACP,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA,IACA,YAAY;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,WAAW,CAAC;AAAA,EACZ,MAAM,CAAC;AACT,CAAC;AAMM,MAAM,SAAiB;AAAA,EAC5B,CAAC,cAAc,EAAE,GAAG;AAAA,EACpB,CAAC,YAAY,EAAE,GAAG;AACpB;","names":[]}
1
+ {"version":3,"sources":["../../src/config/chains.ts"],"sourcesContent":["/**\n * Defines the supported Vana blockchain networks and their configurations.\n *\n * @remarks\n * This module provides the canonical chain definitions for the Vana protocol.\n * Each chain configuration includes RPC endpoints, block explorers, and network\n * metadata required for SDK operations. Use these definitions when configuring\n * wallet clients or checking network compatibility.\n *\n * @category Blockchain\n * @module chains\n */\n\nimport type { Abi, Chain } from \"viem\";\nimport { defineChain } from \"viem\";\n\n/**\n * Moksha testnet configuration for development and testing.\n *\n * @remarks\n * The Moksha testnet is Vana's primary test network for application development.\n * It provides a safe environment for testing smart contracts and SDK features\n * before mainnet deployment. Test VANA tokens can be obtained from the faucet.\n *\n * **Network Details:**\n * - Chain ID: 14800\n * - Currency: Test VANA (18 decimals)\n * - RPC: https://rpc.moksha.vana.org\n * - Explorer: https://moksha.vanascan.io\n *\n * @example\n * ```typescript\n * import { createWalletClient, http } from 'viem';\n * import { mokshaTestnet } from '@opendatalabs/vana-sdk';\n *\n * const client = createWalletClient({\n * chain: mokshaTestnet,\n * transport: http()\n * });\n * ```\n *\n * @category Blockchain\n */\nexport const mokshaTestnet = defineChain({\n id: 14800,\n caipNetworkId: \"eip155:14800\",\n chainNamespace: \"eip155\",\n name: \"Moksha Testnet\",\n nativeCurrency: {\n name: \"VANA\",\n symbol: \"VANA\",\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.moksha.vana.org\"],\n },\n },\n blockExplorers: {\n default: {\n url: \"https://moksha.vanascan.io\",\n name: \"Vanascan - Moksha\",\n },\n blockscout: {\n url: \"https://moksha.vanascan.io\",\n name: \"Vanascan - Moksha\",\n },\n },\n contracts: {},\n abis: {},\n});\n\n/**\n * Vana mainnet configuration for production deployments.\n *\n * @remarks\n * The Vana mainnet is the production network where real value transactions occur.\n * Use this chain for production applications after thorough testing on Moksha.\n * Requires real VANA tokens for gas fees and transactions.\n *\n * **Network Details:**\n * - Chain ID: 1480\n * - Currency: VANA (18 decimals)\n * - RPC: https://rpc.vana.org\n * - Explorer: https://vanascan.io\n *\n * @example\n * ```typescript\n * import { createWalletClient, http } from 'viem';\n * import { vanaMainnet } from '@opendatalabs/vana-sdk';\n *\n * const client = createWalletClient({\n * chain: vanaMainnet,\n * transport: http()\n * });\n * ```\n *\n * @category Blockchain\n */\nexport const vanaMainnet = defineChain({\n id: 1480,\n caipNetworkId: \"eip155:1480\",\n chainNamespace: \"eip155\",\n name: \"Vana\",\n nativeCurrency: {\n name: \"VANA\",\n symbol: \"VANA\",\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.vana.org\"],\n },\n },\n blockExplorers: {\n default: {\n url: \"https://vanascan.io\",\n name: \"Vanascan\",\n },\n blockscout: {\n url: \"https://vanascan.io\",\n name: \"Vanascan\",\n },\n },\n contracts: {},\n abis: {},\n});\n\n/**\n * Maps chain IDs to their complete configurations with optional ABIs.\n *\n * @remarks\n * Extends viem's Chain type to include optional contract ABIs for each network.\n * This allows dynamic chain selection based on runtime configuration.\n *\n * @category Blockchain\n */\nexport interface Chains {\n [key: number]: Chain & { abis?: Record<string, Abi> };\n}\n\n/**\n * Registry of all supported Vana chains indexed by chain ID.\n *\n * @remarks\n * Provides runtime access to chain configurations for dynamic network selection.\n * Use this when you need to select chains based on user input or environment variables.\n *\n * @example\n * ```typescript\n * const chainId = parseInt(process.env.CHAIN_ID || '14800');\n * const chain = chains[chainId];\n *\n * if (!chain) {\n * throw new Error(`Unsupported chain ID: ${chainId}`);\n * }\n *\n * const client = createPublicClient({\n * chain,\n * transport: http()\n * });\n * ```\n *\n * @category Blockchain\n */\nexport const chains: Chains = {\n [mokshaTestnet.id]: mokshaTestnet,\n [vanaMainnet.id]: vanaMainnet,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcA,kBAA4B;AA6BrB,MAAM,oBAAgB,yBAAY;AAAA,EACvC,IAAI;AAAA,EACJ,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,MAAM;AAAA,EACN,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,MACP,MAAM,CAAC,6BAA6B;AAAA,IACtC;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,MACP,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA,IACA,YAAY;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,WAAW,CAAC;AAAA,EACZ,MAAM,CAAC;AACT,CAAC;AA6BM,MAAM,kBAAc,yBAAY;AAAA,EACrC,IAAI;AAAA,EACJ,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,MAAM;AAAA,EACN,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,MACP,MAAM,CAAC,sBAAsB;AAAA,IAC/B;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,MACP,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA,IACA,YAAY;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,WAAW,CAAC;AAAA,EACZ,MAAM,CAAC;AACT,CAAC;AAuCM,MAAM,SAAiB;AAAA,EAC5B,CAAC,cAAc,EAAE,GAAG;AAAA,EACpB,CAAC,YAAY,EAAE,GAAG;AACpB;","names":[]}
@@ -1,4 +1,43 @@
1
+ /**
2
+ * Defines the supported Vana blockchain networks and their configurations.
3
+ *
4
+ * @remarks
5
+ * This module provides the canonical chain definitions for the Vana protocol.
6
+ * Each chain configuration includes RPC endpoints, block explorers, and network
7
+ * metadata required for SDK operations. Use these definitions when configuring
8
+ * wallet clients or checking network compatibility.
9
+ *
10
+ * @category Blockchain
11
+ * @module chains
12
+ */
1
13
  import type { Abi, Chain } from "viem";
14
+ /**
15
+ * Moksha testnet configuration for development and testing.
16
+ *
17
+ * @remarks
18
+ * The Moksha testnet is Vana's primary test network for application development.
19
+ * It provides a safe environment for testing smart contracts and SDK features
20
+ * before mainnet deployment. Test VANA tokens can be obtained from the faucet.
21
+ *
22
+ * **Network Details:**
23
+ * - Chain ID: 14800
24
+ * - Currency: Test VANA (18 decimals)
25
+ * - RPC: https://rpc.moksha.vana.org
26
+ * - Explorer: https://moksha.vanascan.io
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * import { createWalletClient, http } from 'viem';
31
+ * import { mokshaTestnet } from '@opendatalabs/vana-sdk';
32
+ *
33
+ * const client = createWalletClient({
34
+ * chain: mokshaTestnet,
35
+ * transport: http()
36
+ * });
37
+ * ```
38
+ *
39
+ * @category Blockchain
40
+ */
2
41
  export declare const mokshaTestnet: {
3
42
  blockExplorers: {
4
43
  readonly default: {
@@ -36,6 +75,33 @@ export declare const mokshaTestnet: {
36
75
  readonly chainNamespace: "eip155";
37
76
  readonly abis: {};
38
77
  };
78
+ /**
79
+ * Vana mainnet configuration for production deployments.
80
+ *
81
+ * @remarks
82
+ * The Vana mainnet is the production network where real value transactions occur.
83
+ * Use this chain for production applications after thorough testing on Moksha.
84
+ * Requires real VANA tokens for gas fees and transactions.
85
+ *
86
+ * **Network Details:**
87
+ * - Chain ID: 1480
88
+ * - Currency: VANA (18 decimals)
89
+ * - RPC: https://rpc.vana.org
90
+ * - Explorer: https://vanascan.io
91
+ *
92
+ * @example
93
+ * ```typescript
94
+ * import { createWalletClient, http } from 'viem';
95
+ * import { vanaMainnet } from '@opendatalabs/vana-sdk';
96
+ *
97
+ * const client = createWalletClient({
98
+ * chain: vanaMainnet,
99
+ * transport: http()
100
+ * });
101
+ * ```
102
+ *
103
+ * @category Blockchain
104
+ */
39
105
  export declare const vanaMainnet: {
40
106
  blockExplorers: {
41
107
  readonly default: {
@@ -73,9 +139,42 @@ export declare const vanaMainnet: {
73
139
  readonly chainNamespace: "eip155";
74
140
  readonly abis: {};
75
141
  };
142
+ /**
143
+ * Maps chain IDs to their complete configurations with optional ABIs.
144
+ *
145
+ * @remarks
146
+ * Extends viem's Chain type to include optional contract ABIs for each network.
147
+ * This allows dynamic chain selection based on runtime configuration.
148
+ *
149
+ * @category Blockchain
150
+ */
76
151
  export interface Chains {
77
152
  [key: number]: Chain & {
78
153
  abis?: Record<string, Abi>;
79
154
  };
80
155
  }
156
+ /**
157
+ * Registry of all supported Vana chains indexed by chain ID.
158
+ *
159
+ * @remarks
160
+ * Provides runtime access to chain configurations for dynamic network selection.
161
+ * Use this when you need to select chains based on user input or environment variables.
162
+ *
163
+ * @example
164
+ * ```typescript
165
+ * const chainId = parseInt(process.env.CHAIN_ID || '14800');
166
+ * const chain = chains[chainId];
167
+ *
168
+ * if (!chain) {
169
+ * throw new Error(`Unsupported chain ID: ${chainId}`);
170
+ * }
171
+ *
172
+ * const client = createPublicClient({
173
+ * chain,
174
+ * transport: http()
175
+ * });
176
+ * ```
177
+ *
178
+ * @category Blockchain
179
+ */
81
180
  export declare const chains: Chains;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/config/chains.ts"],"sourcesContent":["import type { Abi, Chain } from \"viem\";\nimport { defineChain } from \"viem\";\n\nexport const mokshaTestnet = defineChain({\n id: 14800,\n caipNetworkId: \"eip155:14800\",\n chainNamespace: \"eip155\",\n name: \"Moksha Testnet\",\n nativeCurrency: {\n name: \"VANA\",\n symbol: \"VANA\",\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.moksha.vana.org\"],\n },\n },\n blockExplorers: {\n default: {\n url: \"https://moksha.vanascan.io\",\n name: \"Vanascan - Moksha\",\n },\n blockscout: {\n url: \"https://moksha.vanascan.io\",\n name: \"Vanascan - Moksha\",\n },\n },\n contracts: {},\n abis: {},\n});\n\nexport const vanaMainnet = defineChain({\n id: 1480,\n caipNetworkId: \"eip155:1480\",\n chainNamespace: \"eip155\",\n name: \"Vana\",\n nativeCurrency: {\n name: \"VANA\",\n symbol: \"VANA\",\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.vana.org\"],\n },\n },\n blockExplorers: {\n default: {\n url: \"https://vanascan.io\",\n name: \"Vanascan\",\n },\n blockscout: {\n url: \"https://vanascan.io\",\n name: \"Vanascan\",\n },\n },\n contracts: {},\n abis: {},\n});\n\nexport interface Chains {\n [key: number]: Chain & { abis?: Record<string, Abi> };\n}\n\nexport const chains: Chains = {\n [mokshaTestnet.id]: mokshaTestnet,\n [vanaMainnet.id]: vanaMainnet,\n};\n"],"mappings":"AACA,SAAS,mBAAmB;AAErB,MAAM,gBAAgB,YAAY;AAAA,EACvC,IAAI;AAAA,EACJ,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,MAAM;AAAA,EACN,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,MACP,MAAM,CAAC,6BAA6B;AAAA,IACtC;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,MACP,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA,IACA,YAAY;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,WAAW,CAAC;AAAA,EACZ,MAAM,CAAC;AACT,CAAC;AAEM,MAAM,cAAc,YAAY;AAAA,EACrC,IAAI;AAAA,EACJ,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,MAAM;AAAA,EACN,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,MACP,MAAM,CAAC,sBAAsB;AAAA,IAC/B;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,MACP,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA,IACA,YAAY;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,WAAW,CAAC;AAAA,EACZ,MAAM,CAAC;AACT,CAAC;AAMM,MAAM,SAAiB;AAAA,EAC5B,CAAC,cAAc,EAAE,GAAG;AAAA,EACpB,CAAC,YAAY,EAAE,GAAG;AACpB;","names":[]}
1
+ {"version":3,"sources":["../../src/config/chains.ts"],"sourcesContent":["/**\n * Defines the supported Vana blockchain networks and their configurations.\n *\n * @remarks\n * This module provides the canonical chain definitions for the Vana protocol.\n * Each chain configuration includes RPC endpoints, block explorers, and network\n * metadata required for SDK operations. Use these definitions when configuring\n * wallet clients or checking network compatibility.\n *\n * @category Blockchain\n * @module chains\n */\n\nimport type { Abi, Chain } from \"viem\";\nimport { defineChain } from \"viem\";\n\n/**\n * Moksha testnet configuration for development and testing.\n *\n * @remarks\n * The Moksha testnet is Vana's primary test network for application development.\n * It provides a safe environment for testing smart contracts and SDK features\n * before mainnet deployment. Test VANA tokens can be obtained from the faucet.\n *\n * **Network Details:**\n * - Chain ID: 14800\n * - Currency: Test VANA (18 decimals)\n * - RPC: https://rpc.moksha.vana.org\n * - Explorer: https://moksha.vanascan.io\n *\n * @example\n * ```typescript\n * import { createWalletClient, http } from 'viem';\n * import { mokshaTestnet } from '@opendatalabs/vana-sdk';\n *\n * const client = createWalletClient({\n * chain: mokshaTestnet,\n * transport: http()\n * });\n * ```\n *\n * @category Blockchain\n */\nexport const mokshaTestnet = defineChain({\n id: 14800,\n caipNetworkId: \"eip155:14800\",\n chainNamespace: \"eip155\",\n name: \"Moksha Testnet\",\n nativeCurrency: {\n name: \"VANA\",\n symbol: \"VANA\",\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.moksha.vana.org\"],\n },\n },\n blockExplorers: {\n default: {\n url: \"https://moksha.vanascan.io\",\n name: \"Vanascan - Moksha\",\n },\n blockscout: {\n url: \"https://moksha.vanascan.io\",\n name: \"Vanascan - Moksha\",\n },\n },\n contracts: {},\n abis: {},\n});\n\n/**\n * Vana mainnet configuration for production deployments.\n *\n * @remarks\n * The Vana mainnet is the production network where real value transactions occur.\n * Use this chain for production applications after thorough testing on Moksha.\n * Requires real VANA tokens for gas fees and transactions.\n *\n * **Network Details:**\n * - Chain ID: 1480\n * - Currency: VANA (18 decimals)\n * - RPC: https://rpc.vana.org\n * - Explorer: https://vanascan.io\n *\n * @example\n * ```typescript\n * import { createWalletClient, http } from 'viem';\n * import { vanaMainnet } from '@opendatalabs/vana-sdk';\n *\n * const client = createWalletClient({\n * chain: vanaMainnet,\n * transport: http()\n * });\n * ```\n *\n * @category Blockchain\n */\nexport const vanaMainnet = defineChain({\n id: 1480,\n caipNetworkId: \"eip155:1480\",\n chainNamespace: \"eip155\",\n name: \"Vana\",\n nativeCurrency: {\n name: \"VANA\",\n symbol: \"VANA\",\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.vana.org\"],\n },\n },\n blockExplorers: {\n default: {\n url: \"https://vanascan.io\",\n name: \"Vanascan\",\n },\n blockscout: {\n url: \"https://vanascan.io\",\n name: \"Vanascan\",\n },\n },\n contracts: {},\n abis: {},\n});\n\n/**\n * Maps chain IDs to their complete configurations with optional ABIs.\n *\n * @remarks\n * Extends viem's Chain type to include optional contract ABIs for each network.\n * This allows dynamic chain selection based on runtime configuration.\n *\n * @category Blockchain\n */\nexport interface Chains {\n [key: number]: Chain & { abis?: Record<string, Abi> };\n}\n\n/**\n * Registry of all supported Vana chains indexed by chain ID.\n *\n * @remarks\n * Provides runtime access to chain configurations for dynamic network selection.\n * Use this when you need to select chains based on user input or environment variables.\n *\n * @example\n * ```typescript\n * const chainId = parseInt(process.env.CHAIN_ID || '14800');\n * const chain = chains[chainId];\n *\n * if (!chain) {\n * throw new Error(`Unsupported chain ID: ${chainId}`);\n * }\n *\n * const client = createPublicClient({\n * chain,\n * transport: http()\n * });\n * ```\n *\n * @category Blockchain\n */\nexport const chains: Chains = {\n [mokshaTestnet.id]: mokshaTestnet,\n [vanaMainnet.id]: vanaMainnet,\n};\n"],"mappings":"AAcA,SAAS,mBAAmB;AA6BrB,MAAM,gBAAgB,YAAY;AAAA,EACvC,IAAI;AAAA,EACJ,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,MAAM;AAAA,EACN,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,MACP,MAAM,CAAC,6BAA6B;AAAA,IACtC;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,MACP,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA,IACA,YAAY;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,WAAW,CAAC;AAAA,EACZ,MAAM,CAAC;AACT,CAAC;AA6BM,MAAM,cAAc,YAAY;AAAA,EACrC,IAAI;AAAA,EACJ,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,MAAM;AAAA,EACN,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,MACP,MAAM,CAAC,sBAAsB;AAAA,IAC/B;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,MACP,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA,IACA,YAAY;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,WAAW,CAAC;AAAA,EACZ,MAAM,CAAC;AACT,CAAC;AAuCM,MAAM,SAAiB;AAAA,EAC5B,CAAC,cAAc,EAAE,GAAG;AAAA,EACpB,CAAC,YAAY,EAAE,GAAG;AACpB;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/contracts/contractController.ts"],"sourcesContent":["import type { Abi } from \"abitype\";\nimport {\n getContract,\n type GetContractReturnType,\n type PublicClient,\n type WalletClient,\n} from \"viem\";\nimport { type ContractAbis, getAbi, type VanaContract } from \"../generated/abi\";\nimport type { VanaChainId, ContractInfo } from \"../types/index\";\nimport { getContractAddress, CONTRACT_ADDRESSES } from \"../config/addresses\";\nimport { createClient } from \"../core/client\";\nimport { vanaMainnet } from \"../config/chains\";\n\n// Cache for contract instances - keyed by contract name and chain ID\nconst contractCache = new Map<string, GetContractReturnType<Abi>>();\n\n// Export cache for testing\nexport const contractCacheForTesting = contractCache;\n\n/**\n * Creates a cache key for contract instances\n *\n * @param contract - The contract name to create a cache key for\n * @param chainId - The chain ID to include in the cache key\n * @returns A string cache key combining contract name and chain ID\n */\nfunction createCacheKey(contract: VanaContract, chainId: number): string {\n return `${contract}:${chainId}`;\n}\n\n/**\n * Gets a typed contract instance for the specified contract name with full type inference.\n * This function provides complete type safety following viem's patterns.\n *\n * @param contract - Name of the contract to instantiate (must be a const assertion for full typing)\n * @param client - Optional viem client instance\n * @returns A fully typed contract instance with methods corresponding to the contract's ABI\n * @example\n * ```typescript\n * // Full type inference with const assertion\n * const dataRegistry = getContractController(\"DataRegistry\" as const, client);\n *\n * // Now dataRegistry has full type inference for all methods\n * const result = await dataRegistry.read.getFileCount(); // Type: bigint\n * await dataRegistry.write.addFile([url, proof]); // Typed parameters\n * ```\n */\nexport function getContractController<T extends VanaContract>(\n contract: T,\n client:\n | PublicClient\n | WalletClient\n | ReturnType<typeof createClient> = createClient(),\n): GetContractReturnType<ContractAbis[T]> {\n const chainId = client.chain?.id ?? vanaMainnet.id;\n const cacheKey = createCacheKey(contract, chainId);\n\n let controller = contractCache.get(cacheKey);\n\n if (!controller) {\n controller = getContract({\n address: getContractAddress(chainId, contract),\n abi: getAbi(contract),\n client,\n }) as GetContractReturnType<ContractAbis[T]>;\n\n contractCache.set(cacheKey, controller);\n }\n\n return controller as GetContractReturnType<ContractAbis[T]>;\n}\n\n/**\n * Gets contract information (address and ABI) without creating a contract instance.\n * Useful for cases where you need contract details but don't want to create a client connection.\n *\n * @param contract - Name of the contract\n * @param chainId - Chain ID (defaults to Vana mainnet)\n * @returns Contract information with typed ABI\n * @example\n * ```typescript\n * const info = getContractInfo(\"DataRegistry\" as const, 14800);\n * console.log(info.address); // Typed as Address\n * console.log(info.abi); // Fully typed ABI\n * ```\n */\nexport function getContractInfo<T extends VanaContract>(\n contract: T,\n chainId: VanaChainId = vanaMainnet.id as VanaChainId,\n): ContractInfo<ContractAbis[T]> {\n return {\n address: getContractAddress(chainId, contract),\n abi: getAbi(contract),\n };\n}\n\n/**\n * Type-safe contract factory that creates contract instances with full type inference.\n * This provides an alternative API that's more explicit about typing.\n */\nexport class ContractFactory {\n private readonly client:\n | PublicClient\n | WalletClient\n | ReturnType<typeof createClient>;\n private readonly chainId: number;\n\n constructor(\n client: PublicClient | WalletClient | ReturnType<typeof createClient>,\n ) {\n this.client = client;\n try {\n this.chainId = client.chain?.id ?? vanaMainnet.id;\n } catch {\n this.chainId = vanaMainnet.id;\n }\n }\n\n /**\n * Creates a typed contract instance\n *\n * @param contract - Contract name (use const assertion for full typing)\n * @returns Fully typed contract instance\n */\n create<T extends VanaContract>(\n contract: T,\n ): GetContractReturnType<ContractAbis[T]> {\n return getContractController(contract, this.client);\n }\n\n /**\n * Gets contract information without creating an instance\n *\n * @param contract - Contract name\n * @returns Contract information with typed ABI\n */\n getInfo<T extends VanaContract>(contract: T): ContractInfo<ContractAbis[T]> {\n return getContractInfo(contract, this.chainId as VanaChainId);\n }\n\n /**\n * Lists all available contracts for the current chain\n *\n * @returns Array of contract names available on this chain\n */\n getAvailableContracts(): VanaContract[] {\n // Return all contract names that have addresses on this chain\n const chainAddresses = CONTRACT_ADDRESSES[this.chainId];\n if (!chainAddresses) return [];\n\n return Object.keys(chainAddresses) as VanaContract[];\n }\n}\n\n/**\n * Clears the contract cache. Useful for testing or when chain configurations change.\n *\n * @param contract - Optional specific contract to clear, or clear all if not provided\n * @param chainId - Optional specific chain to clear, or clear all if not provided\n */\nexport function clearContractCache(\n contract?: VanaContract,\n chainId?: number,\n): void {\n if (contract && chainId) {\n const cacheKey = createCacheKey(contract, chainId);\n contractCache.delete(cacheKey);\n } else if (contract) {\n // Clear all instances of this contract across all chains\n for (const key of contractCache.keys()) {\n if (key.startsWith(`${contract}:`)) {\n contractCache.delete(key);\n }\n }\n } else if (chainId) {\n // Clear all contracts for this chain\n for (const key of contractCache.keys()) {\n if (key.endsWith(`:${chainId}`)) {\n contractCache.delete(key);\n }\n }\n } else {\n // Clear entire cache\n contractCache.clear();\n }\n}\n\n// Function is already exported above, no need for redundant export\n\n// Type-only exports for enhanced type safety\nexport type { GetContractReturnType } from \"viem\";\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAKO;AACP,iBAA6D;AAE7D,uBAAuD;AACvD,oBAA6B;AAC7B,oBAA4B;AAG5B,MAAM,gBAAgB,oBAAI,IAAwC;AAG3D,MAAM,0BAA0B;AASvC,SAAS,eAAe,UAAwB,SAAyB;AACvE,SAAO,GAAG,QAAQ,IAAI,OAAO;AAC/B;AAmBO,SAAS,sBACd,UACA,aAGsC,4BAAa,GACX;AACxC,QAAM,UAAU,OAAO,OAAO,MAAM,0BAAY;AAChD,QAAM,WAAW,eAAe,UAAU,OAAO;AAEjD,MAAI,aAAa,cAAc,IAAI,QAAQ;AAE3C,MAAI,CAAC,YAAY;AACf,qBAAa,yBAAY;AAAA,MACvB,aAAS,qCAAmB,SAAS,QAAQ;AAAA,MAC7C,SAAK,mBAAO,QAAQ;AAAA,MACpB;AAAA,IACF,CAAC;AAED,kBAAc,IAAI,UAAU,UAAU;AAAA,EACxC;AAEA,SAAO;AACT;AAgBO,SAAS,gBACd,UACA,UAAuB,0BAAY,IACJ;AAC/B,SAAO;AAAA,IACL,aAAS,qCAAmB,SAAS,QAAQ;AAAA,IAC7C,SAAK,mBAAO,QAAQ;AAAA,EACtB;AACF;AAMO,MAAM,gBAAgB;AAAA,EACV;AAAA,EAIA;AAAA,EAEjB,YACE,QACA;AACA,SAAK,SAAS;AACd,QAAI;AACF,WAAK,UAAU,OAAO,OAAO,MAAM,0BAAY;AAAA,IACjD,QAAQ;AACN,WAAK,UAAU,0BAAY;AAAA,IAC7B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OACE,UACwC;AACxC,WAAO,sBAAsB,UAAU,KAAK,MAAM;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAgC,UAA4C;AAC1E,WAAO,gBAAgB,UAAU,KAAK,OAAsB;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,wBAAwC;AAEtC,UAAM,iBAAiB,oCAAmB,KAAK,OAAO;AACtD,QAAI,CAAC,eAAgB,QAAO,CAAC;AAE7B,WAAO,OAAO,KAAK,cAAc;AAAA,EACnC;AACF;AAQO,SAAS,mBACd,UACA,SACM;AACN,MAAI,YAAY,SAAS;AACvB,UAAM,WAAW,eAAe,UAAU,OAAO;AACjD,kBAAc,OAAO,QAAQ;AAAA,EAC/B,WAAW,UAAU;AAEnB,eAAW,OAAO,cAAc,KAAK,GAAG;AACtC,UAAI,IAAI,WAAW,GAAG,QAAQ,GAAG,GAAG;AAClC,sBAAc,OAAO,GAAG;AAAA,MAC1B;AAAA,IACF;AAAA,EACF,WAAW,SAAS;AAElB,eAAW,OAAO,cAAc,KAAK,GAAG;AACtC,UAAI,IAAI,SAAS,IAAI,OAAO,EAAE,GAAG;AAC/B,sBAAc,OAAO,GAAG;AAAA,MAC1B;AAAA,IACF;AAAA,EACF,OAAO;AAEL,kBAAc,MAAM;AAAA,EACtB;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/contracts/contractController.ts"],"sourcesContent":["/**\n * Provides type-safe contract interaction utilities for the Vana protocol.\n *\n * @remarks\n * This module enables strongly-typed smart contract interactions with automatic\n * ABI loading, address resolution, and instance caching. It follows viem's patterns\n * for contract typing while providing Vana-specific conveniences.\n *\n * @category Contracts\n * @module contractController\n */\n\nimport type { Abi } from \"abitype\";\nimport {\n getContract,\n type GetContractReturnType,\n type PublicClient,\n type WalletClient,\n} from \"viem\";\nimport { type ContractAbis, getAbi, type VanaContract } from \"../generated/abi\";\nimport type { VanaChainId, ContractInfo } from \"../types/index\";\nimport { getContractAddress, CONTRACT_ADDRESSES } from \"../config/addresses\";\nimport { createClient } from \"../core/client\";\nimport { vanaMainnet } from \"../config/chains\";\n\n// Cache for contract instances - keyed by contract name and chain ID\nconst contractCache = new Map<string, GetContractReturnType<Abi>>();\n\n// Export cache for testing\nexport const contractCacheForTesting = contractCache;\n\n/**\n * Creates a cache key for contract instances.\n *\n * @remarks\n * Generates unique keys for caching contract instances per chain to prevent\n * cross-chain contamination and improve performance.\n *\n * @param contract - The contract name to create a cache key for\n * @param chainId - The chain ID to include in the cache key\n * @returns A string cache key combining contract name and chain ID\n *\n * @internal\n */\nfunction createCacheKey(contract: VanaContract, chainId: number): string {\n return `${contract}:${chainId}`;\n}\n\n/**\n * Gets a typed contract instance for the specified contract name.\n *\n * @remarks\n * Provides complete type safety following viem's patterns with automatic\n * ABI loading and address resolution. Contract instances are cached per\n * chain for performance. Use const assertion for full type inference.\n *\n * @param contract - Name of the contract to instantiate.\n * Use const assertion for full typing: `\"DataRegistry\" as const`\n * @param client - Optional viem client instance.\n * Defaults to auto-configured client. Obtain via `createClient()` or viem.\n * @returns A fully typed contract instance with methods corresponding to the contract's ABI\n *\n * @example\n * ```typescript\n * // Full type inference with const assertion\n * const dataRegistry = getContractController(\"DataRegistry\" as const, client);\n *\n * // Now dataRegistry has full type inference for all methods\n * const result = await dataRegistry.read.getFileCount(); // Type: bigint\n * await dataRegistry.write.addFile([url, proof]); // Typed parameters\n *\n * // Auto-configured client\n * const permissions = getContractController(\"DataPortabilityPermissions\" as const);\n * const granted = await permissions.read.hasPermission([grantor, grantee]);\n * ```\n *\n * @category Contracts\n */\nexport function getContractController<T extends VanaContract>(\n contract: T,\n client:\n | PublicClient\n | WalletClient\n | ReturnType<typeof createClient> = createClient(),\n): GetContractReturnType<ContractAbis[T]> {\n const chainId = client.chain?.id ?? vanaMainnet.id;\n const cacheKey = createCacheKey(contract, chainId);\n\n let controller = contractCache.get(cacheKey);\n\n if (!controller) {\n controller = getContract({\n address: getContractAddress(chainId, contract),\n abi: getAbi(contract),\n client,\n }) as GetContractReturnType<ContractAbis[T]>;\n\n contractCache.set(cacheKey, controller);\n }\n\n return controller as GetContractReturnType<ContractAbis[T]>;\n}\n\n/**\n * Gets contract information without creating a contract instance.\n *\n * @remarks\n * Returns contract address and ABI for manual contract interaction or\n * custom client configuration. Useful when you need contract details\n * but don't want to create a client connection.\n *\n * @param contract - Name of the contract.\n * Use const assertion for typed ABI.\n * @param chainId - Chain ID to get contract info for.\n * Defaults to Vana mainnet (1480).\n * @returns Contract information with typed ABI\n *\n * @example\n * ```typescript\n * const info = getContractInfo(\"DataRegistry\" as const, 14800);\n * console.log(info.address); // Typed as Address\n * console.log(info.abi); // Fully typed ABI\n *\n * // Use with custom viem client\n * const contract = getContract({\n * ...info,\n * client: customClient\n * });\n * ```\n *\n * @category Contracts\n */\nexport function getContractInfo<T extends VanaContract>(\n contract: T,\n chainId: VanaChainId = vanaMainnet.id as VanaChainId,\n): ContractInfo<ContractAbis[T]> {\n return {\n address: getContractAddress(chainId, contract),\n abi: getAbi(contract),\n };\n}\n\n/**\n * Provides type-safe contract factory for creating multiple contract instances.\n *\n * @remarks\n * Alternative API for applications that need to create multiple contracts\n * with the same client. The factory pattern reduces boilerplate and ensures\n * consistent client configuration across contracts.\n *\n * @example\n * ```typescript\n * const factory = new ContractFactory(client);\n *\n * const dataRegistry = factory.create(\"DataRegistry\" as const);\n * const permissions = factory.create(\"DataPortabilityPermissions\" as const);\n *\n * // List available contracts\n * const contracts = factory.getAvailableContracts();\n * ```\n *\n * @category Contracts\n */\nexport class ContractFactory {\n private readonly client:\n | PublicClient\n | WalletClient\n | ReturnType<typeof createClient>;\n private readonly chainId: number;\n\n constructor(\n client: PublicClient | WalletClient | ReturnType<typeof createClient>,\n ) {\n this.client = client;\n try {\n this.chainId = client.chain?.id ?? vanaMainnet.id;\n } catch {\n this.chainId = vanaMainnet.id;\n }\n }\n\n /**\n * Creates a typed contract instance\n *\n * @param contract - Contract name (use const assertion for full typing)\n * @returns Fully typed contract instance\n */\n create<T extends VanaContract>(\n contract: T,\n ): GetContractReturnType<ContractAbis[T]> {\n return getContractController(contract, this.client);\n }\n\n /**\n * Gets contract information without creating an instance\n *\n * @param contract - Contract name\n * @returns Contract information with typed ABI\n */\n getInfo<T extends VanaContract>(contract: T): ContractInfo<ContractAbis[T]> {\n return getContractInfo(contract, this.chainId as VanaChainId);\n }\n\n /**\n * Lists all available contracts for the current chain\n *\n * @returns Array of contract names available on this chain\n */\n getAvailableContracts(): VanaContract[] {\n // Return all contract names that have addresses on this chain\n const chainAddresses = CONTRACT_ADDRESSES[this.chainId];\n if (!chainAddresses) return [];\n\n return Object.keys(chainAddresses) as VanaContract[];\n }\n}\n\n/**\n * Clears the contract cache. Useful for testing or when chain configurations change.\n *\n * @param contract - Optional specific contract to clear, or clear all if not provided\n * @param chainId - Optional specific chain to clear, or clear all if not provided\n */\nexport function clearContractCache(\n contract?: VanaContract,\n chainId?: number,\n): void {\n if (contract && chainId) {\n const cacheKey = createCacheKey(contract, chainId);\n contractCache.delete(cacheKey);\n } else if (contract) {\n // Clear all instances of this contract across all chains\n for (const key of contractCache.keys()) {\n if (key.startsWith(`${contract}:`)) {\n contractCache.delete(key);\n }\n }\n } else if (chainId) {\n // Clear all contracts for this chain\n for (const key of contractCache.keys()) {\n if (key.endsWith(`:${chainId}`)) {\n contractCache.delete(key);\n }\n }\n } else {\n // Clear entire cache\n contractCache.clear();\n }\n}\n\n// Function is already exported above, no need for redundant export\n\n// Type-only exports for enhanced type safety\nexport type { GetContractReturnType } from \"viem\";\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA,kBAKO;AACP,iBAA6D;AAE7D,uBAAuD;AACvD,oBAA6B;AAC7B,oBAA4B;AAG5B,MAAM,gBAAgB,oBAAI,IAAwC;AAG3D,MAAM,0BAA0B;AAevC,SAAS,eAAe,UAAwB,SAAyB;AACvE,SAAO,GAAG,QAAQ,IAAI,OAAO;AAC/B;AAgCO,SAAS,sBACd,UACA,aAGsC,4BAAa,GACX;AACxC,QAAM,UAAU,OAAO,OAAO,MAAM,0BAAY;AAChD,QAAM,WAAW,eAAe,UAAU,OAAO;AAEjD,MAAI,aAAa,cAAc,IAAI,QAAQ;AAE3C,MAAI,CAAC,YAAY;AACf,qBAAa,yBAAY;AAAA,MACvB,aAAS,qCAAmB,SAAS,QAAQ;AAAA,MAC7C,SAAK,mBAAO,QAAQ;AAAA,MACpB;AAAA,IACF,CAAC;AAED,kBAAc,IAAI,UAAU,UAAU;AAAA,EACxC;AAEA,SAAO;AACT;AA+BO,SAAS,gBACd,UACA,UAAuB,0BAAY,IACJ;AAC/B,SAAO;AAAA,IACL,aAAS,qCAAmB,SAAS,QAAQ;AAAA,IAC7C,SAAK,mBAAO,QAAQ;AAAA,EACtB;AACF;AAuBO,MAAM,gBAAgB;AAAA,EACV;AAAA,EAIA;AAAA,EAEjB,YACE,QACA;AACA,SAAK,SAAS;AACd,QAAI;AACF,WAAK,UAAU,OAAO,OAAO,MAAM,0BAAY;AAAA,IACjD,QAAQ;AACN,WAAK,UAAU,0BAAY;AAAA,IAC7B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OACE,UACwC;AACxC,WAAO,sBAAsB,UAAU,KAAK,MAAM;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAgC,UAA4C;AAC1E,WAAO,gBAAgB,UAAU,KAAK,OAAsB;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,wBAAwC;AAEtC,UAAM,iBAAiB,oCAAmB,KAAK,OAAO;AACtD,QAAI,CAAC,eAAgB,QAAO,CAAC;AAE7B,WAAO,OAAO,KAAK,cAAc;AAAA,EACnC;AACF;AAQO,SAAS,mBACd,UACA,SACM;AACN,MAAI,YAAY,SAAS;AACvB,UAAM,WAAW,eAAe,UAAU,OAAO;AACjD,kBAAc,OAAO,QAAQ;AAAA,EAC/B,WAAW,UAAU;AAEnB,eAAW,OAAO,cAAc,KAAK,GAAG;AACtC,UAAI,IAAI,WAAW,GAAG,QAAQ,GAAG,GAAG;AAClC,sBAAc,OAAO,GAAG;AAAA,MAC1B;AAAA,IACF;AAAA,EACF,WAAW,SAAS;AAElB,eAAW,OAAO,cAAc,KAAK,GAAG;AACtC,UAAI,IAAI,SAAS,IAAI,OAAO,EAAE,GAAG;AAC/B,sBAAc,OAAO,GAAG;AAAA,MAC1B;AAAA,IACF;AAAA,EACF,OAAO;AAEL,kBAAc,MAAM;AAAA,EACtB;AACF;","names":[]}
@@ -1,3 +1,14 @@
1
+ /**
2
+ * Provides type-safe contract interaction utilities for the Vana protocol.
3
+ *
4
+ * @remarks
5
+ * This module enables strongly-typed smart contract interactions with automatic
6
+ * ABI loading, address resolution, and instance caching. It follows viem's patterns
7
+ * for contract typing while providing Vana-specific conveniences.
8
+ *
9
+ * @category Contracts
10
+ * @module contractController
11
+ */
1
12
  import type { Abi } from "abitype";
2
13
  import { type GetContractReturnType, type PublicClient, type WalletClient } from "viem";
3
14
  import { type ContractAbis, type VanaContract } from "../generated/abi";
@@ -8,12 +19,19 @@ export declare const contractCacheForTesting: Map<string, {
8
19
  abi: Abi;
9
20
  }>;
10
21
  /**
11
- * Gets a typed contract instance for the specified contract name with full type inference.
12
- * This function provides complete type safety following viem's patterns.
22
+ * Gets a typed contract instance for the specified contract name.
23
+ *
24
+ * @remarks
25
+ * Provides complete type safety following viem's patterns with automatic
26
+ * ABI loading and address resolution. Contract instances are cached per
27
+ * chain for performance. Use const assertion for full type inference.
13
28
  *
14
- * @param contract - Name of the contract to instantiate (must be a const assertion for full typing)
15
- * @param client - Optional viem client instance
29
+ * @param contract - Name of the contract to instantiate.
30
+ * Use const assertion for full typing: `"DataRegistry" as const`
31
+ * @param client - Optional viem client instance.
32
+ * Defaults to auto-configured client. Obtain via `createClient()` or viem.
16
33
  * @returns A fully typed contract instance with methods corresponding to the contract's ABI
34
+ *
17
35
  * @example
18
36
  * ```typescript
19
37
  * // Full type inference with const assertion
@@ -22,27 +40,65 @@ export declare const contractCacheForTesting: Map<string, {
22
40
  * // Now dataRegistry has full type inference for all methods
23
41
  * const result = await dataRegistry.read.getFileCount(); // Type: bigint
24
42
  * await dataRegistry.write.addFile([url, proof]); // Typed parameters
43
+ *
44
+ * // Auto-configured client
45
+ * const permissions = getContractController("DataPortabilityPermissions" as const);
46
+ * const granted = await permissions.read.hasPermission([grantor, grantee]);
25
47
  * ```
48
+ *
49
+ * @category Contracts
26
50
  */
27
51
  export declare function getContractController<T extends VanaContract>(contract: T, client?: PublicClient | WalletClient | ReturnType<typeof createClient>): GetContractReturnType<ContractAbis[T]>;
28
52
  /**
29
- * Gets contract information (address and ABI) without creating a contract instance.
30
- * Useful for cases where you need contract details but don't want to create a client connection.
53
+ * Gets contract information without creating a contract instance.
31
54
  *
32
- * @param contract - Name of the contract
33
- * @param chainId - Chain ID (defaults to Vana mainnet)
55
+ * @remarks
56
+ * Returns contract address and ABI for manual contract interaction or
57
+ * custom client configuration. Useful when you need contract details
58
+ * but don't want to create a client connection.
59
+ *
60
+ * @param contract - Name of the contract.
61
+ * Use const assertion for typed ABI.
62
+ * @param chainId - Chain ID to get contract info for.
63
+ * Defaults to Vana mainnet (1480).
34
64
  * @returns Contract information with typed ABI
65
+ *
35
66
  * @example
36
67
  * ```typescript
37
68
  * const info = getContractInfo("DataRegistry" as const, 14800);
38
69
  * console.log(info.address); // Typed as Address
39
70
  * console.log(info.abi); // Fully typed ABI
71
+ *
72
+ * // Use with custom viem client
73
+ * const contract = getContract({
74
+ * ...info,
75
+ * client: customClient
76
+ * });
40
77
  * ```
78
+ *
79
+ * @category Contracts
41
80
  */
42
81
  export declare function getContractInfo<T extends VanaContract>(contract: T, chainId?: VanaChainId): ContractInfo<ContractAbis[T]>;
43
82
  /**
44
- * Type-safe contract factory that creates contract instances with full type inference.
45
- * This provides an alternative API that's more explicit about typing.
83
+ * Provides type-safe contract factory for creating multiple contract instances.
84
+ *
85
+ * @remarks
86
+ * Alternative API for applications that need to create multiple contracts
87
+ * with the same client. The factory pattern reduces boilerplate and ensures
88
+ * consistent client configuration across contracts.
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * const factory = new ContractFactory(client);
93
+ *
94
+ * const dataRegistry = factory.create("DataRegistry" as const);
95
+ * const permissions = factory.create("DataPortabilityPermissions" as const);
96
+ *
97
+ * // List available contracts
98
+ * const contracts = factory.getAvailableContracts();
99
+ * ```
100
+ *
101
+ * @category Contracts
46
102
  */
47
103
  export declare class ContractFactory {
48
104
  private readonly client;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/contracts/contractController.ts"],"sourcesContent":["import type { Abi } from \"abitype\";\nimport {\n getContract,\n type GetContractReturnType,\n type PublicClient,\n type WalletClient,\n} from \"viem\";\nimport { type ContractAbis, getAbi, type VanaContract } from \"../generated/abi\";\nimport type { VanaChainId, ContractInfo } from \"../types/index\";\nimport { getContractAddress, CONTRACT_ADDRESSES } from \"../config/addresses\";\nimport { createClient } from \"../core/client\";\nimport { vanaMainnet } from \"../config/chains\";\n\n// Cache for contract instances - keyed by contract name and chain ID\nconst contractCache = new Map<string, GetContractReturnType<Abi>>();\n\n// Export cache for testing\nexport const contractCacheForTesting = contractCache;\n\n/**\n * Creates a cache key for contract instances\n *\n * @param contract - The contract name to create a cache key for\n * @param chainId - The chain ID to include in the cache key\n * @returns A string cache key combining contract name and chain ID\n */\nfunction createCacheKey(contract: VanaContract, chainId: number): string {\n return `${contract}:${chainId}`;\n}\n\n/**\n * Gets a typed contract instance for the specified contract name with full type inference.\n * This function provides complete type safety following viem's patterns.\n *\n * @param contract - Name of the contract to instantiate (must be a const assertion for full typing)\n * @param client - Optional viem client instance\n * @returns A fully typed contract instance with methods corresponding to the contract's ABI\n * @example\n * ```typescript\n * // Full type inference with const assertion\n * const dataRegistry = getContractController(\"DataRegistry\" as const, client);\n *\n * // Now dataRegistry has full type inference for all methods\n * const result = await dataRegistry.read.getFileCount(); // Type: bigint\n * await dataRegistry.write.addFile([url, proof]); // Typed parameters\n * ```\n */\nexport function getContractController<T extends VanaContract>(\n contract: T,\n client:\n | PublicClient\n | WalletClient\n | ReturnType<typeof createClient> = createClient(),\n): GetContractReturnType<ContractAbis[T]> {\n const chainId = client.chain?.id ?? vanaMainnet.id;\n const cacheKey = createCacheKey(contract, chainId);\n\n let controller = contractCache.get(cacheKey);\n\n if (!controller) {\n controller = getContract({\n address: getContractAddress(chainId, contract),\n abi: getAbi(contract),\n client,\n }) as GetContractReturnType<ContractAbis[T]>;\n\n contractCache.set(cacheKey, controller);\n }\n\n return controller as GetContractReturnType<ContractAbis[T]>;\n}\n\n/**\n * Gets contract information (address and ABI) without creating a contract instance.\n * Useful for cases where you need contract details but don't want to create a client connection.\n *\n * @param contract - Name of the contract\n * @param chainId - Chain ID (defaults to Vana mainnet)\n * @returns Contract information with typed ABI\n * @example\n * ```typescript\n * const info = getContractInfo(\"DataRegistry\" as const, 14800);\n * console.log(info.address); // Typed as Address\n * console.log(info.abi); // Fully typed ABI\n * ```\n */\nexport function getContractInfo<T extends VanaContract>(\n contract: T,\n chainId: VanaChainId = vanaMainnet.id as VanaChainId,\n): ContractInfo<ContractAbis[T]> {\n return {\n address: getContractAddress(chainId, contract),\n abi: getAbi(contract),\n };\n}\n\n/**\n * Type-safe contract factory that creates contract instances with full type inference.\n * This provides an alternative API that's more explicit about typing.\n */\nexport class ContractFactory {\n private readonly client:\n | PublicClient\n | WalletClient\n | ReturnType<typeof createClient>;\n private readonly chainId: number;\n\n constructor(\n client: PublicClient | WalletClient | ReturnType<typeof createClient>,\n ) {\n this.client = client;\n try {\n this.chainId = client.chain?.id ?? vanaMainnet.id;\n } catch {\n this.chainId = vanaMainnet.id;\n }\n }\n\n /**\n * Creates a typed contract instance\n *\n * @param contract - Contract name (use const assertion for full typing)\n * @returns Fully typed contract instance\n */\n create<T extends VanaContract>(\n contract: T,\n ): GetContractReturnType<ContractAbis[T]> {\n return getContractController(contract, this.client);\n }\n\n /**\n * Gets contract information without creating an instance\n *\n * @param contract - Contract name\n * @returns Contract information with typed ABI\n */\n getInfo<T extends VanaContract>(contract: T): ContractInfo<ContractAbis[T]> {\n return getContractInfo(contract, this.chainId as VanaChainId);\n }\n\n /**\n * Lists all available contracts for the current chain\n *\n * @returns Array of contract names available on this chain\n */\n getAvailableContracts(): VanaContract[] {\n // Return all contract names that have addresses on this chain\n const chainAddresses = CONTRACT_ADDRESSES[this.chainId];\n if (!chainAddresses) return [];\n\n return Object.keys(chainAddresses) as VanaContract[];\n }\n}\n\n/**\n * Clears the contract cache. Useful for testing or when chain configurations change.\n *\n * @param contract - Optional specific contract to clear, or clear all if not provided\n * @param chainId - Optional specific chain to clear, or clear all if not provided\n */\nexport function clearContractCache(\n contract?: VanaContract,\n chainId?: number,\n): void {\n if (contract && chainId) {\n const cacheKey = createCacheKey(contract, chainId);\n contractCache.delete(cacheKey);\n } else if (contract) {\n // Clear all instances of this contract across all chains\n for (const key of contractCache.keys()) {\n if (key.startsWith(`${contract}:`)) {\n contractCache.delete(key);\n }\n }\n } else if (chainId) {\n // Clear all contracts for this chain\n for (const key of contractCache.keys()) {\n if (key.endsWith(`:${chainId}`)) {\n contractCache.delete(key);\n }\n }\n } else {\n // Clear entire cache\n contractCache.clear();\n }\n}\n\n// Function is already exported above, no need for redundant export\n\n// Type-only exports for enhanced type safety\nexport type { GetContractReturnType } from \"viem\";\n"],"mappings":"AACA;AAAA,EACE;AAAA,OAIK;AACP,SAA4B,cAAiC;AAE7D,SAAS,oBAAoB,0BAA0B;AACvD,SAAS,oBAAoB;AAC7B,SAAS,mBAAmB;AAG5B,MAAM,gBAAgB,oBAAI,IAAwC;AAG3D,MAAM,0BAA0B;AASvC,SAAS,eAAe,UAAwB,SAAyB;AACvE,SAAO,GAAG,QAAQ,IAAI,OAAO;AAC/B;AAmBO,SAAS,sBACd,UACA,SAGsC,aAAa,GACX;AACxC,QAAM,UAAU,OAAO,OAAO,MAAM,YAAY;AAChD,QAAM,WAAW,eAAe,UAAU,OAAO;AAEjD,MAAI,aAAa,cAAc,IAAI,QAAQ;AAE3C,MAAI,CAAC,YAAY;AACf,iBAAa,YAAY;AAAA,MACvB,SAAS,mBAAmB,SAAS,QAAQ;AAAA,MAC7C,KAAK,OAAO,QAAQ;AAAA,MACpB;AAAA,IACF,CAAC;AAED,kBAAc,IAAI,UAAU,UAAU;AAAA,EACxC;AAEA,SAAO;AACT;AAgBO,SAAS,gBACd,UACA,UAAuB,YAAY,IACJ;AAC/B,SAAO;AAAA,IACL,SAAS,mBAAmB,SAAS,QAAQ;AAAA,IAC7C,KAAK,OAAO,QAAQ;AAAA,EACtB;AACF;AAMO,MAAM,gBAAgB;AAAA,EACV;AAAA,EAIA;AAAA,EAEjB,YACE,QACA;AACA,SAAK,SAAS;AACd,QAAI;AACF,WAAK,UAAU,OAAO,OAAO,MAAM,YAAY;AAAA,IACjD,QAAQ;AACN,WAAK,UAAU,YAAY;AAAA,IAC7B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OACE,UACwC;AACxC,WAAO,sBAAsB,UAAU,KAAK,MAAM;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAgC,UAA4C;AAC1E,WAAO,gBAAgB,UAAU,KAAK,OAAsB;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,wBAAwC;AAEtC,UAAM,iBAAiB,mBAAmB,KAAK,OAAO;AACtD,QAAI,CAAC,eAAgB,QAAO,CAAC;AAE7B,WAAO,OAAO,KAAK,cAAc;AAAA,EACnC;AACF;AAQO,SAAS,mBACd,UACA,SACM;AACN,MAAI,YAAY,SAAS;AACvB,UAAM,WAAW,eAAe,UAAU,OAAO;AACjD,kBAAc,OAAO,QAAQ;AAAA,EAC/B,WAAW,UAAU;AAEnB,eAAW,OAAO,cAAc,KAAK,GAAG;AACtC,UAAI,IAAI,WAAW,GAAG,QAAQ,GAAG,GAAG;AAClC,sBAAc,OAAO,GAAG;AAAA,MAC1B;AAAA,IACF;AAAA,EACF,WAAW,SAAS;AAElB,eAAW,OAAO,cAAc,KAAK,GAAG;AACtC,UAAI,IAAI,SAAS,IAAI,OAAO,EAAE,GAAG;AAC/B,sBAAc,OAAO,GAAG;AAAA,MAC1B;AAAA,IACF;AAAA,EACF,OAAO;AAEL,kBAAc,MAAM;AAAA,EACtB;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/contracts/contractController.ts"],"sourcesContent":["/**\n * Provides type-safe contract interaction utilities for the Vana protocol.\n *\n * @remarks\n * This module enables strongly-typed smart contract interactions with automatic\n * ABI loading, address resolution, and instance caching. It follows viem's patterns\n * for contract typing while providing Vana-specific conveniences.\n *\n * @category Contracts\n * @module contractController\n */\n\nimport type { Abi } from \"abitype\";\nimport {\n getContract,\n type GetContractReturnType,\n type PublicClient,\n type WalletClient,\n} from \"viem\";\nimport { type ContractAbis, getAbi, type VanaContract } from \"../generated/abi\";\nimport type { VanaChainId, ContractInfo } from \"../types/index\";\nimport { getContractAddress, CONTRACT_ADDRESSES } from \"../config/addresses\";\nimport { createClient } from \"../core/client\";\nimport { vanaMainnet } from \"../config/chains\";\n\n// Cache for contract instances - keyed by contract name and chain ID\nconst contractCache = new Map<string, GetContractReturnType<Abi>>();\n\n// Export cache for testing\nexport const contractCacheForTesting = contractCache;\n\n/**\n * Creates a cache key for contract instances.\n *\n * @remarks\n * Generates unique keys for caching contract instances per chain to prevent\n * cross-chain contamination and improve performance.\n *\n * @param contract - The contract name to create a cache key for\n * @param chainId - The chain ID to include in the cache key\n * @returns A string cache key combining contract name and chain ID\n *\n * @internal\n */\nfunction createCacheKey(contract: VanaContract, chainId: number): string {\n return `${contract}:${chainId}`;\n}\n\n/**\n * Gets a typed contract instance for the specified contract name.\n *\n * @remarks\n * Provides complete type safety following viem's patterns with automatic\n * ABI loading and address resolution. Contract instances are cached per\n * chain for performance. Use const assertion for full type inference.\n *\n * @param contract - Name of the contract to instantiate.\n * Use const assertion for full typing: `\"DataRegistry\" as const`\n * @param client - Optional viem client instance.\n * Defaults to auto-configured client. Obtain via `createClient()` or viem.\n * @returns A fully typed contract instance with methods corresponding to the contract's ABI\n *\n * @example\n * ```typescript\n * // Full type inference with const assertion\n * const dataRegistry = getContractController(\"DataRegistry\" as const, client);\n *\n * // Now dataRegistry has full type inference for all methods\n * const result = await dataRegistry.read.getFileCount(); // Type: bigint\n * await dataRegistry.write.addFile([url, proof]); // Typed parameters\n *\n * // Auto-configured client\n * const permissions = getContractController(\"DataPortabilityPermissions\" as const);\n * const granted = await permissions.read.hasPermission([grantor, grantee]);\n * ```\n *\n * @category Contracts\n */\nexport function getContractController<T extends VanaContract>(\n contract: T,\n client:\n | PublicClient\n | WalletClient\n | ReturnType<typeof createClient> = createClient(),\n): GetContractReturnType<ContractAbis[T]> {\n const chainId = client.chain?.id ?? vanaMainnet.id;\n const cacheKey = createCacheKey(contract, chainId);\n\n let controller = contractCache.get(cacheKey);\n\n if (!controller) {\n controller = getContract({\n address: getContractAddress(chainId, contract),\n abi: getAbi(contract),\n client,\n }) as GetContractReturnType<ContractAbis[T]>;\n\n contractCache.set(cacheKey, controller);\n }\n\n return controller as GetContractReturnType<ContractAbis[T]>;\n}\n\n/**\n * Gets contract information without creating a contract instance.\n *\n * @remarks\n * Returns contract address and ABI for manual contract interaction or\n * custom client configuration. Useful when you need contract details\n * but don't want to create a client connection.\n *\n * @param contract - Name of the contract.\n * Use const assertion for typed ABI.\n * @param chainId - Chain ID to get contract info for.\n * Defaults to Vana mainnet (1480).\n * @returns Contract information with typed ABI\n *\n * @example\n * ```typescript\n * const info = getContractInfo(\"DataRegistry\" as const, 14800);\n * console.log(info.address); // Typed as Address\n * console.log(info.abi); // Fully typed ABI\n *\n * // Use with custom viem client\n * const contract = getContract({\n * ...info,\n * client: customClient\n * });\n * ```\n *\n * @category Contracts\n */\nexport function getContractInfo<T extends VanaContract>(\n contract: T,\n chainId: VanaChainId = vanaMainnet.id as VanaChainId,\n): ContractInfo<ContractAbis[T]> {\n return {\n address: getContractAddress(chainId, contract),\n abi: getAbi(contract),\n };\n}\n\n/**\n * Provides type-safe contract factory for creating multiple contract instances.\n *\n * @remarks\n * Alternative API for applications that need to create multiple contracts\n * with the same client. The factory pattern reduces boilerplate and ensures\n * consistent client configuration across contracts.\n *\n * @example\n * ```typescript\n * const factory = new ContractFactory(client);\n *\n * const dataRegistry = factory.create(\"DataRegistry\" as const);\n * const permissions = factory.create(\"DataPortabilityPermissions\" as const);\n *\n * // List available contracts\n * const contracts = factory.getAvailableContracts();\n * ```\n *\n * @category Contracts\n */\nexport class ContractFactory {\n private readonly client:\n | PublicClient\n | WalletClient\n | ReturnType<typeof createClient>;\n private readonly chainId: number;\n\n constructor(\n client: PublicClient | WalletClient | ReturnType<typeof createClient>,\n ) {\n this.client = client;\n try {\n this.chainId = client.chain?.id ?? vanaMainnet.id;\n } catch {\n this.chainId = vanaMainnet.id;\n }\n }\n\n /**\n * Creates a typed contract instance\n *\n * @param contract - Contract name (use const assertion for full typing)\n * @returns Fully typed contract instance\n */\n create<T extends VanaContract>(\n contract: T,\n ): GetContractReturnType<ContractAbis[T]> {\n return getContractController(contract, this.client);\n }\n\n /**\n * Gets contract information without creating an instance\n *\n * @param contract - Contract name\n * @returns Contract information with typed ABI\n */\n getInfo<T extends VanaContract>(contract: T): ContractInfo<ContractAbis[T]> {\n return getContractInfo(contract, this.chainId as VanaChainId);\n }\n\n /**\n * Lists all available contracts for the current chain\n *\n * @returns Array of contract names available on this chain\n */\n getAvailableContracts(): VanaContract[] {\n // Return all contract names that have addresses on this chain\n const chainAddresses = CONTRACT_ADDRESSES[this.chainId];\n if (!chainAddresses) return [];\n\n return Object.keys(chainAddresses) as VanaContract[];\n }\n}\n\n/**\n * Clears the contract cache. Useful for testing or when chain configurations change.\n *\n * @param contract - Optional specific contract to clear, or clear all if not provided\n * @param chainId - Optional specific chain to clear, or clear all if not provided\n */\nexport function clearContractCache(\n contract?: VanaContract,\n chainId?: number,\n): void {\n if (contract && chainId) {\n const cacheKey = createCacheKey(contract, chainId);\n contractCache.delete(cacheKey);\n } else if (contract) {\n // Clear all instances of this contract across all chains\n for (const key of contractCache.keys()) {\n if (key.startsWith(`${contract}:`)) {\n contractCache.delete(key);\n }\n }\n } else if (chainId) {\n // Clear all contracts for this chain\n for (const key of contractCache.keys()) {\n if (key.endsWith(`:${chainId}`)) {\n contractCache.delete(key);\n }\n }\n } else {\n // Clear entire cache\n contractCache.clear();\n }\n}\n\n// Function is already exported above, no need for redundant export\n\n// Type-only exports for enhanced type safety\nexport type { GetContractReturnType } from \"viem\";\n"],"mappings":"AAaA;AAAA,EACE;AAAA,OAIK;AACP,SAA4B,cAAiC;AAE7D,SAAS,oBAAoB,0BAA0B;AACvD,SAAS,oBAAoB;AAC7B,SAAS,mBAAmB;AAG5B,MAAM,gBAAgB,oBAAI,IAAwC;AAG3D,MAAM,0BAA0B;AAevC,SAAS,eAAe,UAAwB,SAAyB;AACvE,SAAO,GAAG,QAAQ,IAAI,OAAO;AAC/B;AAgCO,SAAS,sBACd,UACA,SAGsC,aAAa,GACX;AACxC,QAAM,UAAU,OAAO,OAAO,MAAM,YAAY;AAChD,QAAM,WAAW,eAAe,UAAU,OAAO;AAEjD,MAAI,aAAa,cAAc,IAAI,QAAQ;AAE3C,MAAI,CAAC,YAAY;AACf,iBAAa,YAAY;AAAA,MACvB,SAAS,mBAAmB,SAAS,QAAQ;AAAA,MAC7C,KAAK,OAAO,QAAQ;AAAA,MACpB;AAAA,IACF,CAAC;AAED,kBAAc,IAAI,UAAU,UAAU;AAAA,EACxC;AAEA,SAAO;AACT;AA+BO,SAAS,gBACd,UACA,UAAuB,YAAY,IACJ;AAC/B,SAAO;AAAA,IACL,SAAS,mBAAmB,SAAS,QAAQ;AAAA,IAC7C,KAAK,OAAO,QAAQ;AAAA,EACtB;AACF;AAuBO,MAAM,gBAAgB;AAAA,EACV;AAAA,EAIA;AAAA,EAEjB,YACE,QACA;AACA,SAAK,SAAS;AACd,QAAI;AACF,WAAK,UAAU,OAAO,OAAO,MAAM,YAAY;AAAA,IACjD,QAAQ;AACN,WAAK,UAAU,YAAY;AAAA,IAC7B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OACE,UACwC;AACxC,WAAO,sBAAsB,UAAU,KAAK,MAAM;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAgC,UAA4C;AAC1E,WAAO,gBAAgB,UAAU,KAAK,OAAsB;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,wBAAwC;AAEtC,UAAM,iBAAiB,mBAAmB,KAAK,OAAO;AACtD,QAAI,CAAC,eAAgB,QAAO,CAAC;AAE7B,WAAO,OAAO,KAAK,cAAc;AAAA,EACnC;AACF;AAQO,SAAS,mBACd,UACA,SACM;AACN,MAAI,YAAY,SAAS;AACvB,UAAM,WAAW,eAAe,UAAU,OAAO;AACjD,kBAAc,OAAO,QAAQ;AAAA,EAC/B,WAAW,UAAU;AAEnB,eAAW,OAAO,cAAc,KAAK,GAAG;AACtC,UAAI,IAAI,WAAW,GAAG,QAAQ,GAAG,GAAG;AAClC,sBAAc,OAAO,GAAG;AAAA,MAC1B;AAAA,IACF;AAAA,EACF,WAAW,SAAS;AAElB,eAAW,OAAO,cAAc,KAAK,GAAG;AACtC,UAAI,IAAI,SAAS,IAAI,OAAO,EAAE,GAAG;AAC/B,sBAAc,OAAO,GAAG;AAAA,MAC1B;AAAA,IACF;AAAA,EACF,OAAO;AAEL,kBAAc,MAAM;AAAA,EACtB;AACF;","names":[]}