walletpair-sdk 1.0.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.
Files changed (95) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +415 -0
  3. package/dist/ble/framing.d.ts +23 -0
  4. package/dist/ble/framing.d.ts.map +1 -0
  5. package/dist/ble/framing.js +83 -0
  6. package/dist/ble/framing.js.map +1 -0
  7. package/dist/ble/index.d.ts +9 -0
  8. package/dist/ble/index.d.ts.map +1 -0
  9. package/dist/ble/index.js +9 -0
  10. package/dist/ble/index.js.map +1 -0
  11. package/dist/ble/web-ble-transport.d.ts +29 -0
  12. package/dist/ble/web-ble-transport.d.ts.map +1 -0
  13. package/dist/ble/web-ble-transport.js +93 -0
  14. package/dist/ble/web-ble-transport.js.map +1 -0
  15. package/dist/crypto.d.ts +102 -0
  16. package/dist/crypto.d.ts.map +1 -0
  17. package/dist/crypto.js +279 -0
  18. package/dist/crypto.js.map +1 -0
  19. package/dist/dapp-session.d.ts +106 -0
  20. package/dist/dapp-session.d.ts.map +1 -0
  21. package/dist/dapp-session.js +918 -0
  22. package/dist/dapp-session.js.map +1 -0
  23. package/dist/emitter.d.ts +16 -0
  24. package/dist/emitter.d.ts.map +1 -0
  25. package/dist/emitter.js +41 -0
  26. package/dist/emitter.js.map +1 -0
  27. package/dist/evm/eip1193.d.ts +83 -0
  28. package/dist/evm/eip1193.d.ts.map +1 -0
  29. package/dist/evm/eip1193.js +270 -0
  30. package/dist/evm/eip1193.js.map +1 -0
  31. package/dist/evm/index.d.ts +8 -0
  32. package/dist/evm/index.d.ts.map +1 -0
  33. package/dist/evm/index.js +8 -0
  34. package/dist/evm/index.js.map +1 -0
  35. package/dist/evm/wagmi.d.ts +118 -0
  36. package/dist/evm/wagmi.d.ts.map +1 -0
  37. package/dist/evm/wagmi.js +205 -0
  38. package/dist/evm/wagmi.js.map +1 -0
  39. package/dist/index.d.ts +22 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +24 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/types.d.ts +225 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +31 -0
  46. package/dist/types.js.map +1 -0
  47. package/dist/wallet-session.d.ts +107 -0
  48. package/dist/wallet-session.d.ts.map +1 -0
  49. package/dist/wallet-session.js +794 -0
  50. package/dist/wallet-session.js.map +1 -0
  51. package/dist/ws-transport.d.ts +29 -0
  52. package/dist/ws-transport.d.ts.map +1 -0
  53. package/dist/ws-transport.js +79 -0
  54. package/dist/ws-transport.js.map +1 -0
  55. package/package.json +55 -0
  56. package/src/__tests__/adversarial/crypto-attacks.test.ts +557 -0
  57. package/src/__tests__/adversarial/malicious-dapp.test.ts +505 -0
  58. package/src/__tests__/adversarial/malicious-relay.test.ts +528 -0
  59. package/src/__tests__/adversarial/malicious-wallet.test.ts +467 -0
  60. package/src/__tests__/spec-compliance/canonical-json.test.ts +227 -0
  61. package/src/__tests__/spec-compliance/crypto-vectors.test.ts +321 -0
  62. package/src/__tests__/spec-compliance/message-format.test.ts +356 -0
  63. package/src/__tests__/spec-compliance/sequence-numbers.test.ts +300 -0
  64. package/src/__tests__/spec-compliance/state-machine.test.ts +364 -0
  65. package/src/ble/framing.test.ts +196 -0
  66. package/src/ble/framing.ts +100 -0
  67. package/src/ble/index.ts +18 -0
  68. package/src/ble/web-ble-transport.test.ts +192 -0
  69. package/src/ble/web-ble-transport.ts +116 -0
  70. package/src/ble/web-bluetooth.d.ts +47 -0
  71. package/src/canonical-json.test.ts +612 -0
  72. package/src/crypto-directional.test.ts +263 -0
  73. package/src/crypto-hardening.test.ts +529 -0
  74. package/src/crypto.test.ts +635 -0
  75. package/src/crypto.ts +405 -0
  76. package/src/dapp-session.test.ts +647 -0
  77. package/src/dapp-session.ts +1004 -0
  78. package/src/emitter.test.ts +169 -0
  79. package/src/emitter.ts +45 -0
  80. package/src/evm/eip1193.test.ts +365 -0
  81. package/src/evm/eip1193.ts +346 -0
  82. package/src/evm/index.ts +19 -0
  83. package/src/evm/wagmi.test.ts +396 -0
  84. package/src/evm/wagmi.ts +321 -0
  85. package/src/index.ts +86 -0
  86. package/src/integration.test.ts +385 -0
  87. package/src/security.test.ts +430 -0
  88. package/src/sequence-validation.test.ts +1185 -0
  89. package/src/test-helpers.ts +216 -0
  90. package/src/types.test.ts +82 -0
  91. package/src/types.ts +305 -0
  92. package/src/wallet-session.test.ts +683 -0
  93. package/src/wallet-session.ts +922 -0
  94. package/src/ws-transport.test.ts +231 -0
  95. package/src/ws-transport.ts +92 -0
