@learncard/sss-key-manager 0.1.3 → 0.1.6

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"),
@@ -14406,14 +14462,28 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14406
14462
  ),
14407
14463
  templateData: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
14408
14464
  integrationId: external_exports.string().optional().describe("Integration ID for activity tracking")
14409
- }).refine((data) => data.templateUri || data.template, {
14410
- message: "Either templateUri or template creation data must be provided.",
14465
+ }).refine((data) => data.templateUri || data.template || data.signedCredential, {
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,84 @@ 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
15376
+ })
15377
+ ).describe("Recommended follow-up activities or learning modules"),
15378
+ reflections: external_exports.array(
15379
+ external_exports.object({
15380
+ title: external_exports.string().describe("Title of the reflection"),
15381
+ description: external_exports.string().describe("Detailed description of what this reflection involves")
15382
+ })
15383
+ ).describe("Reflections on the learning experience")
15384
+ });
15385
+ var SendAiSessionCredentialEventValidator = external_exports.object({
15386
+ type: external_exports.literal("send-ai-session-credential"),
15387
+ sessionTitle: external_exports.string(),
15388
+ summaryData: SummaryCredentialDataValidator,
15389
+ metadata: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
15390
+ });
15391
+ var SendNotificationEventValidator = external_exports.object({
15392
+ type: external_exports.literal("send-notification"),
15393
+ title: external_exports.string().optional(),
15394
+ body: external_exports.string().optional(),
15395
+ actionPath: external_exports.string().optional(),
15396
+ category: external_exports.string().optional(),
15397
+ priority: external_exports.enum(["normal", "high"]).optional()
15398
+ });
15399
+ var counterKeyValidator = external_exports.string().min(1).max(64).regex(/^[a-zA-Z0-9_-]+$/, "Key must be alphanumeric with _ or -");
15400
+ var IncrementCounterEventValidator = external_exports.object({
15401
+ type: external_exports.literal("increment-counter"),
15402
+ key: counterKeyValidator,
15403
+ amount: external_exports.number().int().finite()
15404
+ });
15405
+ var GetCounterEventValidator = external_exports.object({
15406
+ type: external_exports.literal("get-counter"),
15407
+ key: counterKeyValidator
15408
+ });
15409
+ var GetCountersEventValidator = external_exports.object({
15410
+ type: external_exports.literal("get-counters"),
15411
+ keys: external_exports.array(counterKeyValidator).min(1).max(50).optional()
15412
+ });
15264
15413
  var AppEventValidator = external_exports.discriminatedUnion("type", [
15265
15414
  SendCredentialEventValidator,
15266
15415
  CheckCredentialEventValidator,
15267
15416
  CheckIssuanceStatusEventValidator,
15268
- GetTemplateRecipientsEventValidator
15417
+ GetTemplateRecipientsEventValidator,
15418
+ RequestLearnerContextEventValidator,
15419
+ SendAiSessionCredentialEventValidator,
15420
+ SendNotificationEventValidator,
15421
+ IncrementCounterEventValidator,
15422
+ GetCounterEventValidator,
15423
+ GetCountersEventValidator
15269
15424
  ]);
