@wizardconnect/core 0.1.0 → 0.1.4

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 (39) hide show
  1. package/dist/connection-manager.d.ts +18 -29
  2. package/dist/connection-manager.js +142 -144
  3. package/dist/connection-manager.js.map +1 -1
  4. package/dist/dapp-relay.d.ts +17 -19
  5. package/dist/dapp-relay.js +103 -115
  6. package/dist/dapp-relay.js.map +1 -1
  7. package/dist/index.d.ts +4 -24
  8. package/dist/index.js +6 -15
  9. package/dist/index.js.map +1 -1
  10. package/dist/key-exchange.d.ts +17 -23
  11. package/dist/key-exchange.js +124 -144
  12. package/dist/key-exchange.js.map +1 -1
  13. package/dist/log.d.ts +3 -3
  14. package/dist/log.js +11 -8
  15. package/dist/log.js.map +1 -1
  16. package/dist/message-queue.d.ts +12 -12
  17. package/dist/message-queue.js +53 -52
  18. package/dist/message-queue.js.map +1 -1
  19. package/dist/primitives.js +14 -11
  20. package/dist/primitives.js.map +1 -1
  21. package/dist/protocols/base.d.ts +22 -28
  22. package/dist/protocols/base.js +25 -28
  23. package/dist/protocols/base.js.map +1 -1
  24. package/dist/protocols/hdwalletv1.d.ts +25 -31
  25. package/dist/protocols/hdwalletv1.js +47 -57
  26. package/dist/protocols/hdwalletv1.js.map +1 -1
  27. package/dist/relay-client.d.ts +32 -32
  28. package/dist/relay-client.js +242 -291
  29. package/dist/relay-client.js.map +1 -1
  30. package/dist/relay-handler.d.ts +13 -22
  31. package/dist/relay-handler.js +107 -117
  32. package/dist/relay-handler.js.map +1 -1
  33. package/dist/utilnostr.d.ts +1 -3
  34. package/dist/utilnostr.js +9 -10
  35. package/dist/utilnostr.js.map +1 -1
  36. package/dist/wallet-relay.d.ts +11 -14
  37. package/dist/wallet-relay.js +58 -64
  38. package/dist/wallet-relay.js.map +1 -1
  39. package/package.json +8 -3
@@ -1,125 +1,115 @@
1
+ // Copyright (C) 2026 Whiterun LLC,
2
+ // This software is licensed under the GNU Lesser General Public License (LGPL), version 3.0 or later.
3
+ // A copy of the license can be found in the LICENSE file or at https://www.gnu.org/licenses/lgpl-3.0.html
1
4
  import { RelayClient } from "./relay-client.js";
2
- import { createConnectionManager } from "./connection-manager.js";
5
+ import { createConnectionManager, } from "./connection-manager.js";
3
6
  import { debug, error as logError, Scope } from "./log.js";
4
7
  export class RelayStatus {
5
- status;
6
- error;
7
- sessionId;
8
- constructor(status, error, sessionId = null) {
9
- this.status = status;
10
- this.error = error;
11
- this.sessionId = sessionId;
12
- }
13
- static connected(sessionId) {
14
- return new RelayStatus("connected", null, sessionId || null);
15
- }
16
- static reconnecting(reason, sessionId) {
17
- return new RelayStatus("reconnecting", reason, sessionId || null);
18
- }
19
- static disconnected() {
20
- return new RelayStatus("disconnected", null, null);
21
- }
22
- static sessionDeleted() {
23
- return new RelayStatus("session_deleted", null, null);
24
- }
8
+ status;
9
+ error;
10
+ sessionId;
11
+ constructor(status, error, sessionId = null) {
12
+ this.status = status;
13
+ this.error = error;
14
+ this.sessionId = sessionId;
15
+ }
16
+ static connected(sessionId) {
17
+ return new RelayStatus("connected", null, sessionId || null);
18
+ }
19
+ static reconnecting(reason, sessionId) {
20
+ return new RelayStatus("reconnecting", reason, sessionId || null);
21
+ }
22
+ static disconnected() {
23
+ return new RelayStatus("disconnected", null, null);
24
+ }
25
+ static sessionDeleted() {
26
+ return new RelayStatus("session_deleted", null, null);
27
+ }
25
28
  }
