@no-witness-labs/midday-sdk 0.1.2 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.md +145 -78
  2. package/dist/Client.d.ts +464 -72
  3. package/dist/Client.d.ts.map +1 -1
  4. package/dist/Client.js +526 -143
  5. package/dist/Client.js.map +1 -1
  6. package/dist/Config.d.ts +83 -1
  7. package/dist/Config.d.ts.map +1 -1
  8. package/dist/Config.js +72 -15
  9. package/dist/Config.js.map +1 -1
  10. package/dist/Providers.d.ts +99 -9
  11. package/dist/Providers.d.ts.map +1 -1
  12. package/dist/Providers.js +142 -39
  13. package/dist/Providers.js.map +1 -1
  14. package/dist/Wallet.d.ts +88 -1
  15. package/dist/Wallet.d.ts.map +1 -1
  16. package/dist/Wallet.js +162 -51
  17. package/dist/Wallet.js.map +1 -1
  18. package/dist/devnet/Cluster.d.ts +282 -0
  19. package/dist/devnet/Cluster.d.ts.map +1 -0
  20. package/dist/devnet/Cluster.js +487 -0
  21. package/dist/devnet/Cluster.js.map +1 -0
  22. package/dist/devnet/Config.d.ts +119 -0
  23. package/dist/devnet/Config.d.ts.map +1 -0
  24. package/dist/devnet/Config.js +75 -0
  25. package/dist/devnet/Config.js.map +1 -0
  26. package/dist/devnet/Container.d.ts +180 -0
  27. package/dist/devnet/Container.d.ts.map +1 -0
  28. package/dist/devnet/Container.js +390 -0
  29. package/dist/devnet/Container.js.map +1 -0
  30. package/dist/devnet/Health.d.ts +129 -0
  31. package/dist/devnet/Health.d.ts.map +1 -0
  32. package/dist/devnet/Health.js +304 -0
  33. package/dist/devnet/Health.js.map +1 -0
  34. package/dist/devnet/Images.d.ts +43 -0
  35. package/dist/devnet/Images.d.ts.map +1 -0
  36. package/dist/devnet/Images.js +96 -0
  37. package/dist/devnet/Images.js.map +1 -0
  38. package/dist/devnet/errors.d.ts +65 -0
  39. package/dist/devnet/errors.d.ts.map +1 -0
  40. package/dist/devnet/errors.js +40 -0
  41. package/dist/devnet/errors.js.map +1 -0
  42. package/dist/devnet/index.d.ts +72 -0
  43. package/dist/devnet/index.d.ts.map +1 -0
  44. package/dist/devnet/index.js +73 -0
  45. package/dist/devnet/index.js.map +1 -0
  46. package/dist/index.d.ts +63 -7
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +68 -4
  49. package/dist/index.js.map +1 -1
  50. package/dist/providers/HttpZkConfigProvider.d.ts +229 -0
  51. package/dist/providers/HttpZkConfigProvider.d.ts.map +1 -0
  52. package/dist/providers/HttpZkConfigProvider.js +275 -0
  53. package/dist/providers/HttpZkConfigProvider.js.map +1 -0
  54. package/dist/providers/IndexedDBPrivateStateProvider.d.ts +270 -0
  55. package/dist/providers/IndexedDBPrivateStateProvider.d.ts.map +1 -0
  56. package/dist/providers/IndexedDBPrivateStateProvider.js +513 -0
  57. package/dist/providers/IndexedDBPrivateStateProvider.js.map +1 -0
  58. package/dist/providers/errors.d.ts +50 -0
  59. package/dist/providers/errors.d.ts.map +1 -0
  60. package/dist/providers/errors.js +32 -0
  61. package/dist/providers/errors.js.map +1 -0
  62. package/dist/sdk/Type.d.ts +91 -0
  63. package/dist/sdk/Type.d.ts.map +1 -0
  64. package/dist/sdk/Type.js +8 -0
  65. package/dist/sdk/Type.js.map +1 -0
  66. package/dist/utils/address.d.ts +56 -0
  67. package/dist/utils/address.d.ts.map +1 -0
  68. package/dist/utils/address.js +135 -0
  69. package/dist/utils/address.js.map +1 -0
  70. package/dist/utils/coin.d.ts +55 -0
  71. package/dist/utils/coin.d.ts.map +1 -0
  72. package/dist/utils/coin.js +84 -0
  73. package/dist/utils/coin.js.map +1 -0
  74. package/dist/utils/effect-runtime.d.ts +66 -0
  75. package/dist/utils/effect-runtime.d.ts.map +1 -0
  76. package/dist/utils/effect-runtime.js +147 -0
  77. package/dist/utils/effect-runtime.js.map +1 -0
  78. package/dist/utils/hex.d.ts +62 -0
  79. package/dist/utils/hex.d.ts.map +1 -0
  80. package/dist/utils/hex.js +93 -0
  81. package/dist/utils/hex.js.map +1 -0
  82. package/dist/wallet/connector.d.ts +191 -0
  83. package/dist/wallet/connector.d.ts.map +1 -0
  84. package/dist/wallet/connector.js +183 -0
  85. package/dist/wallet/connector.js.map +1 -0
  86. package/dist/wallet/errors.d.ts +22 -0
  87. package/dist/wallet/errors.d.ts.map +1 -0
  88. package/dist/wallet/errors.js +16 -0
  89. package/dist/wallet/errors.js.map +1 -0
  90. package/dist/wallet/provider.d.ts +102 -0
  91. package/dist/wallet/provider.d.ts.map +1 -0
  92. package/dist/wallet/provider.js +139 -0
  93. package/dist/wallet/provider.js.map +1 -0
  94. package/package.json +23 -8
