@paimaexample/wallets 0.3.128 → 0.3.130
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/esm/wallets/src/midnight/midnight.d.ts +5 -2
- package/esm/wallets/src/midnight/midnight.d.ts.map +1 -1
- package/esm/wallets/src/midnight/midnight.js +47 -25
- package/esm/wallets/src/midnight/wrapper.d.ts.map +1 -1
- package/esm/wallets/src/midnight/wrapper.js +3 -1
- package/esm/wallets/src/wallet-modes.d.ts +3 -1
- package/esm/wallets/src/wallet-modes.d.ts.map +1 -1
- package/package.json +3 -1
- package/script/wallets/src/midnight/midnight.d.ts +5 -2
- package/script/wallets/src/midnight/midnight.d.ts.map +1 -1
- package/script/wallets/src/midnight/midnight.js +50 -25
- package/script/wallets/src/midnight/wrapper.d.ts.map +1 -1
- package/script/wallets/src/midnight/wrapper.js +3 -1
- package/script/wallets/src/wallet-modes.d.ts +3 -1
- package/script/wallets/src/wallet-modes.d.ts.map +1 -1
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { type MidnightAddress } from "../../../utils/src/mod.js";
|
|
2
|
+
import type { ConnectedAPI } from "@midnight-ntwrk/dapp-connector-api";
|
|
2
3
|
import { type IInjectedConnector, type ActiveConnection, type IProvider, type AddressAndType, type UserSignature, type IConnector, type ConnectionOption } from "../IProvider.js";
|
|
3
|
-
export type MidnightApi =
|
|
4
|
+
export type MidnightApi = ConnectedAPI;
|
|
4
5
|
export declare class MidnightConnector implements IConnector<MidnightApi>, IInjectedConnector<MidnightApi> {
|
|
5
6
|
private provider;
|
|
6
7
|
private static INSTANCE;
|
|
8
|
+
private static networkId;
|
|
7
9
|
static getWalletOptions(): ConnectionOption<MidnightApi>[];
|
|
8
10
|
static instance(): MidnightConnector;
|
|
11
|
+
setNetworkId: (networkId: string) => void;
|
|
9
12
|
getOrThrowProvider: () => MidnightProvider;
|
|
10
13
|
getProvider: () => undefined | MidnightProvider;
|
|
11
14
|
isConnected(): boolean;
|
|
@@ -19,7 +22,7 @@ export declare class MidnightProvider implements IProvider<MidnightApi> {
|
|
|
19
22
|
constructor(conn: ActiveConnection<MidnightApi>, address: MidnightAddress);
|
|
20
23
|
static init: (conn: ActiveConnection<MidnightApi>) => Promise<MidnightProvider>;
|
|
21
24
|
getConnection(): ActiveConnection<MidnightApi>;
|
|
22
|
-
signMessage: (message: string) => Promise<UserSignature>;
|
|
25
|
+
signMessage: (message: string, keyType?: "unshielded") => Promise<UserSignature>;
|
|
23
26
|
getAddress(): AddressAndType;
|
|
24
27
|
static fetchAddress: (conn: ActiveConnection<MidnightApi>) => Promise<string>;
|
|
25
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"midnight.d.ts","sourceRoot":"","sources":["../../../../src/wallets/src/midnight/midnight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,gBAAgB,EAEtB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"midnight.d.ts","sourceRoot":"","sources":["../../../../src/wallets/src/midnight/midnight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,KAAK,EACV,YAAY,EAGb,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,gBAAgB,EAEtB,MAAM,iBAAiB,CAAC;AAGzB,MAAM,MAAM,WAAW,GAAG,YAAY,CAAC;AAMvC,qBAAa,iBACX,YAAW,UAAU,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC,WAAW,CAAC;IACnE,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4C;IACnE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAsB;IAE9C,MAAM,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,WAAW,CAAC,EAAE;IAqB1D,MAAM,CAAC,QAAQ,IAAI,iBAAiB;IAQpC,YAAY,GAAI,WAAW,MAAM,KAAG,IAAI,CAEtC;IAEF,kBAAkB,QAAO,gBAAgB,CAKvC;IAEF,WAAW,QAAO,SAAS,GAAG,gBAAgB,CAE5C;IAEF,WAAW,IAAI,OAAO;IAItB,aAAa,QAAa,OAAO,CAAC,gBAAgB,CAAC,CAUjD;IAEF,YAAY,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,gBAAgB,CAAC,CAW7D;IAED,eAAe,GAAU,MAAM,gBAAgB,CAAC,WAAW,CAAC,KAAG,OAAO,CAAC,gBAAgB,CAAC,CAMvF;CAEF;AAGD,qBAAa,gBAAiB,YAAW,SAAS,CAAC,WAAW,CAAC;IAE3D,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,QAAQ,CAAC,OAAO,EAAE,eAAe;gBADhB,IAAI,EAAE,gBAAgB,CAAC,WAAW,CAAC,EAC3C,OAAO,EAAE,eAAe;IAGnC,MAAM,CAAC,IAAI,GACT,MAAM,gBAAgB,CAAC,WAAW,CAAC,KAClC,OAAO,CAAC,gBAAgB,CAAC,CAO1B;IAEF,aAAa,IAAI,gBAAgB,CAAC,WAAW,CAAC;IAI9C,WAAW,GACT,SAAS,MAAM,EACf,UAAS,YAA2B,KACnC,OAAO,CAAC,aAAa,CAAC,CAMvB;IAEF,UAAU,IAAI,cAAc;IAO5B,MAAM,CAAC,YAAY,GAAU,MAAM,gBAAgB,CAAC,WAAW,CAAC,KAAG,OAAO,CAAC,MAAM,CAAC,CAMhF;CACH"}
|
|
@@ -1,25 +1,32 @@
|
|
|
1
1
|
import { AddressType } from "../../../utils/src/mod.js";
|
|
2
|
+
import semver from "semver";
|
|
2
3
|
import { optionToActive, } from "../IProvider.js";
|
|
3
4
|
import { getWindow } from "../windows.js";
|
|
5
|
+
const COMPATIBLE_CONNECTOR_API_VERSION = ">=1.0.0";
|
|
6
|
+
const DEFAULT_NETWORK_ID = "undeployed";
|
|
4
7
|
// TODO Implement this class
|
|
5
8
|
export class MidnightConnector {
|
|
6
9
|
provider;
|
|
7
10
|
static INSTANCE = undefined;
|
|
11
|
+
static networkId = DEFAULT_NETWORK_ID;
|
|
8
12
|
static getWalletOptions() {
|
|
9
|
-
const midnightApi = getWindow()
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
13
|
+
const midnightApi = getWindow()
|
|
14
|
+
?.midnight ?? {};
|
|
15
|
+
const options = Object.entries(midnightApi).reduce((options, [key, api]) => {
|
|
16
|
+
if (!isInitialApi(api))
|
|
17
|
+
return options;
|
|
18
|
+
if (!isCompatibleApiVersion(api.apiVersion))
|
|
19
|
+
return options;
|
|
20
|
+
const name = api.rdns?.trim() || key;
|
|
21
|
+
const displayName = api.name?.trim() || name;
|
|
22
|
+
options.push({
|
|
23
|
+
metadata: {
|
|
24
|
+
name,
|
|
25
|
+
displayName,
|
|
26
|
+
icon: api.icon,
|
|
27
|
+
},
|
|
28
|
+
api: () => connectWithNetwork(api, MidnightConnector.networkId),
|
|
29
|
+
});
|
|
23
30
|
return options;
|
|
24
31
|
}, []);
|
|
25
32
|
return options;
|
|
@@ -31,6 +38,9 @@ export class MidnightConnector {
|
|
|
31
38
|
}
|
|
32
39
|
return MidnightConnector.INSTANCE;
|
|
33
40
|
}
|
|
41
|
+
setNetworkId = (networkId) => {
|
|
42
|
+
MidnightConnector.networkId = networkId || DEFAULT_NETWORK_ID;
|
|
43
|
+
};
|
|
34
44
|
getOrThrowProvider = () => {
|
|
35
45
|
if (this.provider == null) {
|
|
36
46
|
throw new Error(`MidnightConnector provider isn't initialized yet`);
|
|
@@ -89,9 +99,12 @@ export class MidnightProvider {
|
|
|
89
99
|
getConnection() {
|
|
90
100
|
return this.conn;
|
|
91
101
|
}
|
|
92
|
-
signMessage = async (message) => {
|
|
93
|
-
|
|
94
|
-
|
|
102
|
+
signMessage = async (message, keyType = "unshielded") => {
|
|
103
|
+
const signature = (await this.conn.api.signData(message, {
|
|
104
|
+
encoding: "text",
|
|
105
|
+
keyType,
|
|
106
|
+
}));
|
|
107
|
+
return signature.signature;
|
|
95
108
|
};
|
|
96
109
|
getAddress() {
|
|
97
110
|
return {
|
|
@@ -100,13 +113,22 @@ export class MidnightProvider {
|
|
|
100
113
|
};
|
|
101
114
|
}
|
|
102
115
|
static fetchAddress = async (conn) => {
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
// encryptionPublicKey : "mn_shield-epk_undeployed1qvqx2dn29ukvgw8p37m0n3a8hhtae93snaqfvg7uy04yam00vjmrkcqtdla9r"
|
|
109
|
-
// encryptionPublicKeyLegacy : "030065366a2f2cc438e18fb6f9c7a7bdd7dc96309f409623dc23ea4eedef64b63b60"
|
|
110
|
-
return state.address;
|
|
116
|
+
const addresses = await conn.api.getShieldedAddresses();
|
|
117
|
+
if (!addresses?.shieldedAddress) {
|
|
118
|
+
throw new Error("Midnight wallet did not return a shielded address");
|
|
119
|
+
}
|
|
120
|
+
return addresses.shieldedAddress;
|
|
111
121
|
};
|
|
112
122
|
}
|
|
123
|
+
const isInitialApi = (api) => {
|
|
124
|
+
return (!!api &&
|
|
125
|
+
typeof api.connect === "function" &&
|
|
126
|
+
typeof api.apiVersion === "string");
|
|
127
|
+
};
|
|
128
|
+
const isCompatibleApiVersion = (apiVersion) => {
|
|
129
|
+
return semver.satisfies(apiVersion, COMPATIBLE_CONNECTOR_API_VERSION, { includePrerelease: true });
|
|
130
|
+
};
|
|
131
|
+
const connectWithNetwork = async (api, networkId) => {
|
|
132
|
+
const connect = api.connect.bind(api);
|
|
133
|
+
return await connect(networkId);
|
|
134
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../../../src/wallets/src/midnight/wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,KAAK,YAAY,EAAmB,MAAM,oBAAoB,CAAC;AAGxE,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAUzE;AAED,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,GAC3C,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../../../src/wallets/src/midnight/wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,KAAK,YAAY,EAAmB,MAAM,oBAAoB,CAAC;AAGxE,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAUzE;AAED,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,GAC3C,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAe7D"}
|
|
@@ -11,7 +11,9 @@ export async function checkMidnightWalletStatus() {
|
|
|
11
11
|
return { success: true, result: "OK" };
|
|
12
12
|
}
|
|
13
13
|
export async function midnightLoginWrapper(loginInfo) {
|
|
14
|
-
const
|
|
14
|
+
const connector = MidnightConnector.instance();
|
|
15
|
+
connector.setNetworkId(loginInfo.networkId ?? "undeployed");
|
|
16
|
+
const loginResult = await connectInjected("midnightLoginWrapper", loginInfo, connector);
|
|
15
17
|
if (loginResult.success === false) {
|
|
16
18
|
return loginResult;
|
|
17
19
|
}
|
|
@@ -41,7 +41,9 @@ export type LoginInfoMap = {
|
|
|
41
41
|
preferBatchedMode: boolean;
|
|
42
42
|
seed: string;
|
|
43
43
|
};
|
|
44
|
-
[WalletMode.Midnight]: BaseLoginInfo<MidnightApi
|
|
44
|
+
[WalletMode.Midnight]: BaseLoginInfo<MidnightApi> & {
|
|
45
|
+
networkId?: string;
|
|
46
|
+
};
|
|
45
47
|
};
|
|
46
48
|
type ToUnion<T> = {
|
|
47
49
|
[K in keyof T]: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-modes.d.ts","sourceRoot":"","sources":["../../../src/wallets/src/wallet-modes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,EACV,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAEL,KAAK,mBAAmB,EACxB,UAAU,EACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,MAAM,aAAa,CAAC,GAAG,IAAI;IAC/B,UAAU,CAAC,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC;CACvC,CAAC;AACF,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG;QAChD,yFAAyF;QACzF,iBAAiB,EAAE,OAAO,CAAC;QAC3B;;;;;;WAMG;QACH,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,KAAK,CAAC,EAAE,KAAK,CAAC;KACf,CAAC;IACF,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QACtB,UAAU,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACxC,iBAAiB,EAAE,OAAO,CAAC;KAC5B,CAAC;IACF,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QACpB,UAAU,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACzC,iBAAiB,EAAE,OAAO,CAAC;QAC3B,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"wallet-modes.d.ts","sourceRoot":"","sources":["../../../src/wallets/src/wallet-modes.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@paimaexample/wallets",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.130",
|
|
4
4
|
"description": "Your package.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
"@coderspirit/nominal": "^4.1.1",
|
|
26
26
|
"@foxglove/crc": "^1.0.1",
|
|
27
27
|
"@metamask/providers": "^22.1.0",
|
|
28
|
+
"@midnight-ntwrk/dapp-connector-api": "^4.0.0-beta.2",
|
|
28
29
|
"@perawallet/connect": "^1.4.2",
|
|
29
30
|
"@polkadot/extension-dapp": "^0.58.10",
|
|
30
31
|
"@polkadot/extension-inject": "^0.58.10",
|
|
@@ -48,6 +49,7 @@
|
|
|
48
49
|
"mina-signer": "^3.0.7",
|
|
49
50
|
"mqtt": "^5.14.0",
|
|
50
51
|
"mqtt-pattern": "^2.1.0",
|
|
52
|
+
"semver": "^7.7.3",
|
|
51
53
|
"viem": "2.37.3",
|
|
52
54
|
"web3": "^4.16.0",
|
|
53
55
|
"web3-utils": "^4.3.3"
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { type MidnightAddress } from "../../../utils/src/mod.js";
|
|
2
|
+
import type { ConnectedAPI } from "@midnight-ntwrk/dapp-connector-api";
|
|
2
3
|
import { type IInjectedConnector, type ActiveConnection, type IProvider, type AddressAndType, type UserSignature, type IConnector, type ConnectionOption } from "../IProvider.js";
|
|
3
|
-
export type MidnightApi =
|
|
4
|
+
export type MidnightApi = ConnectedAPI;
|
|
4
5
|
export declare class MidnightConnector implements IConnector<MidnightApi>, IInjectedConnector<MidnightApi> {
|
|
5
6
|
private provider;
|
|
6
7
|
private static INSTANCE;
|
|
8
|
+
private static networkId;
|
|
7
9
|
static getWalletOptions(): ConnectionOption<MidnightApi>[];
|
|
8
10
|
static instance(): MidnightConnector;
|
|
11
|
+
setNetworkId: (networkId: string) => void;
|
|
9
12
|
getOrThrowProvider: () => MidnightProvider;
|
|
10
13
|
getProvider: () => undefined | MidnightProvider;
|
|
11
14
|
isConnected(): boolean;
|
|
@@ -19,7 +22,7 @@ export declare class MidnightProvider implements IProvider<MidnightApi> {
|
|
|
19
22
|
constructor(conn: ActiveConnection<MidnightApi>, address: MidnightAddress);
|
|
20
23
|
static init: (conn: ActiveConnection<MidnightApi>) => Promise<MidnightProvider>;
|
|
21
24
|
getConnection(): ActiveConnection<MidnightApi>;
|
|
22
|
-
signMessage: (message: string) => Promise<UserSignature>;
|
|
25
|
+
signMessage: (message: string, keyType?: "unshielded") => Promise<UserSignature>;
|
|
23
26
|
getAddress(): AddressAndType;
|
|
24
27
|
static fetchAddress: (conn: ActiveConnection<MidnightApi>) => Promise<string>;
|
|
25
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"midnight.d.ts","sourceRoot":"","sources":["../../../../src/wallets/src/midnight/midnight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,gBAAgB,EAEtB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"midnight.d.ts","sourceRoot":"","sources":["../../../../src/wallets/src/midnight/midnight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,KAAK,EACV,YAAY,EAGb,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,gBAAgB,EAEtB,MAAM,iBAAiB,CAAC;AAGzB,MAAM,MAAM,WAAW,GAAG,YAAY,CAAC;AAMvC,qBAAa,iBACX,YAAW,UAAU,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC,WAAW,CAAC;IACnE,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4C;IACnE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAsB;IAE9C,MAAM,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,WAAW,CAAC,EAAE;IAqB1D,MAAM,CAAC,QAAQ,IAAI,iBAAiB;IAQpC,YAAY,GAAI,WAAW,MAAM,KAAG,IAAI,CAEtC;IAEF,kBAAkB,QAAO,gBAAgB,CAKvC;IAEF,WAAW,QAAO,SAAS,GAAG,gBAAgB,CAE5C;IAEF,WAAW,IAAI,OAAO;IAItB,aAAa,QAAa,OAAO,CAAC,gBAAgB,CAAC,CAUjD;IAEF,YAAY,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,gBAAgB,CAAC,CAW7D;IAED,eAAe,GAAU,MAAM,gBAAgB,CAAC,WAAW,CAAC,KAAG,OAAO,CAAC,gBAAgB,CAAC,CAMvF;CAEF;AAGD,qBAAa,gBAAiB,YAAW,SAAS,CAAC,WAAW,CAAC;IAE3D,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,QAAQ,CAAC,OAAO,EAAE,eAAe;gBADhB,IAAI,EAAE,gBAAgB,CAAC,WAAW,CAAC,EAC3C,OAAO,EAAE,eAAe;IAGnC,MAAM,CAAC,IAAI,GACT,MAAM,gBAAgB,CAAC,WAAW,CAAC,KAClC,OAAO,CAAC,gBAAgB,CAAC,CAO1B;IAEF,aAAa,IAAI,gBAAgB,CAAC,WAAW,CAAC;IAI9C,WAAW,GACT,SAAS,MAAM,EACf,UAAS,YAA2B,KACnC,OAAO,CAAC,aAAa,CAAC,CAMvB;IAEF,UAAU,IAAI,cAAc;IAO5B,MAAM,CAAC,YAAY,GAAU,MAAM,gBAAgB,CAAC,WAAW,CAAC,KAAG,OAAO,CAAC,MAAM,CAAC,CAMhF;CACH"}
|
|
@@ -1,28 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.MidnightProvider = exports.MidnightConnector = void 0;
|
|
4
7
|
const mod_js_1 = require("../../../utils/src/mod.js");
|
|
8
|
+
const semver_1 = __importDefault(require("semver"));
|
|
5
9
|
const IProvider_js_1 = require("../IProvider.js");
|
|
6
10
|
const windows_js_1 = require("../windows.js");
|
|
11
|
+
const COMPATIBLE_CONNECTOR_API_VERSION = ">=1.0.0";
|
|
12
|
+
const DEFAULT_NETWORK_ID = "undeployed";
|
|
7
13
|
// TODO Implement this class
|
|
8
14
|
class MidnightConnector {
|
|
9
15
|
provider;
|
|
10
16
|
static INSTANCE = undefined;
|
|
17
|
+
static networkId = DEFAULT_NETWORK_ID;
|
|
11
18
|
static getWalletOptions() {
|
|
12
|
-
const midnightApi = (0, windows_js_1.getWindow)()
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
const midnightApi = (0, windows_js_1.getWindow)()
|
|
20
|
+
?.midnight ?? {};
|
|
21
|
+
const options = Object.entries(midnightApi).reduce((options, [key, api]) => {
|
|
22
|
+
if (!isInitialApi(api))
|
|
23
|
+
return options;
|
|
24
|
+
if (!isCompatibleApiVersion(api.apiVersion))
|
|
25
|
+
return options;
|
|
26
|
+
const name = api.rdns?.trim() || key;
|
|
27
|
+
const displayName = api.name?.trim() || name;
|
|
28
|
+
options.push({
|
|
29
|
+
metadata: {
|
|
30
|
+
name,
|
|
31
|
+
displayName,
|
|
32
|
+
icon: api.icon,
|
|
33
|
+
},
|
|
34
|
+
api: () => connectWithNetwork(api, MidnightConnector.networkId),
|
|
35
|
+
});
|
|
26
36
|
return options;
|
|
27
37
|
}, []);
|
|
28
38
|
return options;
|
|
@@ -34,6 +44,9 @@ class MidnightConnector {
|
|
|
34
44
|
}
|
|
35
45
|
return MidnightConnector.INSTANCE;
|
|
36
46
|
}
|
|
47
|
+
setNetworkId = (networkId) => {
|
|
48
|
+
MidnightConnector.networkId = networkId || DEFAULT_NETWORK_ID;
|
|
49
|
+
};
|
|
37
50
|
getOrThrowProvider = () => {
|
|
38
51
|
if (this.provider == null) {
|
|
39
52
|
throw new Error(`MidnightConnector provider isn't initialized yet`);
|
|
@@ -93,9 +106,12 @@ class MidnightProvider {
|
|
|
93
106
|
getConnection() {
|
|
94
107
|
return this.conn;
|
|
95
108
|
}
|
|
96
|
-
signMessage = async (message) => {
|
|
97
|
-
|
|
98
|
-
|
|
109
|
+
signMessage = async (message, keyType = "unshielded") => {
|
|
110
|
+
const signature = (await this.conn.api.signData(message, {
|
|
111
|
+
encoding: "text",
|
|
112
|
+
keyType,
|
|
113
|
+
}));
|
|
114
|
+
return signature.signature;
|
|
99
115
|
};
|
|
100
116
|
getAddress() {
|
|
101
117
|
return {
|
|
@@ -104,14 +120,23 @@ class MidnightProvider {
|
|
|
104
120
|
};
|
|
105
121
|
}
|
|
106
122
|
static fetchAddress = async (conn) => {
|
|
107
|
-
const
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
// encryptionPublicKey : "mn_shield-epk_undeployed1qvqx2dn29ukvgw8p37m0n3a8hhtae93snaqfvg7uy04yam00vjmrkcqtdla9r"
|
|
113
|
-
// encryptionPublicKeyLegacy : "030065366a2f2cc438e18fb6f9c7a7bdd7dc96309f409623dc23ea4eedef64b63b60"
|
|
114
|
-
return state.address;
|
|
123
|
+
const addresses = await conn.api.getShieldedAddresses();
|
|
124
|
+
if (!addresses?.shieldedAddress) {
|
|
125
|
+
throw new Error("Midnight wallet did not return a shielded address");
|
|
126
|
+
}
|
|
127
|
+
return addresses.shieldedAddress;
|
|
115
128
|
};
|
|
116
129
|
}
|
|
117
130
|
exports.MidnightProvider = MidnightProvider;
|
|
131
|
+
const isInitialApi = (api) => {
|
|
132
|
+
return (!!api &&
|
|
133
|
+
typeof api.connect === "function" &&
|
|
134
|
+
typeof api.apiVersion === "string");
|
|
135
|
+
};
|
|
136
|
+
const isCompatibleApiVersion = (apiVersion) => {
|
|
137
|
+
return semver_1.default.satisfies(apiVersion, COMPATIBLE_CONNECTOR_API_VERSION, { includePrerelease: true });
|
|
138
|
+
};
|
|
139
|
+
const connectWithNetwork = async (api, networkId) => {
|
|
140
|
+
const connect = api.connect.bind(api);
|
|
141
|
+
return await connect(networkId);
|
|
142
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../../../src/wallets/src/midnight/wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,KAAK,YAAY,EAAmB,MAAM,oBAAoB,CAAC;AAGxE,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAUzE;AAED,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,GAC3C,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../../../src/wallets/src/midnight/wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,KAAK,YAAY,EAAmB,MAAM,oBAAoB,CAAC;AAGxE,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAUzE;AAED,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,GAC3C,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAe7D"}
|
|
@@ -15,7 +15,9 @@ async function checkMidnightWalletStatus() {
|
|
|
15
15
|
return { success: true, result: "OK" };
|
|
16
16
|
}
|
|
17
17
|
async function midnightLoginWrapper(loginInfo) {
|
|
18
|
-
const
|
|
18
|
+
const connector = midnight_js_1.MidnightConnector.instance();
|
|
19
|
+
connector.setNetworkId(loginInfo.networkId ?? "undeployed");
|
|
20
|
+
const loginResult = await (0, wallet_modes_js_1.connectInjected)("midnightLoginWrapper", loginInfo, connector);
|
|
19
21
|
if (loginResult.success === false) {
|
|
20
22
|
return loginResult;
|
|
21
23
|
}
|
|
@@ -41,7 +41,9 @@ export type LoginInfoMap = {
|
|
|
41
41
|
preferBatchedMode: boolean;
|
|
42
42
|
seed: string;
|
|
43
43
|
};
|
|
44
|
-
[WalletMode.Midnight]: BaseLoginInfo<MidnightApi
|
|
44
|
+
[WalletMode.Midnight]: BaseLoginInfo<MidnightApi> & {
|
|
45
|
+
networkId?: string;
|
|
46
|
+
};
|
|
45
47
|
};
|
|
46
48
|
type ToUnion<T> = {
|
|
47
49
|
[K in keyof T]: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-modes.d.ts","sourceRoot":"","sources":["../../../src/wallets/src/wallet-modes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,EACV,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAEL,KAAK,mBAAmB,EACxB,UAAU,EACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,MAAM,aAAa,CAAC,GAAG,IAAI;IAC/B,UAAU,CAAC,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC;CACvC,CAAC;AACF,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG;QAChD,yFAAyF;QACzF,iBAAiB,EAAE,OAAO,CAAC;QAC3B;;;;;;WAMG;QACH,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,KAAK,CAAC,EAAE,KAAK,CAAC;KACf,CAAC;IACF,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QACtB,UAAU,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACxC,iBAAiB,EAAE,OAAO,CAAC;KAC5B,CAAC;IACF,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QACpB,UAAU,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACzC,iBAAiB,EAAE,OAAO,CAAC;QAC3B,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"wallet-modes.d.ts","sourceRoot":"","sources":["../../../src/wallets/src/wallet-modes.ts"],"names":[],"mappings":"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"}
|