@learncard/sss-key-manager 0.1.4 → 0.1.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.
@@ -705,6 +705,12 @@ export interface SSSStrategyConfig {
705
705
  * Defaults to false. Controlled by VITE_ENABLE_EMAIL_BACKUP_SHARE env var.
706
706
  */
707
707
  enableEmailBackupShare?: boolean;
708
+ /**
709
+ * Tenant identifier forwarded as `X-Tenant-Id` on every server request.
710
+ * The lca-api uses this to brand recovery / OTP emails for the active
711
+ * tenant. Defaults to the server's fallback tenant (learncard) when unset.
712
+ */
713
+ tenantId?: string;
708
714
  }
709
715
  /**
710
716
  * Create an SSS key derivation strategy.
@@ -70,6 +70,8 @@ var require_types_cjs_development = __commonJS({
70
70
  AppStoreListingSubmitterValidator: /* @__PURE__ */ __name(() => AppStoreListingSubmitterValidator, "AppStoreListingSubmitterValidator"),
71
71
  AppStoreListingUpdateValidator: /* @__PURE__ */ __name(() => AppStoreListingUpdateValidator, "AppStoreListingUpdateValidator"),
72
72
  AppStoreListingValidator: /* @__PURE__ */ __name(() => AppStoreListingValidator, "AppStoreListingValidator"),
73
+ AssociationTypeValidator: /* @__PURE__ */ __name(() => AssociationTypeValidator, "AssociationTypeValidator"),
74
+ AssociationValidator: /* @__PURE__ */ __name(() => AssociationValidator, "AssociationValidator"),
73
75
  AuthGrantQueryValidator: /* @__PURE__ */ __name(() => AuthGrantQueryValidator, "AuthGrantQueryValidator"),
74
76
  AuthGrantStatusValidator: /* @__PURE__ */ __name(() => AuthGrantStatusValidator, "AuthGrantStatusValidator"),
75
77
  AuthGrantValidator: /* @__PURE__ */ __name(() => AuthGrantValidator, "AuthGrantValidator"),
