@worldcoin/idkit 4.0.9 → 4.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -31,6 +31,7 @@ function Example() {
31
31
  action: "my-action",
32
32
  rp_context,
33
33
  allow_legacy_proofs: false,
34
+ return_to: "myapp://idkit/callback",
34
35
  preset: orbLegacy({ signal: "user-123" }),
35
36
  });
36
37
  const isBusy =
@@ -72,6 +73,7 @@ function WidgetExample() {
72
73
  action="my-action"
73
74
  rp_context={rpContext}
74
75
  allow_legacy_proofs={false}
76
+ return_to="myapp://idkit/callback"
75
77
  preset={orbLegacy({ signal: "user-123" })}
76
78
  onSuccess={(result) => {
77
79
  // required: runs after verification succeeds
package/dist/index.cjs CHANGED
@@ -67,6 +67,7 @@ function toErrorCode(error) {
67
67
  // src/hooks/useIDKitFlow.ts
68
68
  var isDebug = () => typeof window !== "undefined" && window.IDKIT_DEBUG;
69
69
  function useIDKitFlow(createFlowHandle, config) {
70
+ const isInWorldApp = react.useMemo(() => idkitCore.isInWorldApp(), []);
70
71
  const [state, setState] = react.useState(
71
72
  createInitialHookState
72
73
  );
@@ -124,14 +125,15 @@ function useIDKitFlow(createFlowHandle, config) {
124
125
  connectorURI: request.connectorURI,
125
126
  requestId: request.requestId
126
127
  });
128
+ const connectorURI = isInWorldApp ? null : request.connectorURI;
127
129
  setState((prev) => {
128
- if (prev.connectorURI === request.connectorURI) {
130
+ if (prev.connectorURI === connectorURI) {
129
131
  return prev;
130
132
  }
131
- return { ...prev, connectorURI: request.connectorURI };
133
+ return { ...prev, connectorURI };
132
134
  });
133
135
  const pollInterval = configRef.current.polling?.interval ?? 1e3;
134
- const timeout = configRef.current.polling?.timeout ?? 3e5;
136
+ const timeout = configRef.current.polling?.timeout ?? 9e5;
135
137
  const startedAt = Date.now();
136
138
  while (true) {
137
139
  ensureNotAborted(controller.signal);
@@ -184,7 +186,7 @@ function useIDKitFlow(createFlowHandle, config) {
184
186
  abortRef.current = null;
185
187
  }
186
188
  };
187
- }, [state.isOpen, runId]);
189
+ }, [state.isOpen, runId, isInWorldApp]);
188
190
  return {
189
191
  open,
190
192
  reset,
@@ -195,7 +197,8 @@ function useIDKitFlow(createFlowHandle, config) {
195
197
  connectorURI: state.connectorURI,
196
198
  result: state.result,
197
199
  errorCode: state.errorCode,
198
- isOpen: state.isOpen
200
+ isOpen: state.isOpen,
201
+ isInWorldApp
199
202
  };
200
203
  }
201
204
 
@@ -208,6 +211,7 @@ function useIDKitRequest(config) {
208
211
  rp_context: config.rp_context,
209
212
  action_description: config.action_description,
210
213
  bridge_url: config.bridge_url,
214
+ return_to: config.return_to,
211
215
  allow_legacy_proofs: config.allow_legacy_proofs,
212
216
  override_connect_base_url: config.override_connect_base_url,
213
217
  environment: config.environment
@@ -1640,7 +1644,8 @@ function getVisualStage(isSuccess, isError, isHostVerifying) {
1640
1644
  if (isSuccess) return "success";
1641
1645
  return "worldid";
1642
1646
  }
1643
- function IDKitRequestWidget({
1647
+ function IDKitWidgetBase({
1648
+ flow,
1644
1649
  open,
1645
1650
  onOpenChange,
1646
1651
  handleVerify,
@@ -1648,12 +1653,8 @@ function IDKitRequestWidget({
1648
1653
  onError,
1649
1654
  autoClose = true,
1650
1655
  language,
1651
- ...config
1656
+ showSimulatorCallout
1652
1657
  }) {
1653
- if (typeof onSuccess !== "function") {
1654
- throw new Error("IDKitRequestWidget requires an onSuccess callback.");
1655
- }
1656
- const flow = useIDKitRequest(config);
1657
1658
  const { open: openFlow, reset: resetFlow } = flow;
1658
1659
  const [hostVerifyResult, setHostVerifyResult] = react.useState(null);
1659
1660
  const lastResultRef = react.useRef(null);
@@ -1695,13 +1696,31 @@ function IDKitRequestWidget({
1695
1696
  });
1696
1697
  }, [effectiveErrorCode, onError]);
1697
1698
  react.useEffect(() => {
1698
- if (isSuccess && autoClose) {
1699
+ if (!flow.isInWorldApp || !isHostVerifying || !flow.result || !handleVerify) {
1700
+ return;
1701
+ }
1702
+ let cancelled = false;
1703
+ void Promise.resolve(handleVerify(flow.result)).then(() => {
1704
+ if (!cancelled) setHostVerifyResult("passed");
1705
+ }).catch(() => {
1706
+ if (!cancelled) setHostVerifyResult("failed");
1707
+ });
1708
+ return () => {
1709
+ cancelled = true;
1710
+ };
1711
+ }, [flow.isInWorldApp, isHostVerifying, flow.result, handleVerify]);
1712
+ react.useEffect(() => {
1713
+ if (flow.isInWorldApp && (isSuccess || isError)) {
1714
+ onOpenChange(false);
1715
+ } else if (isSuccess && autoClose) {
1699
1716
  const timer = setTimeout(() => onOpenChange(false), 2500);
1700
1717
  return () => clearTimeout(timer);
1701
1718
  }
1702
- }, [isSuccess, autoClose, onOpenChange]);
1719
+ }, [isSuccess, isError, autoClose, onOpenChange, flow.isInWorldApp]);
1720
+ if (flow.isInWorldApp) {
1721
+ return null;
1722
+ }
1703
1723
  const stage = getVisualStage(isSuccess, isError, isHostVerifying);
1704
- const showSimulatorCallout = config.environment === "staging";
1705
1724
  return /* @__PURE__ */ jsxRuntime.jsxs(IDKitModal, { open, onOpenChange, children: [
1706
1725
  stage === "worldid" && /* @__PURE__ */ jsxRuntime.jsx(
1707
1726
  WorldIDState,
@@ -1735,6 +1754,35 @@ function IDKitRequestWidget({
1735
1754
  )
1736
1755
  ] });
1737
1756
  }
1757
+ function IDKitRequestWidget({
1758
+ open,
1759
+ onOpenChange,
1760
+ handleVerify,
1761
+ onSuccess,
1762
+ onError,
1763
+ autoClose,
1764
+ language,
1765
+ ...config
1766
+ }) {
1767
+ if (typeof onSuccess !== "function") {
1768
+ throw new Error("IDKitRequestWidget requires an onSuccess callback.");
1769
+ }
1770
+ const flow = useIDKitRequest(config);
1771
+ return /* @__PURE__ */ jsxRuntime.jsx(
1772
+ IDKitWidgetBase,
1773
+ {
1774
+ flow,
1775
+ open,
1776
+ onOpenChange,
1777
+ handleVerify,
1778
+ onSuccess,
1779
+ onError,
1780
+ autoClose,
1781
+ language,
1782
+ showSimulatorCallout: config.environment === "staging"
1783
+ }
1784
+ );
1785
+ }
1738
1786
 
1739
1787
  Object.defineProperty(exports, "IDKit", {
1740
1788
  enumerable: true,