ns-auth-sdk 1.14.0 → 1.14.2

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.
Files changed (153) hide show
  1. package/dist/{cjs-CSUAVztq.cjs → browser-index.cjs} +5476 -296
  2. package/dist/browser-index.cjs.map +1 -0
  3. package/dist/browser-index.d.cts +1998 -0
  4. package/dist/browser-index.d.cts.map +1 -0
  5. package/dist/browser-index.d.mts +1998 -0
  6. package/dist/browser-index.d.mts.map +1 -0
  7. package/dist/{cjs-sm5h7qxv.mjs → browser-index.mjs} +5169 -69
  8. package/dist/browser-index.mjs.map +1 -0
  9. package/dist/{group-coordination-BlFpBVpn.mjs → group-coordination-BV6PKlKp.mjs} +1 -1
  10. package/dist/{group-coordination-BlFpBVpn.mjs.map → group-coordination-BV6PKlKp.mjs.map} +1 -1
  11. package/dist/{group-coordination-ImuoJEoy.mjs → group-coordination-BytkmY9j.mjs} +1 -1
  12. package/dist/{group-coordination-LGIyipaX.cjs → group-coordination-DL39hJ3R.cjs} +1 -1
  13. package/dist/{group-coordination-LGIyipaX.cjs.map → group-coordination-DL39hJ3R.cjs.map} +1 -1
  14. package/dist/{group-coordination-Cf18OjZt.cjs → group-coordination-DLban6a7.cjs} +1 -1
  15. package/dist/index.cjs +8899 -41
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.d.cts.map +1 -1
  18. package/dist/index.mjs +9072 -213
  19. package/dist/index.mjs.map +1 -1
  20. package/dist/{prf-handler-D3EqUNWe.cjs → prf-handler-BNd7gmXJ.cjs} +1 -1
  21. package/dist/{prf-handler-D3EqUNWe.cjs.map → prf-handler-BNd7gmXJ.cjs.map} +1 -1
  22. package/dist/prf-handler-CRMgzJG2.cjs +3 -0
  23. package/dist/{prf-handler-Dly_WZGn.mjs → prf-handler-DG99ZkS2.mjs} +1 -1
  24. package/dist/{prf-handler-Db8CsoIP.mjs → prf-handler-Dj2WTO9i.mjs} +1 -1
  25. package/dist/{prf-handler-Db8CsoIP.mjs.map → prf-handler-Dj2WTO9i.mjs.map} +1 -1
  26. package/dist/zkm.service-Bv88tVS5.mjs +3 -0
  27. package/dist/zkm.service-D2BZ_aqA.cjs +3 -0
  28. package/dist/{zkm.service-DfSPbuOl.cjs → zkm.service-DX06sSfB.cjs} +1 -1
  29. package/dist/{zkm.service-DfSPbuOl.cjs.map → zkm.service-DX06sSfB.cjs.map} +1 -1
  30. package/dist/{zkm.service-B24N_0FB.mjs → zkm.service-j0HlN7Oq.mjs} +1 -1
  31. package/dist/{zkm.service-B24N_0FB.mjs.map → zkm.service-j0HlN7Oq.mjs.map} +1 -1
  32. package/package.json +19 -6
  33. package/dist/_esm-C7FRLTj2.cjs +0 -9030
  34. package/dist/_esm-C7FRLTj2.cjs.map +0 -1
  35. package/dist/_esm-D_oMW5T5.mjs +0 -9028
  36. package/dist/_esm-D_oMW5T5.mjs.map +0 -1
  37. package/dist/base64-js-B8y7dH5k.mjs +0 -93
  38. package/dist/base64-js-B8y7dH5k.mjs.map +0 -1
  39. package/dist/base64-js-Tm-kCeud.cjs +0 -98
  40. package/dist/base64-js-Tm-kCeud.cjs.map +0 -1
  41. package/dist/ccip-157tdxqP.cjs +0 -7947
  42. package/dist/ccip-157tdxqP.cjs.map +0 -1
  43. package/dist/ccip-BEMMdVyd.cjs +0 -4
  44. package/dist/ccip-BSmCdJ3K.mjs +0 -3
  45. package/dist/ccip-okqXkslP.mjs +0 -6567
  46. package/dist/ccip-okqXkslP.mjs.map +0 -1
  47. package/dist/chains-CTeD2UcS.mjs +0 -33
  48. package/dist/chains-CTeD2UcS.mjs.map +0 -1
  49. package/dist/chains-Du-lv_5i.cjs +0 -33
  50. package/dist/chains-Du-lv_5i.cjs.map +0 -1
  51. package/dist/chunk-Bnu9O96Y.cjs +0 -60
  52. package/dist/chunk-CVYhg9ik.mjs +0 -45
  53. package/dist/cjs-CSUAVztq.cjs.map +0 -1
  54. package/dist/cjs-sm5h7qxv.mjs.map +0 -1
  55. package/dist/defineChain-7QG67hYU.cjs +0 -30
  56. package/dist/defineChain-7QG67hYU.cjs.map +0 -1
  57. package/dist/defineChain-DBem8ZQY.mjs +0 -24
  58. package/dist/defineChain-DBem8ZQY.mjs.map +0 -1
  59. package/dist/dist-BPmSxkxc.cjs +0 -10676
  60. package/dist/dist-BPmSxkxc.cjs.map +0 -1
  61. package/dist/dist-BSjH4t6s.cjs +0 -12932
  62. package/dist/dist-BSjH4t6s.cjs.map +0 -1
  63. package/dist/dist-C-KjTK4Q.cjs +0 -447
  64. package/dist/dist-C-KjTK4Q.cjs.map +0 -1
  65. package/dist/dist-C2h97xM-.mjs +0 -355
  66. package/dist/dist-C2h97xM-.mjs.map +0 -1
  67. package/dist/dist-CT7grDWb.mjs +0 -12920
  68. package/dist/dist-CT7grDWb.mjs.map +0 -1
  69. package/dist/dist-D7fRmK6G.mjs +0 -10632
  70. package/dist/dist-D7fRmK6G.mjs.map +0 -1
  71. package/dist/dist-DlmcyFmM.mjs +0 -16951
  72. package/dist/dist-DlmcyFmM.mjs.map +0 -1
  73. package/dist/dist-O0uZr5OF.cjs +0 -17122
  74. package/dist/dist-O0uZr5OF.cjs.map +0 -1
  75. package/dist/echo-BB-JgAYZ.cjs +0 -339
  76. package/dist/echo-BB-JgAYZ.cjs.map +0 -1
  77. package/dist/echo-Bwy4_Cvh.mjs +0 -316
  78. package/dist/echo-Bwy4_Cvh.mjs.map +0 -1
  79. package/dist/echo-D6X2IuNW.cjs +0 -9
  80. package/dist/echo-DvfG_heb.mjs +0 -8
  81. package/dist/esm-BcHKCX5i.mjs +0 -569
  82. package/dist/esm-BcHKCX5i.mjs.map +0 -1
  83. package/dist/esm-Bh_YwFIz.cjs +0 -599
  84. package/dist/esm-Bh_YwFIz.cjs.map +0 -1
  85. package/dist/esm-C0XO9TQm.cjs +0 -30449
  86. package/dist/esm-C0XO9TQm.cjs.map +0 -1
  87. package/dist/esm-vMUVj9k4.mjs +0 -30440
  88. package/dist/esm-vMUVj9k4.mjs.map +0 -1
  89. package/dist/keyset-CKMQXvsb.mjs +0 -172
  90. package/dist/keyset-CKMQXvsb.mjs.map +0 -1
  91. package/dist/keyset-Cxdgu110.cjs +0 -237
  92. package/dist/keyset-Cxdgu110.cjs.map +0 -1
  93. package/dist/keyset-DLxpGhdu.cjs +0 -6
  94. package/dist/keyset-IKjlhvqF.mjs +0 -4
  95. package/dist/node-3EUJ4ga9.cjs +0 -9
  96. package/dist/node-C2UpE11T.cjs +0 -444
  97. package/dist/node-C2UpE11T.cjs.map +0 -1
  98. package/dist/node-CHdpTQdN.mjs +0 -8679
  99. package/dist/node-CHdpTQdN.mjs.map +0 -1
  100. package/dist/node-DQt1CVGl.mjs +0 -6
  101. package/dist/node-Dy8ww1LG.cjs +0 -8680
  102. package/dist/node-Dy8ww1LG.cjs.map +0 -1
  103. package/dist/node-IX55IH6z.mjs +0 -397
  104. package/dist/node-IX55IH6z.mjs.map +0 -1
  105. package/dist/nostr-BTOpBN_5.cjs +0 -11
  106. package/dist/nostr-D4E52XRU.mjs +0 -224
  107. package/dist/nostr-D4E52XRU.mjs.map +0 -1
  108. package/dist/nostr-Hv2tsnuI.cjs +0 -272
  109. package/dist/nostr-Hv2tsnuI.cjs.map +0 -1
  110. package/dist/nostr-ZwJe_DlZ.mjs +0 -4
  111. package/dist/pako.esm-DTVnlCJh.cjs +0 -3856
  112. package/dist/pako.esm-DTVnlCJh.cjs.map +0 -1
  113. package/dist/pako.esm-ORhkEHM2.mjs +0 -3838
  114. package/dist/pako.esm-ORhkEHM2.mjs.map +0 -1
  115. package/dist/peer-B9g3OQ5D.cjs +0 -18
  116. package/dist/peer-CptDj7zu.mjs +0 -745
  117. package/dist/peer-CptDj7zu.mjs.map +0 -1
  118. package/dist/peer-CtqL0yiE.mjs +0 -9
  119. package/dist/peer-XrPL0O6z.cjs +0 -822
  120. package/dist/peer-XrPL0O6z.cjs.map +0 -1
  121. package/dist/ping-BXKREIdI.mjs +0 -7
  122. package/dist/ping-BtVhKocl.cjs +0 -379
  123. package/dist/ping-BtVhKocl.cjs.map +0 -1
  124. package/dist/ping-D5fpMhGC.cjs +0 -11
  125. package/dist/ping-DOD50kW_.mjs +0 -332
  126. package/dist/ping-DOD50kW_.mjs.map +0 -1
  127. package/dist/policy-8HcjulLD.cjs +0 -293
  128. package/dist/policy-8HcjulLD.cjs.map +0 -1
  129. package/dist/policy-BA6MEOBY.mjs +0 -5
  130. package/dist/policy-BFNdXvmM.cjs +0 -11
  131. package/dist/policy-D_nFHHjo.mjs +0 -228
  132. package/dist/policy-D_nFHHjo.mjs.map +0 -1
  133. package/dist/prf-handler-BNiyCQMt.cjs +0 -3
  134. package/dist/src-CVfTUJQl.mjs +0 -822
  135. package/dist/src-CVfTUJQl.mjs.map +0 -1
  136. package/dist/src-D5S86Xpf.cjs +0 -827
  137. package/dist/src-D5S86Xpf.cjs.map +0 -1
  138. package/dist/types-B-TLIS13.cjs +0 -212
  139. package/dist/types-B-TLIS13.cjs.map +0 -1
  140. package/dist/types-CTm_FHYD.mjs +0 -111
  141. package/dist/types-CTm_FHYD.mjs.map +0 -1
  142. package/dist/validation-1xwWVXqE.mjs +0 -3
  143. package/dist/validation-DnpurN79.cjs +0 -405
  144. package/dist/validation-DnpurN79.cjs.map +0 -1
  145. package/dist/validation-IsAUvsvy.mjs +0 -334
  146. package/dist/validation-IsAUvsvy.mjs.map +0 -1
  147. package/dist/validation-yCvZCqIs.cjs +0 -6
  148. package/dist/wrapper-C5NpyacC.cjs +0 -3552
  149. package/dist/wrapper-C5NpyacC.cjs.map +0 -1
  150. package/dist/wrapper-CHq_CV4J.mjs +0 -3552
  151. package/dist/wrapper-CHq_CV4J.mjs.map +0 -1
  152. package/dist/zkm.service-BrXyI4BS.mjs +0 -3
  153. package/dist/zkm.service-BvQ01wSH.cjs +0 -3