@@ -88,6 +90,8 @@ var require_types_cjs_development = __commonJS({
88
90
  ClaimHookValidator: /* @__PURE__ */ __name(() => ClaimHookValidator, "ClaimHookValidator"),
89
91
  ClaimInboxCredentialValidator: /* @__PURE__ */ __name(() => ClaimInboxCredentialValidator, "ClaimInboxCredentialValidator"),
90
92
  ClaimTokenValidator: /* @__PURE__ */ __name(() => ClaimTokenValidator, "ClaimTokenValidator"),
93
+ ClrCredentialValidator: /* @__PURE__ */ __name(() => ClrCredentialValidator, "ClrCredentialValidator"),
94
+ ClrSubjectValidator: /* @__PURE__ */ __name(() => ClrSubjectValidator, "ClrSubjectValidator"),
91
95
  ConsentFlowContractDataForDidValidator: /* @__PURE__ */ __name(() => ConsentFlowContractDataForDidValidator, "ConsentFlowContractDataForDidValidator"),
92
96
  ConsentFlowContractDataValidator: /* @__PURE__ */ __name(() => ConsentFlowContractDataValidator, "ConsentFlowContractDataValidator"),
93
97
  ConsentFlowContractDetailsValidator: /* @__PURE__ */ __name(() => ConsentFlowContractDetailsValidator, "ConsentFlowContractDetailsValidator"),
@@ -146,17 +150,21 @@ var require_types_cjs_development = __commonJS({
146
150
  FrameworkWithSkillsValidator: /* @__PURE__ */ __name(() => FrameworkWithSkillsValidator, "FrameworkWithSkillsValidator"),
147
151
  FullClaimHookValidator: /* @__PURE__ */ __name(() => FullClaimHookValidator, "FullClaimHookValidator"),
148
152
  GeoCoordinatesValidator: /* @__PURE__ */ __name(() => GeoCoordinatesValidator, "GeoCoordinatesValidator"),
153
+ GetCounterEventValidator: /* @__PURE__ */ __name(() => GetCounterEventValidator, "GetCounterEventValidator"),
154
+ GetCountersEventValidator: /* @__PURE__ */ __name(() => GetCountersEventValidator, "GetCountersEventValidator"),
149
155
  GetFullSkillTreeInputValidator: /* @__PURE__ */ __name(() => GetFullSkillTreeInputValidator, "GetFullSkillTreeInputValidator"),
150
156
  GetFullSkillTreeResultValidator: /* @__PURE__ */ __name(() => GetFullSkillTreeResultValidator, "GetFullSkillTreeResultValidator"),
151
157
  GetSkillPathInputValidator: /* @__PURE__ */ __name(() => GetSkillPathInputValidator, "GetSkillPathInputValidator"),
152
158
  GetSkillPathResultValidator: /* @__PURE__ */ __name(() => GetSkillPathResultValidator, "GetSkillPathResultValidator"),
153
159
  GetTemplateRecipientsEventValidator: /* @__PURE__ */ __name(() => GetTemplateRecipientsEventValidator, "GetTemplateRecipientsEventValidator"),
160
+ GuardianStatusValidator: /* @__PURE__ */ __name(() => GuardianStatusValidator, "GuardianStatusValidator"),
154
161
  IdentifierEntryValidator: /* @__PURE__ */ __name(() => IdentifierEntryValidator, "IdentifierEntryValidator"),
155
162
  IdentifierTypeValidator: /* @__PURE__ */ __name(() => IdentifierTypeValidator, "IdentifierTypeValidator"),
156
163
  IdentityObjectValidator: /* @__PURE__ */ __name(() => IdentityObjectValidator, "IdentityObjectValidator"),
157
164
  ImageValidator: /* @__PURE__ */ __name(() => ImageValidator, "ImageValidator"),
158
165
  InboxCredentialQueryValidator: /* @__PURE__ */ __name(() => InboxCredentialQueryValidator, "InboxCredentialQueryValidator"),
159
166
  InboxCredentialValidator: /* @__PURE__ */ __name(() => InboxCredentialValidator, "InboxCredentialValidator"),
167
+ IncrementCounterEventValidator: /* @__PURE__ */ __name(() => IncrementCounterEventValidator, "IncrementCounterEventValidator"),
160
168
  InstalledAppValidator: /* @__PURE__ */ __name(() => InstalledAppValidator, "InstalledAppValidator"),
161
169
  IssueInboxCredentialResponseValidator: /* @__PURE__ */ __name(() => IssueInboxCredentialResponseValidator, "IssueInboxCredentialResponseValidator"),
162
170
  IssueInboxCredentialValidator: /* @__PURE__ */ __name(() => IssueInboxCredentialValidator, "IssueInboxCredentialValidator"),
@@ -231,17 +239,20 @@ var require_types_cjs_development = __commonJS({
231
239
  RelatedValidator: /* @__PURE__ */ __name(() => RelatedValidator, "RelatedValidator"),
232
240
  ReplaceSkillFrameworkSkillsInputValidator: /* @__PURE__ */ __name(() => ReplaceSkillFrameworkSkillsInputValidator, "ReplaceSkillFrameworkSkillsInputValidator"),
233
241
  ReplaceSkillFrameworkSkillsResultValidator: /* @__PURE__ */ __name(() => ReplaceSkillFrameworkSkillsResultValidator, "ReplaceSkillFrameworkSkillsResultValidator"),
242
+ RequestLearnerContextEventValidator: /* @__PURE__ */ __name(() => RequestLearnerContextEventValidator, "RequestLearnerContextEventValidator"),
234
243
  ResultDescriptionValidator: /* @__PURE__ */ __name(() => ResultDescriptionValidator, "ResultDescriptionValidator"),
235
244
  ResultStatusTypeValidator: /* @__PURE__ */ __name(() => ResultStatusTypeValidator, "ResultStatusTypeValidator"),
236
245
  ResultTypeValidator: /* @__PURE__ */ __name(() => ResultTypeValidator, "ResultTypeValidator"),
237
246
  ResultValidator: /* @__PURE__ */ __name(() => ResultValidator, "ResultValidator"),
238
247
  RubricCriterionValidator: /* @__PURE__ */ __name(() => RubricCriterionValidator, "RubricCriterionValidator"),
248
+ SendAiSessionCredentialEventValidator: /* @__PURE__ */ __name(() => SendAiSessionCredentialEventValidator, "SendAiSessionCredentialEventValidator"),
239
249
  SendBoostInputValidator: /* @__PURE__ */ __name(() => SendBoostInputValidator, "SendBoostInputValidator"),
240
250
  SendBoostResponseValidator: /* @__PURE__ */ __name(() => SendBoostResponseValidator, "SendBoostResponseValidator"),
241
251
  SendBrandingOptionsValidator: /* @__PURE__ */ __name(() => SendBrandingOptionsValidator, "SendBrandingOptionsValidator"),
242
252
  SendCredentialEventValidator: /* @__PURE__ */ __name(() => SendCredentialEventValidator, "SendCredentialEventValidator"),
243
253
  SendInboxResponseValidator: /* @__PURE__ */ __name(() => SendInboxResponseValidator, "SendInboxResponseValidator"),
244
254
  SendInputValidator: /* @__PURE__ */ __name(() => SendInputValidator, "SendInputValidator"),
255
+ SendNotificationEventValidator: /* @__PURE__ */ __name(() => SendNotificationEventValidator, "SendNotificationEventValidator"),
245
256
  SendOptionsValidator: /* @__PURE__ */ __name(() => SendOptionsValidator, "SendOptionsValidator"),
246
257
  SendResponseValidator: /* @__PURE__ */ __name(() => SendResponseValidator, "SendResponseValidator"),
247
258
  SentCredentialInfoValidator: /* @__PURE__ */ __name(() => SentCredentialInfoValidator, "SentCredentialInfoValidator"),
@@ -263,10 +274,13 @@ var require_types_cjs_development = __commonJS({
263
274
  SkillTreeNodeValidator: /* @__PURE__ */ __name(() => SkillTreeNodeValidator, "SkillTreeNodeValidator"),
264
275
  SkillValidator: /* @__PURE__ */ __name(() => SkillValidator, "SkillValidator"),
265
276
  StringQuery: /* @__PURE__ */ __name(() => StringQuery, "StringQuery"),
277
+ SummaryCredentialDataValidator: /* @__PURE__ */ __name(() => SummaryCredentialDataValidator, "SummaryCredentialDataValidator"),
278
+ SummaryCredentialKeywordValidator: /* @__PURE__ */ __name(() => SummaryCredentialKeywordValidator, "SummaryCredentialKeywordValidator"),
266
279
  SyncFrameworkInputValidator: /* @__PURE__ */ __name(() => SyncFrameworkInputValidator, "SyncFrameworkInputValidator"),
267
280
  TagValidator: /* @__PURE__ */ __name(() => TagValidator, "TagValidator"),
268
281
  TermsOfUseValidator: /* @__PURE__ */ __name(() => TermsOfUseValidator, "TermsOfUseValidator"),
269
282
  UnsignedAchievementCredentialValidator: /* @__PURE__ */ __name(() => UnsignedAchievementCredentialValidator, "UnsignedAchievementCredentialValidator"),
283
+ UnsignedClrCredentialValidator: /* @__PURE__ */ __name(() => UnsignedClrCredentialValidator, "UnsignedClrCredentialValidator"),
270
284
  UnsignedVCValidator: /* @__PURE__ */ __name(() => UnsignedVCValidator, "UnsignedVCValidator"),
271
285
  UnsignedVPValidator: /* @__PURE__ */ __name(() => UnsignedVPValidator, "UnsignedVPValidator"),
272
286
  UpdateFrameworkInputValidator: /* @__PURE__ */ __name(() => UpdateFrameworkInputValidator, "UpdateFrameworkInputValidator"),
@@ -14038,6 +14052,42 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14038
14052
  var AchievementCredentialValidator = UnsignedAchievementCredentialValidator.extend({
14039
14053
  proof: ProofValidator.or(ProofValidator.array())
14040
14054
  });
14055
+ var AssociationTypeValidator = external_exports.enum([
14056
+ "exactMatchOf",
14057
+ "extends",
14058
+ "isChildOf",
14059
+ "isParentOf",
14060
+ "isPartOf",
14061
+ "isPeerOf",
14062
+ "isRelatedTo",
14063
+ "precedes",
14064
+ "replacedBy"
14065
+ ]).or(external_exports.string());
14066
+ var AssociationValidator = external_exports.object({
14067
+ type: external_exports.string().array().nonempty(),
14068
+ associationType: AssociationTypeValidator,
14069
+ sourceId: external_exports.string().optional(),
14070
+ targetId: external_exports.string()
14071
+ }).catchall(external_exports.any());
14072
+ var ClrSubjectValidator = external_exports.object({
14073
+ id: external_exports.string().optional(),
14074
+ type: external_exports.string().array().nonempty(),
14075
+ identifier: external_exports.any().array().optional(),
14076
+ achievement: AchievementValidator.array().optional(),
14077
+ association: AssociationValidator.array().optional(),
14078
+ verifiableCredential: external_exports.any().array().optional()
14079
+ }).catchall(external_exports.any());
14080
+ var UnsignedClrCredentialValidator = UnsignedVCValidator.extend({
14081
+ name: external_exports.string().optional(),
14082
+ description: external_exports.string().optional(),
14083
+ image: ImageValidator.optional(),
14084
+ credentialSubject: ClrSubjectValidator.or(ClrSubjectValidator.array()),
14085
+ endorsement: EndorsementCredentialValidator.array().optional(),
14086
+ partial: external_exports.boolean().optional()
14087
+ });
14088
+ var ClrCredentialValidator = UnsignedClrCredentialValidator.extend({
14089
+ proof: ProofValidator.or(ProofValidator.array())
14090
+ });
14041
14091
  var VerificationCheckValidator = external_exports.object({
14042
14092
  checks: external_exports.string().array(),
14043
14093
  warnings: external_exports.string().array(),
@@ -14389,10 +14439,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14389
14439
  credentialName: external_exports.string().optional().describe("Display name for the credential"),
14390
14440
  recipientName: external_exports.string().optional().describe("Name of the recipient for personalization")
14391
14441
  });
14442
+ var GuardianStatusValidator = external_exports.enum([
14443
+ "AWAITING_GUARDIAN",
14444
+ "GUARDIAN_APPROVED",
14445
+ "GUARDIAN_REJECTED"
14446
+ ]);
14392
14447
  var SendOptionsValidator = external_exports.object({
14393
14448
  webhookUrl: external_exports.string().url().optional().describe("Webhook URL to receive claim notifications"),
14394
14449
  suppressDelivery: external_exports.boolean().optional().describe("If true, returns claimUrl without sending email/SMS"),
14395
- branding: SendBrandingOptionsValidator.optional().describe("Branding for email/SMS delivery")
14450
+ branding: SendBrandingOptionsValidator.optional().describe("Branding for email/SMS delivery"),
14451
+ guardianEmail: external_exports.string().email().optional().describe("Guardian email that must approve before student can claim")
14396
14452
  });
14397
14453
  var SendBoostInputValidator = external_exports.object({
14398
14454
  type: external_exports.literal("boost"),
@@ -14409,11 +14465,25 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14409
14465
  }).refine((data) => data.templateUri || data.template || data.signedCredential, {
14410
14466
  message: "Either templateUri, template, or signedCredential must be provided.",
14411
14467
  path: ["templateUri"]
14412
- });
14468
+ }).refine(
14469
+ (data) => {
14470
+ if (data.options?.guardianEmail) {
14471
+ return data.options.guardianEmail.toLowerCase() !== data.recipient.toLowerCase();
14472
+ }
14473
+ return true;
14474
+ },
14475
+ {
14476
+ message: "guardianEmail must differ from recipient (self-approval not allowed)",
14477
+ path: ["options", "guardianEmail"]
14478
+ }
14479
+ );
14413
14480
  var SendInboxResponseValidator = external_exports.object({
14414
14481
  issuanceId: external_exports.string(),
14415
14482
  status: external_exports.enum(["PENDING", "ISSUED", "EXPIRED", "DELIVERED", "CLAIMED"]),
14416
- claimUrl: external_exports.string().url().optional().describe("Present when suppressDelivery=true")
14483
+ claimUrl: external_exports.string().url().optional().describe("Present when suppressDelivery=true"),
14484
+ guardianStatus: GuardianStatusValidator.optional().describe(
14485
+ "Present when guardianEmail was specified"
14486
+ )
14417
14487
  });
14418
14488
  var SendBoostResponseValidator = external_exports.object({
14419
14489
  type: external_exports.literal("boost"),
@@ -14650,7 +14720,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14650
14720
  "APP_LISTING_APPROVED",
14651
14721
  "APP_LISTING_REJECTED",
14652
14722
  "APP_LISTING_WITHDRAWN",
14653
- "DEVICE_LINK_REQUEST"
14723
+ "DEVICE_LINK_REQUEST",
14724
+ "GUARDIAN_APPROVAL_PENDING",
14725
+ "GUARDIAN_APPROVED",
14726
+ "GUARDIAN_REJECTED",
14727
+ "APP_NOTIFICATION"
14654
14728
  ]);
14655
14729
  var LCNNotificationMessageValidator = external_exports.object({
14656
14730
  title: external_exports.string().optional(),
@@ -14688,7 +14762,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14688
14762
  var LCNNotificationValidator = external_exports.object({
14689
14763
  type: LCNNotificationTypeEnumValidator,
14690
14764
  to: LCNProfileValidator.partial().and(external_exports.object({ did: external_exports.string() })),
14691
- from: LCNProfileValidator.partial().and(external_exports.object({ did: external_exports.string() })),
14765
+ from: external_exports.union([
14766
+ external_exports.string(),
14767
+ LCNProfileValidator.partial().and(external_exports.object({ did: external_exports.string() }))
14768
+ ]),
14692
14769
  message: LCNNotificationMessageValidator.optional(),
14693
14770
  data: LCNNotificationDataValidator.optional(),
14694
14771
  sent: external_exports.iso.datetime().optional(),
@@ -14793,7 +14870,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14793
14870
  signingAuthority: external_exports.object({
14794
14871
  endpoint: external_exports.string().optional(),
14795
14872
  name: external_exports.string().optional()
14796
- }).optional()
14873
+ }).optional(),
14874
+ // Guardian gate fields (all optional — absent on pre-existing credentials)
14875
+ guardianEmail: external_exports.string().email().optional(),
14876
+ guardianStatus: GuardianStatusValidator.optional(),
14877
+ guardianApprovedAt: external_exports.string().optional(),
14878
+ guardianApprovedByDid: external_exports.string().optional()
14797
14879
  });
14798
14880
  var PaginatedInboxCredentialsValidator = external_exports.object({
14799
14881
  hasMore: external_exports.boolean(),
@@ -15261,11 +15343,86 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15261
15343
  }).refine((input) => Boolean(input.templateAlias) !== Boolean(input.boostUri), {
15262
15344
  message: "Exactly one of templateAlias or boostUri is required"
15263
15345
  });
15346
+ var RequestLearnerContextEventValidator = external_exports.object({
15347
+ type: external_exports.literal("request-learner-context"),
15348
+ includeCredentials: external_exports.boolean().optional().default(true),
15349
+ includePersonalData: external_exports.boolean().optional().default(false),
15350
+ format: external_exports.enum(["prompt", "structured"]).optional().default("prompt"),
15351
+ instructions: external_exports.string().optional(),
15352
+ detailLevel: external_exports.enum(["compact", "expanded"]).optional().default("compact")
15353
+ });
15354
+ var SummaryCredentialKeywordValidator = external_exports.object({
15355
+ occupations: external_exports.array(external_exports.string()).nullable(),
15356
+ careers: external_exports.array(external_exports.string()).nullable(),
15357
+ jobs: external_exports.array(external_exports.string()).nullable(),
15358
+ skills: external_exports.array(external_exports.string()).nullable(),
15359
+ fieldOfStudy: external_exports.string().nullable()
15360
+ });
15361
+ var SummaryCredentialDataValidator = external_exports.object({
15362
+ title: external_exports.string().describe("Short, concise title for the learning session or credential"),
15363
+ summary: external_exports.string().describe("Comprehensive summary of what happened during the session"),
15364
+ learned: external_exports.array(external_exports.string()).describe("Bullet points of key knowledge gained"),
15365
+ skills: external_exports.array(
15366
+ external_exports.object({
15367
+ title: external_exports.string().describe("Name of the skill category"),
15368
+ description: external_exports.string().describe("Detailed description of what this skill category involves")
15369
+ })
15370
+ ).describe("Categorized skills learned during the session"),
15371
+ nextSteps: external_exports.array(
15372
+ external_exports.object({
15373
+ title: external_exports.string().describe("Title of the suggested next step"),
15374
+ description: external_exports.string().describe("Description explaining why this next step is recommended"),
15375
+ keywords: SummaryCredentialKeywordValidator.optional().describe(
15376
+ "Optional taxonomy keywords for occupations/careers/jobs/skills/fieldOfStudy. Omit if not relevant."
15377
+ )
15378
+ })
15379
+ ).describe("Recommended follow-up activities or learning modules"),
15380
+ reflections: external_exports.array(
15381
+ external_exports.object({
15382
+ title: external_exports.string().describe("Title of the reflection"),
15383
+ description: external_exports.string().describe("Detailed description of what this reflection involves")
15384
+ })
15385
+ ).describe("Reflections on the learning experience")
15386
+ });
15387
+ var SendAiSessionCredentialEventValidator = external_exports.object({
15388
+ type: external_exports.literal("send-ai-session-credential"),
15389
+ sessionTitle: external_exports.string(),
15390
+ summaryData: SummaryCredentialDataValidator,
15391
+ metadata: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
15392
+ });
15393
+ var SendNotificationEventValidator = external_exports.object({
15394
+ type: external_exports.literal("send-notification"),
15395
+ title: external_exports.string().optional(),
15396
+ body: external_exports.string().optional(),
15397
+ actionPath: external_exports.string().optional(),
15398
+ category: external_exports.string().optional(),
15399
+ priority: external_exports.enum(["normal", "high"]).optional()
15400
+ });
15401
+ var counterKeyValidator = external_exports.string().min(1).max(64).regex(/^[a-zA-Z0-9_-]+$/, "Key must be alphanumeric with _ or -");
15402
+ var IncrementCounterEventValidator = external_exports.object({
15403
+ type: external_exports.literal("increment-counter"),
15404
+ key: counterKeyValidator,
15405
+ amount: external_exports.number().int().finite()
15406
+ });
15407
+ var GetCounterEventValidator = external_exports.object({
15408
+ type: external_exports.literal("get-counter"),
15409
+ key: counterKeyValidator
15410
+ });
15411
+ var GetCountersEventValidator = external_exports.object({
15412
+ type: external_exports.literal("get-counters"),
15413
+ keys: external_exports.array(counterKeyValidator).min(1).max(50).optional()
15414
+ });
15264
15415
  var AppEventValidator = external_exports.discriminatedUnion("type", [
15265
15416
  SendCredentialEventValidator,
15266
15417
  CheckCredentialEventValidator,
15267
15418
  CheckIssuanceStatusEventValidator,
15268
- GetTemplateRecipientsEventValidator
15419
+ GetTemplateRecipientsEventValidator,
15420
+ RequestLearnerContextEventValidator,
15421
+ SendAiSessionCredentialEventValidator,
15422
+ SendNotificationEventValidator,
15423
+ IncrementCounterEventValidator,
15424
+ GetCounterEventValidator,
15425
+ GetCountersEventValidator
15269
15426
  ]);
15270
15427
  var AppEventInputValidator = external_exports.object({
15271
15428
  listingId: external_exports.string(),
@@ -15296,7 +15453,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15296
15453
  activityId: external_exports.string(),
15297
15454
  eventType: CredentialActivityEventTypeValidator,
15298
15455
  timestamp: external_exports.string(),
15299
- actorProfileId: external_exports.string(),
15456
+ actorProfileId: external_exports.string().optional(),
15300
15457
  recipientType: CredentialActivityRecipientTypeValidator,
15301
15458
  recipientIdentifier: external_exports.string(),
15302
15459
  boostUri: external_exports.string().optional(),
@@ -16637,14 +16794,15 @@ var defaultStorage = {
16637
16794
  storeShareVersion,
16638
16795
  getShareVersion
16639
16796
  };
16640
- var buildHeaders = /* @__PURE__ */ __name((token, didAuthVp) => ({
16797
+ var buildHeaders = /* @__PURE__ */ __name((token, didAuthVp, tenantId) => ({
16641
16798
  "Content-Type": "application/json",
16642
- ...didAuthVp ? { Authorization: `Bearer ${didAuthVp}` } : {}
16799
+ ...didAuthVp ? { Authorization: `Bearer ${didAuthVp}` } : {},
16800
+ ...tenantId ? { "X-Tenant-Id": tenantId } : {}
16643
16801
  }), "buildHeaders");
16644
- var fetchAuthShareRaw = /* @__PURE__ */ __name(async (serverUrl, token, providerType, shareVersion) => {
16802
+ var fetchAuthShareRaw = /* @__PURE__ */ __name(async (serverUrl, token, providerType, shareVersion, tenantId) => {
16645
16803
  const response = await fetch(`${serverUrl}/keys/auth-share`, {
16646
16804
  method: "POST",
16647
- headers: buildHeaders(token),
16805
+ headers: buildHeaders(token, void 0, tenantId),
16648
16806
  body: JSON.stringify({
16649
16807
  authToken: token,
16650
16808
  providerType,
@@ -16657,10 +16815,10 @@ var fetchAuthShareRaw = /* @__PURE__ */ __name(async (serverUrl, token, provider
16657
16815
  }
16658
16816
  return response.json();
16659
16817
  }, "fetchAuthShareRaw");
16660
- var putAuthShare = /* @__PURE__ */ __name(async (serverUrl, token, providerType, authShare, primaryDid, didAuthVp) => {
16818
+ var putAuthShare = /* @__PURE__ */ __name(async (serverUrl, token, providerType, authShare, primaryDid, didAuthVp, tenantId) => {
16661
16819
  const response = await fetch(`${serverUrl}/keys/auth-share`, {
16662
16820
  method: "PUT",
16663
- headers: buildHeaders(token, didAuthVp),
16821
+ headers: buildHeaders(token, didAuthVp, tenantId),
16664
16822
  body: JSON.stringify({
16665
16823
  authToken: token,
16666
16824
  providerType,
@@ -16675,24 +16833,24 @@ var putAuthShare = /* @__PURE__ */ __name(async (serverUrl, token, providerType,
16675
16833
  const data = await response.json();
16676
16834
  return { shareVersion: data.shareVersion ?? 1 };
16677
16835
  }, "putAuthShare");
16678
- var fetchRecoveryShare = /* @__PURE__ */ __name(async (serverUrl, token, providerType, type, credentialId) => {
16836
+ var fetchRecoveryShare = /* @__PURE__ */ __name(async (serverUrl, token, providerType, type, credentialId, tenantId) => {
16679
16837
  const params = new URLSearchParams({ type, providerType, authToken: token });
16680
16838
  if (credentialId) {
16681
16839
  params.set("credentialId", credentialId);
16682
16840
  }
16683
16841
  const response = await fetch(`${serverUrl}/keys/recovery?${params}`, {
16684
16842
  method: "GET",
16685
- headers: { "Content-Type": "application/json" }
16843
+ headers: buildHeaders(token, void 0, tenantId)
16686
16844
  });
16687
16845
  if (!response.ok) {
16688
16846
  throw new Error(`No ${type} recovery share found`);
16689
16847
  }
16690
16848
  return response.json();
16691
16849
  }, "fetchRecoveryShare");
16692
- var postRecoveryMethod = /* @__PURE__ */ __name(async (serverUrl, token, providerType, body, didAuthVp) => {
16850
+ var postRecoveryMethod = /* @__PURE__ */ __name(async (serverUrl, token, providerType, body, didAuthVp, tenantId) => {
16693
16851
  const response = await fetch(`${serverUrl}/keys/recovery`, {
16694
16852
  method: "POST",
16695
- headers: buildHeaders(token, didAuthVp),
16853
+ headers: buildHeaders(token, didAuthVp, tenantId),
16696
16854
  body: JSON.stringify({ authToken: token, providerType, ...body })
16697
16855
  });
16698
16856
  if (!response.ok) {
@@ -16711,12 +16869,12 @@ var parseVersionedEmailShare = /* @__PURE__ */ __name((input) => {
16711
16869
  }
16712
16870
  return { share: input, version: void 0 };
16713
16871
  }, "parseVersionedEmailShare");
16714
- var sendEmailBackupShare = /* @__PURE__ */ __name(async (serverUrl, token, providerType, emailShare, email, shareVersion) => {
16872
+ var sendEmailBackupShare = /* @__PURE__ */ __name(async (serverUrl, token, providerType, emailShare, email, shareVersion, tenantId) => {
16715
16873
  try {
16716
16874
  const payload = shareVersion != null ? formatVersionedEmailShare(emailShare, shareVersion) : emailShare;
16717
16875
  const response = await fetch(`${serverUrl}/keys/email-backup`, {
16718
16876
  method: "POST",
16719
- headers: buildHeaders(token),
16877
+ headers: buildHeaders(token, void 0, tenantId),
16720
16878
  body: JSON.stringify({ authToken: token, providerType, emailShare: payload, email })
16721
16879
  });
16722
16880
  if (!response.ok) {
@@ -16726,11 +16884,11 @@ var sendEmailBackupShare = /* @__PURE__ */ __name(async (serverUrl, token, provi
16726
16884
  console.warn("Email backup share delivery failed:", e);
16727
16885
  }
16728
16886
  }, "sendEmailBackupShare");
16729
- var sendEmailShareToRecoveryEmail = /* @__PURE__ */ __name(async (serverUrl, token, providerType, emailShare, shareVersion) => {
16887
+ var sendEmailShareToRecoveryEmail = /* @__PURE__ */ __name(async (serverUrl, token, providerType, emailShare, shareVersion, tenantId) => {
16730
16888
  const payload = shareVersion != null ? formatVersionedEmailShare(emailShare, shareVersion) : emailShare;
16731
16889
  const response = await fetch(`${serverUrl}/keys/email-backup`, {
16732
16890
  method: "POST",
16733
- headers: buildHeaders(token),
16891
+ headers: buildHeaders(token, void 0, tenantId),
16734
16892
  body: JSON.stringify({
16735
16893
  authToken: token,
16736
16894
  providerType,
@@ -16743,7 +16901,7 @@ var sendEmailShareToRecoveryEmail = /* @__PURE__ */ __name(async (serverUrl, tok
16743
16901
  }
16744
16902
  }, "sendEmailShareToRecoveryEmail");
16745
16903
  function createSSSStrategy(config) {
16746
- const { serverUrl, enableEmailBackupShare = false } = config;
16904
+ const { serverUrl, enableEmailBackupShare = false, tenantId } = config;
16747
16905
  const storage = config.storage || defaultStorage;
16748
16906
  let activeStorageId;
16749
16907
  let lastEmailShare;
@@ -16816,7 +16974,8 @@ function createSSSStrategy(config) {
16816
16974
  serverUrl,
16817
16975
  token,
16818
16976
  providerType,
16819
- localVersion ?? void 0
16977
+ localVersion ?? void 0,
16978
+ tenantId
16820
16979
  );
16821
16980
  if (!data) {
16822
16981
  hasRecoveryEmail = false;
@@ -16848,14 +17007,14 @@ function createSSSStrategy(config) {
16848
17007
  };
16849
17008
  },
16850
17009
  async storeAuthShare(token, providerType, authShare, primaryDid, didAuthVp) {
16851
- const { shareVersion } = await putAuthShare(serverUrl, token, providerType, authShare, primaryDid, didAuthVp);
17010
+ const { shareVersion } = await putAuthShare(serverUrl, token, providerType, authShare, primaryDid, didAuthVp, tenantId);
16852
17011
  await storage.storeShareVersion(shareVersion, activeStorageId);
16853
17012
  lastShareVersion = shareVersion;
16854
17013
  },
16855
17014
  async markMigrated(token, providerType, didAuthVp) {
16856
17015
  const response = await fetch(`${serverUrl}/keys/migrate`, {
16857
17016
  method: "POST",
16858
- headers: buildHeaders(token, didAuthVp),
17017
+ headers: buildHeaders(token, didAuthVp, tenantId),
16859
17018
  body: JSON.stringify({ authToken: token, providerType })
16860
17019
  });
16861
17020
  if (!response.ok) {
@@ -16874,7 +17033,8 @@ function createSSSStrategy(config) {
16874
17033
  token,
16875
17034
  providerType,
16876
17035
  "passkey",
16877
- input.credentialId
17036
+ input.credentialId,
17037
+ tenantId
16878
17038
  );
16879
17039
  if (!result?.encryptedShare) {
16880
17040
  throw new Error("No passkey recovery share found");
@@ -16898,7 +17058,9 @@ function createSSSStrategy(config) {
16898
17058
  serverUrl,
16899
17059
  token,
16900
17060
  providerType,
16901
- "phrase"
17061
+ "phrase",
17062
+ void 0,
17063
+ tenantId
16902
17064
  );
16903
17065
  recoveryShareVersion = phraseRecord?.shareVersion;
16904
17066
  } catch {
@@ -16931,7 +17093,8 @@ function createSSSStrategy(config) {
16931
17093
  serverUrl,
16932
17094
  token,
16933
17095
  providerType,
16934
- recoveryShareVersion
17096
+ recoveryShareVersion,
17097
+ tenantId
16935
17098
  );
16936
17099
  if (!serverData?.authShare) {
16937
17100
  throw new Error("No auth share found on server");
@@ -16968,12 +17131,12 @@ function createSSSStrategy(config) {
16968
17131
  const { shares } = await splitAndVerify(privateKey);
16969
17132
  lastEmailShare = shares.emailShare;
16970
17133
  await storage.storeDeviceShare(shares.deviceShare, activeStorageId);
16971
- const serverData = await fetchAuthShareRaw(serverUrl, token, providerType);
17134
+ const serverData = await fetchAuthShareRaw(serverUrl, token, providerType, void 0, tenantId);
16972
17135
  const primaryDid = serverData?.primaryDid || "";
16973
- const { shareVersion } = await putAuthShare(serverUrl, token, providerType, shares.authShare, primaryDid, vpJwt);
17136
+ const { shareVersion } = await putAuthShare(serverUrl, token, providerType, shares.authShare, primaryDid, vpJwt, tenantId);
16974
17137
  await storage.storeShareVersion(shareVersion, activeStorageId);
16975
17138
  if (enableEmailBackupShare && input.method !== "email" && lastEmailShare) {
16976
- const resend = hasRecoveryEmail ? sendEmailShareToRecoveryEmail(serverUrl, token, providerType, lastEmailShare, shareVersion) : authUser?.email ? sendEmailBackupShare(serverUrl, token, providerType, lastEmailShare, authUser.email, shareVersion) : Promise.resolve();
17139
+ const resend = hasRecoveryEmail ? sendEmailShareToRecoveryEmail(serverUrl, token, providerType, lastEmailShare, shareVersion, tenantId) : authUser?.email ? sendEmailBackupShare(serverUrl, token, providerType, lastEmailShare, authUser.email, shareVersion, tenantId) : Promise.resolve();
16977
17140
  resend.catch((e) => console.warn("Email backup share re-send failed (non-fatal):", e));
16978
17141
  lastEmailShare = void 0;
16979
17142
  }
@@ -16992,7 +17155,7 @@ function createSSSStrategy(config) {
16992
17155
  },
16993
17156
  credentialId: credential.credentialId,
16994
17157
  shareVersion
16995
- }, vpJwt);
17158
+ }, vpJwt, tenantId);
16996
17159
  return { method: "passkey", credentialId: credential.credentialId };
16997
17160
  }
16998
17161
  case "phrase": {
@@ -17000,7 +17163,7 @@ function createSSSStrategy(config) {
17000
17163
  await postRecoveryMethod(serverUrl, token, providerType, {
17001
17164
  type: "phrase",
17002
17165
  shareVersion
17003
- }, vpJwt);
17166
+ }, vpJwt, tenantId);
17004
17167
  return { method: "phrase", phrase };
17005
17168
  }
17006
17169
  case "backup": {
@@ -17020,7 +17183,7 @@ function createSSSStrategy(config) {
17020
17183
  await postRecoveryMethod(serverUrl, token, providerType, {
17021
17184
  type: "backup",
17022
17185
  shareVersion
17023
- }, vpJwt);
17186
+ }, vpJwt, tenantId);
17024
17187
  return { method: "backup", backupFile };
17025
17188
  }
17026
17189
  case "email": {
@@ -17029,12 +17192,13 @@ function createSSSStrategy(config) {
17029
17192
  token,
17030
17193
  providerType,
17031
17194
  shares.emailShare,
17032
- shareVersion
17195
+ shareVersion,
17196
+ tenantId
17033
17197
  );
17034
17198
  await postRecoveryMethod(serverUrl, token, providerType, {
17035
17199
  type: "email",
17036
17200
  shareVersion
17037
- }, vpJwt);
17201
+ }, vpJwt, tenantId);
17038
17202
  hasRecoveryEmail = true;
17039
17203
  return { method: "email" };
17040
17204
  }
@@ -17042,7 +17206,7 @@ function createSSSStrategy(config) {
17042
17206
  },
17043
17207
  async getAvailableRecoveryMethods(token, providerType) {
17044
17208
  try {
17045
- const serverData = await fetchAuthShareRaw(serverUrl, token, providerType);
17209
+ const serverData = await fetchAuthShareRaw(serverUrl, token, providerType, void 0, tenantId);
17046
17210
  const methods = serverData?.recoveryMethods || [];
17047
17211
  if (enableEmailBackupShare && !methods.some((m) => m.type === "email")) {
17048
17212
  methods.push({ type: "email", createdAt: /* @__PURE__ */ new Date() });
@@ -17057,7 +17221,7 @@ function createSSSStrategy(config) {
17057
17221
  async upgradeContactMethod(token, providerType, previousPhone, email, code) {
17058
17222
  const res = await fetch(`${serverUrl}/keys/upgrade-contact-method`, {
17059
17223
  method: "POST",
17060
- headers: { "Content-Type": "application/json" },
17224
+ headers: buildHeaders(token, void 0, tenantId),
17061
17225
  body: JSON.stringify({
17062
17226
  authToken: token,
17063
17227
  providerType,
@@ -17087,14 +17251,15 @@ function createSSSStrategy(config) {
17087
17251
  token,
17088
17252
  providerType,
17089
17253
  lastEmailShare,
17090
- lastShareVersion
17254
+ lastShareVersion,
17255
+ tenantId
17091
17256
  );
17092
17257
  } else {
17093
17258
  if (!email) {
17094
17259
  console.warn("Cannot send email backup share: no email address");
17095
17260
  return;
17096
17261
  }
17097
- await sendEmailBackupShare(serverUrl, token, providerType, lastEmailShare, email, lastShareVersion);
17262
+ await sendEmailBackupShare(serverUrl, token, providerType, lastEmailShare, email, lastShareVersion, tenantId);
17098
17263
  }
17099
17264
  lastEmailShare = void 0;
17100
17265
  lastShareVersion = void 0;