@worldcoin/idkit-core 4.0.14 → 4.0.15-dev.0587d15

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
@@ -16,7 +16,10 @@ The RP signature authenticates your verification requests. Generate it server-si
16
16
  import { signRequest } from "@worldcoin/idkit-core/signing";
17
17
 
18
18
  // Never expose RP_SIGNING_KEY to clients
19
- const sig = signRequest("my-action", process.env.RP_SIGNING_KEY);
19
+ const sig = signRequest({
20
+ action: "my-action",
21
+ signingKeyHex: process.env.RP_SIGNING_KEY!,
22
+ });
20
23
 
21
24
  // Return to client
22
25
  res.json({
@@ -50,6 +53,7 @@ const request = await IDKit.request({
50
53
  signature: rpSig.sig,
51
54
  },
52
55
  allow_legacy_proofs: false,
56
+ return_to: "myapp://idkit/callback",
53
57
  }).preset(orbLegacy({ signal: "user-123" }));
54
58
 
55
59
  // Display QR code for World App
@@ -114,10 +118,10 @@ const { success } = await response.json();
114
118
 
115
119
  Pure JS subpath exports are available for server-side use without WASM initialization:
116
120
 
117
- | Subpath | Exports |
118
- | ---------- | ---------------------------------------------------------------- |
119
- | `/signing` | `signRequest`, `computeRpSignatureMessage`, `RpSignature` (type) |
120
- | `/hashing` | `hashSignal` |
121
+ | Subpath | Exports |
122
+ | ---------- | ----------------------------------------------------------------------------------------- |
123
+ | `/signing` | `signRequest`, `computeRpSignatureMessage`, `RpSignature` and `SignRequestParams` (types) |
124
+ | `/hashing` | `hashSignal` |
121
125
 
122
126
  ```typescript
123
127
  import { signRequest } from "@worldcoin/idkit-core/signing";
Binary file
package/dist/index.cjs CHANGED
@@ -422,10 +422,11 @@ var IDKitBuilder = class _IDKitBuilder {
422
422
  * @param {string | null} [action_description]
423
423
  * @param {string | null} [bridge_url]
424
424
  * @param {string | null} [override_connect_base_url]
425
+ * @param {string | null} [return_to]
425
426
  * @param {string | null} [environment]
426
427
  * @returns {IDKitBuilder}
427
428
  */
428
- static forCreateSession(app_id, rp_context, action_description, bridge_url, override_connect_base_url, environment) {
429
+ static forCreateSession(app_id, rp_context, action_description, bridge_url, override_connect_base_url, return_to, environment) {
429
430
  const ptr0 = passStringToWasm0(app_id, wasm.__wbindgen_export, wasm.__wbindgen_export2);
430
431
  const len0 = WASM_VECTOR_LEN;
431
432
  _assertClass(rp_context, RpContextWasm);
@@ -436,9 +437,11 @@ var IDKitBuilder = class _IDKitBuilder {
436
437
  var len3 = WASM_VECTOR_LEN;
437
438
  var ptr4 = isLikeNone(override_connect_base_url) ? 0 : passStringToWasm0(override_connect_base_url, wasm.__wbindgen_export, wasm.__wbindgen_export2);
438
439
  var len4 = WASM_VECTOR_LEN;
439
- var ptr5 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
440
+ var ptr5 = isLikeNone(return_to) ? 0 : passStringToWasm0(return_to, wasm.__wbindgen_export, wasm.__wbindgen_export2);
440
441
  var len5 = WASM_VECTOR_LEN;
441
- const ret = wasm.idkitbuilder_forCreateSession(ptr0, len0, ptr1, ptr2, len2, ptr3, len3, ptr4, len4, ptr5, len5);
442
+ var ptr6 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
443
+ var len6 = WASM_VECTOR_LEN;
444
+ const ret = wasm.idkitbuilder_forCreateSession(ptr0, len0, ptr1, ptr2, len2, ptr3, len3, ptr4, len4, ptr5, len5, ptr6, len6);
442
445
  return _IDKitBuilder.__wrap(ret);
443
446
  }
444
447
  /**
@@ -449,10 +452,11 @@ var IDKitBuilder = class _IDKitBuilder {
449
452
  * @param {string | null} [action_description]
450
453
  * @param {string | null} [bridge_url]
451
454
  * @param {string | null} [override_connect_base_url]
455
+ * @param {string | null} [return_to]
452
456
  * @param {string | null} [environment]
453
457
  * @returns {IDKitBuilder}
454
458
  */
455
- static forProveSession(session_id, app_id, rp_context, action_description, bridge_url, override_connect_base_url, environment) {
459
+ static forProveSession(session_id, app_id, rp_context, action_description, bridge_url, override_connect_base_url, return_to, environment) {
456
460
  const ptr0 = passStringToWasm0(session_id, wasm.__wbindgen_export, wasm.__wbindgen_export2);
457
461
  const len0 = WASM_VECTOR_LEN;
458
462
  const ptr1 = passStringToWasm0(app_id, wasm.__wbindgen_export, wasm.__wbindgen_export2);
@@ -465,9 +469,11 @@ var IDKitBuilder = class _IDKitBuilder {
465
469
  var len4 = WASM_VECTOR_LEN;
466
470
  var ptr5 = isLikeNone(override_connect_base_url) ? 0 : passStringToWasm0(override_connect_base_url, wasm.__wbindgen_export, wasm.__wbindgen_export2);
467
471
  var len5 = WASM_VECTOR_LEN;
468
- var ptr6 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
472
+ var ptr6 = isLikeNone(return_to) ? 0 : passStringToWasm0(return_to, wasm.__wbindgen_export, wasm.__wbindgen_export2);
469
473
  var len6 = WASM_VECTOR_LEN;
470
- const ret = wasm.idkitbuilder_forProveSession(ptr0, len0, ptr1, len1, ptr2, ptr3, len3, ptr4, len4, ptr5, len5, ptr6, len6);
474
+ var ptr7 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
475
+ var len7 = WASM_VECTOR_LEN;
476
+ const ret = wasm.idkitbuilder_forProveSession(ptr0, len0, ptr1, len1, ptr2, ptr3, len3, ptr4, len4, ptr5, len5, ptr6, len6, ptr7, len7);
471
477
  return _IDKitBuilder.__wrap(ret);
472
478
  }
473
479
  /**
@@ -564,9 +570,10 @@ var IDKitBuilder = class _IDKitBuilder {
564
570
  * @param {string | null | undefined} bridge_url
565
571
  * @param {boolean} allow_legacy_proofs
566
572
  * @param {string | null} [override_connect_base_url]
573
+ * @param {string | null} [return_to]
567
574
  * @param {string | null} [environment]
568
575
  */
569
- constructor(app_id, action, rp_context, action_description, bridge_url, allow_legacy_proofs, override_connect_base_url, environment) {
576
+ constructor(app_id, action, rp_context, action_description, bridge_url, allow_legacy_proofs, override_connect_base_url, return_to, environment) {
570
577
  const ptr0 = passStringToWasm0(app_id, wasm.__wbindgen_export, wasm.__wbindgen_export2);
571
578
  const len0 = WASM_VECTOR_LEN;
572
579
  const ptr1 = passStringToWasm0(action, wasm.__wbindgen_export, wasm.__wbindgen_export2);
@@ -579,9 +586,11 @@ var IDKitBuilder = class _IDKitBuilder {
579
586
  var len4 = WASM_VECTOR_LEN;
580
587
  var ptr5 = isLikeNone(override_connect_base_url) ? 0 : passStringToWasm0(override_connect_base_url, wasm.__wbindgen_export, wasm.__wbindgen_export2);
581
588
  var len5 = WASM_VECTOR_LEN;
582
- var ptr6 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
589
+ var ptr6 = isLikeNone(return_to) ? 0 : passStringToWasm0(return_to, wasm.__wbindgen_export, wasm.__wbindgen_export2);
583
590
  var len6 = WASM_VECTOR_LEN;
584
- const ret = wasm.idkitbuilder_new(ptr0, len0, ptr1, len1, ptr2, ptr3, len3, ptr4, len4, allow_legacy_proofs, ptr5, len5, ptr6, len6);
591
+ var ptr7 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
592
+ var len7 = WASM_VECTOR_LEN;
593
+ const ret = wasm.idkitbuilder_new(ptr0, len0, ptr1, len1, ptr2, ptr3, len3, ptr4, len4, allow_legacy_proofs, ptr5, len5, ptr6, len6, ptr7, len7);
585
594
  this.__wbg_ptr = ret >>> 0;
586
595
  IDKitBuilderFinalization.register(this, this.__wbg_ptr, this);
587
596
  return this;
@@ -966,12 +975,14 @@ function base64Encode(data) {
966
975
  wasm.__wbindgen_export4(deferred2_0, deferred2_1, 1);
967
976
  }
968
977
  }
969
- function computeRpSignatureMessage(nonce, created_at, expires_at) {
978
+ function computeRpSignatureMessage(nonce, created_at, expires_at, action) {
970
979
  try {
971
980
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
972
981
  const ptr0 = passStringToWasm0(nonce, wasm.__wbindgen_export, wasm.__wbindgen_export2);
973
982
  const len0 = WASM_VECTOR_LEN;
974
- wasm.computeRpSignatureMessage(retptr, ptr0, len0, created_at, expires_at);
983
+ var ptr1 = isLikeNone(action) ? 0 : passStringToWasm0(action, wasm.__wbindgen_export, wasm.__wbindgen_export2);
984
+ var len1 = WASM_VECTOR_LEN;
985
+ wasm.computeRpSignatureMessage(retptr, ptr0, len0, created_at, expires_at, ptr1, len1);
975
986
  var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
976
987
  var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
977
988
  var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
@@ -979,14 +990,14 @@ function computeRpSignatureMessage(nonce, created_at, expires_at) {
979
990
  if (r3) {
980
991
  throw takeObject(r2);
981
992
  }
982
- var v2 = getArrayU8FromWasm0(r0, r1).slice();
993
+ var v3 = getArrayU8FromWasm0(r0, r1).slice();
983
994
  wasm.__wbindgen_export4(r0, r1 * 1, 1);
984
- return v2;
995
+ return v3;
985
996
  } finally {
986
997
  wasm.__wbindgen_add_to_stack_pointer(16);
987
998
  }
988
999
  }
989
- function createSession(app_id, rp_context, action_description, bridge_url, override_connect_base_url, environment) {
1000
+ function createSession(app_id, rp_context, action_description, bridge_url, override_connect_base_url, return_to, environment) {
990
1001
  const ptr0 = passStringToWasm0(app_id, wasm.__wbindgen_export, wasm.__wbindgen_export2);
991
1002
  const len0 = WASM_VECTOR_LEN;
992
1003
  _assertClass(rp_context, RpContextWasm);
@@ -997,9 +1008,11 @@ function createSession(app_id, rp_context, action_description, bridge_url, overr
997
1008
  var len3 = WASM_VECTOR_LEN;
998
1009
  var ptr4 = isLikeNone(override_connect_base_url) ? 0 : passStringToWasm0(override_connect_base_url, wasm.__wbindgen_export, wasm.__wbindgen_export2);
999
1010
  var len4 = WASM_VECTOR_LEN;
1000
- var ptr5 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1011
+ var ptr5 = isLikeNone(return_to) ? 0 : passStringToWasm0(return_to, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1001
1012
  var len5 = WASM_VECTOR_LEN;
1002
- const ret = wasm.createSession(ptr0, len0, ptr1, ptr2, len2, ptr3, len3, ptr4, len4, ptr5, len5);
1013
+ var ptr6 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1014
+ var len6 = WASM_VECTOR_LEN;
1015
+ const ret = wasm.createSession(ptr0, len0, ptr1, ptr2, len2, ptr3, len3, ptr4, len4, ptr5, len5, ptr6, len6);
1003
1016
  return IDKitBuilder.__wrap(ret);
1004
1017
  }
1005
1018
  function hashSignal(signal) {
@@ -1030,7 +1043,7 @@ function hashSignal(signal) {
1030
1043
  function init_wasm() {
1031
1044
  wasm.init_wasm();
1032
1045
  }
1033
- function proveSession(session_id, app_id, rp_context, action_description, bridge_url, override_connect_base_url, environment) {
1046
+ function proveSession(session_id, app_id, rp_context, action_description, bridge_url, override_connect_base_url, return_to, environment) {
1034
1047
  const ptr0 = passStringToWasm0(session_id, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1035
1048
  const len0 = WASM_VECTOR_LEN;
1036
1049
  const ptr1 = passStringToWasm0(app_id, wasm.__wbindgen_export, wasm.__wbindgen_export2);
@@ -1043,12 +1056,14 @@ function proveSession(session_id, app_id, rp_context, action_description, bridge
1043
1056
  var len4 = WASM_VECTOR_LEN;
1044
1057
  var ptr5 = isLikeNone(override_connect_base_url) ? 0 : passStringToWasm0(override_connect_base_url, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1045
1058
  var len5 = WASM_VECTOR_LEN;
1046
- var ptr6 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1059
+ var ptr6 = isLikeNone(return_to) ? 0 : passStringToWasm0(return_to, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1047
1060
  var len6 = WASM_VECTOR_LEN;
1048
- const ret = wasm.proveSession(ptr0, len0, ptr1, len1, ptr2, ptr3, len3, ptr4, len4, ptr5, len5, ptr6, len6);
1061
+ var ptr7 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1062
+ var len7 = WASM_VECTOR_LEN;
1063
+ const ret = wasm.proveSession(ptr0, len0, ptr1, len1, ptr2, ptr3, len3, ptr4, len4, ptr5, len5, ptr6, len6, ptr7, len7);
1049
1064
  return IDKitBuilder.__wrap(ret);
1050
1065
  }
1051
- function request(app_id, action, rp_context, action_description, bridge_url, allow_legacy_proofs, override_connect_base_url, environment) {
1066
+ function request(app_id, action, rp_context, action_description, bridge_url, allow_legacy_proofs, override_connect_base_url, return_to, environment) {
1052
1067
  const ptr0 = passStringToWasm0(app_id, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1053
1068
  const len0 = WASM_VECTOR_LEN;
1054
1069
  const ptr1 = passStringToWasm0(action, wasm.__wbindgen_export, wasm.__wbindgen_export2);
@@ -1061,17 +1076,21 @@ function request(app_id, action, rp_context, action_description, bridge_url, all
1061
1076
  var len4 = WASM_VECTOR_LEN;
1062
1077
  var ptr5 = isLikeNone(override_connect_base_url) ? 0 : passStringToWasm0(override_connect_base_url, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1063
1078
  var len5 = WASM_VECTOR_LEN;
1064
- var ptr6 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1079
+ var ptr6 = isLikeNone(return_to) ? 0 : passStringToWasm0(return_to, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1065
1080
  var len6 = WASM_VECTOR_LEN;
1066
- const ret = wasm.request(ptr0, len0, ptr1, len1, ptr2, ptr3, len3, ptr4, len4, allow_legacy_proofs, ptr5, len5, ptr6, len6);
1081
+ var ptr7 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1082
+ var len7 = WASM_VECTOR_LEN;
1083
+ const ret = wasm.request(ptr0, len0, ptr1, len1, ptr2, ptr3, len3, ptr4, len4, allow_legacy_proofs, ptr5, len5, ptr6, len6, ptr7, len7);
1067
1084
  return IDKitBuilder.__wrap(ret);
1068
1085
  }
1069
- function signRequest(signing_key_hex, ttl_seconds) {
1086
+ function signRequest(signing_key_hex, ttl_seconds, action) {
1070
1087
  try {
1071
1088
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
1072
1089
  const ptr0 = passStringToWasm0(signing_key_hex, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1073
1090
  const len0 = WASM_VECTOR_LEN;
1074
- wasm.signRequest(retptr, ptr0, len0, !isLikeNone(ttl_seconds), isLikeNone(ttl_seconds) ? BigInt(0) : ttl_seconds);
1091
+ var ptr1 = isLikeNone(action) ? 0 : passStringToWasm0(action, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1092
+ var len1 = WASM_VECTOR_LEN;
1093
+ wasm.signRequest(retptr, ptr0, len0, !isLikeNone(ttl_seconds), isLikeNone(ttl_seconds) ? BigInt(0) : ttl_seconds, ptr1, len1);
1075
1094
  var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1076
1095
  var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1077
1096
  var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
@@ -1377,7 +1396,7 @@ function __wbg_get_imports() {
1377
1396
  const a = state0.a;
1378
1397
  state0.a = 0;
1379
1398
  try {
1380
- return __wasm_bindgen_func_elem_1382(a, state0.b, arg02, arg12);
1399
+ return __wasm_bindgen_func_elem_1421(a, state0.b, arg02, arg12);
1381
1400
  } finally {
1382
1401
  state0.a = a;
1383
1402
  }
@@ -1557,11 +1576,11 @@ function __wbg_get_imports() {
1557
1576
  return addHeapObject(ret);
1558
1577
  },
1559
1578
  __wbindgen_cast_0000000000000001: function(arg0, arg1) {
1560
- const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_632, __wasm_bindgen_func_elem_633);
1579
+ const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_643, __wasm_bindgen_func_elem_644);
1561
1580
  return addHeapObject(ret);
1562
1581
  },
1563
1582
  __wbindgen_cast_0000000000000002: function(arg0, arg1) {
1564
- const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_962, __wasm_bindgen_func_elem_963);
1583
+ const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_973, __wasm_bindgen_func_elem_974);
1565
1584
  return addHeapObject(ret);
1566
1585
  },
1567
1586
  __wbindgen_cast_0000000000000003: function(arg0) {
@@ -1597,13 +1616,13 @@ function __wbg_get_imports() {
1597
1616
  "./idkit_wasm_bg.js": import0
1598
1617
  };
1599
1618
  }
1600
- function __wasm_bindgen_func_elem_633(arg0, arg1) {
1601
- wasm.__wasm_bindgen_func_elem_633(arg0, arg1);
1619
+ function __wasm_bindgen_func_elem_644(arg0, arg1) {
1620
+ wasm.__wasm_bindgen_func_elem_644(arg0, arg1);
1602
1621
  }
1603
- function __wasm_bindgen_func_elem_963(arg0, arg1, arg2) {
1622
+ function __wasm_bindgen_func_elem_974(arg0, arg1, arg2) {
1604
1623
  try {
1605
1624
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
1606
- wasm.__wasm_bindgen_func_elem_963(retptr, arg0, arg1, addHeapObject(arg2));
1625
+ wasm.__wasm_bindgen_func_elem_974(retptr, arg0, arg1, addHeapObject(arg2));
1607
1626
  var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1608
1627
  var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1609
1628
  if (r1) {
@@ -1613,8 +1632,8 @@ function __wasm_bindgen_func_elem_963(arg0, arg1, arg2) {
1613
1632
  wasm.__wbindgen_add_to_stack_pointer(16);
1614
1633
  }
1615
1634
  }
1616
- function __wasm_bindgen_func_elem_1382(arg0, arg1, arg2, arg3) {
1617
- wasm.__wasm_bindgen_func_elem_1382(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
1635
+ function __wasm_bindgen_func_elem_1421(arg0, arg1, arg2, arg3) {
1636
+ wasm.__wasm_bindgen_func_elem_1421(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
1618
1637
  }
1619
1638
  var __wbindgen_enum_RequestCache = ["default", "no-store", "reload", "no-cache", "force-cache", "only-if-cached"];
1620
1639
  var __wbindgen_enum_RequestCredentials = ["omit", "same-origin", "include"];
@@ -1976,37 +1995,32 @@ function createNativeRequest(wasmPayload, config, signalHashes = {}, legacySigna
1976
1995
  var NativeIDKitRequest = class {
1977
1996
  constructor(wasmPayload, config, signalHashes = {}, legacySignalHash, version = 2) {
1978
1997
  this.connectorURI = "";
1979
- this.resolved = false;
1980
- this.cancelled = false;
1981
- this.settled = false;
1982
- this.resolvedResult = null;
1998
+ // Non-null once the request is done (success, error, cancel, or timeout).
1999
+ this.completionResult = null;
2000
+ this.resolveFn = null;
1983
2001
  this.messageHandler = null;
1984
2002
  this.miniKitHandler = null;
1985
- this.rejectFn = null;
1986
2003
  this.requestId = crypto.randomUUID?.() ?? `native-${Date.now()}-${++_requestCounter}`;
1987
- this.resultPromise = new Promise((resolve, reject) => {
1988
- this.rejectFn = reject;
2004
+ this.resultPromise = new Promise((resolve) => {
2005
+ this.resolveFn = resolve;
1989
2006
  const handleIncomingPayload = (responsePayload) => {
1990
- if (this.cancelled || this.resolved || this.settled) return;
2007
+ if (this.completionResult) return;
1991
2008
  if (responsePayload?.status === "error") {
1992
- this.cleanup();
1993
- reject(
1994
- new NativeVerifyError(
1995
- responsePayload.error_code ?? "generic_error" /* GenericError */
1996
- )
1997
- );
2009
+ this.complete({
2010
+ success: false,
2011
+ error: responsePayload.error_code ?? "generic_error" /* GenericError */
2012
+ });
1998
2013
  return;
1999
2014
  }
2000
- this.resolved = true;
2001
- const result = nativeResultToIDKitResult(
2002
- responsePayload,
2003
- config,
2004
- signalHashes,
2005
- legacySignalHash
2006
- );
2007
- this.resolvedResult = result;
2008
- this.cleanup();
2009
- resolve(result);
2015
+ this.complete({
2016
+ success: true,
2017
+ result: nativeResultToIDKitResult(
2018
+ responsePayload,
2019
+ config,
2020
+ signalHashes,
2021
+ legacySignalHash
2022
+ )
2023
+ });
2010
2024
  };
2011
2025
  const handler = (event) => {
2012
2026
  const data = event.data;
@@ -2032,38 +2046,39 @@ var NativeIDKitRequest = class {
2032
2046
  version,
2033
2047
  payload: wasmPayload
2034
2048
  };
2035
- const w = window;
2036
- if (w.webkit?.messageHandlers?.minikit) {
2037
- w.webkit.messageHandlers.minikit.postMessage(sendPayload);
2038
- } else if (w.Android) {
2039
- w.Android.postMessage(JSON.stringify(sendPayload));
2040
- } else {
2041
- this.cleanup();
2042
- reject(new Error("No WebView bridge available"));
2043
- }
2044
- });
2045
- this.resultPromise.catch(() => {
2046
- }).finally(() => {
2047
- this.settled = true;
2048
- this.cleanup();
2049
- if (_activeNativeRequest === this) {
2050
- _activeNativeRequest = null;
2049
+ try {
2050
+ const w = window;
2051
+ if (w.webkit?.messageHandlers?.minikit) {
2052
+ w.webkit.messageHandlers.minikit.postMessage(sendPayload);
2053
+ } else if (w.Android) {
2054
+ w.Android.postMessage(JSON.stringify(sendPayload));
2055
+ } else {
2056
+ this.complete({
2057
+ success: false,
2058
+ error: "generic_error" /* GenericError */
2059
+ });
2060
+ }
2061
+ } catch {
2062
+ this.complete({
2063
+ success: false,
2064
+ error: "generic_error" /* GenericError */
2065
+ });
2051
2066
  }
2052
2067
  });
2053
2068
  }
2054
- /**
2055
- * Cancel this request. Removes the message listener so it cannot consume
2056
- * a response meant for a later request, and rejects the pending promise.
2057
- */
2058
- cancel() {
2059
- if (this.resolved || this.cancelled) return;
2060
- this.cancelled = true;
2069
+ // Single entry point for finishing the request. Idempotent — first caller wins.
2070
+ complete(result) {
2071
+ if (this.completionResult) return;
2072
+ this.completionResult = result;
2061
2073
  this.cleanup();
2062
- this.rejectFn?.(new NativeVerifyError("cancelled" /* Cancelled */));
2074
+ this.resolveFn?.(result);
2063
2075
  if (_activeNativeRequest === this) {
2064
2076
  _activeNativeRequest = null;
2065
2077
  }
2066
2078
  }
2079
+ cancel() {
2080
+ this.complete({ success: false, error: "cancelled" /* Cancelled */ });
2081
+ }
2067
2082
  cleanup() {
2068
2083
  if (this.messageHandler) {
2069
2084
  window.removeEventListener("message", this.messageHandler);
@@ -2079,67 +2094,48 @@ var NativeIDKitRequest = class {
2079
2094
  }
2080
2095
  }
2081
2096
  isPending() {
2082
- return !this.settled && !this.cancelled;
2097
+ return this.completionResult === null;
2083
2098
  }
2084
2099
  async pollOnce() {
2085
- if (this.resolved && this.resolvedResult) {
2086
- return { type: "confirmed", result: this.resolvedResult };
2100
+ if (!this.completionResult) {
2101
+ return { type: "awaiting_confirmation" };
2087
2102
  }
2088
- return { type: "awaiting_confirmation" };
2103
+ if (this.completionResult.success) {
2104
+ return { type: "confirmed", result: this.completionResult.result };
2105
+ }
2106
+ return { type: "failed", error: this.completionResult.error };
2089
2107
  }
2090
2108
  async pollUntilCompletion(options) {
2091
- const timeout = options?.timeout ?? 3e5;
2092
- let timeoutId;
2093
- let abortHandler = null;
2094
- let waiterTerminationCode = null;
2109
+ const timeout = options?.timeout ?? 9e5;
2110
+ const timeoutId = setTimeout(() => {
2111
+ this.complete({ success: false, error: "timeout" /* Timeout */ });
2112
+ }, timeout);
2113
+ const abortHandler = options?.signal ? () => {
2114
+ this.complete({ success: false, error: "cancelled" /* Cancelled */ });
2115
+ } : null;
2116
+ if (abortHandler) {
2117
+ if (options.signal.aborted) {
2118
+ abortHandler();
2119
+ } else {
2120
+ options.signal.addEventListener("abort", abortHandler, {
2121
+ once: true
2122
+ });
2123
+ }
2124
+ }
2095
2125
  try {
2096
- const result = await Promise.race([
2097
- this.resultPromise,
2098
- new Promise((_, reject) => {
2099
- if (options?.signal) {
2100
- abortHandler = () => {
2101
- waiterTerminationCode = "cancelled" /* Cancelled */;
2102
- reject(new NativeVerifyError("cancelled" /* Cancelled */));
2103
- };
2104
- if (options.signal.aborted) {
2105
- abortHandler();
2106
- return;
2107
- }
2108
- options.signal.addEventListener("abort", abortHandler, {
2109
- once: true
2110
- });
2111
- }
2112
- timeoutId = setTimeout(() => {
2113
- waiterTerminationCode = "timeout" /* Timeout */;
2114
- reject(new NativeVerifyError("timeout" /* Timeout */));
2115
- }, timeout);
2116
- })
2117
- ]);
2118
- return { success: true, result };
2126
+ return await this.resultPromise;
2119
2127
  } catch (error) {
2120
- if (error instanceof NativeVerifyError) {
2121
- if (waiterTerminationCode === error.code && this.isPending()) {
2122
- this.cancel();
2123
- }
2124
- return { success: false, error: error.code };
2125
- }
2126
- return { success: false, error: "generic_error" /* GenericError */ };
2128
+ console.error("Unexpected rejection in native resultPromise", error);
2129
+ this.complete({ success: false, error: "generic_error" /* GenericError */ });
2130
+ return this.completionResult;
2127
2131
  } finally {
2128
- if (timeoutId) {
2129
- clearTimeout(timeoutId);
2130
- }
2132
+ clearTimeout(timeoutId);
2131
2133
  if (options?.signal && abortHandler) {
2132
2134
  options.signal.removeEventListener("abort", abortHandler);
2133
2135
  }
2134
2136
  }
2135
2137
  }
2136
2138
  };
2137
- var NativeVerifyError = class extends Error {
2138
- constructor(code) {
2139
- super(code);
2140
- this.code = code;
2141
- }
2142
- };
2143
2139
  function nativeResultToIDKitResult(payload, config, signalHashes, legacySignalHash) {
2144
2140
  const p = payload;
2145
2141
  const rpNonce = config.rp_context?.nonce ?? "";
@@ -2229,7 +2225,7 @@ var IDKitRequestImpl = class {
2229
2225
  }
2230
2226
  async pollUntilCompletion(options) {
2231
2227
  const pollInterval = options?.pollInterval ?? 1e3;
2232
- const timeout = options?.timeout ?? 3e5;
2228
+ const timeout = options?.timeout ?? 9e5;
2233
2229
  const startTime = Date.now();
2234
2230
  while (true) {
2235
2231
  if (options?.signal?.aborted) {
@@ -2287,6 +2283,7 @@ function createWasmBuilderFromConfig(config) {
2287
2283
  config.bridge_url ?? null,
2288
2284
  config.allow_legacy_proofs ?? false,
2289
2285
  config.override_connect_base_url ?? null,
2286
+ config.return_to ?? null,
2290
2287
  config.environment ?? null
2291
2288
  );
2292
2289
  }
@@ -2298,6 +2295,7 @@ function createWasmBuilderFromConfig(config) {
2298
2295
  config.action_description ?? null,
2299
2296
  config.bridge_url ?? null,
2300
2297
  config.override_connect_base_url ?? null,
2298
+ config.return_to ?? null,
2301
2299
  config.environment ?? null
2302
2300
  );
2303
2301
  }
@@ -2307,6 +2305,7 @@ function createWasmBuilderFromConfig(config) {
2307
2305
  config.action_description ?? null,
2308
2306
  config.bridge_url ?? null,
2309
2307
  config.override_connect_base_url ?? null,
2308
+ config.return_to ?? null,
2310
2309
  config.environment ?? null
2311
2310
  );
2312
2311
  }
@@ -2431,6 +2430,7 @@ function createRequest(config) {
2431
2430
  rp_context: config.rp_context,
2432
2431
  action_description: config.action_description,
2433
2432
  bridge_url: config.bridge_url,
2433
+ return_to: config.return_to,
2434
2434
  allow_legacy_proofs: config.allow_legacy_proofs,
2435
2435
  override_connect_base_url: config.override_connect_base_url,
2436
2436
  environment: config.environment
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- export { RpSignature, signRequest } from '@worldcoin/idkit-server';
1
+ export { RpSignature, SignRequestParams, signRequest } from '@worldcoin/idkit-server';
2
2
  export { hashSignal } from './hashing.cjs';
3
3
 
4
4
  /**
@@ -47,6 +47,8 @@ type IDKitRequestConfig = {
47
47
  action_description?: string;
48
48
  /** URL to a third-party bridge to use when connecting to the World App. Optional. */
49
49
  bridge_url?: string;
50
+ /** Optional deep-link callback URL appended as `return_to` on the connector URL. */
51
+ return_to?: string;
50
52
  /**
51
53
  * Whether to accept legacy (v3) World ID proofs as fallback.
52
54
  *
@@ -77,6 +79,8 @@ type IDKitSessionConfig = {
77
79
  action_description?: string;
78
80
  /** URL to a third-party bridge to use when connecting to the World App. Optional. */
79
81
  bridge_url?: string;
82
+ /** Optional deep-link callback URL appended as `return_to` on the connector URL. */
83
+ return_to?: string;
80
84
  /** Optional override for the connect base URL (e.g., for staging environments) */
81
85
  override_connect_base_url?: string;
82
86
  /** Optional environment override. Defaults to "production". */
@@ -300,6 +304,7 @@ interface BuilderConfig {
300
304
  rp_context?: RpContext;
301
305
  action_description?: string;
302
306
  bridge_url?: string;
307
+ return_to?: string;
303
308
  allow_legacy_proofs?: boolean;
304
309
  override_connect_base_url?: string;
305
310
  environment?: string;
@@ -314,7 +319,7 @@ interface BuilderConfig {
314
319
  interface WaitOptions {
315
320
  /** Milliseconds between polls (default: 1000) */
316
321
  pollInterval?: number;
317
- /** Total timeout in milliseconds (default: 300000 = 5 minutes) */
322
+ /** Total timeout in milliseconds (default: 900000 = 15 minutes) */
318
323
  timeout?: number;
319
324
  /** AbortSignal for cancellation */
320
325
  signal?: AbortSignal;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { RpSignature, signRequest } from '@worldcoin/idkit-server';
1
+ export { RpSignature, SignRequestParams, signRequest } from '@worldcoin/idkit-server';
2
2
  export { hashSignal } from './hashing.js';
3
3
 
4
4
  /**
@@ -47,6 +47,8 @@ type IDKitRequestConfig = {
47
47
  action_description?: string;
48
48
  /** URL to a third-party bridge to use when connecting to the World App. Optional. */
49
49
  bridge_url?: string;
50
+ /** Optional deep-link callback URL appended as `return_to` on the connector URL. */
51
+ return_to?: string;
50
52
  /**
51
53
  * Whether to accept legacy (v3) World ID proofs as fallback.
52
54
  *
@@ -77,6 +79,8 @@ type IDKitSessionConfig = {
77
79
  action_description?: string;
78
80
  /** URL to a third-party bridge to use when connecting to the World App. Optional. */
79
81
  bridge_url?: string;
82
+ /** Optional deep-link callback URL appended as `return_to` on the connector URL. */
83
+ return_to?: string;
80
84
  /** Optional override for the connect base URL (e.g., for staging environments) */
81
85
  override_connect_base_url?: string;
82
86
  /** Optional environment override. Defaults to "production". */
@@ -300,6 +304,7 @@ interface BuilderConfig {
300
304
  rp_context?: RpContext;
301
305
  action_description?: string;
302
306
  bridge_url?: string;
307
+ return_to?: string;
303
308
  allow_legacy_proofs?: boolean;
304
309
  override_connect_base_url?: string;
305
310
  environment?: string;
@@ -314,7 +319,7 @@ interface BuilderConfig {
314
319
  interface WaitOptions {
315
320
  /** Milliseconds between polls (default: 1000) */
316
321
  pollInterval?: number;
317
- /** Total timeout in milliseconds (default: 300000 = 5 minutes) */
322
+ /** Total timeout in milliseconds (default: 900000 = 15 minutes) */
318
323
  timeout?: number;
319
324
  /** AbortSignal for cancellation */
320
325
  signal?: AbortSignal;
package/dist/index.js CHANGED
@@ -419,10 +419,11 @@ var IDKitBuilder = class _IDKitBuilder {
419
419
  * @param {string | null} [action_description]
420
420
  * @param {string | null} [bridge_url]
421
421
  * @param {string | null} [override_connect_base_url]
422
+ * @param {string | null} [return_to]
422
423
  * @param {string | null} [environment]
423
424
  * @returns {IDKitBuilder}
424
425
  */
425
- static forCreateSession(app_id, rp_context, action_description, bridge_url, override_connect_base_url, environment) {
426
+ static forCreateSession(app_id, rp_context, action_description, bridge_url, override_connect_base_url, return_to, environment) {
426
427
  const ptr0 = passStringToWasm0(app_id, wasm.__wbindgen_export, wasm.__wbindgen_export2);
427
428
  const len0 = WASM_VECTOR_LEN;
428
429
  _assertClass(rp_context, RpContextWasm);
@@ -433,9 +434,11 @@ var IDKitBuilder = class _IDKitBuilder {
433
434
  var len3 = WASM_VECTOR_LEN;
434
435
  var ptr4 = isLikeNone(override_connect_base_url) ? 0 : passStringToWasm0(override_connect_base_url, wasm.__wbindgen_export, wasm.__wbindgen_export2);
435
436
  var len4 = WASM_VECTOR_LEN;
436
- var ptr5 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
437
+ var ptr5 = isLikeNone(return_to) ? 0 : passStringToWasm0(return_to, wasm.__wbindgen_export, wasm.__wbindgen_export2);
437
438
  var len5 = WASM_VECTOR_LEN;
438
- const ret = wasm.idkitbuilder_forCreateSession(ptr0, len0, ptr1, ptr2, len2, ptr3, len3, ptr4, len4, ptr5, len5);
439
+ var ptr6 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
440
+ var len6 = WASM_VECTOR_LEN;
441
+ const ret = wasm.idkitbuilder_forCreateSession(ptr0, len0, ptr1, ptr2, len2, ptr3, len3, ptr4, len4, ptr5, len5, ptr6, len6);
439
442
  return _IDKitBuilder.__wrap(ret);
440
443
  }
441
444
  /**
@@ -446,10 +449,11 @@ var IDKitBuilder = class _IDKitBuilder {
446
449
  * @param {string | null} [action_description]
447
450
  * @param {string | null} [bridge_url]
448
451
  * @param {string | null} [override_connect_base_url]
452
+ * @param {string | null} [return_to]
449
453
  * @param {string | null} [environment]
450
454
  * @returns {IDKitBuilder}
451
455
  */
452
- static forProveSession(session_id, app_id, rp_context, action_description, bridge_url, override_connect_base_url, environment) {
456
+ static forProveSession(session_id, app_id, rp_context, action_description, bridge_url, override_connect_base_url, return_to, environment) {
453
457
  const ptr0 = passStringToWasm0(session_id, wasm.__wbindgen_export, wasm.__wbindgen_export2);
454
458
  const len0 = WASM_VECTOR_LEN;
455
459
  const ptr1 = passStringToWasm0(app_id, wasm.__wbindgen_export, wasm.__wbindgen_export2);
@@ -462,9 +466,11 @@ var IDKitBuilder = class _IDKitBuilder {
462
466
  var len4 = WASM_VECTOR_LEN;
463
467
  var ptr5 = isLikeNone(override_connect_base_url) ? 0 : passStringToWasm0(override_connect_base_url, wasm.__wbindgen_export, wasm.__wbindgen_export2);
464
468
  var len5 = WASM_VECTOR_LEN;
465
- var ptr6 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
469
+ var ptr6 = isLikeNone(return_to) ? 0 : passStringToWasm0(return_to, wasm.__wbindgen_export, wasm.__wbindgen_export2);
466
470
  var len6 = WASM_VECTOR_LEN;
467
- const ret = wasm.idkitbuilder_forProveSession(ptr0, len0, ptr1, len1, ptr2, ptr3, len3, ptr4, len4, ptr5, len5, ptr6, len6);
471
+ var ptr7 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
472
+ var len7 = WASM_VECTOR_LEN;
473
+ const ret = wasm.idkitbuilder_forProveSession(ptr0, len0, ptr1, len1, ptr2, ptr3, len3, ptr4, len4, ptr5, len5, ptr6, len6, ptr7, len7);
468
474
  return _IDKitBuilder.__wrap(ret);
469
475
  }
470
476
  /**
@@ -561,9 +567,10 @@ var IDKitBuilder = class _IDKitBuilder {
561
567
  * @param {string | null | undefined} bridge_url
562
568
  * @param {boolean} allow_legacy_proofs
563
569
  * @param {string | null} [override_connect_base_url]
570
+ * @param {string | null} [return_to]
564
571
  * @param {string | null} [environment]
565
572
  */
566
- constructor(app_id, action, rp_context, action_description, bridge_url, allow_legacy_proofs, override_connect_base_url, environment) {
573
+ constructor(app_id, action, rp_context, action_description, bridge_url, allow_legacy_proofs, override_connect_base_url, return_to, environment) {
567
574
  const ptr0 = passStringToWasm0(app_id, wasm.__wbindgen_export, wasm.__wbindgen_export2);
568
575
  const len0 = WASM_VECTOR_LEN;
569
576
  const ptr1 = passStringToWasm0(action, wasm.__wbindgen_export, wasm.__wbindgen_export2);
@@ -576,9 +583,11 @@ var IDKitBuilder = class _IDKitBuilder {
576
583
  var len4 = WASM_VECTOR_LEN;
577
584
  var ptr5 = isLikeNone(override_connect_base_url) ? 0 : passStringToWasm0(override_connect_base_url, wasm.__wbindgen_export, wasm.__wbindgen_export2);
578
585
  var len5 = WASM_VECTOR_LEN;
579
- var ptr6 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
586
+ var ptr6 = isLikeNone(return_to) ? 0 : passStringToWasm0(return_to, wasm.__wbindgen_export, wasm.__wbindgen_export2);
580
587
  var len6 = WASM_VECTOR_LEN;
581
- const ret = wasm.idkitbuilder_new(ptr0, len0, ptr1, len1, ptr2, ptr3, len3, ptr4, len4, allow_legacy_proofs, ptr5, len5, ptr6, len6);
588
+ var ptr7 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
589
+ var len7 = WASM_VECTOR_LEN;
590
+ const ret = wasm.idkitbuilder_new(ptr0, len0, ptr1, len1, ptr2, ptr3, len3, ptr4, len4, allow_legacy_proofs, ptr5, len5, ptr6, len6, ptr7, len7);
582
591
  this.__wbg_ptr = ret >>> 0;
583
592
  IDKitBuilderFinalization.register(this, this.__wbg_ptr, this);
584
593
  return this;
@@ -963,12 +972,14 @@ function base64Encode(data) {
963
972
  wasm.__wbindgen_export4(deferred2_0, deferred2_1, 1);
964
973
  }
965
974
  }
966
- function computeRpSignatureMessage(nonce, created_at, expires_at) {
975
+ function computeRpSignatureMessage(nonce, created_at, expires_at, action) {
967
976
  try {
968
977
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
969
978
  const ptr0 = passStringToWasm0(nonce, wasm.__wbindgen_export, wasm.__wbindgen_export2);
970
979
  const len0 = WASM_VECTOR_LEN;
971
- wasm.computeRpSignatureMessage(retptr, ptr0, len0, created_at, expires_at);
980
+ var ptr1 = isLikeNone(action) ? 0 : passStringToWasm0(action, wasm.__wbindgen_export, wasm.__wbindgen_export2);
981
+ var len1 = WASM_VECTOR_LEN;
982
+ wasm.computeRpSignatureMessage(retptr, ptr0, len0, created_at, expires_at, ptr1, len1);
972
983
  var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
973
984
  var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
974
985
  var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
@@ -976,14 +987,14 @@ function computeRpSignatureMessage(nonce, created_at, expires_at) {
976
987
  if (r3) {
977
988
  throw takeObject(r2);
978
989
  }
979
- var v2 = getArrayU8FromWasm0(r0, r1).slice();
990
+ var v3 = getArrayU8FromWasm0(r0, r1).slice();
980
991
  wasm.__wbindgen_export4(r0, r1 * 1, 1);
981
- return v2;
992
+ return v3;
982
993
  } finally {
983
994
  wasm.__wbindgen_add_to_stack_pointer(16);
984
995
  }
985
996
  }
986
- function createSession(app_id, rp_context, action_description, bridge_url, override_connect_base_url, environment) {
997
+ function createSession(app_id, rp_context, action_description, bridge_url, override_connect_base_url, return_to, environment) {
987
998
  const ptr0 = passStringToWasm0(app_id, wasm.__wbindgen_export, wasm.__wbindgen_export2);
988
999
  const len0 = WASM_VECTOR_LEN;
989
1000
  _assertClass(rp_context, RpContextWasm);
@@ -994,9 +1005,11 @@ function createSession(app_id, rp_context, action_description, bridge_url, overr
994
1005
  var len3 = WASM_VECTOR_LEN;
995
1006
  var ptr4 = isLikeNone(override_connect_base_url) ? 0 : passStringToWasm0(override_connect_base_url, wasm.__wbindgen_export, wasm.__wbindgen_export2);
996
1007
  var len4 = WASM_VECTOR_LEN;
997
- var ptr5 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1008
+ var ptr5 = isLikeNone(return_to) ? 0 : passStringToWasm0(return_to, wasm.__wbindgen_export, wasm.__wbindgen_export2);
998
1009
  var len5 = WASM_VECTOR_LEN;
999
- const ret = wasm.createSession(ptr0, len0, ptr1, ptr2, len2, ptr3, len3, ptr4, len4, ptr5, len5);
1010
+ var ptr6 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1011
+ var len6 = WASM_VECTOR_LEN;
1012
+ const ret = wasm.createSession(ptr0, len0, ptr1, ptr2, len2, ptr3, len3, ptr4, len4, ptr5, len5, ptr6, len6);
1000
1013
  return IDKitBuilder.__wrap(ret);
1001
1014
  }
1002
1015
  function hashSignal(signal) {
@@ -1027,7 +1040,7 @@ function hashSignal(signal) {
1027
1040
  function init_wasm() {
1028
1041
  wasm.init_wasm();
1029
1042
  }
1030
- function proveSession(session_id, app_id, rp_context, action_description, bridge_url, override_connect_base_url, environment) {
1043
+ function proveSession(session_id, app_id, rp_context, action_description, bridge_url, override_connect_base_url, return_to, environment) {
1031
1044
  const ptr0 = passStringToWasm0(session_id, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1032
1045
  const len0 = WASM_VECTOR_LEN;
1033
1046
  const ptr1 = passStringToWasm0(app_id, wasm.__wbindgen_export, wasm.__wbindgen_export2);
@@ -1040,12 +1053,14 @@ function proveSession(session_id, app_id, rp_context, action_description, bridge
1040
1053
  var len4 = WASM_VECTOR_LEN;
1041
1054
  var ptr5 = isLikeNone(override_connect_base_url) ? 0 : passStringToWasm0(override_connect_base_url, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1042
1055
  var len5 = WASM_VECTOR_LEN;
1043
- var ptr6 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1056
+ var ptr6 = isLikeNone(return_to) ? 0 : passStringToWasm0(return_to, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1044
1057
  var len6 = WASM_VECTOR_LEN;
1045
- const ret = wasm.proveSession(ptr0, len0, ptr1, len1, ptr2, ptr3, len3, ptr4, len4, ptr5, len5, ptr6, len6);
1058
+ var ptr7 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1059
+ var len7 = WASM_VECTOR_LEN;
1060
+ const ret = wasm.proveSession(ptr0, len0, ptr1, len1, ptr2, ptr3, len3, ptr4, len4, ptr5, len5, ptr6, len6, ptr7, len7);
1046
1061
  return IDKitBuilder.__wrap(ret);
1047
1062
  }
1048
- function request(app_id, action, rp_context, action_description, bridge_url, allow_legacy_proofs, override_connect_base_url, environment) {
1063
+ function request(app_id, action, rp_context, action_description, bridge_url, allow_legacy_proofs, override_connect_base_url, return_to, environment) {
1049
1064
  const ptr0 = passStringToWasm0(app_id, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1050
1065
  const len0 = WASM_VECTOR_LEN;
1051
1066
  const ptr1 = passStringToWasm0(action, wasm.__wbindgen_export, wasm.__wbindgen_export2);
@@ -1058,17 +1073,21 @@ function request(app_id, action, rp_context, action_description, bridge_url, all
1058
1073
  var len4 = WASM_VECTOR_LEN;
1059
1074
  var ptr5 = isLikeNone(override_connect_base_url) ? 0 : passStringToWasm0(override_connect_base_url, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1060
1075
  var len5 = WASM_VECTOR_LEN;
1061
- var ptr6 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1076
+ var ptr6 = isLikeNone(return_to) ? 0 : passStringToWasm0(return_to, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1062
1077
  var len6 = WASM_VECTOR_LEN;
1063
- const ret = wasm.request(ptr0, len0, ptr1, len1, ptr2, ptr3, len3, ptr4, len4, allow_legacy_proofs, ptr5, len5, ptr6, len6);
1078
+ var ptr7 = isLikeNone(environment) ? 0 : passStringToWasm0(environment, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1079
+ var len7 = WASM_VECTOR_LEN;
1080
+ const ret = wasm.request(ptr0, len0, ptr1, len1, ptr2, ptr3, len3, ptr4, len4, allow_legacy_proofs, ptr5, len5, ptr6, len6, ptr7, len7);
1064
1081
  return IDKitBuilder.__wrap(ret);
1065
1082
  }
1066
- function signRequest(signing_key_hex, ttl_seconds) {
1083
+ function signRequest(signing_key_hex, ttl_seconds, action) {
1067
1084
  try {
1068
1085
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
1069
1086
  const ptr0 = passStringToWasm0(signing_key_hex, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1070
1087
  const len0 = WASM_VECTOR_LEN;
1071
- wasm.signRequest(retptr, ptr0, len0, !isLikeNone(ttl_seconds), isLikeNone(ttl_seconds) ? BigInt(0) : ttl_seconds);
1088
+ var ptr1 = isLikeNone(action) ? 0 : passStringToWasm0(action, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1089
+ var len1 = WASM_VECTOR_LEN;
1090
+ wasm.signRequest(retptr, ptr0, len0, !isLikeNone(ttl_seconds), isLikeNone(ttl_seconds) ? BigInt(0) : ttl_seconds, ptr1, len1);
1072
1091
  var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1073
1092
  var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1074
1093
  var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
@@ -1374,7 +1393,7 @@ function __wbg_get_imports() {
1374
1393
  const a = state0.a;
1375
1394
  state0.a = 0;
1376
1395
  try {
1377
- return __wasm_bindgen_func_elem_1382(a, state0.b, arg02, arg12);
1396
+ return __wasm_bindgen_func_elem_1421(a, state0.b, arg02, arg12);
1378
1397
  } finally {
1379
1398
  state0.a = a;
1380
1399
  }
@@ -1554,11 +1573,11 @@ function __wbg_get_imports() {
1554
1573
  return addHeapObject(ret);
1555
1574
  },
1556
1575
  __wbindgen_cast_0000000000000001: function(arg0, arg1) {
1557
- const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_632, __wasm_bindgen_func_elem_633);
1576
+ const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_643, __wasm_bindgen_func_elem_644);
1558
1577
  return addHeapObject(ret);
1559
1578
  },
1560
1579
  __wbindgen_cast_0000000000000002: function(arg0, arg1) {
1561
- const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_962, __wasm_bindgen_func_elem_963);
1580
+ const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_973, __wasm_bindgen_func_elem_974);
1562
1581
  return addHeapObject(ret);
1563
1582
  },
1564
1583
  __wbindgen_cast_0000000000000003: function(arg0) {
@@ -1594,13 +1613,13 @@ function __wbg_get_imports() {
1594
1613
  "./idkit_wasm_bg.js": import0
1595
1614
  };
1596
1615
  }
1597
- function __wasm_bindgen_func_elem_633(arg0, arg1) {
1598
- wasm.__wasm_bindgen_func_elem_633(arg0, arg1);
1616
+ function __wasm_bindgen_func_elem_644(arg0, arg1) {
1617
+ wasm.__wasm_bindgen_func_elem_644(arg0, arg1);
1599
1618
  }
1600
- function __wasm_bindgen_func_elem_963(arg0, arg1, arg2) {
1619
+ function __wasm_bindgen_func_elem_974(arg0, arg1, arg2) {
1601
1620
  try {
1602
1621
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
1603
- wasm.__wasm_bindgen_func_elem_963(retptr, arg0, arg1, addHeapObject(arg2));
1622
+ wasm.__wasm_bindgen_func_elem_974(retptr, arg0, arg1, addHeapObject(arg2));
1604
1623
  var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1605
1624
  var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1606
1625
  if (r1) {
@@ -1610,8 +1629,8 @@ function __wasm_bindgen_func_elem_963(arg0, arg1, arg2) {
1610
1629
  wasm.__wbindgen_add_to_stack_pointer(16);
1611
1630
  }
1612
1631
  }
1613
- function __wasm_bindgen_func_elem_1382(arg0, arg1, arg2, arg3) {
1614
- wasm.__wasm_bindgen_func_elem_1382(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
1632
+ function __wasm_bindgen_func_elem_1421(arg0, arg1, arg2, arg3) {
1633
+ wasm.__wasm_bindgen_func_elem_1421(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
1615
1634
  }
1616
1635
  var __wbindgen_enum_RequestCache = ["default", "no-store", "reload", "no-cache", "force-cache", "only-if-cached"];
1617
1636
  var __wbindgen_enum_RequestCredentials = ["omit", "same-origin", "include"];
@@ -1973,37 +1992,32 @@ function createNativeRequest(wasmPayload, config, signalHashes = {}, legacySigna
1973
1992
  var NativeIDKitRequest = class {
1974
1993
  constructor(wasmPayload, config, signalHashes = {}, legacySignalHash, version = 2) {
1975
1994
  this.connectorURI = "";
1976
- this.resolved = false;
1977
- this.cancelled = false;
1978
- this.settled = false;
1979
- this.resolvedResult = null;
1995
+ // Non-null once the request is done (success, error, cancel, or timeout).
1996
+ this.completionResult = null;
1997
+ this.resolveFn = null;
1980
1998
  this.messageHandler = null;
1981
1999
  this.miniKitHandler = null;
1982
- this.rejectFn = null;
1983
2000
  this.requestId = crypto.randomUUID?.() ?? `native-${Date.now()}-${++_requestCounter}`;
1984
- this.resultPromise = new Promise((resolve, reject) => {
1985
- this.rejectFn = reject;
2001
+ this.resultPromise = new Promise((resolve) => {
2002
+ this.resolveFn = resolve;
1986
2003
  const handleIncomingPayload = (responsePayload) => {
1987
- if (this.cancelled || this.resolved || this.settled) return;
2004
+ if (this.completionResult) return;
1988
2005
  if (responsePayload?.status === "error") {
1989
- this.cleanup();
1990
- reject(
1991
- new NativeVerifyError(
1992
- responsePayload.error_code ?? "generic_error" /* GenericError */
1993
- )
1994
- );
2006
+ this.complete({
2007
+ success: false,
2008
+ error: responsePayload.error_code ?? "generic_error" /* GenericError */
2009
+ });
1995
2010
  return;
1996
2011
  }
1997
- this.resolved = true;
1998
- const result = nativeResultToIDKitResult(
1999
- responsePayload,
2000
- config,
2001
- signalHashes,
2002
- legacySignalHash
2003
- );
2004
- this.resolvedResult = result;
2005
- this.cleanup();
2006
- resolve(result);
2012
+ this.complete({
2013
+ success: true,
2014
+ result: nativeResultToIDKitResult(
2015
+ responsePayload,
2016
+ config,
2017
+ signalHashes,
2018
+ legacySignalHash
2019
+ )
2020
+ });
2007
2021
  };
2008
2022
  const handler = (event) => {
2009
2023
  const data = event.data;
@@ -2029,38 +2043,39 @@ var NativeIDKitRequest = class {
2029
2043
  version,
2030
2044
  payload: wasmPayload
2031
2045
  };
2032
- const w = window;
2033
- if (w.webkit?.messageHandlers?.minikit) {
2034
- w.webkit.messageHandlers.minikit.postMessage(sendPayload);
2035
- } else if (w.Android) {
2036
- w.Android.postMessage(JSON.stringify(sendPayload));
2037
- } else {
2038
- this.cleanup();
2039
- reject(new Error("No WebView bridge available"));
2040
- }
2041
- });
2042
- this.resultPromise.catch(() => {
2043
- }).finally(() => {
2044
- this.settled = true;
2045
- this.cleanup();
2046
- if (_activeNativeRequest === this) {
2047
- _activeNativeRequest = null;
2046
+ try {
2047
+ const w = window;
2048
+ if (w.webkit?.messageHandlers?.minikit) {
2049
+ w.webkit.messageHandlers.minikit.postMessage(sendPayload);
2050
+ } else if (w.Android) {
2051
+ w.Android.postMessage(JSON.stringify(sendPayload));
2052
+ } else {
2053
+ this.complete({
2054
+ success: false,
2055
+ error: "generic_error" /* GenericError */
2056
+ });
2057
+ }
2058
+ } catch {
2059
+ this.complete({
2060
+ success: false,
2061
+ error: "generic_error" /* GenericError */
2062
+ });
2048
2063
  }
2049
2064
  });
2050
2065
  }
2051
- /**
2052
- * Cancel this request. Removes the message listener so it cannot consume
2053
- * a response meant for a later request, and rejects the pending promise.
2054
- */
2055
- cancel() {
2056
- if (this.resolved || this.cancelled) return;
2057
- this.cancelled = true;
2066
+ // Single entry point for finishing the request. Idempotent — first caller wins.
2067
+ complete(result) {
2068
+ if (this.completionResult) return;
2069
+ this.completionResult = result;
2058
2070
  this.cleanup();
2059
- this.rejectFn?.(new NativeVerifyError("cancelled" /* Cancelled */));
2071
+ this.resolveFn?.(result);
2060
2072
  if (_activeNativeRequest === this) {
2061
2073
  _activeNativeRequest = null;
2062
2074
  }
2063
2075
  }
2076
+ cancel() {
2077
+ this.complete({ success: false, error: "cancelled" /* Cancelled */ });
2078
+ }
2064
2079
  cleanup() {
2065
2080
  if (this.messageHandler) {
2066
2081
  window.removeEventListener("message", this.messageHandler);
@@ -2076,67 +2091,48 @@ var NativeIDKitRequest = class {
2076
2091
  }
2077
2092
  }
2078
2093
  isPending() {
2079
- return !this.settled && !this.cancelled;
2094
+ return this.completionResult === null;
2080
2095
  }
2081
2096
  async pollOnce() {
2082
- if (this.resolved && this.resolvedResult) {
2083
- return { type: "confirmed", result: this.resolvedResult };
2097
+ if (!this.completionResult) {
2098
+ return { type: "awaiting_confirmation" };
2084
2099
  }
2085
- return { type: "awaiting_confirmation" };
2100
+ if (this.completionResult.success) {
2101
+ return { type: "confirmed", result: this.completionResult.result };
2102
+ }
2103
+ return { type: "failed", error: this.completionResult.error };
2086
2104
  }
2087
2105
  async pollUntilCompletion(options) {
2088
- const timeout = options?.timeout ?? 3e5;
2089
- let timeoutId;
2090
- let abortHandler = null;
2091
- let waiterTerminationCode = null;
2106
+ const timeout = options?.timeout ?? 9e5;
2107
+ const timeoutId = setTimeout(() => {
2108
+ this.complete({ success: false, error: "timeout" /* Timeout */ });
2109
+ }, timeout);
2110
+ const abortHandler = options?.signal ? () => {
2111
+ this.complete({ success: false, error: "cancelled" /* Cancelled */ });
2112
+ } : null;
2113
+ if (abortHandler) {
2114
+ if (options.signal.aborted) {
2115
+ abortHandler();
2116
+ } else {
2117
+ options.signal.addEventListener("abort", abortHandler, {
2118
+ once: true
2119
+ });
2120
+ }
2121
+ }
2092
2122
  try {
2093
- const result = await Promise.race([
2094
- this.resultPromise,
2095
- new Promise((_, reject) => {
2096
- if (options?.signal) {
2097
- abortHandler = () => {
2098
- waiterTerminationCode = "cancelled" /* Cancelled */;
2099
- reject(new NativeVerifyError("cancelled" /* Cancelled */));
2100
- };
2101
- if (options.signal.aborted) {
2102
- abortHandler();
2103
- return;
2104
- }
2105
- options.signal.addEventListener("abort", abortHandler, {
2106
- once: true
2107
- });
2108
- }
2109
- timeoutId = setTimeout(() => {
2110
- waiterTerminationCode = "timeout" /* Timeout */;
2111
- reject(new NativeVerifyError("timeout" /* Timeout */));
2112
- }, timeout);
2113
- })
2114
- ]);
2115
- return { success: true, result };
2123
+ return await this.resultPromise;
2116
2124
  } catch (error) {
2117
- if (error instanceof NativeVerifyError) {
2118
- if (waiterTerminationCode === error.code && this.isPending()) {
2119
- this.cancel();
2120
- }
2121
- return { success: false, error: error.code };
2122
- }
2123
- return { success: false, error: "generic_error" /* GenericError */ };
2125
+ console.error("Unexpected rejection in native resultPromise", error);
2126
+ this.complete({ success: false, error: "generic_error" /* GenericError */ });
2127
+ return this.completionResult;
2124
2128
  } finally {
2125
- if (timeoutId) {
2126
- clearTimeout(timeoutId);
2127
- }
2129
+ clearTimeout(timeoutId);
2128
2130
  if (options?.signal && abortHandler) {
2129
2131
  options.signal.removeEventListener("abort", abortHandler);
2130
2132
  }
2131
2133
  }
2132
2134
  }
2133
2135
  };
2134
- var NativeVerifyError = class extends Error {
2135
- constructor(code) {
2136
- super(code);
2137
- this.code = code;
2138
- }
2139
- };
2140
2136
  function nativeResultToIDKitResult(payload, config, signalHashes, legacySignalHash) {
2141
2137
  const p = payload;
2142
2138
  const rpNonce = config.rp_context?.nonce ?? "";
@@ -2226,7 +2222,7 @@ var IDKitRequestImpl = class {
2226
2222
  }
2227
2223
  async pollUntilCompletion(options) {
2228
2224
  const pollInterval = options?.pollInterval ?? 1e3;
2229
- const timeout = options?.timeout ?? 3e5;
2225
+ const timeout = options?.timeout ?? 9e5;
2230
2226
  const startTime = Date.now();
2231
2227
  while (true) {
2232
2228
  if (options?.signal?.aborted) {
@@ -2284,6 +2280,7 @@ function createWasmBuilderFromConfig(config) {
2284
2280
  config.bridge_url ?? null,
2285
2281
  config.allow_legacy_proofs ?? false,
2286
2282
  config.override_connect_base_url ?? null,
2283
+ config.return_to ?? null,
2287
2284
  config.environment ?? null
2288
2285
  );
2289
2286
  }
@@ -2295,6 +2292,7 @@ function createWasmBuilderFromConfig(config) {
2295
2292
  config.action_description ?? null,
2296
2293
  config.bridge_url ?? null,
2297
2294
  config.override_connect_base_url ?? null,
2295
+ config.return_to ?? null,
2298
2296
  config.environment ?? null
2299
2297
  );
2300
2298
  }
@@ -2304,6 +2302,7 @@ function createWasmBuilderFromConfig(config) {
2304
2302
  config.action_description ?? null,
2305
2303
  config.bridge_url ?? null,
2306
2304
  config.override_connect_base_url ?? null,
2305
+ config.return_to ?? null,
2307
2306
  config.environment ?? null
2308
2307
  );
2309
2308
  }
@@ -2428,6 +2427,7 @@ function createRequest(config) {
2428
2427
  rp_context: config.rp_context,
2429
2428
  action_description: config.action_description,
2430
2429
  bridge_url: config.bridge_url,
2430
+ return_to: config.return_to,
2431
2431
  allow_legacy_proofs: config.allow_legacy_proofs,
2432
2432
  override_connect_base_url: config.override_connect_base_url,
2433
2433
  environment: config.environment
@@ -1 +1 @@
1
- export { RpSignature, computeRpSignatureMessage, signRequest } from '@worldcoin/idkit-server';
1
+ export { RpSignature, SignRequestParams, computeRpSignatureMessage, signRequest } from '@worldcoin/idkit-server';
package/dist/signing.d.ts CHANGED
@@ -1 +1 @@
1
- export { RpSignature, computeRpSignatureMessage, signRequest } from '@worldcoin/idkit-server';
1
+ export { RpSignature, SignRequestParams, computeRpSignatureMessage, signRequest } from '@worldcoin/idkit-server';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@worldcoin/idkit-core",
3
- "version": "4.0.14",
3
+ "version": "4.0.15-dev.0587d15",
4
4
  "description": "Core IDKit SDK for World ID - Pure TypeScript, no dependencies",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",