@@ -100,4 +100,4 @@ Object.defineProperty(exports, 'isPrfSupported', {
100
100
  return isPrfSupported;
101
101
  }
102
102
  });
103
- //# sourceMappingURL=prf-handler-D3EqUNWe.cjs.map
103
+ //# sourceMappingURL=prf-handler-BNd7gmXJ.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"prf-handler-D3EqUNWe.cjs","names":[],"sources":["../src/utils/prf-handler.ts"],"sourcesContent":["/**\n * PRF (Pseudo-Random Function) handler for WebAuthn\n * @packageDocumentation\n */\n\nimport type { GetPrfSecretOptions, PasskeyCreationOptions } from './types.js';\n\nconst PRF_EVAL_INPUT = new TextEncoder().encode('nostr-pwk');\n\n/**\n * @returns PRF\n */\nexport async function isPrfSupported(): Promise<boolean> {\n try {\n const response = await navigator.credentials.get({\n publicKey: {\n challenge: crypto.getRandomValues(new Uint8Array(32)),\n allowCredentials: [],\n userVerification: 'required',\n extensions: { prf: { eval: { first: PRF_EVAL_INPUT } } },\n } as PublicKeyCredentialRequestOptions,\n });\n\n if (!response) return false;\n\n const assertion = response as unknown as {\n getClientExtensionResults: () => {\n prf?: {\n results?: {\n first?: ArrayBuffer;\n };\n };\n };\n };\n\n const res = assertion.getClientExtensionResults()?.prf?.results?.first;\n return !!res;\n } catch {\n return false;\n }\n}\n\n/**\n * @param options\n * @returns Credential\n */\nexport async function createPasskey(options: PasskeyCreationOptions = {}): Promise<Uint8Array> {\n // Node\n const rpName = options.rp?.name || (typeof location !== 'undefined' ? location.host : 'Nosskey');\n const rpId = options.rp?.id;\n const userName = options.user?.name || 'user@example.com';\n const userDisplayName = options.user?.displayName || 'Nosskey user';\n\n const credentialCreationOptions: CredentialCreationOptions = {\n publicKey: {\n rp: {\n name: rpName,\n id: rpId,\n },\n user: {\n id: crypto.getRandomValues(new Uint8Array(16)),\n name: userName,\n displayName: userDisplayName,\n },\n pubKeyCredParams: options.pubKeyCredParams || [{ type: 'public-key', alg: -7 }], // ES256\n authenticatorSelection: options.authenticatorSelection || {\n residentKey: 'required',\n userVerification: 'required',\n },\n challenge: crypto.getRandomValues(new Uint8Array(32)),\n extensions: options.extensions || { prf: {} }, // PRF拡張を要求\n } as PublicKeyCredentialCreationOptions,\n };\n const cred = (await navigator.credentials.create(\n credentialCreationOptions\n )) as PublicKeyCredential;\n\n return new Uint8Array(cred.rawId);\n}\n\n/**\n * ID\n * @param credentialId \n * @param options PRF(rpId、timeout、userVerification)\n * @returns PRF credentialID\n */\nexport async function getPrfSecret(\n credentialId?: Uint8Array,\n options?: GetPrfSecretOptions\n): Promise<{ secret: Uint8Array; id: Uint8Array }> {\n const allowCredentials = credentialId ? [{ type: 'public-key' as const, id: credentialId as BufferSource }] : [];\n\n const requestOptions: PublicKeyCredentialRequestOptions = {\n challenge: crypto.getRandomValues(new Uint8Array(32)),\n allowCredentials,\n userVerification: options?.userVerification || 'required',\n extensions: {\n prf: { eval: { first: PRF_EVAL_INPUT } },\n } as AuthenticationExtensionsClientInputs,\n };\n\n if (options?.rpId) {\n requestOptions.rpId = options.rpId;\n }\n if (options?.timeout) {\n requestOptions.timeout = options.timeout;\n }\n\n const response = await navigator.credentials.get({\n publicKey: requestOptions,\n });\n\n if (!response) {\n throw new Error('Authentication failed');\n }\n\n const assertion = response as unknown as {\n getClientExtensionResults: () => {\n prf?: {\n results?: {\n first?: ArrayBuffer;\n };\n };\n };\n };\n\n const secret = assertion.getClientExtensionResults()?.prf?.results?.first;\n if (!secret) {\n throw new Error('PRF secret not available');\n }\n\n // response credentialId\n const responseId = new Uint8Array((response as PublicKeyCredential).rawId);\n\n return {\n secret: new Uint8Array(secret),\n id: responseId,\n };\n}\n"],"mappings":";;AAOA,MAAM,iBAAiB,IAAI,aAAa,CAAC,OAAO,YAAY;;;;AAK5D,eAAsB,iBAAmC;AACvD,KAAI;EACF,MAAM,WAAW,MAAM,UAAU,YAAY,IAAI,EAC/C,WAAW;GACT,WAAW,OAAO,gBAAgB,IAAI,WAAW,GAAG,CAAC;GACrD,kBAAkB,EAAE;GACpB,kBAAkB;GAClB,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,gBAAgB,EAAE,EAAE;GACzD,EACF,CAAC;AAEF,MAAI,CAAC,SAAU,QAAO;AAatB,SAAO,CAAC,CAXU,SAUI,2BAA2B,EAAE,KAAK,SAAS;SAE3D;AACN,SAAO;;;;;;;AAQX,eAAsB,cAAc,UAAkC,EAAE,EAAuB;CAE7F,MAAM,SAAS,QAAQ,IAAI,SAAS,OAAO,aAAa,cAAc,SAAS,OAAO;CACtF,MAAM,OAAO,QAAQ,IAAI;CACzB,MAAM,WAAW,QAAQ,MAAM,QAAQ;CACvC,MAAM,kBAAkB,QAAQ,MAAM,eAAe;CAErD,MAAM,4BAAuD,EAC3D,WAAW;EACT,IAAI;GACF,MAAM;GACN,IAAI;GACL;EACD,MAAM;GACJ,IAAI,OAAO,gBAAgB,IAAI,WAAW,GAAG,CAAC;GAC9C,MAAM;GACN,aAAa;GACd;EACD,kBAAkB,QAAQ,oBAAoB,CAAC;GAAE,MAAM;GAAc,KAAK;GAAI,CAAC;EAC/E,wBAAwB,QAAQ,0BAA0B;GACxD,aAAa;GACb,kBAAkB;GACnB;EACD,WAAW,OAAO,gBAAgB,IAAI,WAAW,GAAG,CAAC;EACrD,YAAY,QAAQ,cAAc,EAAE,KAAK,EAAE,EAAE;EAC9C,EACF;CACD,MAAM,OAAQ,MAAM,UAAU,YAAY,OACxC,0BACD;AAED,QAAO,IAAI,WAAW,KAAK,MAAM;;;;;;;;AASnC,eAAsB,aACpB,cACA,SACiD;CACjD,MAAM,mBAAmB,eAAe,CAAC;EAAE,MAAM;EAAuB,IAAI;EAA8B,CAAC,GAAG,EAAE;CAEhH,MAAM,iBAAoD;EACxD,WAAW,OAAO,gBAAgB,IAAI,WAAW,GAAG,CAAC;EACrD;EACA,kBAAkB,SAAS,oBAAoB;EAC/C,YAAY,EACV,KAAK,EAAE,MAAM,EAAE,OAAO,gBAAgB,EAAE,EACzC;EACF;AAED,KAAI,SAAS,KACX,gBAAe,OAAO,QAAQ;AAEhC,KAAI,SAAS,QACX,gBAAe,UAAU,QAAQ;CAGnC,MAAM,WAAW,MAAM,UAAU,YAAY,IAAI,EAC/C,WAAW,gBACZ,CAAC;AAEF,KAAI,CAAC,SACH,OAAM,IAAI,MAAM,wBAAwB;CAa1C,MAAM,SAVY,SAUO,2BAA2B,EAAE,KAAK,SAAS;AACpE,KAAI,CAAC,OACH,OAAM,IAAI,MAAM,2BAA2B;CAI7C,MAAM,aAAa,IAAI,WAAY,SAAiC,MAAM;AAE1E,QAAO;EACL,QAAQ,IAAI,WAAW,OAAO;EAC9B,IAAI;EACL"}
1
+ {"version":3,"file":"prf-handler-BNd7gmXJ.cjs","names":[],"sources":["../src/utils/prf-handler.ts"],"sourcesContent":["/**\n * PRF (Pseudo-Random Function) handler for WebAuthn\n * @packageDocumentation\n */\n\nimport type { GetPrfSecretOptions, PasskeyCreationOptions } from './types.js';\n\nconst PRF_EVAL_INPUT = new TextEncoder().encode('nostr-pwk');\n\n/**\n * @returns PRF\n */\nexport async function isPrfSupported(): Promise<boolean> {\n try {\n const response = await navigator.credentials.get({\n publicKey: {\n challenge: crypto.getRandomValues(new Uint8Array(32)),\n allowCredentials: [],\n userVerification: 'required',\n extensions: { prf: { eval: { first: PRF_EVAL_INPUT } } },\n } as PublicKeyCredentialRequestOptions,\n });\n\n if (!response) return false;\n\n const assertion = response as unknown as {\n getClientExtensionResults: () => {\n prf?: {\n results?: {\n first?: ArrayBuffer;\n };\n };\n };\n };\n\n const res = assertion.getClientExtensionResults()?.prf?.results?.first;\n return !!res;\n } catch {\n return false;\n }\n}\n\n/**\n * @param options\n * @returns Credential\n */\nexport async function createPasskey(options: PasskeyCreationOptions = {}): Promise<Uint8Array> {\n // Node\n const rpName = options.rp?.name || (typeof location !== 'undefined' ? location.host : 'Nosskey');\n const rpId = options.rp?.id;\n const userName = options.user?.name || 'user@example.com';\n const userDisplayName = options.user?.displayName || 'Nosskey user';\n\n const credentialCreationOptions: CredentialCreationOptions = {\n publicKey: {\n rp: {\n name: rpName,\n id: rpId,\n },\n user: {\n id: crypto.getRandomValues(new Uint8Array(16)),\n name: userName,\n displayName: userDisplayName,\n },\n pubKeyCredParams: options.pubKeyCredParams || [{ type: 'public-key', alg: -7 }], // ES256\n authenticatorSelection: options.authenticatorSelection || {\n residentKey: 'required',\n userVerification: 'required',\n },\n challenge: crypto.getRandomValues(new Uint8Array(32)),\n extensions: options.extensions || { prf: {} }, // PRF拡張を要求\n } as PublicKeyCredentialCreationOptions,\n };\n const cred = (await navigator.credentials.create(\n credentialCreationOptions\n )) as PublicKeyCredential;\n\n return new Uint8Array(cred.rawId);\n}\n\n/**\n * ID\n * @param credentialId \n * @param options PRF(rpId、timeout、userVerification)\n * @returns PRF credentialID\n */\nexport async function getPrfSecret(\n credentialId?: Uint8Array,\n options?: GetPrfSecretOptions\n): Promise<{ secret: Uint8Array; id: Uint8Array }> {\n const allowCredentials = credentialId ? [{ type: 'public-key' as const, id: credentialId as BufferSource }] : [];\n\n const requestOptions: PublicKeyCredentialRequestOptions = {\n challenge: crypto.getRandomValues(new Uint8Array(32)),\n allowCredentials,\n userVerification: options?.userVerification || 'required',\n extensions: {\n prf: { eval: { first: PRF_EVAL_INPUT } },\n } as AuthenticationExtensionsClientInputs,\n };\n\n if (options?.rpId) {\n requestOptions.rpId = options.rpId;\n }\n if (options?.timeout) {\n requestOptions.timeout = options.timeout;\n }\n\n const response = await navigator.credentials.get({\n publicKey: requestOptions,\n });\n\n if (!response) {\n throw new Error('Authentication failed');\n }\n\n const assertion = response as unknown as {\n getClientExtensionResults: () => {\n prf?: {\n results?: {\n first?: ArrayBuffer;\n };\n };\n };\n };\n\n const secret = assertion.getClientExtensionResults()?.prf?.results?.first;\n if (!secret) {\n throw new Error('PRF secret not available');\n }\n\n // response credentialId\n const responseId = new Uint8Array((response as PublicKeyCredential).rawId);\n\n return {\n secret: new Uint8Array(secret),\n id: responseId,\n };\n}\n"],"mappings":";;AAOA,MAAM,iBAAiB,IAAI,aAAa,CAAC,OAAO,YAAY;;;;AAK5D,eAAsB,iBAAmC;AACvD,KAAI;EACF,MAAM,WAAW,MAAM,UAAU,YAAY,IAAI,EAC/C,WAAW;GACT,WAAW,OAAO,gBAAgB,IAAI,WAAW,GAAG,CAAC;GACrD,kBAAkB,EAAE;GACpB,kBAAkB;GAClB,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,gBAAgB,EAAE,EAAE;GACzD,EACF,CAAC;AAEF,MAAI,CAAC,SAAU,QAAO;AAatB,SAAO,CAAC,CAXU,SAUI,2BAA2B,EAAE,KAAK,SAAS;SAE3D;AACN,SAAO;;;;;;;AAQX,eAAsB,cAAc,UAAkC,EAAE,EAAuB;CAE7F,MAAM,SAAS,QAAQ,IAAI,SAAS,OAAO,aAAa,cAAc,SAAS,OAAO;CACtF,MAAM,OAAO,QAAQ,IAAI;CACzB,MAAM,WAAW,QAAQ,MAAM,QAAQ;CACvC,MAAM,kBAAkB,QAAQ,MAAM,eAAe;CAErD,MAAM,4BAAuD,EAC3D,WAAW;EACT,IAAI;GACF,MAAM;GACN,IAAI;GACL;EACD,MAAM;GACJ,IAAI,OAAO,gBAAgB,IAAI,WAAW,GAAG,CAAC;GAC9C,MAAM;GACN,aAAa;GACd;EACD,kBAAkB,QAAQ,oBAAoB,CAAC;GAAE,MAAM;GAAc,KAAK;GAAI,CAAC;EAC/E,wBAAwB,QAAQ,0BAA0B;GACxD,aAAa;GACb,kBAAkB;GACnB;EACD,WAAW,OAAO,gBAAgB,IAAI,WAAW,GAAG,CAAC;EACrD,YAAY,QAAQ,cAAc,EAAE,KAAK,EAAE,EAAE;EAC9C,EACF;CACD,MAAM,OAAQ,MAAM,UAAU,YAAY,OACxC,0BACD;AAED,QAAO,IAAI,WAAW,KAAK,MAAM;;;;;;;;AASnC,eAAsB,aACpB,cACA,SACiD;CACjD,MAAM,mBAAmB,eAAe,CAAC;EAAE,MAAM;EAAuB,IAAI;EAA8B,CAAC,GAAG,EAAE;CAEhH,MAAM,iBAAoD;EACxD,WAAW,OAAO,gBAAgB,IAAI,WAAW,GAAG,CAAC;EACrD;EACA,kBAAkB,SAAS,oBAAoB;EAC/C,YAAY,EACV,KAAK,EAAE,MAAM,EAAE,OAAO,gBAAgB,EAAE,EACzC;EACF;AAED,KAAI,SAAS,KACX,gBAAe,OAAO,QAAQ;AAEhC,KAAI,SAAS,QACX,gBAAe,UAAU,QAAQ;CAGnC,MAAM,WAAW,MAAM,UAAU,YAAY,IAAI,EAC/C,WAAW,gBACZ,CAAC;AAEF,KAAI,CAAC,SACH,OAAM,IAAI,MAAM,wBAAwB;CAa1C,MAAM,SAVY,SAUO,2BAA2B,EAAE,KAAK,SAAS;AACpE,KAAI,CAAC,OACH,OAAM,IAAI,MAAM,2BAA2B;CAI7C,MAAM,aAAa,IAAI,WAAY,SAAiC,MAAM;AAE1E,QAAO;EACL,QAAQ,IAAI,WAAW,OAAO;EAC9B,IAAI;EACL"}
@@ -0,0 +1,3 @@
1
+ const require_prf_handler = require('./prf-handler-BNd7gmXJ.cjs');
2
+
3
+ exports.getPrfSecret = require_prf_handler.getPrfSecret;
@@ -1,3 +1,3 @@
1
- import { n as getPrfSecret, r as isPrfSupported, t as createPasskey } from "./prf-handler-Db8CsoIP.mjs";
1
+ import { n as getPrfSecret, r as isPrfSupported, t as createPasskey } from "./prf-handler-Dj2WTO9i.mjs";
2
2
 
