@no-witness-labs/midday-sdk 0.2.0 → 0.2.2
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 +542 -70
- package/dist/Client.d.ts.map +1 -1
- package/dist/Client.js +608 -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 @@
|
|
|
1
|
+
{"version":3,"file":"effect-runtime.js","sourceRoot":"","sources":["../../src/utils/effect-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-compatible hex encoding utilities.
|
|
3
|
+
*
|
|
4
|
+
* Replaces Node.js Buffer with standard Web APIs that work in both browser and Node.js 18+.
|
|
5
|
+
*
|
|
6
|
+
* @since 0.2.0
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Convert a hex string to Uint8Array.
|
|
11
|
+
*
|
|
12
|
+
* @param hex - Hex string (with or without 0x prefix)
|
|
13
|
+
* @returns Uint8Array of bytes
|
|
14
|
+
* @throws Error if hex string is invalid
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const bytes = hexToBytes('deadbeef');
|
|
19
|
+
* // Uint8Array [222, 173, 190, 239]
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare function hexToBytes(hex: string): Uint8Array;
|
|
23
|
+
/**
|
|
24
|
+
* Convert Uint8Array to hex string.
|
|
25
|
+
*
|
|
26
|
+
* @param bytes - Uint8Array to convert
|
|
27
|
+
* @returns Lowercase hex string (without 0x prefix)
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const hex = bytesToHex(new Uint8Array([222, 173, 190, 239]));
|
|
32
|
+
* // 'deadbeef'
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function bytesToHex(bytes: Uint8Array): string;
|
|
36
|
+
/**
|
|
37
|
+
* Convert base64 string to Uint8Array.
|
|
38
|
+
*
|
|
39
|
+
* @param base64 - Base64 encoded string
|
|
40
|
+
* @returns Uint8Array of bytes
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* const bytes = base64ToBytes('3q2+7w==');
|
|
45
|
+
* // Uint8Array [222, 173, 190, 239]
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare function base64ToBytes(base64: string): Uint8Array;
|
|
49
|
+
/**
|
|
50
|
+
* Convert Uint8Array to base64 string.
|
|
51
|
+
*
|
|
52
|
+
* @param bytes - Uint8Array to convert
|
|
53
|
+
* @returns Base64 encoded string
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* const base64 = bytesToBase64(new Uint8Array([222, 173, 190, 239]));
|
|
58
|
+
* // '3q2+7w=='
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export declare function bytesToBase64(bytes: Uint8Array): string;
|
|
62
|
+
//# sourceMappingURL=hex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hex.d.ts","sourceRoot":"","sources":["../../src/utils/hex.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAkBlD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAIpD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAQxD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAKvD"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-compatible hex encoding utilities.
|
|
3
|
+
*
|
|
4
|
+
* Replaces Node.js Buffer with standard Web APIs that work in both browser and Node.js 18+.
|
|
5
|
+
*
|
|
6
|
+
* @since 0.2.0
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Convert a hex string to Uint8Array.
|
|
11
|
+
*
|
|
12
|
+
* @param hex - Hex string (with or without 0x prefix)
|
|
13
|
+
* @returns Uint8Array of bytes
|
|
14
|
+
* @throws Error if hex string is invalid
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const bytes = hexToBytes('deadbeef');
|
|
19
|
+
* // Uint8Array [222, 173, 190, 239]
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export function hexToBytes(hex) {
|
|
23
|
+
// Remove 0x prefix if present
|
|
24
|
+
const cleanHex = hex.startsWith('0x') ? hex.slice(2) : hex;
|
|
25
|
+
if (cleanHex.length % 2 !== 0) {
|
|
26
|
+
throw new Error('Invalid hex string: length must be even');
|
|
27
|
+
}
|
|
28
|
+
if (!/^[0-9a-fA-F]*$/.test(cleanHex)) {
|
|
29
|
+
throw new Error('Invalid hex string: contains non-hex characters');
|
|
30
|
+
}
|
|
31
|
+
const bytes = new Uint8Array(cleanHex.length / 2);
|
|
32
|
+
for (let i = 0; i < cleanHex.length; i += 2) {
|
|
33
|
+
bytes[i / 2] = parseInt(cleanHex.slice(i, i + 2), 16);
|
|
34
|
+
}
|
|
35
|
+
return bytes;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Convert Uint8Array to hex string.
|
|
39
|
+
*
|
|
40
|
+
* @param bytes - Uint8Array to convert
|
|
41
|
+
* @returns Lowercase hex string (without 0x prefix)
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* const hex = bytesToHex(new Uint8Array([222, 173, 190, 239]));
|
|
46
|
+
* // 'deadbeef'
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export function bytesToHex(bytes) {
|
|
50
|
+
return Array.from(bytes)
|
|
51
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
52
|
+
.join('');
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Convert base64 string to Uint8Array.
|
|
56
|
+
*
|
|
57
|
+
* @param base64 - Base64 encoded string
|
|
58
|
+
* @returns Uint8Array of bytes
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* const bytes = base64ToBytes('3q2+7w==');
|
|
63
|
+
* // Uint8Array [222, 173, 190, 239]
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export function base64ToBytes(base64) {
|
|
67
|
+
// Use atob which is available in both browser and Node.js 18+
|
|
68
|
+
const binaryString = atob(base64);
|
|
69
|
+
const bytes = new Uint8Array(binaryString.length);
|
|
70
|
+
for (let i = 0; i < binaryString.length; i++) {
|
|
71
|
+
bytes[i] = binaryString.charCodeAt(i);
|
|
72
|
+
}
|
|
73
|
+
return bytes;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Convert Uint8Array to base64 string.
|
|
77
|
+
*
|
|
78
|
+
* @param bytes - Uint8Array to convert
|
|
79
|
+
* @returns Base64 encoded string
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```typescript
|
|
83
|
+
* const base64 = bytesToBase64(new Uint8Array([222, 173, 190, 239]));
|
|
84
|
+
* // '3q2+7w=='
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
export function bytesToBase64(bytes) {
|
|
88
|
+
const binaryString = Array.from(bytes)
|
|
89
|
+
.map((b) => String.fromCharCode(b))
|
|
90
|
+
.join('');
|
|
91
|
+
return btoa(binaryString);
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=hex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hex.js","sourceRoot":"","sources":["../../src/utils/hex.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,8BAA8B;IAC9B,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAE3D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;SACrB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC3C,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,8DAA8D;IAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,KAAK,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,KAAiB;IAC7C,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;SACnC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;SAClC,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wallet connector for Lace wallet integration in browser.
|
|
3
|
+
*
|
|
4
|
+
* Connects to the Lace browser extension via DAppConnectorAPI v4.
|
|
5
|
+
* Provides dual API: Effect-based and Promise-based.
|
|
6
|
+
*
|
|
7
|
+
* @since 0.2.0
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import { Context, Effect, Layer } from 'effect';
|
|
11
|
+
import { WalletError } from './errors.js';
|
|
12
|
+
/**
|
|
13
|
+
* Key material provider for proving.
|
|
14
|
+
*/
|
|
15
|
+
export interface KeyMaterialProvider {
|
|
16
|
+
getZKIR(circuitKeyLocation: string): Promise<Uint8Array>;
|
|
17
|
+
getProverKey(circuitKeyLocation: string): Promise<Uint8Array>;
|
|
18
|
+
getVerifierKey(circuitKeyLocation: string): Promise<Uint8Array>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Proving provider from wallet.
|
|
22
|
+
*/
|
|
23
|
+
export interface ProvingProvider {
|
|
24
|
+
check(serializedPreimage: Uint8Array, keyLocation: string): Promise<(bigint | undefined)[]>;
|
|
25
|
+
prove(serializedPreimage: Uint8Array, keyLocation: string, overwriteBindingInput?: bigint): Promise<Uint8Array>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Network configuration from wallet.
|
|
29
|
+
*/
|
|
30
|
+
export interface Configuration {
|
|
31
|
+
indexerUri: string;
|
|
32
|
+
indexerWsUri: string;
|
|
33
|
+
proverServerUri?: string;
|
|
34
|
+
substrateNodeUri: string;
|
|
35
|
+
networkId: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Initial API for wallet connection.
|
|
39
|
+
*/
|
|
40
|
+
export interface InitialAPI {
|
|
41
|
+
rdns: string;
|
|
42
|
+
name: string;
|
|
43
|
+
icon: string;
|
|
44
|
+
apiVersion: string;
|
|
45
|
+
connect: (networkId: string) => Promise<ConnectedAPI>;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Connected wallet API.
|
|
49
|
+
*/
|
|
50
|
+
export interface ConnectedAPI {
|
|
51
|
+
getShieldedBalances(): Promise<Record<string, bigint>>;
|
|
52
|
+
getUnshieldedBalances(): Promise<Record<string, bigint>>;
|
|
53
|
+
getDustBalance(): Promise<{
|
|
54
|
+
cap: bigint;
|
|
55
|
+
balance: bigint;
|
|
56
|
+
}>;
|
|
57
|
+
getShieldedAddresses(): Promise<{
|
|
58
|
+
shieldedAddress: string;
|
|
59
|
+
shieldedCoinPublicKey: string;
|
|
60
|
+
shieldedEncryptionPublicKey: string;
|
|
61
|
+
}>;
|
|
62
|
+
getUnshieldedAddress(): Promise<{
|
|
63
|
+
unshieldedAddress: string;
|
|
64
|
+
}>;
|
|
65
|
+
getDustAddress(): Promise<{
|
|
66
|
+
dustAddress: string;
|
|
67
|
+
}>;
|
|
68
|
+
balanceUnsealedTransaction(tx: string): Promise<{
|
|
69
|
+
tx: string;
|
|
70
|
+
}>;
|
|
71
|
+
balanceSealedTransaction(tx: string): Promise<{
|
|
72
|
+
tx: string;
|
|
73
|
+
}>;
|
|
74
|
+
submitTransaction(tx: string): Promise<string>;
|
|
75
|
+
getProvingProvider(keyMaterialProvider: KeyMaterialProvider): Promise<ProvingProvider>;
|
|
76
|
+
getConfiguration(): Promise<Configuration>;
|
|
77
|
+
hintUsage(methodNames: string[]): Promise<void>;
|
|
78
|
+
}
|
|
79
|
+
declare global {
|
|
80
|
+
interface Window {
|
|
81
|
+
midnight?: {
|
|
82
|
+
mnLace?: InitialAPI;
|
|
83
|
+
[key: string]: InitialAPI | undefined;
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Shielded addresses returned by wallet.
|
|
89
|
+
*/
|
|
90
|
+
export interface ShieldedAddresses {
|
|
91
|
+
shieldedAddress: string;
|
|
92
|
+
shieldedCoinPublicKey: string;
|
|
93
|
+
shieldedEncryptionPublicKey: string;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Result of connecting to a wallet.
|
|
97
|
+
*/
|
|
98
|
+
export interface WalletConnection {
|
|
99
|
+
wallet: ConnectedAPI;
|
|
100
|
+
config: Configuration;
|
|
101
|
+
addresses: ShieldedAddresses;
|
|
102
|
+
coinPublicKey: string;
|
|
103
|
+
encryptionPublicKey: string;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Effect-based interface for wallet connector.
|
|
107
|
+
*/
|
|
108
|
+
export interface WalletConnectorEffect {
|
|
109
|
+
readonly connect: (networkId?: string) => Effect.Effect<WalletConnection, WalletError>;
|
|
110
|
+
readonly isAvailable: () => Effect.Effect<boolean, never>;
|
|
111
|
+
readonly disconnect: () => Effect.Effect<void, never>;
|
|
112
|
+
readonly getProvingProvider: (wallet: ConnectedAPI, zkConfigProvider: KeyMaterialProvider) => Effect.Effect<ProvingProvider, WalletError>;
|
|
113
|
+
}
|
|
114
|
+
declare function isAvailableEffect(): Effect.Effect<boolean, never>;
|
|
115
|
+
declare function connectEffect(networkId?: string): Effect.Effect<WalletConnection, WalletError>;
|
|
116
|
+
declare function disconnectEffect(): Effect.Effect<void, never>;
|
|
117
|
+
declare function getProvingProviderEffect(wallet: ConnectedAPI, zkConfigProvider: KeyMaterialProvider): Effect.Effect<ProvingProvider, WalletError>;
|
|
118
|
+
/**
|
|
119
|
+
* Effect-based API for wallet connector.
|
|
120
|
+
*/
|
|
121
|
+
export declare const WalletConnectorEffectAPI: WalletConnectorEffect;
|
|
122
|
+
/**
|
|
123
|
+
* Check if running in browser with Lace wallet available.
|
|
124
|
+
*/
|
|
125
|
+
export declare function isWalletAvailable(): boolean;
|
|
126
|
+
/**
|
|
127
|
+
* Connect to the Lace wallet in browser.
|
|
128
|
+
*
|
|
129
|
+
* @param networkId - Network to connect to (default: 'testnet')
|
|
130
|
+
* @returns WalletConnection with wallet API and keys
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```typescript
|
|
134
|
+
* // Effect-based usage
|
|
135
|
+
* const connection = yield* Midday.WalletConnector.effect.connect('testnet');
|
|
136
|
+
*
|
|
137
|
+
* // Promise-based usage
|
|
138
|
+
* const connection = await Midday.connectWallet('testnet');
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
export declare function connectWallet(networkId?: string): Promise<WalletConnection>;
|
|
142
|
+
/**
|
|
143
|
+
* Get a proving provider from the connected wallet.
|
|
144
|
+
*/
|
|
145
|
+
export declare function getWalletProvingProvider(wallet: ConnectedAPI, zkConfigProvider: KeyMaterialProvider): Promise<ProvingProvider>;
|
|
146
|
+
/**
|
|
147
|
+
* Disconnect from the wallet (if supported).
|
|
148
|
+
*/
|
|
149
|
+
export declare function disconnectWallet(): Promise<void>;
|
|
150
|
+
/**
|
|
151
|
+
* Raw Effect APIs for advanced users.
|
|
152
|
+
*
|
|
153
|
+
* @since 0.2.0
|
|
154
|
+
* @category effect
|
|
155
|
+
*/
|
|
156
|
+
export declare const effect: {
|
|
157
|
+
connect: typeof connectEffect;
|
|
158
|
+
isAvailable: typeof isAvailableEffect;
|
|
159
|
+
disconnect: typeof disconnectEffect;
|
|
160
|
+
getProvingProvider: typeof getProvingProviderEffect;
|
|
161
|
+
};
|
|
162
|
+
/**
|
|
163
|
+
* Service interface for WalletConnector operations.
|
|
164
|
+
*
|
|
165
|
+
* @since 0.2.0
|
|
166
|
+
* @category service
|
|
167
|
+
*/
|
|
168
|
+
export interface WalletConnectorServiceImpl {
|
|
169
|
+
readonly connect: (networkId?: string) => Effect.Effect<WalletConnection, WalletError>;
|
|
170
|
+
readonly isAvailable: () => Effect.Effect<boolean, never>;
|
|
171
|
+
readonly disconnect: () => Effect.Effect<void, never>;
|
|
172
|
+
readonly getProvingProvider: (wallet: ConnectedAPI, zkConfigProvider: KeyMaterialProvider) => Effect.Effect<ProvingProvider, WalletError>;
|
|
173
|
+
}
|
|
174
|
+
declare const WalletConnectorService_base: Context.TagClass<WalletConnectorService, "WalletConnectorService", WalletConnectorServiceImpl>;
|
|
175
|
+
/**
|
|
176
|
+
* Context.Tag for WalletConnectorService dependency injection.
|
|
177
|
+
*
|
|
178
|
+
* @since 0.2.0
|
|
179
|
+
* @category service
|
|
180
|
+
*/
|
|
181
|
+
export declare class WalletConnectorService extends WalletConnectorService_base {
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Live Layer for WalletConnectorService.
|
|
185
|
+
*
|
|
186
|
+
* @since 0.2.0
|
|
187
|
+
* @category layer
|
|
188
|
+
*/
|
|
189
|
+
export declare const WalletConnectorLive: Layer.Layer<WalletConnectorService>;
|
|
190
|
+
export {};
|
|
191
|
+
//# sourceMappingURL=connector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../../src/wallet/connector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wallet connector for Lace wallet integration in browser.
|
|
3
|
+
*
|
|
4
|
+
* Connects to the Lace browser extension via DAppConnectorAPI v4.
|
|
5
|
+
* Provides dual API: Effect-based and Promise-based.
|
|
6
|
+
*
|
|
7
|
+
* @since 0.2.0
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import { Context, Effect, Layer } from 'effect';
|
|
11
|
+
import { WalletError } from './errors.js';
|
|
12
|
+
import { runEffect, runEffectPromise } from '../utils/effect-runtime.js';
|
|
13
|
+
// =============================================================================
|
|
14
|
+
// Effect API
|
|
15
|
+
// =============================================================================
|
|
16
|
+
function isAvailableEffect() {
|
|
17
|
+
return Effect.sync(() => typeof window !== 'undefined' && !!window.midnight?.mnLace);
|
|
18
|
+
}
|
|
19
|
+
function waitForWalletEffect(timeout = 5000) {
|
|
20
|
+
return Effect.tryPromise({
|
|
21
|
+
try: async () => {
|
|
22
|
+
const start = Date.now();
|
|
23
|
+
while (Date.now() - start < timeout) {
|
|
24
|
+
if (window.midnight?.mnLace) {
|
|
25
|
+
return window.midnight.mnLace;
|
|
26
|
+
}
|
|
27
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
28
|
+
}
|
|
29
|
+
throw new Error('Lace wallet not found. Please install the Lace browser extension.');
|
|
30
|
+
},
|
|
31
|
+
catch: (cause) => new WalletError({
|
|
32
|
+
cause,
|
|
33
|
+
message: `Wallet not available: ${cause instanceof Error ? cause.message : String(cause)}`,
|
|
34
|
+
}),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
function isVersionCompatible(version, required) {
|
|
38
|
+
const [major] = version.split('.').map(Number);
|
|
39
|
+
const [requiredMajor] = required.split('.').map(Number);
|
|
40
|
+
return major >= requiredMajor;
|
|
41
|
+
}
|
|
42
|
+
function connectEffect(networkId = 'testnet') {
|
|
43
|
+
return Effect.gen(function* () {
|
|
44
|
+
if (typeof window === 'undefined') {
|
|
45
|
+
return yield* Effect.fail(new WalletError({
|
|
46
|
+
cause: new Error('Browser environment required'),
|
|
47
|
+
message: 'connectWallet() can only be used in browser environment',
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
const connector = yield* waitForWalletEffect();
|
|
51
|
+
if (!isVersionCompatible(connector.apiVersion, '4.0')) {
|
|
52
|
+
return yield* Effect.fail(new WalletError({
|
|
53
|
+
cause: new Error('Incompatible API version'),
|
|
54
|
+
message: `Incompatible wallet API version: ${connector.apiVersion}. Requires 4.x or higher. Please update Lace.`,
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
const wallet = yield* Effect.tryPromise({
|
|
58
|
+
try: () => connector.connect(networkId),
|
|
59
|
+
catch: (cause) => new WalletError({
|
|
60
|
+
cause,
|
|
61
|
+
message: `Failed to connect to wallet: ${cause instanceof Error ? cause.message : String(cause)}`,
|
|
62
|
+
}),
|
|
63
|
+
});
|
|
64
|
+
const config = yield* Effect.tryPromise({
|
|
65
|
+
try: () => wallet.getConfiguration(),
|
|
66
|
+
catch: (cause) => new WalletError({
|
|
67
|
+
cause,
|
|
68
|
+
message: `Failed to get wallet configuration: ${cause instanceof Error ? cause.message : String(cause)}`,
|
|
69
|
+
}),
|
|
70
|
+
});
|
|
71
|
+
const addresses = yield* Effect.tryPromise({
|
|
72
|
+
try: () => wallet.getShieldedAddresses(),
|
|
73
|
+
catch: (cause) => new WalletError({
|
|
74
|
+
cause,
|
|
75
|
+
message: `Failed to get wallet addresses: ${cause instanceof Error ? cause.message : String(cause)}`,
|
|
76
|
+
}),
|
|
77
|
+
});
|
|
78
|
+
return {
|
|
79
|
+
wallet,
|
|
80
|
+
config,
|
|
81
|
+
addresses,
|
|
82
|
+
coinPublicKey: addresses.shieldedCoinPublicKey,
|
|
83
|
+
encryptionPublicKey: addresses.shieldedEncryptionPublicKey,
|
|
84
|
+
};
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
function disconnectEffect() {
|
|
88
|
+
// Currently Lace doesn't expose a disconnect API
|
|
89
|
+
return Effect.void;
|
|
90
|
+
}
|
|
91
|
+
function getProvingProviderEffect(wallet, zkConfigProvider) {
|
|
92
|
+
return Effect.tryPromise({
|
|
93
|
+
try: () => wallet.getProvingProvider(zkConfigProvider),
|
|
94
|
+
catch: (cause) => new WalletError({
|
|
95
|
+
cause,
|
|
96
|
+
message: `Failed to get proving provider: ${cause instanceof Error ? cause.message : String(cause)}`,
|
|
97
|
+
}),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Effect-based API for wallet connector.
|
|
102
|
+
*/
|
|
103
|
+
export const WalletConnectorEffectAPI = {
|
|
104
|
+
connect: connectEffect,
|
|
105
|
+
isAvailable: isAvailableEffect,
|
|
106
|
+
disconnect: disconnectEffect,
|
|
107
|
+
getProvingProvider: getProvingProviderEffect,
|
|
108
|
+
};
|
|
109
|
+
// =============================================================================
|
|
110
|
+
// Promise API (backwards compatible)
|
|
111
|
+
// =============================================================================
|
|
112
|
+
/**
|
|
113
|
+
* Check if running in browser with Lace wallet available.
|
|
114
|
+
*/
|
|
115
|
+
export function isWalletAvailable() {
|
|
116
|
+
return runEffect(isAvailableEffect());
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Connect to the Lace wallet in browser.
|
|
120
|
+
*
|
|
121
|
+
* @param networkId - Network to connect to (default: 'testnet')
|
|
122
|
+
* @returns WalletConnection with wallet API and keys
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* ```typescript
|
|
126
|
+
* // Effect-based usage
|
|
127
|
+
* const connection = yield* Midday.WalletConnector.effect.connect('testnet');
|
|
128
|
+
*
|
|
129
|
+
* // Promise-based usage
|
|
130
|
+
* const connection = await Midday.connectWallet('testnet');
|
|
131
|
+
* ```
|
|
132
|
+
*/
|
|
133
|
+
export async function connectWallet(networkId = 'testnet') {
|
|
134
|
+
return runEffectPromise(connectEffect(networkId));
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get a proving provider from the connected wallet.
|
|
138
|
+
*/
|
|
139
|
+
export async function getWalletProvingProvider(wallet, zkConfigProvider) {
|
|
140
|
+
return runEffectPromise(getProvingProviderEffect(wallet, zkConfigProvider));
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Disconnect from the wallet (if supported).
|
|
144
|
+
*/
|
|
145
|
+
export async function disconnectWallet() {
|
|
146
|
+
return runEffectPromise(disconnectEffect());
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Raw Effect APIs for advanced users.
|
|
150
|
+
*
|
|
151
|
+
* @since 0.2.0
|
|
152
|
+
* @category effect
|
|
153
|
+
*/
|
|
154
|
+
export const effect = {
|
|
155
|
+
connect: connectEffect,
|
|
156
|
+
isAvailable: isAvailableEffect,
|
|
157
|
+
disconnect: disconnectEffect,
|
|
158
|
+
getProvingProvider: getProvingProviderEffect,
|
|
159
|
+
};
|
|
160
|
+
/**
|
|
161
|
+
* Context.Tag for WalletConnectorService dependency injection.
|
|
162
|
+
*
|
|
163
|
+
* @since 0.2.0
|
|
164
|
+
* @category service
|
|
165
|
+
*/
|
|
166
|
+
export class WalletConnectorService extends Context.Tag('WalletConnectorService')() {
|
|
167
|
+
}
|
|
168
|
+
// =============================================================================
|
|
169
|
+
// Effect DI - Live Layer
|
|
170
|
+
// =============================================================================
|
|
171
|
+
/**
|
|
172
|
+
* Live Layer for WalletConnectorService.
|
|
173
|
+
*
|
|
174
|
+
* @since 0.2.0
|
|
175
|
+
* @category layer
|
|
176
|
+
*/
|
|
177
|
+
export const WalletConnectorLive = Layer.succeed(WalletConnectorService, {
|
|
178
|
+
connect: connectEffect,
|
|
179
|
+
isAvailable: isAvailableEffect,
|
|
180
|
+
disconnect: disconnectEffect,
|
|
181
|
+
getProvingProvider: getProvingProviderEffect,
|
|
182
|
+
});
|
|
183
|
+
//# sourceMappingURL=connector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector.js","sourceRoot":"","sources":["../../src/wallet/connector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wallet-related error types.
|
|
3
|
+
*
|
|
4
|
+
* @since 0.3.0
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
declare const WalletError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
|
|
8
|
+
readonly _tag: "WalletError";
|
|
9
|
+
} & Readonly<A>;
|
|
10
|
+
/**
|
|
11
|
+
* Error during wallet initialization or synchronization.
|
|
12
|
+
*
|
|
13
|
+
* @since 0.3.0
|
|
14
|
+
* @category errors
|
|
15
|
+
*/
|
|
16
|
+
export declare class WalletError extends WalletError_base<{
|
|
17
|
+
readonly cause: unknown;
|
|
18
|
+
readonly message: string;
|
|
19
|
+
}> {
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/wallet/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;;;AAIH;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,iBAAgC;IAC/D,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;CAAG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wallet-related error types.
|
|
3
|
+
*
|
|
4
|
+
* @since 0.3.0
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
import { Data } from 'effect';
|
|
8
|
+
/**
|
|
9
|
+
* Error during wallet initialization or synchronization.
|
|
10
|
+
*
|
|
11
|
+
* @since 0.3.0
|
|
12
|
+
* @category errors
|
|
13
|
+
*/
|
|
14
|
+
export class WalletError extends Data.TaggedError('WalletError') {
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/wallet/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B;;;;;GAKG;AACH,MAAM,OAAO,WAAY,SAAQ,IAAI,CAAC,WAAW,CAAC,aAAa,CAG7D;CAAG"}
|