@no-witness-labs/midday-sdk 0.2.0 → 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/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 +10 -5
|
@@ -0,0 +1,229 @@
|
|
|
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, type ProverKey, type VerifierKey, type ZKIR } from '@midnight-ntwrk/midnight-js-types';
|
|
29
|
+
import { ZkConfigError } from './errors.js';
|
|
30
|
+
/**
|
|
31
|
+
* ZK configuration loaded from HTTP endpoints.
|
|
32
|
+
*
|
|
33
|
+
* @since 0.2.0
|
|
34
|
+
* @category model
|
|
35
|
+
*/
|
|
36
|
+
export interface ZkConfig {
|
|
37
|
+
/** Zero-knowledge intermediate representation */
|
|
38
|
+
zkir: ZKIR;
|
|
39
|
+
/** Prover key bytes */
|
|
40
|
+
proverKey: ProverKey;
|
|
41
|
+
/** Verifier key bytes */
|
|
42
|
+
verifierKey: VerifierKey;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Represents an HTTP ZK config provider.
|
|
46
|
+
*
|
|
47
|
+
* This is plain data - use module functions to operate on it.
|
|
48
|
+
*
|
|
49
|
+
* @since 0.2.0
|
|
50
|
+
* @category model
|
|
51
|
+
*/
|
|
52
|
+
export interface HttpZkConfigProviderData {
|
|
53
|
+
/** Base URL for ZK artifacts */
|
|
54
|
+
readonly baseUrl: string;
|
|
55
|
+
/** Fetch function to use */
|
|
56
|
+
readonly fetchFn: typeof fetch;
|
|
57
|
+
/** Internal cache for loaded configs */
|
|
58
|
+
readonly cache: Map<string, ZkConfig>;
|
|
59
|
+
}
|
|
60
|
+
declare function getZKIREffect(provider: HttpZkConfigProviderData, circuitId: string): Effect.Effect<ZKIR, ZkConfigError>;
|
|
61
|
+
declare function getProverKeyEffect(provider: HttpZkConfigProviderData, circuitId: string): Effect.Effect<ProverKey, ZkConfigError>;
|
|
62
|
+
declare function getVerifierKeyEffect(provider: HttpZkConfigProviderData, circuitId: string): Effect.Effect<VerifierKey, ZkConfigError>;
|
|
63
|
+
/**
|
|
64
|
+
* Create a new HTTP ZK config provider.
|
|
65
|
+
*
|
|
66
|
+
* @param baseUrl - Base URL for ZK artifacts (without trailing slash)
|
|
67
|
+
* @param fetchFn - Optional custom fetch function (defaults to global fetch)
|
|
68
|
+
* @returns HttpZkConfigProviderData
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```typescript
|
|
72
|
+
* const provider = HttpZkConfigProvider.make('https://cdn.example.com/contracts/counter');
|
|
73
|
+
* ```
|
|
74
|
+
*
|
|
75
|
+
* @since 0.2.0
|
|
76
|
+
* @category constructors
|
|
77
|
+
*/
|
|
78
|
+
export declare function make(baseUrl: string, fetchFn?: typeof fetch): HttpZkConfigProviderData;
|
|
79
|
+
/**
|
|
80
|
+
* Get the ZKIR for a circuit.
|
|
81
|
+
*
|
|
82
|
+
* @param provider - The provider data
|
|
83
|
+
* @param circuitId - Circuit identifier
|
|
84
|
+
* @returns ZKIR bytes
|
|
85
|
+
*
|
|
86
|
+
* @since 0.2.0
|
|
87
|
+
* @category operations
|
|
88
|
+
*/
|
|
89
|
+
export declare function getZKIR(provider: HttpZkConfigProviderData, circuitId: string): Promise<ZKIR>;
|
|
90
|
+
/**
|
|
91
|
+
* Get the prover key for a circuit.
|
|
92
|
+
*
|
|
93
|
+
* @param provider - The provider data
|
|
94
|
+
* @param circuitId - Circuit identifier
|
|
95
|
+
* @returns Prover key bytes
|
|
96
|
+
*
|
|
97
|
+
* @since 0.2.0
|
|
98
|
+
* @category operations
|
|
99
|
+
*/
|
|
100
|
+
export declare function getProverKey(provider: HttpZkConfigProviderData, circuitId: string): Promise<ProverKey>;
|
|
101
|
+
/**
|
|
102
|
+
* Get the verifier key for a circuit.
|
|
103
|
+
*
|
|
104
|
+
* @param provider - The provider data
|
|
105
|
+
* @param circuitId - Circuit identifier
|
|
106
|
+
* @returns Verifier key bytes
|
|
107
|
+
*
|
|
108
|
+
* @since 0.2.0
|
|
109
|
+
* @category operations
|
|
110
|
+
*/
|
|
111
|
+
export declare function getVerifierKey(provider: HttpZkConfigProviderData, circuitId: string): Promise<VerifierKey>;
|
|
112
|
+
/**
|
|
113
|
+
* Clear the cache for a specific circuit or all circuits.
|
|
114
|
+
*
|
|
115
|
+
* @param provider - The provider data
|
|
116
|
+
* @param circuitId - Optional circuit ID to clear (clears all if not provided)
|
|
117
|
+
*
|
|
118
|
+
* @since 0.2.0
|
|
119
|
+
* @category utilities
|
|
120
|
+
*/
|
|
121
|
+
export declare function clearCache(provider: HttpZkConfigProviderData, circuitId?: string): void;
|
|
122
|
+
/**
|
|
123
|
+
* Raw Effect APIs for advanced users.
|
|
124
|
+
*
|
|
125
|
+
* @since 0.2.0
|
|
126
|
+
* @category effect
|
|
127
|
+
*/
|
|
128
|
+
export declare const effect: {
|
|
129
|
+
getZKIR: typeof getZKIREffect;
|
|
130
|
+
getProverKey: typeof getProverKeyEffect;
|
|
131
|
+
getVerifierKey: typeof getVerifierKeyEffect;
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* HTTP-based ZK configuration provider class.
|
|
135
|
+
*
|
|
136
|
+
* This class wraps the module functions to provide compatibility with
|
|
137
|
+
* the midnight-js ZKConfigProvider interface.
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* ```typescript
|
|
141
|
+
* const zkConfig = new HttpZkConfigProvider('https://cdn.example.com/contracts/counter');
|
|
142
|
+
*
|
|
143
|
+
* // Use with midnight-js
|
|
144
|
+
* const client = await Client.create({
|
|
145
|
+
* zkConfigProvider: zkConfig,
|
|
146
|
+
* // ...
|
|
147
|
+
* });
|
|
148
|
+
* ```
|
|
149
|
+
*
|
|
150
|
+
* @since 0.2.0
|
|
151
|
+
* @category constructors
|
|
152
|
+
*/
|
|
153
|
+
export declare class HttpZkConfigProvider<K extends string = string> extends ZKConfigProvider<K> {
|
|
154
|
+
private readonly data;
|
|
155
|
+
/**
|
|
156
|
+
* Create a new HTTP ZK config provider.
|
|
157
|
+
*
|
|
158
|
+
* @param baseUrl - Base URL for ZK artifacts (without trailing slash)
|
|
159
|
+
* @param fetchFn - Optional custom fetch function (defaults to global fetch)
|
|
160
|
+
*/
|
|
161
|
+
constructor(baseUrl: string, fetchFn?: typeof fetch);
|
|
162
|
+
/**
|
|
163
|
+
* Get the ZKIR for a circuit.
|
|
164
|
+
*/
|
|
165
|
+
getZKIR(circuitId: K): Promise<ZKIR>;
|
|
166
|
+
/**
|
|
167
|
+
* Get the prover key for a circuit.
|
|
168
|
+
*/
|
|
169
|
+
getProverKey(circuitId: K): Promise<ProverKey>;
|
|
170
|
+
/**
|
|
171
|
+
* Get the verifier key for a circuit.
|
|
172
|
+
*/
|
|
173
|
+
getVerifierKey(circuitId: K): Promise<VerifierKey>;
|
|
174
|
+
/**
|
|
175
|
+
* Clear the cache for a specific circuit or all circuits.
|
|
176
|
+
*/
|
|
177
|
+
clearCache(circuitId?: K): void;
|
|
178
|
+
/**
|
|
179
|
+
* Raw Effect APIs for advanced users.
|
|
180
|
+
*
|
|
181
|
+
* @since 0.2.0
|
|
182
|
+
* @category effect
|
|
183
|
+
*/
|
|
184
|
+
readonly effect: {
|
|
185
|
+
getZKIR: (circuitId: K) => Effect.Effect<ZKIR, ZkConfigError, never>;
|
|
186
|
+
getProverKey: (circuitId: K) => Effect.Effect<ProverKey, ZkConfigError, never>;
|
|
187
|
+
getVerifierKey: (circuitId: K) => Effect.Effect<VerifierKey, ZkConfigError, never>;
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Service interface for ZkConfig operations.
|
|
192
|
+
*
|
|
193
|
+
* @since 0.2.0
|
|
194
|
+
* @category service
|
|
195
|
+
*/
|
|
196
|
+
export interface ZkConfigServiceImpl {
|
|
197
|
+
readonly getZKIR: (provider: HttpZkConfigProviderData, circuitId: string) => Effect.Effect<ZKIR, ZkConfigError>;
|
|
198
|
+
readonly getProverKey: (provider: HttpZkConfigProviderData, circuitId: string) => Effect.Effect<ProverKey, ZkConfigError>;
|
|
199
|
+
readonly getVerifierKey: (provider: HttpZkConfigProviderData, circuitId: string) => Effect.Effect<VerifierKey, ZkConfigError>;
|
|
200
|
+
}
|
|
201
|
+
declare const ZkConfigService_base: Context.TagClass<ZkConfigService, "ZkConfigService", ZkConfigServiceImpl>;
|
|
202
|
+
/**
|
|
203
|
+
* Context.Tag for ZkConfigService dependency injection.
|
|
204
|
+
*
|
|
205
|
+
* @since 0.2.0
|
|
206
|
+
* @category service
|
|
207
|
+
*/
|
|
208
|
+
export declare class ZkConfigService extends ZkConfigService_base {
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Live Layer for ZkConfigService.
|
|
212
|
+
*
|
|
213
|
+
* @since 0.2.0
|
|
214
|
+
* @category layer
|
|
215
|
+
*/
|
|
216
|
+
export declare const ZkConfigLive: Layer.Layer<ZkConfigService>;
|
|
217
|
+
declare const ZkConfigProviderService_base: Context.TagClass<ZkConfigProviderService, "ZkConfigProviderService", ZKConfigProvider<string>>;
|
|
218
|
+
/**
|
|
219
|
+
* ZK configuration provider service for dependency injection.
|
|
220
|
+
*
|
|
221
|
+
* This tag allows injecting a ZKConfigProvider instance.
|
|
222
|
+
*
|
|
223
|
+
* @since 0.3.0
|
|
224
|
+
* @category services
|
|
225
|
+
*/
|
|
226
|
+
export declare class ZkConfigProviderService extends ZkConfigProviderService_base {
|
|
227
|
+
}
|
|
228
|
+
export {};
|
|
229
|
+
//# sourceMappingURL=HttpZkConfigProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpZkConfigProvider.d.ts","sourceRoot":"","sources":["../../src/providers/HttpZkConfigProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -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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"}
|