@learncard/sss-key-manager 0.2.6 → 0.2.7

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.d.ts CHANGED
@@ -24,7 +24,7 @@ export type { EscrowEnrollmentActionInput } from './escrow-authority';
24
24
  export type { VerifiedEnclaveIdentity, EscrowAuthorityRecord, EscrowAuthorityState, VerifiedEscrowMutation, } from './escrow-authority.types';
25
25
  export { verifyNitroAttestationDocument, NitroAttestationError } from './escrow-nitro-attestation';
26
26
  export type { NitroAttestationReason } from './escrow-nitro-attestation';
27
- export type { EscrowAttestationPolicy, EscrowHoldStatus, EscrowRecoveryStart } from './types';
27
+ export type { EscrowAttestationPolicy, EscrowHoldStatus, EscrowPinAttemptContext, EscrowRecoveryStart, } from './types';
28
28
  export type { EscrowEnrollmentOptions, EscrowEnrollmentState, EscrowBlobStaleReason, EscrowPinStatus, } from './types';
29
29
  export { EscrowPinMismatchError, EscrowPinLockedError, EscrowPinThrottledError, EscrowHoldRestartThrottledError, EscrowPinUnavailableError, PinSignInStaleError, } from './types';
30
30
  export { PIN_MIN_LENGTH, PIN_MAX_LENGTH, ESCROW_PIN_MAX_ATTEMPTS, normalizePin, validatePin, generatePinSalt, derivePinProof, constantTimeEqualHex, } from './escrow-pin';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -30428,6 +30428,7 @@ var EscrowRequestError = class extends Error {
30428
30428
  __name(this, "EscrowRequestError");
30429
30429
  }
30430
30430
  };
30431
+ var isConflictRefusal = /* @__PURE__ */ __name((error) => error instanceof EscrowRequestError && error.status === 409, "isConflictRefusal");
30431
30432
  var DuplicateShareCoordinateError = class extends Error {
30432
30433
  static {
30433
30434
  __name(this, "DuplicateShareCoordinateError");
@@ -31324,21 +31325,34 @@ function createSSSStrategy(config) {
31324
31325
  }
31325
31326
  };
31326
31327
  }, "captureActiveUserGuard");
