@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
@@ -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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"}