@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.
- package/.prettierrc +1 -0
- package/LICENSE +0 -0
- package/README.md +1134 -0
- package/dist/browser-providers.d.ts +21 -0
- package/dist/browser-providers.d.ts.map +1 -0
- package/dist/browser-providers.js +147 -0
- package/dist/browser-providers.js.map +1 -0
- package/dist/common-types.d.ts +29 -0
- package/dist/common-types.d.ts.map +1 -0
- package/dist/common-types.js +2 -0
- package/dist/common-types.js.map +1 -0
- package/dist/errors.d.ts +67 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +108 -0
- package/dist/errors.js.map +1 -0
- package/dist/governor-api.d.ts +348 -0
- package/dist/governor-api.d.ts.map +1 -0
- package/dist/governor-api.js +716 -0
- package/dist/governor-api.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/manager.d.ts +87 -0
- package/dist/manager.d.ts.map +1 -0
- package/dist/manager.js +93 -0
- package/dist/manager.js.map +1 -0
- package/dist/types.d.ts +307 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +77 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/index.d.ts +34 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +57 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/validators.d.ts +52 -0
- package/dist/validators.d.ts.map +1 -0
- package/dist/validators.js +160 -0
- package/dist/validators.js.map +1 -0
- package/eslint.config.mjs +48 -0
- package/package.json +39 -0
- package/src/browser-providers.ts +274 -0
- package/src/common-types.ts +51 -0
- package/src/errors.ts +124 -0
- package/src/governor-api.ts +948 -0
- package/src/index.ts +51 -0
- package/src/manager.ts +203 -0
- package/src/types.ts +403 -0
- package/src/utils/index.ts +60 -0
- package/src/validators.ts +245 -0
- package/test/README.md +409 -0
- package/test/errors.test.ts +179 -0
- package/test/integration/governor-api.test.ts +370 -0
- package/test/mocks/providers.ts +130 -0
- package/test/types.test.ts +112 -0
- package/test/utils.test.ts +111 -0
- package/test/validators.test.ts +368 -0
- package/test/wasm-init.test.ts +132 -0
- package/tsconfig.json +18 -0
- 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
|
+
}
|