@arbidocs/client 0.3.183 → 0.3.185

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/index.cjs CHANGED
@@ -120,7 +120,38 @@ function generateSalt(username, deploymentDomain) {
120
120
  const hash = sodium__default.default.crypto_hash_sha256(sodium__default.default.from_string(saltString));
121
121
  return hash.slice(0, 16);
122
122
  }
123
+ var PREWARM_TTL_MS = 6e4;
124
+ var prewarmed = null;
125
+ function prewarmId(username, password, deploymentDomain) {
126
+ return `${username}\0${deploymentDomain}\0${password}`;
127
+ }
128
+ function dropPrewarmed() {
129
+ if (prewarmed) clearTimeout(prewarmed.timer);
130
+ prewarmed = null;
131
+ }
132
+ function prewarmKeyPairs(username, password, deploymentDomain) {
133
+ if (!username || !password || !deploymentDomain) return;
134
+ const id = prewarmId(username, password, deploymentDomain);
135
+ if (prewarmed?.id === id) return;
136
+ dropPrewarmed();
137
+ const promise = deriveKeyPairs(username, password, deploymentDomain);
138
+ promise.catch(() => {
139
+ if (prewarmed?.promise === promise) dropPrewarmed();
140
+ });
141
+ prewarmed = { id, promise, timer: setTimeout(dropPrewarmed, PREWARM_TTL_MS) };
142
+ }
123
143
  async function generateKeyPairs(username, password, deploymentDomain) {
144
+ if (prewarmed && prewarmed.id === prewarmId(username, password, deploymentDomain)) {
145
+ const { promise } = prewarmed;
146
+ dropPrewarmed();
147
+ try {
148
+ return await promise;
149
+ } catch {
150
+ }
151
+ }
152
+ return deriveKeyPairs(username, password, deploymentDomain);
153
+ }
154
+ async function deriveKeyPairs(username, password, deploymentDomain) {
124
155
  await initSodium();
125
156
  if (!deploymentDomain) {
126
157
  throw new Error("Deployment domain not available. Cannot generate keys.");
@@ -1171,6 +1202,7 @@ exports.initSodium = initSodium;
1171
1202
  exports.initializeDatabase = initializeDatabase;
1172
1203
  exports.isMessageType = isMessageType;
1173
1204
  exports.parseServerMessage = parseServerMessage;
1205
+ exports.prewarmKeyPairs = prewarmKeyPairs;
1174
1206
  exports.saveSession = saveSession;
1175
1207
  exports.sealKeyForSession = sealKeyForSession;
1176
1208
  exports.sealedBoxDecrypt = sealedBoxDecrypt;