@learncard/sss-key-manager 0.1.4 → 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.
- package/dist/sss-key-manager.cjs.development.js +204 -41
- package/dist/sss-key-manager.cjs.development.js.map +2 -2
- package/dist/sss-key-manager.cjs.production.min.js +9 -9
- package/dist/sss-key-manager.cjs.production.min.js.map +3 -3
- package/dist/sss-key-manager.d.ts +6 -0
- package/dist/sss-key-manager.esm.js +204 -41
- package/dist/sss-key-manager.esm.js.map +2 -2
- package/package.json +2 -2
|
@@ -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:
|
|
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:
|
|
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:
|
|
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;
|