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
@@ -1,405 +0,0 @@
1
- const require_dist = require('./dist-BPmSxkxc.cjs');
2
-
3
- //#region node_modules/@frostr/igloo-core/dist/validation.js
4
- const VALIDATION_CONSTANTS = {
5
- SHARE_DATA_SIZE: 100,
6
- SHARE_INDEX_SIZE: 4,
7
- SHARE_SECKEY_SIZE: 32,
8
- SHARE_SNONCE_SIZE: 32,
9
- GROUP_DATA_SIZE: 37,
10
- GROUP_PUBKEY_SIZE: 33,
11
- GROUP_THOLD_SIZE: 4,
12
- COMMIT_DATA_SIZE: 103,
13
- GROUP_ID_SIZE: 32,
14
- MAX_COMMITS: 15,
15
- BFCRED_HRP: "bfcred",
16
- BFSHARE_HRP: "bfshare",
17
- BFGROUP_HRP: "bfgroup"
18
- };
19
- const MIN_BFSHARE_LENGTH = Math.floor(VALIDATION_CONSTANTS.SHARE_DATA_SIZE * 1.6) + VALIDATION_CONSTANTS.BFSHARE_HRP.length + 6;
20
- const MAX_BFSHARE_LENGTH = MIN_BFSHARE_LENGTH + 10;
21
- const MIN_BFGROUP_LENGTH = Math.floor((VALIDATION_CONSTANTS.GROUP_DATA_SIZE + VALIDATION_CONSTANTS.COMMIT_DATA_SIZE) * 1.6) + VALIDATION_CONSTANTS.BFGROUP_HRP.length + 6;
22
- const MAX_BFGROUP_LENGTH = Math.floor((VALIDATION_CONSTANTS.GROUP_DATA_SIZE + VALIDATION_CONSTANTS.COMMIT_DATA_SIZE * VALIDATION_CONSTANTS.MAX_COMMITS) * 1.6) + VALIDATION_CONSTANTS.BFGROUP_HRP.length + 6;
23
- const MIN_GROUP_SERIALIZED_SIZE = VALIDATION_CONSTANTS.GROUP_ID_SIZE + VALIDATION_CONSTANTS.GROUP_THOLD_SIZE + VALIDATION_CONSTANTS.GROUP_PUBKEY_SIZE + VALIDATION_CONSTANTS.COMMIT_DATA_SIZE;
24
- const MAX_GROUP_SERIALIZED_SIZE = VALIDATION_CONSTANTS.GROUP_ID_SIZE + VALIDATION_CONSTANTS.GROUP_THOLD_SIZE + VALIDATION_CONSTANTS.GROUP_PUBKEY_SIZE + VALIDATION_CONSTANTS.COMMIT_DATA_SIZE * VALIDATION_CONSTANTS.MAX_COMMITS;
25
- const MIN_BFCRED_RAW_DATA_SIZE = VALIDATION_CONSTANTS.SHARE_DATA_SIZE + MIN_GROUP_SERIALIZED_SIZE;
26
- const MAX_BFCRED_RAW_DATA_SIZE = VALIDATION_CONSTANTS.SHARE_DATA_SIZE + MAX_GROUP_SERIALIZED_SIZE;
27
- const BFCRED_OVERHEAD = VALIDATION_CONSTANTS.BFCRED_HRP.length + 1 + 6;
28
- const MIN_BFCRED_LENGTH = Math.floor(MIN_BFCRED_RAW_DATA_SIZE * 8 / 5) + BFCRED_OVERHEAD;
29
- const MAX_BFCRED_LENGTH = Math.ceil(MAX_BFCRED_RAW_DATA_SIZE * 8 / 5) + BFCRED_OVERHEAD + 15;
30
- /**
31
- * Validates a nostr secret key (nsec) format
32
- * @param nsec The string to validate as nsec
33
- * @returns Validation result object
34
- */
35
- function validateNsec(nsec) {
36
- if (!nsec || !nsec.trim()) return {
37
- isValid: false,
38
- message: "Nsec is required"
39
- };
40
- try {
41
- const { type } = require_dist.nip19_exports.decode(nsec);
42
- if (type !== "nsec") return {
43
- isValid: false,
44
- message: "Invalid nsec format"
45
- };
46
- return { isValid: true };
47
- } catch (error) {
48
- return {
49
- isValid: false,
50
- message: "Invalid nsec format"
51
- };
52
- }
53
- }
54
- /**
55
- * Validates a hex private key format
56
- * @param hexPrivkey The string to validate as hex privkey
57
- * @returns Validation result object
58
- */
59
- function validateHexPrivkey(hexPrivkey) {
60
- if (!hexPrivkey || !hexPrivkey.trim()) return {
61
- isValid: false,
62
- message: "Private key is required"
63
- };
64
- if (!/^[0-9a-fA-F]{64}$/.test(hexPrivkey)) return {
65
- isValid: false,
66
- message: "Invalid hex private key format (should be 64 hex characters)"
67
- };
68
- return { isValid: true };
69
- }
70
- /**
71
- * Validates a Bifrost share format
72
- * @param share The string to validate as a Bifrost share
73
- * @returns Validation result object
74
- */
75
- function validateShare(share) {
76
- if (!share || !share.trim()) return {
77
- isValid: false,
78
- message: "Share is required"
79
- };
80
- if (!share.startsWith(VALIDATION_CONSTANTS.BFSHARE_HRP)) return {
81
- isValid: false,
82
- message: `Invalid share format (should start with ${VALIDATION_CONSTANTS.BFSHARE_HRP})`
83
- };
84
- if (share.length < MIN_BFSHARE_LENGTH || share.length > MAX_BFSHARE_LENGTH) return {
85
- isValid: false,
86
- message: `Invalid share length (expected around ${MIN_BFSHARE_LENGTH} characters)`
87
- };
88
- if (!/^bfshare1[a-z0-9]+$/.test(share)) return {
89
- isValid: false,
90
- message: "Invalid share format - must be in bech32m format"
91
- };
92
- return { isValid: true };
93
- }
94
- /**
95
- * Validates a Bifrost group format
96
- * @param group The string to validate as a Bifrost group
97
- * @returns Validation result object
98
- */
99
- function validateGroup(group) {
100
- if (!group || !group.trim()) return {
101
- isValid: false,
102
- message: "Group is required"
103
- };
104
- if (!group.startsWith(VALIDATION_CONSTANTS.BFGROUP_HRP)) return {
105
- isValid: false,
106
- message: `Invalid group format (should start with ${VALIDATION_CONSTANTS.BFGROUP_HRP})`
107
- };
108
- if (group.length < MIN_BFGROUP_LENGTH) return {
109
- isValid: false,
110
- message: `Invalid group length (expected at least ${MIN_BFGROUP_LENGTH} characters)`
111
- };
112
- if (group.length > MAX_BFGROUP_LENGTH) return {
113
- isValid: false,
114
- message: `Group credential too long (maximum expected length is ${MAX_BFGROUP_LENGTH} characters)`
115
- };
116
- if (!/^bfgroup1[a-z0-9]+$/.test(group)) return {
117
- isValid: false,
118
- message: "Invalid group format - must be in bech32m format"
119
- };
120
- return { isValid: true };
121
- }
122
- /**
123
- * Validates a nostr relay URL
124
- * @param relay The string to validate as a relay URL
125
- * @returns Validation result object with normalized URL
126
- */
127
- function validateRelay(relay) {
128
- if (!relay || !relay.trim()) return {
129
- isValid: false,
130
- message: "Relay URL is required"
131
- };
132
- let normalized = relay.trim();
133
- if (normalized.startsWith("http://") || normalized.startsWith("https://")) normalized = `wss://${normalized.split("//")[1]}`;
134
- else if (!normalized.startsWith("wss://") && !normalized.startsWith("ws://")) normalized = `wss://${normalized}`;
135
- if (normalized.endsWith("/")) normalized = normalized.slice(0, -1);
136
- try {
137
- const url = new URL(normalized);
138
- if (url.protocol !== "wss:" && url.protocol !== "ws:") return {
139
- isValid: false,
140
- message: "Relay URL must use wss:// or ws:// protocol"
141
- };
142
- if (!url.hostname || url.hostname.length === 0) return {
143
- isValid: false,
144
- message: "Invalid relay URL format"
145
- };
146
- if (!url.hostname.includes(".") && url.hostname !== "localhost") return {
147
- isValid: false,
148
- message: "Invalid relay URL format"
149
- };
150
- return {
151
- isValid: true,
152
- normalized
153
- };
154
- } catch (error) {
155
- return {
156
- isValid: false,
157
- message: "Invalid relay URL format"
158
- };
159
- }
160
- }
161
- /**
162
- * Validates a Bifrost credential string (bfcred)
163
- * @param cred The string to validate as a Bifrost credential
164
- * @returns Validation result object
165
- */
166
- function validateBfcred(cred) {
167
- if (!cred || !cred.trim()) return {
168
- isValid: false,
169
- message: "Credential string is required"
170
- };
171
- if (!cred.startsWith(VALIDATION_CONSTANTS.BFCRED_HRP)) return {
172
- isValid: false,
173
- message: `Invalid credential format (should start with ${VALIDATION_CONSTANTS.BFCRED_HRP})`
174
- };
175
- if (cred.length < MIN_BFCRED_LENGTH) return {
176
- isValid: false,
177
- message: `Invalid credential length (expected at least ${MIN_BFCRED_LENGTH} characters, got ${cred.length})`
178
- };
179
- if (cred.length > MAX_BFCRED_LENGTH) return {
180
- isValid: false,
181
- message: `Credential string too long (maximum expected length ${MAX_BFCRED_LENGTH} characters, got ${cred.length})`
182
- };
183
- if (!(/* @__PURE__ */ new RegExp(`^${VALIDATION_CONSTANTS.BFCRED_HRP}1[a-z0-9]+$`)).test(cred)) return {
184
- isValid: false,
185
- message: "Invalid credential format - must be in bech32m format (e.g., bfcred1...)"
186
- };
187
- return { isValid: true };
188
- }
189
- /**
190
- * Validates a credential format generically
191
- * @param credential The credential string to validate
192
- * @param type The type of credential
193
- * @returns Validation result object
194
- */
195
- function validateCredentialFormat(credential, type) {
196
- switch (type) {
197
- case "share": return validateShare(credential);
198
- case "group": return validateGroup(credential);
199
- case "cred": return validateBfcred(credential);
200
- default: return {
201
- isValid: false,
202
- message: "Unknown credential type"
203
- };
204
- }
205
- }
206
- /**
207
- * Validates a list of relay URLs
208
- * @param relays Array of relay URL strings
209
- * @returns Extended validation result with normalized relays and errors
210
- */
211
- function validateRelayList(relays) {
212
- if (!relays || relays.length === 0) return {
213
- isValid: false,
214
- message: "At least one relay URL is required"
215
- };
216
- const validRelays = [];
217
- const errors = [];
218
- for (let i = 0; i < relays.length; i++) {
219
- const result = validateRelay(relays[i]);
220
- if (result.isValid && result.normalized) validRelays.push(result.normalized);
221
- else errors.push(`Relay ${i + 1}: ${result.message || "Invalid format"}`);
222
- }
223
- const isValid = validRelays.length > 0;
224
- return {
225
- isValid,
226
- message: isValid ? void 0 : "No valid relay URLs provided",
227
- normalizedRelays: validRelays,
228
- validRelays,
229
- errors
230
- };
231
- }
232
- /**
233
- * Validates a complete set of Bifrost credentials
234
- * @param credentials Object containing group, shares, and relays
235
- * @returns Comprehensive validation result
236
- */
237
- function validateCredentialSet(credentials) {
238
- const errors = [];
239
- const groupResult = validateGroup(credentials.group);
240
- const groupValid = groupResult.isValid;
241
- if (!groupValid) errors.push(`Group: ${groupResult.message}`);
242
- const shareResults = credentials.shares.map((share, index) => {
243
- const result = validateShare(share);
244
- if (!result.isValid) errors.push(`Share ${index + 1}: ${result.message}`);
245
- return result;
246
- });
247
- const relayResults = credentials.relays.map((relay, index) => {
248
- const result = validateRelay(relay);
249
- if (!result.isValid) errors.push(`Relay ${index + 1}: ${result.message}`);
250
- return result;
251
- });
252
- return {
253
- isValid: groupValid && shareResults.every((r) => r.isValid) && relayResults.every((r) => r.isValid) && credentials.shares.length > 0,
254
- groupValid,
255
- shareResults,
256
- relayResults,
257
- errors
258
- };
259
- }
260
- /**
261
- * Validates that enough shares are provided for a threshold
262
- * @param shares Array of share strings
263
- * @param requiredThreshold Minimum number of shares required
264
- * @returns Validation result
265
- */
266
- function validateMinimumShares(shares, requiredThreshold) {
267
- if (!shares || shares.length === 0) return {
268
- isValid: false,
269
- message: "No shares provided"
270
- };
271
- if (shares.length < requiredThreshold) return {
272
- isValid: false,
273
- message: `Not enough shares provided. Need at least ${requiredThreshold} shares, got ${shares.length}`
274
- };
275
- for (let i = 0; i < shares.length; i++) {
276
- const result = validateShare(shares[i]);
277
- if (!result.isValid) return {
278
- isValid: false,
279
- message: `Share ${i + 1} is invalid: ${result.message}`
280
- };
281
- }
282
- return { isValid: true };
283
- }
284
- /**
285
- * Validates credentials with advanced options
286
- * @param credentials The credentials to validate
287
- * @param options Validation options
288
- * @returns Validated credentials result
289
- */
290
- function validateWithOptions(credentials, options = {}) {
291
- const errors = [];
292
- let isValid = true;
293
- const groupResult = validateGroup(credentials.group);
294
- if (!groupResult.isValid) {
295
- errors.push(`Group: ${groupResult.message}`);
296
- isValid = false;
297
- }
298
- if (options.requireMinShares && credentials.shares.length < options.requireMinShares) {
299
- errors.push(`Not enough shares provided. Need at least ${options.requireMinShares} shares`);
300
- isValid = false;
301
- }
302
- for (let i = 0; i < credentials.shares.length; i++) {
303
- const result = validateShare(credentials.shares[i]);
304
- if (!result.isValid) {
305
- errors.push(`Share ${i + 1}: ${result.message}`);
306
- isValid = false;
307
- }
308
- }
309
- let processedRelays = credentials.relays;
310
- if (options.normalizeRelays) {
311
- const relayResult = validateRelayList(credentials.relays);
312
- if (relayResult.isValid && relayResult.normalizedRelays) processedRelays = relayResult.normalizedRelays;
313
- else {
314
- errors.push(...relayResult.errors || ["Invalid relay URLs"]);
315
- isValid = false;
316
- }
317
- } else for (let i = 0; i < credentials.relays.length; i++) {
318
- const result = validateRelay(credentials.relays[i]);
319
- if (!result.isValid) {
320
- errors.push(`Relay ${i + 1}: ${result.message}`);
321
- isValid = false;
322
- }
323
- }
324
- return {
325
- ...credentials,
326
- relays: processedRelays,
327
- isValid,
328
- errors
329
- };
330
- }
331
-
332
- //#endregion
333
- Object.defineProperty(exports, 'VALIDATION_CONSTANTS', {
334
- enumerable: true,
335
- get: function () {
336
- return VALIDATION_CONSTANTS;
337
- }
338
- });
339
- Object.defineProperty(exports, 'validateBfcred', {
340
- enumerable: true,
341
- get: function () {
342
- return validateBfcred;
343
- }
344
- });
345
- Object.defineProperty(exports, 'validateCredentialFormat', {
346
- enumerable: true,
347
- get: function () {
348
- return validateCredentialFormat;
349
- }
350
- });
351
- Object.defineProperty(exports, 'validateCredentialSet', {
352
- enumerable: true,
353
- get: function () {
354
- return validateCredentialSet;
355
- }
356
- });
357
- Object.defineProperty(exports, 'validateGroup', {
358
- enumerable: true,
359
- get: function () {
360
- return validateGroup;
361
- }
362
- });
363
- Object.defineProperty(exports, 'validateHexPrivkey', {
364
- enumerable: true,
365
- get: function () {
366
- return validateHexPrivkey;
367
- }
368
- });
369
- Object.defineProperty(exports, 'validateMinimumShares', {
370
- enumerable: true,
371
- get: function () {
372
- return validateMinimumShares;
373
- }
374
- });
375
- Object.defineProperty(exports, 'validateNsec', {
376
- enumerable: true,
377
- get: function () {
378
- return validateNsec;
379
- }
380
- });
381
- Object.defineProperty(exports, 'validateRelay', {
382
- enumerable: true,
383
- get: function () {
384
- return validateRelay;
385
- }
386
- });
387
- Object.defineProperty(exports, 'validateRelayList', {
388
- enumerable: true,
389
- get: function () {
390
- return validateRelayList;
391
- }
392
- });
393
- Object.defineProperty(exports, 'validateShare', {
394
- enumerable: true,
395
- get: function () {
396
- return validateShare;
397
- }
398
- });
399
- Object.defineProperty(exports, 'validateWithOptions', {
400
- enumerable: true,
401
- get: function () {
402
- return validateWithOptions;
403
- }
404
- });
405
- //# sourceMappingURL=validation-DnpurN79.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validation-DnpurN79.cjs","names":["nip19"],"sources":["../node_modules/@frostr/igloo-core/dist/validation.js"],"sourcesContent":["import { nip19 } from 'nostr-tools';\n// Constants from Bifrost library (https://github.com/FROSTR-ORG/bifrost/blob/master/src/const.ts)\n// These are the exact binary sizes before bech32 encoding\nexport const VALIDATION_CONSTANTS = {\n SHARE_DATA_SIZE: 100, // Exact binary size of a share\n SHARE_INDEX_SIZE: 4, // Size of share index\n SHARE_SECKEY_SIZE: 32, // Size of share secret key\n SHARE_SNONCE_SIZE: 32, // Size of share nonce\n GROUP_DATA_SIZE: 37, // Base size of a group\n GROUP_PUBKEY_SIZE: 33, // Size of group public key\n GROUP_THOLD_SIZE: 4, // Size of threshold value\n COMMIT_DATA_SIZE: 103, // Size of each commitment\n GROUP_ID_SIZE: 32, // Assumed size for group ID hash\n MAX_COMMITS: 15, // Maximum reasonable number of commits\n BFCRED_HRP: 'bfcred', // Human-readable part for bfcred\n BFSHARE_HRP: 'bfshare', // Human-readable part for shares\n BFGROUP_HRP: 'bfgroup', // Human-readable part for groups\n};\n// Calculate expected bech32 encoded lengths (approximate)\n// Bech32 encoding: 8 bits -> 5 bits, so length increases by factor of 8/5 = 1.6\n// Plus prefix and checksum (typically 6 chars)\nconst MIN_BFSHARE_LENGTH = Math.floor(VALIDATION_CONSTANTS.SHARE_DATA_SIZE * 1.6) + VALIDATION_CONSTANTS.BFSHARE_HRP.length + 6; // ~172 chars\nconst MAX_BFSHARE_LENGTH = MIN_BFSHARE_LENGTH + 10; // Allow some flexibility\n// For groups, size depends on number of commits (n in m-of-n)\n// Base size + at least one commit\nconst MIN_BFGROUP_LENGTH = Math.floor((VALIDATION_CONSTANTS.GROUP_DATA_SIZE + VALIDATION_CONSTANTS.COMMIT_DATA_SIZE) * 1.6) + VALIDATION_CONSTANTS.BFGROUP_HRP.length + 6; // ~234 chars\nconst MAX_BFGROUP_LENGTH = Math.floor((VALIDATION_CONSTANTS.GROUP_DATA_SIZE + (VALIDATION_CONSTANTS.COMMIT_DATA_SIZE * VALIDATION_CONSTANTS.MAX_COMMITS)) * 1.6) + VALIDATION_CONSTANTS.BFGROUP_HRP.length + 6;\n// Constants for bfcred validation\n// Min group serialized size: ID (32) + Threshold (4) + Pubkey (33) + 1 Commit (103) = 172\nconst MIN_GROUP_SERIALIZED_SIZE = VALIDATION_CONSTANTS.GROUP_ID_SIZE + VALIDATION_CONSTANTS.GROUP_THOLD_SIZE + VALIDATION_CONSTANTS.GROUP_PUBKEY_SIZE + VALIDATION_CONSTANTS.COMMIT_DATA_SIZE;\n// Max group serialized size: ID (32) + Threshold (4) + Pubkey (33) + MAX_COMMITS (15) * Commit (103) = 69 + 1545 = 1614\nconst MAX_GROUP_SERIALIZED_SIZE = VALIDATION_CONSTANTS.GROUP_ID_SIZE + VALIDATION_CONSTANTS.GROUP_THOLD_SIZE + VALIDATION_CONSTANTS.GROUP_PUBKEY_SIZE + (VALIDATION_CONSTANTS.COMMIT_DATA_SIZE * VALIDATION_CONSTANTS.MAX_COMMITS);\n// bfcred raw data = share data (100) + group data (min 172, max 1614)\nconst MIN_BFCRED_RAW_DATA_SIZE = VALIDATION_CONSTANTS.SHARE_DATA_SIZE + MIN_GROUP_SERIALIZED_SIZE; // 100 + 172 = 272\nconst MAX_BFCRED_RAW_DATA_SIZE = VALIDATION_CONSTANTS.SHARE_DATA_SIZE + MAX_GROUP_SERIALIZED_SIZE; // 100 + 1614 = 1714\n// Bech32m encoding overhead\nconst BFCRED_OVERHEAD = VALIDATION_CONSTANTS.BFCRED_HRP.length + 1 + 6;\nconst MIN_BFCRED_LENGTH = Math.floor(MIN_BFCRED_RAW_DATA_SIZE * 8 / 5) + BFCRED_OVERHEAD;\nconst MAX_BFCRED_LENGTH = Math.ceil(MAX_BFCRED_RAW_DATA_SIZE * 8 / 5) + BFCRED_OVERHEAD + 15;\n/**\n * Validates a nostr secret key (nsec) format\n * @param nsec The string to validate as nsec\n * @returns Validation result object\n */\nexport function validateNsec(nsec) {\n if (!nsec || !nsec.trim()) {\n return { isValid: false, message: 'Nsec is required' };\n }\n try {\n const { type } = nip19.decode(nsec);\n if (type !== 'nsec') {\n return { isValid: false, message: 'Invalid nsec format' };\n }\n return { isValid: true };\n }\n catch (error) {\n return {\n isValid: false,\n message: 'Invalid nsec format'\n };\n }\n}\n/**\n * Validates a hex private key format\n * @param hexPrivkey The string to validate as hex privkey\n * @returns Validation result object\n */\nexport function validateHexPrivkey(hexPrivkey) {\n if (!hexPrivkey || !hexPrivkey.trim()) {\n return { isValid: false, message: 'Private key is required' };\n }\n // Check if it's a valid hex string of correct length (64 characters for 32 bytes)\n const hexRegex = /^[0-9a-fA-F]{64}$/;\n if (!hexRegex.test(hexPrivkey)) {\n return { isValid: false, message: 'Invalid hex private key format (should be 64 hex characters)' };\n }\n return { isValid: true };\n}\n/**\n * Validates a Bifrost share format\n * @param share The string to validate as a Bifrost share\n * @returns Validation result object\n */\nexport function validateShare(share) {\n if (!share || !share.trim()) {\n return { isValid: false, message: 'Share is required' };\n }\n // Basic prefix check\n if (!share.startsWith(VALIDATION_CONSTANTS.BFSHARE_HRP)) {\n return { isValid: false, message: `Invalid share format (should start with ${VALIDATION_CONSTANTS.BFSHARE_HRP})` };\n }\n // Length check based on expected bech32 encoded share\n if (share.length < MIN_BFSHARE_LENGTH || share.length > MAX_BFSHARE_LENGTH) {\n return {\n isValid: false,\n message: `Invalid share length (expected around ${MIN_BFSHARE_LENGTH} characters)`\n };\n }\n // Basic format check - bech32m has a similar format to bech32:\n // [prefix]1[data][checksum] - the '1' separates the human-readable part from the data\n // Allow all valid bech32 characters: 023456789acdefghjklmnpqrstuvwxyz\n // For testing purposes, we'll be more permissive and just check basic structure\n const formatCheck = /^bfshare1[a-z0-9]+$/;\n if (!formatCheck.test(share)) {\n return {\n isValid: false,\n message: 'Invalid share format - must be in bech32m format'\n };\n }\n return { isValid: true };\n}\n/**\n * Validates a Bifrost group format\n * @param group The string to validate as a Bifrost group\n * @returns Validation result object\n */\nexport function validateGroup(group) {\n if (!group || !group.trim()) {\n return { isValid: false, message: 'Group is required' };\n }\n // Basic prefix check\n if (!group.startsWith(VALIDATION_CONSTANTS.BFGROUP_HRP)) {\n return { isValid: false, message: `Invalid group format (should start with ${VALIDATION_CONSTANTS.BFGROUP_HRP})` };\n }\n // Length check based on expected bech32 encoded group\n if (group.length < MIN_BFGROUP_LENGTH) {\n return {\n isValid: false,\n message: `Invalid group length (expected at least ${MIN_BFGROUP_LENGTH} characters)`\n };\n }\n if (group.length > MAX_BFGROUP_LENGTH) {\n return {\n isValid: false,\n message: `Group credential too long (maximum expected length is ${MAX_BFGROUP_LENGTH} characters)`\n };\n }\n // Basic format check - bech32m format\n // For testing purposes, we'll be more permissive and just check basic structure\n const formatCheck = /^bfgroup1[a-z0-9]+$/;\n if (!formatCheck.test(group)) {\n return {\n isValid: false,\n message: 'Invalid group format - must be in bech32m format'\n };\n }\n return { isValid: true };\n}\n/**\n * Validates a nostr relay URL\n * @param relay The string to validate as a relay URL\n * @returns Validation result object with normalized URL\n */\nexport function validateRelay(relay) {\n if (!relay || !relay.trim()) {\n return { isValid: false, message: 'Relay URL is required' };\n }\n // Normalize the relay URL\n let normalized = relay.trim();\n // Replace http:// or https:// with wss://, or add wss:// if no protocol is present\n if (normalized.startsWith('http://') || normalized.startsWith('https://')) {\n // Extract the part after the protocol\n const urlWithoutProtocol = normalized.split('//')[1];\n normalized = `wss://${urlWithoutProtocol}`;\n }\n else if (!normalized.startsWith('wss://') && !normalized.startsWith('ws://')) {\n normalized = `wss://${normalized}`;\n }\n // Remove trailing slash if present\n if (normalized.endsWith('/')) {\n normalized = normalized.slice(0, -1);\n }\n try {\n // Check if it's a valid URL\n const url = new URL(normalized);\n if (url.protocol !== 'wss:' && url.protocol !== 'ws:') {\n return { isValid: false, message: 'Relay URL must use wss:// or ws:// protocol' };\n }\n // Additional validation - must have a valid hostname\n if (!url.hostname || url.hostname.length === 0) {\n return { isValid: false, message: 'Invalid relay URL format' };\n }\n // Basic hostname validation - must contain at least one dot or be localhost\n if (!url.hostname.includes('.') && url.hostname !== 'localhost') {\n return { isValid: false, message: 'Invalid relay URL format' };\n }\n return {\n isValid: true,\n normalized\n };\n }\n catch (error) {\n return {\n isValid: false,\n message: 'Invalid relay URL format'\n };\n }\n}\n/**\n * Validates a Bifrost credential string (bfcred)\n * @param cred The string to validate as a Bifrost credential\n * @returns Validation result object\n */\nexport function validateBfcred(cred) {\n if (!cred || !cred.trim()) {\n return { isValid: false, message: 'Credential string is required' };\n }\n // Basic prefix check for the Human-Readable Part (HRP)\n if (!cred.startsWith(VALIDATION_CONSTANTS.BFCRED_HRP)) {\n return { isValid: false, message: `Invalid credential format (should start with ${VALIDATION_CONSTANTS.BFCRED_HRP})` };\n }\n // Length check\n if (cred.length < MIN_BFCRED_LENGTH) {\n return {\n isValid: false,\n message: `Invalid credential length (expected at least ${MIN_BFCRED_LENGTH} characters, got ${cred.length})`\n };\n }\n if (cred.length > MAX_BFCRED_LENGTH) {\n return {\n isValid: false,\n message: `Credential string too long (maximum expected length ${MAX_BFCRED_LENGTH} characters, got ${cred.length})`\n };\n }\n // Basic format check for bech32m: [hrp]1[data][checksum]\n // For testing purposes, we'll be more permissive and just check basic structure\n const formatCheck = new RegExp(`^${VALIDATION_CONSTANTS.BFCRED_HRP}1[a-z0-9]+$`);\n if (!formatCheck.test(cred)) {\n return {\n isValid: false,\n message: 'Invalid credential format - must be in bech32m format (e.g., bfcred1...)'\n };\n }\n return { isValid: true };\n}\n/**\n * Validates a credential format generically\n * @param credential The credential string to validate\n * @param type The type of credential\n * @returns Validation result object\n */\nexport function validateCredentialFormat(credential, type) {\n switch (type) {\n case 'share':\n return validateShare(credential);\n case 'group':\n return validateGroup(credential);\n case 'cred':\n return validateBfcred(credential);\n default:\n return { isValid: false, message: 'Unknown credential type' };\n }\n}\n/**\n * Validates a list of relay URLs\n * @param relays Array of relay URL strings\n * @returns Extended validation result with normalized relays and errors\n */\nexport function validateRelayList(relays) {\n if (!relays || relays.length === 0) {\n return { isValid: false, message: 'At least one relay URL is required' };\n }\n const validRelays = [];\n const errors = [];\n for (let i = 0; i < relays.length; i++) {\n const result = validateRelay(relays[i]);\n if (result.isValid && result.normalized) {\n validRelays.push(result.normalized);\n }\n else {\n errors.push(`Relay ${i + 1}: ${result.message || 'Invalid format'}`);\n }\n }\n const isValid = validRelays.length > 0;\n return {\n isValid,\n message: isValid ? undefined : 'No valid relay URLs provided',\n normalizedRelays: validRelays,\n validRelays,\n errors\n };\n}\n/**\n * Validates a complete set of Bifrost credentials\n * @param credentials Object containing group, shares, and relays\n * @returns Comprehensive validation result\n */\nexport function validateCredentialSet(credentials) {\n const errors = [];\n // Validate group\n const groupResult = validateGroup(credentials.group);\n const groupValid = groupResult.isValid;\n if (!groupValid) {\n errors.push(`Group: ${groupResult.message}`);\n }\n // Validate shares\n const shareResults = credentials.shares.map((share, index) => {\n const result = validateShare(share);\n if (!result.isValid) {\n errors.push(`Share ${index + 1}: ${result.message}`);\n }\n return result;\n });\n // Validate relays\n const relayResults = credentials.relays.map((relay, index) => {\n const result = validateRelay(relay);\n if (!result.isValid) {\n errors.push(`Relay ${index + 1}: ${result.message}`);\n }\n return result;\n });\n const isValid = groupValid &&\n shareResults.every(r => r.isValid) &&\n relayResults.every(r => r.isValid) &&\n credentials.shares.length > 0;\n return {\n isValid,\n groupValid,\n shareResults,\n relayResults,\n errors\n };\n}\n/**\n * Validates that enough shares are provided for a threshold\n * @param shares Array of share strings\n * @param requiredThreshold Minimum number of shares required\n * @returns Validation result\n */\nexport function validateMinimumShares(shares, requiredThreshold) {\n if (!shares || shares.length === 0) {\n return { isValid: false, message: 'No shares provided' };\n }\n if (shares.length < requiredThreshold) {\n return {\n isValid: false,\n message: `Not enough shares provided. Need at least ${requiredThreshold} shares, got ${shares.length}`\n };\n }\n // Validate each share format\n for (let i = 0; i < shares.length; i++) {\n const result = validateShare(shares[i]);\n if (!result.isValid) {\n return {\n isValid: false,\n message: `Share ${i + 1} is invalid: ${result.message}`\n };\n }\n }\n return { isValid: true };\n}\n/**\n * Validates credentials with advanced options\n * @param credentials The credentials to validate\n * @param options Validation options\n * @returns Validated credentials result\n */\nexport function validateWithOptions(credentials, options = {}) {\n const errors = [];\n let isValid = true;\n // Validate group\n const groupResult = validateGroup(credentials.group);\n if (!groupResult.isValid) {\n errors.push(`Group: ${groupResult.message}`);\n isValid = false;\n }\n // Validate shares\n if (options.requireMinShares && credentials.shares.length < options.requireMinShares) {\n errors.push(`Not enough shares provided. Need at least ${options.requireMinShares} shares`);\n isValid = false;\n }\n for (let i = 0; i < credentials.shares.length; i++) {\n const result = validateShare(credentials.shares[i]);\n if (!result.isValid) {\n errors.push(`Share ${i + 1}: ${result.message}`);\n isValid = false;\n }\n }\n // Validate and optionally normalize relays\n let processedRelays = credentials.relays;\n if (options.normalizeRelays) {\n const relayResult = validateRelayList(credentials.relays);\n if (relayResult.isValid && relayResult.normalizedRelays) {\n processedRelays = relayResult.normalizedRelays;\n }\n else {\n errors.push(...(relayResult.errors || ['Invalid relay URLs']));\n isValid = false;\n }\n }\n else {\n // Just validate without normalizing\n for (let i = 0; i < credentials.relays.length; i++) {\n const result = validateRelay(credentials.relays[i]);\n if (!result.isValid) {\n errors.push(`Relay ${i + 1}: ${result.message}`);\n isValid = false;\n }\n }\n }\n return {\n ...credentials,\n relays: processedRelays,\n isValid,\n errors\n };\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}