@multiplatform.one/web3 7.24.0 → 7.25.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/README.md +33 -0
- package/dist/cjs/bridge/AuthBridge.cjs +124 -0
- package/dist/cjs/bridge/AuthBridge.native.js +186 -0
- package/dist/cjs/bridge/AuthBridge.native.js.map +1 -0
- package/dist/cjs/bridge/BridgeClient.cjs +12 -9
- package/dist/cjs/bridge/BridgeClient.native.js +17 -12
- package/dist/cjs/bridge/BridgeClient.native.js.map +1 -1
- package/dist/cjs/bridge/BridgeHost.cjs +11 -3
- package/dist/cjs/bridge/BridgeHost.native.js +11 -3
- package/dist/cjs/bridge/BridgeHost.native.js.map +1 -1
- package/dist/cjs/bridge/GpgBridge.cjs +61 -0
- package/dist/cjs/bridge/GpgBridge.native.js +111 -0
- package/dist/cjs/bridge/GpgBridge.native.js.map +1 -0
- package/dist/cjs/bridge/SuiBridge.cjs +51 -0
- package/dist/cjs/bridge/SuiBridge.native.js +99 -0
- package/dist/cjs/bridge/SuiBridge.native.js.map +1 -0
- package/dist/cjs/bridge/authTypes.cjs +28 -0
- package/dist/cjs/bridge/authTypes.native.js +31 -0
- package/dist/cjs/bridge/authTypes.native.js.map +1 -0
- package/dist/cjs/bridge/core.cjs +65 -0
- package/dist/cjs/bridge/core.native.js +68 -0
- package/dist/cjs/bridge/core.native.js.map +1 -0
- package/dist/cjs/bridge/hosting.cjs +91 -0
- package/dist/cjs/bridge/hosting.native.js +117 -0
- package/dist/cjs/bridge/hosting.native.js.map +1 -0
- package/dist/cjs/bridge/index.cjs +3 -17
- package/dist/cjs/bridge/index.native.js +2 -16
- package/dist/cjs/bridge/index.native.js.map +1 -1
- package/dist/cjs/bridge/nativeHost.cjs +91 -0
- package/dist/cjs/bridge/nativeHost.native.js +118 -0
- package/dist/cjs/bridge/nativeHost.native.js.map +1 -0
- package/dist/cjs/bridge/protocol.cjs +30 -1
- package/dist/cjs/bridge/protocol.native.js +147 -1
- package/dist/cjs/bridge/protocol.native.js.map +1 -1
- package/dist/cjs/index.cjs +1 -0
- package/dist/cjs/index.native.js +1 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/providers/WalletProvider.cjs +2 -0
- package/dist/cjs/providers/WalletProvider.native.js +123 -90
- package/dist/cjs/providers/WalletProvider.native.js.map +1 -1
- package/dist/cjs/providers/index.cjs +1 -0
- package/dist/cjs/providers/index.native.js +1 -0
- package/dist/cjs/providers/index.native.js.map +1 -1
- package/dist/cjs/providers/native/deepLink.cjs +40 -23
- package/dist/cjs/providers/native/deepLink.native.js +43 -25
- package/dist/cjs/providers/native/deepLink.native.js.map +1 -1
- package/dist/cjs/providers/native/inject.cjs +2 -4
- package/dist/cjs/providers/native/inject.native.js +2 -4
- package/dist/cjs/providers/native/inject.native.js.map +1 -1
- package/dist/cjs/providers/walletBridge.cjs +35 -0
- package/dist/cjs/providers/walletBridge.native.js +38 -0
- package/dist/cjs/providers/walletBridge.native.js.map +1 -0
- package/dist/cjs/providers/walletConfig.native.js.map +1 -1
- package/dist/esm/bridge/AuthBridge.mjs +99 -0
- package/dist/esm/bridge/AuthBridge.mjs.map +1 -0
- package/dist/esm/bridge/AuthBridge.native.js +158 -0
- package/dist/esm/bridge/AuthBridge.native.js.map +1 -0
- package/dist/esm/bridge/BridgeClient.mjs +13 -10
- package/dist/esm/bridge/BridgeClient.mjs.map +1 -1
- package/dist/esm/bridge/BridgeClient.native.js +18 -13
- package/dist/esm/bridge/BridgeClient.native.js.map +1 -1
- package/dist/esm/bridge/BridgeHost.mjs +12 -4
- package/dist/esm/bridge/BridgeHost.mjs.map +1 -1
- package/dist/esm/bridge/BridgeHost.native.js +12 -4
- package/dist/esm/bridge/BridgeHost.native.js.map +1 -1
- package/dist/esm/bridge/GpgBridge.mjs +36 -0
- package/dist/esm/bridge/GpgBridge.mjs.map +1 -0
- package/dist/esm/bridge/GpgBridge.native.js +83 -0
- package/dist/esm/bridge/GpgBridge.native.js.map +1 -0
- package/dist/esm/bridge/SuiBridge.mjs +26 -0
- package/dist/esm/bridge/SuiBridge.mjs.map +1 -0
- package/dist/esm/bridge/SuiBridge.native.js +71 -0
- package/dist/esm/bridge/SuiBridge.native.js.map +1 -0
- package/dist/esm/bridge/authTypes.mjs +3 -0
- package/dist/esm/bridge/authTypes.mjs.map +1 -0
- package/dist/esm/bridge/authTypes.native.js +3 -0
- package/dist/esm/bridge/authTypes.native.js.map +1 -0
- package/dist/esm/bridge/core.mjs +17 -0
- package/dist/esm/bridge/core.mjs.map +1 -0
- package/dist/esm/bridge/core.native.js +17 -0
- package/dist/esm/bridge/core.native.js.map +1 -0
- package/dist/esm/bridge/hosting.mjs +62 -0
- package/dist/esm/bridge/hosting.mjs.map +1 -0
- package/dist/esm/bridge/hosting.native.js +85 -0
- package/dist/esm/bridge/hosting.native.js.map +1 -0
- package/dist/esm/bridge/index.mjs +2 -9
- package/dist/esm/bridge/index.mjs.map +1 -1
- package/dist/esm/bridge/index.native.js +2 -9
- package/dist/esm/bridge/index.native.js.map +1 -1
- package/dist/esm/bridge/nativeHost.mjs +65 -0
- package/dist/esm/bridge/nativeHost.mjs.map +1 -0
- package/dist/esm/bridge/nativeHost.native.js +89 -0
- package/dist/esm/bridge/nativeHost.native.js.map +1 -0
- package/dist/esm/bridge/protocol.mjs +28 -2
- package/dist/esm/bridge/protocol.mjs.map +1 -1
- package/dist/esm/bridge/protocol.native.js +145 -2
- package/dist/esm/bridge/protocol.native.js.map +1 -1
- package/dist/esm/index.mjs +2 -2
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +2 -2
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/providers/WalletProvider.mjs +2 -1
- package/dist/esm/providers/WalletProvider.mjs.map +1 -1
- package/dist/esm/providers/WalletProvider.native.js +125 -93
- package/dist/esm/providers/WalletProvider.native.js.map +1 -1
- package/dist/esm/providers/index.mjs +2 -2
- package/dist/esm/providers/index.mjs.map +1 -1
- package/dist/esm/providers/index.native.js +2 -2
- package/dist/esm/providers/index.native.js.map +1 -1
- package/dist/esm/providers/native/deepLink.mjs +36 -24
- package/dist/esm/providers/native/deepLink.mjs.map +1 -1
- package/dist/esm/providers/native/deepLink.native.js +39 -26
- package/dist/esm/providers/native/deepLink.native.js.map +1 -1
- package/dist/esm/providers/native/inject.mjs +1 -3
- package/dist/esm/providers/native/inject.mjs.map +1 -1
- package/dist/esm/providers/native/inject.native.js +1 -3
- package/dist/esm/providers/native/inject.native.js.map +1 -1
- package/dist/esm/providers/walletBridge.mjs +9 -0
- package/dist/esm/providers/walletBridge.mjs.map +1 -0
- package/dist/esm/providers/walletBridge.native.js +9 -0
- package/dist/esm/providers/walletBridge.native.js.map +1 -0
- package/dist/esm/providers/walletConfig.mjs.map +1 -1
- package/dist/esm/providers/walletConfig.native.js.map +1 -1
- package/dist/jsx/bridge/AuthBridge.mjs +99 -0
- package/dist/jsx/bridge/AuthBridge.mjs.map +1 -0
- package/dist/jsx/bridge/AuthBridge.native.js +186 -0
- package/dist/jsx/bridge/AuthBridge.native.js.map +1 -0
- package/dist/jsx/bridge/BridgeClient.mjs +13 -10
- package/dist/jsx/bridge/BridgeClient.mjs.map +1 -1
- package/dist/jsx/bridge/BridgeClient.native.js +17 -12
- package/dist/jsx/bridge/BridgeClient.native.js.map +1 -1
- package/dist/jsx/bridge/BridgeHost.mjs +12 -4
- package/dist/jsx/bridge/BridgeHost.mjs.map +1 -1
- package/dist/jsx/bridge/BridgeHost.native.js +11 -3
- package/dist/jsx/bridge/BridgeHost.native.js.map +1 -1
- package/dist/jsx/bridge/GpgBridge.mjs +36 -0
- package/dist/jsx/bridge/GpgBridge.mjs.map +1 -0
- package/dist/jsx/bridge/GpgBridge.native.js +111 -0
- package/dist/jsx/bridge/GpgBridge.native.js.map +1 -0
- package/dist/jsx/bridge/SuiBridge.mjs +26 -0
- package/dist/jsx/bridge/SuiBridge.mjs.map +1 -0
- package/dist/jsx/bridge/SuiBridge.native.js +99 -0
- package/dist/jsx/bridge/SuiBridge.native.js.map +1 -0
- package/dist/jsx/bridge/authTypes.mjs +3 -0
- package/dist/jsx/bridge/authTypes.mjs.map +1 -0
- package/dist/jsx/bridge/authTypes.native.js +31 -0
- package/dist/jsx/bridge/authTypes.native.js.map +1 -0
- package/dist/jsx/bridge/core.mjs +17 -0
- package/dist/jsx/bridge/core.mjs.map +1 -0
- package/dist/jsx/bridge/core.native.js +68 -0
- package/dist/jsx/bridge/core.native.js.map +1 -0
- package/dist/jsx/bridge/hosting.mjs +62 -0
- package/dist/jsx/bridge/hosting.mjs.map +1 -0
- package/dist/jsx/bridge/hosting.native.js +117 -0
- package/dist/jsx/bridge/hosting.native.js.map +1 -0
- package/dist/jsx/bridge/index.mjs +2 -9
- package/dist/jsx/bridge/index.mjs.map +1 -1
- package/dist/jsx/bridge/index.native.js +2 -16
- package/dist/jsx/bridge/index.native.js.map +1 -1
- package/dist/jsx/bridge/nativeHost.mjs +65 -0
- package/dist/jsx/bridge/nativeHost.mjs.map +1 -0
- package/dist/jsx/bridge/nativeHost.native.js +118 -0
- package/dist/jsx/bridge/nativeHost.native.js.map +1 -0
- package/dist/jsx/bridge/protocol.mjs +28 -2
- package/dist/jsx/bridge/protocol.mjs.map +1 -1
- package/dist/jsx/bridge/protocol.native.js +147 -1
- package/dist/jsx/bridge/protocol.native.js.map +1 -1
- package/dist/jsx/index.js +2 -2
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +2 -2
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +1 -0
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/providers/WalletProvider.mjs +2 -1
- package/dist/jsx/providers/WalletProvider.mjs.map +1 -1
- package/dist/jsx/providers/WalletProvider.native.js +123 -90
- package/dist/jsx/providers/WalletProvider.native.js.map +1 -1
- package/dist/jsx/providers/index.mjs +2 -2
- package/dist/jsx/providers/index.mjs.map +1 -1
- package/dist/jsx/providers/index.native.js +1 -0
- package/dist/jsx/providers/index.native.js.map +1 -1
- package/dist/jsx/providers/native/deepLink.mjs +36 -24
- package/dist/jsx/providers/native/deepLink.mjs.map +1 -1
- package/dist/jsx/providers/native/deepLink.native.js +43 -25
- package/dist/jsx/providers/native/deepLink.native.js.map +1 -1
- package/dist/jsx/providers/native/inject.mjs +1 -3
- package/dist/jsx/providers/native/inject.mjs.map +1 -1
- package/dist/jsx/providers/native/inject.native.js +2 -4
- package/dist/jsx/providers/native/inject.native.js.map +1 -1
- package/dist/jsx/providers/walletBridge.mjs +9 -0
- package/dist/jsx/providers/walletBridge.mjs.map +1 -0
- package/dist/jsx/providers/walletBridge.native.js +38 -0
- package/dist/jsx/providers/walletBridge.native.js.map +1 -0
- package/dist/jsx/providers/walletConfig.mjs.map +1 -1
- package/dist/jsx/providers/walletConfig.native.js.map +1 -1
- package/docs/bridge-protocol.md +485 -0
- package/package.json +14 -6
- package/src/bridge/AuthBridge.ts +146 -0
- package/src/bridge/BridgeClient.spec.ts +12 -0
- package/src/bridge/BridgeClient.ts +15 -10
- package/src/bridge/BridgeHost.spec.ts +20 -4
- package/src/bridge/BridgeHost.ts +16 -5
- package/src/bridge/GpgBridge.ts +49 -0
- package/src/bridge/SuiBridge.ts +34 -0
- package/src/bridge/authTypes.ts +76 -0
- package/src/bridge/core.ts +42 -0
- package/src/bridge/hosting.spec.ts +98 -0
- package/src/bridge/hosting.ts +99 -0
- package/src/bridge/index.ts +1 -8
- package/src/bridge/nativeHost.spec.ts +165 -0
- package/src/bridge/nativeHost.ts +120 -0
- package/src/bridge/protocol.spec.ts +24 -1
- package/src/bridge/protocol.ts +44 -1
- package/src/index.ts +2 -0
- package/src/providers/WalletProvider.native.tsx +139 -85
- package/src/providers/WalletProvider.tsx +1 -1
- package/src/providers/index.ts +2 -0
- package/src/providers/native/deepLink.spec.ts +73 -1
- package/src/providers/native/deepLink.ts +76 -28
- package/src/providers/native/inject.ts +1 -9
- package/src/providers/walletBridge.ts +24 -0
- package/src/providers/walletConfig.ts +15 -1
- package/types/bridge/AuthBridge.d.ts +58 -0
- package/types/bridge/AuthBridge.d.ts.map +1 -0
- package/types/bridge/BridgeClient.d.ts +3 -1
- package/types/bridge/BridgeClient.d.ts.map +1 -1
- package/types/bridge/BridgeHost.d.ts +1 -1
- package/types/bridge/BridgeHost.d.ts.map +1 -1
- package/types/bridge/GpgBridge.d.ts +23 -0
- package/types/bridge/GpgBridge.d.ts.map +1 -0
- package/types/bridge/SuiBridge.d.ts +18 -0
- package/types/bridge/SuiBridge.d.ts.map +1 -0
- package/types/bridge/authTypes.d.ts +71 -0
- package/types/bridge/authTypes.d.ts.map +1 -0
- package/types/bridge/core.d.ts +16 -0
- package/types/bridge/core.d.ts.map +1 -0
- package/types/bridge/hosting.d.ts +34 -0
- package/types/bridge/hosting.d.ts.map +1 -0
- package/types/bridge/index.d.ts +1 -8
- package/types/bridge/index.d.ts.map +1 -1
- package/types/bridge/nativeHost.d.ts +55 -0
- package/types/bridge/nativeHost.d.ts.map +1 -0
- package/types/bridge/protocol.d.ts +34 -1
- package/types/bridge/protocol.d.ts.map +1 -1
- package/types/index.d.ts +1 -1
- package/types/index.d.ts.map +1 -1
- package/types/providers/WalletProvider.d.ts +1 -0
- package/types/providers/WalletProvider.d.ts.map +1 -1
- package/types/providers/WalletProvider.native.d.ts +2 -1
- package/types/providers/WalletProvider.native.d.ts.map +1 -1
- package/types/providers/index.d.ts +1 -1
- package/types/providers/index.d.ts.map +1 -1
- package/types/providers/native/deepLink.d.ts +29 -4
- package/types/providers/native/deepLink.d.ts.map +1 -1
- package/types/providers/native/inject.d.ts +1 -7
- package/types/providers/native/inject.d.ts.map +1 -1
- package/types/providers/walletBridge.d.ts +17 -0
- package/types/providers/walletBridge.d.ts.map +1 -0
- package/types/providers/walletConfig.d.ts +18 -1
- package/types/providers/walletConfig.d.ts.map +1 -1
package/README.md
CHANGED
|
@@ -243,6 +243,39 @@ React Native builds don't need it: the native `WalletProvider` renders the
|
|
|
243
243
|
wallet UI from `assets/webview.html`, which this package builds with the
|
|
244
244
|
plugin.
|
|
245
245
|
|
|
246
|
+
## Native apps: the WebView bridge
|
|
247
|
+
|
|
248
|
+
A native app does not link wallet SDKs. The native `WalletProvider` (the
|
|
249
|
+
`./native` entry) loads the wallet UI, `assets/webview.html`, in a WebView and
|
|
250
|
+
talks to it over a JSON bridge: `evm` (EIP-1193), `solana`, `sui` and `gpg`
|
|
251
|
+
signing, and `auth`, the Keycloak wallet sign-in. Everything runs on
|
|
252
|
+
`react-native-webview` and `Linking`, so stock Expo Go runs it.
|
|
253
|
+
|
|
254
|
+
Serve `webview.html` over https and set `webViewUrl` to it. The page's host
|
|
255
|
+
is the sign-in message's domain and the host the Keycloak nonce cookie is set
|
|
256
|
+
for, so it must be in the realm's `siww.allowedDomains` (SHC Keycloak) or
|
|
257
|
+
`wallet.allowedDomains` (mpo Keycloak), and its origin in the client's web
|
|
258
|
+
origins. The provider refuses any other URL; plain http is accepted only on
|
|
259
|
+
`localhost`, `127.0.0.1`, `[::1]` and `10.0.2.2`, in development builds.
|
|
260
|
+
|
|
261
|
+
```tsx
|
|
262
|
+
import { useWalletBridge } from "@multiplatform.one/web3";
|
|
263
|
+
|
|
264
|
+
const { auth, sui, gpg } = useWalletBridge();
|
|
265
|
+
const outcome = await auth.signIn({
|
|
266
|
+
keycloak: { baseUrl: "https://account.example.com", realm: "main", clientId: "siwe-public" },
|
|
267
|
+
onboarding: { clientId: "wallet-onboarding", redirectUri: "myapp://auth" },
|
|
268
|
+
});
|
|
269
|
+
if (outcome.status === "signed-in") save(outcome.tokens);
|
|
270
|
+
// "profile-incomplete": Keycloak's own login was opened in the system browser
|
|
271
|
+
// to finish the profile; call signIn again once it redirects back.
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
`@multiplatform.one/web3/bridge` is the same bridge without wagmi, for a host
|
|
275
|
+
that drives the page itself. Kotlin and Swift hosts implement
|
|
276
|
+
[docs/bridge-protocol.md](docs/bridge-protocol.md), the versioned wire
|
|
277
|
+
protocol.
|
|
278
|
+
|
|
246
279
|
## Usage
|
|
247
280
|
|
|
248
281
|
```tsx
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all) __defProp(target, name, {
|
|
7
|
+
get: all[name],
|
|
8
|
+
enumerable: true
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
14
|
+
get: () => from[key],
|
|
15
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
21
|
+
value: true
|
|
22
|
+
}), mod);
|
|
23
|
+
var AuthBridge_exports = {};
|
|
24
|
+
__export(AuthBridge_exports, {
|
|
25
|
+
AuthBridge: () => AuthBridge
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(AuthBridge_exports);
|
|
28
|
+
var import_hosting = require("./hosting.cjs");
|
|
29
|
+
var import_protocol = require("./protocol.cjs");
|
|
30
|
+
class AuthBridge {
|
|
31
|
+
constructor(bridge, options) {
|
|
32
|
+
this.bridge = bridge;
|
|
33
|
+
this.options = options;
|
|
34
|
+
}
|
|
35
|
+
bridge;
|
|
36
|
+
options;
|
|
37
|
+
pending = null;
|
|
38
|
+
async signIn(params = {}, options = {}) {
|
|
39
|
+
const {
|
|
40
|
+
openOnboarding = true,
|
|
41
|
+
...request
|
|
42
|
+
} = options;
|
|
43
|
+
const onboarding = params.onboarding ?? this.options.defaults?.onboarding;
|
|
44
|
+
const keycloak = this.keycloak(params.keycloak);
|
|
45
|
+
const result = await this.bridge.request("auth", "signIn", {
|
|
46
|
+
family: params.family ?? "eth",
|
|
47
|
+
keycloak,
|
|
48
|
+
...(onboarding ? {
|
|
49
|
+
onboarding
|
|
50
|
+
} : {})
|
|
51
|
+
}, {
|
|
52
|
+
timeoutMs: this.options.signInTimeoutMs ?? 10 * 6e4,
|
|
53
|
+
...request
|
|
54
|
+
});
|
|
55
|
+
if (result.status !== "profile-incomplete") {
|
|
56
|
+
this.pending = null;
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
if (!isAuthorizationUrl(result.browserLogin?.url, keycloak)) {
|
|
60
|
+
throw new import_protocol.BridgeRequestError(import_protocol.BridgeErrorCode.internal, "auth.signIn: the page's browser login is not the realm's authorization endpoint");
|
|
61
|
+
}
|
|
62
|
+
this.pending = result.browserLogin;
|
|
63
|
+
if (!openOnboarding) return {
|
|
64
|
+
...result,
|
|
65
|
+
onboardingOpened: false
|
|
66
|
+
};
|
|
67
|
+
await this.options.openUrl(result.browserLogin.url);
|
|
68
|
+
return {
|
|
69
|
+
...result,
|
|
70
|
+
onboardingOpened: true
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
async refresh(params = {}) {
|
|
74
|
+
const res = await this.bridge.request("auth", "refresh", {
|
|
75
|
+
keycloak: this.keycloak(params.keycloak),
|
|
76
|
+
...(params.refreshToken ? {
|
|
77
|
+
refreshToken: params.refreshToken
|
|
78
|
+
} : {})
|
|
79
|
+
});
|
|
80
|
+
return res.tokens;
|
|
81
|
+
}
|
|
82
|
+
async logout(params = {}) {
|
|
83
|
+
await this.bridge.request("auth", "logout", {
|
|
84
|
+
keycloak: this.keycloak(params.keycloak),
|
|
85
|
+
...(params.refreshToken ? {
|
|
86
|
+
refreshToken: params.refreshToken
|
|
87
|
+
} : {})
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/** The browser login the last `profile-incomplete` answer carried, until a sign-in succeeds. */
|
|
91
|
+
get pendingOnboarding() {
|
|
92
|
+
return this.pending;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* True when `url` is Keycloak sending the browser back from that onboarding
|
|
96
|
+
* (its `state` matches) with no `error`. A matching return, cancelled or
|
|
97
|
+
* not, ends the pending onboarding, so the same return never counts twice.
|
|
98
|
+
*/
|
|
99
|
+
isOnboardingReturn(url) {
|
|
100
|
+
if (this.pending === null) return false;
|
|
101
|
+
const params = (0, import_hosting.queryParams)(url);
|
|
102
|
+
if (params.state !== this.pending.state) return false;
|
|
103
|
+
this.pending = null;
|
|
104
|
+
return params.error === void 0;
|
|
105
|
+
}
|
|
106
|
+
/** `tokensChanged` fires whenever the page's tokens for a realm and client change. */
|
|
107
|
+
onTokensChanged(handler) {
|
|
108
|
+
return this.bridge.on((ns, method, params) => {
|
|
109
|
+
if (ns === "auth" && method === "tokensChanged") handler(params);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
keycloak(keycloak) {
|
|
113
|
+
const resolved = keycloak ?? this.options.defaults?.keycloak;
|
|
114
|
+
if (!resolved) {
|
|
115
|
+
throw new import_protocol.BridgeRequestError(import_protocol.BridgeErrorCode.invalidParams, "auth: pass keycloak { baseUrl, realm, clientId } or set it in the provider defaults");
|
|
116
|
+
}
|
|
117
|
+
return resolved;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function isAuthorizationUrl(url, keycloak) {
|
|
121
|
+
if (typeof url !== "string") return false;
|
|
122
|
+
const realmUrl = `${keycloak.baseUrl.replace(/\/+$/, "")}/realms/${encodeURIComponent(keycloak.realm)}`;
|
|
123
|
+
return url.startsWith(`${realmUrl}/protocol/openid-connect/auth?`);
|
|
124
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all) __defProp(target, name, {
|
|
9
|
+
get: all[name],
|
|
10
|
+
enumerable: true
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
16
|
+
get: () => from[key],
|
|
17
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
23
|
+
value: true
|
|
24
|
+
}), mod);
|
|
25
|
+
var AuthBridge_exports = {};
|
|
26
|
+
__export(AuthBridge_exports, {
|
|
27
|
+
AuthBridge: () => AuthBridge
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(AuthBridge_exports);
|
|
30
|
+
var import_hosting = require("./hosting.native.js");
|
|
31
|
+
var import_protocol = require("./protocol.native.js");
|
|
32
|
+
function _class_call_check(instance, Constructor) {
|
|
33
|
+
if (!(instance instanceof Constructor)) {
|
|
34
|
+
throw new TypeError("Cannot call a class as a function");
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function _defineProperties(target, props) {
|
|
38
|
+
for (var i = 0; i < props.length; i++) {
|
|
39
|
+
var descriptor = props[i];
|
|
40
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
|
41
|
+
descriptor.configurable = true;
|
|
42
|
+
if ("value" in descriptor) descriptor.writable = true;
|
|
43
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function _create_class(Constructor, protoProps, staticProps) {
|
|
47
|
+
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
48
|
+
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
49
|
+
return Constructor;
|
|
50
|
+
}
|
|
51
|
+
function _define_property(obj, key, value) {
|
|
52
|
+
if (key in obj) {
|
|
53
|
+
Object.defineProperty(obj, key, {
|
|
54
|
+
value,
|
|
55
|
+
enumerable: true,
|
|
56
|
+
configurable: true,
|
|
57
|
+
writable: true
|
|
58
|
+
});
|
|
59
|
+
} else {
|
|
60
|
+
obj[key] = value;
|
|
61
|
+
}
|
|
62
|
+
return obj;
|
|
63
|
+
}
|
|
64
|
+
var AuthBridge = /* @__PURE__ */function () {
|
|
65
|
+
"use strict";
|
|
66
|
+
|
|
67
|
+
function AuthBridge2(bridge, options) {
|
|
68
|
+
_class_call_check(this, AuthBridge2);
|
|
69
|
+
_define_property(this, "bridge", void 0);
|
|
70
|
+
_define_property(this, "options", void 0);
|
|
71
|
+
_define_property(this, "pending", void 0);
|
|
72
|
+
this.bridge = bridge;
|
|
73
|
+
this.options = options;
|
|
74
|
+
this.pending = null;
|
|
75
|
+
}
|
|
76
|
+
_create_class(AuthBridge2, [{
|
|
77
|
+
key: "signIn",
|
|
78
|
+
value: async function signIn() {
|
|
79
|
+
var params = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {},
|
|
80
|
+
options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
81
|
+
var _params_onboarding, _params_family, _this_options_signInTimeoutMs;
|
|
82
|
+
var _this_options_defaults, _result_browserLogin;
|
|
83
|
+
var {
|
|
84
|
+
openOnboarding = true,
|
|
85
|
+
...request
|
|
86
|
+
} = options;
|
|
87
|
+
var onboarding = (_params_onboarding = params.onboarding) !== null && _params_onboarding !== void 0 ? _params_onboarding : (_this_options_defaults = this.options.defaults) === null || _this_options_defaults === void 0 ? void 0 : _this_options_defaults.onboarding;
|
|
88
|
+
var keycloak = this.keycloak(params.keycloak);
|
|
89
|
+
var result = await this.bridge.request("auth", "signIn", {
|
|
90
|
+
family: (_params_family = params.family) !== null && _params_family !== void 0 ? _params_family : "eth",
|
|
91
|
+
keycloak,
|
|
92
|
+
...(onboarding ? {
|
|
93
|
+
onboarding
|
|
94
|
+
} : {})
|
|
95
|
+
}, {
|
|
96
|
+
timeoutMs: (_this_options_signInTimeoutMs = this.options.signInTimeoutMs) !== null && _this_options_signInTimeoutMs !== void 0 ? _this_options_signInTimeoutMs : 10 * 6e4,
|
|
97
|
+
...request
|
|
98
|
+
});
|
|
99
|
+
if (result.status !== "profile-incomplete") {
|
|
100
|
+
this.pending = null;
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
if (!isAuthorizationUrl((_result_browserLogin = result.browserLogin) === null || _result_browserLogin === void 0 ? void 0 : _result_browserLogin.url, keycloak)) {
|
|
104
|
+
throw new import_protocol.BridgeRequestError(import_protocol.BridgeErrorCode.internal, "auth.signIn: the page's browser login is not the realm's authorization endpoint");
|
|
105
|
+
}
|
|
106
|
+
this.pending = result.browserLogin;
|
|
107
|
+
if (!openOnboarding) return {
|
|
108
|
+
...result,
|
|
109
|
+
onboardingOpened: false
|
|
110
|
+
};
|
|
111
|
+
await this.options.openUrl(result.browserLogin.url);
|
|
112
|
+
return {
|
|
113
|
+
...result,
|
|
114
|
+
onboardingOpened: true
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}, {
|
|
118
|
+
key: "refresh",
|
|
119
|
+
value: async function refresh() {
|
|
120
|
+
var params = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
121
|
+
var res = await this.bridge.request("auth", "refresh", {
|
|
122
|
+
keycloak: this.keycloak(params.keycloak),
|
|
123
|
+
...(params.refreshToken ? {
|
|
124
|
+
refreshToken: params.refreshToken
|
|
125
|
+
} : {})
|
|
126
|
+
});
|
|
127
|
+
return res.tokens;
|
|
128
|
+
}
|
|
129
|
+
}, {
|
|
130
|
+
key: "logout",
|
|
131
|
+
value: async function logout() {
|
|
132
|
+
var params = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
133
|
+
await this.bridge.request("auth", "logout", {
|
|
134
|
+
keycloak: this.keycloak(params.keycloak),
|
|
135
|
+
...(params.refreshToken ? {
|
|
136
|
+
refreshToken: params.refreshToken
|
|
137
|
+
} : {})
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}, {
|
|
141
|
+
key: "pendingOnboarding",
|
|
142
|
+
get: (/** The browser login the last `profile-incomplete` answer carried, until a sign-in succeeds. */
|
|
143
|
+
function get() {
|
|
144
|
+
return this.pending;
|
|
145
|
+
})
|
|
146
|
+
}, {
|
|
147
|
+
/**
|
|
148
|
+
* True when `url` is Keycloak sending the browser back from that onboarding
|
|
149
|
+
* (its `state` matches) with no `error`. A matching return, cancelled or
|
|
150
|
+
* not, ends the pending onboarding, so the same return never counts twice.
|
|
151
|
+
*/
|
|
152
|
+
key: "isOnboardingReturn",
|
|
153
|
+
value: function isOnboardingReturn(url) {
|
|
154
|
+
if (this.pending === null) return false;
|
|
155
|
+
var params = (0, import_hosting.queryParams)(url);
|
|
156
|
+
if (params.state !== this.pending.state) return false;
|
|
157
|
+
this.pending = null;
|
|
158
|
+
return params.error === void 0;
|
|
159
|
+
}
|
|
160
|
+
}, {
|
|
161
|
+
/** `tokensChanged` fires whenever the page's tokens for a realm and client change. */
|
|
162
|
+
key: "onTokensChanged",
|
|
163
|
+
value: function onTokensChanged(handler) {
|
|
164
|
+
return this.bridge.on(function (ns, method, params) {
|
|
165
|
+
if (ns === "auth" && method === "tokensChanged") handler(params);
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
}, {
|
|
169
|
+
key: "keycloak",
|
|
170
|
+
value: function keycloak(keycloak) {
|
|
171
|
+
var _this_options_defaults;
|
|
172
|
+
var resolved = keycloak !== null && keycloak !== void 0 ? keycloak : (_this_options_defaults = this.options.defaults) === null || _this_options_defaults === void 0 ? void 0 : _this_options_defaults.keycloak;
|
|
173
|
+
if (!resolved) {
|
|
174
|
+
throw new import_protocol.BridgeRequestError(import_protocol.BridgeErrorCode.invalidParams, "auth: pass keycloak { baseUrl, realm, clientId } or set it in the provider defaults");
|
|
175
|
+
}
|
|
176
|
+
return resolved;
|
|
177
|
+
}
|
|
178
|
+
}]);
|
|
179
|
+
return AuthBridge2;
|
|
180
|
+
}();
|
|
181
|
+
function isAuthorizationUrl(url, keycloak) {
|
|
182
|
+
if (typeof url !== "string") return false;
|
|
183
|
+
var realmUrl = `${keycloak.baseUrl.replace(/\/+$/, "")}/realms/${encodeURIComponent(keycloak.realm)}`;
|
|
184
|
+
return url.startsWith(`${realmUrl}/protocol/openid-connect/auth?`);
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=AuthBridge.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","AuthBridge_exports","__export","AuthBridge","module","exports","import_hosting","require","import_protocol","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype","_define_property","obj","AuthBridge2","bridge","options","pending","signIn","params","arguments","_params_onboarding","_params_family","_this_options_signInTimeoutMs","_this_options_defaults","_result_browserLogin","openOnboarding","request","onboarding","defaults","keycloak","result","family","timeoutMs","signInTimeoutMs","status","isAuthorizationUrl","browserLogin","url","BridgeRequestError","BridgeErrorCode","internal","onboardingOpened","openUrl","refresh","res"],"sources":["../../../src/bridge/AuthBridge.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -80,15 +80,20 @@ class BridgeClient {
|
|
|
80
80
|
this.listeners.delete(handler);
|
|
81
81
|
};
|
|
82
82
|
}
|
|
83
|
-
/**
|
|
83
|
+
/** Fail every request in flight and keep the client usable: the page they went to is gone. */
|
|
84
|
+
rejectPending(reason) {
|
|
85
|
+
const pending = Array.from(this.pending.values());
|
|
86
|
+
this.pending.clear();
|
|
87
|
+
for (const p of pending) {
|
|
88
|
+
p.cleanup();
|
|
89
|
+
p.reject(reason);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/** Reject all in-flight requests and stop listening. */
|
|
84
93
|
dispose() {
|
|
85
94
|
this.disposed = true;
|
|
86
95
|
this.unsubscribe();
|
|
87
|
-
|
|
88
|
-
p.cleanup();
|
|
89
|
-
p.reject(new Error("Bridge disposed"));
|
|
90
|
-
}
|
|
91
|
-
this.pending.clear();
|
|
96
|
+
this.rejectPending(new Error("Bridge disposed"));
|
|
92
97
|
this.listeners.clear();
|
|
93
98
|
}
|
|
94
99
|
settle(id, reject, error) {
|
|
@@ -115,7 +120,5 @@ class BridgeClient {
|
|
|
115
120
|
};
|
|
116
121
|
}
|
|
117
122
|
function toError(e) {
|
|
118
|
-
|
|
119
|
-
err.code = e.code;
|
|
120
|
-
return err;
|
|
123
|
+
return new import_protocol.BridgeRequestError(e.code, e.message, e.data);
|
|
121
124
|
}
|
|
@@ -173,19 +173,19 @@ var BridgeClient = /* @__PURE__ */function () {
|
|
|
173
173
|
};
|
|
174
174
|
}
|
|
175
175
|
}, {
|
|
176
|
-
/**
|
|
177
|
-
key: "
|
|
178
|
-
value: function
|
|
179
|
-
|
|
180
|
-
this.
|
|
176
|
+
/** Fail every request in flight and keep the client usable: the page they went to is gone. */
|
|
177
|
+
key: "rejectPending",
|
|
178
|
+
value: function rejectPending(reason) {
|
|
179
|
+
var pending = Array.from(this.pending.values());
|
|
180
|
+
this.pending.clear();
|
|
181
181
|
var _iteratorNormalCompletion = true,
|
|
182
182
|
_didIteratorError = false,
|
|
183
183
|
_iteratorError = void 0;
|
|
184
184
|
try {
|
|
185
|
-
for (var _iterator =
|
|
186
|
-
var
|
|
185
|
+
for (var _iterator = pending[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
186
|
+
var p = _step.value;
|
|
187
187
|
p.cleanup();
|
|
188
|
-
p.reject(
|
|
188
|
+
p.reject(reason);
|
|
189
189
|
}
|
|
190
190
|
} catch (err) {
|
|
191
191
|
_didIteratorError = true;
|
|
@@ -201,7 +201,14 @@ var BridgeClient = /* @__PURE__ */function () {
|
|
|
201
201
|
}
|
|
202
202
|
}
|
|
203
203
|
}
|
|
204
|
-
|
|
204
|
+
}
|
|
205
|
+
}, {
|
|
206
|
+
/** Reject all in-flight requests and stop listening. */
|
|
207
|
+
key: "dispose",
|
|
208
|
+
value: function dispose() {
|
|
209
|
+
this.disposed = true;
|
|
210
|
+
this.unsubscribe();
|
|
211
|
+
this.rejectPending(new Error("Bridge disposed"));
|
|
205
212
|
this.listeners.clear();
|
|
206
213
|
}
|
|
207
214
|
}, {
|
|
@@ -217,8 +224,6 @@ var BridgeClient = /* @__PURE__ */function () {
|
|
|
217
224
|
return BridgeClient2;
|
|
218
225
|
}();
|
|
219
226
|
function toError(e) {
|
|
220
|
-
|
|
221
|
-
err.code = e.code;
|
|
222
|
-
return err;
|
|
227
|
+
return new import_protocol.BridgeRequestError(e.code, e.message, e.data);
|
|
223
228
|
}
|
|
224
229
|
//# sourceMappingURL=BridgeClient.native.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","BridgeClient_exports","__export","BridgeClient","module","exports","import_protocol","require","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype","_define_property","obj","DEFAULT_TIMEOUT_MS","BridgeClient2","transport","_this","opts","arguments","pending","Map","listeners","Set","disposed","onMessage","message","isBridgeMessage","kind","id","p","get","delete","cleanup","error","reject","toError","resolve","result","method","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Array","from","Symbol","iterator","_step","next","done","l","ns","params","err","return"],"sources":["../../../src/bridge/BridgeClient.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,oBAAA;AAAAC,QAAA,CAAAD,oBAAA;EAAAE,YAAA,EAAAA,CAAA,KAAAA;AAAA;AAAAC,MAAA,CAAAC,OAAA,GAAAT,
|
|
1
|
+
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","BridgeClient_exports","__export","BridgeClient","module","exports","import_protocol","require","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype","_define_property","obj","DEFAULT_TIMEOUT_MS","BridgeClient2","transport","_this","opts","arguments","pending","Map","listeners","Set","disposed","onMessage","message","isBridgeMessage","kind","id","p","get","delete","cleanup","error","reject","toError","resolve","result","method","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Array","from","Symbol","iterator","_step","next","done","l","ns","params","err","return","unsubscribe","subscribe"],"sources":["../../../src/bridge/BridgeClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -46,12 +46,18 @@ class BridgeHost {
|
|
|
46
46
|
params
|
|
47
47
|
});
|
|
48
48
|
}
|
|
49
|
-
/** Tell native the host is initialized. */
|
|
49
|
+
/** Tell native the host is initialized, which protocol it speaks and what it serves. */
|
|
50
50
|
ready() {
|
|
51
|
+
const namespaces = Array.from(/* @__PURE__ */new Set([...this.handlers.keys(), "sys"]));
|
|
52
|
+
const params = {
|
|
53
|
+
protocol: import_protocol.BRIDGE_PROTOCOL_VERSION,
|
|
54
|
+
namespaces
|
|
55
|
+
};
|
|
51
56
|
this.transport.post({
|
|
52
57
|
ns: "sys",
|
|
53
58
|
kind: "event",
|
|
54
|
-
method: "ready"
|
|
59
|
+
method: "ready",
|
|
60
|
+
params
|
|
55
61
|
});
|
|
56
62
|
}
|
|
57
63
|
dispose() {
|
|
@@ -88,10 +94,12 @@ class BridgeHost {
|
|
|
88
94
|
function toBridgeError(e) {
|
|
89
95
|
if (e && typeof e === "object") {
|
|
90
96
|
const o = e;
|
|
91
|
-
|
|
97
|
+
const error = {
|
|
92
98
|
code: typeof o.code === "number" ? o.code : -32e3,
|
|
93
99
|
message: typeof o.message === "string" ? o.message : String(e)
|
|
94
100
|
};
|
|
101
|
+
if (o.data !== void 0) error.data = o.data;
|
|
102
|
+
return error;
|
|
95
103
|
}
|
|
96
104
|
return {
|
|
97
105
|
code: -32e3,
|
|
@@ -119,13 +119,19 @@ var BridgeHost = /* @__PURE__ */function () {
|
|
|
119
119
|
});
|
|
120
120
|
}
|
|
121
121
|
}, {
|
|
122
|
-
/** Tell native the host is initialized. */
|
|
122
|
+
/** Tell native the host is initialized, which protocol it speaks and what it serves. */
|
|
123
123
|
key: "ready",
|
|
124
124
|
value: function ready() {
|
|
125
|
+
var namespaces = Array.from(/* @__PURE__ */new Set([...this.handlers.keys(), "sys"]));
|
|
126
|
+
var params = {
|
|
127
|
+
protocol: import_protocol.BRIDGE_PROTOCOL_VERSION,
|
|
128
|
+
namespaces
|
|
129
|
+
};
|
|
125
130
|
this.transport.post({
|
|
126
131
|
ns: "sys",
|
|
127
132
|
kind: "event",
|
|
128
|
-
method: "ready"
|
|
133
|
+
method: "ready",
|
|
134
|
+
params
|
|
129
135
|
});
|
|
130
136
|
}
|
|
131
137
|
}, {
|
|
@@ -151,10 +157,12 @@ var BridgeHost = /* @__PURE__ */function () {
|
|
|
151
157
|
function toBridgeError(e) {
|
|
152
158
|
if (e && (typeof e === "undefined" ? "undefined" : _type_of(e)) === "object") {
|
|
153
159
|
var o = e;
|
|
154
|
-
|
|
160
|
+
var error = {
|
|
155
161
|
code: typeof o.code === "number" ? o.code : -32e3,
|
|
156
162
|
message: typeof o.message === "string" ? o.message : String(e)
|
|
157
163
|
};
|
|
164
|
+
if (o.data !== void 0) error.data = o.data;
|
|
165
|
+
return error;
|
|
158
166
|
}
|
|
159
167
|
return {
|
|
160
168
|
code: -32e3,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","BridgeHost_exports","__export","BridgeHost","module","exports","import_protocol","require","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype","_define_property","obj","_type_of","Symbol","constructor","BridgeHost2","transport","_this","handlers","Map"],"sources":["../../../src/bridge/BridgeHost.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,kBAAA;AAAAC,QAAA,CAAAD,kBAAA;EAAAE,UAAA,EAAAA,CAAA,KAAAA;AAAA;AAAAC,MAAA,CAAAC,OAAA,GAAAT,
|
|
1
|
+
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","BridgeHost_exports","__export","BridgeHost","module","exports","import_protocol","require","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype","_define_property","obj","_type_of","Symbol","constructor","BridgeHost2","transport","_this","handlers","Map","onMessage","message","isBridgeMessage","kind","id","method","ns","handler","get"],"sources":["../../../src/bridge/BridgeHost.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,kBAAA;AAAAC,QAAA,CAAAD,kBAAA;EAAAE,UAAA,EAAAA,CAAA,KAAAA;AAAA;AAAAC,MAAA,CAAAC,OAAA,GAAAT,YAOO,CAAAK,kBAAA;AAgBA,IAAAK,eAAiB,GAAAC,OAAA;AAAA,SAItBC,iBAAmDA,CAAAC,QAAA,EAAAC,WAAA;EAAtB,MAAAD,QAAA,YAAAC,WAAA;IAC3B,MAAK,IAAAC,SAAc,oCAAkC;EACvD;AAAA;AAF6B,SAHZC,iBAAWA,CAAAC,MAAI,EAAAC,KAA+B;EAC9C,SAAAC,CAAA,MAAAA,CAAA,GAAAD,KAAA,CAAAE,MAAA,EAAAD,CAAA;IAMjB,IAAAE,UAAwB,GAAAH,KAA+B,CAAAC,CAAA;IACrDE,UAAK,CAAAC,UAAa,GAAID,UAAO,CAAAC,UAAA;IAC/BD,UAAA,CAAAE,YAAA;IAAA,eAAAF,UAAA,EAAAA,UAAA,CAAAG,QAAA;IAGAC,MAAK,CAAeC,cAAgB,CAAAT,MAAwB,EAAAI,UAAA,CAAAM,GAAA,EAAAN,UAAA;EAC1D;AAAyD;AAC3D,SAAAO,cAAAd,WAAA,EAAAe,UAAA,EAAAC,WAAA;EAGA,IAAAD,UAAc,EAAAb,iBAAA,CAAAF,WAAA,CAAAiB,SAAA,EAAAF,UAAA;EACZ,IAAAC,WAAM,EAAAd,iBAAwB,CAAAF,WAAA,EAAAgB,WAAoB,CAAG;EACrD,OAAAhB,WAA4B;AAC5B;AAAyE,SAC3EkB,iBAAAC,GAAA,EAAAN,GAAA,EAAAvB,KAAA;EAEA,IAAAuB,GAAA,IAAgBM,GAAA;IACdR,MAAK,CAAAC,cAAY,CAAAO,GAAA,EAAAN,GAAA;MACjBvB,KAAK;MACPkB,UAAA;MAEiBC,YAAa;MAC5BC,QAAK;IACH;EACF;IACAS,GAAA,CAAAN,GAAM,IAAAvB,KAAU;EAChB;EACE,OAAA6B,GAAK;AACL;AAAA,SACFC,SAAAD,GAAA;EACA,uBACG;;EAGL,OAAAA,GAAA,WAAAE,MAAA,oBAAAF,GAAA,CAAAG,WAAA,KAAAD,MAAA,qBAAAF,GAAA;AAAA;AAGE,IAAA1B,UAAK,kBAAyB,YAAM;EACtC;;EACF,SAAA8B,YAAAC,SAAA;IAEA,IAAAC,KAAS;IACP3B,iBAAgB,KAAM,EAAAyB,WAAU;IAC9BL,gBAAU;IACVA,gBAA2B;IAAAA,gBACZ,CAAE,mBAAS,EAAW,KAAE;IAAOA,gBACnC,KAAS,aAAY,SAAW;IAC3C,KAAAM,SAAA,GAAAA,SAAA;IACA,IAAI,CAAAE,QAAE,GAAS,eAAiB,IAAOC,GAAE;IACzC,KAAAC,SAAO,aAAAC,OAAA;MACT,SAAAjC,eAAA,CAAAkC,eAAA,EAAAD,OAAA,KAAAA,OAAA,CAAAE,IAAA,eAAAF,OAAA,CAAAG,EAAA,KAAAH,OAAA,CAAAI,MAAA;MACA,IAAO;QAAED,EAAA;QAAAE,EAAM;QAAAD;MAAQ,IAAAJ,OAAS;MAClC,IAAAM,OAAA,GAAAV,KAAA,CAAAC,QAAA,CAAAU,GAAA,CAAAF,EAAA","ignoreList":[]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all) __defProp(target, name, {
|
|
7
|
+
get: all[name],
|
|
8
|
+
enumerable: true
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
14
|
+
get: () => from[key],
|
|
15
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
21
|
+
value: true
|
|
22
|
+
}), mod);
|
|
23
|
+
var GpgBridge_exports = {};
|
|
24
|
+
__export(GpgBridge_exports, {
|
|
25
|
+
GpgBridge: () => GpgBridge
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(GpgBridge_exports);
|
|
28
|
+
const GPG_TIMEOUT_MS = 15 * 6e4;
|
|
29
|
+
class GpgBridge {
|
|
30
|
+
constructor(bridge) {
|
|
31
|
+
this.bridge = bridge;
|
|
32
|
+
}
|
|
33
|
+
bridge;
|
|
34
|
+
/** Resolves with the armored signature followed by the armored public key. */
|
|
35
|
+
async signMessage(message, options = {}) {
|
|
36
|
+
const res = await this.bridge.request("gpg", "signMessage", {
|
|
37
|
+
message
|
|
38
|
+
}, {
|
|
39
|
+
timeoutMs: GPG_TIMEOUT_MS,
|
|
40
|
+
...options
|
|
41
|
+
});
|
|
42
|
+
return res.signature;
|
|
43
|
+
}
|
|
44
|
+
/** Hand pasted terminal output to the pending request. Rejects when it does not cover its message. */
|
|
45
|
+
async submit(signature) {
|
|
46
|
+
await this.bridge.request("gpg", "submit", {
|
|
47
|
+
signature
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
async cancel() {
|
|
51
|
+
await this.bridge.request("gpg", "cancel");
|
|
52
|
+
}
|
|
53
|
+
/** Called with the pending request whenever one is parked, and with null when it settles. */
|
|
54
|
+
onPendingChanged(handler) {
|
|
55
|
+
return this.bridge.on((ns, method, params) => {
|
|
56
|
+
if (ns === "gpg" && method === "pendingChanged") {
|
|
57
|
+
handler(params?.request ?? null);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|