package/README.md CHANGED
@@ -10,75 +10,147 @@ pnpm add @no-witness-labs/midday-sdk
10
10
 
11
11
  ## Quick Start
12
12
 
13
+ ### Promise API (Non-Effect Users)
14
+
13
15
  ```typescript
14
16
  import * as Midday from '@no-witness-labs/midday-sdk';
15
17
 
16
- // Create client (uses local network + dev wallet by default)
17
- const client = await Midday.Client.create();
18
+ // Create client
19
+ const client = await Midday.Client.create({
20
+ networkConfig: Midday.Config.NETWORKS.local,
21
+ zkConfigProvider: new Midday.HttpZkConfigProvider('http://localhost:3000/zk'),
22
+ privateStateProvider: Midday.inMemoryPrivateStateProvider(),
23
+ });
18
24
 
19
25
  // Load and deploy a contract
20
- const counter = await (await client.contractFrom('build/simple-counter')).deploy();
26
+ const builder = await Midday.Client.contractFrom(client, {
27
+ module: await import('./contracts/counter/index.js'),
28
+ });
29
+ const contract = await Midday.ContractBuilder.deploy(builder);
21
30
 
22
31
  // Call contract actions
23
- await counter.call('increment');
32
+ await Midday.Contract.call(contract, 'increment');
24
33
 
25
34
  // Read state
26
- const state = await counter.ledgerState();
35
+ const state = await Midday.Contract.ledgerState(contract);
27
36
  console.log(state.counter);
28
37
  ```
29
38
 
30
- ## Configuration
39
+ ### Effect API (Pure Effect Users)
31
40
 
32
- ### Network Configuration
41
+ ```typescript
42
+ import * as Midday from '@no-witness-labs/midday-sdk';
43
+ import { Effect } from 'effect';
44
+
45
+ const program = Effect.gen(function* () {
46
+ const client = yield* Midday.Client.effect.create({
47
+ networkConfig: Midday.Config.NETWORKS.local,
48
+ zkConfigProvider: new Midday.HttpZkConfigProvider('http://localhost:3000/zk'),
49
+ privateStateProvider: Midday.inMemoryPrivateStateProvider(),
50
+ });
51
+
52
+ const builder = yield* Midday.Client.effect.contractFrom(client, {
53
+ module: await import('./contracts/counter/index.js'),
54
+ });
55
+
56
+ const contract = yield* Midday.ContractBuilder.effect.deploy(builder);
57
+ const result = yield* Midday.Contract.effect.call(contract, 'increment');
58
+
59
+ return result;
60
+ });
61
+
62
+ const result = await Midday.runEffectPromise(program);
63
+ ```
64
+
65
+ ### Effect DI (Dependency Injection)
33
66
 
