@claritydao/midnight-agora-sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/.prettierrc +1 -0
  2. package/LICENSE +0 -0
  3. package/README.md +1134 -0
  4. package/dist/browser-providers.d.ts +21 -0
  5. package/dist/browser-providers.d.ts.map +1 -0
  6. package/dist/browser-providers.js +147 -0
  7. package/dist/browser-providers.js.map +1 -0
  8. package/dist/common-types.d.ts +29 -0
  9. package/dist/common-types.d.ts.map +1 -0
  10. package/dist/common-types.js +2 -0
  11. package/dist/common-types.js.map +1 -0
  12. package/dist/errors.d.ts +67 -0
  13. package/dist/errors.d.ts.map +1 -0
  14. package/dist/errors.js +108 -0
  15. package/dist/errors.js.map +1 -0
  16. package/dist/governor-api.d.ts +348 -0
  17. package/dist/governor-api.d.ts.map +1 -0
  18. package/dist/governor-api.js +716 -0
  19. package/dist/governor-api.js.map +1 -0
  20. package/dist/index.d.ts +11 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +14 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/manager.d.ts +87 -0
  25. package/dist/manager.d.ts.map +1 -0
  26. package/dist/manager.js +93 -0
  27. package/dist/manager.js.map +1 -0
  28. package/dist/types.d.ts +307 -0
  29. package/dist/types.d.ts.map +1 -0
  30. package/dist/types.js +77 -0
  31. package/dist/types.js.map +1 -0
  32. package/dist/utils/index.d.ts +34 -0
  33. package/dist/utils/index.d.ts.map +1 -0
  34. package/dist/utils/index.js +57 -0
  35. package/dist/utils/index.js.map +1 -0
  36. package/dist/validators.d.ts +52 -0
  37. package/dist/validators.d.ts.map +1 -0
  38. package/dist/validators.js +160 -0
  39. package/dist/validators.js.map +1 -0
  40. package/eslint.config.mjs +48 -0
  41. package/package.json +39 -0
  42. package/src/browser-providers.ts +274 -0
  43. package/src/common-types.ts +51 -0
  44. package/src/errors.ts +124 -0
  45. package/src/governor-api.ts +948 -0
  46. package/src/index.ts +51 -0
  47. package/src/manager.ts +203 -0
  48. package/src/types.ts +403 -0
  49. package/src/utils/index.ts +60 -0
  50. package/src/validators.ts +245 -0
  51. package/test/README.md +409 -0
  52. package/test/errors.test.ts +179 -0
  53. package/test/integration/governor-api.test.ts +370 -0
  54. package/test/mocks/providers.ts +130 -0
  55. package/test/types.test.ts +112 -0
  56. package/test/utils.test.ts +111 -0
  57. package/test/validators.test.ts +368 -0
  58. package/test/wasm-init.test.ts +132 -0
  59. package/tsconfig.json +18 -0
  60. package/vitest.config.ts +9 -0
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Test WASM initialization timing to ensure browser compatibility
3
+ */
4
+
5
+ import { describe, it, expect } from 'vitest';
6
+
7
+ describe('WASM Initialization', () => {
8
+ it('should import SDK without triggering WASM load', async () => {
9
+ // This simulates what happens when a browser imports the SDK
10
+ // The import should be non-blocking and not trigger WASM initialization
11
+ const sdkModule = await import('../src/index');
12
+
13
+ expect(sdkModule.GovernorManager).toBeDefined();
14
+ expect(sdkModule.GovernorAPI).toBeDefined();
15
+ expect(sdkModule.initializeProviders).toBeDefined();
16
+ expect(sdkModule.VoteChoice).toBeDefined();
17
+ expect(sdkModule.ConfigPresets).toBeDefined();
18
+ });
19
+
20
+ it('should create GovernorManager without error (production config required)', async () => {
21
+ const { GovernorManager, ConfigPresets } = await import('../src/index');
22
+ const pino = (await import('pino')).default;
23
+
24
+ const logger = pino({ level: 'info' });
25
+
26
+ // Create valid deployment config with secure random admin key
27
+ const adminKey = new Uint8Array(32);
28
+ crypto.getRandomValues(adminKey);
29
+
30
+ const config = {
31
+ governor: {
32
+ governance: ConfigPresets.testing(),
33
+ executionDelay: BigInt(60),
34
+ gracePeriod: BigInt(300),
35
+ maxActiveProposals: BigInt(100),
36
+ proposalLifetime: BigInt(86400),
37
+ emergencyVetoEnabled: true,
38
+ emergencyVetoThreshold: BigInt(75000),
39
+ },
40
+ token: {
41
+ name: 'Test DAO',
42
+ symbol: 'TDAO',
43
+ decimals: BigInt(18),
44
+ },
45
+ adminKey,
46
+ };
47
+
48
+ // This should not throw "ocrt.maxField is not a function"
49
+ expect(() => {
50
+ const manager = new GovernorManager(config, logger);
51
+ }).not.toThrow();
52
+ });
53
+
54
+ it('should lazily load contract only when needed', async () => {
55
+ const { GovernorManager, ConfigPresets } = await import('../src/index');
56
+ const pino = (await import('pino')).default;
57
+
58
+ const logger = pino({ level: 'info' });
59
+
60
+ // Create secure random admin key
61
+ const adminKey = new Uint8Array(32);
62
+ crypto.getRandomValues(adminKey);
63
+
64
+ const config = {
65
+ governor: {
66
+ governance: ConfigPresets.testing(),
67
+ executionDelay: BigInt(60),
68
+ gracePeriod: BigInt(300),
69
+ maxActiveProposals: BigInt(100),
70
+ proposalLifetime: BigInt(86400),
71
+ emergencyVetoEnabled: true,
72
+ emergencyVetoThreshold: BigInt(75000),
73
+ },
74
+ token: {
75
+ name: 'Test DAO',
76
+ symbol: 'TDAO',
77
+ decimals: BigInt(18),
78
+ },
79
+ adminKey,
80
+ };
81
+
82
+ const manager = new GovernorManager(config, logger);
83
+
84
+ // At this point, contract should NOT be loaded yet
85
+ // Contract loads when resolve() is called
86
+ expect(manager).toBeDefined();
87
+ });
88
+
89
+ it('should export all production-ready types', async () => {
90
+ const sdkModule = await import('../src/index');
91
+
92
+ // Type exports
93
+ expect(sdkModule.VoteChoice).toBeDefined();
94
+ expect(sdkModule.ProposalStatus).toBeDefined();
95
+ expect(sdkModule.ConfigPresets).toBeDefined();
96
+
97
+ // Error exports
98
+ expect(sdkModule.GovernorSDKError).toBeDefined();
99
+ expect(sdkModule.WalletNotConnectedError).toBeDefined();
100
+ expect(sdkModule.InsufficientStakeError).toBeDefined();
101
+ expect(sdkModule.InvalidParameterError).toBeDefined();
102
+ expect(sdkModule.ContractNotFoundError).toBeDefined();
103
+ expect(sdkModule.ProposalNotFoundError).toBeDefined();
104
+ expect(sdkModule.TransactionError).toBeDefined();
105
+ expect(sdkModule.DeploymentError).toBeDefined();
106
+ expect(sdkModule.InvalidConfigurationError).toBeDefined();
107
+ expect(sdkModule.NetworkNotConfiguredError).toBeDefined();
108
+
109
+ // Validator exports
110
+ expect(sdkModule.validators).toBeDefined();
111
+ expect(sdkModule.validators.validateProposal).toBeDefined();
112
+ expect(sdkModule.validators.validateVoteChoice).toBeDefined();
113
+ expect(sdkModule.validators.validateDeploymentConfig).toBeDefined();
114
+ });
115
+
116
+ it('should not trigger WASM initialization on type-only operations', async () => {
117
+ const { VoteChoice, ProposalStatus, ConfigPresets } = await import('../src/index');
118
+
119
+ // These are pure type/enum operations - should not trigger WASM
120
+ expect(VoteChoice.For).toBe(0);
121
+ expect(VoteChoice.Against).toBe(1);
122
+ expect(VoteChoice.Abstain).toBe(2);
123
+
124
+ expect(ProposalStatus.Active).toBe(1);
125
+
126
+ const testingConfig = ConfigPresets.testing();
127
+ expect(testingConfig.votingPeriod).toBe(BigInt(300));
128
+
129
+ const productionConfig = ConfigPresets.production();
130
+ expect(productionConfig.votingPeriod).toBe(BigInt(604800));
131
+ });
132
+ });
package/tsconfig.json ADDED
@@ -0,0 +1,18 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ES2022",
5
+ "lib": ["ES2022", "DOM"],
6
+ "moduleResolution": "bundler",
7
+ "outDir": "./dist",
8
+ "rootDir": "./src",
9
+ "strict": true,
10
+ "esModuleInterop": true,
11
+ "skipLibCheck": true,
12
+ "declaration": true,
13
+ "declarationMap": true,
14
+ "sourceMap": true
15
+ },
16
+ "include": ["src/**/*"],
17
+ "exclude": ["node_modules", "dist"]
18
+ }
@@ -0,0 +1,9 @@
1
+ import { defineConfig } from 'vitest/config';
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ globals: true,
6
+ environment: 'node',
7
+ include: ['test/**/*.test.ts'],
8
+ },
9
+ });