{"_id":"@claritydao/midnight-agora-sdk","_rev":"7-fc4598ea3de117aebb80a2d3c30ad876","name":"@claritydao/midnight-agora-sdk","dist-tags":{"latest":"2.1.0","next":"2.0.0"},"versions":{"0.1.0":{"name":"@claritydao/midnight-agora-sdk","version":"0.1.0","_id":"@claritydao/midnight-agora-sdk@0.1.0","maintainers":[{"name":"justinschreiner","email":"justin@clearcontracts.io"},{"name":"mikekeke","email":"mikhail@mlabs.city"},{"name":"t4ccer","email":"t4ccer@gmail.com"},{"name":"goldie-laux","email":"mlaux6@outlook.com"},{"name":"rmgaray","email":"ramiro@mlabs.city"}],"dist":{"shasum":"2ce8699c8e00bc1949eaad6273a94292ec1b3e1e","tarball":"https://registry.npmjs.org/@claritydao/midnight-agora-sdk/-/midnight-agora-sdk-0.1.0.tgz","fileCount":60,"integrity":"sha512-5PluM+b6ISwbt40w734BZomiuN8HWFhXNVsmx/hDII9hOAHHHWENbN2djGvSiMMmj96mng2ytYLt3morki0uyw==","signatures":[{"sig":"MEUCIGJgT327atz14P1l/bs1z2+wOMjlszZv+0Kd6KTu6+9gAiEA27Z5V7+u/wYATQM6sjqp4idGNFtUcAflTPlpevbYJPQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":289983},"main":"./dist/index.js","type":"module","_from":"file:claritydao-midnight-agora-sdk-0.1.0.tgz","types":"./dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src","test":"vitest","build":"tsc"},"_npmUser":{"name":"justinschreiner","email":"justin@clearcontracts.io"},"_resolved":"/private/var/folders/q5/xrnh7bsj4nb8_kbzs4gtkx3r0000gn/T/22c258b00664eb5cfffea1cf3781999d/claritydao-midnight-agora-sdk-0.1.0.tgz","_integrity":"sha512-5PluM+b6ISwbt40w734BZomiuN8HWFhXNVsmx/hDII9hOAHHHWENbN2djGvSiMMmj96mng2ytYLt3morki0uyw==","_npmVersion":"10.9.0","description":"Production-ready TypeScript SDK for governance operations on the Midnight blockchain.","directories":{},"_nodeVersion":"23.3.0","dependencies":{"rxjs":"^7.8.2","fp-ts":"^2.16.11","semver":"^7.7.3","@midnight-ntwrk/zswap":"4.0.0","@midnight-ntwrk/ledger-v6":"6.2.0-rc.3","@agora-dao-midnight/contract":"0.1.0","@midnight-ntwrk/compact-runtime":"0.11.0-rc.1","@midnight-ntwrk/midnight-js-types":"3.0.0-alpha.11","@midnight-ntwrk/midnight-js-utils":"3.0.0-alpha.11","@midnight-ntwrk/dapp-connector-api":"4.0.0-beta.2","@midnight-ntwrk/midnight-js-contracts":"3.0.0-alpha.11","@midnight-ntwrk/midnight-js-network-id":"3.0.0-alpha.11","@midnight-ntwrk/wallet-sdk-address-format":"3.0.0-beta.11","@midnight-ntwrk/midnight-js-fetch-zk-config-provider":"3.0.0-alpha.11","@midnight-ntwrk/midnight-js-http-client-proof-provider":"3.0.0-alpha.11","@midnight-ntwrk/midnight-js-indexer-public-data-provider":"3.0.0-alpha.11","@midnight-ntwrk/midnight-js-level-private-state-provider":"3.0.0-alpha.11"},"_hasShrinkwrap":false,"devDependencies":{"pino":"^9.14.0","vitest":"^3.2.4","typescript":"^5.7.2","@types/node":"^22.10.2","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/midnight-agora-sdk_0.1.0_1769616397914_0.8194216496446531","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@claritydao/midnight-agora-sdk","version":"0.2.0","_id":"@claritydao/midnight-agora-sdk@0.2.0","maintainers":[{"name":"justinschreiner","email":"justin@clearcontracts.io"},{"name":"mikekeke","email":"mikhail@mlabs.city"},{"name":"t4ccer","email":"t4ccer@gmail.com"},{"name":"goldie-laux","email":"mlaux6@outlook.com"},{"name":"rmgaray","email":"ramiro@mlabs.city"}],"dist":{"shasum":"76105b1385168a4c4ca4588e5fa01262d13177ec","tarball":"https://registry.npmjs.org/@claritydao/midnight-agora-sdk/-/midnight-agora-sdk-0.2.0.tgz","fileCount":60,"integrity":"sha512-nVuLnY5Sv7Gvx5N3IL+t49KcRbubgVohvJhj1c7uP/cZXz0lQim5UbMAu2qCqnWpgd/PY6r4URlHMDS7Tdv4NQ==","signatures":[{"sig":"MEUCICdqgCDsb46z3CuKUXh1ecoGww9V+OqFaz0qDsS3u6a/AiEAmbuLMTwFOgLYJbum35VATLuGS48uu7Oa96L2aNSEWuA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":290986},"main":"./dist/index.js","type":"module","_from":"file:claritydao-midnight-agora-sdk-0.2.0.tgz","types":"./dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src","test":"vitest","build":"tsc"},"_npmUser":{"name":"justinschreiner","email":"justin@clearcontracts.io"},"_resolved":"/private/var/folders/q5/xrnh7bsj4nb8_kbzs4gtkx3r0000gn/T/ea7ae7b4d8bb1d32e965690bfebec294/claritydao-midnight-agora-sdk-0.2.0.tgz","_integrity":"sha512-nVuLnY5Sv7Gvx5N3IL+t49KcRbubgVohvJhj1c7uP/cZXz0lQim5UbMAu2qCqnWpgd/PY6r4URlHMDS7Tdv4NQ==","_npmVersion":"10.9.0","description":"Production-ready TypeScript SDK for governance operations on the Midnight blockchain.","directories":{},"_nodeVersion":"23.3.0","dependencies":{"rxjs":"^7.8.2","fp-ts":"^2.16.11","semver":"^7.7.3","@midnight-ntwrk/zswap":"4.0.0","@midnight-ntwrk/ledger-v6":"6.2.0-rc.3","@agora-dao-midnight/contract":"file:../contract","@midnight-ntwrk/compact-runtime":"0.11.0-rc.1","@midnight-ntwrk/midnight-js-types":"3.0.0-alpha.11","@midnight-ntwrk/midnight-js-utils":"3.0.0-alpha.11","@midnight-ntwrk/dapp-connector-api":"4.0.0-beta.2","@midnight-ntwrk/midnight-js-contracts":"3.0.0-alpha.11","@midnight-ntwrk/midnight-js-network-id":"3.0.0-alpha.11","@midnight-ntwrk/wallet-sdk-address-format":"3.0.0-beta.11","@midnight-ntwrk/midnight-js-fetch-zk-config-provider":"3.0.0-alpha.11","@midnight-ntwrk/midnight-js-http-client-proof-provider":"3.0.0-alpha.11","@midnight-ntwrk/midnight-js-indexer-public-data-provider":"3.0.0-alpha.11","@midnight-ntwrk/midnight-js-level-private-state-provider":"3.0.0-alpha.11"},"_hasShrinkwrap":false,"devDependencies":{"pino":"^9.14.0","vitest":"^3.2.4","typescript":"^5.7.2","@types/node":"^22.10.2","@types/semver":"^7.7.1"},"_npmOperationalInternal":{"tmp":"tmp/midnight-agora-sdk_0.2.0_1769625641557_0.6247554823146892","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@claritydao/midnight-agora-sdk","version":"1.2.0","_id":"@claritydao/midnight-agora-sdk@1.2.0","maintainers":[{"name":"justinschreiner","email":"justin@clearcontracts.io"},{"name":"mikekeke","email":"mikhail@mlabs.city"},{"name":"t4ccer","email":"t4ccer@gmail.com"},{"name":"goldie-laux","email":"mlaux6@outlook.com"},{"name":"rmgaray","email":"ramiro@mlabs.city"}],"dist":{"shasum":"5af4f262f30d1343d72dfd1b3463c72910f875ff","tarball":"https://registry.npmjs.org/@claritydao/midnight-agora-sdk/-/midnight-agora-sdk-1.2.0.tgz","fileCount":38,"integrity":"sha512-nMe3Y4+R0JBJ1IHJ3V8w4heqgf5ECMJzqdS7H5m58p8Hit27H/gcVDk28x2ADs9GhxqGa3WciOf3v9g7ZiVyFA==","signatures":[{"sig":"MEYCIQD4khOVMi0a4H8Ql1CSueXMtmNKQWwuU57E/KadPrSBeQIhAIl4x7AnhHOhHzuMBx6vxfAnqazTglEFTAxpY5avsQAZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":213496},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"e54b119f367289fb137245909efb14a3a2c9823b","scripts":{"dev":"tsc --watch","lint":"eslint src","test":"vitest","build":"rm -rf dist && tsc"},"_npmUser":{"name":"justinschreiner","email":"justin@clearcontracts.io"},"_npmVersion":"11.15.0","description":"Production-ready TypeScript SDK for governance operations on the Midnight blockchain.","directories":{},"_nodeVersion":"20.19.3","dependencies":{"rxjs":"^7.8.2","@midnight-ntwrk/ledger-v8":"8.0.3","@midnight-ntwrk/compact-js":"2.5.0","@midnight-ntwrk/compact-runtime":"0.16.0","@midnight-ntwrk/midnight-js-types":"4.0.4","@midnight-ntwrk/midnight-js-utils":"4.0.4","@midnight-ntwrk/dapp-connector-api":"4.0.1","@claritydao/midnight-agora-contracts":"1.2.0","@midnight-ntwrk/midnight-js-contracts":"4.0.4","@midnight-ntwrk/midnight-js-network-id":"4.0.4","@midnight-ntwrk/wallet-sdk-address-format":"3.1.1","@midnight-ntwrk/midnight-js-fetch-zk-config-provider":"4.0.4","@midnight-ntwrk/midnight-js-http-client-proof-provider":"4.0.4","@midnight-ntwrk/midnight-js-indexer-public-data-provider":"4.0.4"},"_hasShrinkwrap":false,"devDependencies":{"pino":"^9.14.0","vitest":"^3.2.4","typescript":"^5.7.2","@types/node":"^22.10.2"},"_npmOperationalInternal":{"tmp":"tmp/midnight-agora-sdk_1.2.0_1783350593057_0.7852063643227198","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@claritydao/midnight-agora-sdk","version":"1.3.0","_id":"@claritydao/midnight-agora-sdk@1.3.0","maintainers":[{"name":"justinschreiner","email":"justin@clearcontracts.io"},{"name":"mikekeke","email":"mikhail@mlabs.city"},{"name":"t4ccer","email":"t4ccer@gmail.com"},{"name":"goldie-laux","email":"mlaux6@outlook.com"},{"name":"rmgaray","email":"ramiro@mlabs.city"}],"dist":{"shasum":"2b463fdf6bf4185fa7a8032efdad10884ce1765b","tarball":"https://registry.npmjs.org/@claritydao/midnight-agora-sdk/-/midnight-agora-sdk-1.3.0.tgz","fileCount":38,"integrity":"sha512-ZMYPVXufyP3kIs6mCDAT9hFEcvuwShxdtO5VVLDG8kPw/SUcUAqdqEMA+UHQbXB1xQ7HP+LiyA69hy9Rux73FA==","signatures":[{"sig":"MEQCICeNScyyisri6oKU4lPZtG149WmwKSd7edchwGZlaMBzAiAP63VxSL8UsU91FYDLL0iP3ACg3GK5pAZbGvJIWAnctA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":298714},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"f21007fe4b42aaa567b7209143f5ab384e36ae5c","scripts":{"dev":"tsc --watch","lint":"eslint src","test":"vitest","build":"rm -rf dist && tsc"},"_npmUser":{"name":"justinschreiner","email":"justin@clearcontracts.io"},"_npmVersion":"11.15.0","description":"Production-ready TypeScript SDK for governance operations on the Midnight blockchain.","directories":{},"_nodeVersion":"20.19.3","dependencies":{"rxjs":"^7.8.2","@midnight-ntwrk/ledger-v8":"8.1.0","@midnight-ntwrk/compact-js":"2.5.1","@midnight-ntwrk/compact-runtime":"0.16.0","@midnight-ntwrk/midnight-js-types":"4.1.1","@midnight-ntwrk/midnight-js-utils":"4.1.1","@midnight-ntwrk/dapp-connector-api":"4.0.1","@claritydao/midnight-agora-contracts":"1.3.0","@midnight-ntwrk/midnight-js-contracts":"4.1.1","@midnight-ntwrk/midnight-js-network-id":"4.1.1","@midnight-ntwrk/wallet-sdk-address-format":"3.1.1","@midnight-ntwrk/midnight-js-fetch-zk-config-provider":"4.1.1","@midnight-ntwrk/midnight-js-http-client-proof-provider":"4.1.1","@midnight-ntwrk/midnight-js-indexer-public-data-provider":"4.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"pino":"^9.14.0","vitest":"^3.2.4","typescript":"^5.7.2","@types/node":"^22.10.2"},"_npmOperationalInternal":{"tmp":"tmp/midnight-agora-sdk_1.3.0_1787854772920_0.25214466213335296","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@claritydao/midnight-agora-sdk","version":"2.0.0","_id":"@claritydao/midnight-agora-sdk@2.0.0","maintainers":[{"name":"justinschreiner","email":"justin@clearcontracts.io"},{"name":"mikekeke","email":"mikhail@mlabs.city"},{"name":"t4ccer","email":"t4ccer@gmail.com"},{"name":"goldie-laux","email":"mlaux6@outlook.com"},{"name":"rmgaray","email":"ramiro@mlabs.city"}],"dist":{"shasum":"3977cc13c81412ca0f0904d5eb5e62334f2f46d4","tarball":"https://registry.npmjs.org/@claritydao/midnight-agora-sdk/-/midnight-agora-sdk-2.0.0.tgz","fileCount":38,"integrity":"sha512-TqV2KE3c0GLX/ZdTN3+q3Eb6M6hnKMlxun6KSWFstymgTfHjodZqqVPkX3aP/qAMc7kNsHtH/0BtYggbmZVfrg==","signatures":[{"sig":"MEUCIEzsmjTOPiVRWNs8eufXdgnrH2F4/kqgdqjTyC6b0zf1AiEAnkr9Kh0dR8PJp2rQehcnfTU37KQIiX4eecKRq7hCHl0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIA15Qb9uFFswPSwUZU5tJ7NUbGTURzExVh/Ji5SqaFIPAiEA0MOaf++/dFIZuc89TqqQuPy3EfscoA3noiImocP1pSs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":296153},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"caf00391e2b63ae9ff077684206ee64e5a0c0942","scripts":{"dev":"tsc --watch","lint":"eslint src","test":"vitest","build":"rm -rf dist && tsc"},"_npmUser":{"name":"justinschreiner","email":"justin@clearcontracts.io"},"_npmVersion":"11.15.0","description":"Production-ready TypeScript SDK for governance operations on the Midnight blockchain.","directories":{},"_nodeVersion":"20.19.3","dependencies":{"rxjs":"^7.8.2","@midnight-ntwrk/ledger-v8":"8.1.0","@midnight-ntwrk/compact-js":"2.5.1","@midnight-ntwrk/compact-runtime":"0.16.0","@midnight-ntwrk/midnight-js-types":"4.1.1","@midnight-ntwrk/midnight-js-utils":"4.1.1","@midnight-ntwrk/dapp-connector-api":"4.0.1","@claritydao/midnight-agora-contracts":"2.0.0","@midnight-ntwrk/midnight-js-contracts":"4.1.1","@midnight-ntwrk/midnight-js-network-id":"4.1.1","@midnight-ntwrk/wallet-sdk-address-format":"3.1.1","@midnight-ntwrk/midnight-js-fetch-zk-config-provider":"4.1.1","@midnight-ntwrk/midnight-js-http-client-proof-provider":"4.1.1","@midnight-ntwrk/midnight-js-indexer-public-data-provider":"4.1.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"pino":"^9.14.0","vitest":"^3.2.4","typescript":"^5.7.2","@types/node":"^22.10.2"},"_npmOperationalInternal":{"tmp":"tmp/midnight-agora-sdk_2.0.0_1789408910460_0.02202421787327813","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"_id":"@claritydao/midnight-agora-sdk@2.1.0","dist":{"shasum":"3c19d3f762f7e94f338dfbf28be289b165ddc520","tarball":"https://registry.npmjs.org/@claritydao/midnight-agora-sdk/-/midnight-agora-sdk-2.1.0.tgz","fileCount":38,"integrity":"sha512-yrRT6OG4bCdKlBVZY6Z9SJrTPEYO6oFCDCz5WbysOPHMljMB56N56z37gIeOJz6FGnFaDuBCUC2dHVs4IQeUMA==","signatures":[{"sig":"MEYCIQCV3TJ4RenggPB5VcUdauSGneGHfzyvK6RBP37cRUislQIhAJCxJ/KfXnD1/VYQSO+gtY1WTPVgxyKSZaRDsui05PcX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDUwyO2o9EMIEyyRASS3QlaaEYwTY/QgJou1rPYVIBE7AiAWdPmivBVGAUI//lBibHCFyPEo8VQKTdhPZ6ovU/eEPg=="}],"unpackedSize":296153},"main":"./dist/index.js","name":"@claritydao/midnight-agora-sdk","type":"module","types":"./dist/index.d.ts","gitHead":"8c8bd20fb49b75514f6ff51739cbaf9f38317eab","scripts":{"dev":"tsc --watch","lint":"eslint src","test":"vitest","build":"rm -rf dist && tsc"},"version":"2.1.0","_npmUser":{"name":"justinschreiner","email":"justin@clearcontracts.io"},"_npmVersion":"11.15.0","description":"Production-ready TypeScript SDK for governance operations on the Midnight blockchain.","directories":{},"maintainers":[{"name":"justinschreiner","email":"justin@clearcontracts.io"},{"name":"mikekeke","email":"mikhail@mlabs.city"},{"name":"t4ccer","email":"t4ccer@gmail.com"},{"name":"goldie-laux","email":"mlaux6@outlook.com"},{"name":"rmgaray","email":"ramiro@mlabs.city"}],"_nodeVersion":"20.19.3","dependencies":{"rxjs":"^7.8.2","@midnight-ntwrk/ledger-v8":"8.1.0","@midnight-ntwrk/compact-js":"2.5.1","@midnight-ntwrk/compact-runtime":"0.16.0","@midnight-ntwrk/midnight-js-types":"4.1.1","@midnight-ntwrk/midnight-js-utils":"4.1.1","@midnight-ntwrk/dapp-connector-api":"4.0.1","@claritydao/midnight-agora-contracts":"2.1.0","@midnight-ntwrk/midnight-js-contracts":"4.1.1","@midnight-ntwrk/midnight-js-network-id":"4.1.1","@midnight-ntwrk/wallet-sdk-address-format":"3.1.1","@midnight-ntwrk/midnight-js-fetch-zk-config-provider":"4.1.1","@midnight-ntwrk/midnight-js-http-client-proof-provider":"4.1.1","@midnight-ntwrk/midnight-js-indexer-public-data-provider":"4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"pino":"^9.14.0","vitest":"^3.2.4","typescript":"^5.7.2","@types/node":"^22.10.2"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/midnight-agora-sdk_2.1.0_1789676040393_0.25775648650601557"}}},"time":{"created":"2026-01-28T16:06:37.913Z","modified":"2026-09-17T20:14:00.831Z","0.1.0":"2026-01-28T16:06:38.084Z","0.2.0":"2026-01-28T18:40:41.714Z","1.2.0":"2026-07-06T15:09:53.189Z","1.3.0":"2026-08-27T18:19:33.075Z","2.0.0":"2026-09-14T18:01:50.561Z","2.1.0":"2026-09-17T20:14:00.495Z"},"description":"Production-ready TypeScript SDK for governance operations on the Midnight blockchain.","maintainers":[{"name":"justinschreiner","email":"justin@clearcontracts.io"},{"name":"mikekeke","email":"mikhail@mlabs.city"},{"name":"t4ccer","email":"t4ccer@gmail.com"},{"name":"goldie-laux","email":"mlaux6@outlook.com"},{"name":"rmgaray","email":"ramiro@mlabs.city"}],"readme":"# Agora DAO Midnight SDK\n\nProduction-ready TypeScript SDK for governance operations on the Midnight blockchain.\n\n## Overview\n\nThe Agora DAO Midnight SDK provides a type-safe, professional-grade interface for interacting with governance contracts on Midnight Network. It integrates with the Lace wallet extension and provides comprehensive APIs for DAO governance operations.\n\n## Features\n\n- **Type-Safe**: Full TypeScript support with comprehensive type definitions\n- **Production-Ready**: No hardcoded values, proper error handling, validation\n- **Browser-Native**: Works directly in modern browsers with Lace wallet\n- **Observable State**: Reactive patterns with RxJS for real-time updates\n- **Zero-Knowledge**: Privacy-preserving governance with ZK proofs\n- **Well-Documented**: Complete API reference and examples\n\n## Installation\n\n```bash\npnpm add @claritydao/midnight-agora-sdk\n```\n\n## 2.0 Migration\n\n`DeploymentConfig.adminKey` has been removed. Governor parameter changes are\nnow available only through a successful governance proposal and execution.\n\nGovernors deployed with 1.x retain their original circuit set and cannot be\nmade into 2.0 deployments by upgrading this package; deploy a new governor for\nthe 2.0 contract surface. Midnight's separate contract-maintenance authority\nstill controls verifier-key maintenance for a deployment that retains its\nsigning key. It is not an Agora administrator role and is not revoked by this\nrelease.\n\n## Quick Start\n\n### 1. Deploy a New Governor Contract\n\n```typescript\nimport { GovernorAPI, initializeProviders, ConfigPresets } from '@claritydao/midnight-agora-sdk';\nimport pino from 'pino';\n\nconst logger = pino({ level: 'info' });\n\n// Initialize providers (connects to Lace wallet)\nconst providers = await initializeProviders(logger);\n\n// Create deployment configuration\nconst config = {\n  governor: {\n    governance: ConfigPresets.testing(), // or ConfigPresets.production()\n    executionDelay: BigInt(60),\n    gracePeriod: BigInt(300),\n    maxActiveProposals: BigInt(100),\n    proposalLifetime: BigInt(86400),\n    emergencyVetoEnabled: true,\n    emergencyVetoThreshold: BigInt(75000),\n  },\n  token: {\n    name: 'My DAO Token',\n    symbol: 'MDAO',\n    decimals: BigInt(18),\n  },\n};\n\n// Deploy contract\nconst api = await GovernorAPI.deploy(providers, config, logger);\nconsole.log('Contract deployed at:', api.deployedContractAddress);\n```\n\n### 2. Join an Existing Contract\n\n```typescript\nimport { GovernorAPI, initializeProviders } from '@claritydao/midnight-agora-sdk';\nimport pino from 'pino';\n\nconst logger = pino({ level: 'info' });\nconst providers = await initializeProviders(logger);\n\n// Join existing contract\nconst contractAddress = 'existing-contract-address';\nconst api = await GovernorAPI.join(providers, contractAddress, logger);\n```\n\n### 3. Create a Proposal\n\n```typescript\nimport { VoteChoice } from '@claritydao/midnight-agora-sdk';\nimport type { EffectAction } from '@claritydao/midnight-agora-sdk';\n\n// Define the proposal effect (what happens if proposal passes)\nconst action: EffectAction = {\n  typ: 2, // Transfer type\n  token: tokenAddress,\n  amount: BigInt(10000),\n  to: recipientAddress,\n  configKey: new Uint8Array(32),\n  configValue: new Uint8Array(32),\n};\n\n// Create proposal (requires sufficient stake)\nconst { txData, proposalId } = await api.createProposal(\n  'Fund Community Initiative',\n  'Transfer 10,000 tokens to community wallet for Q1 initiatives',\n  creatorAddress,\n  action\n);\n\nconsole.log('Proposal created with ID:', proposalId);\n```\n\n### 4. Cast a Vote\n\n```typescript\nimport { VoteChoice } from '@claritydao/midnight-agora-sdk';\n\n// Vote on proposal (type-safe!)\nawait api.castVote(\n  proposalId,\n  voterAddress,\n  VoteChoice.For // VoteChoice.Against or VoteChoice.Abstain\n);\n\nconsole.log('Vote cast successfully');\n```\n\n## Configuration Presets\n\nThe SDK provides two configuration presets:\n\n### Testing Configuration\n\nFor development and testnet:\n\n```typescript\nimport { ConfigPresets } from '@claritydao/midnight-agora-sdk';\n\nconst governanceConfig = ConfigPresets.testing();\n// Returns:\n// {\n//   votingPeriod: BigInt(300),        // 5 minutes\n//   quorumThreshold: BigInt(100),     // 100 tokens\n//   proposalThreshold: BigInt(50),    // 50 tokens to create proposals\n//   proposalLifetime: BigInt(3600),   // 1 hour\n//   executionDelay: BigInt(60),       // 1 minute\n//   gracePeriod: BigInt(300),         // 5 minutes\n//   minStakeAmount: BigInt(10),       // 10 tokens minimum\n//   stakingPeriod: BigInt(60),        // 1 minute lock\n// }\n```\n\n### Production Configuration\n\nFor mainnet:\n\n```typescript\nimport { ConfigPresets } from '@claritydao/midnight-agora-sdk';\n\nconst governanceConfig = ConfigPresets.production();\n// Returns:\n// {\n//   votingPeriod: BigInt(604800),     // 7 days\n//   quorumThreshold: BigInt(100000),  // 100K tokens\n//   proposalThreshold: BigInt(50000), // 50K tokens to create proposals\n//   proposalLifetime: BigInt(1209600), // 14 days\n//   executionDelay: BigInt(86400),    // 24 hours\n//   gracePeriod: BigInt(259200),      // 3 days\n//   minStakeAmount: BigInt(1000),     // 1K tokens minimum\n//   stakingPeriod: BigInt(604800),    // 7 days lock\n// }\n```\n\n## API Reference\n\n### Types\n\n#### DeploymentConfig\n\nComplete deployment configuration:\n\n```typescript\ninterface DeploymentConfig {\n  governor: GovernorConfig;\n  token: TokenConfig;\n}\n```\n\n#### GovernorConfig\n\nGovernor contract parameters:\n\n```typescript\ninterface GovernorConfig {\n  governance: GovernanceConfig;\n  governanceToken: Uint8Array;\n  stakeAssetMode: StakeAssetMode; // Shielded or Unshielded per governor\n  executionDelay: bigint;\n  gracePeriod: bigint;\n  maxActiveProposals: bigint;\n  proposalLifetime: bigint;\n  emergencyVetoEnabled: boolean;\n  emergencyVetoThreshold: bigint;\n}\n```\n\n#### GovernanceConfig\n\nCore governance parameters:\n\n```typescript\ninterface GovernanceConfig {\n  votingPeriod: bigint;        // How long voting lasts\n  quorumThreshold: bigint;     // Minimum votes to pass\n  proposalThreshold: bigint;   // Stake required to create proposals\n  proposalLifetime: bigint;    // How long proposals remain valid\n  executionDelay: bigint;      // Time-lock before execution\n  gracePeriod: bigint;         // Window to execute after delay\n  minStakeAmount: bigint;      // Minimum stake to vote\n  stakingPeriod: bigint;       // Stake lock duration\n}\n```\n\n#### TokenConfig\n\nToken parameters:\n\n```typescript\ninterface TokenConfig {\n  tokenId: Uint8Array;\n  name: string;        // Max 64 characters\n  symbol: string;      // Max 16 characters\n  decimals: bigint;    // Max 18\n}\n```\n\n#### EffectAction\n\nThe single action to execute when a proposal passes:\n\n```typescript\ninterface EffectAction {\n  typ: number;              // Action type (1 = mint, 2 = transfer, 3 = config update)\n  token: Uint8Array;        // Token address (32 bytes)\n  amount: bigint;           // Amount to transfer\n  to: Uint8Array;           // Recipient address (32 bytes)\n  configKey: Uint8Array;    // Config key (32 bytes)\n  configValue: Uint8Array;  // Config value (32 bytes)\n}\n```\n\n#### VoteChoice\n\nType-safe vote choices:\n\n```typescript\nenum VoteChoice {\n  For = 0,       // Vote in favor\n  Against = 1,   // Vote against\n  Abstain = 2,   // Abstain from voting\n}\n```\n\n### GovernorAPI\n\n#### Static Methods\n\n##### deploy()\n\n```typescript\nstatic async deploy(\n  providers: GovernorProviders,\n  config: DeploymentConfig,\n  logger?: Logger\n): Promise<GovernorAPI>\n```\n\nDeploys a new governor contract with the specified configuration.\n\n**Parameters:**\n- `providers`: Initialized providers (from `initializeProviders`)\n- `config`: Deployment configuration\n- `logger` (optional): Pino logger instance\n\n**Returns:** GovernorAPI instance\n\n**Throws:**\n- `InvalidConfigurationError`: Invalid configuration parameters\n- `DeploymentError`: Contract deployment failed\n- `WalletNotConnectedError`: Wallet not connected\n\n**Example:**\n```typescript\nconst api = await GovernorAPI.deploy(providers, config, logger);\n```\n\n##### join()\n\n```typescript\nstatic async join(\n  providers: GovernorProviders,\n  contractAddress: ContractAddress,\n  logger?: Logger\n): Promise<GovernorAPI>\n```\n\nJoins an existing governor contract.\n\n**Parameters:**\n- `providers`: Initialized providers\n- `contractAddress`: Address of deployed contract\n- `logger` (optional): Pino logger instance\n\n**Returns:** GovernorAPI instance\n\n**Throws:**\n- `ContractNotFoundError`: Contract not found at address\n- `WalletNotConnectedError`: Wallet not connected\n\n#### Instance Methods\n\n##### createProposal()\n\n```typescript\nasync createProposal(\n  title: string,\n  description: string,\n  creator: Uint8Array,\n  action: EffectAction\n): Promise<{ txData: FinalizedTxData; proposalId: bigint }>\n```\n\nCreates a new governance proposal.\n\n**Parameters:**\n- `title`: Proposal title (max 256 chars)\n- `description`: Proposal description (max 10,000 chars)\n- `creator`: Creator address (32 bytes, must have sufficient stake)\n- `action`: Single effect action to execute if proposal passes\n\n**Returns:** Object with transaction data and proposal ID\n\n**Throws:**\n- `InvalidParameterError`: Invalid parameters\n- `InsufficientStakeError`: Creator has insufficient stake\n- `TransactionError`: Transaction failed\n\n**Example:**\n```typescript\nconst { proposalId } = await api.createProposal(\n  'Increase Treasury Allocation',\n  'Detailed description of the proposal...',\n  creatorAddress,\n  [\n    {\n      typ: 0,\n      token: tokenAddress,\n      amount: BigInt(10000),\n      to: recipientAddress,\n      configKey: new Uint8Array(32),\n      configValue: new Uint8Array(32),\n    },\n  ]\n);\n```\n\n##### castVote()\n\n```typescript\nasync castVote(\n  proposalId: bigint,\n  voter: Uint8Array,\n  choice: VoteChoice\n): Promise<FinalizedTxData>\n```\n\nCasts a vote on an active proposal.\n\n**Parameters:**\n- `proposalId`: Proposal ID to vote on\n- `voter`: Voter address (32 bytes, must have voting power)\n- `choice`: Vote choice (VoteChoice.For, VoteChoice.Against, or VoteChoice.Abstain)\n\n**Returns:** Transaction data\n\n**Throws:**\n- `InvalidParameterError`: Invalid parameters\n- `InsufficientStakeError`: Voter has insufficient voting power\n- `ProposalNotFoundError`: Proposal not found or not active\n- `TransactionError`: Transaction failed\n\n**Example:**\n```typescript\nawait api.castVote(proposalId, voterAddress, VoteChoice.For);\n```\n\n##### registerStake()\n\n```typescript\nasync registerStake(\n  userId: Uint8Array,\n  amount: bigint\n): Promise<FinalizedTxData>\n```\n\nRegisters a stake for governance participation.\n\n**Parameters:**\n- `userId`: User address (32 bytes)\n- `amount`: Amount to stake\n\n**Returns:** Transaction data\n\n##### finalizeProposal()\n\n```typescript\nasync finalizeProposal(proposalId: bigint): Promise<FinalizedTxData>\n```\n\nFinalizes a proposal after voting period ends.\n\n##### queueProposal()\n\n```typescript\nasync queueProposal(proposalId: bigint): Promise<FinalizedTxData>\n```\n\nQueues a finalized proposal for execution.\n\n##### executeProposal()\n\n```typescript\nasync executeProposal(\n  proposalId: bigint,\n  effectId: bigint\n): Promise<FinalizedTxData>\n```\n\nExecutes a queued proposal after execution delay.\n\n##### getProposalDetails()\n\n```typescript\nasync getProposalDetails(proposalId: bigint): Promise<ProposalDetails>\n```\n\nGets detailed information about a proposal.\n\n##### getProposalVoteCount()\n\n```typescript\nasync getProposalVoteCount(proposalId: bigint): Promise<VoteCount>\n```\n\nGets vote counts for a proposal.\n\n##### getStakeInfo()\n\n```typescript\nasync getStakeInfo(userId: Uint8Array): Promise<StakeInfo>\n```\n\nGets staking information for a user.\n\n### initializeProviders()\n\n```typescript\nasync function initializeProviders(logger: Logger): Promise<GovernorProviders>\n```\n\nInitializes all required providers for governance operations.\n\n**What it does:**\n1. Connects to Lace wallet extension\n2. Requests user authorization\n3. Retrieves wallet state and service URIs\n4. Configures all providers (IndexedDB, HTTP, Indexer, Wallet, Proof server)\n\n**Parameters:**\n- `logger`: Pino logger instance\n\n**Returns:** Configured providers object\n\n**Throws:**\n- Error if Lace wallet not found\n- Error if wallet connection rejected\n- Error if incompatible wallet version\n\n**Example:**\n```typescript\nconst providers = await initializeProviders(logger);\n```\n\n### GovernorManager\n\nHigh-level API with observable state management.\n\n#### Constructor\n\n```typescript\nconstructor(\n  deploymentConfig: DeploymentConfig,\n  logger: Logger\n)\n```\n\n**Parameters:**\n- `deploymentConfig`: Deployment configuration\n- `logger`: Pino logger instance\n\n**Example:**\n```typescript\nconst manager = new GovernorManager(config, logger);\n```\n\n#### Methods\n\n##### resolve()\n\n```typescript\nresolve(contractAddress?: ContractAddress): Observable<GovernorDeployment>\n```\n\nDeploys a new contract or joins an existing one, with observable state.\n\n**Returns:** Observable that emits deployment state changes\n\n**Deployment States:**\n```typescript\n{ status: 'in-progress' }\n{ status: 'deployed', api: DeployedGovernorAPI }\n{ status: 'failed', error: Error }\n```\n\n## Error Handling\n\n### Custom Error Classes\n\nThe SDK provides specific error classes for different failure scenarios:\n\n```typescript\nimport {\n  GovernorSDKError,\n  WalletNotConnectedError,\n  InsufficientStakeError,\n  InvalidParameterError,\n  ContractNotFoundError,\n  ProposalNotFoundError,\n  TransactionError,\n  DeploymentError,\n  InvalidConfigurationError,\n  NetworkNotConfiguredError,\n} from '@claritydao/midnight-agora-sdk';\n```\n\n### Error Handling Pattern\n\n```typescript\ntry {\n  await api.createProposal(title, description, creator, action);\n} catch (error) {\n  if (error instanceof InsufficientStakeError) {\n    console.error('Need more stake:', error.message);\n  } else if (error instanceof InvalidParameterError) {\n    console.error('Invalid input:', error.message);\n  } else if (error instanceof TransactionError) {\n    console.error('Transaction failed:', error.message);\n  } else {\n    console.error('Unexpected error:', error);\n  }\n}\n```\n\n## Validation\n\nThe SDK includes comprehensive input validation:\n\n```typescript\nimport { validators } from '@claritydao/midnight-agora-sdk';\n\n// Validate proposal parameters\nvalidators.validateProposal(title, description, creator);\n\n// Validate vote choice\nvalidators.validateVoteChoice(choice);\n\n// Validate deployment config\nvalidators.validateDeploymentConfig(config);\n\n// Validate governance config\nvalidators.validateGovernanceConfig(governanceConfig);\n```\n\n## Browser Integration\n\n### Critical: Frontend Setup Requirements\n\nBefore integrating this SDK into a browser application, you MUST configure your build tool correctly to handle WASM modules. **Failure to do so will result in the error `ocrt.maxField is not a function`.**\n\n### Required: Vite Configuration\n\n**IMPORTANT:** Use Vite, not Next.js. Next.js 15's Turbopack does not support the webpack configurations required for this WASM pattern.\n\n#### 1. Install Required Vite Plugins\n\n```bash\npnpm add -D vite vite-plugin-wasm vite-plugin-top-level-await @vitejs/plugin-react\n```\n\n#### 2. Create `vite.config.ts`\n\nThis exact configuration is required. It's based on Midnight Network's official `example-bboard` implementation:\n\n```typescript\nimport { defineConfig } from 'vite';\nimport react from '@vitejs/plugin-react';\nimport wasm from 'vite-plugin-wasm';\nimport topLevelAwait from 'vite-plugin-top-level-await';\nimport path from 'node:path';\n\nconst onchainRuntimePackage = '@midnight-ntwrk/onchain-runtime-v3';\n\nexport default defineConfig({\n  cacheDir: './.vite',\n  build: {\n    target: 'esnext',\n    minify: false,\n    rollupOptions: {\n      output: {\n        manualChunks: {\n          // CRITICAL: Separate chunk for WASM modules\n          wasm: [onchainRuntimePackage],\n        },\n      },\n    },\n    commonjsOptions: {\n      // CRITICAL: Transform CommonJS to ESM\n      transformMixedEsModules: true,\n      extensions: ['.js', '.cjs'],\n      ignoreDynamicRequires: true,\n    },\n  },\n  plugins: [\n    react(),\n    wasm(),\n    topLevelAwait({\n      promiseExportName: '__tla',\n      promiseImportName: (i) => `__tla_${i}`,\n    }),\n    // CRITICAL: Custom resolver for WASM module handling\n    {\n      name: 'wasm-module-resolver',\n      resolveId(source, importer) {\n        if (\n          (source === '@midnight-ntwrk/onchain-runtime' || source === onchainRuntimePackage) &&\n          importer &&\n          importer.includes('@midnight-ntwrk/compact-runtime')\n        ) {\n          return {\n            id: source,\n            external: false,\n            moduleSideEffects: true,\n          };\n        }\n        return null;\n      },\n    },\n  ],\n  optimizeDeps: {\n    esbuildOptions: {\n      target: 'esnext',\n      supported: { 'top-level-await': true },\n      platform: 'browser',\n      format: 'esm',\n      loader: { '.wasm': 'binary' },\n    },\n    // CRITICAL: Pre-bundle for CJS→ESM conversion\n    include: ['@midnight-ntwrk/compact-runtime'],\n    // CRITICAL: Exclude WASM from optimization\n    exclude: [\n      onchainRuntimePackage,\n      `${onchainRuntimePackage}/midnight_onchain_runtime_wasm_bg.wasm`,\n      `${onchainRuntimePackage}/midnight_onchain_runtime_wasm.js`,\n    ],\n  },\n  resolve: {\n    extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.wasm'],\n    mainFields: ['browser', 'module', 'main'],\n    alias: {\n      '@midnight-ntwrk/onchain-runtime': onchainRuntimePackage,\n      'isomorphic-ws': path.resolve(__dirname, './src/shims/isomorphic-ws.ts'),\n    },\n  },\n});\n```\n\n#### Why This Configuration is Required\n\nThe SDK depends on `@midnight-ntwrk/compact-runtime`, which:\n1. Uses CommonJS (`require()`)\n2. Imports `@midnight-ntwrk/onchain-runtime-v3` (WASM module with top-level await)\n3. Executes `ocrt.maxField()` at the top level\n\nThis creates a CJS/ESM/WASM incompatibility that requires the custom resolver plugin and specific optimization settings.\n\n### Why Next.js Doesn't Work\n\nNext.js 15 uses **Turbopack** by default, which doesn't support the webpack configurations needed:\n\n```typescript\n// These webpack configs don't work with Turbopack:\nconfig.experiments = {\n  asyncWebAssembly: true,\n  topLevelAwait: true,\n};\n```\n\nEven with the `--webpack` flag, the CJS/ESM/WASM interaction is too complex for Next.js to handle correctly.\n\n**Recommendation:** Use Vite for browser dApps (officially supported by Midnight Network).\n\n### React Example\n\n```tsx\nimport { GovernorManager, VoteChoice, ConfigPresets } from '@claritydao/midnight-agora-sdk';\nimport { randomBytes } from '@midnight-ntwrk/midnight-js-utils';\nimport { useEffect, useState } from 'react';\nimport pino from 'pino';\n\nconst logger = pino({ level: 'info' });\n\nconst config = {\n  governor: {\n    governance: ConfigPresets.testing(),\n    executionDelay: BigInt(60),\n    gracePeriod: BigInt(300),\n    maxActiveProposals: BigInt(100),\n    proposalLifetime: BigInt(3600),\n    emergencyVetoEnabled: true,\n    emergencyVetoThreshold: BigInt(75000),\n  },\n  token: {\n    name: 'Test DAO',\n    symbol: 'TDAO',\n    decimals: BigInt(18),\n  },\n};\n\nconst manager = new GovernorManager(config, logger);\n\nfunction GovernanceApp() {\n  const [deployment, setDeployment] = useState(null);\n\n  useEffect(() => {\n    const subscription = manager.resolve().subscribe(setDeployment);\n    return () => subscription.unsubscribe();\n  }, []);\n\n  if (!deployment || deployment.status === 'in-progress') {\n    return <div>Connecting to wallet and deploying contract...</div>;\n  }\n\n  if (deployment.status === 'failed') {\n    return <div>Error: {deployment.error.message}</div>;\n  }\n\n  const api = deployment.api;\n\n  const handleCreateProposal = async () => {\n    try {\n      const action = {\n        typ: 2,\n        token: tokenAddress,\n        amount: BigInt(1000),\n        to: recipientAddress,\n        configKey: new Uint8Array(32),\n        configValue: new Uint8Array(32),\n      };\n\n      const { proposalId } = await api.createProposal(\n        'My Proposal',\n        'Description here',\n        creatorAddress,\n        action\n      );\n\n      alert(`Proposal created: ${proposalId}`);\n    } catch (error) {\n      alert(`Error: ${error.message}`);\n    }\n  };\n\n  const handleVote = async (proposalId) => {\n    try {\n      await api.castVote(proposalId, voterAddress, VoteChoice.For);\n      alert('Vote cast successfully');\n    } catch (error) {\n      alert(`Error: ${error.message}`);\n    }\n  };\n\n  return (\n    <div>\n      <h1>Governor Contract</h1>\n      <p>Address: {api.deployedContractAddress}</p>\n\n      <button onClick={handleCreateProposal}>Create Proposal</button>\n      <button onClick={() => handleVote(1n)}>Vote For Proposal #1</button>\n    </div>\n  );\n}\n```\n\n## Security Best Practices\n\n### 1. Use Configuration Presets\n\n```typescript\n// ✅ Good: Use tested presets\nconst config = ConfigPresets.production();\n\n// ❌ Bad: Hardcoded magic numbers\nconst config = {\n  votingPeriod: BigInt(300), // What does 300 mean?\n  // ...\n};\n```\n\n### 3. Validate User Inputs\n\n```typescript\nimport { validators } from '@claritydao/midnight-agora-sdk';\n\n// ✅ Good: Validate before submission\nvalidators.validateProposal(title, description, creator);\nawait api.createProposal(title, description, creator, action);\n\n// ❌ Bad: No validation\nawait api.createProposal(title, description, creator, action);\n```\n\n### 4. Handle Errors Gracefully\n\n```typescript\n// ✅ Good: Specific error handling\ntry {\n  await api.castVote(proposalId, voter, choice);\n} catch (error) {\n  if (error instanceof InsufficientStakeError) {\n    showMessage('You need more stake to vote');\n  } else {\n    showMessage('An error occurred');\n  }\n}\n\n// ❌ Bad: Silent failures\ntry {\n  await api.castVote(proposalId, voter, choice);\n} catch (error) {\n  // Silent failure\n}\n```\n\n## Troubleshooting\n\n### Critical: WASM Initialization Error\n\n**Problem:** `TypeError: ocrt.maxField is not a function`\n\n**Root Cause:** CJS/ESM/WASM module incompatibility. The SDK depends on `@midnight-ntwrk/compact-runtime` (CommonJS) which requires `@midnight-ntwrk/onchain-runtime-v3` (WASM with top-level await).\n\n**Solutions:**\n\n1. **Use Vite, not Next.js**\n   ```bash\n   # Install Vite and required plugins\n   pnpm add -D vite vite-plugin-wasm vite-plugin-top-level-await @vitejs/plugin-react\n   ```\n\n2. **Configure vite.config.ts correctly** - See \"Browser Integration\" section above for complete configuration\n\n3. **Key configuration requirements:**\n   - Custom `wasm-module-resolver` plugin\n   - `transformMixedEsModules: true` in commonjsOptions\n   - Manual chunks for WASM modules\n   - Proper include/exclude in optimizeDeps\n\n**Error Location:**\n```\nFile: node_modules/@midnight-ntwrk/compact-runtime/dist/runtime.js:90\nCode: exports.MAX_FIELD = ocrt.maxField();\n```\n\n**Why Next.js Doesn't Work:**\n- Next.js 15 uses Turbopack which doesn't support required webpack configurations\n- Even with `--webpack` flag, the CJS/ESM/WASM interaction is too complex\n\n**Reference Implementations:**\n- Working example: Midnight Network's `example-bboard` application\n- Configuration tested and verified in production\n\n### Build Configuration Issues\n\n**Problem:** \"require is not defined\" in browser\n\n**Root Cause:** Contract module uses CommonJS but wasn't transformed to ESM\n\n**Solution:**\n```typescript\n// In vite.config.ts\ncommonjsOptions: {\n  transformMixedEsModules: true,\n  extensions: ['.js', '.cjs'],\n}\n```\n\n**Problem:** \"Top-level await is not available\"\n\n**Root Cause:** WASM module with top-level await in wrong bundle chunk\n\n**Solution:**\n```typescript\n// In vite.config.ts\nrollupOptions: {\n  output: {\n    manualChunks: {\n      wasm: ['@midnight-ntwrk/onchain-runtime-v3'],\n    },\n  },\n}\n```\n\n**Problem:** Module optimization errors during build\n\n**Root Cause:** Vite trying to optimize WASM and CJS modules together\n\n**Solution:**\n```typescript\n// In vite.config.ts\noptimizeDeps: {\n  include: ['@midnight-ntwrk/compact-runtime'],  // Pre-bundle for CJS→ESM\n  exclude: [\n    '@midnight-ntwrk/onchain-runtime-v3',        // Don't optimize WASM\n    '@claritydao/midnight-agora-contracts',              // Don't optimize contract\n  ],\n}\n```\n\n### Wallet Connection Issues\n\n**Problem:** \"Could not find Midnight Lace wallet\"\n\n**Solutions:**\n- Install Lace wallet extension from [lace.io](https://www.lace.io/)\n- Refresh the browser page\n- Check browser console for errors\n- Ensure extension is enabled\n\n**Problem:** \"Incompatible version of Midnight Lace wallet\"\n\n**Solutions:**\n- Update Lace extension to latest version\n- SDK requires Lace API v1.x\n- Check compatibility in browser console\n\n### Transaction Failures\n\n**Problem:** InsufficientStakeError\n\n**Solutions:**\n- Register stake before creating proposals\n- Ensure stake amount ≥ proposalThreshold\n- Check staking period hasn't expired\n\n**Problem:** TransactionError: \"User rejected transaction\"\n\n**Solutions:**\n- User must approve transaction in Lace wallet\n- Check wallet has sufficient tDUST balance\n- Verify transaction parameters are correct\n\n### Build Errors\n\n**Problem:** TypeScript compilation errors\n\n**Solutions:**\n```bash\n# Update dependencies\npnpm install\n\n# Rebuild SDK\npnpm run build\n```\n\n**Problem:** Module not found errors\n\n**Solutions:**\n- Ensure all dependencies are installed\n- Check `node_modules` exists\n- Verify import paths are correct\n\n### Runtime Errors\n\n**Problem:** \"Contract not found at address\"\n\n**Solutions:**\n- Verify contract address is correct\n- Check network connection\n- Ensure contract is deployed on current network\n\n**Problem:** \"InvalidParameterError\"\n\n**Solutions:**\n- Check parameter types and formats\n- Validate inputs before submission\n- Review API documentation for correct usage\n\n### Cache Issues\n\n**Problem:** Changes not reflected after rebuild\n\n**Solutions:**\n```bash\n# Clear Vite cache\nrm -rf node_modules/.vite\n\n# Clear browser cache or hard refresh\n# Chrome/Edge: Ctrl+Shift+R (Windows) or Cmd+Shift+R (Mac)\n# Firefox: Ctrl+F5 (Windows) or Cmd+Shift+R (Mac)\n```\n\n## Development\n\n### Building from Source\n\n```bash\n# Clone repository\ngit clone https://github.com/your-org/agora-dao-midnight-sdk\ncd internalAgoraMidnightSDK\n\n# Install dependencies\npnpm install\n\n# Build contract first\ncd contract\npnpm run build\n\n# Build SDK\ncd ../sdk\npnpm run build\n```\n\n### Project Structure\n\n```\nsdk/\n├── src/\n│   ├── browser-providers.ts    # Lace wallet integration\n│   ├── governor-api.ts          # Main API implementation\n│   ├── manager.ts               # Observable state manager\n│   ├── types.ts                 # Type definitions\n│   ├── errors.ts                # Error classes\n│   ├── validators.ts            # Input validation\n│   ├── common-types.ts          # Shared types\n│   ├── index.ts                 # Main exports\n│   └── utils/                   # Utility functions\n├── package.json\n├── tsconfig.json\n└── README.md\n```\n\n## Prerequisites\n\n### Required Software\n\n1. **Lace Wallet Extension**\n   - Install from [lace.io](https://www.lace.io/)\n   - Create or import wallet\n   - Switch to Midnight TestNet\n\n2. **TestNet Tokens (tDUST)**\n   - Request from [Midnight Faucet](https://faucet.testnet.midnight.network/)\n   - Needed to pay for transactions\n\n3. **Modern Browser**\n   - Chrome/Edge 89+\n   - Firefox 89+\n   - Safari 15+\n\n### Browser APIs Required\n\n- IndexedDB (private state storage)\n- Web Crypto API (cryptographic operations)\n- Fetch API (HTTP requests)\n- WebSocket (real-time updates)\n\n## Resources\n\n- [Midnight Documentation](https://docs.midnight.network/)\n- [Lace Wallet](https://www.lace.io/)\n- [TestNet Faucet](https://faucet.testnet.midnight.network/)\n- [Compact Language Guide](https://docs.midnight.network/develop/compact/)\n- [Production Readiness Guide](./PRODUCTION_READY.md)\n\n## License\n\nApache-2.0\n\n## Support\n\nFor issues and questions:\n- GitHub Issues: [Create an issue](https://github.com/your-org/agora-dao-midnight-sdk/issues)\n- Documentation: [Read the docs](https://docs.midnight.network/)\n","readmeFilename":"README.md"}