34
67
  ```typescript
35
- // Local network (default)
36
- const client = await Midday.Client.create();
68
+ import * as Midday from '@no-witness-labs/midday-sdk';
69
+ import { Effect, Layer } from 'effect';
37
70
 
38
- // Custom network via config
39
- const client = await Midday.Client.create({
40
- networkConfig: {
41
- networkId: 'testnet',
42
- indexer: 'https://indexer.testnet.midnight.network/graphql',
43
- indexerWS: 'wss://indexer.testnet.midnight.network/graphql/ws',
44
- node: 'wss://node.testnet.midnight.network',
45
- proofServer: 'https://proof.testnet.midnight.network',
46
- },
47
- seed: 'your-64-char-hex-seed',
71
+ const program = Effect.gen(function* () {
72
+ const clientService = yield* Midday.ClientService;
73
+ const contractBuilderService = yield* Midday.ContractBuilderService;
74
+ const contractService = yield* Midday.ContractService;
75
+
76
+ const client = yield* clientService.create({
77
+ networkConfig: Midday.Config.NETWORKS.local,
78
+ zkConfigProvider: new Midday.HttpZkConfigProvider('http://localhost:3000/zk'),
79
+ privateStateProvider: Midday.inMemoryPrivateStateProvider(),
80
+ });
81
+
82
+ const builder = yield* clientService.contractFrom(client, {
83
+ module: await import('./contracts/counter/index.js'),
84
+ });
85
+
86
+ const contract = yield* contractBuilderService.deploy(builder);
87
+ const result = yield* contractService.call(contract, 'increment');
88
+
89
+ return result;
48
90
  });
49
91
 
50
- // Or via environment variables
51
- // MIDNIGHT_INDEXER=https://...
52
- // MIDNIGHT_INDEXER_WS=wss://...
53
- // MIDNIGHT_NODE=wss://...
54
- // MIDNIGHT_PROOF_SERVER=https://...
55
- // MIDNIGHT_NETWORK_ID=testnet
92
+ // Compose layers
93
+ const MainLive = Layer.mergeAll(
94
+ Midday.ClientLive,
95
+ Midday.ContractBuilderLive,
96
+ Midday.ContractLive,
97
+ );
98
+
99
+ const result = await Effect.runPromise(program.pipe(Effect.provide(MainLive)));
56
100
  ```
57
101
 
58
- ### Wallet Seed
102
+ ## Browser Usage (Lace Wallet)
59
103
 
60
104
  ```typescript
61
- // Local network uses dev wallet by default
62
- const client = await Midday.Client.create();
105
+ import * as Midday from '@no-witness-labs/midday-sdk';
63
106
 
64
- // Custom seed
65
- const client = await Midday.Client.create({
66
- seed: '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef',
107
+ // Connect to Lace wallet
108
+ const connection = await Midday.connectWallet('testnet');
109
+
110
+ // Create client from wallet connection
111
+ const client = await Midday.Client.fromWallet(connection, {
112
+ zkConfigProvider: new Midday.HttpZkConfigProvider('https://cdn.example.com/zk'),
113
+ privateStateProvider: Midday.indexedDBPrivateStateProvider({ privateStateStoreName: 'my-app' }),
67
114
  });
115
+
116
+ // Use contract
117
+ const builder = await Midday.Client.contractFrom(client, {
118
+ module: await import('./contracts/counter/index.js'),
119
+ });
120
+ const contract = await Midday.ContractBuilder.deploy(builder);
121
+ await Midday.Contract.call(contract, 'increment');
68
122
  ```
69
123
 
70
- ### Storage Configuration
124
+ ## Configuration
125
+
126
+ ### Network Configuration
71
127
 
72
128
  ```typescript
129
+ // Local network
73
130
  const client = await Midday.Client.create({
74
- storage: {
75
- path: '.data/my-app-state',
76
- password: 'secure-password',
77
- },
131
+ networkConfig: Midday.Config.NETWORKS.local,
132
+ // ...
78
133
  });
79
134
 
80
- // Or via environment variable
81
- // MIDNIGHT_STORAGE_PASSWORD=secure-password
135
+ // Testnet
136
+ const client = await Midday.Client.create({
137
+ networkConfig: Midday.Config.NETWORKS.testnet,
138
+ seed: 'your-64-char-hex-seed',
139
+ // ...
140
+ });
141
+
142
+ // Custom network
143
+ const client = await Midday.Client.create({
144
+ networkConfig: {
145
+ networkId: 'testnet',
146
+ indexer: 'https://indexer.testnet.midnight.network/graphql',
147
+ indexerWS: 'wss://indexer.testnet.midnight.network/graphql/ws',
148
+ node: 'wss://node.testnet.midnight.network',
149
+ proofServer: 'https://proof.testnet.midnight.network',
150
+ },
151
+ seed: 'your-64-char-hex-seed',
152
+ // ...
153
+ });
82
154
  ```
83
155
 
84
156
  ## Contract Operations
