@wizardconnect/core 0.1.0
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/dist/connection-manager.d.ts +45 -0
- package/dist/connection-manager.js +157 -0
- package/dist/connection-manager.js.map +1 -0
- package/dist/dapp-relay.d.ts +27 -0
- package/dist/dapp-relay.js +129 -0
- package/dist/dapp-relay.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/key-exchange.d.ts +35 -0
- package/dist/key-exchange.js +154 -0
- package/dist/key-exchange.js.map +1 -0
- package/dist/log.d.ts +14 -0
- package/dist/log.js +23 -0
- package/dist/log.js.map +1 -0
- package/dist/message-queue.d.ts +15 -0
- package/dist/message-queue.js +61 -0
- package/dist/message-queue.js.map +1 -0
- package/dist/primitives.d.ts +5 -0
- package/dist/primitives.js +18 -0
- package/dist/primitives.js.map +1 -0
- package/dist/protocols/base.d.ts +37 -0
- package/dist/protocols/base.js +46 -0
- package/dist/protocols/base.js.map +1 -0
- package/dist/protocols/hdwalletv1.d.ts +56 -0
- package/dist/protocols/hdwalletv1.js +80 -0
- package/dist/protocols/hdwalletv1.js.map +1 -0
- package/dist/relay-client.d.ts +38 -0
- package/dist/relay-client.js +323 -0
- package/dist/relay-client.js.map +1 -0
- package/dist/relay-handler.d.ts +33 -0
- package/dist/relay-handler.js +125 -0
- package/dist/relay-handler.js.map +1 -0
- package/dist/utilnostr.d.ts +4 -0
- package/dist/utilnostr.js +16 -0
- package/dist/utilnostr.js.map +1 -0
- package/dist/wallet-relay.d.ts +20 -0
- package/dist/wallet-relay.js +71 -0
- package/dist/wallet-relay.js.map +1 -0
- package/package.json +34 -0
package/dist/log.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAN,IAAY,KAIX;AAJD,WAAY,KAAK;IACf,wBAAe,CAAA;IACf,4BAAmB,CAAA;IACnB,sBAAa,CAAA;AACf,CAAC,EAJW,KAAK,KAAL,KAAK,QAIhB;AAID,MAAM,UAAU,KAAK,CAAC,KAAe,EAAE,GAAG,IAAe;IACvD,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,KAAe,EAAE,GAAG,IAAe;IACtD,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,KAAe,EAAE,GAAG,IAAe;IACtD,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,KAAe,EAAE,GAAG,IAAe;IACvD,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ProtocolMessage } from "./protocols/hdwalletv1.js";
|
|
2
|
+
export declare class MessageQueue {
|
|
3
|
+
private queue;
|
|
4
|
+
private isReady;
|
|
5
|
+
private logActivity;
|
|
6
|
+
constructor(options?: { logActivity?: boolean });
|
|
7
|
+
getReady(): boolean;
|
|
8
|
+
getQueueLength(): number;
|
|
9
|
+
enqueue(message: ProtocolMessage): Promise<void>;
|
|
10
|
+
setReady(
|
|
11
|
+
publishFn: (_message: ProtocolMessage) => Promise<void>,
|
|
12
|
+
): Promise<void>;
|
|
13
|
+
setNotReady(errorMessage?: string): void;
|
|
14
|
+
clear(): void;
|
|
15
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { debug, Scope } from "./log.js";
|
|
2
|
+
export class MessageQueue {
|
|
3
|
+
queue = [];
|
|
4
|
+
isReady = false;
|
|
5
|
+
logActivity = false;
|
|
6
|
+
constructor(options) {
|
|
7
|
+
this.logActivity = options?.logActivity ?? false;
|
|
8
|
+
}
|
|
9
|
+
getReady() {
|
|
10
|
+
return this.isReady;
|
|
11
|
+
}
|
|
12
|
+
getQueueLength() {
|
|
13
|
+
return this.queue.length;
|
|
14
|
+
}
|
|
15
|
+
enqueue(message) {
|
|
16
|
+
if (this.isReady) {
|
|
17
|
+
return Promise.resolve();
|
|
18
|
+
}
|
|
19
|
+
if (this.logActivity) {
|
|
20
|
+
debug(
|
|
21
|
+
Scope.Relay,
|
|
22
|
+
`net: Relays not ready, queuing message ${message.action}`,
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
this.queue.push({ message, resolve, reject });
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
async setReady(publishFn) {
|
|
30
|
+
this.isReady = true;
|
|
31
|
+
const queuedMessages = [...this.queue];
|
|
32
|
+
this.queue = [];
|
|
33
|
+
if (queuedMessages.length > 0 && this.logActivity) {
|
|
34
|
+
debug(Scope.Relay, `Processing ${queuedMessages.length} queued messages`);
|
|
35
|
+
}
|
|
36
|
+
for (const queued of queuedMessages) {
|
|
37
|
+
try {
|
|
38
|
+
await publishFn(queued.message);
|
|
39
|
+
queued.resolve();
|
|
40
|
+
} catch (error) {
|
|
41
|
+
queued.reject(error);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
setNotReady(errorMessage = "Connection closed before message could be sent") {
|
|
46
|
+
this.isReady = false;
|
|
47
|
+
const queuedMessages = [...this.queue];
|
|
48
|
+
this.queue = [];
|
|
49
|
+
for (const queued of queuedMessages) {
|
|
50
|
+
queued.reject(new Error(errorMessage));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
clear() {
|
|
54
|
+
const queuedMessages = [...this.queue];
|
|
55
|
+
this.queue = [];
|
|
56
|
+
for (const queued of queuedMessages) {
|
|
57
|
+
queued.reject(new Error("Queue cleared"));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=message-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-queue.js","sourceRoot":"","sources":["../src/message-queue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAQxC,MAAM,OAAO,YAAY;IACf,KAAK,GAAoB,EAAE,CAAC;IAC5B,OAAO,GAAY,KAAK,CAAC;IACzB,WAAW,GAAY,KAAK,CAAC;IAErC,YAAY,OAAmC;QAC7C,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,KAAK,CAAC;IACnD,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,OAAO,CAAC,OAAwB;QAC9B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,KAAK,CACH,KAAK,CAAC,KAAK,EACX,0CAA0C,OAAO,CAAC,MAAM,EAAE,CAC3D,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,SAAuD;QAEvD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAEhB,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAClD,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,cAAc,cAAc,CAAC,MAAM,kBAAkB,CAAC,CAAC;QAC5E,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAChC,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,MAAM,CAAC,KAAc,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAED,WAAW,CACT,eAAuB,gDAAgD;QAEvE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QAErB,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAEhB,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,KAAK;QACH,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAEhB,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal primitives shim — replaces @riftenlabs/primitives.
|
|
3
|
+
*/
|
|
4
|
+
export const throwUnless = (x, what) => {
|
|
5
|
+
if (!x) {
|
|
6
|
+
throw Error(`Internal application error: ${what}`);
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
export function unwrap(value) {
|
|
10
|
+
if (typeof value === "string") {
|
|
11
|
+
throw new Error(`unwrap: ${value}`);
|
|
12
|
+
}
|
|
13
|
+
if (value instanceof Error) {
|
|
14
|
+
throw value;
|
|
15
|
+
}
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=primitives.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../src/primitives.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAU,EAAE,IAAY,EAAQ,EAAE;IAC5D,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,KAAK,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,UAAU,MAAM,CAAI,KAAyB;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,MAAM,KAAK,CAAC;IACd,CAAC;IACD,OAAO,KAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { RelayMsgAction, ProtocolMessage } from "./hdwalletv1.js";
|
|
2
|
+
export interface DappReadyMessage extends ProtocolMessage {
|
|
3
|
+
action: RelayMsgAction.DappReady;
|
|
4
|
+
supported_protocols: string[];
|
|
5
|
+
selected_protocol?: string;
|
|
6
|
+
wallet_discovered: boolean;
|
|
7
|
+
dapp_name?: string;
|
|
8
|
+
dapp_icon?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface WalletReadyMessage extends ProtocolMessage {
|
|
11
|
+
action: RelayMsgAction.WalletReady;
|
|
12
|
+
wallet_name: string;
|
|
13
|
+
wallet_icon: string;
|
|
14
|
+
dapp_discovered: boolean;
|
|
15
|
+
supported_protocols: string[];
|
|
16
|
+
session: Record<string, unknown>;
|
|
17
|
+
public_key: string;
|
|
18
|
+
secret: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function isDappReadyMessage(
|
|
21
|
+
msg: unknown,
|
|
22
|
+
): msg is DappReadyMessage;
|
|
23
|
+
export declare function isWalletReadyMessage(
|
|
24
|
+
msg: unknown,
|
|
25
|
+
): msg is WalletReadyMessage;
|
|
26
|
+
export declare enum DisconnectReason {
|
|
27
|
+
ProtocolMismatch = "protocol_mismatch",
|
|
28
|
+
UserDisconnect = "user_disconnect",
|
|
29
|
+
}
|
|
30
|
+
export interface DisconnectMessage extends ProtocolMessage {
|
|
31
|
+
action: RelayMsgAction.Disconnect;
|
|
32
|
+
reason: DisconnectReason;
|
|
33
|
+
message?: string;
|
|
34
|
+
}
|
|
35
|
+
export declare function isDisconnectMessage(
|
|
36
|
+
msg: unknown,
|
|
37
|
+
): msg is DisconnectMessage;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/// Base protocol — DappReadyMessage and WalletReadyMessage
|
|
2
|
+
///
|
|
3
|
+
/// These are protocol-agnostic handshake messages shared across all
|
|
4
|
+
/// application-level protocols (hdwalletv1, future hdwalletv2, etc.).
|
|
5
|
+
///
|
|
6
|
+
/// The wallet populates `session` for every protocol it supports, keyed by
|
|
7
|
+
/// protocol name. The dapp selects the first protocol from its own
|
|
8
|
+
/// `supported_protocols` list that is also present in the wallet's list,
|
|
9
|
+
/// then reads `session[selectedProtocol]` for protocol-specific data.
|
|
10
|
+
import { RelayMsgAction, isProtocolMessage } from "./hdwalletv1.js";
|
|
11
|
+
export function isDappReadyMessage(msg) {
|
|
12
|
+
return (
|
|
13
|
+
isProtocolMessage(msg) &&
|
|
14
|
+
msg.action === RelayMsgAction.DappReady &&
|
|
15
|
+
Array.isArray(msg.supported_protocols) &&
|
|
16
|
+
typeof msg.wallet_discovered === "boolean"
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
export function isWalletReadyMessage(msg) {
|
|
20
|
+
const m = msg;
|
|
21
|
+
return (
|
|
22
|
+
isProtocolMessage(msg) &&
|
|
23
|
+
msg.action === RelayMsgAction.WalletReady &&
|
|
24
|
+
typeof m.wallet_name === "string" &&
|
|
25
|
+
typeof m.wallet_icon === "string" &&
|
|
26
|
+
typeof m.dapp_discovered === "boolean" &&
|
|
27
|
+
Array.isArray(m.supported_protocols) &&
|
|
28
|
+
m.session !== null &&
|
|
29
|
+
typeof m.session === "object" &&
|
|
30
|
+
typeof m.public_key === "string" &&
|
|
31
|
+
typeof m.secret === "string"
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
export var DisconnectReason;
|
|
35
|
+
(function (DisconnectReason) {
|
|
36
|
+
DisconnectReason["ProtocolMismatch"] = "protocol_mismatch";
|
|
37
|
+
DisconnectReason["UserDisconnect"] = "user_disconnect";
|
|
38
|
+
})(DisconnectReason || (DisconnectReason = {}));
|
|
39
|
+
export function isDisconnectMessage(msg) {
|
|
40
|
+
return (
|
|
41
|
+
isProtocolMessage(msg) &&
|
|
42
|
+
msg.action === RelayMsgAction.Disconnect &&
|
|
43
|
+
typeof msg.reason === "string"
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/protocols/base.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,GAAG;AACH,oEAAoE;AACpE,sEAAsE;AACtE,GAAG;AACH,2EAA2E;AAC3E,mEAAmE;AACnE,yEAAyE;AACzE,sEAAsE;AAEtE,OAAO,EACL,cAAc,EAEd,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAkCzB,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC7C,OAAO,CACL,iBAAiB,CAAC,GAAG,CAAC;QACtB,GAAG,CAAC,MAAM,KAAK,cAAc,CAAC,SAAS;QACvC,KAAK,CAAC,OAAO,CAAE,GAAwB,CAAC,mBAAmB,CAAC;QAC5D,OAAQ,GAAwB,CAAC,iBAAiB,KAAK,SAAS,CACjE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAY;IAC/C,MAAM,CAAC,GAAG,GAAyB,CAAC;IACpC,OAAO,CACL,iBAAiB,CAAC,GAAG,CAAC;QACtB,GAAG,CAAC,MAAM,KAAK,cAAc,CAAC,WAAW;QACzC,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ;QACjC,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ;QACjC,OAAO,CAAC,CAAC,eAAe,KAAK,SAAS;QACtC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;QACpC,CAAC,CAAC,OAAO,KAAK,IAAI;QAClB,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;QAC7B,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ;QAChC,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAC7B,CAAC;AACJ,CAAC;AAED,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,0DAAsC,CAAA;IACtC,sDAAoC,CAAA;AACtC,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B;AAQD,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,OAAO,CACL,iBAAiB,CAAC,GAAG,CAAC;QACrB,GAAyB,CAAC,MAAM,KAAK,cAAc,CAAC,UAAU;QAC/D,OAAQ,GAAyB,CAAC,MAAM,KAAK,QAAQ,CACtD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { WcSignTransactionRequest } from "@bch-wc2/interfaces";
|
|
2
|
+
export declare const PROTOCOL_NAME: "hdwalletv1";
|
|
3
|
+
export declare enum RelayMsgAction {
|
|
4
|
+
DappReady = "dapp_ready",
|
|
5
|
+
WalletReady = "wallet_ready",
|
|
6
|
+
SignTransactionRequest = "sign_transaction_request",
|
|
7
|
+
SignTransactionResponse = "sign_transaction_response",
|
|
8
|
+
SignCancel = "sign_cancel",
|
|
9
|
+
Disconnect = "disconnect",
|
|
10
|
+
}
|
|
11
|
+
export interface ProtocolMessage {
|
|
12
|
+
action: RelayMsgAction;
|
|
13
|
+
time: number;
|
|
14
|
+
}
|
|
15
|
+
export type PathName = "receive" | "change" | "defi";
|
|
16
|
+
export interface PathXpub {
|
|
17
|
+
name: PathName;
|
|
18
|
+
xpub: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function isPathXpub(obj: any): obj is PathXpub;
|
|
21
|
+
/** Returns the numeric BIP44 child index for the given named path.
|
|
22
|
+
* Use only for internal HD derivation — not a protocol concern. */
|
|
23
|
+
export declare function childIndexOfPathName(name: PathName): number;
|
|
24
|
+
export interface Hdwalletv1Session {
|
|
25
|
+
paths: PathXpub[];
|
|
26
|
+
}
|
|
27
|
+
export declare function isHdwalletv1Session(
|
|
28
|
+
obj: unknown,
|
|
29
|
+
): obj is Hdwalletv1Session;
|
|
30
|
+
export interface ErrorMessage extends ProtocolMessage {
|
|
31
|
+
error: string;
|
|
32
|
+
}
|
|
33
|
+
export interface SignTransactionRequest extends ProtocolMessage {
|
|
34
|
+
action: RelayMsgAction.SignTransactionRequest;
|
|
35
|
+
transaction: WcSignTransactionRequest;
|
|
36
|
+
sequence: number;
|
|
37
|
+
}
|
|
38
|
+
export interface SignTransactionResponse extends ProtocolMessage {
|
|
39
|
+
action: RelayMsgAction.SignTransactionResponse;
|
|
40
|
+
sequence: number;
|
|
41
|
+
signedTransaction: string;
|
|
42
|
+
error?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface SignCancelMessage extends ProtocolMessage {
|
|
45
|
+
action: RelayMsgAction.SignCancel;
|
|
46
|
+
sequence: number;
|
|
47
|
+
reason?: string;
|
|
48
|
+
}
|
|
49
|
+
export declare function isProtocolMessage(
|
|
50
|
+
payload: any,
|
|
51
|
+
): payload is ProtocolMessage;
|
|
52
|
+
export declare function isErrorMessage(payload: any): payload is ErrorMessage;
|
|
53
|
+
export declare function isSignTransactionRequest(
|
|
54
|
+
msg: any,
|
|
55
|
+
): msg is SignTransactionRequest;
|
|
56
|
+
export declare function isSignCancelMessage(msg: any): msg is SignCancelMessage;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/// This is a protocol within the relayed messages (which is protocol agnostic).
|
|
2
|
+
/// Dapp <-> Wallet messages
|
|
3
|
+
export const PROTOCOL_NAME = "hdwalletv1";
|
|
4
|
+
/// What this message is about
|
|
5
|
+
export var RelayMsgAction;
|
|
6
|
+
(function (RelayMsgAction) {
|
|
7
|
+
/// Notification: Dapp has joined the session and is ready to receive relayed messages.
|
|
8
|
+
RelayMsgAction["DappReady"] = "dapp_ready";
|
|
9
|
+
/// Notification: Wallet has joined the session and is ready to send relayed messages.
|
|
10
|
+
/// Also carries key exchange data (public_key, secret) embedded in the message.
|
|
11
|
+
RelayMsgAction["WalletReady"] = "wallet_ready";
|
|
12
|
+
/// Request: The dapp wants wallet to sign a transaction.
|
|
13
|
+
RelayMsgAction["SignTransactionRequest"] = "sign_transaction_request";
|
|
14
|
+
RelayMsgAction["SignTransactionResponse"] = "sign_transaction_response";
|
|
15
|
+
/// Dapp-only: cancels an in-flight sign_transaction_request.
|
|
16
|
+
RelayMsgAction["SignCancel"] = "sign_cancel";
|
|
17
|
+
/// Courtesy notification: one side is closing the connection.
|
|
18
|
+
RelayMsgAction["Disconnect"] = "disconnect";
|
|
19
|
+
})(RelayMsgAction || (RelayMsgAction = {}));
|
|
20
|
+
export function isPathXpub(obj) {
|
|
21
|
+
return (
|
|
22
|
+
obj &&
|
|
23
|
+
typeof obj === "object" &&
|
|
24
|
+
typeof obj.name === "string" &&
|
|
25
|
+
typeof obj.xpub === "string"
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
/** Returns the numeric BIP44 child index for the given named path.
|
|
29
|
+
* Use only for internal HD derivation — not a protocol concern. */
|
|
30
|
+
export function childIndexOfPathName(name) {
|
|
31
|
+
switch (name) {
|
|
32
|
+
case "receive":
|
|
33
|
+
return 0;
|
|
34
|
+
case "change":
|
|
35
|
+
return 1;
|
|
36
|
+
case "defi":
|
|
37
|
+
return 7;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export function isHdwalletv1Session(obj) {
|
|
41
|
+
return (
|
|
42
|
+
obj !== null &&
|
|
43
|
+
typeof obj === "object" &&
|
|
44
|
+
Array.isArray(obj.paths) &&
|
|
45
|
+
obj.paths.every((p) => isPathXpub(p))
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
// Type guard functions
|
|
49
|
+
export function isProtocolMessage(payload) {
|
|
50
|
+
return (
|
|
51
|
+
payload &&
|
|
52
|
+
typeof payload === "object" &&
|
|
53
|
+
typeof payload.action === "string" &&
|
|
54
|
+
typeof payload.time === "number"
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
export function isErrorMessage(payload) {
|
|
58
|
+
return (
|
|
59
|
+
payload && typeof payload === "object" && typeof payload.error === "string"
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
export function isSignTransactionRequest(msg) {
|
|
63
|
+
return (
|
|
64
|
+
msg &&
|
|
65
|
+
typeof msg === "object" &&
|
|
66
|
+
msg.action === RelayMsgAction.SignTransactionRequest &&
|
|
67
|
+
msg.transaction &&
|
|
68
|
+
typeof msg.transaction === "object" &&
|
|
69
|
+
typeof msg.sequence === "number"
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
export function isSignCancelMessage(msg) {
|
|
73
|
+
return (
|
|
74
|
+
msg &&
|
|
75
|
+
typeof msg === "object" &&
|
|
76
|
+
msg.action === RelayMsgAction.SignCancel &&
|
|
77
|
+
typeof msg.sequence === "number"
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=hdwalletv1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hdwalletv1.js","sourceRoot":"","sources":["../../src/protocols/hdwalletv1.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAIhF,4BAA4B;AAE5B,MAAM,CAAC,MAAM,aAAa,GAAG,YAAqB,CAAC;AAEnD,8BAA8B;AAE9B,MAAM,CAAN,IAAY,cAaX;AAbD,WAAY,cAAc;IACxB,uFAAuF;IACvF,0CAAwB,CAAA;IACxB,sFAAsF;IACtF,gFAAgF;IAChF,8CAA4B,CAAA;IAC5B,yDAAyD;IACzD,qEAAmD,CAAA;IACnD,uEAAqD,CAAA;IACrD,6DAA6D;IAC7D,4CAA0B,CAAA;IAC1B,8DAA8D;IAC9D,2CAAyB,CAAA;AAC3B,CAAC,EAbW,cAAc,KAAd,cAAc,QAazB;AAcD,MAAM,UAAU,UAAU,CAAC,GAAQ;IACjC,OAAO,CACL,GAAG;QACH,OAAO,GAAG,KAAK,QAAQ;QACvB,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAC7B,CAAC;AACJ,CAAC;AAED;oEACoE;AACpE,MAAM,UAAU,oBAAoB,CAAC,IAAc;IACjD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC;QACzB,KAAK,QAAQ,CAAC,CAAE,OAAO,CAAC,CAAC;QACzB,KAAK,MAAM,CAAC,CAAI,OAAO,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAsCD,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,OAAO,CACL,GAAG,KAAK,IAAI;QACZ,OAAO,GAAG,KAAK,QAAQ;QACvB,KAAK,CAAC,OAAO,CAAE,GAAyB,CAAC,KAAK,CAAC;QAC9C,GAAyB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAC7D,CAAC;AACJ,CAAC;AAyBD,uBAAuB;AAEvB,MAAM,UAAU,iBAAiB,CAAC,OAAY;IAC5C,OAAO,CACL,OAAO;QACP,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ;QAClC,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CACjC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAY;IACzC,OAAO,CACL,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAC5E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,GAAQ;IAER,OAAO,CACL,GAAG;QACH,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,CAAC,MAAM,KAAK,cAAc,CAAC,sBAAsB;QACpD,GAAG,CAAC,WAAW;QACf,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ;QACnC,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,CACjC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAQ;IAC1C,OAAO,CACL,GAAG;QACH,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,CAAC,MAAM,KAAK,cAAc,CAAC,UAAU;QACxC,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,CACjC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { EventEmitter } from "eventemitter3";
|
|
2
|
+
import { ProtocolMessage } from "./protocols/hdwalletv1.js";
|
|
3
|
+
export interface RelayClientConfig {
|
|
4
|
+
explicitRelayUrls: string[];
|
|
5
|
+
signerPrivateKey: Uint8Array;
|
|
6
|
+
pairedPublicKey?: Uint8Array;
|
|
7
|
+
logNetworkActivity?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare class RelayClient extends EventEmitter {
|
|
10
|
+
private ndk;
|
|
11
|
+
private paired;
|
|
12
|
+
private config;
|
|
13
|
+
private messageSubscription;
|
|
14
|
+
private myPubkey;
|
|
15
|
+
private myPubkeyHex;
|
|
16
|
+
private lastProcessedTimestamp;
|
|
17
|
+
private messageQueue;
|
|
18
|
+
private sequence;
|
|
19
|
+
private pendingCalls;
|
|
20
|
+
private pendingDeliveries;
|
|
21
|
+
constructor(config: RelayClientConfig);
|
|
22
|
+
setPairedPublicKey(pairedPublicKey: Uint8Array): void;
|
|
23
|
+
getPublicKey(): Uint8Array;
|
|
24
|
+
getPublicKeyHex(): string;
|
|
25
|
+
isKeyExchangeComplete(): boolean;
|
|
26
|
+
connect(): Promise<void>;
|
|
27
|
+
disconnect(): Promise<void>;
|
|
28
|
+
getLastProcessedTimestamp(): number;
|
|
29
|
+
setLastProcessedTimestamp(timestamp: number): void;
|
|
30
|
+
relay(message: ProtocolMessage): Promise<void>;
|
|
31
|
+
private publishMessage;
|
|
32
|
+
private waitForRelaysReady;
|
|
33
|
+
isConnected(): boolean;
|
|
34
|
+
private netlog;
|
|
35
|
+
private handleRelayMessage;
|
|
36
|
+
nextSequence(): number;
|
|
37
|
+
private emitError;
|
|
38
|
+
}
|