15270
15425
  var AppEventInputValidator = external_exports.object({
15271
15426
  listingId: external_exports.string(),
@@ -15296,7 +15451,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15296
15451
  activityId: external_exports.string(),
15297
15452
  eventType: CredentialActivityEventTypeValidator,
15298
15453
  timestamp: external_exports.string(),
15299
- actorProfileId: external_exports.string(),
15454
+ actorProfileId: external_exports.string().optional(),
15300
15455
  recipientType: CredentialActivityRecipientTypeValidator,
15301
15456
  recipientIdentifier: external_exports.string(),
15302
15457
  boostUri: external_exports.string().optional(),
@@ -16637,14 +16792,15 @@ var defaultStorage = {
16637
16792
  storeShareVersion,
16638
16793
  getShareVersion
16639
16794
  };
16640
- var buildHeaders = /* @__PURE__ */ __name((token, didAuthVp) => ({
16795
+ var buildHeaders = /* @__PURE__ */ __name((token, didAuthVp, tenantId) => ({
16641
16796
  "Content-Type": "application/json",
16642
- ...didAuthVp ? { Authorization: `Bearer ${didAuthVp}` } : {}
16797
+ ...didAuthVp ? { Authorization: `Bearer ${didAuthVp}` } : {},
16798
+ ...tenantId ? { "X-Tenant-Id": tenantId } : {}
16643
16799
  }), "buildHeaders");
16644
- var fetchAuthShareRaw = /* @__PURE__ */ __name(async (serverUrl, token, providerType, shareVersion) => {
16800
+ var fetchAuthShareRaw = /* @__PURE__ */ __name(async (serverUrl, token, providerType, shareVersion, tenantId) => {
16645
16801
  const response = await fetch(`${serverUrl}/keys/auth-share`, {
16646
16802
  method: "POST",
16647
- headers: buildHeaders(token),
16803
+ headers: buildHeaders(token, void 0, tenantId),
16648
16804
  body: JSON.stringify({
16649
16805
  authToken: token,
16650
16806
  providerType,
@@ -16657,10 +16813,10 @@ var fetchAuthShareRaw = /* @__PURE__ */ __name(async (serverUrl, token, provider
16657
16813
  }
16658
16814
  return response.json();
16659
16815
  }, "fetchAuthShareRaw");
16660
- var putAuthShare = /* @__PURE__ */ __name(async (serverUrl, token, providerType, authShare, primaryDid, didAuthVp) => {
16816
+ var putAuthShare = /* @__PURE__ */ __name(async (serverUrl, token, providerType, authShare, primaryDid, didAuthVp, tenantId) => {
16661
16817
  const response = await fetch(`${serverUrl}/keys/auth-share`, {
16662
16818
  method: "PUT",
16663
- headers: buildHeaders(token, didAuthVp),
16819
+ headers: buildHeaders(token, didAuthVp, tenantId),
16664
16820
  body: JSON.stringify({
16665
16821
  authToken: token,
16666
16822
  providerType,
@@ -16675,24 +16831,24 @@ var putAuthShare = /* @__PURE__ */ __name(async (serverUrl, token, providerType,
16675
16831
  const data = await response.json();
16676
16832
  return { shareVersion: data.shareVersion ?? 1 };
16677
16833
  }, "putAuthShare");
16678
- var fetchRecoveryShare = /* @__PURE__ */ __name(async (serverUrl, token, providerType, type, credentialId) => {
16834
+ var fetchRecoveryShare = /* @__PURE__ */ __name(async (serverUrl, token, providerType, type, credentialId, tenantId) => {
16679
16835
  const params = new URLSearchParams({ type, providerType, authToken: token });
16680
16836
  if (credentialId) {
16681
16837
  params.set("credentialId", credentialId);
16682
16838
  }
16683
16839
  const response = await fetch(`${serverUrl}/keys/recovery?${params}`, {
16684
16840
  method: "GET",
16685
- headers: { "Content-Type": "application/json" }
16841
+ headers: buildHeaders(token, void 0, tenantId)
16686
16842
  });
16687
16843
  if (!response.ok) {
16688
16844
  throw new Error(`No ${type} recovery share found`);
16689
16845
  }
16690
16846
  return response.json();
16691
16847
  }, "fetchRecoveryShare");
16692
- var postRecoveryMethod = /* @__PURE__ */ __name(async (serverUrl, token, providerType, body, didAuthVp) => {
16848
+ var postRecoveryMethod = /* @__PURE__ */ __name(async (serverUrl, token, providerType, body, didAuthVp, tenantId) => {
16693
16849
  const response = await fetch(`${serverUrl}/keys/recovery`, {
16694
16850
  method: "POST",
16695
- headers: buildHeaders(token, didAuthVp),
16851
+ headers: buildHeaders(token, didAuthVp, tenantId),
16696
16852
  body: JSON.stringify({ authToken: token, providerType, ...body })
16697
16853
  });
16698
16854
  if (!response.ok) {
@@ -16711,12 +16867,12 @@ var parseVersionedEmailShare = /* @__PURE__ */ __name((input) => {
16711
16867
  }
16712
16868
  return { share: input, version: void 0 };
16713
16869
  }, "parseVersionedEmailShare");
16714
- var sendEmailBackupShare = /* @__PURE__ */ __name(async (serverUrl, token, providerType, emailShare, email, shareVersion) => {
16870
+ var sendEmailBackupShare = /* @__PURE__ */ __name(async (serverUrl, token, providerType, emailShare, email, shareVersion, tenantId) => {
16715
16871
  try {
16716
16872
  const payload = shareVersion != null ? formatVersionedEmailShare(emailShare, shareVersion) : emailShare;
16717
16873
  const response = await fetch(`${serverUrl}/keys/email-backup`, {
16718
16874
  method: "POST",
16719
- headers: buildHeaders(token),
16875
+ headers: buildHeaders(token, void 0, tenantId),
16720
16876
  body: JSON.stringify({ authToken: token, providerType, emailShare: payload, email })
16721
16877
  });
16722
16878
  if (!response.ok) {
@@ -16726,11 +16882,11 @@ var sendEmailBackupShare = /* @__PURE__ */ __name(async (serverUrl, token, provi
16726
16882
  console.warn("Email backup share delivery failed:", e);
16727
16883
  }
16728
16884
  }, "sendEmailBackupShare");
16729
- var sendEmailShareToRecoveryEmail = /* @__PURE__ */ __name(async (serverUrl, token, providerType, emailShare, shareVersion) => {
16885
+ var sendEmailShareToRecoveryEmail = /* @__PURE__ */ __name(async (serverUrl, token, providerType, emailShare, shareVersion, tenantId) => {
16730
16886
  const payload = shareVersion != null ? formatVersionedEmailShare(emailShare, shareVersion) : emailShare;
16731
16887
  const response = await fetch(`${serverUrl}/keys/email-backup`, {
16732
16888
  method: "POST",
16733
- headers: buildHeaders(token),
16889
+ headers: buildHeaders(token, void 0, tenantId),
16734
16890
  body: JSON.stringify({
16735
16891
  authToken: token,
16736
16892
  providerType,
@@ -16743,7 +16899,7 @@ var sendEmailShareToRecoveryEmail = /* @__PURE__ */ __name(async (serverUrl, tok
16743
16899
  }
16744
16900
  }, "sendEmailShareToRecoveryEmail");
16745
16901
  function createSSSStrategy(config) {
16746
- const { serverUrl, enableEmailBackupShare = false } = config;
16902
+ const { serverUrl, enableEmailBackupShare = false, tenantId } = config;
16747
16903
  const storage = config.storage || defaultStorage;
16748
16904
  let activeStorageId;
16749
16905
  let lastEmailShare;
@@ -16816,7 +16972,8 @@ function createSSSStrategy(config) {
16816
16972
  serverUrl,
16817
16973
  token,
16818
16974
  providerType,
16819
- localVersion ?? void 0
16975
+ localVersion ?? void 0,
16976
+ tenantId
16820
16977
  );
16821
16978
  if (!data) {
16822
16979
  hasRecoveryEmail = false;
@@ -16848,14 +17005,14 @@ function createSSSStrategy(config) {
16848
17005
  };
16849
17006
  },
16850
17007
  async storeAuthShare(token, providerType, authShare, primaryDid, didAuthVp) {
16851
- const { shareVersion } = await putAuthShare(serverUrl, token, providerType, authShare, primaryDid, didAuthVp);
17008
+ const { shareVersion } = await putAuthShare(serverUrl, token, providerType, authShare, primaryDid, didAuthVp, tenantId);
16852
17009
  await storage.storeShareVersion(shareVersion, activeStorageId);
16853
17010
  lastShareVersion = shareVersion;
16854
17011
  },
16855
17012
  async markMigrated(token, providerType, didAuthVp) {
16856
17013
  const response = await fetch(`${serverUrl}/keys/migrate`, {
16857
17014
  method: "POST",
16858
- headers: buildHeaders(token, didAuthVp),
17015
+ headers: buildHeaders(token, didAuthVp, tenantId),
16859
17016
  body: JSON.stringify({ authToken: token, providerType })
16860
17017
  });
16861
17018
  if (!response.ok) {
@@ -16874,7 +17031,8 @@ function createSSSStrategy(config) {
16874
17031
  token,
16875
17032
  providerType,
16876
17033
  "passkey",
16877
- input.credentialId
17034
+ input.credentialId,
17035
+ tenantId
16878
17036
  );
16879
17037
  if (!result?.encryptedShare) {
16880
17038
  throw new Error("No passkey recovery share found");
@@ -16898,7 +17056,9 @@ function createSSSStrategy(config) {
16898
17056
  serverUrl,
16899
17057
  token,
16900
17058
  providerType,
16901
- "phrase"
17059
+ "phrase",
17060
+ void 0,
17061
+ tenantId
16902
17062
  );
16903
17063
  recoveryShareVersion = phraseRecord?.shareVersion;
16904
17064
  } catch {
@@ -16931,7 +17091,8 @@ function createSSSStrategy(config) {
16931
17091
  serverUrl,
16932
17092
  token,
16933
17093
  providerType,
16934
- recoveryShareVersion
17094
+ recoveryShareVersion,
17095
+ tenantId
16935
17096
  );
16936
17097
  if (!serverData?.authShare) {
16937
17098
  throw new Error("No auth share found on server");
@@ -16968,12 +17129,12 @@ function createSSSStrategy(config) {
16968
17129
  const { shares } = await splitAndVerify(privateKey);
16969
17130
  lastEmailShare = shares.emailShare;
16970
17131
  await storage.storeDeviceShare(shares.deviceShare, activeStorageId);
16971
- const serverData = await fetchAuthShareRaw(serverUrl, token, providerType);
17132
+ const serverData = await fetchAuthShareRaw(serverUrl, token, providerType, void 0, tenantId);
16972
17133
  const primaryDid = serverData?.primaryDid || "";
16973
- const { shareVersion } = await putAuthShare(serverUrl, token, providerType, shares.authShare, primaryDid, vpJwt);
17134
+ const { shareVersion } = await putAuthShare(serverUrl, token, providerType, shares.authShare, primaryDid, vpJwt, tenantId);
16974
17135
  await storage.storeShareVersion(shareVersion, activeStorageId);
16975
17136
  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();
17137
+ const resend = hasRecoveryEmail ? sendEmailShareToRecoveryEmail(serverUrl, token, providerType, lastEmailShare, shareVersion, tenantId) : authUser?.email ? sendEmailBackupShare(serverUrl, token, providerType, lastEmailShare, authUser.email, shareVersion, tenantId) : Promise.resolve();
16977
17138
  resend.catch((e) => console.warn("Email backup share re-send failed (non-fatal):", e));
16978
17139
  lastEmailShare = void 0;
16979
17140
  }
@@ -16992,7 +17153,7 @@ function createSSSStrategy(config) {
16992
17153
  },
16993
17154
  credentialId: credential.credentialId,
16994
17155
  shareVersion
16995
- }, vpJwt);
17156
+ }, vpJwt, tenantId);
16996
17157
  return { method: "passkey", credentialId: credential.credentialId };
16997
17158
  }
16998
17159
  case "phrase": {
@@ -17000,7 +17161,7 @@ function createSSSStrategy(config) {
17000
17161
  await postRecoveryMethod(serverUrl, token, providerType, {
17001
17162
  type: "phrase",
17002
17163
  shareVersion
17003
- }, vpJwt);
17164
+ }, vpJwt, tenantId);
17004
17165
  return { method: "phrase", phrase };
17005
17166
  }
17006
17167
  case "backup": {
@@ -17020,7 +17181,7 @@ function createSSSStrategy(config) {
17020
17181
  await postRecoveryMethod(serverUrl, token, providerType, {
17021
17182
  type: "backup",
17022
17183
  shareVersion
17023
- }, vpJwt);
17184
+ }, vpJwt, tenantId);
17024
17185
  return { method: "backup", backupFile };
17025
17186
  }
17026
17187
  case "email": {
@@ -17029,12 +17190,13 @@ function createSSSStrategy(config) {
17029
17190
  token,
17030
17191
  providerType,
17031
17192
  shares.emailShare,
17032
- shareVersion
17193
+ shareVersion,
17194
+ tenantId
17033
17195
  );
17034
17196
  await postRecoveryMethod(serverUrl, token, providerType, {
17035
17197
  type: "email",
17036
17198
  shareVersion
17037
- }, vpJwt);
17199
+ }, vpJwt, tenantId);
17038
17200
  hasRecoveryEmail = true;
17039
17201
  return { method: "email" };
17040
17202
  }
@@ -17042,7 +17204,7 @@ function createSSSStrategy(config) {
17042
17204
  },
17043
17205
  async getAvailableRecoveryMethods(token, providerType) {
17044
17206
  try {
17045
- const serverData = await fetchAuthShareRaw(serverUrl, token, providerType);
17207
+ const serverData = await fetchAuthShareRaw(serverUrl, token, providerType, void 0, tenantId);
17046
17208
  const methods = serverData?.recoveryMethods || [];
17047
17209
  if (enableEmailBackupShare && !methods.some((m) => m.type === "email")) {
17048
17210
  methods.push({ type: "email", createdAt: /* @__PURE__ */ new Date() });
@@ -17057,7 +17219,7 @@ function createSSSStrategy(config) {
17057
17219
  async upgradeContactMethod(token, providerType, previousPhone, email, code) {
17058
17220
  const res = await fetch(`${serverUrl}/keys/upgrade-contact-method`, {
17059
17221
  method: "POST",
17060
- headers: { "Content-Type": "application/json" },
17222
+ headers: buildHeaders(token, void 0, tenantId),
17061
17223
  body: JSON.stringify({
17062
17224
  authToken: token,
17063
17225
  providerType,
@@ -17087,14 +17249,15 @@ function createSSSStrategy(config) {
17087
17249
  token,
17088
17250
  providerType,
17089
17251
  lastEmailShare,
17090
- lastShareVersion
17252
+ lastShareVersion,
17253
+ tenantId
17091
17254
  );
17092
17255
  } else {
17093
17256
  if (!email) {
17094
17257
  console.warn("Cannot send email backup share: no email address");
17095
17258
  return;
17096
17259
  }
17097
- await sendEmailBackupShare(serverUrl, token, providerType, lastEmailShare, email, lastShareVersion);
17260
+ await sendEmailBackupShare(serverUrl, token, providerType, lastEmailShare, email, lastShareVersion, tenantId);
17098
17261
  }
17099
17262
  lastEmailShare = void 0;
17100
17263
  lastShareVersion = void 0;