@@ -86,48 +158,38 @@ const client = await Midday.Client.create({
86
158
  ### Deploy a New Contract
87
159
 
88
160
  ```typescript
89
- const contract = await (await client.contractFrom('build/my-contract')).deploy();
161
+ const builder = await Midday.Client.contractFrom(client, {
162
+ module: await import('./contracts/my-contract/index.js'),
163
+ });
164
+ const contract = await Midday.ContractBuilder.deploy(builder);
90
165
  console.log(`Deployed at: ${contract.address}`);
91
166
  ```
92
167
 
93
168
  ### Join an Existing Contract
94
169
 
95
170
  ```typescript
96
- const contract = await (await client.contractFrom('build/my-contract')).join(address);
97
- ```
98
-
99
- ### Path Resolution Options
100
-
101
- ```typescript
102
- // Relative to cwd (default)
103
- await client.contractFrom('build/my-contract');
104
-
105
- // Relative to project root (finds package.json)
106
- await client.contractFrom('build/my-contract', { from: 'project' });
107
-
108
- // Relative to current file
109
- await client.contractFrom('../build/my-contract', { from: import.meta.url });
110
-
111
- // Absolute path
112
- await client.contractFrom('/absolute/path/to/build/my-contract');
171
+ const builder = await Midday.Client.contractFrom(client, {
172
+ module: await import('./contracts/my-contract/index.js'),
173
+ });
174
+ const contract = await Midday.ContractBuilder.join(builder, { address: contractAddress });
113
175
  ```
114
176
 
115
177
  ### With Witnesses
116
178
 
117
179
  ```typescript
118
- const contract = await (
119
- await client.contractFrom('build/my-contract', {
120
- witnesses: {
121
- my_witness_function: myImplementation,
122
- },
123
- })
124
- ).deploy();
180
+ const builder = await Midday.Client.contractFrom(client, {
181
+ module: await import('./contracts/my-contract/index.js'),
182
+ witnesses: {
183
+ my_witness_function: myImplementation,
184
+ },
185
+ });
186
+ const contract = await Midday.ContractBuilder.deploy(builder);
125
187
  ```
126
188
 
127
189
  ### Call Actions
128
190
 
129
191
  ```typescript
130
- const result = await contract.call('increment');
192
+ const result = await Midday.Contract.call(contract, 'increment');
131
193
  console.log(`TX Hash: ${result.txHash}`);
132
194
  console.log(`Block: ${result.blockHeight}`);
133
195
  ```
@@ -136,35 +198,40 @@ console.log(`Block: ${result.blockHeight}`);
136
198
 
137
199
  ```typescript
138
200
  // Parsed state via ledger
139
- const state = await contract.ledgerState();
201
+ const state = await Midday.Contract.ledgerState(contract);
140
202
 
141
203
  // Raw state
142
- const rawState = await contract.state();
204
+ const rawState = await Midday.Contract.state(contract);
143
205
 
144
206
  // State at specific block
145
- const historicalState = await contract.ledgerStateAt(blockHeight);
207
+ const historicalState = await Midday.Contract.ledgerStateAt(contract, blockHeight);
146
208
  ```
147
209
 
148
- ## Environment Variables
149
-
150
- | Variable | Description |
151
- |----------|-------------|
152
- | `MIDNIGHT_INDEXER` | Indexer GraphQL HTTP endpoint |
153
- | `MIDNIGHT_INDEXER_WS` | Indexer GraphQL WebSocket endpoint |
154
- | `MIDNIGHT_NODE` | Node WebSocket endpoint |
155
- | `MIDNIGHT_PROOF_SERVER` | Proof server HTTP endpoint |
156
- | `MIDNIGHT_NETWORK_ID` | Network ID (e.g., 'undeployed', 'testnet') |
157
- | `MIDNIGHT_STORAGE_PASSWORD` | Private state storage password |
158
-
159
210
  ## API Reference
160
211
 
161
212
  ### Modules
162
213
 
163
214
  - `Midday.Client` - High-level client for contract interactions
215
+ - `Midday.ContractBuilder` - Contract deployment and joining
216
+ - `Midday.Contract` - Contract operations (call, state)
164
217
  - `Midday.Config` - Network configuration utilities
165
218
  - `Midday.Wallet` - Wallet initialization and management
166
219
  - `Midday.Providers` - Low-level provider setup
167
220
 
221
+ ### Services (Effect DI)
222
+
223
+ | Service | Layer | Description |
224
+ |---------|-------|-------------|
225
+ | `ClientService` | `ClientLive` | Client creation and contract loading |
226
+ | `ContractBuilderService` | `ContractBuilderLive` | Contract deployment and joining |
227
+ | `ContractService` | `ContractLive` | Contract operations |
228
+ | `WalletService` | `WalletLive` | Wallet initialization |
229
+ | `ProvidersService` | `ProvidersLive` | Provider setup |
230
+ | `ZkConfigService` | `ZkConfigLive` | ZK configuration loading |
231
+ | `PrivateStateService` | `PrivateStateLive` | Private state management |
232
+ | `WalletConnectorService` | `WalletConnectorLive` | Browser wallet connection |
233
+ | `WalletProviderService` | `WalletProviderLive` | Wallet provider operations |
234
+
168
235
  ### Types
169
236
 
170
237
  ```typescript