3
3
  export { getPrfSecret };
@@ -82,4 +82,4 @@ async function getPrfSecret(credentialId, options) {
82
82
 
83
83
  //#endregion
84
84
  export { getPrfSecret as n, isPrfSupported as r, createPasskey as t };
85
- //# sourceMappingURL=prf-handler-Db8CsoIP.mjs.map
85
+ //# sourceMappingURL=prf-handler-Dj2WTO9i.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"prf-handler-Db8CsoIP.mjs","names":[],"sources":["../src/utils/prf-handler.ts"],"sourcesContent":["/**\n * PRF (Pseudo-Random Function) handler for WebAuthn\n * @packageDocumentation\n */\n\nimport type { GetPrfSecretOptions, PasskeyCreationOptions } from './types.js';\n\nconst PRF_EVAL_INPUT = new TextEncoder().encode('nostr-pwk');\n\n/**\n * @returns PRF\n */\nexport async function isPrfSupported(): Promise<boolean> {\n try {\n const response = await navigator.credentials.get({\n publicKey: {\n challenge: crypto.getRandomValues(new Uint8Array(32)),\n allowCredentials: [],\n userVerification: 'required',\n extensions: { prf: { eval: { first: PRF_EVAL_INPUT } } },\n } as PublicKeyCredentialRequestOptions,\n });\n\n if (!response) return false;\n\n const assertion = response as unknown as {\n getClientExtensionResults: () => {\n prf?: {\n results?: {\n first?: ArrayBuffer;\n };\n };\n };\n };\n\n const res = assertion.getClientExtensionResults()?.prf?.results?.first;\n return !!res;\n } catch {\n return false;\n }\n}\n\n/**\n * @param options\n * @returns Credential\n */\nexport async function createPasskey(options: PasskeyCreationOptions = {}): Promise<Uint8Array> {\n // Node\n const rpName = options.rp?.name || (typeof location !== 'undefined' ? location.host : 'Nosskey');\n const rpId = options.rp?.id;\n const userName = options.user?.name || 'user@example.com';\n const userDisplayName = options.user?.displayName || 'Nosskey user';\n\n const credentialCreationOptions: CredentialCreationOptions = {\n publicKey: {\n rp: {\n name: rpName,\n id: rpId,\n },\n user: {\n id: crypto.getRandomValues(new Uint8Array(16)),\n name: userName,\n displayName: userDisplayName,\n },\n pubKeyCredParams: options.pubKeyCredParams || [{ type: 'public-key', alg: -7 }], // ES256\n authenticatorSelection: options.authenticatorSelection || {\n residentKey: 'required',\n userVerification: 'required',\n },\n challenge: crypto.getRandomValues(new Uint8Array(32)),\n extensions: options.extensions || { prf: {} }, // PRF拡張を要求\n } as PublicKeyCredentialCreationOptions,\n };\n const cred = (await navigator.credentials.create(\n credentialCreationOptions\n )) as PublicKeyCredential;\n\n return new Uint8Array(cred.rawId);\n}\n\n/**\n * ID\n * @param credentialId \n * @param options PRF(rpId、timeout、userVerification)\n * @returns PRF credentialID\n */\nexport async function getPrfSecret(\n credentialId?: Uint8Array,\n options?: GetPrfSecretOptions\n): Promise<{ secret: Uint8Array; id: Uint8Array }> {\n const allowCredentials = credentialId ? [{ type: 'public-key' as const, id: credentialId as BufferSource }] : [];\n\n const requestOptions: PublicKeyCredentialRequestOptions = {\n challenge: crypto.getRandomValues(new Uint8Array(32)),\n allowCredentials,\n userVerification: options?.userVerification || 'required',\n extensions: {\n prf: { eval: { first: PRF_EVAL_INPUT } },\n } as AuthenticationExtensionsClientInputs,\n };\n\n if (options?.rpId) {\n requestOptions.rpId = options.rpId;\n }\n if (options?.timeout) {\n requestOptions.timeout = options.timeout;\n }\n\n const response = await navigator.credentials.get({\n publicKey: requestOptions,\n });\n\n if (!response) {\n throw new Error('Authentication failed');\n }\n\n const assertion = response as unknown as {\n getClientExtensionResults: () => {\n prf?: {\n results?: {\n first?: ArrayBuffer;\n };\n };\n };\n };\n\n const secret = assertion.getClientExtensionResults()?.prf?.results?.first;\n if (!secret) {\n throw new Error('PRF secret not available');\n }\n\n // response credentialId\n const responseId = new Uint8Array((response as PublicKeyCredential).rawId);\n\n return {\n secret: new Uint8Array(secret),\n id: responseId,\n };\n}\n"],"mappings":";AAOA,MAAM,iBAAiB,IAAI,aAAa,CAAC,OAAO,YAAY;;;;AAK5D,eAAsB,iBAAmC;AACvD,KAAI;EACF,MAAM,WAAW,MAAM,UAAU,YAAY,IAAI,EAC/C,WAAW;GACT,WAAW,OAAO,gBAAgB,IAAI,WAAW,GAAG,CAAC;GACrD,kBAAkB,EAAE;GACpB,kBAAkB;GAClB,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,gBAAgB,EAAE,EAAE;GACzD,EACF,CAAC;AAEF,MAAI,CAAC,SAAU,QAAO;AAatB,SAAO,CAAC,CAXU,SAUI,2BAA2B,EAAE,KAAK,SAAS;SAE3D;AACN,SAAO;;;;;;;AAQX,eAAsB,cAAc,UAAkC,EAAE,EAAuB;CAE7F,MAAM,SAAS,QAAQ,IAAI,SAAS,OAAO,aAAa,cAAc,SAAS,OAAO;CACtF,MAAM,OAAO,QAAQ,IAAI;CACzB,MAAM,WAAW,QAAQ,MAAM,QAAQ;CACvC,MAAM,kBAAkB,QAAQ,MAAM,eAAe;CAErD,MAAM,4BAAuD,EAC3D,WAAW;EACT,IAAI;GACF,MAAM;GACN,IAAI;GACL;EACD,MAAM;GACJ,IAAI,OAAO,gBAAgB,IAAI,WAAW,GAAG,CAAC;GAC9C,MAAM;GACN,aAAa;GACd;EACD,kBAAkB,QAAQ,oBAAoB,CAAC;GAAE,MAAM;GAAc,KAAK;GAAI,CAAC;EAC/E,wBAAwB,QAAQ,0BAA0B;GACxD,aAAa;GACb,kBAAkB;GACnB;EACD,WAAW,OAAO,gBAAgB,IAAI,WAAW,GAAG,CAAC;EACrD,YAAY,QAAQ,cAAc,EAAE,KAAK,EAAE,EAAE;EAC9C,EACF;CACD,MAAM,OAAQ,MAAM,UAAU,YAAY,OACxC,0BACD;AAED,QAAO,IAAI,WAAW,KAAK,MAAM;;;;;;;;AASnC,eAAsB,aACpB,cACA,SACiD;CACjD,MAAM,mBAAmB,eAAe,CAAC;EAAE,MAAM;EAAuB,IAAI;EAA8B,CAAC,GAAG,EAAE;CAEhH,MAAM,iBAAoD;EACxD,WAAW,OAAO,gBAAgB,IAAI,WAAW,GAAG,CAAC;EACrD;EACA,kBAAkB,SAAS,oBAAoB;EAC/C,YAAY,EACV,KAAK,EAAE,MAAM,EAAE,OAAO,gBAAgB,EAAE,EACzC;EACF;AAED,KAAI,SAAS,KACX,gBAAe,OAAO,QAAQ;AAEhC,KAAI,SAAS,QACX,gBAAe,UAAU,QAAQ;CAGnC,MAAM,WAAW,MAAM,UAAU,YAAY,IAAI,EAC/C,WAAW,gBACZ,CAAC;AAEF,KAAI,CAAC,SACH,OAAM,IAAI,MAAM,wBAAwB;CAa1C,MAAM,SAVY,SAUO,2BAA2B,EAAE,KAAK,SAAS;AACpE,KAAI,CAAC,OACH,OAAM,IAAI,MAAM,2BAA2B;CAI7C,MAAM,aAAa,IAAI,WAAY,SAAiC,MAAM;AAE1E,QAAO;EACL,QAAQ,IAAI,WAAW,OAAO;EAC9B,IAAI;EACL"}
1
+ {"version":3,"file":"prf-handler-Dj2WTO9i.mjs","names":[],"sources":["../src/utils/prf-handler.ts"],"sourcesContent":["/**\n * PRF (Pseudo-Random Function) handler for WebAuthn\n * @packageDocumentation\n */\n\nimport type { GetPrfSecretOptions, PasskeyCreationOptions } from './types.js';\n\nconst PRF_EVAL_INPUT = new TextEncoder().encode('nostr-pwk');\n\n/**\n * @returns PRF\n */\nexport async function isPrfSupported(): Promise<boolean> {\n try {\n const response = await navigator.credentials.get({\n publicKey: {\n challenge: crypto.getRandomValues(new Uint8Array(32)),\n allowCredentials: [],\n userVerification: 'required',\n extensions: { prf: { eval: { first: PRF_EVAL_INPUT } } },\n } as PublicKeyCredentialRequestOptions,\n });\n\n if (!response) return false;\n\n const assertion = response as unknown as {\n getClientExtensionResults: () => {\n prf?: {\n results?: {\n first?: ArrayBuffer;\n };\n };\n };\n };\n\n const res = assertion.getClientExtensionResults()?.prf?.results?.first;\n return !!res;\n } catch {\n return false;\n }\n}\n\n/**\n * @param options\n * @returns Credential\n */\nexport async function createPasskey(options: PasskeyCreationOptions = {}): Promise<Uint8Array> {\n // Node\n const rpName = options.rp?.name || (typeof location !== 'undefined' ? location.host : 'Nosskey');\n const rpId = options.rp?.id;\n const userName = options.user?.name || 'user@example.com';\n const userDisplayName = options.user?.displayName || 'Nosskey user';\n\n const credentialCreationOptions: CredentialCreationOptions = {\n publicKey: {\n rp: {\n name: rpName,\n id: rpId,\n },\n user: {\n id: crypto.getRandomValues(new Uint8Array(16)),\n name: userName,\n displayName: userDisplayName,\n },\n pubKeyCredParams: options.pubKeyCredParams || [{ type: 'public-key', alg: -7 }], // ES256\n authenticatorSelection: options.authenticatorSelection || {\n residentKey: 'required',\n userVerification: 'required',\n },\n challenge: crypto.getRandomValues(new Uint8Array(32)),\n extensions: options.extensions || { prf: {} }, // PRF拡張を要求\n } as PublicKeyCredentialCreationOptions,\n };\n const cred = (await navigator.credentials.create(\n credentialCreationOptions\n )) as PublicKeyCredential;\n\n return new Uint8Array(cred.rawId);\n}\n\n/**\n * ID\n * @param credentialId \n * @param options PRF(rpId、timeout、userVerification)\n * @returns PRF credentialID\n */\nexport async function getPrfSecret(\n credentialId?: Uint8Array,\n options?: GetPrfSecretOptions\n): Promise<{ secret: Uint8Array; id: Uint8Array }> {\n const allowCredentials = credentialId ? [{ type: 'public-key' as const, id: credentialId as BufferSource }] : [];\n\n const requestOptions: PublicKeyCredentialRequestOptions = {\n challenge: crypto.getRandomValues(new Uint8Array(32)),\n allowCredentials,\n userVerification: options?.userVerification || 'required',\n extensions: {\n prf: { eval: { first: PRF_EVAL_INPUT } },\n } as AuthenticationExtensionsClientInputs,\n };\n\n if (options?.rpId) {\n requestOptions.rpId = options.rpId;\n }\n if (options?.timeout) {\n requestOptions.timeout = options.timeout;\n }\n\n const response = await navigator.credentials.get({\n publicKey: requestOptions,\n });\n\n if (!response) {\n throw new Error('Authentication failed');\n }\n\n const assertion = response as unknown as {\n getClientExtensionResults: () => {\n prf?: {\n results?: {\n first?: ArrayBuffer;\n };\n };\n };\n };\n\n const secret = assertion.getClientExtensionResults()?.prf?.results?.first;\n if (!secret) {\n throw new Error('PRF secret not available');\n }\n\n // response credentialId\n const responseId = new Uint8Array((response as PublicKeyCredential).rawId);\n\n return {\n secret: new Uint8Array(secret),\n id: responseId,\n };\n}\n"],"mappings":";AAOA,MAAM,iBAAiB,IAAI,aAAa,CAAC,OAAO,YAAY;;;;AAK5D,eAAsB,iBAAmC;AACvD,KAAI;EACF,MAAM,WAAW,MAAM,UAAU,YAAY,IAAI,EAC/C,WAAW;GACT,WAAW,OAAO,gBAAgB,IAAI,WAAW,GAAG,CAAC;GACrD,kBAAkB,EAAE;GACpB,kBAAkB;GAClB,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,gBAAgB,EAAE,EAAE;GACzD,EACF,CAAC;AAEF,MAAI,CAAC,SAAU,QAAO;AAatB,SAAO,CAAC,CAXU,SAUI,2BAA2B,EAAE,KAAK,SAAS;SAE3D;AACN,SAAO;;;;;;;AAQX,eAAsB,cAAc,UAAkC,EAAE,EAAuB;CAE7F,MAAM,SAAS,QAAQ,IAAI,SAAS,OAAO,aAAa,cAAc,SAAS,OAAO;CACtF,MAAM,OAAO,QAAQ,IAAI;CACzB,MAAM,WAAW,QAAQ,MAAM,QAAQ;CACvC,MAAM,kBAAkB,QAAQ,MAAM,eAAe;CAErD,MAAM,4BAAuD,EAC3D,WAAW;EACT,IAAI;GACF,MAAM;GACN,IAAI;GACL;EACD,MAAM;GACJ,IAAI,OAAO,gBAAgB,IAAI,WAAW,GAAG,CAAC;GAC9C,MAAM;GACN,aAAa;GACd;EACD,kBAAkB,QAAQ,oBAAoB,CAAC;GAAE,MAAM;GAAc,KAAK;GAAI,CAAC;EAC/E,wBAAwB,QAAQ,0BAA0B;GACxD,aAAa;GACb,kBAAkB;GACnB;EACD,WAAW,OAAO,gBAAgB,IAAI,WAAW,GAAG,CAAC;EACrD,YAAY,QAAQ,cAAc,EAAE,KAAK,EAAE,EAAE;EAC9C,EACF;CACD,MAAM,OAAQ,MAAM,UAAU,YAAY,OACxC,0BACD;AAED,QAAO,IAAI,WAAW,KAAK,MAAM;;;;;;;;AASnC,eAAsB,aACpB,cACA,SACiD;CACjD,MAAM,mBAAmB,eAAe,CAAC;EAAE,MAAM;EAAuB,IAAI;EAA8B,CAAC,GAAG,EAAE;CAEhH,MAAM,iBAAoD;EACxD,WAAW,OAAO,gBAAgB,IAAI,WAAW,GAAG,CAAC;EACrD;EACA,kBAAkB,SAAS,oBAAoB;EAC/C,YAAY,EACV,KAAK,EAAE,MAAM,EAAE,OAAO,gBAAgB,EAAE,EACzC;EACF;AAED,KAAI,SAAS,KACX,gBAAe,OAAO,QAAQ;AAEhC,KAAI,SAAS,QACX,gBAAe,UAAU,QAAQ;CAGnC,MAAM,WAAW,MAAM,UAAU,YAAY,IAAI,EAC/C,WAAW,gBACZ,CAAC;AAEF,KAAI,CAAC,SACH,OAAM,IAAI,MAAM,wBAAwB;CAa1C,MAAM,SAVY,SAUO,2BAA2B,EAAE,KAAK,SAAS;AACpE,KAAI,CAAC,OACH,OAAM,IAAI,MAAM,2BAA2B;CAI7C,MAAM,aAAa,IAAI,WAAY,SAAiC,MAAM;AAE1E,QAAO;EACL,QAAQ,IAAI,WAAW,OAAO;EAC9B,IAAI;EACL"}
@@ -0,0 +1,3 @@
1
+ import { i as verifyMembershipProof, n as generateMembershipProof, r as isZKMAvailable, t as ZKMService } from "./zkm.service-j0HlN7Oq.mjs";
2
+
3
+ export { ZKMService };
@@ -0,0 +1,3 @@
1
+ const require_zkm_service = require('./zkm.service-DX06sSfB.cjs');
2
+
3
+ exports.ZKMService = require_zkm_service.ZKMService;
@@ -136,4 +136,4 @@ Object.defineProperty(exports, 'verifyMembershipProof', {
136
136
  return verifyMembershipProof;
137
137
  }
138
138
  });
