@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.
Files changed (66) 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/index.d.ts +63 -7
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +68 -4
  21. package/dist/index.js.map +1 -1
  22. package/dist/providers/HttpZkConfigProvider.d.ts +229 -0
  23. package/dist/providers/HttpZkConfigProvider.d.ts.map +1 -0
  24. package/dist/providers/HttpZkConfigProvider.js +275 -0
  25. package/dist/providers/HttpZkConfigProvider.js.map +1 -0
  26. package/dist/providers/IndexedDBPrivateStateProvider.d.ts +270 -0
  27. package/dist/providers/IndexedDBPrivateStateProvider.d.ts.map +1 -0
  28. package/dist/providers/IndexedDBPrivateStateProvider.js +513 -0
  29. package/dist/providers/IndexedDBPrivateStateProvider.js.map +1 -0
  30. package/dist/providers/errors.d.ts +50 -0
  31. package/dist/providers/errors.d.ts.map +1 -0
  32. package/dist/providers/errors.js +32 -0
  33. package/dist/providers/errors.js.map +1 -0
  34. package/dist/sdk/Type.d.ts +91 -0
  35. package/dist/sdk/Type.d.ts.map +1 -0
  36. package/dist/sdk/Type.js +8 -0
  37. package/dist/sdk/Type.js.map +1 -0
  38. package/dist/utils/address.d.ts +56 -0
  39. package/dist/utils/address.d.ts.map +1 -0
  40. package/dist/utils/address.js +135 -0
  41. package/dist/utils/address.js.map +1 -0
  42. package/dist/utils/coin.d.ts +55 -0
  43. package/dist/utils/coin.d.ts.map +1 -0
  44. package/dist/utils/coin.js +84 -0
  45. package/dist/utils/coin.js.map +1 -0
  46. package/dist/utils/effect-runtime.d.ts +66 -0
  47. package/dist/utils/effect-runtime.d.ts.map +1 -0
  48. package/dist/utils/effect-runtime.js +147 -0
  49. package/dist/utils/effect-runtime.js.map +1 -0
  50. package/dist/utils/hex.d.ts +62 -0
  51. package/dist/utils/hex.d.ts.map +1 -0
  52. package/dist/utils/hex.js +93 -0
  53. package/dist/utils/hex.js.map +1 -0
  54. package/dist/wallet/connector.d.ts +191 -0
  55. package/dist/wallet/connector.d.ts.map +1 -0
  56. package/dist/wallet/connector.js +183 -0
  57. package/dist/wallet/connector.js.map +1 -0
  58. package/dist/wallet/errors.d.ts +22 -0
  59. package/dist/wallet/errors.d.ts.map +1 -0
  60. package/dist/wallet/errors.js +16 -0
  61. package/dist/wallet/errors.js.map +1 -0
  62. package/dist/wallet/provider.d.ts +102 -0
  63. package/dist/wallet/provider.d.ts.map +1 -0
  64. package/dist/wallet/provider.js +139 -0
  65. package/dist/wallet/provider.js.map +1 -0
  66. package/package.json +10 -5
@@ -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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"}