@0xkey-io/react-wallet-kit 0.2.0 → 0.3.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/dist/components/verify/VerifyEnclave.d.ts +23 -0
- package/dist/components/verify/VerifyEnclave.d.ts.map +1 -0
- package/dist/components/verify/VerifyEnclave.js +168 -0
- package/dist/components/verify/VerifyEnclave.js.map +1 -0
- package/dist/components/verify/VerifyEnclave.mjs +200 -0
- package/dist/components/verify/VerifyEnclave.mjs.map +1 -0
- package/dist/providers/client/Provider.d.ts.map +1 -1
- package/dist/providers/client/Provider.js +59 -0
- package/dist/providers/client/Provider.js.map +1 -1
- package/dist/providers/client/Provider.mjs +789 -672
- package/dist/providers/client/Provider.mjs.map +1 -1
- package/dist/providers/client/Types.d.ts +17 -1
- package/dist/providers/client/Types.d.ts.map +1 -1
- package/dist/providers/client/Types.js.map +1 -1
- package/dist/providers/client/Types.mjs.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/method-types.d.ts +10 -0
- package/dist/types/method-types.d.ts.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { HandleVerifyEnclaveParams } from "../../types/method-types";
|
|
2
|
+
type VerifyEnclavePageProps = HandleVerifyEnclaveParams & {
|
|
3
|
+
onSuccess?: (pivotHashHex: string) => void;
|
|
4
|
+
onError?: (error: unknown) => void;
|
|
5
|
+
successPageDuration?: number;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Verifies that the live enclave running `appName` matches a manifest
|
|
9
|
+
* approved by 0xkey's quorum multi-sig (via `verifyLatestBootProof`).
|
|
10
|
+
*
|
|
11
|
+
* Unlike {@link VerifyPage} (which verifies a specific *operation* via an
|
|
12
|
+
* App Proof), this verifies the *enclave's identity* directly — it doesn't
|
|
13
|
+
* depend on any App Proof having been generated, so it works today for any
|
|
14
|
+
* enclave app that already serves boot proofs.
|
|
15
|
+
*
|
|
16
|
+
* On failure, this shows a visible error state (via {@link DeveloperError})
|
|
17
|
+
* rather than silently closing — since this is meant to be a user-facing
|
|
18
|
+
* trust signal, a failed verification must not be indistinguishable from a
|
|
19
|
+
* cancelled/skipped one.
|
|
20
|
+
*/
|
|
21
|
+
export declare function VerifyEnclavePage(props: VerifyEnclavePageProps): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=VerifyEnclave.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VerifyEnclave.d.ts","sourceRoot":"","sources":["../../../src/components/verify/VerifyEnclave.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAI1E,KAAK,sBAAsB,GAAG,yBAAyB,GAAG;IACxD,SAAS,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,2CAkK9D"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var clsx = require('clsx');
|
|
5
|
+
var Hook = require('../../providers/modal/Hook.js');
|
|
6
|
+
var react = require('react');
|
|
7
|
+
var react$1 = require('@headlessui/react');
|
|
8
|
+
var reactFontawesome = require('@fortawesome/react-fontawesome');
|
|
9
|
+
var freeSolidSvgIcons = require('@fortawesome/free-solid-svg-icons');
|
|
10
|
+
var Hook$1 = require('../../providers/client/Hook.js');
|
|
11
|
+
var Spinners = require('../design/Spinners.js');
|
|
12
|
+
var Failure = require('../design/Failure.js');
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Verifies that the live enclave running `appName` matches a manifest
|
|
16
|
+
* approved by 0xkey's quorum multi-sig (via `verifyLatestBootProof`).
|
|
17
|
+
*
|
|
18
|
+
* Unlike {@link VerifyPage} (which verifies a specific *operation* via an
|
|
19
|
+
* App Proof), this verifies the *enclave's identity* directly — it doesn't
|
|
20
|
+
* depend on any App Proof having been generated, so it works today for any
|
|
21
|
+
* enclave app that already serves boot proofs.
|
|
22
|
+
*
|
|
23
|
+
* On failure, this shows a visible error state (via {@link DeveloperError})
|
|
24
|
+
* rather than silently closing — since this is meant to be a user-facing
|
|
25
|
+
* trust signal, a failed verification must not be indistinguishable from a
|
|
26
|
+
* cancelled/skipped one.
|
|
27
|
+
*/
|
|
28
|
+
function VerifyEnclavePage(props) {
|
|
29
|
+
const {
|
|
30
|
+
appName,
|
|
31
|
+
organizationId,
|
|
32
|
+
stampWith,
|
|
33
|
+
anchor,
|
|
34
|
+
onSuccess,
|
|
35
|
+
onError,
|
|
36
|
+
successPageDuration
|
|
37
|
+
} = props;
|
|
38
|
+
const {
|
|
39
|
+
isMobile,
|
|
40
|
+
closeModal
|
|
41
|
+
} = Hook.useModal();
|
|
42
|
+
const {
|
|
43
|
+
verifyLatestBootProof
|
|
44
|
+
} = Hook$1.useZeroXKey();
|
|
45
|
+
const hasRun = react.useRef(false);
|
|
46
|
+
const [status, setStatus] = react.useState("loading");
|
|
47
|
+
const [pivotHashHex, setPivotHashHex] = react.useState("");
|
|
48
|
+
const [error, setError] = react.useState(undefined);
|
|
49
|
+
const [isTextPinging, setIsTextPinging] = react.useState(false);
|
|
50
|
+
react.useEffect(() => {
|
|
51
|
+
if (hasRun.current) return;
|
|
52
|
+
hasRun.current = true;
|
|
53
|
+
const closeTimeoutRef = {
|
|
54
|
+
current: undefined
|
|
55
|
+
};
|
|
56
|
+
const runAction = async () => {
|
|
57
|
+
try {
|
|
58
|
+
// Slight delay to let the modal animation complete — verification
|
|
59
|
+
// can briefly freeze the UI thread while it runs.
|
|
60
|
+
await new Promise(resolve => setTimeout(resolve, 300));
|
|
61
|
+
const parsed = await verifyLatestBootProof({
|
|
62
|
+
appName,
|
|
63
|
+
...(organizationId !== undefined && {
|
|
64
|
+
organizationId
|
|
65
|
+
}),
|
|
66
|
+
...(stampWith && {
|
|
67
|
+
stampWith
|
|
68
|
+
}),
|
|
69
|
+
...(anchor && {
|
|
70
|
+
anchor
|
|
71
|
+
})
|
|
72
|
+
});
|
|
73
|
+
setPivotHashHex(parsed.manifest.pivotHashHex);
|
|
74
|
+
setStatus("success");
|
|
75
|
+
if (!successPageDuration || successPageDuration === 0) {
|
|
76
|
+
onSuccess?.(parsed.manifest.pivotHashHex);
|
|
77
|
+
closeModal();
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
setTimeout(() => setIsTextPinging(true), 500);
|
|
81
|
+
setTimeout(() => setIsTextPinging(false), 1500);
|
|
82
|
+
closeTimeoutRef.current = setTimeout(() => {
|
|
83
|
+
onSuccess?.(parsed.manifest.pivotHashHex);
|
|
84
|
+
closeModal();
|
|
85
|
+
}, successPageDuration);
|
|
86
|
+
} catch (err) {
|
|
87
|
+
setError(err);
|
|
88
|
+
setStatus("error");
|
|
89
|
+
onError?.(err);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
runAction();
|
|
93
|
+
return () => {
|
|
94
|
+
if (closeTimeoutRef.current) clearTimeout(closeTimeoutRef.current);
|
|
95
|
+
};
|
|
96
|
+
}, []);
|
|
97
|
+
if (status === "error") {
|
|
98
|
+
return jsxRuntime.jsx("div", {
|
|
99
|
+
className: clsx("flex flex-col items-center justify-center py-5 transition-all duration-300", isMobile ? "w-full" : "w-80"),
|
|
100
|
+
children: jsxRuntime.jsx(Failure.DeveloperError, {
|
|
101
|
+
developerTitle: "Enclave verification failed",
|
|
102
|
+
developerMessages: [error instanceof Error ? error.message : String(error)],
|
|
103
|
+
userTitle: "Verification failed",
|
|
104
|
+
userMessages: ["We couldn't verify this enclave's identity. Please try again later."]
|
|
105
|
+
})
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return jsxRuntime.jsxs("div", {
|
|
109
|
+
className: clsx("flex flex-col items-center justify-center py-5 transition-all duration-300", isMobile ? "w-full" : "w-72"),
|
|
110
|
+
children: [status === "loading" && jsxRuntime.jsxs("div", {
|
|
111
|
+
className: "size-full absolute text-center text-lg font-semibold flex flex-row items-center justify-center gap-2",
|
|
112
|
+
children: [jsxRuntime.jsx(Spinners.Spinner, {
|
|
113
|
+
strokeWidth: 2,
|
|
114
|
+
className: "h-full"
|
|
115
|
+
}), jsxRuntime.jsx("span", {
|
|
116
|
+
className: "animate-pulse",
|
|
117
|
+
children: "Verifying enclave identity..."
|
|
118
|
+
})]
|
|
119
|
+
}), jsxRuntime.jsx("div", {
|
|
120
|
+
className: "relative flex flex-col items-center justify-center size-[88px] overflow-hidden",
|
|
121
|
+
children: jsxRuntime.jsx(react$1.Transition, {
|
|
122
|
+
as: "div",
|
|
123
|
+
show: status === "success",
|
|
124
|
+
enter: "transition-all duration-600 ease-in-out",
|
|
125
|
+
enterFrom: "opacity-0 scale-40",
|
|
126
|
+
enterTo: "opacity-100 scale-100",
|
|
127
|
+
className: " absolute size-full flex flex-col items-center justify-center",
|
|
128
|
+
children: jsxRuntime.jsx("div", {
|
|
129
|
+
className: "size-full border-2 border-primary-light dark:border-primary-dark text-primary-light dark:text-primary-dark rounded-full flex flex-col items-center justify-center box-border",
|
|
130
|
+
children: jsxRuntime.jsxs(react$1.TransitionChild, {
|
|
131
|
+
as: "div",
|
|
132
|
+
enter: "transition-all duration-200 delay-300 ease-out",
|
|
133
|
+
enterFrom: "opacity-0 scale-60",
|
|
134
|
+
enterTo: "opacity-100 scale-100",
|
|
135
|
+
className: "relative flex flex-col items-center justify-center",
|
|
136
|
+
children: [jsxRuntime.jsx(reactFontawesome.FontAwesomeIcon, {
|
|
137
|
+
icon: freeSolidSvgIcons.faCheck,
|
|
138
|
+
size: "2x"
|
|
139
|
+
}), jsxRuntime.jsx(reactFontawesome.FontAwesomeIcon, {
|
|
140
|
+
className: "absolute animate-ping",
|
|
141
|
+
icon: freeSolidSvgIcons.faCheck,
|
|
142
|
+
size: "2x"
|
|
143
|
+
})]
|
|
144
|
+
})
|
|
145
|
+
})
|
|
146
|
+
})
|
|
147
|
+
}), jsxRuntime.jsxs(react$1.Transition, {
|
|
148
|
+
as: "div",
|
|
149
|
+
show: status === "success",
|
|
150
|
+
className: "w-full text-center text-lg font-semibold flex flex-col items-center justify-center mt-2 relative",
|
|
151
|
+
enter: "transition-all ease-out duration-200 delay-200",
|
|
152
|
+
enterFrom: "opacity-0 -translate-y-2",
|
|
153
|
+
enterTo: "opacity-100 translate-y-0",
|
|
154
|
+
children: [jsxRuntime.jsx("span", {
|
|
155
|
+
children: "Verified!"
|
|
156
|
+
}), isTextPinging && jsxRuntime.jsx("span", {
|
|
157
|
+
className: "absolute animate-ping text-icon-text-light dark:text-icon-text-dark",
|
|
158
|
+
children: "Verified!"
|
|
159
|
+
})]
|
|
160
|
+
}), status === "success" && pivotHashHex && jsxRuntime.jsxs("div", {
|
|
161
|
+
className: "w-full text-center text-xs mt-3 font-mono text-icon-text-light dark:text-icon-text-dark break-all px-4",
|
|
162
|
+
children: ["pivot ", pivotHashHex.slice(0, 16), "..."]
|
|
163
|
+
})]
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
exports.VerifyEnclavePage = VerifyEnclavePage;
|
|
168
|
+
//# sourceMappingURL=VerifyEnclave.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VerifyEnclave.js","sources":["../../../src/components/verify/VerifyEnclave.tsx"],"sourcesContent":[null],"names":["VerifyEnclavePage","props","appName","organizationId","stampWith","anchor","onSuccess","onError","successPageDuration","isMobile","closeModal","useModal","verifyLatestBootProof","useZeroXKey","hasRun","useRef","status","setStatus","useState","pivotHashHex","setPivotHashHex","error","setError","undefined","isTextPinging","setIsTextPinging","useEffect","current","closeTimeoutRef","runAction","Promise","resolve","setTimeout","parsed","manifest","err","clearTimeout","_jsx","className","clsx","children","DeveloperError","developerTitle","developerMessages","Error","message","String","userTitle","userMessages","_jsxs","Spinner","strokeWidth","Transition","as","show","enter","enterFrom","enterTo","TransitionChild","FontAwesomeIcon","icon","faCheck","size","slice"],"mappings":";;;;;;;;;;;;;AAiBA;;;;;;;;;;;;;AAaG;AACG,SAAUA,iBAAiBA,CAACC,KAA6B,EAAA;EAC7D,MAAM;IACJC,OAAO;IACPC,cAAc;IACdC,SAAS;IACTC,MAAM;IACNC,SAAS;IACTC,OAAO;AACPC,IAAAA;AAAmB,GACpB,GAAGP,KAAK;EAET,MAAM;IAAEQ,QAAQ;AAAEC,IAAAA;GAAY,GAAGC,aAAQ,EAAE;EAC3C,MAAM;AAAEC,IAAAA;GAAuB,GAAGC,kBAAW,EAAE;AAE/C,EAAA,MAAMC,MAAM,GAAGC,YAAM,CAAC,KAAK,CAAC;EAE5B,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGC,cAAQ,CAClC,SAAS,CACV;EACD,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAGF,cAAQ,CAAS,EAAE,CAAC;EAC5D,MAAM,CAACG,KAAK,EAAEC,QAAQ,CAAC,GAAGJ,cAAQ,CAAUK,SAAS,CAAC;EACtD,MAAM,CAACC,aAAa,EAAEC,gBAAgB,CAAC,GAAGP,cAAQ,CAAC,KAAK,CAAC;AAEzDQ,EAAAA,eAAS,CAAC,MAAK;IACb,IAAIZ,MAAM,CAACa,OAAO,EAAE;IACpBb,MAAM,CAACa,OAAO,GAAG,IAAI;AAErB,IAAA,MAAMC,eAAe,GAAG;AACtBD,MAAAA,OAAO,EAAEJ;KACV;AAED,IAAA,MAAMM,SAAS,GAAG,YAAW;MAC3B,IAAI;AACF;AACA;QACA,MAAM,IAAIC,OAAO,CAAEC,OAAO,IAAKC,UAAU,CAACD,OAAO,EAAE,GAAG,CAAC,CAAC;AACxD,QAAA,MAAME,MAAM,GAAG,MAAMrB,qBAAqB,CAAC;UACzCV,OAAO;UACP,IAAIC,cAAc,KAAKoB,SAAS,IAAI;AAAEpB,YAAAA;WAAgB,CAAC;AACvD,UAAA,IAAIC,SAAS,IAAI;AAAEA,YAAAA;WAAW,CAAC;AAC/B,UAAA,IAAIC,MAAM,IAAI;AAAEA,YAAAA;WAAQ;AACzB,SAAA,CAAC;AACFe,QAAAA,eAAe,CAACa,MAAM,CAACC,QAAQ,CAACf,YAAY,CAAC;QAC7CF,SAAS,CAAC,SAAS,CAAC;AAEpB,QAAA,IAAI,CAACT,mBAAmB,IAAIA,mBAAmB,KAAK,CAAC,EAAE;AACrDF,UAAAA,SAAS,GAAG2B,MAAM,CAACC,QAAQ,CAACf,YAAY,CAAC;AACzCT,UAAAA,UAAU,EAAE;AACZ,UAAA;AACF,QAAA;QAEAsB,UAAU,CAAC,MAAMP,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;QAC7CO,UAAU,CAAC,MAAMP,gBAAgB,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;AAE/CG,QAAAA,eAAe,CAACD,OAAO,GAAGK,UAAU,CAAC,MAAK;AACxC1B,UAAAA,SAAS,GAAG2B,MAAM,CAACC,QAAQ,CAACf,YAAY,CAAC;AACzCT,UAAAA,UAAU,EAAE;QACd,CAAC,EAAEF,mBAAmB,CAAC;MACzB,CAAC,CAAC,OAAO2B,GAAG,EAAE;QACZb,QAAQ,CAACa,GAAG,CAAC;QACblB,SAAS,CAAC,OAAO,CAAC;QAClBV,OAAO,GAAG4B,GAAG,CAAC;AAChB,MAAA;IACF,CAAC;AAEDN,IAAAA,SAAS,EAAE;AAEX,IAAA,OAAO,MAAK;MACV,IAAID,eAAe,CAACD,OAAO,EAAES,YAAY,CAACR,eAAe,CAACD,OAAO,CAAC;IACpE,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,IAAIX,MAAM,KAAK,OAAO,EAAE;IACtB,OACEqB,cAAA,CAAA,KAAA,EAAA;MACEC,SAAS,EAAEC,IAAI,CACb,4EAA4E,EAC5E9B,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAC7B;AAAA+B,MAAAA,QAAA,EAEDH,cAAA,CAACI,sBAAc,EAAA;AACbC,QAAAA,cAAc,EAAC,6BAA6B;AAC5CC,QAAAA,iBAAiB,EAAE,CACjBtB,KAAK,YAAYuB,KAAK,GAAGvB,KAAK,CAACwB,OAAO,GAAGC,MAAM,CAACzB,KAAK,CAAC,CACvD;AACD0B,QAAAA,SAAS,EAAC,qBAAqB;QAC/BC,YAAY,EAAE,CACZ,qEAAqE;OACtE;AACD,KAAA,CACE;AAEV,EAAA;EAEA,OACEC;IACEX,SAAS,EAAEC,IAAI,CACb,4EAA4E,EAC5E9B,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAC7B;IAAA+B,QAAA,EAAA,CAEAxB,MAAM,KAAK,SAAS,IACnBiC;AAAKX,MAAAA,SAAS,EAAC,sGAAsG;AAAAE,MAAAA,QAAA,EAAA,CACnHH,cAAA,CAACa,gBAAO,EAAA;AAACC,QAAAA,WAAW,EAAE,CAAC;AAAEb,QAAAA,SAAS,EAAC;AAAQ,OAAA,CAAG,EAC9CD,cAAA,CAAA,MAAA,EAAA;AAAMC,QAAAA,SAAS,EAAC,eAAe;AAAAE,QAAAA,QAAA,EAAA;AAAA,OAAA,CAAqC;AAAA,KAAA,CAEvE,EAGDH,cAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,SAAS,EAAC,gFAAgF;AAAAE,MAAAA,QAAA,EAC7FH,eAACe,kBAAU,EAAA;AACTC,QAAAA,EAAE,EAAC,KAAK;QACRC,IAAI,EAAEtC,MAAM,KAAK,SAAS;AAC1BuC,QAAAA,KAAK,EAAC,yCAAyC;AAC/CC,QAAAA,SAAS,EAAC,oBAAoB;AAC9BC,QAAAA,OAAO,EAAC,uBAAuB;AAC/BnB,QAAAA,SAAS,EAAC,+DAA+D;AAAAE,QAAAA,QAAA,EAEzEH;AAAKC,UAAAA,SAAS,EAAC,8KAA8K;AAAAE,UAAAA,QAAA,EAC3LS,eAAA,CAACS,uBAAe;AACdL,YAAAA,EAAE,EAAC,KAAK;AACRE,YAAAA,KAAK,EAAC,gDAAgD;AACtDC,YAAAA,SAAS,EAAC,oBAAoB;AAC9BC,YAAAA,OAAO,EAAC,uBAAuB;AAC/BnB,YAAAA,SAAS,EAAC,oDAAoD;uBAE9DD,cAAA,CAACsB,gCAAe,EAAA;AAACC,cAAAA,IAAI,EAAEC,yBAAO;AAAEC,cAAAA,IAAI,EAAC;AAAI,aAAA,CAAG,EAC5CzB,eAACsB,gCAAe,EAAA;AACdrB,cAAAA,SAAS,EAAC,uBAAuB;AACjCsB,cAAAA,IAAI,EAAEC,yBAAO;AACbC,cAAAA,IAAI,EAAC;AAAI,aAAA,CACT;WAAA;SACc;OACd;AACK,KAAA,CACT,EAGNb,gBAACG,kBAAU,EAAA;AACTC,MAAAA,EAAE,EAAC,KAAK;MACRC,IAAI,EAAEtC,MAAM,KAAK,SAAS;AAC1BsB,MAAAA,SAAS,EAAC,kGAAkG;AAC5GiB,MAAAA,KAAK,EAAC,gDAAgD;AACtDC,MAAAA,SAAS,EAAC,0BAA0B;AACpCC,MAAAA,OAAO,EAAC,2BAA2B;AAAAjB,MAAAA,QAAA,EAAA,CAEnCH,cAAA,CAAA,MAAA,EAAA;AAAAG,QAAAA,QAAA,EAAA;AAAA,OAAA,CAAsB,EAErBhB,aAAa,IACZa;AAAMC,QAAAA,SAAS,EAAC,qEAAqE;AAAAE,QAAAA,QAAA,EAAA;AAAA,OAAA,CAGtF;KAAA,CACU,EAEZxB,MAAM,KAAK,SAAS,IAAIG,YAAY,IACnC8B,eAAA,CAAA,KAAA,EAAA;AAAKX,MAAAA,SAAS,EAAC,wGAAwG;AAAAE,MAAAA,QAAA,EAAA,CAAA,QAAA,EAC9GrB,YAAY,CAAC4C,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAA,KAAA;AAAA,KAAA,CAEnC;AAAA,GAAA,CACG;AAEV;;;;"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { slicedToArray as _slicedToArray, asyncToGenerator as _asyncToGenerator, regenerator as _regenerator, objectSpread2 as _objectSpread2 } from '../../_virtual/_rollupPluginBabelHelpers.mjs';
|
|
2
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
3
|
+
import clsx from 'clsx';
|
|
4
|
+
import { useModal } from '../../providers/modal/Hook.mjs';
|
|
5
|
+
import { useRef, useState, useEffect } from 'react';
|
|
6
|
+
import { Transition, TransitionChild } from '@headlessui/react';
|
|
7
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
8
|
+
import { faCheck } from '@fortawesome/free-solid-svg-icons';
|
|
9
|
+
import { useZeroXKey } from '../../providers/client/Hook.mjs';
|
|
10
|
+
import { Spinner } from '../design/Spinners.mjs';
|
|
11
|
+
import { DeveloperError } from '../design/Failure.mjs';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Verifies that the live enclave running `appName` matches a manifest
|
|
15
|
+
* approved by 0xkey's quorum multi-sig (via `verifyLatestBootProof`).
|
|
16
|
+
*
|
|
17
|
+
* Unlike {@link VerifyPage} (which verifies a specific *operation* via an
|
|
18
|
+
* App Proof), this verifies the *enclave's identity* directly — it doesn't
|
|
19
|
+
* depend on any App Proof having been generated, so it works today for any
|
|
20
|
+
* enclave app that already serves boot proofs.
|
|
21
|
+
*
|
|
22
|
+
* On failure, this shows a visible error state (via {@link DeveloperError})
|
|
23
|
+
* rather than silently closing — since this is meant to be a user-facing
|
|
24
|
+
* trust signal, a failed verification must not be indistinguishable from a
|
|
25
|
+
* cancelled/skipped one.
|
|
26
|
+
*/
|
|
27
|
+
function VerifyEnclavePage(props) {
|
|
28
|
+
var appName = props.appName,
|
|
29
|
+
organizationId = props.organizationId,
|
|
30
|
+
stampWith = props.stampWith,
|
|
31
|
+
anchor = props.anchor,
|
|
32
|
+
onSuccess = props.onSuccess,
|
|
33
|
+
onError = props.onError,
|
|
34
|
+
successPageDuration = props.successPageDuration;
|
|
35
|
+
var _useModal = useModal(),
|
|
36
|
+
isMobile = _useModal.isMobile,
|
|
37
|
+
closeModal = _useModal.closeModal;
|
|
38
|
+
var _useZeroXKey = useZeroXKey(),
|
|
39
|
+
verifyLatestBootProof = _useZeroXKey.verifyLatestBootProof;
|
|
40
|
+
var hasRun = useRef(false);
|
|
41
|
+
var _useState = useState("loading"),
|
|
42
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
43
|
+
status = _useState2[0],
|
|
44
|
+
setStatus = _useState2[1];
|
|
45
|
+
var _useState3 = useState(""),
|
|
46
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
47
|
+
pivotHashHex = _useState4[0],
|
|
48
|
+
setPivotHashHex = _useState4[1];
|
|
49
|
+
var _useState5 = useState(undefined),
|
|
50
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
51
|
+
error = _useState6[0],
|
|
52
|
+
setError = _useState6[1];
|
|
53
|
+
var _useState7 = useState(false),
|
|
54
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
55
|
+
isTextPinging = _useState8[0],
|
|
56
|
+
setIsTextPinging = _useState8[1];
|
|
57
|
+
useEffect(function () {
|
|
58
|
+
if (hasRun.current) return;
|
|
59
|
+
hasRun.current = true;
|
|
60
|
+
var closeTimeoutRef = {
|
|
61
|
+
current: undefined
|
|
62
|
+
};
|
|
63
|
+
var runAction = /*#__PURE__*/function () {
|
|
64
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
|
|
65
|
+
var parsed, _t;
|
|
66
|
+
return _regenerator().w(function (_context) {
|
|
67
|
+
while (1) switch (_context.p = _context.n) {
|
|
68
|
+
case 0:
|
|
69
|
+
_context.p = 0;
|
|
70
|
+
_context.n = 1;
|
|
71
|
+
return new Promise(function (resolve) {
|
|
72
|
+
return setTimeout(resolve, 300);
|
|
73
|
+
});
|
|
74
|
+
case 1:
|
|
75
|
+
_context.n = 2;
|
|
76
|
+
return verifyLatestBootProof(_objectSpread2(_objectSpread2(_objectSpread2({
|
|
77
|
+
appName: appName
|
|
78
|
+
}, organizationId !== undefined && {
|
|
79
|
+
organizationId: organizationId
|
|
80
|
+
}), stampWith && {
|
|
81
|
+
stampWith: stampWith
|
|
82
|
+
}), anchor && {
|
|
83
|
+
anchor: anchor
|
|
84
|
+
}));
|
|
85
|
+
case 2:
|
|
86
|
+
parsed = _context.v;
|
|
87
|
+
setPivotHashHex(parsed.manifest.pivotHashHex);
|
|
88
|
+
setStatus("success");
|
|
89
|
+
if (!(!successPageDuration || successPageDuration === 0)) {
|
|
90
|
+
_context.n = 3;
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess(parsed.manifest.pivotHashHex);
|
|
94
|
+
closeModal();
|
|
95
|
+
return _context.a(2);
|
|
96
|
+
case 3:
|
|
97
|
+
setTimeout(function () {
|
|
98
|
+
return setIsTextPinging(true);
|
|
99
|
+
}, 500);
|
|
100
|
+
setTimeout(function () {
|
|
101
|
+
return setIsTextPinging(false);
|
|
102
|
+
}, 1500);
|
|
103
|
+
closeTimeoutRef.current = setTimeout(function () {
|
|
104
|
+
onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess(parsed.manifest.pivotHashHex);
|
|
105
|
+
closeModal();
|
|
106
|
+
}, successPageDuration);
|
|
107
|
+
_context.n = 5;
|
|
108
|
+
break;
|
|
109
|
+
case 4:
|
|
110
|
+
_context.p = 4;
|
|
111
|
+
_t = _context.v;
|
|
112
|
+
setError(_t);
|
|
113
|
+
setStatus("error");
|
|
114
|
+
onError === null || onError === void 0 ? void 0 : onError(_t);
|
|
115
|
+
case 5:
|
|
116
|
+
return _context.a(2);
|
|
117
|
+
}
|
|
118
|
+
}, _callee, null, [[0, 4]]);
|
|
119
|
+
}));
|
|
120
|
+
return function runAction() {
|
|
121
|
+
return _ref.apply(this, arguments);
|
|
122
|
+
};
|
|
123
|
+
}();
|
|
124
|
+
runAction();
|
|
125
|
+
return function () {
|
|
126
|
+
if (closeTimeoutRef.current) clearTimeout(closeTimeoutRef.current);
|
|
127
|
+
};
|
|
128
|
+
}, []);
|
|
129
|
+
if (status === "error") {
|
|
130
|
+
return jsx("div", {
|
|
131
|
+
className: clsx("flex flex-col items-center justify-center py-5 transition-all duration-300", isMobile ? "w-full" : "w-80"),
|
|
132
|
+
children: jsx(DeveloperError, {
|
|
133
|
+
developerTitle: "Enclave verification failed",
|
|
134
|
+
developerMessages: [error instanceof Error ? error.message : String(error)],
|
|
135
|
+
userTitle: "Verification failed",
|
|
136
|
+
userMessages: ["We couldn't verify this enclave's identity. Please try again later."]
|
|
137
|
+
})
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
return jsxs("div", {
|
|
141
|
+
className: clsx("flex flex-col items-center justify-center py-5 transition-all duration-300", isMobile ? "w-full" : "w-72"),
|
|
142
|
+
children: [status === "loading" && jsxs("div", {
|
|
143
|
+
className: "size-full absolute text-center text-lg font-semibold flex flex-row items-center justify-center gap-2",
|
|
144
|
+
children: [jsx(Spinner, {
|
|
145
|
+
strokeWidth: 2,
|
|
146
|
+
className: "h-full"
|
|
147
|
+
}), jsx("span", {
|
|
148
|
+
className: "animate-pulse",
|
|
149
|
+
children: "Verifying enclave identity..."
|
|
150
|
+
})]
|
|
151
|
+
}), jsx("div", {
|
|
152
|
+
className: "relative flex flex-col items-center justify-center size-[88px] overflow-hidden",
|
|
153
|
+
children: jsx(Transition, {
|
|
154
|
+
as: "div",
|
|
155
|
+
show: status === "success",
|
|
156
|
+
enter: "transition-all duration-600 ease-in-out",
|
|
157
|
+
enterFrom: "opacity-0 scale-40",
|
|
158
|
+
enterTo: "opacity-100 scale-100",
|
|
159
|
+
className: " absolute size-full flex flex-col items-center justify-center",
|
|
160
|
+
children: jsx("div", {
|
|
161
|
+
className: "size-full border-2 border-primary-light dark:border-primary-dark text-primary-light dark:text-primary-dark rounded-full flex flex-col items-center justify-center box-border",
|
|
162
|
+
children: jsxs(TransitionChild, {
|
|
163
|
+
as: "div",
|
|
164
|
+
enter: "transition-all duration-200 delay-300 ease-out",
|
|
165
|
+
enterFrom: "opacity-0 scale-60",
|
|
166
|
+
enterTo: "opacity-100 scale-100",
|
|
167
|
+
className: "relative flex flex-col items-center justify-center",
|
|
168
|
+
children: [jsx(FontAwesomeIcon, {
|
|
169
|
+
icon: faCheck,
|
|
170
|
+
size: "2x"
|
|
171
|
+
}), jsx(FontAwesomeIcon, {
|
|
172
|
+
className: "absolute animate-ping",
|
|
173
|
+
icon: faCheck,
|
|
174
|
+
size: "2x"
|
|
175
|
+
})]
|
|
176
|
+
})
|
|
177
|
+
})
|
|
178
|
+
})
|
|
179
|
+
}), jsxs(Transition, {
|
|
180
|
+
as: "div",
|
|
181
|
+
show: status === "success",
|
|
182
|
+
className: "w-full text-center text-lg font-semibold flex flex-col items-center justify-center mt-2 relative",
|
|
183
|
+
enter: "transition-all ease-out duration-200 delay-200",
|
|
184
|
+
enterFrom: "opacity-0 -translate-y-2",
|
|
185
|
+
enterTo: "opacity-100 translate-y-0",
|
|
186
|
+
children: [jsx("span", {
|
|
187
|
+
children: "Verified!"
|
|
188
|
+
}), isTextPinging && jsx("span", {
|
|
189
|
+
className: "absolute animate-ping text-icon-text-light dark:text-icon-text-dark",
|
|
190
|
+
children: "Verified!"
|
|
191
|
+
})]
|
|
192
|
+
}), status === "success" && pivotHashHex && jsxs("div", {
|
|
193
|
+
className: "w-full text-center text-xs mt-3 font-mono text-icon-text-light dark:text-icon-text-dark break-all px-4",
|
|
194
|
+
children: ["pivot ", pivotHashHex.slice(0, 16), "..."]
|
|
195
|
+
})]
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export { VerifyEnclavePage };
|
|
200
|
+
//# sourceMappingURL=VerifyEnclave.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VerifyEnclave.mjs","sources":["../../../src/components/verify/VerifyEnclave.tsx"],"sourcesContent":[null],"names":["VerifyEnclavePage","props","appName","organizationId","stampWith","anchor","onSuccess","onError","successPageDuration","_useModal","useModal","isMobile","closeModal","_useZeroXKey","useZeroXKey","verifyLatestBootProof","hasRun","useRef","_useState","useState","_useState2","_slicedToArray","status","setStatus","_useState3","_useState4","pivotHashHex","setPivotHashHex","_useState5","undefined","_useState6","error","setError","_useState7","_useState8","isTextPinging","setIsTextPinging","useEffect","current","closeTimeoutRef","runAction","_ref","_asyncToGenerator","_regenerator","m","_callee","parsed","_t","w","_context","p","n","Promise","resolve","setTimeout","_objectSpread","v","manifest","a","apply","arguments","clearTimeout","_jsx","className","clsx","children","DeveloperError","developerTitle","developerMessages","Error","message","String","userTitle","userMessages","_jsxs","Spinner","strokeWidth","Transition","as","show","enter","enterFrom","enterTo","TransitionChild","FontAwesomeIcon","icon","faCheck","size","slice"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../../src/providers/client/Provider.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../../src/providers/client/Provider.tsx"],"names":[],"mappings":"AAkIA,OAAO,EAAE,SAAS,EAA4C,MAAM,OAAO,CAAC;AAuB5E,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAM5B,MAAM,kBAAkB,CAAC;AA0D1B;;GAEG;AACH,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,SAAS,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA4uLxD,CAAC"}
|
|
@@ -35,6 +35,7 @@ var OTP = require('../../components/auth/OTP.js');
|
|
|
35
35
|
var RemoveEmail = require('../../components/user/RemoveEmail.js');
|
|
36
36
|
var RemovePhoneNumber = require('../../components/user/RemovePhoneNumber.js');
|
|
37
37
|
var Verify = require('../../components/verify/Verify.js');
|
|
38
|
+
var VerifyEnclave = require('../../components/verify/VerifyEnclave.js');
|
|
38
39
|
var OnRamp = require('../../components/onramp/OnRamp.js');
|
|
39
40
|
var Svg = require('../../components/design/Svg.js');
|
|
40
41
|
var SendTransaction = require('../../components/send-transaction/SendTransaction.js');
|
|
@@ -1765,6 +1766,14 @@ const ClientProvider = ({
|
|
|
1765
1766
|
if (!client) throw new sdkTypes.ZeroXKeyError("Client is not initialized.", sdkTypes.ZeroXKeyErrorCodes.CLIENT_NOT_INITIALIZED);
|
|
1766
1767
|
return utils.withZeroXKeyErrorHandling(() => client.fetchBootProofForAppProof(params), () => logout(), callbacks, "Failed to fetch or create delegated access user");
|
|
1767
1768
|
}, [client, callbacks, logout]);
|
|
1769
|
+
const fetchLatestBootProof = react.useCallback(async params => {
|
|
1770
|
+
if (!client) throw new sdkTypes.ZeroXKeyError("Client is not initialized.", sdkTypes.ZeroXKeyErrorCodes.CLIENT_NOT_INITIALIZED);
|
|
1771
|
+
return utils.withZeroXKeyErrorHandling(() => client.fetchLatestBootProof(params), () => logout(), callbacks, "Failed to get the latest boot proof");
|
|
1772
|
+
}, [client, callbacks, logout]);
|
|
1773
|
+
const verifyLatestBootProof = react.useCallback(async params => {
|
|
1774
|
+
if (!client) throw new sdkTypes.ZeroXKeyError("Client is not initialized.", sdkTypes.ZeroXKeyErrorCodes.CLIENT_NOT_INITIALIZED);
|
|
1775
|
+
return utils.withZeroXKeyErrorHandling(() => client.verifyLatestBootProof(params), () => logout(), callbacks, "Failed to verify the latest boot proof");
|
|
1776
|
+
}, [client, callbacks, logout]);
|
|
1768
1777
|
const verifyAppProofs = react.useCallback(async params => {
|
|
1769
1778
|
if (!client) throw new sdkTypes.ZeroXKeyError("Client is not initialized.", sdkTypes.ZeroXKeyErrorCodes.CLIENT_NOT_INITIALIZED);
|
|
1770
1779
|
return utils.withZeroXKeyErrorHandling(() => client.verifyAppProofs(params), () => logout(), callbacks, "Failed to verify app proofs");
|
|
@@ -3719,6 +3728,53 @@ const ClientProvider = ({
|
|
|
3719
3728
|
throw new sdkTypes.ZeroXKeyError("Failed to verify app proofs.", sdkTypes.ZeroXKeyErrorCodes.VERIFY_APP_PROOFS_ERROR, error);
|
|
3720
3729
|
}
|
|
3721
3730
|
}, [getSession, pushPage]);
|
|
3731
|
+
const handleVerifyEnclave = react.useCallback(async params => {
|
|
3732
|
+
const {
|
|
3733
|
+
appName,
|
|
3734
|
+
successPageDuration = 3000,
|
|
3735
|
+
stampWith,
|
|
3736
|
+
anchor
|
|
3737
|
+
} = params || {};
|
|
3738
|
+
const s = await getSession();
|
|
3739
|
+
const organizationId = params?.organizationId || s?.organizationId;
|
|
3740
|
+
if (!organizationId) {
|
|
3741
|
+
throw new sdkTypes.ZeroXKeyError("A session or passed in organization ID is required.", sdkTypes.ZeroXKeyErrorCodes.INVALID_REQUEST);
|
|
3742
|
+
}
|
|
3743
|
+
try {
|
|
3744
|
+
return await new Promise((resolve, reject) => {
|
|
3745
|
+
pushPage({
|
|
3746
|
+
key: "Verify enclave",
|
|
3747
|
+
content: jsxRuntime.jsx(VerifyEnclave.VerifyEnclavePage, {
|
|
3748
|
+
appName: appName,
|
|
3749
|
+
onSuccess: pivotHashHex => {
|
|
3750
|
+
resolve(pivotHashHex);
|
|
3751
|
+
},
|
|
3752
|
+
onError: error => {
|
|
3753
|
+
reject(error);
|
|
3754
|
+
},
|
|
3755
|
+
successPageDuration: successPageDuration,
|
|
3756
|
+
...(stampWith && {
|
|
3757
|
+
stampWith
|
|
3758
|
+
}),
|
|
3759
|
+
...(anchor && {
|
|
3760
|
+
anchor
|
|
3761
|
+
}),
|
|
3762
|
+
...(organizationId !== undefined && {
|
|
3763
|
+
organizationId
|
|
3764
|
+
})
|
|
3765
|
+
}),
|
|
3766
|
+
showTitle: false,
|
|
3767
|
+
preventBack: true,
|
|
3768
|
+
onClose: () => reject(new sdkTypes.ZeroXKeyError("User canceled the verify enclave process.", sdkTypes.ZeroXKeyErrorCodes.USER_CANCELED))
|
|
3769
|
+
});
|
|
3770
|
+
});
|
|
3771
|
+
} catch (error) {
|
|
3772
|
+
if (error instanceof sdkTypes.ZeroXKeyError) {
|
|
3773
|
+
throw error;
|
|
3774
|
+
}
|
|
3775
|
+
throw new sdkTypes.ZeroXKeyError("Failed to verify enclave.", sdkTypes.ZeroXKeyErrorCodes.VERIFY_LATEST_BOOT_PROOF_ERROR, error);
|
|
3776
|
+
}
|
|
3777
|
+
}, [getSession, pushPage]);
|
|
3722
3778
|
react.useEffect(() => {
|
|
3723
3779
|
if (proxyAuthConfigRef.current) return;
|
|
3724
3780
|
// Only fetch the proxy auth config once. Use that to build the master config.
|
|
@@ -3894,6 +3950,8 @@ const ClientProvider = ({
|
|
|
3894
3950
|
createApiKeyPair,
|
|
3895
3951
|
getProxyAuthConfig,
|
|
3896
3952
|
fetchBootProofForAppProof,
|
|
3953
|
+
fetchLatestBootProof,
|
|
3954
|
+
verifyLatestBootProof,
|
|
3897
3955
|
verifyAppProofs,
|
|
3898
3956
|
handleLogin,
|
|
3899
3957
|
handleGoogleOauth,
|
|
@@ -3920,6 +3978,7 @@ const ClientProvider = ({
|
|
|
3920
3978
|
handleRemoveUserEmail,
|
|
3921
3979
|
handleRemoveUserPhoneNumber,
|
|
3922
3980
|
handleVerifyAppProofs,
|
|
3981
|
+
handleVerifyEnclave,
|
|
3923
3982
|
handleOnRamp,
|
|
3924
3983
|
handleSendTransaction,
|
|
3925
3984
|
handleSendErc20Transfer
|