@0xkey-io/react-wallet-kit 0.2.1 → 0.3.1

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.
@@ -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":"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"}
@@ -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":"AAgIA,OAAO,EAAE,SAAS,EAA4C,MAAM,OAAO,CAAC;AAsB5E,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAM5B,MAAM,kBAAkB,CAAC;AAwD1B;;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,CAwoLxD,CAAC"}
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