@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.
- package/README.md +145 -78
- package/dist/Client.d.ts +464 -72
- package/dist/Client.d.ts.map +1 -1
- package/dist/Client.js +526 -143
- package/dist/Client.js.map +1 -1
- package/dist/Config.d.ts +83 -1
- package/dist/Config.d.ts.map +1 -1
- package/dist/Config.js +72 -15
- package/dist/Config.js.map +1 -1
- package/dist/Providers.d.ts +99 -9
- package/dist/Providers.d.ts.map +1 -1
- package/dist/Providers.js +142 -39
- package/dist/Providers.js.map +1 -1
- package/dist/Wallet.d.ts +88 -1
- package/dist/Wallet.d.ts.map +1 -1
- package/dist/Wallet.js +162 -51
- package/dist/Wallet.js.map +1 -1
- package/dist/devnet/Cluster.d.ts +282 -0
- package/dist/devnet/Cluster.d.ts.map +1 -0
- package/dist/devnet/Cluster.js +487 -0
- package/dist/devnet/Cluster.js.map +1 -0
- package/dist/devnet/Config.d.ts +119 -0
- package/dist/devnet/Config.d.ts.map +1 -0
- package/dist/devnet/Config.js +75 -0
- package/dist/devnet/Config.js.map +1 -0
- package/dist/devnet/Container.d.ts +180 -0
- package/dist/devnet/Container.d.ts.map +1 -0
- package/dist/devnet/Container.js +390 -0
- package/dist/devnet/Container.js.map +1 -0
- package/dist/devnet/Health.d.ts +129 -0
- package/dist/devnet/Health.d.ts.map +1 -0
- package/dist/devnet/Health.js +304 -0
- package/dist/devnet/Health.js.map +1 -0
- package/dist/devnet/Images.d.ts +43 -0
- package/dist/devnet/Images.d.ts.map +1 -0
- package/dist/devnet/Images.js +96 -0
- package/dist/devnet/Images.js.map +1 -0
- package/dist/devnet/errors.d.ts +65 -0
- package/dist/devnet/errors.d.ts.map +1 -0
- package/dist/devnet/errors.js +40 -0
- package/dist/devnet/errors.js.map +1 -0
- package/dist/devnet/index.d.ts +72 -0
- package/dist/devnet/index.d.ts.map +1 -0
- package/dist/devnet/index.js +73 -0
- package/dist/devnet/index.js.map +1 -0
- package/dist/index.d.ts +63 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +68 -4
- package/dist/index.js.map +1 -1
- package/dist/providers/HttpZkConfigProvider.d.ts +229 -0
- package/dist/providers/HttpZkConfigProvider.d.ts.map +1 -0
- package/dist/providers/HttpZkConfigProvider.js +275 -0
- package/dist/providers/HttpZkConfigProvider.js.map +1 -0
- package/dist/providers/IndexedDBPrivateStateProvider.d.ts +270 -0
- package/dist/providers/IndexedDBPrivateStateProvider.d.ts.map +1 -0
- package/dist/providers/IndexedDBPrivateStateProvider.js +513 -0
- package/dist/providers/IndexedDBPrivateStateProvider.js.map +1 -0
- package/dist/providers/errors.d.ts +50 -0
- package/dist/providers/errors.d.ts.map +1 -0
- package/dist/providers/errors.js +32 -0
- package/dist/providers/errors.js.map +1 -0
- package/dist/sdk/Type.d.ts +91 -0
- package/dist/sdk/Type.d.ts.map +1 -0
- package/dist/sdk/Type.js +8 -0
- package/dist/sdk/Type.js.map +1 -0
- package/dist/utils/address.d.ts +56 -0
- package/dist/utils/address.d.ts.map +1 -0
- package/dist/utils/address.js +135 -0
- package/dist/utils/address.js.map +1 -0
- package/dist/utils/coin.d.ts +55 -0
- package/dist/utils/coin.d.ts.map +1 -0
- package/dist/utils/coin.js +84 -0
- package/dist/utils/coin.js.map +1 -0
- package/dist/utils/effect-runtime.d.ts +66 -0
- package/dist/utils/effect-runtime.d.ts.map +1 -0
- package/dist/utils/effect-runtime.js +147 -0
- package/dist/utils/effect-runtime.js.map +1 -0
- package/dist/utils/hex.d.ts +62 -0
- package/dist/utils/hex.d.ts.map +1 -0
- package/dist/utils/hex.js +93 -0
- package/dist/utils/hex.js.map +1 -0
- package/dist/wallet/connector.d.ts +191 -0
- package/dist/wallet/connector.d.ts.map +1 -0
- package/dist/wallet/connector.js +183 -0
- package/dist/wallet/connector.js.map +1 -0
- package/dist/wallet/errors.d.ts +22 -0
- package/dist/wallet/errors.d.ts.map +1 -0
- package/dist/wallet/errors.js +16 -0
- package/dist/wallet/errors.js.map +1 -0
- package/dist/wallet/provider.d.ts +102 -0
- package/dist/wallet/provider.d.ts.map +1 -0
- package/dist/wallet/provider.js +139 -0
- package/dist/wallet/provider.js.map +1 -0
- package/package.json +23 -8
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP-based ZK configuration provider.
|
|
3
|
+
*
|
|
4
|
+
* ## API Design
|
|
5
|
+
*
|
|
6
|
+
* This module uses a **module-function pattern**:
|
|
7
|
+
*
|
|
8
|
+
* - **Stateless**: Functions operate on HttpZkConfigProvider data
|
|
9
|
+
* - **Module functions**: `HttpZkConfigProvider.getZKIR(provider, circuitId)`
|
|
10
|
+
* - **Data-oriented**: Provider is plain data, not an instance with methods
|
|
11
|
+
*
|
|
12
|
+
* ### Usage Patterns
|
|
13
|
+
*
|
|
14
|
+
* ```typescript
|
|
15
|
+
* // Promise user
|
|
16
|
+
* const provider = HttpZkConfigProvider.make('https://cdn.example.com/zk');
|
|
17
|
+
* const zkir = await HttpZkConfigProvider.getZKIR(provider, 'increment');
|
|
18
|
+
*
|
|
19
|
+
* // Effect user
|
|
20
|
+
* const provider = HttpZkConfigProvider.make('https://cdn.example.com/zk');
|
|
21
|
+
* const zkir = yield* HttpZkConfigProvider.effect.getZKIR(provider, 'increment');
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @since 0.2.0
|
|
25
|
+
* @module
|
|
26
|
+
*/
|
|
27
|
+
import { Context, Effect, Layer } from 'effect';
|
|
28
|
+
import { ZKConfigProvider, createProverKey, createVerifierKey, createZKIR, } from '@midnight-ntwrk/midnight-js-types';
|
|
29
|
+
import { ZkConfigError } from './errors.js';
|
|
30
|
+
import { runEffectPromise } from '../utils/effect-runtime.js';
|
|
31
|
+
// =============================================================================
|
|
32
|
+
// Internal Effect Implementations
|
|
33
|
+
// =============================================================================
|
|
34
|
+
function fetchBytesEffect(provider, url) {
|
|
35
|
+
return Effect.tryPromise({
|
|
36
|
+
try: async () => {
|
|
37
|
+
const response = await provider.fetchFn(url);
|
|
38
|
+
if (!response.ok) {
|
|
39
|
+
throw new Error(`HTTP ${response.status} ${response.statusText}`);
|
|
40
|
+
}
|
|
41
|
+
const buffer = await response.arrayBuffer();
|
|
42
|
+
return new Uint8Array(buffer);
|
|
43
|
+
},
|
|
44
|
+
catch: (cause) => new ZkConfigError({
|
|
45
|
+
cause,
|
|
46
|
+
message: `Failed to fetch ZK config from ${url}: ${cause instanceof Error ? cause.message : String(cause)}`,
|
|
47
|
+
}),
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
function getZKIREffect(provider, circuitId) {
|
|
51
|
+
return Effect.gen(function* () {
|
|
52
|
+
const cached = provider.cache.get(circuitId);
|
|
53
|
+
if (cached) {
|
|
54
|
+
return cached.zkir;
|
|
55
|
+
}
|
|
56
|
+
const bytes = yield* fetchBytesEffect(provider, `${provider.baseUrl}/${circuitId}/zkir`);
|
|
57
|
+
return createZKIR(bytes);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
function getProverKeyEffect(provider, circuitId) {
|
|
61
|
+
return Effect.gen(function* () {
|
|
62
|
+
const cached = provider.cache.get(circuitId);
|
|
63
|
+
if (cached) {
|
|
64
|
+
return cached.proverKey;
|
|
65
|
+
}
|
|
66
|
+
const bytes = yield* fetchBytesEffect(provider, `${provider.baseUrl}/${circuitId}/prover-key`);
|
|
67
|
+
return createProverKey(bytes);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function getVerifierKeyEffect(provider, circuitId) {
|
|
71
|
+
return Effect.gen(function* () {
|
|
72
|
+
const cached = provider.cache.get(circuitId);
|
|
73
|
+
if (cached) {
|
|
74
|
+
return cached.verifierKey;
|
|
75
|
+
}
|
|
76
|
+
const bytes = yield* fetchBytesEffect(provider, `${provider.baseUrl}/${circuitId}/verifier-key`);
|
|
77
|
+
return createVerifierKey(bytes);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
// =============================================================================
|
|
81
|
+
// Promise API
|
|
82
|
+
// =============================================================================
|
|
83
|
+
/**
|
|
84
|
+
* Create a new HTTP ZK config provider.
|
|
85
|
+
*
|
|
86
|
+
* @param baseUrl - Base URL for ZK artifacts (without trailing slash)
|
|
87
|
+
* @param fetchFn - Optional custom fetch function (defaults to global fetch)
|
|
88
|
+
* @returns HttpZkConfigProviderData
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* ```typescript
|
|
92
|
+
* const provider = HttpZkConfigProvider.make('https://cdn.example.com/contracts/counter');
|
|
93
|
+
* ```
|
|
94
|
+
*
|
|
95
|
+
* @since 0.2.0
|
|
96
|
+
* @category constructors
|
|
97
|
+
*/
|
|
98
|
+
export function make(baseUrl, fetchFn) {
|
|
99
|
+
return {
|
|
100
|
+
baseUrl: baseUrl.replace(/\/$/, ''),
|
|
101
|
+
fetchFn: fetchFn ?? fetch,
|
|
102
|
+
cache: new Map(),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get the ZKIR for a circuit.
|
|
107
|
+
*
|
|
108
|
+
* @param provider - The provider data
|
|
109
|
+
* @param circuitId - Circuit identifier
|
|
110
|
+
* @returns ZKIR bytes
|
|
111
|
+
*
|
|
112
|
+
* @since 0.2.0
|
|
113
|
+
* @category operations
|
|
114
|
+
*/
|
|
115
|
+
export async function getZKIR(provider, circuitId) {
|
|
116
|
+
return runEffectPromise(getZKIREffect(provider, circuitId));
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get the prover key for a circuit.
|
|
120
|
+
*
|
|
121
|
+
* @param provider - The provider data
|
|
122
|
+
* @param circuitId - Circuit identifier
|
|
123
|
+
* @returns Prover key bytes
|
|
124
|
+
*
|
|
125
|
+
* @since 0.2.0
|
|
126
|
+
* @category operations
|
|
127
|
+
*/
|
|
128
|
+
export async function getProverKey(provider, circuitId) {
|
|
129
|
+
return runEffectPromise(getProverKeyEffect(provider, circuitId));
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get the verifier key for a circuit.
|
|
133
|
+
*
|
|
134
|
+
* @param provider - The provider data
|
|
135
|
+
* @param circuitId - Circuit identifier
|
|
136
|
+
* @returns Verifier key bytes
|
|
137
|
+
*
|
|
138
|
+
* @since 0.2.0
|
|
139
|
+
* @category operations
|
|
140
|
+
*/
|
|
141
|
+
export async function getVerifierKey(provider, circuitId) {
|
|
142
|
+
return runEffectPromise(getVerifierKeyEffect(provider, circuitId));
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Clear the cache for a specific circuit or all circuits.
|
|
146
|
+
*
|
|
147
|
+
* @param provider - The provider data
|
|
148
|
+
* @param circuitId - Optional circuit ID to clear (clears all if not provided)
|
|
149
|
+
*
|
|
150
|
+
* @since 0.2.0
|
|
151
|
+
* @category utilities
|
|
152
|
+
*/
|
|
153
|
+
export function clearCache(provider, circuitId) {
|
|
154
|
+
if (circuitId) {
|
|
155
|
+
provider.cache.delete(circuitId);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
provider.cache.clear();
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Raw Effect APIs for advanced users.
|
|
163
|
+
*
|
|
164
|
+
* @since 0.2.0
|
|
165
|
+
* @category effect
|
|
166
|
+
*/
|
|
167
|
+
export const effect = {
|
|
168
|
+
getZKIR: getZKIREffect,
|
|
169
|
+
getProverKey: getProverKeyEffect,
|
|
170
|
+
getVerifierKey: getVerifierKeyEffect,
|
|
171
|
+
};
|
|
172
|
+
// =============================================================================
|
|
173
|
+
// ZKConfigProvider Wrapper Class (for midnight-js compatibility)
|
|
174
|
+
// =============================================================================
|
|
175
|
+
/**
|
|
176
|
+
* HTTP-based ZK configuration provider class.
|
|
177
|
+
*
|
|
178
|
+
* This class wraps the module functions to provide compatibility with
|
|
179
|
+
* the midnight-js ZKConfigProvider interface.
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* ```typescript
|
|
183
|
+
* const zkConfig = new HttpZkConfigProvider('https://cdn.example.com/contracts/counter');
|
|
184
|
+
*
|
|
185
|
+
* // Use with midnight-js
|
|
186
|
+
* const client = await Client.create({
|
|
187
|
+
* zkConfigProvider: zkConfig,
|
|
188
|
+
* // ...
|
|
189
|
+
* });
|
|
190
|
+
* ```
|
|
191
|
+
*
|
|
192
|
+
* @since 0.2.0
|
|
193
|
+
* @category constructors
|
|
194
|
+
*/
|
|
195
|
+
export class HttpZkConfigProvider extends ZKConfigProvider {
|
|
196
|
+
data;
|
|
197
|
+
/**
|
|
198
|
+
* Create a new HTTP ZK config provider.
|
|
199
|
+
*
|
|
200
|
+
* @param baseUrl - Base URL for ZK artifacts (without trailing slash)
|
|
201
|
+
* @param fetchFn - Optional custom fetch function (defaults to global fetch)
|
|
202
|
+
*/
|
|
203
|
+
constructor(baseUrl, fetchFn) {
|
|
204
|
+
super();
|
|
205
|
+
this.data = make(baseUrl, fetchFn);
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Get the ZKIR for a circuit.
|
|
209
|
+
*/
|
|
210
|
+
async getZKIR(circuitId) {
|
|
211
|
+
return getZKIR(this.data, circuitId);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Get the prover key for a circuit.
|
|
215
|
+
*/
|
|
216
|
+
async getProverKey(circuitId) {
|
|
217
|
+
return getProverKey(this.data, circuitId);
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Get the verifier key for a circuit.
|
|
221
|
+
*/
|
|
222
|
+
async getVerifierKey(circuitId) {
|
|
223
|
+
return getVerifierKey(this.data, circuitId);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Clear the cache for a specific circuit or all circuits.
|
|
227
|
+
*/
|
|
228
|
+
clearCache(circuitId) {
|
|
229
|
+
clearCache(this.data, circuitId);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Raw Effect APIs for advanced users.
|
|
233
|
+
*
|
|
234
|
+
* @since 0.2.0
|
|
235
|
+
* @category effect
|
|
236
|
+
*/
|
|
237
|
+
effect = {
|
|
238
|
+
getZKIR: (circuitId) => getZKIREffect(this.data, circuitId),
|
|
239
|
+
getProverKey: (circuitId) => getProverKeyEffect(this.data, circuitId),
|
|
240
|
+
getVerifierKey: (circuitId) => getVerifierKeyEffect(this.data, circuitId),
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Context.Tag for ZkConfigService dependency injection.
|
|
245
|
+
*
|
|
246
|
+
* @since 0.2.0
|
|
247
|
+
* @category service
|
|
248
|
+
*/
|
|
249
|
+
export class ZkConfigService extends Context.Tag('ZkConfigService')() {
|
|
250
|
+
}
|
|
251
|
+
// =============================================================================
|
|
252
|
+
// Effect DI - Live Layer
|
|
253
|
+
// =============================================================================
|
|
254
|
+
/**
|
|
255
|
+
* Live Layer for ZkConfigService.
|
|
256
|
+
*
|
|
257
|
+
* @since 0.2.0
|
|
258
|
+
* @category layer
|
|
259
|
+
*/
|
|
260
|
+
export const ZkConfigLive = Layer.succeed(ZkConfigService, {
|
|
261
|
+
getZKIR: getZKIREffect,
|
|
262
|
+
getProverKey: getProverKeyEffect,
|
|
263
|
+
getVerifierKey: getVerifierKeyEffect,
|
|
264
|
+
});
|
|
265
|
+
/**
|
|
266
|
+
* ZK configuration provider service for dependency injection.
|
|
267
|
+
*
|
|
268
|
+
* This tag allows injecting a ZKConfigProvider instance.
|
|
269
|
+
*
|
|
270
|
+
* @since 0.3.0
|
|
271
|
+
* @category services
|
|
272
|
+
*/
|
|
273
|
+
export class ZkConfigProviderService extends Context.Tag('ZkConfigProviderService')() {
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=HttpZkConfigProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpZkConfigProvider.js","sourceRoot":"","sources":["../../src/providers/HttpZkConfigProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IndexedDB-based private state provider for browser environments.
|
|
3
|
+
*
|
|
4
|
+
* ## API Design
|
|
5
|
+
*
|
|
6
|
+
* This module uses a **module-function pattern**:
|
|
7
|
+
*
|
|
8
|
+
* - **Stateless**: Functions operate on PrivateStateProvider data
|
|
9
|
+
* - **Module functions**: `PrivateState.get(provider, id)`, `PrivateState.set(provider, id, state)`
|
|
10
|
+
* - **Data-oriented**: Provider is plain data, not an instance with methods
|
|
11
|
+
*
|
|
12
|
+
* ### Usage Patterns
|
|
13
|
+
*
|
|
14
|
+
* ```typescript
|
|
15
|
+
* // Promise user
|
|
16
|
+
* const provider = PrivateState.makeIndexedDB({ privateStateStoreName: 'my-app' });
|
|
17
|
+
* const state = await PrivateState.get(provider, 'myContract');
|
|
18
|
+
* await PrivateState.set(provider, 'myContract', { count: 0 });
|
|
19
|
+
*
|
|
20
|
+
* // Effect user
|
|
21
|
+
* const provider = PrivateState.makeIndexedDB({ privateStateStoreName: 'my-app' });
|
|
22
|
+
* const state = yield* PrivateState.effect.get(provider, 'myContract');
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @since 0.2.0
|
|
26
|
+
* @module
|
|
27
|
+
*/
|
|
28
|
+
import { Context, Effect, Layer } from 'effect';
|
|
29
|
+
import { BrowserLevel } from 'browser-level';
|
|
30
|
+
import type { PrivateStateProvider } from '@midnight-ntwrk/midnight-js-types';
|
|
31
|
+
import { PrivateStateError } from './errors.js';
|
|
32
|
+
type ContractAddress = string;
|
|
33
|
+
type SigningKey = unknown;
|
|
34
|
+
/**
|
|
35
|
+
* Configuration for IndexedDB private state storage.
|
|
36
|
+
*
|
|
37
|
+
* @since 0.2.0
|
|
38
|
+
* @category model
|
|
39
|
+
*/
|
|
40
|
+
export interface IndexedDBPrivateStateConfig {
|
|
41
|
+
/** Name of the IndexedDB store */
|
|
42
|
+
privateStateStoreName: string;
|
|
43
|
+
/** Password for encryption (optional, uses default if not provided) */
|
|
44
|
+
password?: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Represents a private state provider.
|
|
48
|
+
*
|
|
49
|
+
* This is plain data - use module functions to operate on it.
|
|
50
|
+
*
|
|
51
|
+
* @since 0.2.0
|
|
52
|
+
* @category model
|
|
53
|
+
*/
|
|
54
|
+
export interface PrivateStateProviderData {
|
|
55
|
+
/** State database */
|
|
56
|
+
readonly stateDb: BrowserLevel<string, Uint8Array> | Map<string, unknown>;
|
|
57
|
+
/** Signing key database */
|
|
58
|
+
readonly signingKeyDb: BrowserLevel<string, Uint8Array> | Map<string, SigningKey>;
|
|
59
|
+
/** Encryption function */
|
|
60
|
+
readonly encrypt: (data: Uint8Array) => Uint8Array;
|
|
61
|
+
/** Decryption function */
|
|
62
|
+
readonly decrypt: (data: Uint8Array) => Uint8Array;
|
|
63
|
+
/** Type indicator */
|
|
64
|
+
readonly type: 'indexeddb' | 'memory';
|
|
65
|
+
}
|
|
66
|
+
declare function getEffect(provider: PrivateStateProviderData, privateStateId: string): Effect.Effect<unknown | null, PrivateStateError>;
|
|
67
|
+
declare function setEffect(provider: PrivateStateProviderData, privateStateId: string, state: unknown): Effect.Effect<void, PrivateStateError>;
|
|
68
|
+
declare function removeEffect(provider: PrivateStateProviderData, privateStateId: string): Effect.Effect<void, PrivateStateError>;
|
|
69
|
+
declare function clearEffect(provider: PrivateStateProviderData): Effect.Effect<void, PrivateStateError>;
|
|
70
|
+
declare function setSigningKeyEffect(provider: PrivateStateProviderData, address: ContractAddress, signingKey: SigningKey): Effect.Effect<void, PrivateStateError>;
|
|
71
|
+
declare function getSigningKeyEffect(provider: PrivateStateProviderData, address: ContractAddress): Effect.Effect<SigningKey | null, PrivateStateError>;
|
|
72
|
+
declare function removeSigningKeyEffect(provider: PrivateStateProviderData, address: ContractAddress): Effect.Effect<void, PrivateStateError>;
|
|
73
|
+
declare function clearSigningKeysEffect(provider: PrivateStateProviderData): Effect.Effect<void, PrivateStateError>;
|
|
74
|
+
/**
|
|
75
|
+
* Create an IndexedDB-based private state provider.
|
|
76
|
+
*
|
|
77
|
+
* @param config - Configuration options
|
|
78
|
+
* @returns PrivateStateProviderData
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```typescript
|
|
82
|
+
* const provider = makeIndexedDB({
|
|
83
|
+
* privateStateStoreName: 'my-dapp-state',
|
|
84
|
+
* password: 'user-password',
|
|
85
|
+
* });
|
|
86
|
+
* ```
|
|
87
|
+
*
|
|
88
|
+
* @since 0.2.0
|
|
89
|
+
* @category constructors
|
|
90
|
+
*/
|
|
91
|
+
export declare function makeIndexedDB(config: IndexedDBPrivateStateConfig): PrivateStateProviderData;
|
|
92
|
+
/**
|
|
93
|
+
* Create an in-memory private state provider (no persistence).
|
|
94
|
+
*
|
|
95
|
+
* @returns PrivateStateProviderData
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```typescript
|
|
99
|
+
* const provider = makeInMemory();
|
|
100
|
+
* ```
|
|
101
|
+
*
|
|
102
|
+
* @since 0.2.0
|
|
103
|
+
* @category constructors
|
|
104
|
+
*/
|
|
105
|
+
export declare function makeInMemory(): PrivateStateProviderData;
|
|
106
|
+
/**
|
|
107
|
+
* Get private state.
|
|
108
|
+
*
|
|
109
|
+
* @since 0.2.0
|
|
110
|
+
* @category operations
|
|
111
|
+
*/
|
|
112
|
+
export declare function get(provider: PrivateStateProviderData, privateStateId: string): Promise<unknown | null>;
|
|
113
|
+
/**
|
|
114
|
+
* Set private state.
|
|
115
|
+
*
|
|
116
|
+
* @since 0.2.0
|
|
117
|
+
* @category operations
|
|
118
|
+
*/
|
|
119
|
+
export declare function set(provider: PrivateStateProviderData, privateStateId: string, state: unknown): Promise<void>;
|
|
120
|
+
/**
|
|
121
|
+
* Remove private state.
|
|
122
|
+
*
|
|
123
|
+
* @since 0.2.0
|
|
124
|
+
* @category operations
|
|
125
|
+
*/
|
|
126
|
+
export declare function remove(provider: PrivateStateProviderData, privateStateId: string): Promise<void>;
|
|
127
|
+
/**
|
|
128
|
+
* Clear all private state.
|
|
129
|
+
*
|
|
130
|
+
* @since 0.2.0
|
|
131
|
+
* @category operations
|
|
132
|
+
*/
|
|
133
|
+
export declare function clear(provider: PrivateStateProviderData): Promise<void>;
|
|
134
|
+
/**
|
|
135
|
+
* Set signing key.
|
|
136
|
+
*
|
|
137
|
+
* @since 0.2.0
|
|
138
|
+
* @category operations
|
|
139
|
+
*/
|
|
140
|
+
export declare function setSigningKey(provider: PrivateStateProviderData, address: ContractAddress, signingKey: SigningKey): Promise<void>;
|
|
141
|
+
/**
|
|
142
|
+
* Get signing key.
|
|
143
|
+
*
|
|
144
|
+
* @since 0.2.0
|
|
145
|
+
* @category operations
|
|
146
|
+
*/
|
|
147
|
+
export declare function getSigningKey(provider: PrivateStateProviderData, address: ContractAddress): Promise<SigningKey | null>;
|
|
148
|
+
/**
|
|
149
|
+
* Remove signing key.
|
|
150
|
+
*
|
|
151
|
+
* @since 0.2.0
|
|
152
|
+
* @category operations
|
|
153
|
+
*/
|
|
154
|
+
export declare function removeSigningKey(provider: PrivateStateProviderData, address: ContractAddress): Promise<void>;
|
|
155
|
+
/**
|
|
156
|
+
* Clear all signing keys.
|
|
157
|
+
*
|
|
158
|
+
* @since 0.2.0
|
|
159
|
+
* @category operations
|
|
160
|
+
*/
|
|
161
|
+
export declare function clearSigningKeys(provider: PrivateStateProviderData): Promise<void>;
|
|
162
|
+
/**
|
|
163
|
+
* Raw Effect APIs for advanced users.
|
|
164
|
+
*
|
|
165
|
+
* @since 0.2.0
|
|
166
|
+
* @category effect
|
|
167
|
+
*/
|
|
168
|
+
export declare const effect: {
|
|
169
|
+
get: typeof getEffect;
|
|
170
|
+
set: typeof setEffect;
|
|
171
|
+
remove: typeof removeEffect;
|
|
172
|
+
clear: typeof clearEffect;
|
|
173
|
+
setSigningKey: typeof setSigningKeyEffect;
|
|
174
|
+
getSigningKey: typeof getSigningKeyEffect;
|
|
175
|
+
removeSigningKey: typeof removeSigningKeyEffect;
|
|
176
|
+
clearSigningKeys: typeof clearSigningKeysEffect;
|
|
177
|
+
};
|
|
178
|
+
/**
|
|
179
|
+
* Create a browser-compatible private state provider using IndexedDB.
|
|
180
|
+
*
|
|
181
|
+
* This function returns a PrivateStateProvider compatible with midnight-js.
|
|
182
|
+
*
|
|
183
|
+
* @param config - Configuration options
|
|
184
|
+
* @returns PrivateStateProvider compatible with midnight-js
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
* ```typescript
|
|
188
|
+
* const provider = indexedDBPrivateStateProvider({
|
|
189
|
+
* privateStateStoreName: 'my-dapp-state',
|
|
190
|
+
* password: 'user-password',
|
|
191
|
+
* });
|
|
192
|
+
*
|
|
193
|
+
* // Use with Client.create()
|
|
194
|
+
* const client = await Client.create({
|
|
195
|
+
* privateStateProvider: provider,
|
|
196
|
+
* // ...
|
|
197
|
+
* });
|
|
198
|
+
* ```
|
|
199
|
+
*
|
|
200
|
+
* @since 0.2.0
|
|
201
|
+
* @category constructors
|
|
202
|
+
*/
|
|
203
|
+
export declare function indexedDBPrivateStateProvider(config: IndexedDBPrivateStateConfig): PrivateStateProvider<string, unknown>;
|
|
204
|
+
/**
|
|
205
|
+
* Create an in-memory private state provider (no persistence).
|
|
206
|
+
*
|
|
207
|
+
* This function returns a PrivateStateProvider compatible with midnight-js.
|
|
208
|
+
*
|
|
209
|
+
* @returns PrivateStateProvider that stores state in memory
|
|
210
|
+
*
|
|
211
|
+
* @example
|
|
212
|
+
* ```typescript
|
|
213
|
+
* const provider = inMemoryPrivateStateProvider();
|
|
214
|
+
*
|
|
215
|
+
* // Use with Client.create()
|
|
216
|
+
* const client = await Client.create({
|
|
217
|
+
* privateStateProvider: provider,
|
|
218
|
+
* // ...
|
|
219
|
+
* });
|
|
220
|
+
* ```
|
|
221
|
+
*
|
|
222
|
+
* @since 0.2.0
|
|
223
|
+
* @category constructors
|
|
224
|
+
*/
|
|
225
|
+
export declare function inMemoryPrivateStateProvider(): PrivateStateProvider<string, unknown>;
|
|
226
|
+
/**
|
|
227
|
+
* Service interface for PrivateState operations.
|
|
228
|
+
*
|
|
229
|
+
* @since 0.2.0
|
|
230
|
+
* @category service
|
|
231
|
+
*/
|
|
232
|
+
export interface PrivateStateServiceImpl {
|
|
233
|
+
readonly get: (provider: PrivateStateProviderData, privateStateId: string) => Effect.Effect<unknown | null, PrivateStateError>;
|
|
234
|
+
readonly set: (provider: PrivateStateProviderData, privateStateId: string, state: unknown) => Effect.Effect<void, PrivateStateError>;
|
|
235
|
+
readonly remove: (provider: PrivateStateProviderData, privateStateId: string) => Effect.Effect<void, PrivateStateError>;
|
|
236
|
+
readonly clear: (provider: PrivateStateProviderData) => Effect.Effect<void, PrivateStateError>;
|
|
237
|
+
readonly setSigningKey: (provider: PrivateStateProviderData, address: string, signingKey: unknown) => Effect.Effect<void, PrivateStateError>;
|
|
238
|
+
readonly getSigningKey: (provider: PrivateStateProviderData, address: string) => Effect.Effect<unknown | null, PrivateStateError>;
|
|
239
|
+
readonly removeSigningKey: (provider: PrivateStateProviderData, address: string) => Effect.Effect<void, PrivateStateError>;
|
|
240
|
+
readonly clearSigningKeys: (provider: PrivateStateProviderData) => Effect.Effect<void, PrivateStateError>;
|
|
241
|
+
}
|
|
242
|
+
declare const PrivateStateService_base: Context.TagClass<PrivateStateService, "PrivateStateService", PrivateStateServiceImpl>;
|
|
243
|
+
/**
|
|
244
|
+
* Context.Tag for PrivateStateService dependency injection.
|
|
245
|
+
*
|
|
246
|
+
* @since 0.2.0
|
|
247
|
+
* @category service
|
|
248
|
+
*/
|
|
249
|
+
export declare class PrivateStateService extends PrivateStateService_base {
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Live Layer for PrivateStateService.
|
|
253
|
+
*
|
|
254
|
+
* @since 0.2.0
|
|
255
|
+
* @category layer
|
|
256
|
+
*/
|
|
257
|
+
export declare const PrivateStateLive: Layer.Layer<PrivateStateService>;
|
|
258
|
+
declare const PrivateStateProviderService_base: Context.TagClass<PrivateStateProviderService, "PrivateStateProviderService", PrivateStateProvider<string, any>>;
|
|
259
|
+
/**
|
|
260
|
+
* Private state provider service for dependency injection.
|
|
261
|
+
*
|
|
262
|
+
* This tag allows injecting a PrivateStateProvider instance.
|
|
263
|
+
*
|
|
264
|
+
* @since 0.3.0
|
|
265
|
+
* @category services
|
|
266
|
+
*/
|
|
267
|
+
export declare class PrivateStateProviderService extends PrivateStateProviderService_base {
|
|
268
|
+
}
|
|
269
|
+
export {};
|
|
270
|
+
//# sourceMappingURL=IndexedDBPrivateStateProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IndexedDBPrivateStateProvider.d.ts","sourceRoot":"","sources":["../../src/providers/IndexedDBPrivateStateProvider.ts"],"names":[],"mappings":"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"}
|