@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.
- package/dist/sss-key-manager.cjs.development.js +206 -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 +206 -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,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:
|
|
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:
|
|
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;
|