@multiplatform.one/gpg 6.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.
- package/LICENSE +201 -0
- package/dist/cjs/GpgButton.cjs +56 -0
- package/dist/cjs/GpgButton.native.js +78 -0
- package/dist/cjs/GpgButton.native.js.map +1 -0
- package/dist/cjs/GpgContext.cjs +37 -0
- package/dist/cjs/GpgContext.native.js +40 -0
- package/dist/cjs/GpgContext.native.js.map +1 -0
- package/dist/cjs/GpgProvider.cjs +112 -0
- package/dist/cjs/GpgProvider.native.js +127 -0
- package/dist/cjs/GpgProvider.native.js.map +1 -0
- package/dist/cjs/SignInWithGpg.cjs +132 -0
- package/dist/cjs/SignInWithGpg.native.js +159 -0
- package/dist/cjs/SignInWithGpg.native.js.map +1 -0
- package/dist/cjs/index.cjs +54 -0
- package/dist/cjs/index.native.js +57 -0
- package/dist/cjs/index.native.js.map +1 -0
- package/dist/cjs/screens.cjs +70 -0
- package/dist/cjs/screens.native.js +79 -0
- package/dist/cjs/screens.native.js.map +1 -0
- package/dist/cjs/useGpg.cjs +70 -0
- package/dist/cjs/useGpg.native.js +77 -0
- package/dist/cjs/useGpg.native.js.map +1 -0
- package/dist/esm/GpgButton.mjs +30 -0
- package/dist/esm/GpgButton.mjs.map +1 -0
- package/dist/esm/GpgButton.native.js +38 -0
- package/dist/esm/GpgButton.native.js.map +1 -0
- package/dist/esm/GpgContext.mjs +11 -0
- package/dist/esm/GpgContext.mjs.map +1 -0
- package/dist/esm/GpgContext.native.js +11 -0
- package/dist/esm/GpgContext.native.js.map +1 -0
- package/dist/esm/GpgProvider.mjs +86 -0
- package/dist/esm/GpgProvider.mjs.map +1 -0
- package/dist/esm/GpgProvider.native.js +98 -0
- package/dist/esm/GpgProvider.native.js.map +1 -0
- package/dist/esm/SignInWithGpg.mjs +107 -0
- package/dist/esm/SignInWithGpg.mjs.map +1 -0
- package/dist/esm/SignInWithGpg.native.js +120 -0
- package/dist/esm/SignInWithGpg.native.js.map +1 -0
- package/dist/esm/index.mjs +8 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/index.native.js +8 -0
- package/dist/esm/index.native.js.map +1 -0
- package/dist/esm/screens.mjs +32 -0
- package/dist/esm/screens.mjs.map +1 -0
- package/dist/esm/screens.native.js +38 -0
- package/dist/esm/screens.native.js.map +1 -0
- package/dist/esm/useGpg.mjs +45 -0
- package/dist/esm/useGpg.mjs.map +1 -0
- package/dist/esm/useGpg.native.js +49 -0
- package/dist/esm/useGpg.native.js.map +1 -0
- package/package.json +73 -0
- package/src/GpgButton.tsx +37 -0
- package/src/GpgContext.tsx +49 -0
- package/src/GpgProvider.tsx +126 -0
- package/src/SignInWithGpg.tsx +101 -0
- package/src/index.ts +14 -0
- package/src/screens.tsx +50 -0
- package/src/useGpg.ts +57 -0
|
@@ -0,0 +1,77 @@
|
|
|
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 useGpg_exports = {};
|
|
26
|
+
__export(useGpg_exports, {
|
|
27
|
+
useGpg: () => useGpg
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(useGpg_exports);
|
|
30
|
+
var import_react = require("react");
|
|
31
|
+
var import_GpgContext = require("./GpgContext.native.js");
|
|
32
|
+
var useGpg = function useGpg2() {
|
|
33
|
+
var gpg = (0, import_react.useContext)(import_GpgContext.GpgContext);
|
|
34
|
+
if (!gpg) {
|
|
35
|
+
return {
|
|
36
|
+
message: null,
|
|
37
|
+
command: null,
|
|
38
|
+
status: import_GpgContext.GpgStatusState.ERROR,
|
|
39
|
+
error: new Error("useGpg hook must be inside a GpgProvider."),
|
|
40
|
+
isLoading: false,
|
|
41
|
+
isSuccess: false,
|
|
42
|
+
isError: true,
|
|
43
|
+
isReady: false,
|
|
44
|
+
signIn: function signIn2() {
|
|
45
|
+
return Promise.reject();
|
|
46
|
+
},
|
|
47
|
+
reset: function reset() {}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
var {
|
|
51
|
+
nonce,
|
|
52
|
+
message,
|
|
53
|
+
command,
|
|
54
|
+
status,
|
|
55
|
+
signIn,
|
|
56
|
+
resetStatus
|
|
57
|
+
} = gpg;
|
|
58
|
+
var isLoading = status === import_GpgContext.GpgStatusState.LOADING || nonce.isLoading;
|
|
59
|
+
var isSuccess = status === import_GpgContext.GpgStatusState.SUCCESS;
|
|
60
|
+
var isError = status === import_GpgContext.GpgStatusState.ERROR;
|
|
61
|
+
var isReady = !!message && !isLoading;
|
|
62
|
+
return {
|
|
63
|
+
message,
|
|
64
|
+
command,
|
|
65
|
+
status,
|
|
66
|
+
error: nonce.error,
|
|
67
|
+
isLoading,
|
|
68
|
+
isSuccess,
|
|
69
|
+
isError,
|
|
70
|
+
isReady,
|
|
71
|
+
signIn,
|
|
72
|
+
reset: function reset() {
|
|
73
|
+
return resetStatus();
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=useGpg.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","useGpg_exports","__export","useGpg","module","exports","import_react","require","import_GpgContext","useGpg2","gpg","useContext","GpgContext","message","command","status","GpgStatusState","ERROR","error","Error","isLoading","isSuccess","isError","isReady","signIn","signIn2","Promise","reject","reset","nonce","resetStatus","LOADING","SUCCESS"],"sources":["../../src/useGpg.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,cAAA;AAAAC,QAAA,CAAAD,cAAA;EAAAE,MAAA,EAAAA,CAAA,KAAAA;AAAA;AAAAC,MAAA,CAAAC,OAAA,GAAAT,YAA2B,CAAAK,cAAA;AAC3B,IAAAK,YAAA,GAAAC,OAA2C;AAoBpC,IAAAC,iBAAsC,GAAAD,OAAA;AAC3C,IAAAJ,MAAM,YAAMM,QAAA;EACZ,IAAIC,GAAC,GAAK,IAAAJ,YAAA,CAAAK,UAAA,EAAAH,iBAAA,CAAAI,UAAA;EACR,KAAAF,GAAA,EAAO;IAAA,OACL;MACAG,OAAA,EAAS;MACTC,OAAA,EAAQ;MACRC,MAAA,EAAOP,iBAAU,CAAAQ,cAAA,CAAAC,KAAA;MACjBC,KAAA,MAAWC,KAAA;MACXC,SAAA,EAAW;MACXC,SAAS;MACTC,OAAA,EAAS;MACTC,OAAA,EAAQ,KAAM;MACdC,MAAA,EAAO,SAAMC,QAAA;QAAC,OAAAC,OAAA,CAAAC,MAAA;MAChB;MACFC,KAAA,WAAAA,MAAA,GAEA;IACA;EACA;EACA;IAAMC,KAAA;IAAAhB,OAAU;IAAAC,OAAW;IAAAC,MAAA;IAAAS,MAAA;IAAAM;EAAA,CAAe,GAAApB,GAAA;EAC1C,IAAAU,SAAM,GAAUL,MAAE,KAAAP,iBAAY,CAAAQ,cAAA,CAAAe,OAAA,IAAAF,KAAA,CAAAT,SAAA;EAE9B,IAAAC,SAAO,GAAAN,MAAA,KAAAP,iBAAA,CAAAQ,cAAA,CAAAgB,OAAA;EAAA,IACLV,OAAA,GAAAP,MAAA,KAAAP,iBAAA,CAAAQ,cAAA,CAAAC,KAAA;EAAA,IACAM,OAAA,KAAAV,OAAA,KAAAO,SAAA;EAAA,OACA;IACAP,OAAO;IACPC,OAAA;IACAC,MAAA;IACAG,KAAA,EAAAW,KAAA,CAAAX,KAAA;IACAE,SAAA;IACAC,SAAA;IACAC,OAAO;IACTC,OAAA;IACFC,MAAA","ignoreList":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Button, ResetContainer, useModal } from "@multiplatform.one/connectkit";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
const GPGButton = ({
|
|
4
|
+
children
|
|
5
|
+
}) => {
|
|
6
|
+
const {
|
|
7
|
+
openScreen
|
|
8
|
+
} = useModal();
|
|
9
|
+
return /* @__PURE__ */jsx(Button, {
|
|
10
|
+
style: {
|
|
11
|
+
margin: 0
|
|
12
|
+
},
|
|
13
|
+
arrow: true,
|
|
14
|
+
onClick: e => {
|
|
15
|
+
e?.preventDefault?.();
|
|
16
|
+
openScreen("signInWithGpg");
|
|
17
|
+
},
|
|
18
|
+
children: children ?? "Sign in with GPG"
|
|
19
|
+
}, "button");
|
|
20
|
+
};
|
|
21
|
+
const GPGButtonComponent = ({
|
|
22
|
+
...props
|
|
23
|
+
}) => /* @__PURE__ */jsx(ResetContainer, {
|
|
24
|
+
children: /* @__PURE__ */jsx(GPGButton, {
|
|
25
|
+
...props
|
|
26
|
+
})
|
|
27
|
+
});
|
|
28
|
+
var GpgButton_default = GPGButtonComponent;
|
|
29
|
+
export { GPGButton, GpgButton_default as default };
|
|
30
|
+
//# sourceMappingURL=GpgButton.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Button","ResetContainer","useModal","jsx","GPGButton","children","openScreen","style","margin","arrow","onClick","e","preventDefault","GPGButtonComponent","props","GpgButton_default"],"sources":["../../src/GpgButton.tsx"],"sourcesContent":[null],"mappings":"AACA,SAASA,MAAA,EAAQC,cAAA,EAAgBC,QAAA,QAAgB;AAc7C,SAAAC,GAAA;AALG,MAAMC,SAAA,GAAmCA,CAAC;EAAEC;AAAS,MAAM;EAGhE,MAAM;IAAEC;EAAW,IAAIJ,QAAA,CAAS;EAChC,OACE,eAAAC,GAAA,CAACH,MAAA;IAECO,KAAA,EAAO;MAAEC,MAAA,EAAQ;IAAE;IACnBC,KAAA,EAAK;IAGLC,OAAA,EAAUC,CAAA,IAAwC;MAChDA,CAAA,EAAGC,cAAA,GAAiB;MACpBN,UAAA,CAAW,eAAe;IAC5B;IAECD,QAAA,EAAAA,QAAA,IAAY;EAAA,GAVT,QAWN;AAEJ;AAEA,MAAMQ,kBAAA,GAA4CA,CAAC;EAAE,GAAGC;AAAM,MAC5D,eAAAX,GAAA,CAACF,cAAA;EACCI,QAAA,iBAAAF,GAAA,CAACC,SAAA;IAAW,GAAGU;EAAA,CAAO;AAAA,CACxB;AAEF,IAAOC,iBAAA,GAAQF,kBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { Button, ResetContainer, useModal } from "@multiplatform.one/connectkit";
|
|
4
|
+
var GPGButton = function GPGButton2(param) {
|
|
5
|
+
var {
|
|
6
|
+
children
|
|
7
|
+
} = param;
|
|
8
|
+
var {
|
|
9
|
+
openScreen
|
|
10
|
+
} = useModal();
|
|
11
|
+
return /* @__PURE__ */_jsx(Button, {
|
|
12
|
+
style: {
|
|
13
|
+
margin: 0
|
|
14
|
+
},
|
|
15
|
+
arrow: true,
|
|
16
|
+
// preventDefault so we never submit a surrounding host <form> (e.g. keycloak's
|
|
17
|
+
// login form) — the underlying styled button can render as type=submit.
|
|
18
|
+
onClick: function onClick(e) {
|
|
19
|
+
var _e_preventDefault;
|
|
20
|
+
e === null || e === void 0 ? void 0 : (_e_preventDefault = e.preventDefault) === null || _e_preventDefault === void 0 ? void 0 : _e_preventDefault.call(e);
|
|
21
|
+
openScreen("signInWithGpg");
|
|
22
|
+
},
|
|
23
|
+
children: children !== null && children !== void 0 ? children : "Sign in with GPG"
|
|
24
|
+
}, "button");
|
|
25
|
+
};
|
|
26
|
+
var GPGButtonComponent = function GPGButtonComponent2(param) {
|
|
27
|
+
var {
|
|
28
|
+
...props
|
|
29
|
+
} = param;
|
|
30
|
+
return /* @__PURE__ */_jsx(ResetContainer, {
|
|
31
|
+
children: /* @__PURE__ */_jsx(GPGButton, {
|
|
32
|
+
...props
|
|
33
|
+
})
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
var GpgButton_default = GPGButtonComponent;
|
|
37
|
+
export { GPGButton, GpgButton_default as default };
|
|
38
|
+
//# sourceMappingURL=GpgButton.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["jsx","_jsx","React","Button","ResetContainer","useModal","GPGButton","GPGButton2","param","children","openScreen","style","margin","arrow","onClick","e","_e_preventDefault","preventDefault","call"],"sources":["../../src/GpgButton.tsx"],"sourcesContent":[null],"mappings":"AACA,SAASA,GAAA,IAAAC,IAAQ,2BAAgB;AAc7B,OAAAC,KAAA;AALG,SAAMC,MAAA,EAAAC,cAA+C,EAAAC,QAAM;AAGhE,IAAAC,SAAQ,YAAeC,UAASA,CAAAC,KAAA;EAChC;IAAAC;EACE,IAAAD,KAAA;EAAA,IAAC;IAAAE;EAAA,IAAAL,QAAA;EAAA,sBAAAJ,IAAA,CAAAE,MAAA;IAAAQ,KAEC;MACAC,MAAA,EAAK;IAAA;IAIHC,KAAA,EAAG;IACH;IAA0B;IAC5BC,OAEC,WAAAA,OAAYA,CAAAC,CAAA;MAAA,IAAAC,iBAAA;MAVTD,CAAA,aAAAA,CAAA,wBAAAC,iBAAA,GAAAD,CAAA,CAAAE,cAAA,cAAAD,iBAAA,uBAAAA,iBAAA,CAAAE,IAAA,CAAAH,CAAA;MAWNL,UAAA;IAEJ;IAEAD,QAAM,EAAAA,QAAA,KAA4C,IAAG,IAAGA,QAAM,KAC5D,SAAAA,QAAC;EAIH,GAAO","ignoreList":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createContext } from "react";
|
|
2
|
+
var GpgStatusState = /* @__PURE__ */(GpgStatusState2 => {
|
|
3
|
+
GpgStatusState2["READY"] = "ready";
|
|
4
|
+
GpgStatusState2["LOADING"] = "loading";
|
|
5
|
+
GpgStatusState2["SUCCESS"] = "success";
|
|
6
|
+
GpgStatusState2["ERROR"] = "error";
|
|
7
|
+
return GpgStatusState2;
|
|
8
|
+
})(GpgStatusState || {});
|
|
9
|
+
const GpgContext = createContext(null);
|
|
10
|
+
export { GpgContext, GpgStatusState };
|
|
11
|
+
//# sourceMappingURL=GpgContext.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createContext","GpgStatusState","GpgStatusState2","GpgContext"],"sources":["../../src/GpgContext.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,aAAA,QAAqB;AAQvB,IAAKC,cAAA,GAAL,gBAAKC,eAAA,IAAL;EACLA,eAAA,YAAQ;EACRA,eAAA,cAAU;EACVA,eAAA,cAAU;EACVA,eAAA,YAAQ;EAJE,OAAAA,eAAA;AAAA,GAAAD,cAAA;AAwCL,MAAME,UAAA,GAAaH,aAAA,CAAsC,IAAI","ignoreList":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createContext } from "react";
|
|
2
|
+
var GpgStatusState = /* @__PURE__ */function (GpgStatusState2) {
|
|
3
|
+
GpgStatusState2["READY"] = "ready";
|
|
4
|
+
GpgStatusState2["LOADING"] = "loading";
|
|
5
|
+
GpgStatusState2["SUCCESS"] = "success";
|
|
6
|
+
GpgStatusState2["ERROR"] = "error";
|
|
7
|
+
return GpgStatusState2;
|
|
8
|
+
}({});
|
|
9
|
+
var GpgContext = /* @__PURE__ */createContext(null);
|
|
10
|
+
export { GpgContext, GpgStatusState };
|
|
11
|
+
//# sourceMappingURL=GpgContext.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createContext","GpgStatusState","GpgStatusState2","GpgContext"],"sources":["../../src/GpgContext.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,aAAA,QAAqB;AAQvB,IAAKC,cAAA,GAAL,yBAAKC,eAAL;EACLA,eAAA,YAAQ;EACRA,eAAA,cAAU;EACVA,eAAA,cAAU;EACVA,eAAA,YAAQ;EAJE,OAAAA,eAAA;AAAA;AAwCL,IAAAC,UAAM,kBAAmDH,aAAI","ignoreList":[]}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { useContext, useMemo, useState } from "react";
|
|
2
|
+
import { useQuery } from "@tanstack/react-query";
|
|
3
|
+
import { Context as ConnectKitContext } from "@multiplatform.one/connectkit";
|
|
4
|
+
import { GpgContext, GpgStatusState } from "./GpgContext.mjs";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
const GPG_NONCE_QUERY_KEY = "ckGpgNonce";
|
|
7
|
+
const b64 = s => window.btoa(unescape(encodeURIComponent(s)));
|
|
8
|
+
function defaultBuildMessage({
|
|
9
|
+
nonce
|
|
10
|
+
}) {
|
|
11
|
+
return `${window.location.host} wants you to sign in with your GPG key.
|
|
12
|
+
|
|
13
|
+
URI: ${window.location.origin}
|
|
14
|
+
Version: 1
|
|
15
|
+
Nonce: ${nonce}
|
|
16
|
+
Issued At: ${(/* @__PURE__ */new Date()).toISOString()}`;
|
|
17
|
+
}
|
|
18
|
+
const GpgProvider = ({
|
|
19
|
+
children,
|
|
20
|
+
enabled = true,
|
|
21
|
+
nonceRefetchInterval = 1e3 * 60 * 5,
|
|
22
|
+
buildMessage,
|
|
23
|
+
onSignIn,
|
|
24
|
+
...gpgConfig
|
|
25
|
+
}) => {
|
|
26
|
+
const [status, setStatus] = useState(GpgStatusState.READY);
|
|
27
|
+
const resetStatus = () => setStatus(GpgStatusState.READY);
|
|
28
|
+
if (useContext(GpgContext)) {
|
|
29
|
+
throw new Error("Multiple, nested usages of GpgProvider detected. Please use only one.");
|
|
30
|
+
}
|
|
31
|
+
if (useContext(ConnectKitContext)) {
|
|
32
|
+
throw new Error("ConnectKitProvider must be mounted inside GpgProvider.");
|
|
33
|
+
}
|
|
34
|
+
const nonce = useQuery({
|
|
35
|
+
queryKey: [GPG_NONCE_QUERY_KEY],
|
|
36
|
+
queryFn: () => gpgConfig.getNonce(),
|
|
37
|
+
refetchInterval: nonceRefetchInterval
|
|
38
|
+
});
|
|
39
|
+
const message = useMemo(() => nonce.data ? (buildMessage ?? defaultBuildMessage)({
|
|
40
|
+
nonce: nonce.data
|
|
41
|
+
}) : null, [nonce.data, buildMessage]);
|
|
42
|
+
const command = useMemo(() => message ? `{ printf %s '${message}' | gpg --detach-sign --armor; gpg --armor --export; }` : null, [message]);
|
|
43
|
+
const signIn = async pastedBlob => {
|
|
44
|
+
const blob = pastedBlob.trim();
|
|
45
|
+
if (!blob.includes("-----BEGIN PGP SIGNATURE-----") || !blob.includes("-----BEGIN PGP PUBLIC KEY BLOCK-----")) {
|
|
46
|
+
setStatus(GpgStatusState.ERROR);
|
|
47
|
+
throw new Error("Paste the FULL output \u2014 it must contain both a PGP SIGNATURE and a PUBLIC KEY block.");
|
|
48
|
+
}
|
|
49
|
+
if (!message) {
|
|
50
|
+
setStatus(GpgStatusState.ERROR);
|
|
51
|
+
throw new Error("Could not fetch nonce");
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
setStatus(GpgStatusState.LOADING);
|
|
55
|
+
const result = await gpgConfig.onSign({
|
|
56
|
+
username: b64(blob),
|
|
57
|
+
password: b64(message),
|
|
58
|
+
message
|
|
59
|
+
});
|
|
60
|
+
if (result === false) throw new Error("GPG sign-in was rejected");
|
|
61
|
+
setStatus(GpgStatusState.SUCCESS);
|
|
62
|
+
onSignIn?.();
|
|
63
|
+
return true;
|
|
64
|
+
} catch (error) {
|
|
65
|
+
setStatus(GpgStatusState.ERROR);
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
return /* @__PURE__ */jsx(GpgContext.Provider, {
|
|
70
|
+
value: {
|
|
71
|
+
enabled,
|
|
72
|
+
nonceRefetchInterval,
|
|
73
|
+
buildMessage,
|
|
74
|
+
...gpgConfig,
|
|
75
|
+
nonce,
|
|
76
|
+
message,
|
|
77
|
+
command,
|
|
78
|
+
status,
|
|
79
|
+
signIn,
|
|
80
|
+
resetStatus
|
|
81
|
+
},
|
|
82
|
+
children
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
export { GPG_NONCE_QUERY_KEY, GpgProvider };
|
|
86
|
+
//# sourceMappingURL=GpgProvider.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useContext","useMemo","useState","useQuery","Context","ConnectKitContext","GpgContext","GpgStatusState","jsx","GPG_NONCE_QUERY_KEY","b64","s","window","btoa","unescape","encodeURIComponent","defaultBuildMessage","nonce","location","host","origin","Date","toISOString","GpgProvider","children","enabled","nonceRefetchInterval","buildMessage","onSignIn","gpgConfig","status","setStatus","READY","resetStatus","Error","queryKey","queryFn","getNonce","refetchInterval","message","data","command","signIn","pastedBlob","blob","trim","includes","ERROR","LOADING","result","onSign","username","password","SUCCESS","error","Provider","value"],"sources":["../../src/GpgProvider.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAAoBA,UAAA,EAAYC,OAAA,EAASC,QAAA,QAAgB;AACzD,SAASC,QAAA,QAAgB;AAEzB,SAASC,OAAA,IAAWC,iBAAA,QAAyB;AAC7C,SAASC,UAAA,EAAuBC,cAAA,QAAsB;AAwGlD,SAAAC,GAAA;AAjGG,MAAMC,mBAAA,GAAsB;AAInC,MAAMC,GAAA,GAAOC,CAAA,IAAcC,MAAA,CAAOC,IAAA,CAAKC,QAAA,CAASC,kBAAA,CAAmBJ,CAAC,CAAC,CAAC;AAItE,SAASK,oBAAoB;EAAEC;AAAM,GAA8B;EACjE,OACE,GAAGL,MAAA,CAAOM,QAAA,CAASC,IAAI;AAAA;AAAA,OACfP,MAAA,CAAOM,QAAA,CAASE,MAAM;AAAA;AAAA,SAEpBH,KAAK;AAAA,cACD,mBAAII,IAAA,CAAK,GAAEC,WAAA,CAAY,CAAC;AAE1C;AAEO,MAAMC,WAAA,GAAcA,CAAC;EAC1BC,QAAA;EACAC,OAAA,GAAU;EACVC,oBAAA,GAAuB,MAAO,KAAK;EACnCC,YAAA;EACAC,QAAA;EACA,GAAGC;AACL,MAAa;EACX,MAAM,CAACC,MAAA,EAAQC,SAAS,IAAI7B,QAAA,CAAyBK,cAAA,CAAeyB,KAAK;EACzE,MAAMC,WAAA,GAAcA,CAAA,KAAMF,SAAA,CAAUxB,cAAA,CAAeyB,KAAK;EAIxD,IAAIhC,UAAA,CAAWM,UAAU,GAAG;IAC1B,MAAM,IAAI4B,KAAA,CAAM,uEAAuE;EACzF;EACA,IAAIlC,UAAA,CAAWK,iBAAiB,GAAG;IACjC,MAAM,IAAI6B,KAAA,CAAM,wDAAwD;EAC1E;EAEA,MAAMjB,KAAA,GAAQd,QAAA,CAAS;IACrBgC,QAAA,EAAU,CAAC1B,mBAAmB;IAC9B2B,OAAA,EAASA,CAAA,KAAMP,SAAA,CAAUQ,QAAA,CAAS;IAClCC,eAAA,EAAiBZ;EACnB,CAAC;EAKD,MAAMa,OAAA,GAAUtC,OAAA,CACd,MAAOgB,KAAA,CAAMuB,IAAA,IAAQb,YAAA,IAAgBX,mBAAA,EAAqB;IAAEC,KAAA,EAAOA,KAAA,CAAMuB;EAAK,CAAC,IAAI,MACnF,CAACvB,KAAA,CAAMuB,IAAA,EAAMb,YAAY,CAC3B;EAIA,MAAMc,OAAA,GAAUxC,OAAA,CACd,MACEsC,OAAA,GACI,gBAAgBA,OAAO,2DACvB,MACN,CAACA,OAAO,CACV;EAEA,MAAMG,MAAA,GAAS,MAAOC,UAAA,IAAyC;IAC7D,MAAMC,IAAA,GAAOD,UAAA,CAAWE,IAAA,CAAK;IAC7B,IACE,CAACD,IAAA,CAAKE,QAAA,CAAS,+BAA+B,KAC9C,CAACF,IAAA,CAAKE,QAAA,CAAS,sCAAsC,GACrD;MACAf,SAAA,CAAUxB,cAAA,CAAewC,KAAK;MAC9B,MAAM,IAAIb,KAAA,CACR,2FACF;IACF;IACA,IAAI,CAACK,OAAA,EAAS;MACZR,SAAA,CAAUxB,cAAA,CAAewC,KAAK;MAC9B,MAAM,IAAIb,KAAA,CAAM,uBAAuB;IACzC;IACA,IAAI;MACFH,SAAA,CAAUxB,cAAA,CAAeyC,OAAO;MAEhC,MAAMC,MAAA,GAAS,MAAMpB,SAAA,CAAUqB,MAAA,CAAO;QACpCC,QAAA,EAAUzC,GAAA,CAAIkC,IAAI;QAClBQ,QAAA,EAAU1C,GAAA,CAAI6B,OAAO;QACrBA;MACF,CAAC;MAED,IAAIU,MAAA,KAAW,OAAO,MAAM,IAAIf,KAAA,CAAM,0BAA0B;MAChEH,SAAA,CAAUxB,cAAA,CAAe8C,OAAO;MAChCzB,QAAA,GAAW;MACX,OAAO;IACT,SAAS0B,KAAA,EAAO;MACdvB,SAAA,CAAUxB,cAAA,CAAewC,KAAK;MAC9B,MAAMO,KAAA;IACR;EACF;EAEA,OACE,eAAA9C,GAAA,CAACF,UAAA,CAAWiD,QAAA,EAAX;IACCC,KAAA,EAAO;MACL/B,OAAA;MACAC,oBAAA;MACAC,YAAA;MACA,GAAGE,SAAA;MACHZ,KAAA;MACAsB,OAAA;MACAE,OAAA;MACAX,MAAA;MACAY,MAAA;MACAT;IACF;IAECT;EAAA,CACH;AAEJ","ignoreList":[]}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useContext, useMemo, useState } from "react";
|
|
3
|
+
import { useQuery } from "@tanstack/react-query";
|
|
4
|
+
import { Context as ConnectKitContext } from "@multiplatform.one/connectkit";
|
|
5
|
+
import { GpgContext, GpgStatusState } from "./GpgContext.native.js";
|
|
6
|
+
var GPG_NONCE_QUERY_KEY = "ckGpgNonce";
|
|
7
|
+
var b64 = function b642(s) {
|
|
8
|
+
return window.btoa(unescape(encodeURIComponent(s)));
|
|
9
|
+
};
|
|
10
|
+
function defaultBuildMessage(param) {
|
|
11
|
+
var {
|
|
12
|
+
nonce
|
|
13
|
+
} = param;
|
|
14
|
+
return `${window.location.host} wants you to sign in with your GPG key.
|
|
15
|
+
|
|
16
|
+
URI: ${window.location.origin}
|
|
17
|
+
Version: 1
|
|
18
|
+
Nonce: ${nonce}
|
|
19
|
+
Issued At: ${(/* @__PURE__ */new Date()).toISOString()}`;
|
|
20
|
+
}
|
|
21
|
+
var GpgProvider = function GpgProvider2(param) {
|
|
22
|
+
var {
|
|
23
|
+
children,
|
|
24
|
+
enabled = true,
|
|
25
|
+
nonceRefetchInterval = 1e3 * 60 * 5,
|
|
26
|
+
buildMessage,
|
|
27
|
+
onSignIn,
|
|
28
|
+
...gpgConfig
|
|
29
|
+
} = param;
|
|
30
|
+
var [status, setStatus] = useState(GpgStatusState.READY);
|
|
31
|
+
var resetStatus = function resetStatus2() {
|
|
32
|
+
return setStatus(GpgStatusState.READY);
|
|
33
|
+
};
|
|
34
|
+
if (useContext(GpgContext)) {
|
|
35
|
+
throw new Error("Multiple, nested usages of GpgProvider detected. Please use only one.");
|
|
36
|
+
}
|
|
37
|
+
if (useContext(ConnectKitContext)) {
|
|
38
|
+
throw new Error("ConnectKitProvider must be mounted inside GpgProvider.");
|
|
39
|
+
}
|
|
40
|
+
var nonce = useQuery({
|
|
41
|
+
queryKey: [GPG_NONCE_QUERY_KEY],
|
|
42
|
+
queryFn: function queryFn() {
|
|
43
|
+
return gpgConfig.getNonce();
|
|
44
|
+
},
|
|
45
|
+
refetchInterval: nonceRefetchInterval
|
|
46
|
+
});
|
|
47
|
+
var message = useMemo(function () {
|
|
48
|
+
return nonce.data ? (buildMessage !== null && buildMessage !== void 0 ? buildMessage : defaultBuildMessage)({
|
|
49
|
+
nonce: nonce.data
|
|
50
|
+
}) : null;
|
|
51
|
+
}, [nonce.data, buildMessage]);
|
|
52
|
+
var command = useMemo(function () {
|
|
53
|
+
return message ? `{ printf %s '${message}' | gpg --detach-sign --armor; gpg --armor --export; }` : null;
|
|
54
|
+
}, [message]);
|
|
55
|
+
var signIn = async function signIn2(pastedBlob) {
|
|
56
|
+
var blob = pastedBlob.trim();
|
|
57
|
+
if (!blob.includes("-----BEGIN PGP SIGNATURE-----") || !blob.includes("-----BEGIN PGP PUBLIC KEY BLOCK-----")) {
|
|
58
|
+
setStatus(GpgStatusState.ERROR);
|
|
59
|
+
throw new Error("Paste the FULL output \u2014 it must contain both a PGP SIGNATURE and a PUBLIC KEY block.");
|
|
60
|
+
}
|
|
61
|
+
if (!message) {
|
|
62
|
+
setStatus(GpgStatusState.ERROR);
|
|
63
|
+
throw new Error("Could not fetch nonce");
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
setStatus(GpgStatusState.LOADING);
|
|
67
|
+
var result = await gpgConfig.onSign({
|
|
68
|
+
username: b64(blob),
|
|
69
|
+
password: b64(message),
|
|
70
|
+
message
|
|
71
|
+
});
|
|
72
|
+
if (result === false) throw new Error("GPG sign-in was rejected");
|
|
73
|
+
setStatus(GpgStatusState.SUCCESS);
|
|
74
|
+
onSignIn === null || onSignIn === void 0 ? void 0 : onSignIn();
|
|
75
|
+
return true;
|
|
76
|
+
} catch (error) {
|
|
77
|
+
setStatus(GpgStatusState.ERROR);
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
return /* @__PURE__ */_jsx(GpgContext.Provider, {
|
|
82
|
+
value: {
|
|
83
|
+
enabled,
|
|
84
|
+
nonceRefetchInterval,
|
|
85
|
+
buildMessage,
|
|
86
|
+
...gpgConfig,
|
|
87
|
+
nonce,
|
|
88
|
+
message,
|
|
89
|
+
command,
|
|
90
|
+
status,
|
|
91
|
+
signIn,
|
|
92
|
+
resetStatus
|
|
93
|
+
},
|
|
94
|
+
children
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
export { GPG_NONCE_QUERY_KEY, GpgProvider };
|
|
98
|
+
//# sourceMappingURL=GpgProvider.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["jsx","_jsx","useContext","useMemo","useState","useQuery","Context","ConnectKitContext","GpgContext","GpgStatusState","GPG_NONCE_QUERY_KEY","b64","b642","s","window","btoa","unescape","encodeURIComponent","defaultBuildMessage","param","nonce","location","host","origin","Date","toISOString","GpgProvider","GpgProvider2","children","enabled","nonceRefetchInterval","buildMessage","onSignIn","gpgConfig","status","setStatus","READY","resetStatus","resetStatus2","Error","queryKey","queryFn","getNonce","refetchInterval","message","data","command","signIn","signIn2","pastedBlob","blob","trim","includes","ERROR","LOADING","result","onSign","username","password","SUCCESS","error","Provider","value"],"sources":["../../src/GpgProvider.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { useState } from "react";
|
|
2
|
+
import { useContext, PageContent, ModalBody, ModalContent, Button, CopyToClipboard } from "@multiplatform.one/connectkit";
|
|
3
|
+
import { useGpg } from "./useGpg.mjs";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
const textarea = {
|
|
6
|
+
width: "100%",
|
|
7
|
+
boxSizing: "border-box",
|
|
8
|
+
fontFamily: "var(--ck-font-family, monospace)",
|
|
9
|
+
fontSize: 11,
|
|
10
|
+
lineHeight: 1.4,
|
|
11
|
+
padding: 8,
|
|
12
|
+
borderRadius: "var(--ck-primary-button-border-radius, 12px)",
|
|
13
|
+
border: "1px solid var(--ck-body-divider, #d3d3d3)",
|
|
14
|
+
background: "var(--ck-body-background-secondary, #f6f7f9)",
|
|
15
|
+
color: "var(--ck-body-color, inherit)",
|
|
16
|
+
resize: "vertical"
|
|
17
|
+
};
|
|
18
|
+
const label = {
|
|
19
|
+
textAlign: "left",
|
|
20
|
+
fontSize: 14,
|
|
21
|
+
fontWeight: 500,
|
|
22
|
+
margin: "4px 0"
|
|
23
|
+
};
|
|
24
|
+
const SignInWithGpg = () => {
|
|
25
|
+
const context = useContext();
|
|
26
|
+
const {
|
|
27
|
+
message,
|
|
28
|
+
command,
|
|
29
|
+
signIn,
|
|
30
|
+
isLoading,
|
|
31
|
+
isReady
|
|
32
|
+
} = useGpg();
|
|
33
|
+
const [pasted, setPasted] = useState("");
|
|
34
|
+
const [error, setError] = useState(null);
|
|
35
|
+
const [busy, setBusy] = useState(false);
|
|
36
|
+
const onSubmit = async () => {
|
|
37
|
+
setError(null);
|
|
38
|
+
setBusy(true);
|
|
39
|
+
try {
|
|
40
|
+
await signIn(pasted);
|
|
41
|
+
setTimeout(() => context.setOpen(false), 1e3);
|
|
42
|
+
} catch (e) {
|
|
43
|
+
setError(e instanceof Error ? e.message : "GPG sign-in failed");
|
|
44
|
+
setBusy(false);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
return /* @__PURE__ */jsx(PageContent, {
|
|
48
|
+
style: {
|
|
49
|
+
width: 320
|
|
50
|
+
},
|
|
51
|
+
children: /* @__PURE__ */jsxs(ModalContent, {
|
|
52
|
+
style: {
|
|
53
|
+
paddingBottom: 8,
|
|
54
|
+
gap: 6
|
|
55
|
+
},
|
|
56
|
+
children: [/* @__PURE__ */jsx(ModalBody, {
|
|
57
|
+
style: label,
|
|
58
|
+
children: "1. Sign the challenge in your terminal:"
|
|
59
|
+
}), /* @__PURE__ */jsxs("div", {
|
|
60
|
+
style: {
|
|
61
|
+
display: "flex",
|
|
62
|
+
flexDirection: "column",
|
|
63
|
+
gap: 6
|
|
64
|
+
},
|
|
65
|
+
children: [/* @__PURE__ */jsx(CopyToClipboard, {
|
|
66
|
+
variant: "button",
|
|
67
|
+
string: command ?? "",
|
|
68
|
+
children: "Copy gpg command"
|
|
69
|
+
}), /* @__PURE__ */jsx(CopyToClipboard, {
|
|
70
|
+
variant: "button",
|
|
71
|
+
string: message ?? "",
|
|
72
|
+
children: "Copy message only"
|
|
73
|
+
})]
|
|
74
|
+
}), /* @__PURE__ */jsx("textarea", {
|
|
75
|
+
readOnly: true,
|
|
76
|
+
rows: 4,
|
|
77
|
+
value: message ?? (isLoading ? "Loading challenge\u2026" : ""),
|
|
78
|
+
style: textarea
|
|
79
|
+
}), /* @__PURE__ */jsx(ModalBody, {
|
|
80
|
+
style: label,
|
|
81
|
+
children: "2. Paste the full output below:"
|
|
82
|
+
}), /* @__PURE__ */jsx("textarea", {
|
|
83
|
+
rows: 6,
|
|
84
|
+
value: pasted,
|
|
85
|
+
onChange: e => setPasted(e.target.value),
|
|
86
|
+
placeholder: "-----BEGIN PGP SIGNATURE----- \u2026 and your -----BEGIN PGP PUBLIC KEY BLOCK-----",
|
|
87
|
+
style: textarea
|
|
88
|
+
}), /* @__PURE__ */jsx(Button, {
|
|
89
|
+
onClick: onSubmit,
|
|
90
|
+
disabled: !isReady || !pasted || busy,
|
|
91
|
+
waiting: busy,
|
|
92
|
+
arrow: true,
|
|
93
|
+
children: "Sign in"
|
|
94
|
+
}), error && /* @__PURE__ */jsx(ModalBody, {
|
|
95
|
+
style: {
|
|
96
|
+
color: "var(--ck-body-color-danger, #c9190b)",
|
|
97
|
+
fontSize: 13,
|
|
98
|
+
textAlign: "left"
|
|
99
|
+
},
|
|
100
|
+
children: error
|
|
101
|
+
})]
|
|
102
|
+
})
|
|
103
|
+
});
|
|
104
|
+
};
|
|
105
|
+
var SignInWithGpg_default = SignInWithGpg;
|
|
106
|
+
export { SignInWithGpg_default as default };
|
|
107
|
+
//# sourceMappingURL=SignInWithGpg.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useState","useContext","PageContent","ModalBody","ModalContent","Button","CopyToClipboard","useGpg","jsx","jsxs","textarea","width","boxSizing","fontFamily","fontSize","lineHeight","padding","borderRadius","border","background","color","resize","label","textAlign","fontWeight","margin","SignInWithGpg","context","message","command","signIn","isLoading","isReady","pasted","setPasted","error","setError","busy","setBusy","onSubmit","setTimeout","setOpen","e","Error","style","children","paddingBottom","gap","display","flexDirection","variant","string","readOnly","rows","value","onChange","target","placeholder","onClick","disabled","waiting","arrow","SignInWithGpg_default"],"sources":["../../src/SignInWithGpg.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React, { useState } from "react";
|
|
3
|
+
import { useContext, PageContent, ModalBody, ModalContent, Button, CopyToClipboard } from "@multiplatform.one/connectkit";
|
|
4
|
+
import { useGpg } from "./useGpg.native.js";
|
|
5
|
+
function _instanceof(left, right) {
|
|
6
|
+
"@swc/helpers - instanceof";
|
|
7
|
+
|
|
8
|
+
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
9
|
+
return !!right[Symbol.hasInstance](left);
|
|
10
|
+
} else {
|
|
11
|
+
return left instanceof right;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
var textarea = {
|
|
15
|
+
width: "100%",
|
|
16
|
+
boxSizing: "border-box",
|
|
17
|
+
fontFamily: "var(--ck-font-family, monospace)",
|
|
18
|
+
fontSize: 11,
|
|
19
|
+
lineHeight: 1.4,
|
|
20
|
+
padding: 8,
|
|
21
|
+
borderRadius: "var(--ck-primary-button-border-radius, 12px)",
|
|
22
|
+
border: "1px solid var(--ck-body-divider, #d3d3d3)",
|
|
23
|
+
background: "var(--ck-body-background-secondary, #f6f7f9)",
|
|
24
|
+
color: "var(--ck-body-color, inherit)",
|
|
25
|
+
resize: "vertical"
|
|
26
|
+
};
|
|
27
|
+
var label = {
|
|
28
|
+
textAlign: "left",
|
|
29
|
+
fontSize: 14,
|
|
30
|
+
fontWeight: 500,
|
|
31
|
+
margin: "4px 0"
|
|
32
|
+
};
|
|
33
|
+
var SignInWithGpg = function SignInWithGpg2() {
|
|
34
|
+
var context = useContext();
|
|
35
|
+
var {
|
|
36
|
+
message,
|
|
37
|
+
command,
|
|
38
|
+
signIn,
|
|
39
|
+
isLoading,
|
|
40
|
+
isReady
|
|
41
|
+
} = useGpg();
|
|
42
|
+
var [pasted, setPasted] = useState("");
|
|
43
|
+
var [error, setError] = useState(null);
|
|
44
|
+
var [busy, setBusy] = useState(false);
|
|
45
|
+
var onSubmit = async function onSubmit2() {
|
|
46
|
+
setError(null);
|
|
47
|
+
setBusy(true);
|
|
48
|
+
try {
|
|
49
|
+
await signIn(pasted);
|
|
50
|
+
setTimeout(function () {
|
|
51
|
+
return context.setOpen(false);
|
|
52
|
+
}, 1e3);
|
|
53
|
+
} catch (e) {
|
|
54
|
+
setError(_instanceof(e, Error) ? e.message : "GPG sign-in failed");
|
|
55
|
+
setBusy(false);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
return /* @__PURE__ */_jsx(PageContent, {
|
|
59
|
+
style: {
|
|
60
|
+
width: 320
|
|
61
|
+
},
|
|
62
|
+
children: /* @__PURE__ */_jsxs(ModalContent, {
|
|
63
|
+
style: {
|
|
64
|
+
paddingBottom: 8,
|
|
65
|
+
gap: 6
|
|
66
|
+
},
|
|
67
|
+
children: [/* @__PURE__ */_jsx(ModalBody, {
|
|
68
|
+
style: label,
|
|
69
|
+
children: "1. Sign the challenge in your terminal:"
|
|
70
|
+
}), /* @__PURE__ */_jsxs("div", {
|
|
71
|
+
style: {
|
|
72
|
+
display: "flex",
|
|
73
|
+
flexDirection: "column",
|
|
74
|
+
gap: 6
|
|
75
|
+
},
|
|
76
|
+
children: [/* @__PURE__ */_jsx(CopyToClipboard, {
|
|
77
|
+
variant: "button",
|
|
78
|
+
string: command !== null && command !== void 0 ? command : "",
|
|
79
|
+
children: "Copy gpg command"
|
|
80
|
+
}), /* @__PURE__ */_jsx(CopyToClipboard, {
|
|
81
|
+
variant: "button",
|
|
82
|
+
string: message !== null && message !== void 0 ? message : "",
|
|
83
|
+
children: "Copy message only"
|
|
84
|
+
})]
|
|
85
|
+
}), /* @__PURE__ */_jsx("textarea", {
|
|
86
|
+
readOnly: true,
|
|
87
|
+
rows: 4,
|
|
88
|
+
value: message !== null && message !== void 0 ? message : isLoading ? "Loading challenge\u2026" : "",
|
|
89
|
+
style: textarea
|
|
90
|
+
}), /* @__PURE__ */_jsx(ModalBody, {
|
|
91
|
+
style: label,
|
|
92
|
+
children: "2. Paste the full output below:"
|
|
93
|
+
}), /* @__PURE__ */_jsx("textarea", {
|
|
94
|
+
rows: 6,
|
|
95
|
+
value: pasted,
|
|
96
|
+
onChange: function onChange(e) {
|
|
97
|
+
return setPasted(e.target.value);
|
|
98
|
+
},
|
|
99
|
+
placeholder: "-----BEGIN PGP SIGNATURE----- \u2026 and your -----BEGIN PGP PUBLIC KEY BLOCK-----",
|
|
100
|
+
style: textarea
|
|
101
|
+
}), /* @__PURE__ */_jsx(Button, {
|
|
102
|
+
onClick: onSubmit,
|
|
103
|
+
disabled: !isReady || !pasted || busy,
|
|
104
|
+
waiting: busy,
|
|
105
|
+
arrow: true,
|
|
106
|
+
children: "Sign in"
|
|
107
|
+
}), error && /* @__PURE__ */_jsx(ModalBody, {
|
|
108
|
+
style: {
|
|
109
|
+
color: "var(--ck-body-color-danger, #c9190b)",
|
|
110
|
+
fontSize: 13,
|
|
111
|
+
textAlign: "left"
|
|
112
|
+
},
|
|
113
|
+
children: error
|
|
114
|
+
})]
|
|
115
|
+
})
|
|
116
|
+
});
|
|
117
|
+
};
|
|
118
|
+
var SignInWithGpg_default = SignInWithGpg;
|
|
119
|
+
export { SignInWithGpg_default as default };
|
|
120
|
+
//# sourceMappingURL=SignInWithGpg.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["jsx","_jsx","jsxs","_jsxs","React","useState","useContext","PageContent","ModalBody","ModalContent","Button","CopyToClipboard","useGpg","_instanceof","left","right","Symbol","hasInstance","textarea","width","boxSizing","fontFamily","fontSize","lineHeight","padding","borderRadius","border","background","color","resize","label","textAlign","fontWeight","margin","SignInWithGpg","SignInWithGpg2","context","message","command","signIn","isLoading","isReady","pasted","setPasted","error","setError","busy","setBusy","onSubmit","onSubmit2","setTimeout","setOpen","e","Error","style","children","paddingBottom","gap","display","flexDirection","variant","string","readOnly","rows","value"],"sources":["../../src/SignInWithGpg.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAA+BA,GAAA,IAAAC,IAAA,EAAAC,IAAgB,IAAAC,KAAA;AAE/C,OAAAC,KAAA,IAAAC,QAAA;AAAA,SACEC,UAAA,EAAAC,WAAA,EAAAC,SAAA,EAAAC,YAAA,EAAAC,MAAA,EAAAC,eAAA;AAAA,SACAC,MAAA;AAAA,SACAC,YAAAC,IAAA,EAAAC,KAAA;EACA;;EACA,IAAAA,KAAA,mBAAAC,MAAA,oBAAAD,KAAA,CAAAC,MAAA,CAAAC,WAAA;IACA,SAAAF,KAAA,CAAAC,MAAA,CAAAC,WAAA,EAAAH,IAAA;EAAA,OACK;IACP,OAASA,IAAA,YAAcC,KAAA;EAgDf;AA3CR;AAAgC,IAC9BG,QAAO;EACPC,KAAA,QAAW;EACXC,SAAA,cAAY;EACZC,UAAU;EACVC,QAAA,IAAY;EACZC,UAAS;EACTC,OAAA;EACAC,YAAQ;EACRC,MAAA,6CAAY;EACZC,UAAO;EACPC,KAAA,iCAAQ;EACVC,MAAA;AACA;AAA6B,IAC3BC,KAAA;EACAC,SAAA,EAAU;EACVT,QAAA,IAAY;EACZU,UAAQ;EACVC,MAAA;AAEA;AACE,IAAAC,aAAM,GAAU,SAAWC,eAAA;EAC3B,IAAAC,OAAQ,GAAA9B,UAAS,EAAS;EAC1B;IAAM+B,OAAC;IAAQC,OAAA;IAASC,MAAI;IAAAC,SAAW;IAAAC;EAAA,IAAA7B,MAAA;EACvC,KAAA8B,MAAO,EAAAC,SAAe,IAAItC,QAAA,CAAwB;EAClD,KAAAuC,KAAO,EAAAC,QAAa,IAAIxC,QAAA,CAAS,KAAK;EAEtC,KAAAyC,IAAM,EAAAC,OAAW,IAAA1C,QAAY;EAC3B,IAAA2C,QAAS,GAAI,eAAAC,UAAA;IACbJ,QAAQ,KAAI;IACZE,OAAI;IACF;MAEA,MAAAR,MAAW,CAAAG,MAAM;MACnBQ,UAAY;QACV,OAASd,OAAA,CAAAe,OAAa,MAAQ;MAC9B;IACF,SAAAC,CAAA;MACFP,QAAA,CAAAhC,WAAA,CAAAuC,CAAA,EAAAC,KAAA,IAAAD,CAAA,CAAAf,OAAA;MAEAU,OACE;IAEI;EAAgE;EAE9D,sBAAA9C,IAAC,CAAAM,WAAA;IAED+C,KACA;MAEAnC,KACF;IACA;IAAAoC,QAAC,iBAAApD,KAAA,CAAAM,YAAA;MAAA6C,KAAA;QACCE,aAAQ;QACRC,GAAA;MAAM;MACgDF,QACtD,EAAO,gBAAAtD,IAAA,CAAAO,SAAA;QACT8C,KAAA,EAAAxB,KAAA;QACAyB,QAAA;MACA,IAAC,eAAApD,KAAA;QAAAmD,KAAA;UACCI,OAAM;UACNC,aAAO;UACPF,GAAA;QACA;QACAF,QAAO,kBAAAtD,IAAA,CAAAU,eAAA;UACTiD,OAAA;UACAC,MAAA,EAAAvB,OAAC,KAAO,QAAAA,OAAS,KAAU,SAAUA,OAAC,KAAW;UAI/CiB,QAAA;QAAC,mBAAAtD,IAAA,CAAAU,eAAA;UACCiD,OAAO;UACLC,MAAO,EAAAxB,OAAA,aAAAA,OAAA,cAAAA,OAAA;UACPkB,QAAU;QACV;MAGD,mBAAAtD,IAAA;QACH6D,QAAA;QAGNC,IAAA;QAEJC,KAAA,EAAA3B,OAAA,aAAAA,OAAA,cAAAA,OAAA,GAAAG,SAAA;QAEOc,KAAA,EAAApC","ignoreList":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { useGpg } from "./useGpg.mjs";
|
|
2
|
+
import { GpgProvider, GPG_NONCE_QUERY_KEY } from "./GpgProvider.mjs";
|
|
3
|
+
import { GpgContext, GpgStatusState } from "./GpgContext.mjs";
|
|
4
|
+
import { default as default2 } from "./SignInWithGpg.mjs";
|
|
5
|
+
import { default as default3, GPGButton } from "./GpgButton.mjs";
|
|
6
|
+
import { gpgScreen, GpgScreenRegistrar, GpgBridge } from "./screens.mjs";
|
|
7
|
+
export { GPGButton, GPG_NONCE_QUERY_KEY, GpgBridge, GpgContext, GpgProvider, GpgScreenRegistrar, GpgStatusState, default2 as SignInWithGpg, default3 as SignInWithGpgButton, gpgScreen, useGpg };
|
|
8
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useGpg","GpgProvider","GPG_NONCE_QUERY_KEY","GpgContext","GpgStatusState","default","default2","default3","GPGButton","gpgScreen","GpgScreenRegistrar","GpgBridge"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAKA,SAASA,MAAA,QAAc;AACvB,SAASC,WAAA,EAAaC,mBAAA,QAA2B;AACjD,SAASC,UAAA,EAAYC,cAAA,QAAsB;AAG3C,SAAoBC,OAAA,IAAXC,QAAA,QAAgC;AACzC,SAAoBD,OAAA,IAAXE,QAAA,EAAgCC,SAAA,QAAiB;AAE1D,SAASC,SAAA,EAAWC,kBAAA,EAAoBC,SAAA,QAAiB","ignoreList":[]}
|