26
- export const initiateRelay = (
27
- dispatchCallback,
28
- signerPrivateKey,
29
- pairPublicKey,
30
- options,
31
- ) => {
32
- const client = new RelayClient({
33
- explicitRelayUrls: options?.explicitRelayUrls ?? [],
34
- signerPrivateKey: signerPrivateKey,
35
- pairedPublicKey: pairPublicKey,
36
- });
37
- let lastProcessedTimestamp = 0;
38
- const connectionManager = createConnectionManager(
39
- client,
40
- {
41
- onConnected: () => {
42
- if (lastProcessedTimestamp > 0) {
43
- client.setLastProcessedTimestamp(lastProcessedTimestamp);
44
- } else {
45
- lastProcessedTimestamp = client.getLastProcessedTimestamp();
46
- }
47
- dispatchCallback({
48
- client,
49
- status: RelayStatus.connected(),
50
- });
51
- },
52
- onReconnecting: (_client, reason) => {
53
- dispatchCallback({
54
- client,
55
- status: RelayStatus.reconnecting(reason),
56
- });
57
- },
58
- onDisconnected: () => {
59
- dispatchCallback({
60
- client,
61
- status: RelayStatus.disconnected(),
62
- });
63
- },
64
- onError: (_client, _error) => {
65
- // Error handling is already done in onReconnecting
66
- },
67
- },
68
- {
69
- connected: "connection",
70
- disconnected: "disconnect",
71
- error: "error",
72
- },
73
- {
74
- reconnectInterval: options?.reconnectInterval,
75
- maxReconnectAttempts: options?.maxReconnectAttempts,
76
- enableVisibilityHandling: options?.enableVisibilityHandling ?? true,
77
- scope: Scope.Relay,
78
- onVisibilityChange: async (context) => {
79
- if (context.state === "hidden") {
80
- debug(Scope.Relay, "Page hidden, disconnecting relay");
81
- context.setPaused(true);
82
- try {
83
- await client.disconnect();
84
- lastProcessedTimestamp = client.getLastProcessedTimestamp();
85
- debug(
86
- Scope.Relay,
87
- `Disconnected, last processed timestamp: ${lastProcessedTimestamp}`,
88
- );
29
+ export const initiateRelay = (dispatchCallback, signerPrivateKey, pairPublicKey, options) => {
30
+ const client = new RelayClient({
31
+ explicitRelayUrls: options?.explicitRelayUrls ?? [],
32
+ signerPrivateKey: signerPrivateKey,
33
+ pairedPublicKey: pairPublicKey,
34
+ });
35
+ let lastProcessedTimestamp = 0;
36
+ const connectionManager = createConnectionManager(client, {
37
+ onConnected: () => {
38
+ if (lastProcessedTimestamp > 0) {
39
+ client.setLastProcessedTimestamp(lastProcessedTimestamp);
40
+ }
41
+ else {
42
+ lastProcessedTimestamp = client.getLastProcessedTimestamp();
43
+ }
89
44
  dispatchCallback({
90
- client,
91
- status: RelayStatus.disconnected(),
45
+ client,
46
+ status: RelayStatus.connected(),
92
47
  });
93
- } catch (error) {
94
- logError(
95
- Scope.Relay,
96
- "Error disconnecting on visibility change:",
97
- error,
98
- );
99
- }
100
- } else if (context.state === "visible") {
101
- if (context.isPaused()) {
102
- debug(Scope.Relay, "Page visible, reconnecting relay");
103
- context.setPaused(false);
104
- context.startConnectionLoop();
105
- }
106
- }
107
- },
108
- },
109
- );
110
- connectionManager.startConnectionLoop();
111
- return () => {
112
- dispatchCallback({
113
- client,
114
- status: RelayStatus.disconnected(),
48
+ },
49
+ onReconnecting: (_client, reason) => {
50
+ dispatchCallback({
51
+ client,
52
+ status: RelayStatus.reconnecting(reason),
53
+ });
54
+ },
55
+ onDisconnected: () => {
56
+ dispatchCallback({
57
+ client,
58
+ status: RelayStatus.disconnected(),
59
+ });
60
+ },
61
+ onError: (_client, _error) => {
62
+ // Error handling is already done in onReconnecting
63
+ },
64
+ }, {
65
+ connected: "connection",
66
+ disconnected: "disconnect",
67
+ error: "error",
68
+ }, {
69
+ reconnectInterval: options?.reconnectInterval,
70
+ maxReconnectAttempts: options?.maxReconnectAttempts,
71
+ enableVisibilityHandling: options?.enableVisibilityHandling ?? true,
72
+ scope: Scope.Relay,
73
+ onVisibilityChange: async (context) => {
74
+ if (context.state === "hidden") {
75
+ debug(Scope.Relay, "Page hidden, disconnecting relay");
76
+ context.setPaused(true);
77
+ try {
78
+ await client.disconnect();
79
+ lastProcessedTimestamp = client.getLastProcessedTimestamp();
80
+ debug(Scope.Relay, `Disconnected, last processed timestamp: ${lastProcessedTimestamp}`);
81
+ dispatchCallback({
82
+ client,
83
+ status: RelayStatus.disconnected(),
84
+ });
85
+ }
86
+ catch (error) {
87
+ logError(Scope.Relay, "Error disconnecting on visibility change:", error);
88
+ }
89
+ }
90
+ else if (context.state === "visible") {
91
+ if (context.isPaused()) {
92
+ debug(Scope.Relay, "Page visible, reconnecting relay");
93
+ context.setPaused(false);
94
+ context.startConnectionLoop();
95
+ }
96
+ }
97
+ },
115
98
  });
116
- (async () => {
117
- try {
118
- await connectionManager.cleanup();
119
- } catch {
120
- // Ignore disconnect errors during cleanup
121
- }
122
- })();
123
- };
99
+ connectionManager.startConnectionLoop();
100
+ return () => {
101
+ dispatchCallback({
102
+ client,
103
+ status: RelayStatus.disconnected(),
104
+ });
105
+ (async () => {
106
+ try {
107
+ await connectionManager.cleanup();
108
+ }
109
+ catch {
110
+ // Ignore disconnect errors during cleanup
111
+ }
112
+ })();
113
+ };
124
114
  };
125
- //# sourceMappingURL=relay-handler.js.map
115
+ //# sourceMappingURL=relay-handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"relay-handler.js","sourceRoot":"","sources":["../src/relay-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relay-handler.js","sourceRoot":"","sources":["../src/relay-handler.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,2 @@
1
1
  export declare function deriveNostrPublicKey(privateKey: Uint8Array): string;
2
- export declare function deriveNostrPublicKeyBytes(
3
- privateKey: Uint8Array,
4
- ): Uint8Array;
2
+ export declare function deriveNostrPublicKeyBytes(privateKey: Uint8Array): Uint8Array;
package/dist/utilnostr.js CHANGED
@@ -1,16 +1,15 @@
1
+ // Copyright (C) 2026 Whiterun LLC,
2
+ // This software is licensed under the GNU Lesser General Public License (LGPL), version 3.0 or later.
3
+ // A copy of the license can be found in the LICENSE file or at https://www.gnu.org/licenses/lgpl-3.0.html
1
4
  import { binToHex, secp256k1 } from "@bitauth/libauth";
2
5
  import { unwrap } from "./primitives.js";
3
6
  export function deriveNostrPublicKey(privateKey) {
4
- const publicKeyCompressed = unwrap(
5
- secp256k1.derivePublicKeyCompressed(privateKey),
6
- );
7
- const publicKeyNostr = publicKeyCompressed.slice(1);
8
- return binToHex(publicKeyNostr);
7
+ const publicKeyCompressed = unwrap(secp256k1.derivePublicKeyCompressed(privateKey));
8
+ const publicKeyNostr = publicKeyCompressed.slice(1);
9
+ return binToHex(publicKeyNostr);
9
10
  }
10
11
  export function deriveNostrPublicKeyBytes(privateKey) {
11
- const publicKeyCompressed = unwrap(
12
- secp256k1.derivePublicKeyCompressed(privateKey),
13
- );
14
- return publicKeyCompressed.slice(1);
12
+ const publicKeyCompressed = unwrap(secp256k1.derivePublicKeyCompressed(privateKey));
13
+ return publicKeyCompressed.slice(1);
15
14
  }
16
- //# sourceMappingURL=utilnostr.js.map
15
+ //# sourceMappingURL=utilnostr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utilnostr.js","sourceRoot":"","sources":["../src/utilnostr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,MAAM,UAAU,oBAAoB,CAAC,UAAsB;IACzD,MAAM,mBAAmB,GAAG,MAAM,CAChC,SAAS,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAChD,CAAC;IACF,MAAM,cAAc,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpD,OAAO,QAAQ,CAAC,cAAc,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,UAAsB;IAC9D,MAAM,mBAAmB,GAAG,MAAM,CAChC,SAAS,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAChD,CAAC;IACF,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"utilnostr.js","sourceRoot":"","sources":["../src/utilnostr.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,sGAAsG;AACtG,0GAA0G;AAE1G,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,MAAM,UAAU,oBAAoB,CAAC,UAAsB;IACzD,MAAM,mBAAmB,GAAG,MAAM,CAChC,SAAS,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAChD,CAAC;IACF,MAAM,cAAc,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpD,OAAO,QAAQ,CAAC,cAAc,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,UAAsB;IAC9D,MAAM,mBAAmB,GAAG,MAAM,CAChC,SAAS,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAChD,CAAC;IACF,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtC,CAAC"}
@@ -1,20 +1,17 @@
1
1
  import { RelayClient } from "./relay-client.js";
2
2
  import { RelayStatusCallback } from "./relay-handler.js";
3
3
  export interface WalletRelayOptions {
4
- uri: string;
5
- walletPrivateKey: Uint8Array;
6
- explicitRelayUrls?: string[];
7
- reconnectInterval?: number;
8
- maxReconnectAttempts?: number;
4
+ uri: string;
5
+ walletPrivateKey: Uint8Array;
6
+ explicitRelayUrls?: string[];
7
+ reconnectInterval?: number;
8
+ maxReconnectAttempts?: number;
9
9
  }
10
10
  export interface WalletRelayResult {
11
- client: RelayClient;
12
- dappPublicKey: Uint8Array;
13
- walletPublicKey: Uint8Array;
14
- secret: string;
15
- cleanup: () => void;
11
+ client: RelayClient;
12
+ dappPublicKey: Uint8Array;
13
+ walletPublicKey: Uint8Array;
14
+ secret: string;
15
+ cleanup: () => void;
16
16
  }
17
- export declare function initiateWalletRelay(
18
- statusCallback: RelayStatusCallback,
19
- options: WalletRelayOptions,
20
- ): WalletRelayResult;
17
+ export declare function initiateWalletRelay(statusCallback: RelayStatusCallback, options: WalletRelayOptions): WalletRelayResult;
@@ -1,71 +1,65 @@
1
- import { initiateRelay } from "./relay-handler.js";
1
+ // Copyright (C) 2026 Whiterun LLC,
2
+ // This software is licensed under the GNU Lesser General Public License (LGPL), version 3.0 or later.
3
+ // A copy of the license can be found in the LICENSE file or at https://www.gnu.org/licenses/lgpl-3.0.html
4
+ import { initiateRelay, } from "./relay-handler.js";
2
5
  import { decodeKeyExchangeURI, DEFAULT_RELAY_PORT } from "./key-exchange.js";
3
- import { binToHex, hexToBin } from "@bitauth/libauth";
6
+ import { hexToBin } from "@bitauth/libauth";
4
7
  import { deriveNostrPublicKeyBytes } from "./utilnostr.js";
5
8
  export function initiateWalletRelay(statusCallback, options) {
6
- let decoded;
7
- try {
8
- decoded = decodeKeyExchangeURI(options.uri);
9
- } catch (err) {
10
- throw new Error(`Failed to decode connection URI: ${err.message}`, {
11
- cause: err,
12
- });
13
- }
14
- const dappPublicKeyHex = decoded.publicKey;
15
- const secret = decoded.secret;
16
- const dappPublicKeyNostr = hexToBin(dappPublicKeyHex);
17
- const hostname = decoded.hostname;
18
- const protocol = decoded.protocol;
19
- const port = decoded.port;
20
- const relayUrl = `${protocol}://${hostname}${port === (protocol === "wss" ? DEFAULT_RELAY_PORT : 80) ? "" : `:${port}`}`;
21
- const walletPublicKeyNostr = deriveNostrPublicKeyBytes(
22
- options.walletPrivateKey,
23
- );
24
- const walletPublicKeyHex = binToHex(walletPublicKeyNostr);
25
- let relayClient = null;
26
- const wrappedCallback = (payload) => {
27
- if (!relayClient) {
28
- relayClient = payload.client;
9
+ let decoded;
10
+ try {
11
+ decoded = decodeKeyExchangeURI(options.uri);
29
12
  }
30
- if (payload.status.status === "connected") {
31
- // Set dapp's pubkey so outbound messages are addressed correctly.
32
- // The wallet's own pubkey + secret are delivered via wallet_ready.
33
- relayClient.setPairedPublicKey(dappPublicKeyNostr);
13
+ catch (err) {
14
+ throw new Error(`Failed to decode connection URI: ${err.message}`, {
15
+ cause: err,
16
+ });
34
17
  }
35
- statusCallback(payload);
36
- };
37
- const relayUrls = [relayUrl];
38
- if (options.explicitRelayUrls && options.explicitRelayUrls.length > 0) {
39
- for (const explicitUrl of options.explicitRelayUrls) {
40
- if (!relayUrls.includes(explicitUrl)) {
41
- relayUrls.push(explicitUrl);
42
- }
18
+ const dappPublicKeyHex = decoded.publicKey;
19
+ const secret = decoded.secret;
20
+ const dappPublicKeyNostr = hexToBin(dappPublicKeyHex);
21
+ const hostname = decoded.hostname;
22
+ const protocol = decoded.protocol;
23
+ const port = decoded.port;
24
+ const relayUrl = `${protocol}://${hostname}${port === (protocol === "wss" ? DEFAULT_RELAY_PORT : 80) ? "" : `:${port}`}`;
25
+ const walletPublicKeyNostr = deriveNostrPublicKeyBytes(options.walletPrivateKey);
26
+ let relayClient = null;
27
+ const wrappedCallback = (payload) => {
28
+ if (!relayClient) {
29
+ relayClient = payload.client;
30
+ }
31
+ if (payload.status.status === "connected") {
32
+ // Set dapp's pubkey so outbound messages are addressed correctly.
33
+ // The wallet's own pubkey + secret are delivered via wallet_ready.
34
+ relayClient.setPairedPublicKey(dappPublicKeyNostr);
35
+ }
36
+ statusCallback(payload);
37
+ };
38
+ const relayUrls = [relayUrl];
39
+ if (options.explicitRelayUrls && options.explicitRelayUrls.length > 0) {
40
+ for (const explicitUrl of options.explicitRelayUrls) {
41
+ if (!relayUrls.includes(explicitUrl)) {
42
+ relayUrls.push(explicitUrl);
43
+ }
44
+ }
43
45
  }
44
- }
45
- const cleanup = initiateRelay(
46
- wrappedCallback,
47
- options.walletPrivateKey,
48
- dappPublicKeyNostr,
49
- {
50
- explicitRelayUrls: relayUrls,
51
- reconnectInterval: options.reconnectInterval,
52
- maxReconnectAttempts: options.maxReconnectAttempts,
53
- },
54
- );
55
- const result = {
56
- get client() {
57
- if (!relayClient) {
58
- throw new Error(
59
- "Relay client not yet initialized. Wait for connection status callback.",
60
- );
61
- }
62
- return relayClient;
63
- },
64
- dappPublicKey: dappPublicKeyNostr,
65
- walletPublicKey: walletPublicKeyNostr,
66
- secret,
67
- cleanup,
68
- };
69
- return result;
46
+ const cleanup = initiateRelay(wrappedCallback, options.walletPrivateKey, dappPublicKeyNostr, {
47
+ explicitRelayUrls: relayUrls,
48
+ reconnectInterval: options.reconnectInterval,
49
+ maxReconnectAttempts: options.maxReconnectAttempts,
50
+ });
51
+ const result = {
52
+ get client() {
53
+ if (!relayClient) {
54
+ throw new Error("Relay client not yet initialized. Wait for connection status callback.");
55
+ }
56
+ return relayClient;
57
+ },
58
+ dappPublicKey: dappPublicKeyNostr,
59
+ walletPublicKey: walletPublicKeyNostr,
60
+ secret,
61
+ cleanup,
62
+ };
63
+ return result;
70
64
  }
71
- //# sourceMappingURL=wallet-relay.js.map
65
+ //# sourceMappingURL=wallet-relay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wallet-relay.js","sourceRoot":"","sources":["../src/wallet-relay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wallet-relay.js","sourceRoot":"","sources":["../src/wallet-relay.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,8 +1,13 @@
1
1
  {
2
2
  "name": "@wizardconnect/core",
3
- "version": "0.1.0",
3
+ "version": "0.1.4",
4
4
  "type": "module",
5
5
  "description": "Transport and protocol primitives for WizardConnect",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://gitlab.com/riftenlabs/lib/wizardconnect",
9
+ "directory": "packages/core"
10
+ },
6
11
  "main": "dist/index.js",
7
12
  "types": "dist/index.d.ts",
8
13
  "files": [
@@ -11,11 +16,11 @@
11
16
  "scripts": {
12
17
  "build": "tsc",
13
18
  "test": "vitest --config vitest.config.ts --run --passWithNoTests",
14
- "lint:prettier": "prettier . --list-different",
19
+ "lint:prettier": "prettier --ignore-path ../../.gitignore . --list-different",
15
20
  "lint:eslint": "eslint .",
16
21
  "lint": "npm run lint:eslint && npm run lint:prettier",
17
22
  "fix": "npm run fix:eslint && npm run fix:prettier",
18
- "fix:prettier": "prettier . --write",
23
+ "fix:prettier": "prettier --ignore-path ../../.gitignore . --write",
19
24
  "fix:eslint": "npm run lint:eslint -- --fix"
20
25
  },
21
26
  "dependencies": {