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.
- package/dist/{cjs-CSUAVztq.cjs → browser-index.cjs} +5476 -296
- package/dist/browser-index.cjs.map +1 -0
- package/dist/browser-index.d.cts +1998 -0
- package/dist/browser-index.d.cts.map +1 -0
- package/dist/browser-index.d.mts +1998 -0
- package/dist/browser-index.d.mts.map +1 -0
- package/dist/{cjs-sm5h7qxv.mjs → browser-index.mjs} +5169 -69
- package/dist/browser-index.mjs.map +1 -0
- package/dist/{group-coordination-BlFpBVpn.mjs → group-coordination-BV6PKlKp.mjs} +1 -1
- package/dist/{group-coordination-BlFpBVpn.mjs.map → group-coordination-BV6PKlKp.mjs.map} +1 -1
- package/dist/{group-coordination-ImuoJEoy.mjs → group-coordination-BytkmY9j.mjs} +1 -1
- package/dist/{group-coordination-LGIyipaX.cjs → group-coordination-DL39hJ3R.cjs} +1 -1
- package/dist/{group-coordination-LGIyipaX.cjs.map → group-coordination-DL39hJ3R.cjs.map} +1 -1
- package/dist/{group-coordination-Cf18OjZt.cjs → group-coordination-DLban6a7.cjs} +1 -1
- package/dist/index.cjs +8899 -41
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.mjs +9072 -213
- package/dist/index.mjs.map +1 -1
- package/dist/{prf-handler-D3EqUNWe.cjs → prf-handler-BNd7gmXJ.cjs} +1 -1
- package/dist/{prf-handler-D3EqUNWe.cjs.map → prf-handler-BNd7gmXJ.cjs.map} +1 -1
- package/dist/prf-handler-CRMgzJG2.cjs +3 -0
- package/dist/{prf-handler-Dly_WZGn.mjs → prf-handler-DG99ZkS2.mjs} +1 -1
- package/dist/{prf-handler-Db8CsoIP.mjs → prf-handler-Dj2WTO9i.mjs} +1 -1
- package/dist/{prf-handler-Db8CsoIP.mjs.map → prf-handler-Dj2WTO9i.mjs.map} +1 -1
- package/dist/zkm.service-Bv88tVS5.mjs +3 -0
- package/dist/zkm.service-D2BZ_aqA.cjs +3 -0
- package/dist/{zkm.service-DfSPbuOl.cjs → zkm.service-DX06sSfB.cjs} +1 -1
- package/dist/{zkm.service-DfSPbuOl.cjs.map → zkm.service-DX06sSfB.cjs.map} +1 -1
- package/dist/{zkm.service-B24N_0FB.mjs → zkm.service-j0HlN7Oq.mjs} +1 -1
- package/dist/{zkm.service-B24N_0FB.mjs.map → zkm.service-j0HlN7Oq.mjs.map} +1 -1
- package/package.json +19 -6
- package/dist/_esm-C7FRLTj2.cjs +0 -9030
- package/dist/_esm-C7FRLTj2.cjs.map +0 -1
- package/dist/_esm-D_oMW5T5.mjs +0 -9028
- package/dist/_esm-D_oMW5T5.mjs.map +0 -1
- package/dist/base64-js-B8y7dH5k.mjs +0 -93
- package/dist/base64-js-B8y7dH5k.mjs.map +0 -1
- package/dist/base64-js-Tm-kCeud.cjs +0 -98
- package/dist/base64-js-Tm-kCeud.cjs.map +0 -1
- package/dist/ccip-157tdxqP.cjs +0 -7947
- package/dist/ccip-157tdxqP.cjs.map +0 -1
- package/dist/ccip-BEMMdVyd.cjs +0 -4
- package/dist/ccip-BSmCdJ3K.mjs +0 -3
- package/dist/ccip-okqXkslP.mjs +0 -6567
- package/dist/ccip-okqXkslP.mjs.map +0 -1
- package/dist/chains-CTeD2UcS.mjs +0 -33
- package/dist/chains-CTeD2UcS.mjs.map +0 -1
- package/dist/chains-Du-lv_5i.cjs +0 -33
- package/dist/chains-Du-lv_5i.cjs.map +0 -1
- package/dist/chunk-Bnu9O96Y.cjs +0 -60
- package/dist/chunk-CVYhg9ik.mjs +0 -45
- package/dist/cjs-CSUAVztq.cjs.map +0 -1
- package/dist/cjs-sm5h7qxv.mjs.map +0 -1
- package/dist/defineChain-7QG67hYU.cjs +0 -30
- package/dist/defineChain-7QG67hYU.cjs.map +0 -1
- package/dist/defineChain-DBem8ZQY.mjs +0 -24
- package/dist/defineChain-DBem8ZQY.mjs.map +0 -1
- package/dist/dist-BPmSxkxc.cjs +0 -10676
- package/dist/dist-BPmSxkxc.cjs.map +0 -1
- package/dist/dist-BSjH4t6s.cjs +0 -12932
- package/dist/dist-BSjH4t6s.cjs.map +0 -1
- package/dist/dist-C-KjTK4Q.cjs +0 -447
- package/dist/dist-C-KjTK4Q.cjs.map +0 -1
- package/dist/dist-C2h97xM-.mjs +0 -355
- package/dist/dist-C2h97xM-.mjs.map +0 -1
- package/dist/dist-CT7grDWb.mjs +0 -12920
- package/dist/dist-CT7grDWb.mjs.map +0 -1
- package/dist/dist-D7fRmK6G.mjs +0 -10632
- package/dist/dist-D7fRmK6G.mjs.map +0 -1
- package/dist/dist-DlmcyFmM.mjs +0 -16951
- package/dist/dist-DlmcyFmM.mjs.map +0 -1
- package/dist/dist-O0uZr5OF.cjs +0 -17122
- package/dist/dist-O0uZr5OF.cjs.map +0 -1
- package/dist/echo-BB-JgAYZ.cjs +0 -339
- package/dist/echo-BB-JgAYZ.cjs.map +0 -1
- package/dist/echo-Bwy4_Cvh.mjs +0 -316
- package/dist/echo-Bwy4_Cvh.mjs.map +0 -1
- package/dist/echo-D6X2IuNW.cjs +0 -9
- package/dist/echo-DvfG_heb.mjs +0 -8
- package/dist/esm-BcHKCX5i.mjs +0 -569
- package/dist/esm-BcHKCX5i.mjs.map +0 -1
- package/dist/esm-Bh_YwFIz.cjs +0 -599
- package/dist/esm-Bh_YwFIz.cjs.map +0 -1
- package/dist/esm-C0XO9TQm.cjs +0 -30449
- package/dist/esm-C0XO9TQm.cjs.map +0 -1
- package/dist/esm-vMUVj9k4.mjs +0 -30440
- package/dist/esm-vMUVj9k4.mjs.map +0 -1
- package/dist/keyset-CKMQXvsb.mjs +0 -172
- package/dist/keyset-CKMQXvsb.mjs.map +0 -1
- package/dist/keyset-Cxdgu110.cjs +0 -237
- package/dist/keyset-Cxdgu110.cjs.map +0 -1
- package/dist/keyset-DLxpGhdu.cjs +0 -6
- package/dist/keyset-IKjlhvqF.mjs +0 -4
- package/dist/node-3EUJ4ga9.cjs +0 -9
- package/dist/node-C2UpE11T.cjs +0 -444
- package/dist/node-C2UpE11T.cjs.map +0 -1
- package/dist/node-CHdpTQdN.mjs +0 -8679
- package/dist/node-CHdpTQdN.mjs.map +0 -1
- package/dist/node-DQt1CVGl.mjs +0 -6
- package/dist/node-Dy8ww1LG.cjs +0 -8680
- package/dist/node-Dy8ww1LG.cjs.map +0 -1
- package/dist/node-IX55IH6z.mjs +0 -397
- package/dist/node-IX55IH6z.mjs.map +0 -1
- package/dist/nostr-BTOpBN_5.cjs +0 -11
- package/dist/nostr-D4E52XRU.mjs +0 -224
- package/dist/nostr-D4E52XRU.mjs.map +0 -1
- package/dist/nostr-Hv2tsnuI.cjs +0 -272
- package/dist/nostr-Hv2tsnuI.cjs.map +0 -1
- package/dist/nostr-ZwJe_DlZ.mjs +0 -4
- package/dist/pako.esm-DTVnlCJh.cjs +0 -3856
- package/dist/pako.esm-DTVnlCJh.cjs.map +0 -1
- package/dist/pako.esm-ORhkEHM2.mjs +0 -3838
- package/dist/pako.esm-ORhkEHM2.mjs.map +0 -1
- package/dist/peer-B9g3OQ5D.cjs +0 -18
- package/dist/peer-CptDj7zu.mjs +0 -745
- package/dist/peer-CptDj7zu.mjs.map +0 -1
- package/dist/peer-CtqL0yiE.mjs +0 -9
- package/dist/peer-XrPL0O6z.cjs +0 -822
- package/dist/peer-XrPL0O6z.cjs.map +0 -1
- package/dist/ping-BXKREIdI.mjs +0 -7
- package/dist/ping-BtVhKocl.cjs +0 -379
- package/dist/ping-BtVhKocl.cjs.map +0 -1
- package/dist/ping-D5fpMhGC.cjs +0 -11
- package/dist/ping-DOD50kW_.mjs +0 -332
- package/dist/ping-DOD50kW_.mjs.map +0 -1
- package/dist/policy-8HcjulLD.cjs +0 -293
- package/dist/policy-8HcjulLD.cjs.map +0 -1
- package/dist/policy-BA6MEOBY.mjs +0 -5
- package/dist/policy-BFNdXvmM.cjs +0 -11
- package/dist/policy-D_nFHHjo.mjs +0 -228
- package/dist/policy-D_nFHHjo.mjs.map +0 -1
- package/dist/prf-handler-BNiyCQMt.cjs +0 -3
- package/dist/src-CVfTUJQl.mjs +0 -822
- package/dist/src-CVfTUJQl.mjs.map +0 -1
- package/dist/src-D5S86Xpf.cjs +0 -827
- package/dist/src-D5S86Xpf.cjs.map +0 -1
- package/dist/types-B-TLIS13.cjs +0 -212
- package/dist/types-B-TLIS13.cjs.map +0 -1
- package/dist/types-CTm_FHYD.mjs +0 -111
- package/dist/types-CTm_FHYD.mjs.map +0 -1
- package/dist/validation-1xwWVXqE.mjs +0 -3
- package/dist/validation-DnpurN79.cjs +0 -405
- package/dist/validation-DnpurN79.cjs.map +0 -1
- package/dist/validation-IsAUvsvy.mjs +0 -334
- package/dist/validation-IsAUvsvy.mjs.map +0 -1
- package/dist/validation-yCvZCqIs.cjs +0 -6
- package/dist/wrapper-C5NpyacC.cjs +0 -3552
- package/dist/wrapper-C5NpyacC.cjs.map +0 -1
- package/dist/wrapper-CHq_CV4J.mjs +0 -3552
- package/dist/wrapper-CHq_CV4J.mjs.map +0 -1
- package/dist/zkm.service-BrXyI4BS.mjs +0 -3
- 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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"}
|