31327
- const pinHasRecordedWrongAttempts = /* @__PURE__ */ __name((escrowPin) => {
31328
+ const recordedWrongPinAttempts = /* @__PURE__ */ __name((escrowPin) => {
31328
31329
  const status = escrowPin;
31329
- if (status?.state === "none") return false;
31330
- return typeof status?.wrongAttempts !== "number" || status.wrongAttempts > 0;
31331
- }, "pinHasRecordedWrongAttempts");
31332
- const refreshablePinCharges = /* @__PURE__ */ __name((before, after) => {
31330
+ if (status?.state === "none") return 0;
31331
+ const count = status?.wrongAttempts;
31332
+ return typeof count === "number" && Number.isSafeInteger(count) && count >= 0 ? count : void 0;
31333
+ }, "recordedWrongPinAttempts");
31334
+ const attemptCount = /* @__PURE__ */ __name((value) => typeof value === "number" && Number.isSafeInteger(value) && value >= 0 ? value : void 0, "attemptCount");
31335
+ const pinSignInClean = /* @__PURE__ */ __name((observed, flowAttempts) => {
31336
+ const flowSalt = flowAttempts?.pinSalt;
31337
+ const sameGeneration = typeof flowSalt !== "string" || observed.every((status) => {
31338
+ const salt = status?.salt;
31339
+ return typeof salt !== "string" || salt === flowSalt;
31340
+ });
31341
+ const attempts = sameGeneration ? flowAttempts : void 0;
31342
+ const own = attempts ? attemptCount(attempts.ownWrongAttempts) : 0;
31343
+ if (own === void 0) return { clean: false, ownWrongAttempts: 0 };
31344
+ const prior = attempts ? attemptCount(attempts.priorWrongAttempts) : recordedWrongPinAttempts(observed[0]);
31345
+ const clean = prior === 0 && observed.length > 0 && observed.every((status) => recordedWrongPinAttempts(status) === own);
31346
+ return { clean, ownWrongAttempts: own };
31347
+ }, "pinSignInClean");
31348
+ const refreshablePinCharges = /* @__PURE__ */ __name((before, after, ownWrongAttempts) => {
31333
31349
  const pre = before;
31334
31350
  const post = after;
31335
- if (pinHasRecordedWrongAttempts(before) || pinHasRecordedWrongAttempts(after))
31336
- return void 0;
31337
31351
  if (pre?.state !== "enabled" || post?.state !== "enabled") return void 0;
31338
31352
  if (typeof pre.attemptsRemaining !== "number" || typeof post.attemptsRemaining !== "number")
31339
31353
  return void 0;
31340
31354
  if (post.attemptsRemaining !== pre.attemptsRemaining - 1) return void 0;
31341
- return { attemptsRemaining: post.attemptsRemaining, wrongAttempts: 0 };
31355
+ return { attemptsRemaining: post.attemptsRemaining, wrongAttempts: ownWrongAttempts };
31342
31356
  }, "refreshablePinCharges");
31343
31357
  const freshPinMaterial = /* @__PURE__ */ __name(async (pin) => {
31344
31358
  if (!validatePin(pin).ok) return void 0;
@@ -31361,7 +31375,7 @@ function createSSSStrategy(config) {
31361
31375
  primaryDid: released.primaryDid
31362
31376
  };
31363
31377
  }, "adoptReleasedShare");
31364
- const completePinSignInKeep = /* @__PURE__ */ __name(async (params, released, pin, pinBefore) => {
31378
+ const completePinSignInKeep = /* @__PURE__ */ __name(async (params, released, pin, pinBefore, pinAttempts) => {
31365
31379
  const storage2 = guardedStorage();
31366
31380
  const generation = storageGeneration;
31367
31381
  const storageId = activeStorageId;
@@ -31370,7 +31384,11 @@ function createSSSStrategy(config) {
31370
31384
  throw new Error("This recovery request was cancelled.");
31371
31385
  }
31372
31386
  }, "assertActive");
31373
- const { mode, newPinRequired, refreshCharges } = await withShareUpdateLock(
31387
+ const {
31388
+ mode,
31389
+ newPinRequired: newPinRequiredAtRelease,
31390
+ refreshCharges
31391
+ } = await withShareUpdateLock(
31374
31392
  storage2,
31375
31393
  storageId,
31376
31394
  () => withRotationLock(async () => {
@@ -31414,18 +31432,23 @@ function createSSSStrategy(config) {
31414
31432
  current.shareVersion
31415
31433
  );
31416
31434
  pendingIdentityRecovery = void 0;
31435
+ const { clean, ownWrongAttempts } = pinSignInClean(
31436
+ [pinBefore, current.escrowPin],
31437
+ pinAttempts
31438
+ );
31417
31439
  return {
31418
31440
  mode: mode2,
31419
- newPinRequired: pinHasRecordedWrongAttempts(pinBefore) || pinHasRecordedWrongAttempts(current.escrowPin),
31420
- refreshCharges: refreshablePinCharges(pinBefore, current.escrowPin)
31441
+ newPinRequired: !clean,
31442
+ refreshCharges: clean ? refreshablePinCharges(pinBefore, current.escrowPin, ownWrongAttempts) : void 0
31421
31443
  };
31422
31444
  })
31423
31445
  );
31424
31446
  let pinRefreshed = false;
31425
31447
  let pinRefreshFailed = false;
31448
+ let newPinRequired = newPinRequiredAtRelease;
31426
31449
  if (mode === "kept" && !newPinRequired && refreshCharges && params.signDidAuthVp) {
31427
31450
  const pinMaterial = await freshPinMaterial(pin);
31428
- pinRefreshed = pinMaterial !== void 0 && await tryEnrollEscrow(
31451
+ const refresh = pinMaterial === void 0 ? void 0 : await attemptEnrollEscrow(
31429
31452
  params.token,
31430
31453
  params.providerType,
31431
31454
  released.privateKey,
@@ -31441,7 +31464,18 @@ function createSSSStrategy(config) {
31441
31464
  params.options?.recoveryLanguage,
31442
31465
  refreshCharges
31443
31466
  );
31467
+ pinRefreshed = refresh?.enrolled === true;
31444
31468
  pinRefreshFailed = pinMaterial !== void 0 && !pinRefreshed;
31469
+ if (pinRefreshFailed) {
31470
+ const latest = await fetchAuthShareRaw(
31471
+ serverUrl,
31472
+ params.token,
31473
+ params.providerType,
31474
+ void 0,
31475
+ tenantId
31476
+ ).catch(() => void 0);
31477
+ newPinRequired = latest ? !pinSignInClean([pinBefore, latest.escrowPin], pinAttempts).clean : isConflictRefusal(refresh && !refresh.enrolled ? refresh.error : void 0);
31478
+ }
31445
31479
  }
31446
31480
  assertActive();
31447
31481
  return {
@@ -31529,7 +31563,7 @@ function createSSSStrategy(config) {
31529
31563
  pinSignIn: {
31530
31564
  mode: "relinked",
31531
31565
  pinRefreshed: false,
31532
- newPinRequired: pinHasRecordedWrongAttempts(status?.escrowPin)
31566
+ newPinRequired: !pinSignInClean([status?.escrowPin], pending.pinKeep?.pinAttempts).clean
31533
31567
  }
31534
31568
  };
31535
31569
  }, "completePinSignInRelink");
@@ -32449,7 +32483,8 @@ function createSSSStrategy(config) {
32449
32483
  shareVersion: material.shareVersion
32450
32484
  },
32451
32485
  input.pin,
32452
- pinBefore
32486
+ pinBefore,
32487
+ input.pinAttempts
32453
32488
  );
32454
32489
  }
32455
32490
  pendingIdentityRecovery = {
@@ -32460,7 +32495,12 @@ function createSSSStrategy(config) {
32460
32495
  rebindSessionToken: material.rebindSessionToken,
32461
32496
  fromEscrow: true,
32462
32497
  // The PIN itself is not kept across the new-login step.
32463
- ...input.method === "escrow-pin" ? { pinKeep: { shareVersion: material.shareVersion } } : {}
32498
+ ...input.method === "escrow-pin" ? {
32499
+ pinKeep: {
32500
+ shareVersion: material.shareVersion,
32501
+ ...input.pinAttempts ? { pinAttempts: { ...input.pinAttempts } } : {}
32502
+ }
32503
+ } : {}
32464
32504
  };
32465
32505
  if (!token) return { privateKey: privateKey2, did: material.primaryDid };
32466
32506
  return completeIdentityRecoveryWith({