@meshconnect/uwc-bitcoin 0.3.1-snapshot.df92d77 → 0.3.2-snapshot.fd7ab27
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/adapter.d.ts +17 -2
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapters/okx.d.ts +3 -1
- package/dist/adapters/okx.d.ts.map +1 -1
- package/dist/adapters/okx.js +3 -2
- package/dist/adapters/okx.js.map +1 -1
- package/dist/adapters/wallet-standard.d.ts +24 -1
- package/dist/adapters/wallet-standard.d.ts.map +1 -1
- package/dist/adapters/wallet-standard.js +19 -2
- package/dist/adapters/wallet-standard.js.map +1 -1
- package/dist/bitcoin-namespace.d.ts +13 -1
- package/dist/bitcoin-namespace.d.ts.map +1 -1
- package/dist/bitcoin-namespace.js +12 -1
- package/dist/bitcoin-namespace.js.map +1 -1
- package/package.json +6 -6
- package/src/adapter.ts +15 -2
- package/src/adapters/okx.test.ts +4 -2
- package/src/adapters/okx.ts +4 -3
- package/src/adapters/wallet-standard.test.ts +44 -0
- package/src/adapters/wallet-standard.ts +30 -2
- package/src/bitcoin-namespace.test.ts +24 -3
- package/src/bitcoin-namespace.ts +13 -2
package/dist/adapter.d.ts
CHANGED
|
@@ -32,7 +32,22 @@ export interface BitcoinTransportAdapter {
|
|
|
32
32
|
* offers it (e.g. WalletConnect `sendTransfer`) implement it.
|
|
33
33
|
*/
|
|
34
34
|
sendTransfer?(request: BitcoinSendTransferRequest): Promise<TransactionResult>;
|
|
35
|
-
/**
|
|
36
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Release the session. `revoked` reports whether the ORIGIN'S AUTHORIZATION
|
|
37
|
+
* was actually withdrawn at the wallet, not merely whether local state was
|
|
38
|
+
* cleared — callers that re-connect afterwards need that distinction, because
|
|
39
|
+
* revoking is destructive and a failed re-connect has nothing to fall back to.
|
|
40
|
+
*
|
|
41
|
+
* Transports that can only clear local state (OKX has no disconnect RPC)
|
|
42
|
+
* report `revoked: false`. Optional.
|
|
43
|
+
*
|
|
44
|
+
* `void` is still accepted so an adapter written against the previous
|
|
45
|
+
* signature keeps compiling; `BitcoinNamespace.disconnect` normalizes it to
|
|
46
|
+
* `{ revoked: false }` — the safe reading, since such an adapter cannot have
|
|
47
|
+
* revoked anything it never reported.
|
|
48
|
+
*/
|
|
49
|
+
disconnect?(): Promise<{
|
|
50
|
+
revoked: boolean;
|
|
51
|
+
} | void>;
|
|
37
52
|
}
|
|
38
53
|
//# sourceMappingURL=adapter.d.ts.map
|
package/dist/adapter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,0BAA0B,EAC1B,wBAAwB,EACxB,aAAa,EACb,iBAAiB,EAClB,MAAM,wBAAwB,CAAA;AAE/B;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,uBAAuB;IACtC,wEAAwE;IACxE,WAAW,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;IAExC,6CAA6C;IAC7C,WAAW,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IAErE;;;;OAIG;IACH,QAAQ,CAAC,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAE3D;;;;OAIG;IACH,YAAY,CAAC,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAE9E
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,0BAA0B,EAC1B,wBAAwB,EACxB,aAAa,EACb,iBAAiB,EAClB,MAAM,wBAAwB,CAAA;AAE/B;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,uBAAuB;IACtC,wEAAwE;IACxE,WAAW,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;IAExC,6CAA6C;IAC7C,WAAW,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IAErE;;;;OAIG;IACH,QAAQ,CAAC,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAE3D;;;;OAIG;IACH,YAAY,CAAC,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAE9E;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;CACpD"}
|
package/dist/adapters/okx.d.ts
CHANGED
|
@@ -55,6 +55,8 @@ export declare class OkxBitcoinAdapter implements BitcoinTransportAdapter {
|
|
|
55
55
|
getAccounts(): Promise<BitcoinAccount[]>;
|
|
56
56
|
signMessage(params: BitcoinSignMessageParams): Promise<SignatureType>;
|
|
57
57
|
signPsbt(request: BitcoinPsbtSignRequest): Promise<string>;
|
|
58
|
-
disconnect(): Promise<
|
|
58
|
+
disconnect(): Promise<{
|
|
59
|
+
revoked: boolean;
|
|
60
|
+
}>;
|
|
59
61
|
}
|
|
60
62
|
//# sourceMappingURL=okx.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"okx.d.ts","sourceRoot":"","sources":["../../src/adapters/okx.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EAEtB,wBAAwB,EACxB,aAAa,EACd,MAAM,wBAAwB,CAAA;AAE/B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAQzD;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,kBAAkB;IACjC,+DAA+D;IAC/D,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACpC,6EAA6E;IAC7E,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAChC,+DAA+D;IAC/D,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IAC/B,kDAAkD;IAClD,WAAW,CACT,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,OAAO,GAAG,eAAe,GAC/B,OAAO,CAAC,MAAM,CAAC,CAAA;IAClB;;;;;OAKG;IACH,QAAQ,CACN,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,OAAO,CAAA;QACvB,YAAY,CAAC,EAAE;YACb,KAAK,EAAE,MAAM,CAAA;YACb,OAAO,EAAE,MAAM,CAAA;YACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;SACxB,EAAE,CAAA;KACJ,GACA,OAAO,CAAC,MAAM,CAAC,CAAA;IAClB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,GAAG,IAAI,CAAA;IAC9D,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,GAAG,IAAI,CAAA;CAC3E;AAaD;;;;;;;;;GASG;AACH,qBAAa,iBAAkB,YAAW,uBAAuB;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ;
|
|
1
|
+
{"version":3,"file":"okx.d.ts","sourceRoot":"","sources":["../../src/adapters/okx.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EAEtB,wBAAwB,EACxB,aAAa,EACd,MAAM,wBAAwB,CAAA;AAE/B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAQzD;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,kBAAkB;IACjC,+DAA+D;IAC/D,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACpC,6EAA6E;IAC7E,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAChC,+DAA+D;IAC/D,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IAC/B,kDAAkD;IAClD,WAAW,CACT,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,OAAO,GAAG,eAAe,GAC/B,OAAO,CAAC,MAAM,CAAC,CAAA;IAClB;;;;;OAKG;IACH,QAAQ,CACN,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,OAAO,CAAA;QACvB,YAAY,CAAC,EAAE;YACb,KAAK,EAAE,MAAM,CAAA;YACb,OAAO,EAAE,MAAM,CAAA;YACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;SACxB,EAAE,CAAA;KACJ,GACA,OAAO,CAAC,MAAM,CAAC,CAAA;IAClB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,GAAG,IAAI,CAAA;IAC9D,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,GAAG,IAAI,CAAA;CAC3E;AAaD;;;;;;;;;GASG;AACH,qBAAa,iBAAkB,YAAW,uBAAuB;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAArC,YAA6B,QAAQ,EAAE,kBAAkB,EAAI;IAEvD,WAAW,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAc7C;IAEK,WAAW,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,aAAa,CAAC,CAc1E;IAEK,QAAQ,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6B/D;IAED,UAAU,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAK1C;CACF"}
|
package/dist/adapters/okx.js
CHANGED
|
@@ -86,8 +86,9 @@ export class OkxBitcoinAdapter {
|
|
|
86
86
|
}
|
|
87
87
|
disconnect() {
|
|
88
88
|
// OKX's injected provider has no disconnect RPC; clearing session state is
|
|
89
|
-
// the caller's job.
|
|
90
|
-
|
|
89
|
+
// the caller's job. Nothing is revoked at the wallet, so say so — a caller
|
|
90
|
+
// that re-connects expecting a fresh prompt would otherwise be misled.
|
|
91
|
+
return Promise.resolve({ revoked: false });
|
|
91
92
|
}
|
|
92
93
|
}
|
|
93
94
|
//# sourceMappingURL=okx.js.map
|
package/dist/adapters/okx.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"okx.js","sourceRoot":"","sources":["../../src/adapters/okx.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D,OAAO,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACV,UAAU,EACX,MAAM,aAAa,CAAA;AAgDpB;6CAC6C;AAC7C,MAAM,cAAc,GAAmC;IACrD,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,IAAI;IACZ,kBAAkB,EAAE,IAAI;IACxB,mBAAmB,EAAE,IAAI;IACzB,qBAAqB,EAAE,IAAI;CAC5B,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,OAAO,iBAAiB;IACC;
|
|
1
|
+
{"version":3,"file":"okx.js","sourceRoot":"","sources":["../../src/adapters/okx.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,12 +43,22 @@ interface BitcoinSignTransactionFeature {
|
|
|
43
43
|
psbt: Uint8Array;
|
|
44
44
|
}[]>;
|
|
45
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Revokes the origin's authorization — NOT merely a local session reset. The
|
|
48
|
+
* bitcoin-wallet-standard `disconnect` defaults to `revokeSession: true`, so
|
|
49
|
+
* after it resolves the wallet stops serving this origin's granted accounts
|
|
50
|
+
* and the next `bitcoin:connect` is a real prompt again.
|
|
51
|
+
*/
|
|
52
|
+
interface BitcoinDisconnectFeature {
|
|
53
|
+
disconnect(): Promise<void>;
|
|
54
|
+
}
|
|
46
55
|
/** The handle the injected transport passes in (a discovered `bitcoin:*` wallet). */
|
|
47
56
|
export interface WalletStandardBitcoinWallet {
|
|
48
57
|
name: string;
|
|
49
58
|
accounts: readonly WalletStandardBitcoinAccount[];
|
|
50
59
|
features: Record<string, unknown> & {
|
|
51
60
|
'bitcoin:connect'?: BitcoinConnectFeature;
|
|
61
|
+
'bitcoin:disconnect'?: BitcoinDisconnectFeature;
|
|
52
62
|
'bitcoin:signMessage'?: BitcoinSignMessageFeature;
|
|
53
63
|
'bitcoin:signTransaction'?: BitcoinSignTransactionFeature;
|
|
54
64
|
};
|
|
@@ -79,7 +89,20 @@ export declare class WalletStandardBitcoinAdapter implements BitcoinTransportAda
|
|
|
79
89
|
getAccounts(): Promise<BitcoinAccount[]>;
|
|
80
90
|
signMessage(params: BitcoinSignMessageParams): Promise<SignatureType>;
|
|
81
91
|
signPsbt(request: BitcoinPsbtSignRequest): Promise<string>;
|
|
82
|
-
|
|
92
|
+
/**
|
|
93
|
+
* Revoke the origin's authorization, then drop the local cache.
|
|
94
|
+
*
|
|
95
|
+
* Previously this ONLY cleared `this.accounts` and resolved — the wallet was
|
|
96
|
+
* never told. That made every caller's "disconnect" a silent no-op: the grant
|
|
97
|
+
* survived, so a subsequent `bitcoin:connect` replayed it and returned the
|
|
98
|
+
* same account. `revoked` reports whether the wallet actually acted, because
|
|
99
|
+
* revoking is destructive and callers must distinguish "grant is gone" from
|
|
100
|
+
* "nothing happened" (a wallet exposing no `bitcoin:disconnect` yields
|
|
101
|
+
* `false`, and the local cache clear alone cannot be relied on).
|
|
102
|
+
*/
|
|
103
|
+
disconnect(): Promise<{
|
|
104
|
+
revoked: boolean;
|
|
105
|
+
}>;
|
|
83
106
|
/** Look up the wallet-native account for an address, connecting first if needed. */
|
|
84
107
|
private requireAccount;
|
|
85
108
|
private unsupported;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-standard.d.ts","sourceRoot":"","sources":["../../src/adapters/wallet-standard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,wBAAwB,EACxB,aAAa,EACd,MAAM,wBAAwB,CAAA;AAE/B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAQzD;;;;;;;GAOG;AACH,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,UAAU,CAAA;IACrB,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;CACjC;AAED,UAAU,qBAAqB;IAC7B,OAAO,CAAC,KAAK,EAAE;QACb,QAAQ,EAAE,CAAC,SAAS,GAAG,UAAU,CAAC,EAAE,CAAA;KACrC,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,4BAA4B,EAAE,CAAA;KAAE,CAAC,CAAA;CAC1D;AAED,UAAU,yBAAyB;IACjC,WAAW,CAAC,KAAK,EAAE;QACjB,OAAO,EAAE,4BAA4B,CAAA;QACrC,OAAO,EAAE,UAAU,CAAA;QACnB,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;KAC9B,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,UAAU,CAAC;QAAC,aAAa,EAAE,UAAU,CAAA;KAAE,EAAE,CAAC,CAAA;CACpE;AAED,UAAU,6BAA6B;IACrC,eAAe,CAAC,KAAK,EAAE;QACrB,OAAO,EAAE,4BAA4B,CAAA;QACrC,IAAI,EAAE,UAAU,CAAA;QAChB,YAAY,CAAC,EAAE;YACb,OAAO,EAAE,4BAA4B,CAAA;YACrC,cAAc,EAAE,MAAM,EAAE,CAAA;YACxB,OAAO,CAAC,EAAE,MAAM,CAAA;SACjB,EAAE,CAAA;KACJ,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,UAAU,CAAA;KAAE,EAAE,CAAC,CAAA;CACpC;AAED,qFAAqF;AACrF,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,SAAS,4BAA4B,EAAE,CAAA;IACjD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QAClC,iBAAiB,CAAC,EAAE,qBAAqB,CAAA;QACzC,qBAAqB,CAAC,EAAE,yBAAyB,CAAA;QACjD,yBAAyB,CAAC,EAAE,6BAA6B,CAAA;KAC1D,CAAA;CACF;AAED;;;;;;;;;GASG;AACH,qBAAa,4BAA6B,YAAW,uBAAuB;IAaxE,OAAO,CAAC,QAAQ,CAAC,MAAM;IAZzB,OAAO,CAAC,QAAQ,CAAuD;IAEvE;;;;;;;;OAQG;
|
|
1
|
+
{"version":3,"file":"wallet-standard.d.ts","sourceRoot":"","sources":["../../src/adapters/wallet-standard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,wBAAwB,EACxB,aAAa,EACd,MAAM,wBAAwB,CAAA;AAE/B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAQzD;;;;;;;GAOG;AACH,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,UAAU,CAAA;IACrB,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;CACjC;AAED,UAAU,qBAAqB;IAC7B,OAAO,CAAC,KAAK,EAAE;QACb,QAAQ,EAAE,CAAC,SAAS,GAAG,UAAU,CAAC,EAAE,CAAA;KACrC,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,4BAA4B,EAAE,CAAA;KAAE,CAAC,CAAA;CAC1D;AAED,UAAU,yBAAyB;IACjC,WAAW,CAAC,KAAK,EAAE;QACjB,OAAO,EAAE,4BAA4B,CAAA;QACrC,OAAO,EAAE,UAAU,CAAA;QACnB,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;KAC9B,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,UAAU,CAAC;QAAC,aAAa,EAAE,UAAU,CAAA;KAAE,EAAE,CAAC,CAAA;CACpE;AAED,UAAU,6BAA6B;IACrC,eAAe,CAAC,KAAK,EAAE;QACrB,OAAO,EAAE,4BAA4B,CAAA;QACrC,IAAI,EAAE,UAAU,CAAA;QAChB,YAAY,CAAC,EAAE;YACb,OAAO,EAAE,4BAA4B,CAAA;YACrC,cAAc,EAAE,MAAM,EAAE,CAAA;YACxB,OAAO,CAAC,EAAE,MAAM,CAAA;SACjB,EAAE,CAAA;KACJ,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,UAAU,CAAA;KAAE,EAAE,CAAC,CAAA;CACpC;AAED;;;;;GAKG;AACH,UAAU,wBAAwB;IAChC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5B;AAED,qFAAqF;AACrF,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,SAAS,4BAA4B,EAAE,CAAA;IACjD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QAClC,iBAAiB,CAAC,EAAE,qBAAqB,CAAA;QACzC,oBAAoB,CAAC,EAAE,wBAAwB,CAAA;QAC/C,qBAAqB,CAAC,EAAE,yBAAyB,CAAA;QACjD,yBAAyB,CAAC,EAAE,6BAA6B,CAAA;KAC1D,CAAA;CACF;AAED;;;;;;;;;GASG;AACH,qBAAa,4BAA6B,YAAW,uBAAuB;IAaxE,OAAO,CAAC,QAAQ,CAAC,MAAM;IAZzB,OAAO,CAAC,QAAQ,CAAuD;IAEvE;;;;;;;;OAQG;IACH,YACmB,MAAM,EAAE,2BAA2B,EACpD,eAAe,CAAC,EAAE,SAAS,4BAA4B,EAAE,EAK1D;IAEK,WAAW,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAa7C;IAEK,WAAW,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,aAAa,CAAC,CAkB1E;IAEK,QAAQ,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CA2B/D;IAED;;;;;;;;;;OAUG;IACG,UAAU,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAShD;IAED,oFAAoF;YACtE,cAAc;IAoB5B,OAAO,CAAC,WAAW;CAMpB"}
|
|
@@ -86,9 +86,26 @@ export class WalletStandardBitcoinAdapter {
|
|
|
86
86
|
}
|
|
87
87
|
return bytesToBase64(result.psbt);
|
|
88
88
|
}
|
|
89
|
-
|
|
89
|
+
/**
|
|
90
|
+
* Revoke the origin's authorization, then drop the local cache.
|
|
91
|
+
*
|
|
92
|
+
* Previously this ONLY cleared `this.accounts` and resolved — the wallet was
|
|
93
|
+
* never told. That made every caller's "disconnect" a silent no-op: the grant
|
|
94
|
+
* survived, so a subsequent `bitcoin:connect` replayed it and returned the
|
|
95
|
+
* same account. `revoked` reports whether the wallet actually acted, because
|
|
96
|
+
* revoking is destructive and callers must distinguish "grant is gone" from
|
|
97
|
+
* "nothing happened" (a wallet exposing no `bitcoin:disconnect` yields
|
|
98
|
+
* `false`, and the local cache clear alone cannot be relied on).
|
|
99
|
+
*/
|
|
100
|
+
async disconnect() {
|
|
101
|
+
const feature = this.wallet.features['bitcoin:disconnect'];
|
|
102
|
+
let revoked = false;
|
|
103
|
+
if (feature) {
|
|
104
|
+
await feature.disconnect();
|
|
105
|
+
revoked = true;
|
|
106
|
+
}
|
|
90
107
|
this.accounts = null;
|
|
91
|
-
return
|
|
108
|
+
return { revoked };
|
|
92
109
|
}
|
|
93
110
|
/** Look up the wallet-native account for an address, connecting first if needed. */
|
|
94
111
|
async requireAccount(address) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-standard.js","sourceRoot":"","sources":["../../src/adapters/wallet-standard.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D,OAAO,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACV,WAAW,EACZ,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"wallet-standard.js","sourceRoot":"","sources":["../../src/adapters/wallet-standard.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,7 +55,19 @@ export declare class BitcoinNamespace {
|
|
|
55
55
|
*/
|
|
56
56
|
sendTransfer(request: BitcoinSendTransferRequest): Promise<TransactionResult>;
|
|
57
57
|
/** Release any session resources the adapter holds. */
|
|
58
|
-
|
|
58
|
+
/**
|
|
59
|
+
* Release the session. Returns whether the origin's authorization was
|
|
60
|
+
* actually revoked at the wallet, so a caller re-connecting for a fresh
|
|
61
|
+
* prompt can tell that nothing changed rather than assuming the grant is gone.
|
|
62
|
+
*
|
|
63
|
+
* Normalizes to `{ revoked: false }` for an adapter that implements no
|
|
64
|
+
* `disconnect` AND for one written against the older `Promise<void>`
|
|
65
|
+
* signature — neither reported a revoke, and assuming one would send the
|
|
66
|
+
* caller into its destructive-path error handling with the grant intact.
|
|
67
|
+
*/
|
|
68
|
+
disconnect(): Promise<{
|
|
69
|
+
revoked: boolean;
|
|
70
|
+
}>;
|
|
59
71
|
private unsupported;
|
|
60
72
|
}
|
|
61
73
|
//# sourceMappingURL=bitcoin-namespace.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitcoin-namespace.d.ts","sourceRoot":"","sources":["../src/bitcoin-namespace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,0BAA0B,EAC1B,wBAAwB,EACxB,SAAS,EACT,OAAO,EACP,aAAa,EACb,iBAAiB,EAClB,MAAM,wBAAwB,CAAA;AAG/B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA;AAExD,2CAA2C;AAC3C,eAAO,MAAM,iBAAiB,EAAE,SAAoB,CAAA;AAEpD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAa3E;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,gBAAgB;IAIf,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,2CAA2C;IAC3C,QAAQ,CAAC,SAAS,YAAoB;
|
|
1
|
+
{"version":3,"file":"bitcoin-namespace.d.ts","sourceRoot":"","sources":["../src/bitcoin-namespace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,0BAA0B,EAC1B,wBAAwB,EACxB,SAAS,EACT,OAAO,EACP,aAAa,EACb,iBAAiB,EAClB,MAAM,wBAAwB,CAAA;AAG/B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA;AAExD,2CAA2C;AAC3C,eAAO,MAAM,iBAAiB,EAAE,SAAoB,CAAA;AAEpD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAa3E;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,gBAAgB;IAIf,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,2CAA2C;IAC3C,QAAQ,CAAC,SAAS,YAAoB;IAEtC,YAA6B,OAAO,EAAE,uBAAuB,EAAI;IAEjE,mDAAmD;IACnD,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAE7C;IAED,8DAA8D;IAC9D,WAAW,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAEvC;IAED,6CAA6C;IAC7C,WAAW,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,aAAa,CAAC,CAEpE;IAED;;;;OAIG;IACG,QAAQ,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAG/D;IAED;;;OAGG;IACG,YAAY,CAChB,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,iBAAiB,CAAC,CAG5B;IAED,uDAAuD;IACvD;;;;;;;;;OASG;IACG,UAAU,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAGhD;IAED,OAAO,CAAC,WAAW;CAMpB"}
|
|
@@ -84,8 +84,19 @@ export class BitcoinNamespace {
|
|
|
84
84
|
return this.adapter.sendTransfer(request);
|
|
85
85
|
}
|
|
86
86
|
/** Release any session resources the adapter holds. */
|
|
87
|
+
/**
|
|
88
|
+
* Release the session. Returns whether the origin's authorization was
|
|
89
|
+
* actually revoked at the wallet, so a caller re-connecting for a fresh
|
|
90
|
+
* prompt can tell that nothing changed rather than assuming the grant is gone.
|
|
91
|
+
*
|
|
92
|
+
* Normalizes to `{ revoked: false }` for an adapter that implements no
|
|
93
|
+
* `disconnect` AND for one written against the older `Promise<void>`
|
|
94
|
+
* signature — neither reported a revoke, and assuming one would send the
|
|
95
|
+
* caller into its destructive-path error handling with the grant intact.
|
|
96
|
+
*/
|
|
87
97
|
async disconnect() {
|
|
88
|
-
await this.adapter.disconnect?.();
|
|
98
|
+
const result = await this.adapter.disconnect?.();
|
|
99
|
+
return result ?? { revoked: false };
|
|
89
100
|
}
|
|
90
101
|
unsupported(method) {
|
|
91
102
|
return new WalletConnectorError({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitcoin-namespace.js","sourceRoot":"","sources":["../src/bitcoin-namespace.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAG7D,2CAA2C;AAC3C,MAAM,CAAC,MAAM,iBAAiB,GAAc,QAAQ,CAAA;AAEpD;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAgB,EAAE,MAAc;IACnE,IAAI,OAAO,CAAC,SAAS,KAAK,iBAAiB,EAAE,CAAC;QAC5C,MAAM,IAAI,oBAAoB,CAAC;YAC7B,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,GAAG,MAAM,wCAAwC,OAAO,CAAC,EAAE,GAAG;SACxE,CAAC,CAAA;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,EAAE,KAAK,cAAc,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,oBAAoB,CAAC;YAC7B,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,GAAG,MAAM,+BAA+B,OAAO,CAAC,EAAE,8BAA8B,cAAc,CAAC,EAAE,iBAAiB;SAC5H,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,gBAAgB;IAIE;
|
|
1
|
+
{"version":3,"file":"bitcoin-namespace.js","sourceRoot":"","sources":["../src/bitcoin-namespace.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAG7D,2CAA2C;AAC3C,MAAM,CAAC,MAAM,iBAAiB,GAAc,QAAQ,CAAA;AAEpD;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAgB,EAAE,MAAc;IACnE,IAAI,OAAO,CAAC,SAAS,KAAK,iBAAiB,EAAE,CAAC;QAC5C,MAAM,IAAI,oBAAoB,CAAC;YAC7B,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,GAAG,MAAM,wCAAwC,OAAO,CAAC,EAAE,GAAG;SACxE,CAAC,CAAA;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,EAAE,KAAK,cAAc,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,oBAAoB,CAAC;YAC7B,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,GAAG,MAAM,+BAA+B,OAAO,CAAC,EAAE,8BAA8B,cAAc,CAAC,EAAE,iBAAiB;SAC5H,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,gBAAgB;IAIE,OAAO;IAHpC,2CAA2C;IAClC,SAAS,GAAG,iBAAiB,CAAA;IAEtC,YAA6B,OAAgC;uBAAhC,OAAO;IAA4B,CAAC;IAEjE,mDAAmD;IACnD,sBAAsB,CAAC,OAAgB;QACrC,oBAAoB,CAAC,OAAO,EAAE,yCAAyC,CAAC,CAAA;IAC1E,CAAC;IAED,8DAA8D;IAC9D,WAAW;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;IACnC,CAAC;IAED,6CAA6C;IAC7C,WAAW,CAAC,MAAgC;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IACzC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,QAAQ,CAAC,OAA+B;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ;YAAE,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;QAC9D,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IACvC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY,CAChB,OAAmC;QAEnC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY;YAAE,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAA;QACtE,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IAC3C,CAAC;IAED,uDAAuD;IACvD;;;;;;;;;OASG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAA;QAChD,OAAO,MAAM,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IACrC,CAAC;IAEO,WAAW,CAAC,MAAc;QAChC,OAAO,IAAI,oBAAoB,CAAC;YAC9B,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,oBAAoB,MAAM,0CAA0C;SAC9E,CAAC,CAAA;IACJ,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meshconnect/uwc-bitcoin",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2-snapshot.fd7ab27",
|
|
4
4
|
"description": "Mesh-owned Bitcoin (bip122) namespace module for Universal Wallet Connector — network-specific logic (PSBT, address/network handling, mempool broadcast) with pluggable transport adapters (Wallet Standard bitcoin:* and WalletConnect bip122), consumed by the injected and walletConnect transport connectors",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
"src"
|
|
17
17
|
],
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@meshconnect/uwc-constants": "0.7.
|
|
20
|
-
"@meshconnect/uwc-types": "0.27.
|
|
19
|
+
"@meshconnect/uwc-constants": "0.7.7-snapshot.fd7ab27",
|
|
20
|
+
"@meshconnect/uwc-types": "0.27.2-snapshot.fd7ab27"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
|
-
"typescript": "^
|
|
23
|
+
"typescript": "^7.0.2"
|
|
24
24
|
},
|
|
25
25
|
"publishConfig": {
|
|
26
26
|
"access": "public"
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"scripts": {
|
|
29
29
|
"build": "tsc",
|
|
30
30
|
"dev": "tsc --watch",
|
|
31
|
-
"lint": "
|
|
32
|
-
"lint:fix": "
|
|
31
|
+
"lint": "biome check src",
|
|
32
|
+
"lint:fix": "biome check --write src",
|
|
33
33
|
"type-check": "tsc --noEmit"
|
|
34
34
|
}
|
|
35
35
|
}
|
package/src/adapter.ts
CHANGED
|
@@ -44,6 +44,19 @@ export interface BitcoinTransportAdapter {
|
|
|
44
44
|
*/
|
|
45
45
|
sendTransfer?(request: BitcoinSendTransferRequest): Promise<TransactionResult>
|
|
46
46
|
|
|
47
|
-
/**
|
|
48
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Release the session. `revoked` reports whether the ORIGIN'S AUTHORIZATION
|
|
49
|
+
* was actually withdrawn at the wallet, not merely whether local state was
|
|
50
|
+
* cleared — callers that re-connect afterwards need that distinction, because
|
|
51
|
+
* revoking is destructive and a failed re-connect has nothing to fall back to.
|
|
52
|
+
*
|
|
53
|
+
* Transports that can only clear local state (OKX has no disconnect RPC)
|
|
54
|
+
* report `revoked: false`. Optional.
|
|
55
|
+
*
|
|
56
|
+
* `void` is still accepted so an adapter written against the previous
|
|
57
|
+
* signature keeps compiling; `BitcoinNamespace.disconnect` normalizes it to
|
|
58
|
+
* `{ revoked: false }` — the safe reading, since such an adapter cannot have
|
|
59
|
+
* revoked anything it never reported.
|
|
60
|
+
*/
|
|
61
|
+
disconnect?(): Promise<{ revoked: boolean } | void>
|
|
49
62
|
}
|
package/src/adapters/okx.test.ts
CHANGED
|
@@ -150,10 +150,12 @@ describe('OkxBitcoinAdapter', () => {
|
|
|
150
150
|
).rejects.toBeInstanceOf(WalletConnectorError)
|
|
151
151
|
})
|
|
152
152
|
|
|
153
|
-
|
|
153
|
+
// OKX has no disconnect RPC, so nothing is revoked at the wallet. Saying so
|
|
154
|
+
// explicitly stops a caller from re-connecting expecting a fresh prompt.
|
|
155
|
+
it('disconnect resolves with revoked:false (OKX has no disconnect RPC)', async () => {
|
|
154
156
|
await expect(
|
|
155
157
|
new OkxBitcoinAdapter(fakeProvider()).disconnect()
|
|
156
|
-
).resolves.
|
|
158
|
+
).resolves.toEqual({ revoked: false })
|
|
157
159
|
})
|
|
158
160
|
})
|
|
159
161
|
|
package/src/adapters/okx.ts
CHANGED
|
@@ -147,9 +147,10 @@ export class OkxBitcoinAdapter implements BitcoinTransportAdapter {
|
|
|
147
147
|
return bytesToBase64(hexToBytes(signedHex))
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
-
disconnect(): Promise<
|
|
150
|
+
disconnect(): Promise<{ revoked: boolean }> {
|
|
151
151
|
// OKX's injected provider has no disconnect RPC; clearing session state is
|
|
152
|
-
// the caller's job.
|
|
153
|
-
|
|
152
|
+
// the caller's job. Nothing is revoked at the wallet, so say so — a caller
|
|
153
|
+
// that re-connects expecting a fresh prompt would otherwise be misled.
|
|
154
|
+
return Promise.resolve({ revoked: false })
|
|
154
155
|
}
|
|
155
156
|
}
|
|
@@ -40,6 +40,50 @@ const fakeWallet = (
|
|
|
40
40
|
}
|
|
41
41
|
})
|
|
42
42
|
|
|
43
|
+
describe('WalletStandardBitcoinAdapter — disconnect', () => {
|
|
44
|
+
// This previously only cleared the local cache and resolved, never telling
|
|
45
|
+
// the wallet — so every caller's "disconnect" was a silent no-op: the grant
|
|
46
|
+
// survived and the next `bitcoin:connect` replayed the same account.
|
|
47
|
+
it('calls the wallet bitcoin:disconnect and reports revoked:true', async () => {
|
|
48
|
+
const disconnect = vi.fn().mockResolvedValue(undefined)
|
|
49
|
+
const wallet = fakeWallet({ 'bitcoin:disconnect': { disconnect } })
|
|
50
|
+
|
|
51
|
+
await expect(
|
|
52
|
+
new WalletStandardBitcoinAdapter(wallet).disconnect()
|
|
53
|
+
).resolves.toEqual({ revoked: true })
|
|
54
|
+
expect(disconnect).toHaveBeenCalledOnce()
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
it('reports revoked:false when the wallet exposes no bitcoin:disconnect', async () => {
|
|
58
|
+
await expect(
|
|
59
|
+
new WalletStandardBitcoinAdapter(fakeWallet()).disconnect()
|
|
60
|
+
).resolves.toEqual({ revoked: false })
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
it('propagates a failing revoke instead of reporting success', async () => {
|
|
64
|
+
const disconnect = vi.fn().mockRejectedValue(new Error('wallet said no'))
|
|
65
|
+
const wallet = fakeWallet({ 'bitcoin:disconnect': { disconnect } })
|
|
66
|
+
|
|
67
|
+
await expect(
|
|
68
|
+
new WalletStandardBitcoinAdapter(wallet).disconnect()
|
|
69
|
+
).rejects.toThrow('wallet said no')
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
it('drops the cached accounts so a later sign re-authorizes', async () => {
|
|
73
|
+
const wallet = fakeWallet({
|
|
74
|
+
'bitcoin:disconnect': { disconnect: vi.fn().mockResolvedValue(undefined) }
|
|
75
|
+
})
|
|
76
|
+
const adapter = new WalletStandardBitcoinAdapter(wallet)
|
|
77
|
+
|
|
78
|
+
await adapter.getAccounts()
|
|
79
|
+
await adapter.disconnect()
|
|
80
|
+
await adapter.getAccounts()
|
|
81
|
+
|
|
82
|
+
// Two authorize calls: the cache must not survive the disconnect.
|
|
83
|
+
expect(wallet.features['bitcoin:connect']?.connect).toHaveBeenCalledTimes(2)
|
|
84
|
+
})
|
|
85
|
+
})
|
|
86
|
+
|
|
43
87
|
describe('WalletStandardBitcoinAdapter', () => {
|
|
44
88
|
it('getAccounts connects and maps accounts to hex publicKey', async () => {
|
|
45
89
|
const wallet = fakeWallet()
|
|
@@ -53,12 +53,23 @@ interface BitcoinSignTransactionFeature {
|
|
|
53
53
|
}): Promise<{ psbt: Uint8Array }[]>
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
+
/**
|
|
57
|
+
* Revokes the origin's authorization — NOT merely a local session reset. The
|
|
58
|
+
* bitcoin-wallet-standard `disconnect` defaults to `revokeSession: true`, so
|
|
59
|
+
* after it resolves the wallet stops serving this origin's granted accounts
|
|
60
|
+
* and the next `bitcoin:connect` is a real prompt again.
|
|
61
|
+
*/
|
|
62
|
+
interface BitcoinDisconnectFeature {
|
|
63
|
+
disconnect(): Promise<void>
|
|
64
|
+
}
|
|
65
|
+
|
|
56
66
|
/** The handle the injected transport passes in (a discovered `bitcoin:*` wallet). */
|
|
57
67
|
export interface WalletStandardBitcoinWallet {
|
|
58
68
|
name: string
|
|
59
69
|
accounts: readonly WalletStandardBitcoinAccount[]
|
|
60
70
|
features: Record<string, unknown> & {
|
|
61
71
|
'bitcoin:connect'?: BitcoinConnectFeature
|
|
72
|
+
'bitcoin:disconnect'?: BitcoinDisconnectFeature
|
|
62
73
|
'bitcoin:signMessage'?: BitcoinSignMessageFeature
|
|
63
74
|
'bitcoin:signTransaction'?: BitcoinSignTransactionFeature
|
|
64
75
|
}
|
|
@@ -159,9 +170,26 @@ export class WalletStandardBitcoinAdapter implements BitcoinTransportAdapter {
|
|
|
159
170
|
return bytesToBase64(result.psbt)
|
|
160
171
|
}
|
|
161
172
|
|
|
162
|
-
|
|
173
|
+
/**
|
|
174
|
+
* Revoke the origin's authorization, then drop the local cache.
|
|
175
|
+
*
|
|
176
|
+
* Previously this ONLY cleared `this.accounts` and resolved — the wallet was
|
|
177
|
+
* never told. That made every caller's "disconnect" a silent no-op: the grant
|
|
178
|
+
* survived, so a subsequent `bitcoin:connect` replayed it and returned the
|
|
179
|
+
* same account. `revoked` reports whether the wallet actually acted, because
|
|
180
|
+
* revoking is destructive and callers must distinguish "grant is gone" from
|
|
181
|
+
* "nothing happened" (a wallet exposing no `bitcoin:disconnect` yields
|
|
182
|
+
* `false`, and the local cache clear alone cannot be relied on).
|
|
183
|
+
*/
|
|
184
|
+
async disconnect(): Promise<{ revoked: boolean }> {
|
|
185
|
+
const feature = this.wallet.features['bitcoin:disconnect']
|
|
186
|
+
let revoked = false
|
|
187
|
+
if (feature) {
|
|
188
|
+
await feature.disconnect()
|
|
189
|
+
revoked = true
|
|
190
|
+
}
|
|
163
191
|
this.accounts = null
|
|
164
|
-
return
|
|
192
|
+
return { revoked }
|
|
165
193
|
}
|
|
166
194
|
|
|
167
195
|
/** Look up the wallet-native account for an address, connecting first if needed. */
|
|
@@ -164,18 +164,39 @@ describe('BitcoinNamespace', () => {
|
|
|
164
164
|
expect(result).toBe(signature)
|
|
165
165
|
})
|
|
166
166
|
|
|
167
|
-
it('delegates disconnect and
|
|
167
|
+
it('delegates disconnect and reports what the adapter revoked', async () => {
|
|
168
168
|
const adapter = fakeAdapter()
|
|
169
|
-
|
|
169
|
+
adapter.disconnect.mockResolvedValue({ revoked: true })
|
|
170
|
+
await expect(new BitcoinNamespace(adapter).disconnect()).resolves.toEqual({
|
|
171
|
+
revoked: true
|
|
172
|
+
})
|
|
170
173
|
expect(adapter.disconnect).toHaveBeenCalledOnce()
|
|
174
|
+
})
|
|
171
175
|
|
|
176
|
+
// An adapter with no `disconnect` revoked nothing. Reporting `revoked: false`
|
|
177
|
+
// (rather than undefined) keeps callers from treating "no-op" as "grant is
|
|
178
|
+
// gone" and re-connecting for a prompt that will never appear.
|
|
179
|
+
// An adapter written against the previous `Promise<void>` signature still
|
|
180
|
+
// compiles and must not be read as having revoked anything — assuming a
|
|
181
|
+
// revoke would send the caller into destructive-path handling with the grant
|
|
182
|
+
// intact.
|
|
183
|
+
it('normalizes a legacy void-returning disconnect to revoked:false', async () => {
|
|
184
|
+
const adapter = fakeAdapter()
|
|
185
|
+
adapter.disconnect.mockResolvedValue(undefined)
|
|
186
|
+
await expect(new BitcoinNamespace(adapter).disconnect()).resolves.toEqual({
|
|
187
|
+
revoked: false
|
|
188
|
+
})
|
|
189
|
+
})
|
|
190
|
+
|
|
191
|
+
it('reports revoked:false when the adapter has no disconnect', async () => {
|
|
192
|
+
const adapter = fakeAdapter()
|
|
172
193
|
const noDisconnect: BitcoinTransportAdapter = {
|
|
173
194
|
getAccounts: adapter.getAccounts,
|
|
174
195
|
signMessage: adapter.signMessage
|
|
175
196
|
}
|
|
176
197
|
await expect(
|
|
177
198
|
new BitcoinNamespace(noDisconnect).disconnect()
|
|
178
|
-
).resolves.
|
|
199
|
+
).resolves.toEqual({ revoked: false })
|
|
179
200
|
})
|
|
180
201
|
|
|
181
202
|
it('delegates signPsbt to the adapter', async () => {
|
package/src/bitcoin-namespace.ts
CHANGED
|
@@ -102,8 +102,19 @@ export class BitcoinNamespace {
|
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
/** Release any session resources the adapter holds. */
|
|
105
|
-
|
|
106
|
-
|
|
105
|
+
/**
|
|
106
|
+
* Release the session. Returns whether the origin's authorization was
|
|
107
|
+
* actually revoked at the wallet, so a caller re-connecting for a fresh
|
|
108
|
+
* prompt can tell that nothing changed rather than assuming the grant is gone.
|
|
109
|
+
*
|
|
110
|
+
* Normalizes to `{ revoked: false }` for an adapter that implements no
|
|
111
|
+
* `disconnect` AND for one written against the older `Promise<void>`
|
|
112
|
+
* signature — neither reported a revoke, and assuming one would send the
|
|
113
|
+
* caller into its destructive-path error handling with the grant intact.
|
|
114
|
+
*/
|
|
115
|
+
async disconnect(): Promise<{ revoked: boolean }> {
|
|
116
|
+
const result = await this.adapter.disconnect?.()
|
|
117
|
+
return result ?? { revoked: false }
|
|
107
118
|
}
|
|
108
119
|
|
|
109
120
|
private unsupported(method: string): WalletConnectorError {
|