@learncard/sss-key-manager 0.2.2 → 0.2.3

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.
@@ -199,6 +199,7 @@ var require_types_cjs_development = __commonJS({
199
199
  FlatAuthGrantValidator: /* @__PURE__ */ __name(() => FlatAuthGrantValidator, "FlatAuthGrantValidator"),
200
200
  FrameworkWithSkillsValidator: /* @__PURE__ */ __name(() => FrameworkWithSkillsValidator, "FrameworkWithSkillsValidator"),
201
201
  FullClaimHookValidator: /* @__PURE__ */ __name(() => FullClaimHookValidator, "FullClaimHookValidator"),
202
+ GenerateSkillIconsInputValidator: /* @__PURE__ */ __name(() => GenerateSkillIconsInputValidator, "GenerateSkillIconsInputValidator"),
202
203
  GeoCoordinatesValidator: /* @__PURE__ */ __name(() => GeoCoordinatesValidator, "GeoCoordinatesValidator"),
203
204
  GetCounterEventValidator: /* @__PURE__ */ __name(() => GetCounterEventValidator, "GetCounterEventValidator"),
204
205
  GetCountersEventValidator: /* @__PURE__ */ __name(() => GetCountersEventValidator, "GetCountersEventValidator"),
@@ -359,6 +360,8 @@ var require_types_cjs_development = __commonJS({
359
360
  SHARE_RECOVERY_PROTOCOL: /* @__PURE__ */ __name(() => SHARE_RECOVERY_PROTOCOL, "SHARE_RECOVERY_PROTOCOL"),
360
361
  SHARE_TAG_BYTES: /* @__PURE__ */ __name(() => SHARE_TAG_BYTES, "SHARE_TAG_BYTES"),
361
362
  SHARE_VIEW_RECEIPT_TTL_SECONDS: /* @__PURE__ */ __name(() => SHARE_VIEW_RECEIPT_TTL_SECONDS, "SHARE_VIEW_RECEIPT_TTL_SECONDS"),
363
+ SKILL_ICON_MAX_CHARACTERS_PER_REQUEST: /* @__PURE__ */ __name(() => SKILL_ICON_MAX_CHARACTERS_PER_REQUEST, "SKILL_ICON_MAX_CHARACTERS_PER_REQUEST"),
364
+ SKILL_ICON_MAX_NAMES_PER_REQUEST: /* @__PURE__ */ __name(() => SKILL_ICON_MAX_NAMES_PER_REQUEST, "SKILL_ICON_MAX_NAMES_PER_REQUEST"),
362
365
  SendAiSessionCredentialEventValidator: /* @__PURE__ */ __name(() => SendAiSessionCredentialEventValidator, "SendAiSessionCredentialEventValidator"),
363
366
  SendBoostInputValidator: /* @__PURE__ */ __name(() => SendBoostInputValidator, "SendBoostInputValidator"),
364
367
  SendBoostResponseValidator: /* @__PURE__ */ __name(() => SendBoostResponseValidator, "SendBoostResponseValidator"),
@@ -411,6 +414,7 @@ var require_types_cjs_development = __commonJS({
411
414
  SkillFrameworkQueryValidator: /* @__PURE__ */ __name(() => SkillFrameworkQueryValidator, "SkillFrameworkQueryValidator"),
412
415
  SkillFrameworkStatusEnum: /* @__PURE__ */ __name(() => SkillFrameworkStatusEnum, "SkillFrameworkStatusEnum"),
413
416
  SkillFrameworkValidator: /* @__PURE__ */ __name(() => SkillFrameworkValidator, "SkillFrameworkValidator"),
417
+ SkillIconNamesValidator: /* @__PURE__ */ __name(() => SkillIconNamesValidator, "SkillIconNamesValidator"),
414
418
  SkillQueryValidator: /* @__PURE__ */ __name(() => SkillQueryValidator, "SkillQueryValidator"),
415
419
  SkillSemanticSearchInputValidator: /* @__PURE__ */ __name(() => SkillSemanticSearchInputValidator, "SkillSemanticSearchInputValidator"),
416
420
  SkillSemanticSearchResultItemValidator: /* @__PURE__ */ __name(() => SkillSemanticSearchResultItemValidator, "SkillSemanticSearchResultItemValidator"),
@@ -16148,6 +16152,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16148
16152
  term: external_exports.string().optional()
16149
16153
  }).catchall(external_exports.any());
16150
16154
  var UnsignedAchievementCredentialValidator = UnsignedVCValidator.extend({
16155
+ awardedDate: external_exports.string().optional(),
16151
16156
  name: external_exports.string().optional(),
16152
16157
  description: external_exports.string().optional(),
16153
16158
  image: ImageValidator.optional(),
@@ -19004,6 +19009,17 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
19004
19009
  contentUrl: external_exports.string(),
19005
19010
  receipt: external_exports.string().min(22).max(128).regex(/^[A-Za-z0-9_-]+$/)
19006
19011
  }).strict();
19012
+ var SKILL_ICON_MAX_NAMES_PER_REQUEST = 100;
19013
+ var SKILL_ICON_MAX_CHARACTERS_PER_REQUEST = 2500;
19014
+ var SkillIconNamesValidator = external_exports.array(external_exports.string().nonempty()).min(1).max(SKILL_ICON_MAX_NAMES_PER_REQUEST, {
19015
+ message: `A maximum of ${SKILL_ICON_MAX_NAMES_PER_REQUEST} skill names can be sent per request`
19016
+ }).refine(
19017
+ (names) => names.reduce((total, name) => total + name.length, 0) <= SKILL_ICON_MAX_CHARACTERS_PER_REQUEST,
19018
+ {
19019
+ message: `Skill names may total at most ${SKILL_ICON_MAX_CHARACTERS_PER_REQUEST} characters per request`
19020
+ }
19021
+ );
19022
+ var GenerateSkillIconsInputValidator = external_exports.object({ names: SkillIconNamesValidator });
19007
19023
  }
19008
19024
  });
19009
19025
 
@@ -21034,6 +21050,37 @@ var EscrowEvidenceError = class extends Error {
21034
21050
  var fail2 = /* @__PURE__ */ __name(() => {
21035
21051
  throw new EscrowEvidenceError();
21036
21052
  }, "fail");
21053
+ var verifyEscrowHoldState = /* @__PURE__ */ __name(async (response, nonce, expected, identity) => {
21054
+ requireEvidence(/^[0-9a-f]{64}$/.test(nonce));
21055
+ const { payload } = await verifyRecord(response.proof, "snapshot", identity);
21056
+ requireEvidence(Array.isArray(payload) && payload.length === 12);
21057
+ const p = payload;
21058
+ requireEvidence(
21059
+ p[0] === "learncard-authority-hold-state-v3" && p[1] === nonce && p[2] === expected.tenant && p[3] === expected.authorityGeneration && p[4] === expected.did && p[5] === expected.holdId && p[6] === expected.holdDigest
21060
+ );
21061
+ const status = p[7];
21062
+ if (status !== "awaitingConfirmation" && status !== "pending" && status !== "released" && status !== "cancelled")
21063
+ return fail2();
21064
+ const confirmedHiMs = p[8] === null ? null : integer2(p[8]);
21065
+ const releaseWarningSentHiMs = p[9] === null ? null : integer2(p[9]);
21066
+ const attemptsRemaining = integer2(p[10], 0, 5);
21067
+ const codeSendStatus = p[11];
21068
+ if (codeSendStatus !== "unknown" && codeSendStatus !== "notRequired") return fail2();
21069
+ requireEvidence(
21070
+ status !== "awaitingConfirmation" || confirmedHiMs === null && releaseWarningSentHiMs === null
21071
+ );
21072
+ requireEvidence(status !== "pending" && status !== "released" || confirmedHiMs !== null);
21073
+ return { status, confirmedHiMs, releaseWarningSentHiMs, attemptsRemaining, codeSendStatus };
21074
+ }, "verifyEscrowHoldState");
21075
+ var verifyEscrowCodeDelivery = /* @__PURE__ */ __name(async (delivery, expected, identity) => {
21076
+ const { payload } = await verifyRecord(delivery.proof, "snapshot", identity);
21077
+ requireEvidence(Array.isArray(payload) && payload.length === 5);
21078
+ const values = payload;
21079
+ requireEvidence(
21080
+ values[0] === "learncard-authority-code-delivery-v1" && values[1] === expected.tenant && values[2] === expected.authorityGeneration && values[3] === expected.holdDigest && typeof values[4] === "boolean" && values[4] === delivery.codeSent
21081
+ );
21082
+ return delivery.codeSent;
21083
+ }, "verifyEscrowCodeDelivery");
21037
21084
  var requireEvidence = /* @__PURE__ */ __name((condition) => {
21038
21085
  if (!condition) fail2();
21039
21086
  }, "requireEvidence");
@@ -21702,9 +21749,10 @@ var SERVER_REQUEST_TIMEOUT_MS = 3e4;
21702
21749
  var requestTimeoutSignal = /* @__PURE__ */ __name((ms = SERVER_REQUEST_TIMEOUT_MS) => typeof AbortSignal !== "undefined" && typeof AbortSignal.timeout === "function" ? AbortSignal.timeout(ms) : void 0, "requestTimeoutSignal");
21703
21750
  var describeHttpStatus = /* @__PURE__ */ __name((response) => response.statusText ? `${response.status} ${response.statusText}` : `${response.status}`, "describeHttpStatus");
21704
21751
  var EscrowRequestError = class extends Error {
21705
- constructor(status) {
21752
+ constructor(status, reason) {
21706
21753
  super("Escrow request failed");
21707
21754
  this.status = status;
21755
+ this.reason = reason;
21708
21756
  this.name = "EscrowRequestError";
21709
21757
  }
21710
21758
  static {
@@ -22190,6 +22238,14 @@ function createSSSStrategy(config) {
22190
22238
  ...init
22191
22239
  });
22192
22240
  if (!response.ok) {
22241
+ if (path === "/confirm" && response.status === 403) {
22242
+ const body = await response.json().catch(() => void 0);
22243
+ const reason = body && typeof body === "object" && "message" in body && typeof body.message === "string" ? body.message : void 0;
22244
+ throw new EscrowRequestError(
22245
+ response.status,
22246
+ reason === "codeMismatch" || reason === "codeExpired" || reason === "codeLocked" ? reason : void 0
22247
+ );
22248
+ }
22193
22249
  if (!pinAttempt && path === "/recover" && response.status === 429) {
22194
22250
  const body = await response.json().catch(() => void 0);
22195
22251
  const message = body && typeof body === "object" && "message" in body && typeof body.message === "string" ? body.message : "";
@@ -23093,6 +23149,7 @@ function createSSSStrategy(config) {
23093
23149
  ledgerPublicKey: identity.authority.ledgerPublicKey,
23094
23150
  keyId: verified.receipt.keyId
23095
23151
  };
23152
+ result.codeSent = result.delivery ? await verifyEscrowCodeDelivery(result.delivery, expectations, identity) : void 0;
23096
23153
  }
23097
23154
  return { ...result, clientEphemeralPrivateKey: pair.privateKey, expectations };
23098
23155
  },
@@ -24357,7 +24414,9 @@ export {
24357
24414
  validateRecoveryPhrase,
24358
24415
  verifyEnclaveAttestation,
24359
24416
  verifyEscrowAuthorityState,
24417
+ verifyEscrowCodeDelivery,
24360
24418
  verifyEscrowEnrollmentCommit,
24419
+ verifyEscrowHoldState,
24361
24420
  verifyNitroAttestationDocument,
24362
24421
  verifyStoredShares,
24363
24422
  violatesCarryContactRule