139
- //# sourceMappingURL=zkm.service-DfSPbuOl.cjs.map
139
+ //# sourceMappingURL=zkm.service-DX06sSfB.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"zkm.service-DfSPbuOl.cjs","names":["#config","#connected","#identity","#group"],"sources":["../src/services/zkm.service.ts"],"sourcesContent":["/**\n * ZK Membership Service - Using Semaphore library for anonymous group membership\n * @packageDocumentation\n */\n\nimport type { ZKMVerifierConfig } from '../types/zkm.js';\n\nexport interface ZKMIdentity {\n privateKey: string;\n commitment: string;\n}\n\nlet IdentityClass: any = null;\nlet GroupClass: any = null;\nlet generateProofFn: any = null;\nlet verifyProofFn: any = null;\n\nasync function loadSemaphore(): Promise<void> {\n if (IdentityClass) return;\n\n try {\n const semaphore = await import('@semaphore-protocol/proof');\n IdentityClass = semaphore.Identity;\n GroupClass = semaphore.Group;\n generateProofFn = semaphore.generateProof;\n verifyProofFn = semaphore.verifyProof;\n } catch (error) {\n throw new Error('Semaphore requires @semaphore-protocol/proof. Install with: npm install @semaphore-protocol/proof');\n }\n}\n\nexport function isZKMAvailable(): boolean {\n return true;\n}\n\nexport async function generateIdentity(): Promise<ZKMIdentity> {\n await loadSemaphore();\n const identity = new IdentityClass();\n return {\n privateKey: identity.identityNullifier.toString(16),\n commitment: identity.commitment.toString(16),\n };\n}\n\nexport async function createGroup(groupId: string, adminIdentity: ZKMIdentity): Promise<any> {\n await loadSemaphore();\n const identity = new IdentityClass(BigInt('0x' + adminIdentity.privateKey));\n const group = new GroupClass();\n group.addMember(identity.commitment);\n \n return {\n id: groupId,\n group,\n root: group.root.toString(16),\n createdAt: new Date().toISOString(),\n };\n}\n\nexport async function addMember(group: any, newIdentity: ZKMIdentity): Promise<any> {\n await loadSemaphore();\n const identity = new IdentityClass(BigInt('0x' + newIdentity.privateKey));\n group.group.addMember(identity.commitment);\n \n return {\n ...group,\n root: group.group.root.toString(16),\n };\n}\n\nexport async function generateMembershipProof(\n identity: ZKMIdentity,\n group: any,\n scope: string = 'default'\n): Promise<any> {\n await loadSemaphore();\n \n const semaphoreIdentity = new IdentityClass(BigInt('0x' + identity.privateKey));\n const proof = await generateProofFn(semaphoreIdentity, group.group, BigInt(scope), group.group.root);\n \n return {\n groupId: group.id,\n root: group.root,\n proof: JSON.stringify(proof),\n nullifier: proof.nullifier.toString(16),\n scope,\n merkleTreeDepth: group.group.depth,\n issuedAt: new Date().toISOString(),\n };\n}\n\nexport async function verifyMembershipProof(\n proof: any,\n knownRoot: string\n): Promise<boolean> {\n await loadSemaphore();\n \n try {\n const proofObj = typeof proof.proof === 'string' ? JSON.parse(proof.proof) : proof.proof;\n const isValid = await verifyProofFn(proofObj, BigInt('0x' + knownRoot));\n return isValid;\n } catch (error) {\n console.error('Proof verification failed:', error);\n return false;\n }\n}\n\nexport class ZKMService {\n #config: ZKMVerifierConfig | null = null;\n #connected = false;\n #identity: ZKMIdentity | null = null;\n #group: any = null;\n\n async connect(config: ZKMVerifierConfig): Promise<void> {\n this.#config = config;\n this.#connected = true;\n }\n\n async disconnect(): Promise<void> {\n this.#config = null;\n this.#connected = false;\n }\n\n isConnected(): boolean {\n return this.#connected;\n }\n\n async generateIdentity(): Promise<ZKMIdentity> {\n await loadSemaphore();\n const identity = new IdentityClass();\n this.#identity = {\n privateKey: identity.identityNullifier.toString(16),\n commitment: identity.commitment.toString(16),\n };\n return this.#identity;\n }\n\n async createGroup(groupId: string): Promise<any> {\n if (!this.#identity) {\n throw new Error('No identity. Call generateIdentity() first.');\n }\n \n await loadSemaphore();\n const identity = new IdentityClass(BigInt('0x' + this.#identity.privateKey));\n const group = new GroupClass();\n group.addMember(identity.commitment);\n \n this.#group = {\n id: groupId,\n group,\n root: group.root.toString(16),\n createdAt: new Date().toISOString(),\n };\n \n return this.#group;\n }\n\n async addMember(identity: ZKMIdentity): Promise<any> {\n if (!this.#group) {\n throw new Error('No group. Call createGroup() first.');\n }\n \n await loadSemaphore();\n const semaphoreIdentity = new IdentityClass(BigInt('0x' + identity.privateKey));\n this.#group.group.addMember(semaphoreIdentity.commitment);\n \n this.#group = {\n ...this.#group,\n root: this.#group.group.root.toString(16),\n };\n \n return this.#group;\n }\n\n async generateProof(scope?: string): Promise<any> {\n if (!this.#identity || !this.#group) {\n throw new Error('No identity or group. Call generateIdentity() and createGroup() first.');\n }\n \n return generateMembershipProof(this.#identity, this.#group, scope);\n }\n\n async verifyProof(proof: any, root: string): Promise<boolean> {\n return verifyMembershipProof(proof, root);\n }\n\n getIdentity(): ZKMIdentity | null {\n return this.#identity;\n }\n\n getGroup(): any | null {\n return this.#group;\n }\n\n getConfig(): ZKMVerifierConfig | null {\n return this.#config;\n }\n}"],"mappings":"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"}
1
+ {"version":3,"file":"zkm.service-DX06sSfB.cjs","names":["#config","#connected","#identity","#group"],"sources":["../src/services/zkm.service.ts"],"sourcesContent":["/**\n * ZK Membership Service - Using Semaphore library for anonymous group membership\n * @packageDocumentation\n */\n\nimport type { ZKMVerifierConfig } from '../types/zkm.js';\n\nexport interface ZKMIdentity {\n privateKey: string;\n commitment: string;\n}\n\nlet IdentityClass: any = null;\nlet GroupClass: any = null;\nlet generateProofFn: any = null;\nlet verifyProofFn: any = null;\n\nasync function loadSemaphore(): Promise<void> {\n if (IdentityClass) return;\n\n try {\n const semaphore = await import('@semaphore-protocol/proof');\n IdentityClass = semaphore.Identity;\n GroupClass = semaphore.Group;\n generateProofFn = semaphore.generateProof;\n verifyProofFn = semaphore.verifyProof;\n } catch (error) {\n throw new Error('Semaphore requires @semaphore-protocol/proof. Install with: npm install @semaphore-protocol/proof');\n }\n}\n\nexport function isZKMAvailable(): boolean {\n return true;\n}\n\nexport async function generateIdentity(): Promise<ZKMIdentity> {\n await loadSemaphore();\n const identity = new IdentityClass();\n return {\n privateKey: identity.identityNullifier.toString(16),\n commitment: identity.commitment.toString(16),\n };\n}\n\nexport async function createGroup(groupId: string, adminIdentity: ZKMIdentity): Promise<any> {\n await loadSemaphore();\n const identity = new IdentityClass(BigInt('0x' + adminIdentity.privateKey));\n const group = new GroupClass();\n group.addMember(identity.commitment);\n \n return {\n id: groupId,\n group,\n root: group.root.toString(16),\n createdAt: new Date().toISOString(),\n };\n}\n\nexport async function addMember(group: any, newIdentity: ZKMIdentity): Promise<any> {\n await loadSemaphore();\n const identity = new IdentityClass(BigInt('0x' + newIdentity.privateKey));\n group.group.addMember(identity.commitment);\n \n return {\n ...group,\n root: group.group.root.toString(16),\n };\n}\n\nexport async function generateMembershipProof(\n identity: ZKMIdentity,\n group: any,\n scope: string = 'default'\n): Promise<any> {\n await loadSemaphore();\n \n const semaphoreIdentity = new IdentityClass(BigInt('0x' + identity.privateKey));\n const proof = await generateProofFn(semaphoreIdentity, group.group, BigInt(scope), group.group.root);\n \n return {\n groupId: group.id,\n root: group.root,\n proof: JSON.stringify(proof),\n nullifier: proof.nullifier.toString(16),\n scope,\n merkleTreeDepth: group.group.depth,\n issuedAt: new Date().toISOString(),\n };\n}\n\nexport async function verifyMembershipProof(\n proof: any,\n knownRoot: string\n): Promise<boolean> {\n await loadSemaphore();\n \n try {\n const proofObj = typeof proof.proof === 'string' ? JSON.parse(proof.proof) : proof.proof;\n const isValid = await verifyProofFn(proofObj, BigInt('0x' + knownRoot));\n return isValid;\n } catch (error) {\n console.error('Proof verification failed:', error);\n return false;\n }\n}\n\nexport class ZKMService {\n #config: ZKMVerifierConfig | null = null;\n #connected = false;\n #identity: ZKMIdentity | null = null;\n #group: any = null;\n\n async connect(config: ZKMVerifierConfig): Promise<void> {\n this.#config = config;\n this.#connected = true;\n }\n\n async disconnect(): Promise<void> {\n this.#config = null;\n this.#connected = false;\n }\n\n isConnected(): boolean {\n return this.#connected;\n }\n\n async generateIdentity(): Promise<ZKMIdentity> {\n await loadSemaphore();\n const identity = new IdentityClass();\n this.#identity = {\n privateKey: identity.identityNullifier.toString(16),\n commitment: identity.commitment.toString(16),\n };\n return this.#identity;\n }\n\n async createGroup(groupId: string): Promise<any> {\n if (!this.#identity) {\n throw new Error('No identity. Call generateIdentity() first.');\n }\n \n await loadSemaphore();\n const identity = new IdentityClass(BigInt('0x' + this.#identity.privateKey));\n const group = new GroupClass();\n group.addMember(identity.commitment);\n \n this.#group = {\n id: groupId,\n group,\n root: group.root.toString(16),\n createdAt: new Date().toISOString(),\n };\n \n return this.#group;\n }\n\n async addMember(identity: ZKMIdentity): Promise<any> {\n if (!this.#group) {\n throw new Error('No group. Call createGroup() first.');\n }\n \n await loadSemaphore();\n const semaphoreIdentity = new IdentityClass(BigInt('0x' + identity.privateKey));\n this.#group.group.addMember(semaphoreIdentity.commitment);\n \n this.#group = {\n ...this.#group,\n root: this.#group.group.root.toString(16),\n };\n \n return this.#group;\n }\n\n async generateProof(scope?: string): Promise<any> {\n if (!this.#identity || !this.#group) {\n throw new Error('No identity or group. Call generateIdentity() and createGroup() first.');\n }\n \n return generateMembershipProof(this.#identity, this.#group, scope);\n }\n\n async verifyProof(proof: any, root: string): Promise<boolean> {\n return verifyMembershipProof(proof, root);\n }\n\n getIdentity(): ZKMIdentity | null {\n return this.#identity;\n }\n\n getGroup(): any | null {\n return this.#group;\n }\n\n getConfig(): ZKMVerifierConfig | null {\n return this.#config;\n }\n}"],"mappings":"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"}
@@ -112,4 +112,4 @@ var ZKMService = class {
112
112
 
113
113
  //#endregion
114
114
  export { verifyMembershipProof as i, generateMembershipProof as n, isZKMAvailable as r, ZKMService as t };
115
- //# sourceMappingURL=zkm.service-B24N_0FB.mjs.map
115
+ //# sourceMappingURL=zkm.service-j0HlN7Oq.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"zkm.service-B24N_0FB.mjs","names":["#config","#connected","#identity","#group"],"sources":["../src/services/zkm.service.ts"],"sourcesContent":["/**\n * ZK Membership Service - Using Semaphore library for anonymous group membership\n * @packageDocumentation\n */\n\nimport type { ZKMVerifierConfig } from '../types/zkm.js';\n\nexport interface ZKMIdentity {\n privateKey: string;\n commitment: string;\n}\n\nlet IdentityClass: any = null;\nlet GroupClass: any = null;\nlet generateProofFn: any = null;\nlet verifyProofFn: any = null;\n\nasync function loadSemaphore(): Promise<void> {\n if (IdentityClass) return;\n\n try {\n const semaphore = await import('@semaphore-protocol/proof');\n IdentityClass = semaphore.Identity;\n GroupClass = semaphore.Group;\n generateProofFn = semaphore.generateProof;\n verifyProofFn = semaphore.verifyProof;\n } catch (error) {\n throw new Error('Semaphore requires @semaphore-protocol/proof. Install with: npm install @semaphore-protocol/proof');\n }\n}\n\nexport function isZKMAvailable(): boolean {\n return true;\n}\n\nexport async function generateIdentity(): Promise<ZKMIdentity> {\n await loadSemaphore();\n const identity = new IdentityClass();\n return {\n privateKey: identity.identityNullifier.toString(16),\n commitment: identity.commitment.toString(16),\n };\n}\n\nexport async function createGroup(groupId: string, adminIdentity: ZKMIdentity): Promise<any> {\n await loadSemaphore();\n const identity = new IdentityClass(BigInt('0x' + adminIdentity.privateKey));\n const group = new GroupClass();\n group.addMember(identity.commitment);\n \n return {\n id: groupId,\n group,\n root: group.root.toString(16),\n createdAt: new Date().toISOString(),\n };\n}\n\nexport async function addMember(group: any, newIdentity: ZKMIdentity): Promise<any> {\n await loadSemaphore();\n const identity = new IdentityClass(BigInt('0x' + newIdentity.privateKey));\n group.group.addMember(identity.commitment);\n \n return {\n ...group,\n root: group.group.root.toString(16),\n };\n}\n\nexport async function generateMembershipProof(\n identity: ZKMIdentity,\n group: any,\n scope: string = 'default'\n): Promise<any> {\n await loadSemaphore();\n \n const semaphoreIdentity = new IdentityClass(BigInt('0x' + identity.privateKey));\n const proof = await generateProofFn(semaphoreIdentity, group.group, BigInt(scope), group.group.root);\n \n return {\n groupId: group.id,\n root: group.root,\n proof: JSON.stringify(proof),\n nullifier: proof.nullifier.toString(16),\n scope,\n merkleTreeDepth: group.group.depth,\n issuedAt: new Date().toISOString(),\n };\n}\n\nexport async function verifyMembershipProof(\n proof: any,\n knownRoot: string\n): Promise<boolean> {\n await loadSemaphore();\n \n try {\n const proofObj = typeof proof.proof === 'string' ? JSON.parse(proof.proof) : proof.proof;\n const isValid = await verifyProofFn(proofObj, BigInt('0x' + knownRoot));\n return isValid;\n } catch (error) {\n console.error('Proof verification failed:', error);\n return false;\n }\n}\n\nexport class ZKMService {\n #config: ZKMVerifierConfig | null = null;\n #connected = false;\n #identity: ZKMIdentity | null = null;\n #group: any = null;\n\n async connect(config: ZKMVerifierConfig): Promise<void> {\n this.#config = config;\n this.#connected = true;\n }\n\n async disconnect(): Promise<void> {\n this.#config = null;\n this.#connected = false;\n }\n\n isConnected(): boolean {\n return this.#connected;\n }\n\n async generateIdentity(): Promise<ZKMIdentity> {\n await loadSemaphore();\n const identity = new IdentityClass();\n this.#identity = {\n privateKey: identity.identityNullifier.toString(16),\n commitment: identity.commitment.toString(16),\n };\n return this.#identity;\n }\n\n async createGroup(groupId: string): Promise<any> {\n if (!this.#identity) {\n throw new Error('No identity. Call generateIdentity() first.');\n }\n \n await loadSemaphore();\n const identity = new IdentityClass(BigInt('0x' + this.#identity.privateKey));\n const group = new GroupClass();\n group.addMember(identity.commitment);\n \n this.#group = {\n id: groupId,\n group,\n root: group.root.toString(16),\n createdAt: new Date().toISOString(),\n };\n \n return this.#group;\n }\n\n async addMember(identity: ZKMIdentity): Promise<any> {\n if (!this.#group) {\n throw new Error('No group. Call createGroup() first.');\n }\n \n await loadSemaphore();\n const semaphoreIdentity = new IdentityClass(BigInt('0x' + identity.privateKey));\n this.#group.group.addMember(semaphoreIdentity.commitment);\n \n this.#group = {\n ...this.#group,\n root: this.#group.group.root.toString(16),\n };\n \n return this.#group;\n }\n\n async generateProof(scope?: string): Promise<any> {\n if (!this.#identity || !this.#group) {\n throw new Error('No identity or group. Call generateIdentity() and createGroup() first.');\n }\n \n return generateMembershipProof(this.#identity, this.#group, scope);\n }\n\n async verifyProof(proof: any, root: string): Promise<boolean> {\n return verifyMembershipProof(proof, root);\n }\n\n getIdentity(): ZKMIdentity | null {\n return this.#identity;\n }\n\n getGroup(): any | null {\n return this.#group;\n }\n\n getConfig(): ZKMVerifierConfig | null {\n return this.#config;\n }\n}"],"mappings":";AAYA,IAAI,gBAAqB;AACzB,IAAI,aAAkB;AACtB,IAAI,kBAAuB;AAC3B,IAAI,gBAAqB;AAEzB,eAAe,gBAA+B;AAC5C,KAAI,cAAe;AAEnB,KAAI;EACF,MAAM,YAAY,MAAM,OAAO;AAC/B,kBAAgB,UAAU;AAC1B,eAAa,UAAU;AACvB,oBAAkB,UAAU;AAC5B,kBAAgB,UAAU;UACnB,OAAO;AACd,QAAM,IAAI,MAAM,oGAAoG;;;AAIxH,SAAgB,iBAA0B;AACxC,QAAO;;AAqCT,eAAsB,wBACpB,UACA,OACA,QAAgB,WACF;AACd,OAAM,eAAe;CAErB,MAAM,oBAAoB,IAAI,cAAc,OAAO,OAAO,SAAS,WAAW,CAAC;CAC/E,MAAM,QAAQ,MAAM,gBAAgB,mBAAmB,MAAM,OAAO,OAAO,MAAM,EAAE,MAAM,MAAM,KAAK;AAEpG,QAAO;EACL,SAAS,MAAM;EACf,MAAM,MAAM;EACZ,OAAO,KAAK,UAAU,MAAM;EAC5B,WAAW,MAAM,UAAU,SAAS,GAAG;EACvC;EACA,iBAAiB,MAAM,MAAM;EAC7B,2BAAU,IAAI,MAAM,EAAC,aAAa;EACnC;;AAGH,eAAsB,sBACpB,OACA,WACkB;AAClB,OAAM,eAAe;AAErB,KAAI;EACF,MAAM,WAAW,OAAO,MAAM,UAAU,WAAW,KAAK,MAAM,MAAM,MAAM,GAAG,MAAM;AAEnF,SADgB,MAAM,cAAc,UAAU,OAAO,OAAO,UAAU,CAAC;UAEhE,OAAO;AACd,UAAQ,MAAM,8BAA8B,MAAM;AAClD,SAAO;;;AAIX,IAAa,aAAb,MAAwB;CACtB,UAAoC;CACpC,aAAa;CACb,YAAgC;CAChC,SAAc;CAEd,MAAM,QAAQ,QAA0C;AACtD,QAAKA,SAAU;AACf,QAAKC,YAAa;;CAGpB,MAAM,aAA4B;AAChC,QAAKD,SAAU;AACf,QAAKC,YAAa;;CAGpB,cAAuB;AACrB,SAAO,MAAKA;;CAGd,MAAM,mBAAyC;AAC7C,QAAM,eAAe;EACrB,MAAM,WAAW,IAAI,eAAe;AACpC,QAAKC,WAAY;GACf,YAAY,SAAS,kBAAkB,SAAS,GAAG;GACnD,YAAY,SAAS,WAAW,SAAS,GAAG;GAC7C;AACD,SAAO,MAAKA;;CAGd,MAAM,YAAY,SAA+B;AAC/C,MAAI,CAAC,MAAKA,SACR,OAAM,IAAI,MAAM,8CAA8C;AAGhE,QAAM,eAAe;EACrB,MAAM,WAAW,IAAI,cAAc,OAAO,OAAO,MAAKA,SAAU,WAAW,CAAC;EAC5E,MAAM,QAAQ,IAAI,YAAY;AAC9B,QAAM,UAAU,SAAS,WAAW;AAEpC,QAAKC,QAAS;GACZ,IAAI;GACJ;GACA,MAAM,MAAM,KAAK,SAAS,GAAG;GAC7B,4BAAW,IAAI,MAAM,EAAC,aAAa;GACpC;AAED,SAAO,MAAKA;;CAGd,MAAM,UAAU,UAAqC;AACnD,MAAI,CAAC,MAAKA,MACR,OAAM,IAAI,MAAM,sCAAsC;AAGxD,QAAM,eAAe;EACrB,MAAM,oBAAoB,IAAI,cAAc,OAAO,OAAO,SAAS,WAAW,CAAC;AAC/E,QAAKA,MAAO,MAAM,UAAU,kBAAkB,WAAW;AAEzD,QAAKA,QAAS;GACZ,GAAG,MAAKA;GACR,MAAM,MAAKA,MAAO,MAAM,KAAK,SAAS,GAAG;GAC1C;AAED,SAAO,MAAKA;;CAGd,MAAM,cAAc,OAA8B;AAChD,MAAI,CAAC,MAAKD,YAAa,CAAC,MAAKC,MAC3B,OAAM,IAAI,MAAM,yEAAyE;AAG3F,SAAO,wBAAwB,MAAKD,UAAW,MAAKC,OAAQ,MAAM;;CAGpE,MAAM,YAAY,OAAY,MAAgC;AAC5D,SAAO,sBAAsB,OAAO,KAAK;;CAG3C,cAAkC;AAChC,SAAO,MAAKD;;CAGd,WAAuB;AACrB,SAAO,MAAKC;;CAGd,YAAsC;AACpC,SAAO,MAAKH"}
1
+ {"version":3,"file":"zkm.service-j0HlN7Oq.mjs","names":["#config","#connected","#identity","#group"],"sources":["../src/services/zkm.service.ts"],"sourcesContent":["/**\n * ZK Membership Service - Using Semaphore library for anonymous group membership\n * @packageDocumentation\n */\n\nimport type { ZKMVerifierConfig } from '../types/zkm.js';\n\nexport interface ZKMIdentity {\n privateKey: string;\n commitment: string;\n}\n\nlet IdentityClass: any = null;\nlet GroupClass: any = null;\nlet generateProofFn: any = null;\nlet verifyProofFn: any = null;\n\nasync function loadSemaphore(): Promise<void> {\n if (IdentityClass) return;\n\n try {\n const semaphore = await import('@semaphore-protocol/proof');\n IdentityClass = semaphore.Identity;\n GroupClass = semaphore.Group;\n generateProofFn = semaphore.generateProof;\n verifyProofFn = semaphore.verifyProof;\n } catch (error) {\n throw new Error('Semaphore requires @semaphore-protocol/proof. Install with: npm install @semaphore-protocol/proof');\n }\n}\n\nexport function isZKMAvailable(): boolean {\n return true;\n}\n\nexport async function generateIdentity(): Promise<ZKMIdentity> {\n await loadSemaphore();\n const identity = new IdentityClass();\n return {\n privateKey: identity.identityNullifier.toString(16),\n commitment: identity.commitment.toString(16),\n };\n}\n\nexport async function createGroup(groupId: string, adminIdentity: ZKMIdentity): Promise<any> {\n await loadSemaphore();\n const identity = new IdentityClass(BigInt('0x' + adminIdentity.privateKey));\n const group = new GroupClass();\n group.addMember(identity.commitment);\n \n return {\n id: groupId,\n group,\n root: group.root.toString(16),\n createdAt: new Date().toISOString(),\n };\n}\n\nexport async function addMember(group: any, newIdentity: ZKMIdentity): Promise<any> {\n await loadSemaphore();\n const identity = new IdentityClass(BigInt('0x' + newIdentity.privateKey));\n group.group.addMember(identity.commitment);\n \n return {\n ...group,\n root: group.group.root.toString(16),\n };\n}\n\nexport async function generateMembershipProof(\n identity: ZKMIdentity,\n group: any,\n scope: string = 'default'\n): Promise<any> {\n await loadSemaphore();\n \n const semaphoreIdentity = new IdentityClass(BigInt('0x' + identity.privateKey));\n const proof = await generateProofFn(semaphoreIdentity, group.group, BigInt(scope), group.group.root);\n \n return {\n groupId: group.id,\n root: group.root,\n proof: JSON.stringify(proof),\n nullifier: proof.nullifier.toString(16),\n scope,\n merkleTreeDepth: group.group.depth,\n issuedAt: new Date().toISOString(),\n };\n}\n\nexport async function verifyMembershipProof(\n proof: any,\n knownRoot: string\n): Promise<boolean> {\n await loadSemaphore();\n \n try {\n const proofObj = typeof proof.proof === 'string' ? JSON.parse(proof.proof) : proof.proof;\n const isValid = await verifyProofFn(proofObj, BigInt('0x' + knownRoot));\n return isValid;\n } catch (error) {\n console.error('Proof verification failed:', error);\n return false;\n }\n}\n\nexport class ZKMService {\n #config: ZKMVerifierConfig | null = null;\n #connected = false;\n #identity: ZKMIdentity | null = null;\n #group: any = null;\n\n async connect(config: ZKMVerifierConfig): Promise<void> {\n this.#config = config;\n this.#connected = true;\n }\n\n async disconnect(): Promise<void> {\n this.#config = null;\n this.#connected = false;\n }\n\n isConnected(): boolean {\n return this.#connected;\n }\n\n async generateIdentity(): Promise<ZKMIdentity> {\n await loadSemaphore();\n const identity = new IdentityClass();\n this.#identity = {\n privateKey: identity.identityNullifier.toString(16),\n commitment: identity.commitment.toString(16),\n };\n return this.#identity;\n }\n\n async createGroup(groupId: string): Promise<any> {\n if (!this.#identity) {\n throw new Error('No identity. Call generateIdentity() first.');\n }\n \n await loadSemaphore();\n const identity = new IdentityClass(BigInt('0x' + this.#identity.privateKey));\n const group = new GroupClass();\n group.addMember(identity.commitment);\n \n this.#group = {\n id: groupId,\n group,\n root: group.root.toString(16),\n createdAt: new Date().toISOString(),\n };\n \n return this.#group;\n }\n\n async addMember(identity: ZKMIdentity): Promise<any> {\n if (!this.#group) {\n throw new Error('No group. Call createGroup() first.');\n }\n \n await loadSemaphore();\n const semaphoreIdentity = new IdentityClass(BigInt('0x' + identity.privateKey));\n this.#group.group.addMember(semaphoreIdentity.commitment);\n \n this.#group = {\n ...this.#group,\n root: this.#group.group.root.toString(16),\n };\n \n return this.#group;\n }\n\n async generateProof(scope?: string): Promise<any> {\n if (!this.#identity || !this.#group) {\n throw new Error('No identity or group. Call generateIdentity() and createGroup() first.');\n }\n \n return generateMembershipProof(this.#identity, this.#group, scope);\n }\n\n async verifyProof(proof: any, root: string): Promise<boolean> {\n return verifyMembershipProof(proof, root);\n }\n\n getIdentity(): ZKMIdentity | null {\n return this.#identity;\n }\n\n getGroup(): any | null {\n return this.#group;\n }\n\n getConfig(): ZKMVerifierConfig | null {\n return this.#config;\n }\n}"],"mappings":"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"}
package/package.json CHANGED
@@ -1,15 +1,28 @@
1
1
  {
2
2
  "name": "ns-auth-sdk",
3
- "version": "1.14.0",
3
+ "version": "1.14.2",
4
4
  "description": "Decentralized SSO library - Authentication, membership, and profile management",
5
- "main": "./dist/index.js",
6
- "module": "./dist/index.mjs",
7
- "types": "./dist/index.d.ts",
5
+ "main": "./dist/browser-index.cjs",
6
+ "module": "./dist/browser-index.mjs",
7
+ "types": "./dist/browser-index.d.mts",
8
8
  "exports": {
9
9
  ".": {
10
- "types": "./dist/index.d.ts",
10
+ "types": "./dist/browser-index.d.mts",
11
+ "import": "./dist/browser-index.mjs",
12
+ "require": "./dist/browser-index.cjs",
13
+ "default": "./dist/browser-index.mjs"
14
+ },
15
+ "./browser": {
16
+ "types": "./dist/browser-index.d.mts",
17
+ "import": "./dist/browser-index.mjs",
18
+ "require": "./dist/browser-index.cjs",
19
+ "default": "./dist/browser-index.mjs"
20
+ },
21
+ "./node": {
22
+ "types": "./dist/index.d.mts",
11
23
  "import": "./dist/index.mjs",
12
- "require": "./dist/index.js"
24
+ "require": "./dist/index.cjs",
25
+ "default": "./dist/index.mjs"
13
26
  },
14
27
  "./styles": "./dist/index.css"
15
28
  },