package/dist/types.js ADDED
@@ -0,0 +1,31 @@
1
+ /**
2
+ * WalletPair SDK — shared types and interfaces.
3
+ *
4
+ * Multi-chain ready: uses CAIP-2 chain IDs throughout (e.g. "eip155:1").
5
+ */
6
+ // ---------------------------------------------------------------------------
7
+ // Chain namespace helpers (for future multi-chain)
8
+ // ---------------------------------------------------------------------------
9
+ /** Parse CAIP-2 chain ID into namespace and reference. */
10
+ export function parseChainId(caip2) {
11
+ const [namespace, reference] = caip2.split(':');
12
+ if (!namespace || !reference)
13
+ throw new Error(`Invalid CAIP-2 chain ID: ${caip2}`);
14
+ return { namespace, reference };
15
+ }
16
+ /** Build CAIP-2 chain ID from namespace and reference. */
17
+ export function formatChainId(namespace, reference) {
18
+ return `${namespace}:${reference}`;
19
+ }
20
+ /** Convert EVM numeric chain ID to CAIP-2. */
21
+ export function evmChainId(id) {
22
+ return `eip155:${id}`;
23
+ }
24
+ /** Extract EVM numeric chain ID from CAIP-2. Returns null if not eip155. */
25
+ export function evmNumericChainId(caip2) {
26
+ const { namespace, reference } = parseChainId(caip2);
27
+ if (namespace !== 'eip155')
28
+ return null;
29
+ return Number.parseInt(reference, 10);
30
+ }
31
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkRH,8EAA8E;AAC9E,mDAAmD;AACnD,8EAA8E;AAE9E,0DAA0D;AAC1D,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC/C,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,EAAE,CAAC,CAAA;IAClF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAA;AACjC,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,SAAiB;IAChE,OAAO,GAAG,SAAS,IAAI,SAAS,EAAE,CAAA;AACpC,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,OAAO,UAAU,EAAE,EAAE,CAAA;AACvB,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;IACpD,IAAI,SAAS,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IACvC,OAAO,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;AACvC,CAAC"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Wallet-side WalletPair session.
3
+ *
4
+ * Manages: parse URI → join → connected → handle requests → push events.
5
+ */
6
+ import { Emitter } from './emitter.js';
7
+ import type { WalletPhase, WalletSessionEvents, WalletSessionOptions } from './types.js';
8
+ export declare class WalletSession extends Emitter<WalletSessionEvents> {
9
+ phase: WalletPhase;
10
+ /** Channel ID (hex). Available after join. */
11
+ channelId: string;
12
+ /** 4-digit session fingerprint. Available after prepareJoin(). */
13
+ sessionFingerprint: string;
14
+ private transport;
15
+ private capabilities;
16
+ private meta;
17
+ private privKey;
18
+ private pubKeyB64;
19
+ private remotePubKey;
20
+ private sessionKey;
21
+ private sendKey;
22
+ private recvKey;
23
+ private sendSeq;
24
+ private recvSeq;
25
+ private relayUrl;
26
+ private dappName;
27
+ private intentionalClose;
28
+ private evtCounter;
29
+ /** dApp-declared method scope from pairing URI (§9.1 / §8.1). */
30
+ private dappDeclaredMethods;
31
+ /** dApp-declared chain scope from pairing URI (§9.1 / §8.1). */
32
+ private dappDeclaredChains;
33
+ /** Effective capabilities after scope intersection (§8.1). */
34
+ private effectiveCapabilities;
35
+ /** Session TTL in ms (§16 rule 16). */
36
+ private sessionTtl;
37
+ private sessionTtlTimer;
38
+ private sessionStartTime;
39
+ private reconnectTimer;
40
+ private reconnectAttempt;
41
+ private pendingRequestRecords;
42
+ private idempotencyCache;
43
+ private broadcastResponseCache;
44
+ private persistence;
45
+ constructor(options: WalletSessionOptions);
46
+ /**
47
+ * Prepare to join a channel by parsing a pairing URI.
48
+ * Computes local keys and the session fingerprint without connecting.
49
+ * Returns the 4-digit session fingerprint for user verification.
50
+ */
51
+ prepareJoin(uri: string): string;
52
+ /**
53
+ * Send the join message after the user has verified the session fingerprint.
54
+ */
55
+ confirmJoin(): Promise<void>;
56
+ /**
57
+ * Join a channel in one step (convenience method).
58
+ * Equivalent to prepareJoin() + confirmJoin().
59
+ */
60
+ joinFromUri(uri: string): Promise<string>;
61
+ /** Respond to a request with success. */
62
+ approve(requestId: string, result: unknown): boolean | Promise<boolean>;
63
+ /** Respond to a request with rejection. */
64
+ reject(requestId: string, code?: string, message?: string): boolean | Promise<boolean>;
65
+ /** Push an event to the dApp. */
66
+ pushEvent(event: string, data: unknown): boolean | Promise<boolean>;
67
+ /** Send ping. */
68
+ ping(): void;
69
+ /** Gracefully close. */
70
+ close(reason?: string): void;
71
+ /** Destroy and release all resources. */
72
+ destroy(): void;
73
+ serialize(): string;
74
+ restore(signed: string): boolean;
75
+ restoreFromPersistence(): Promise<boolean>;
76
+ reconnect(): Promise<void>;
77
+ private handleMessage;
78
+ private processRequest;
79
+ private sendResponse;
80
+ private cacheProcessedResponse;
81
+ private touchIdempotencyEntry;
82
+ private evictIdempotencyCache;
83
+ private evictBroadcastCache;
84
+ private sendRaw;
85
+ private sendJoin;
86
+ private sessionContext;
87
+ /**
88
+ * Compute the intersection of wallet capabilities with dApp-declared
89
+ * scope from the pairing URI (§8.1).
90
+ */
91
+ private computeScopeIntersection;
92
+ private nextSendSeq;
93
+ private persistSnapshot;
94
+ private persistSnapshotAsync;
95
+ private clearPersistence;
96
+ private observeSend;
97
+ private persistenceError;
98
+ private handleTransportClose;
99
+ private startReconnect;
100
+ private scheduleReconnect;
101
+ private doReconnectAttempt;
102
+ private stopReconnect;
103
+ private startSessionTtl;
104
+ private clearSessionTtl;
105
+ private setPhase;
106
+ }
107
+ //# sourceMappingURL=wallet-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-session.d.ts","sourceRoot":"","sources":["../src/wallet-session.ts"],"names":[],"mappings":"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"}