@learncard/credential-library 2.0.5 → 2.1.1
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/README.md +30 -1
- package/SOURCES.md +63 -0
- package/dist/credential-library.cjs.development.js +1577 -32
- package/dist/credential-library.cjs.development.js.map +4 -4
- package/dist/credential-library.cjs.production.min.js +3 -3
- package/dist/credential-library.cjs.production.min.js.map +4 -4
- package/dist/credential-library.esm.js +1563 -18
- package/dist/credential-library.esm.js.map +4 -4
- package/dist/fixtures/clr/military-comprehensive-record.d.ts +4 -0
- package/dist/fixtures/clr/military-comprehensive-record.d.ts.map +1 -0
- package/dist/fixtures/clr/mixed-role-portfolio.d.ts +3 -0
- package/dist/fixtures/clr/mixed-role-portfolio.d.ts.map +1 -0
- package/dist/fixtures/custom/course-enrollment.d.ts +3 -0
- package/dist/fixtures/custom/course-enrollment.d.ts.map +1 -0
- package/dist/fixtures/custom/exam-accommodation.d.ts +3 -0
- package/dist/fixtures/custom/exam-accommodation.d.ts.map +1 -0
- package/dist/fixtures/index.d.ts +16 -1
- package/dist/fixtures/index.d.ts.map +1 -1
- package/dist/fixtures/obv3/food-allergen-facilitator.d.ts +3 -0
- package/dist/fixtures/obv3/food-allergen-facilitator.d.ts.map +1 -0
- package/dist/fixtures/obv3/food-allergen-practice-fr.d.ts +3 -0
- package/dist/fixtures/obv3/food-allergen-practice-fr.d.ts.map +1 -0
- package/dist/fixtures/obv3/food-allergen-practice.d.ts +3 -0
- package/dist/fixtures/obv3/food-allergen-practice.d.ts.map +1 -0
- package/dist/fixtures/obv3/phishing-transfer.d.ts +3 -0
- package/dist/fixtures/obv3/phishing-transfer.d.ts.map +1 -0
- package/dist/fixtures/obv3/qualification-apprenticeship.d.ts +3 -0
- package/dist/fixtures/obv3/qualification-apprenticeship.d.ts.map +1 -0
- package/dist/fixtures/obv3/qualification-badge-override.d.ts +3 -0
- package/dist/fixtures/obv3/qualification-badge-override.d.ts.map +1 -0
- package/dist/fixtures/obv3/qualification-certification.d.ts +3 -0
- package/dist/fixtures/obv3/qualification-certification.d.ts.map +1 -0
- package/dist/fixtures/obv3/qualification-expired.d.ts +3 -0
- package/dist/fixtures/obv3/qualification-expired.d.ts.map +1 -0
- package/dist/fixtures/obv3/qualification-journeyman.d.ts +3 -0
- package/dist/fixtures/obv3/qualification-journeyman.d.ts.map +1 -0
- package/dist/fixtures/obv3/qualification-license.d.ts +3 -0
- package/dist/fixtures/obv3/qualification-license.d.ts.map +1 -0
- package/dist/fixtures/obv3/qualification-master.d.ts +3 -0
- package/dist/fixtures/obv3/qualification-master.d.ts.map +1 -0
- package/package.json +7 -6
- package/src/__tests__/curated-examples.test.ts +248 -0
- package/src/__tests__/issuance.test.ts +35 -0
- package/src/fixtures/clr/military-comprehensive-record.ts +155 -0
- package/src/fixtures/clr/mixed-role-portfolio.ts +490 -0
- package/src/fixtures/custom/course-enrollment.ts +56 -0
- package/src/fixtures/custom/exam-accommodation.ts +56 -0
- package/src/fixtures/index.ts +49 -0
- package/src/fixtures/obv3/food-allergen-facilitator.ts +108 -0
- package/src/fixtures/obv3/food-allergen-practice-fr.ts +107 -0
- package/src/fixtures/obv3/food-allergen-practice.ts +105 -0
- package/src/fixtures/obv3/phishing-transfer.ts +163 -0
- package/src/fixtures/obv3/qualification-apprenticeship.ts +58 -0
- package/src/fixtures/obv3/qualification-badge-override.ts +64 -0
- package/src/fixtures/obv3/qualification-certification.ts +59 -0
- package/src/fixtures/obv3/qualification-expired.ts +59 -0
- package/src/fixtures/obv3/qualification-journeyman.ts +58 -0
- package/src/fixtures/obv3/qualification-license.ts +58 -0
- package/src/fixtures/obv3/qualification-master.ts +58 -0
|
@@ -41,9 +41,11 @@ __export(index_exports, {
|
|
|
41
41
|
clrEmploymentRecord: () => clrEmploymentRecord,
|
|
42
42
|
clrGreatPlainsFull: () => clrGreatPlainsFull,
|
|
43
43
|
clrLicensingRegulatoryRecord: () => clrLicensingRegulatoryRecord,
|
|
44
|
+
clrMilitaryComprehensiveRecord: () => clrMilitaryComprehensiveRecord,
|
|
44
45
|
clrMilitaryTrainingRecord: () => clrMilitaryTrainingRecord,
|
|
45
46
|
clrMinimal: () => clrMinimal,
|
|
46
47
|
clrMixedCareerRecord: () => clrMixedCareerRecord,
|
|
48
|
+
clrMixedRolePortfolio: () => clrMixedRolePortfolio,
|
|
47
49
|
clrMultiAchievement: () => clrMultiAchievement,
|
|
48
50
|
clrNdStudentTranscript: () => clrNdStudentTranscript,
|
|
49
51
|
clrProfessionalOrganizationRecord: () => clrProfessionalOrganizationRecord,
|
|
@@ -52,6 +54,8 @@ __export(index_exports, {
|
|
|
52
54
|
clrTrainingProviderRecord: () => clrTrainingProviderRecord,
|
|
53
55
|
clrUniversityTranscript: () => clrUniversityTranscript,
|
|
54
56
|
clrWestbridgeFull: () => clrWestbridgeFull,
|
|
57
|
+
customCourseEnrollment: () => customCourseEnrollment,
|
|
58
|
+
customExamAccommodation: () => customExamAccommodation,
|
|
55
59
|
findFixture: () => findFixture,
|
|
56
60
|
getAllFixtures: () => getAllFixtures,
|
|
57
61
|
getBundle: () => getBundle,
|
|
@@ -70,13 +74,24 @@ __export(index_exports, {
|
|
|
70
74
|
materializeSdJwtVcFixture: () => materializeSdJwtVcFixture,
|
|
71
75
|
obv3CourseCompletion: () => obv3CourseCompletion,
|
|
72
76
|
obv3EndorsementCredential: () => obv3EndorsementCredential,
|
|
77
|
+
obv3FoodAllergenFacilitator: () => obv3FoodAllergenFacilitator,
|
|
78
|
+
obv3FoodAllergenPractice: () => obv3FoodAllergenPractice,
|
|
79
|
+
obv3FoodAllergenPracticeFr: () => obv3FoodAllergenPracticeFr,
|
|
73
80
|
obv3FullBadge: () => obv3FullBadge,
|
|
74
81
|
obv3K12Diploma: () => obv3K12Diploma,
|
|
75
82
|
obv3MicroCredential: () => obv3MicroCredential,
|
|
76
83
|
obv3MinimalBadge: () => obv3MinimalBadge,
|
|
77
84
|
obv3OneedtechFull: () => obv3OneedtechFull,
|
|
85
|
+
obv3PhishingTransfer: () => obv3PhishingTransfer,
|
|
78
86
|
obv3PlugfestJff2: () => obv3PlugfestJff2,
|
|
79
87
|
obv3ProfessionalCert: () => obv3ProfessionalCert,
|
|
88
|
+
obv3QualificationApprenticeship: () => obv3QualificationApprenticeship,
|
|
89
|
+
obv3QualificationBadgeOverride: () => obv3QualificationBadgeOverride,
|
|
90
|
+
obv3QualificationCertification: () => obv3QualificationCertification,
|
|
91
|
+
obv3QualificationExpired: () => obv3QualificationExpired,
|
|
92
|
+
obv3QualificationJourneyman: () => obv3QualificationJourneyman,
|
|
93
|
+
obv3QualificationLicense: () => obv3QualificationLicense,
|
|
94
|
+
obv3QualificationMaster: () => obv3QualificationMaster,
|
|
80
95
|
obv3RubricAlignedBadge: () => obv3RubricAlignedBadge,
|
|
81
96
|
obv3StandaloneFullCourse: () => obv3StandaloneFullCourse,
|
|
82
97
|
obv3StudentAdditionalCredentials: () => obv3StudentAdditionalCredentials,
|
|
@@ -5357,8 +5372,411 @@ var obv3RubricAlignedBadge = {
|
|
|
5357
5372
|
}
|
|
5358
5373
|
};
|
|
5359
5374
|
|
|
5360
|
-
// src/fixtures/
|
|
5375
|
+
// src/fixtures/obv3/qualification-license.ts
|
|
5361
5376
|
var import_types16 = require("@learncard/types");
|
|
5377
|
+
var obv3QualificationLicense = {
|
|
5378
|
+
"id": "obv3/qualification-license",
|
|
5379
|
+
"name": "Professional Electrical License",
|
|
5380
|
+
"description": "LC-2111 License classification and default certificate test.",
|
|
5381
|
+
"spec": "obv3",
|
|
5382
|
+
"profile": "license",
|
|
5383
|
+
"features": ["expiration", "image"],
|
|
5384
|
+
"source": "synthetic",
|
|
5385
|
+
"signed": false,
|
|
5386
|
+
"validity": "valid",
|
|
5387
|
+
validator: import_types16.UnsignedAchievementCredentialValidator,
|
|
5388
|
+
"tags": ["qualifications", "lc-2111", "license"],
|
|
5389
|
+
"credential": {
|
|
5390
|
+
"@context": [
|
|
5391
|
+
"https://www.w3.org/ns/credentials/v2",
|
|
5392
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
|
|
5393
|
+
],
|
|
5394
|
+
"id": "urn:uuid:21110000-0000-4000-8000-000000000001",
|
|
5395
|
+
"type": ["VerifiableCredential", "OpenBadgeCredential"],
|
|
5396
|
+
"name": "Professional Electrical License",
|
|
5397
|
+
"description": "Authorizes supervised electrical installation and maintenance.",
|
|
5398
|
+
"image": {
|
|
5399
|
+
id: "https://openmoji.org/data/color/svg/1F50C.svg",
|
|
5400
|
+
type: "Image",
|
|
5401
|
+
caption: "Electrical license illustration \u2014 OpenMoji (CC BY-SA 4.0)"
|
|
5402
|
+
},
|
|
5403
|
+
"issuer": {
|
|
5404
|
+
"id": "did:example:qualification-issuer",
|
|
5405
|
+
"type": ["Profile"],
|
|
5406
|
+
"name": "Example Professional Training Academy"
|
|
5407
|
+
},
|
|
5408
|
+
"validFrom": "2023-01-01T00:00:00Z",
|
|
5409
|
+
"validUntil": "2037-01-01T00:00:00Z",
|
|
5410
|
+
"credentialSubject": {
|
|
5411
|
+
"id": "did:example:qualification-holder",
|
|
5412
|
+
"type": ["AchievementSubject"],
|
|
5413
|
+
"achievement": {
|
|
5414
|
+
"id": "https://example.org/qualifications/license",
|
|
5415
|
+
"type": ["Achievement"],
|
|
5416
|
+
"achievementType": "License",
|
|
5417
|
+
"name": "Professional Electrical License",
|
|
5418
|
+
"description": "Authorizes supervised electrical installation and maintenance.",
|
|
5419
|
+
"image": {
|
|
5420
|
+
id: "https://openmoji.org/data/color/svg/1F50C.svg",
|
|
5421
|
+
type: "Image",
|
|
5422
|
+
caption: "Electrical license illustration \u2014 OpenMoji (CC BY-SA 4.0)"
|
|
5423
|
+
},
|
|
5424
|
+
"criteria": {
|
|
5425
|
+
"narrative": "Complete the required training and pass the practical assessment."
|
|
5426
|
+
}
|
|
5427
|
+
}
|
|
5428
|
+
}
|
|
5429
|
+
}
|
|
5430
|
+
};
|
|
5431
|
+
|
|
5432
|
+
// src/fixtures/obv3/qualification-certification.ts
|
|
5433
|
+
var import_types17 = require("@learncard/types");
|
|
5434
|
+
var obv3QualificationCertification = {
|
|
5435
|
+
"id": "obv3/qualification-certification",
|
|
5436
|
+
"name": "Project Management Certification",
|
|
5437
|
+
"description": "LC-2111 Certification classification and default certificate test.",
|
|
5438
|
+
"spec": "obv3",
|
|
5439
|
+
"profile": "certificate",
|
|
5440
|
+
"features": ["expiration", "image"],
|
|
5441
|
+
"source": "synthetic",
|
|
5442
|
+
"signed": false,
|
|
5443
|
+
"validity": "valid",
|
|
5444
|
+
validator: import_types17.UnsignedAchievementCredentialValidator,
|
|
5445
|
+
"tags": ["qualifications", "lc-2111", "certification"],
|
|
5446
|
+
"credential": {
|
|
5447
|
+
"@context": [
|
|
5448
|
+
"https://www.w3.org/ns/credentials/v2",
|
|
5449
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
|
|
5450
|
+
],
|
|
5451
|
+
"id": "urn:uuid:21110000-0000-4000-8000-000000000002",
|
|
5452
|
+
"type": ["VerifiableCredential", "OpenBadgeCredential"],
|
|
5453
|
+
"name": "Project Management Certification",
|
|
5454
|
+
"description": "Demonstrates competency in planning, delivering, and evaluating projects.",
|
|
5455
|
+
"image": {
|
|
5456
|
+
id: "https://openmoji.org/data/color/svg/1F4CB.svg",
|
|
5457
|
+
type: "Image",
|
|
5458
|
+
caption: "Project management illustration \u2014 OpenMoji (CC BY-SA 4.0)"
|
|
5459
|
+
},
|
|
5460
|
+
"issuer": {
|
|
5461
|
+
"id": "did:example:qualification-issuer",
|
|
5462
|
+
"type": ["Profile"],
|
|
5463
|
+
"name": "Example Professional Training Academy"
|
|
5464
|
+
},
|
|
5465
|
+
"validFrom": "2023-01-01T00:00:00Z",
|
|
5466
|
+
"validUntil": "2037-01-01T00:00:00Z",
|
|
5467
|
+
"credentialSubject": {
|
|
5468
|
+
"id": "did:example:qualification-holder",
|
|
5469
|
+
"type": ["AchievementSubject"],
|
|
5470
|
+
"achievement": {
|
|
5471
|
+
"id": "https://example.org/qualifications/certification",
|
|
5472
|
+
"type": ["Achievement"],
|
|
5473
|
+
"achievementType": "Certification",
|
|
5474
|
+
"name": "Project Management Certification",
|
|
5475
|
+
"description": "Demonstrates competency in planning, delivering, and evaluating projects.",
|
|
5476
|
+
"image": {
|
|
5477
|
+
id: "https://openmoji.org/data/color/svg/1F4CB.svg",
|
|
5478
|
+
type: "Image",
|
|
5479
|
+
caption: "Project management illustration \u2014 OpenMoji (CC BY-SA 4.0)"
|
|
5480
|
+
},
|
|
5481
|
+
"criteria": {
|
|
5482
|
+
"narrative": "Complete the required training and pass the practical assessment."
|
|
5483
|
+
}
|
|
5484
|
+
}
|
|
5485
|
+
}
|
|
5486
|
+
}
|
|
5487
|
+
};
|
|
5488
|
+
|
|
5489
|
+
// src/fixtures/obv3/qualification-apprenticeship.ts
|
|
5490
|
+
var import_types18 = require("@learncard/types");
|
|
5491
|
+
var obv3QualificationApprenticeship = {
|
|
5492
|
+
"id": "obv3/qualification-apprenticeship",
|
|
5493
|
+
"name": "Electrical Apprenticeship Certificate",
|
|
5494
|
+
"description": "LC-2111 ApprenticeshipCertificate classification and default certificate test.",
|
|
5495
|
+
"spec": "obv3",
|
|
5496
|
+
"profile": "certificate",
|
|
5497
|
+
"features": ["expiration", "image"],
|
|
5498
|
+
"source": "synthetic",
|
|
5499
|
+
"signed": false,
|
|
5500
|
+
"validity": "valid",
|
|
5501
|
+
validator: import_types18.UnsignedAchievementCredentialValidator,
|
|
5502
|
+
"tags": ["qualifications", "lc-2111", "apprenticeship"],
|
|
5503
|
+
"credential": {
|
|
5504
|
+
"@context": [
|
|
5505
|
+
"https://www.w3.org/ns/credentials/v2",
|
|
5506
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
|
|
5507
|
+
],
|
|
5508
|
+
"id": "urn:uuid:21110000-0000-4000-8000-000000000003",
|
|
5509
|
+
"type": ["VerifiableCredential", "OpenBadgeCredential"],
|
|
5510
|
+
"name": "Electrical Apprenticeship Certificate",
|
|
5511
|
+
"description": "Recognizes completion of supervised electrical training.",
|
|
5512
|
+
"image": {
|
|
5513
|
+
id: "https://openmoji.org/data/color/svg/1F6E0.svg",
|
|
5514
|
+
type: "Image",
|
|
5515
|
+
caption: "Apprenticeship tools illustration \u2014 OpenMoji (CC BY-SA 4.0)"
|
|
5516
|
+
},
|
|
5517
|
+
"issuer": {
|
|
5518
|
+
"id": "did:example:qualification-issuer",
|
|
5519
|
+
"type": ["Profile"],
|
|
5520
|
+
"name": "Example Professional Training Academy"
|
|
5521
|
+
},
|
|
5522
|
+
"validFrom": "2023-01-01T00:00:00Z",
|
|
5523
|
+
"validUntil": "2037-01-01T00:00:00Z",
|
|
5524
|
+
"credentialSubject": {
|
|
5525
|
+
"id": "did:example:qualification-holder",
|
|
5526
|
+
"type": ["AchievementSubject"],
|
|
5527
|
+
"achievement": {
|
|
5528
|
+
"id": "https://example.org/qualifications/apprenticeship",
|
|
5529
|
+
"type": ["Achievement"],
|
|
5530
|
+
"achievementType": "ApprenticeshipCertificate",
|
|
5531
|
+
"name": "Electrical Apprenticeship Certificate",
|
|
5532
|
+
"description": "Recognizes completion of supervised electrical training.",
|
|
5533
|
+
"image": {
|
|
5534
|
+
id: "https://openmoji.org/data/color/svg/1F6E0.svg",
|
|
5535
|
+
type: "Image",
|
|
5536
|
+
caption: "Apprenticeship tools illustration \u2014 OpenMoji (CC BY-SA 4.0)"
|
|
5537
|
+
},
|
|
5538
|
+
"criteria": {
|
|
5539
|
+
"narrative": "Complete the required training and pass the practical assessment."
|
|
5540
|
+
}
|
|
5541
|
+
}
|
|
5542
|
+
}
|
|
5543
|
+
}
|
|
5544
|
+
};
|
|
5545
|
+
|
|
5546
|
+
// src/fixtures/obv3/qualification-journeyman.ts
|
|
5547
|
+
var import_types19 = require("@learncard/types");
|
|
5548
|
+
var obv3QualificationJourneyman = {
|
|
5549
|
+
"id": "obv3/qualification-journeyman",
|
|
5550
|
+
"name": "Journeyman Electrician Certificate",
|
|
5551
|
+
"description": "LC-2111 JourneymanCertificate classification and default certificate test.",
|
|
5552
|
+
"spec": "obv3",
|
|
5553
|
+
"profile": "certificate",
|
|
5554
|
+
"features": ["expiration", "image"],
|
|
5555
|
+
"source": "synthetic",
|
|
5556
|
+
"signed": false,
|
|
5557
|
+
"validity": "valid",
|
|
5558
|
+
validator: import_types19.UnsignedAchievementCredentialValidator,
|
|
5559
|
+
"tags": ["qualifications", "lc-2111", "journeyman"],
|
|
5560
|
+
"credential": {
|
|
5561
|
+
"@context": [
|
|
5562
|
+
"https://www.w3.org/ns/credentials/v2",
|
|
5563
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
|
|
5564
|
+
],
|
|
5565
|
+
"id": "urn:uuid:21110000-0000-4000-8000-000000000004",
|
|
5566
|
+
"type": ["VerifiableCredential", "OpenBadgeCredential"],
|
|
5567
|
+
"name": "Journeyman Electrician Certificate",
|
|
5568
|
+
"description": "Recognizes qualification to work independently as an electrician.",
|
|
5569
|
+
"image": {
|
|
5570
|
+
id: "https://openmoji.org/data/color/svg/1F527.svg",
|
|
5571
|
+
type: "Image",
|
|
5572
|
+
caption: "Journeyman tools illustration \u2014 OpenMoji (CC BY-SA 4.0)"
|
|
5573
|
+
},
|
|
5574
|
+
"issuer": {
|
|
5575
|
+
"id": "did:example:qualification-issuer",
|
|
5576
|
+
"type": ["Profile"],
|
|
5577
|
+
"name": "Example Professional Training Academy"
|
|
5578
|
+
},
|
|
5579
|
+
"validFrom": "2023-01-01T00:00:00Z",
|
|
5580
|
+
"validUntil": "2037-01-01T00:00:00Z",
|
|
5581
|
+
"credentialSubject": {
|
|
5582
|
+
"id": "did:example:qualification-holder",
|
|
5583
|
+
"type": ["AchievementSubject"],
|
|
5584
|
+
"achievement": {
|
|
5585
|
+
"id": "https://example.org/qualifications/journeyman",
|
|
5586
|
+
"type": ["Achievement"],
|
|
5587
|
+
"achievementType": "JourneymanCertificate",
|
|
5588
|
+
"name": "Journeyman Electrician Certificate",
|
|
5589
|
+
"description": "Recognizes qualification to work independently as an electrician.",
|
|
5590
|
+
"image": {
|
|
5591
|
+
id: "https://openmoji.org/data/color/svg/1F527.svg",
|
|
5592
|
+
type: "Image",
|
|
5593
|
+
caption: "Journeyman tools illustration \u2014 OpenMoji (CC BY-SA 4.0)"
|
|
5594
|
+
},
|
|
5595
|
+
"criteria": {
|
|
5596
|
+
"narrative": "Complete the required training and pass the practical assessment."
|
|
5597
|
+
}
|
|
5598
|
+
}
|
|
5599
|
+
}
|
|
5600
|
+
}
|
|
5601
|
+
};
|
|
5602
|
+
|
|
5603
|
+
// src/fixtures/obv3/qualification-master.ts
|
|
5604
|
+
var import_types20 = require("@learncard/types");
|
|
5605
|
+
var obv3QualificationMaster = {
|
|
5606
|
+
"id": "obv3/qualification-master",
|
|
5607
|
+
"name": "Master Electrician Certificate",
|
|
5608
|
+
"description": "LC-2111 MasterCertificate classification and default certificate test.",
|
|
5609
|
+
"spec": "obv3",
|
|
5610
|
+
"profile": "certificate",
|
|
5611
|
+
"features": ["expiration", "image"],
|
|
5612
|
+
"source": "synthetic",
|
|
5613
|
+
"signed": false,
|
|
5614
|
+
"validity": "valid",
|
|
5615
|
+
validator: import_types20.UnsignedAchievementCredentialValidator,
|
|
5616
|
+
"tags": ["qualifications", "lc-2111", "master"],
|
|
5617
|
+
"credential": {
|
|
5618
|
+
"@context": [
|
|
5619
|
+
"https://www.w3.org/ns/credentials/v2",
|
|
5620
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
|
|
5621
|
+
],
|
|
5622
|
+
"id": "urn:uuid:21110000-0000-4000-8000-000000000005",
|
|
5623
|
+
"type": ["VerifiableCredential", "OpenBadgeCredential"],
|
|
5624
|
+
"name": "Master Electrician Certificate",
|
|
5625
|
+
"description": "Recognizes advanced electrical design and supervisory competence.",
|
|
5626
|
+
"image": {
|
|
5627
|
+
id: "https://openmoji.org/data/color/svg/1F3C6.svg",
|
|
5628
|
+
type: "Image",
|
|
5629
|
+
caption: "Master qualification illustration \u2014 OpenMoji (CC BY-SA 4.0)"
|
|
5630
|
+
},
|
|
5631
|
+
"issuer": {
|
|
5632
|
+
"id": "did:example:qualification-issuer",
|
|
5633
|
+
"type": ["Profile"],
|
|
5634
|
+
"name": "Example Professional Training Academy"
|
|
5635
|
+
},
|
|
5636
|
+
"validFrom": "2023-01-01T00:00:00Z",
|
|
5637
|
+
"validUntil": "2037-01-01T00:00:00Z",
|
|
5638
|
+
"credentialSubject": {
|
|
5639
|
+
"id": "did:example:qualification-holder",
|
|
5640
|
+
"type": ["AchievementSubject"],
|
|
5641
|
+
"achievement": {
|
|
5642
|
+
"id": "https://example.org/qualifications/master",
|
|
5643
|
+
"type": ["Achievement"],
|
|
5644
|
+
"achievementType": "MasterCertificate",
|
|
5645
|
+
"name": "Master Electrician Certificate",
|
|
5646
|
+
"description": "Recognizes advanced electrical design and supervisory competence.",
|
|
5647
|
+
"image": {
|
|
5648
|
+
id: "https://openmoji.org/data/color/svg/1F3C6.svg",
|
|
5649
|
+
type: "Image",
|
|
5650
|
+
caption: "Master qualification illustration \u2014 OpenMoji (CC BY-SA 4.0)"
|
|
5651
|
+
},
|
|
5652
|
+
"criteria": {
|
|
5653
|
+
"narrative": "Complete the required training and pass the practical assessment."
|
|
5654
|
+
}
|
|
5655
|
+
}
|
|
5656
|
+
}
|
|
5657
|
+
}
|
|
5658
|
+
};
|
|
5659
|
+
|
|
5660
|
+
// src/fixtures/obv3/qualification-expired.ts
|
|
5661
|
+
var import_types21 = require("@learncard/types");
|
|
5662
|
+
var obv3QualificationExpired = {
|
|
5663
|
+
"id": "obv3/qualification-expired",
|
|
5664
|
+
"name": "Expired Safety Certification",
|
|
5665
|
+
"description": "LC-2111 expiration test. Enable Keep fixture dates in the viewer to retain the past expiration.",
|
|
5666
|
+
"spec": "obv3",
|
|
5667
|
+
"profile": "certificate",
|
|
5668
|
+
"features": ["expiration", "image"],
|
|
5669
|
+
"source": "synthetic",
|
|
5670
|
+
"signed": false,
|
|
5671
|
+
"validity": "valid",
|
|
5672
|
+
validator: import_types21.UnsignedAchievementCredentialValidator,
|
|
5673
|
+
"tags": ["qualifications", "lc-2111", "expired"],
|
|
5674
|
+
"credential": {
|
|
5675
|
+
"@context": [
|
|
5676
|
+
"https://www.w3.org/ns/credentials/v2",
|
|
5677
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
|
|
5678
|
+
],
|
|
5679
|
+
"id": "urn:uuid:21110000-0000-4000-8000-000000000006",
|
|
5680
|
+
"type": ["VerifiableCredential", "OpenBadgeCredential"],
|
|
5681
|
+
"name": "Expired Safety Certification",
|
|
5682
|
+
"description": "An expired qualification that must remain visible and selectable.",
|
|
5683
|
+
"image": {
|
|
5684
|
+
id: "https://openmoji.org/data/color/svg/26A0.svg",
|
|
5685
|
+
type: "Image",
|
|
5686
|
+
caption: "Safety warning illustration \u2014 OpenMoji (CC BY-SA 4.0)"
|
|
5687
|
+
},
|
|
5688
|
+
"issuer": {
|
|
5689
|
+
"id": "did:example:qualification-issuer",
|
|
5690
|
+
"type": ["Profile"],
|
|
5691
|
+
"name": "Example Professional Training Academy"
|
|
5692
|
+
},
|
|
5693
|
+
"validFrom": "2023-01-01T00:00:00Z",
|
|
5694
|
+
"validUntil": "2024-01-01T00:00:00Z",
|
|
5695
|
+
"credentialSubject": {
|
|
5696
|
+
"id": "did:example:qualification-holder",
|
|
5697
|
+
"type": ["AchievementSubject"],
|
|
5698
|
+
"achievement": {
|
|
5699
|
+
"id": "https://example.org/qualifications/expired",
|
|
5700
|
+
"type": ["Achievement"],
|
|
5701
|
+
"achievementType": "Certification",
|
|
5702
|
+
"name": "Expired Safety Certification",
|
|
5703
|
+
"description": "An expired qualification that must remain visible and selectable.",
|
|
5704
|
+
"image": {
|
|
5705
|
+
id: "https://openmoji.org/data/color/svg/26A0.svg",
|
|
5706
|
+
type: "Image",
|
|
5707
|
+
caption: "Safety warning illustration \u2014 OpenMoji (CC BY-SA 4.0)"
|
|
5708
|
+
},
|
|
5709
|
+
"criteria": {
|
|
5710
|
+
"narrative": "Complete the safety course; renewal is required after expiration."
|
|
5711
|
+
}
|
|
5712
|
+
}
|
|
5713
|
+
}
|
|
5714
|
+
}
|
|
5715
|
+
};
|
|
5716
|
+
|
|
5717
|
+
// src/fixtures/obv3/qualification-badge-override.ts
|
|
5718
|
+
var import_types22 = require("@learncard/types");
|
|
5719
|
+
var obv3QualificationBadgeOverride = {
|
|
5720
|
+
"id": "obv3/qualification-badge-override",
|
|
5721
|
+
"name": "Safety Certification \u2014 Badge Layout",
|
|
5722
|
+
"description": "LC-2111 Certification classification and explicit display override test.",
|
|
5723
|
+
"spec": "obv3",
|
|
5724
|
+
"profile": "certificate",
|
|
5725
|
+
"features": ["expiration", "display", "image"],
|
|
5726
|
+
"source": "synthetic",
|
|
5727
|
+
"signed": false,
|
|
5728
|
+
"validity": "valid",
|
|
5729
|
+
validator: import_types22.UnsignedAchievementCredentialValidator,
|
|
5730
|
+
"tags": ["qualifications", "lc-2111", "badge-override"],
|
|
5731
|
+
"credential": {
|
|
5732
|
+
"@context": [
|
|
5733
|
+
"https://www.w3.org/ns/credentials/v2",
|
|
5734
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
|
|
5735
|
+
"https://ctx.learncard.com/boosts/1.0.3.json"
|
|
5736
|
+
],
|
|
5737
|
+
"id": "urn:uuid:21110000-0000-4000-8000-000000000007",
|
|
5738
|
+
"type": ["VerifiableCredential", "OpenBadgeCredential", "BoostCredential"],
|
|
5739
|
+
"name": "Safety Certification \u2014 Badge Layout",
|
|
5740
|
+
"description": "A qualification with an explicit badge layout instead of the default certificate.",
|
|
5741
|
+
"image": {
|
|
5742
|
+
id: "https://openmoji.org/data/color/svg/1F6E1.svg",
|
|
5743
|
+
type: "Image",
|
|
5744
|
+
caption: "Safety certification illustration \u2014 OpenMoji (CC BY-SA 4.0)"
|
|
5745
|
+
},
|
|
5746
|
+
"issuer": {
|
|
5747
|
+
"id": "did:example:qualification-issuer",
|
|
5748
|
+
"type": ["Profile"],
|
|
5749
|
+
"name": "Example Professional Training Academy"
|
|
5750
|
+
},
|
|
5751
|
+
"validFrom": "2023-01-01T00:00:00Z",
|
|
5752
|
+
"validUntil": "2037-01-01T00:00:00Z",
|
|
5753
|
+
"credentialSubject": {
|
|
5754
|
+
"id": "did:example:qualification-holder",
|
|
5755
|
+
"type": ["AchievementSubject"],
|
|
5756
|
+
"achievement": {
|
|
5757
|
+
"id": "https://example.org/qualifications/badge-override",
|
|
5758
|
+
"type": ["Achievement"],
|
|
5759
|
+
"achievementType": "Certification",
|
|
5760
|
+
"name": "Safety Certification \u2014 Badge Layout",
|
|
5761
|
+
"description": "A qualification with an explicit badge layout instead of the default certificate.",
|
|
5762
|
+
"image": {
|
|
5763
|
+
id: "https://openmoji.org/data/color/svg/1F6E1.svg",
|
|
5764
|
+
type: "Image",
|
|
5765
|
+
caption: "Safety certification illustration \u2014 OpenMoji (CC BY-SA 4.0)"
|
|
5766
|
+
},
|
|
5767
|
+
"criteria": {
|
|
5768
|
+
"narrative": "Complete the required training and pass the practical assessment."
|
|
5769
|
+
}
|
|
5770
|
+
}
|
|
5771
|
+
},
|
|
5772
|
+
"display": {
|
|
5773
|
+
"displayType": "badge"
|
|
5774
|
+
}
|
|
5775
|
+
}
|
|
5776
|
+
};
|
|
5777
|
+
|
|
5778
|
+
// src/fixtures/clr/minimal.ts
|
|
5779
|
+
var import_types23 = require("@learncard/types");
|
|
5362
5780
|
var clrMinimal = {
|
|
5363
5781
|
id: "clr/minimal",
|
|
5364
5782
|
name: "Minimal CLR v2 Credential",
|
|
@@ -5369,7 +5787,7 @@ var clrMinimal = {
|
|
|
5369
5787
|
source: "spec-example",
|
|
5370
5788
|
signed: false,
|
|
5371
5789
|
validity: "valid",
|
|
5372
|
-
validator:
|
|
5790
|
+
validator: import_types23.UnsignedClrCredentialValidator,
|
|
5373
5791
|
credential: {
|
|
5374
5792
|
"@context": [
|
|
5375
5793
|
"https://www.w3.org/ns/credentials/v2",
|
|
@@ -5408,7 +5826,7 @@ var clrMinimal = {
|
|
|
5408
5826
|
};
|
|
5409
5827
|
|
|
5410
5828
|
// src/fixtures/clr/multi-achievement.ts
|
|
5411
|
-
var
|
|
5829
|
+
var import_types24 = require("@learncard/types");
|
|
5412
5830
|
var clrMultiAchievement = {
|
|
5413
5831
|
id: "clr/multi-achievement",
|
|
5414
5832
|
name: "CLR v2 with Multiple Achievements and Associations",
|
|
@@ -5419,7 +5837,7 @@ var clrMultiAchievement = {
|
|
|
5419
5837
|
source: "synthetic",
|
|
5420
5838
|
signed: false,
|
|
5421
5839
|
validity: "valid",
|
|
5422
|
-
validator:
|
|
5840
|
+
validator: import_types24.UnsignedClrCredentialValidator,
|
|
5423
5841
|
tags: ["comprehensive"],
|
|
5424
5842
|
credential: {
|
|
5425
5843
|
"@context": [
|
|
@@ -5854,7 +6272,7 @@ var clrUniversityTranscript = {
|
|
|
5854
6272
|
};
|
|
5855
6273
|
|
|
5856
6274
|
// src/fixtures/clr/student-official-academic-transcript.ts
|
|
5857
|
-
var
|
|
6275
|
+
var import_types25 = require("@learncard/types");
|
|
5858
6276
|
var clrStudentOfficialAcademicTranscript = {
|
|
5859
6277
|
id: "clr/student-official-academic-transcript",
|
|
5860
6278
|
name: "Student Persona \u2014 Official Academic Transcript \u2014 Redwood Valley University",
|
|
@@ -5865,7 +6283,7 @@ var clrStudentOfficialAcademicTranscript = {
|
|
|
5865
6283
|
source: "real-world",
|
|
5866
6284
|
signed: false,
|
|
5867
6285
|
validity: "valid",
|
|
5868
|
-
validator:
|
|
6286
|
+
validator: import_types25.UnsignedClrCredentialValidator,
|
|
5869
6287
|
tags: ["student-persona", "transcript"],
|
|
5870
6288
|
credential: {
|
|
5871
6289
|
"@context": [
|
|
@@ -10199,6 +10617,153 @@ var clrMilitaryTrainingRecord = {
|
|
|
10199
10617
|
}
|
|
10200
10618
|
};
|
|
10201
10619
|
|
|
10620
|
+
// src/fixtures/clr/military-comprehensive-record.ts
|
|
10621
|
+
var base = structuredClone(clrMilitaryTrainingRecord.credential);
|
|
10622
|
+
var subject = base.credentialSubject;
|
|
10623
|
+
var context = [
|
|
10624
|
+
"https://www.w3.org/ns/credentials/v2",
|
|
10625
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
|
|
10626
|
+
];
|
|
10627
|
+
var issuer = {
|
|
10628
|
+
id: "did:example:meridian-qualifications",
|
|
10629
|
+
type: ["Profile"],
|
|
10630
|
+
name: "Meridian Qualifications Board (Fictional)"
|
|
10631
|
+
};
|
|
10632
|
+
var evaluationIssuer = {
|
|
10633
|
+
id: "did:example:meridian-assessment",
|
|
10634
|
+
type: ["Profile"],
|
|
10635
|
+
name: "Meridian Independent Assessments (Fictional)"
|
|
10636
|
+
};
|
|
10637
|
+
var clrMilitaryComprehensiveRecord = {
|
|
10638
|
+
...clrMilitaryTrainingRecord,
|
|
10639
|
+
id: "clr/military-comprehensive-record",
|
|
10640
|
+
name: "Military Training and Qualifications \u2014 Comprehensive",
|
|
10641
|
+
description: "Six source-backed children covering training, fieldwork, award, competency, assessment, and qualification with distinct issuers.",
|
|
10642
|
+
tags: [...clrMilitaryTrainingRecord.tags ?? [], "lc-2215"],
|
|
10643
|
+
credential: {
|
|
10644
|
+
...base,
|
|
10645
|
+
id: "urn:uuid:7293fe71-4b24-4428-9f6f-60923687184c",
|
|
10646
|
+
name: "Military Training and Qualifications \u2014 Comprehensive",
|
|
10647
|
+
credentialSubject: {
|
|
10648
|
+
...subject,
|
|
10649
|
+
verifiableCredential: [
|
|
10650
|
+
...subject.verifiableCredential,
|
|
10651
|
+
{
|
|
10652
|
+
"@context": context,
|
|
10653
|
+
id: "urn:uuid:89a65d6b-3d7b-43f9-a545-82979d22b874",
|
|
10654
|
+
type: ["VerifiableCredential", "AchievementCredential"],
|
|
10655
|
+
issuer: evaluationIssuer,
|
|
10656
|
+
validFrom: "2026-03-01T12:00:00Z",
|
|
10657
|
+
credentialSubject: {
|
|
10658
|
+
id: subject.id,
|
|
10659
|
+
type: ["AchievementSubject"],
|
|
10660
|
+
achievement: {
|
|
10661
|
+
id: "urn:uuid:e6b5c726-4f43-4cec-8099-fd5d476c91c0",
|
|
10662
|
+
type: ["Achievement"],
|
|
10663
|
+
achievementType: "Competency",
|
|
10664
|
+
name: "Safe logistics coordination",
|
|
10665
|
+
description: "Demonstrated coordination in a fictional training exercise.",
|
|
10666
|
+
criteria: {
|
|
10667
|
+
narrative: "Explain and demonstrate the supplied safety checklist."
|
|
10668
|
+
},
|
|
10669
|
+
alignment: [
|
|
10670
|
+
{
|
|
10671
|
+
type: ["Alignment"],
|
|
10672
|
+
targetName: "Safe coordination",
|
|
10673
|
+
targetUrl: "https://skills.example/safe-coordination",
|
|
10674
|
+
targetCode: "SAFE-101"
|
|
10675
|
+
}
|
|
10676
|
+
]
|
|
10677
|
+
}
|
|
10678
|
+
},
|
|
10679
|
+
evidence: [
|
|
10680
|
+
{
|
|
10681
|
+
type: ["Evidence"],
|
|
10682
|
+
name: "Observation notes",
|
|
10683
|
+
narrative: "The learner demonstrated the checklist in a supervised simulation."
|
|
10684
|
+
}
|
|
10685
|
+
]
|
|
10686
|
+
},
|
|
10687
|
+
{
|
|
10688
|
+
"@context": context,
|
|
10689
|
+
id: "urn:uuid:676e976f-0e91-4c4c-a2d4-1cac83672875",
|
|
10690
|
+
type: ["VerifiableCredential", "AchievementCredential"],
|
|
10691
|
+
issuer: evaluationIssuer,
|
|
10692
|
+
validFrom: "2026-03-02T12:00:00Z",
|
|
10693
|
+
credentialSubject: {
|
|
10694
|
+
id: subject.id,
|
|
10695
|
+
type: ["AchievementSubject"],
|
|
10696
|
+
achievement: {
|
|
10697
|
+
id: "urn:uuid:027361d1-5945-4292-85a6-2d8204b3e876",
|
|
10698
|
+
type: ["Achievement"],
|
|
10699
|
+
achievementType: "Assessment",
|
|
10700
|
+
name: "Coordination knowledge assessment",
|
|
10701
|
+
description: "Synthetic knowledge assessment.",
|
|
10702
|
+
criteria: { narrative: "Answer the scenario questions." },
|
|
10703
|
+
resultDescription: [
|
|
10704
|
+
{
|
|
10705
|
+
id: "urn:uuid:3b6af4be-5b0f-44f1-9d58-a8f8bd1a2877",
|
|
10706
|
+
type: ["ResultDescription"],
|
|
10707
|
+
name: "Knowledge score",
|
|
10708
|
+
resultType: "RawScore",
|
|
10709
|
+
valueMin: "0",
|
|
10710
|
+
valueMax: "100",
|
|
10711
|
+
requiredValue: "70"
|
|
10712
|
+
}
|
|
10713
|
+
]
|
|
10714
|
+
},
|
|
10715
|
+
result: [
|
|
10716
|
+
{
|
|
10717
|
+
type: ["Result"],
|
|
10718
|
+
resultDescription: "urn:uuid:3b6af4be-5b0f-44f1-9d58-a8f8bd1a2877",
|
|
10719
|
+
value: "86"
|
|
10720
|
+
}
|
|
10721
|
+
]
|
|
10722
|
+
}
|
|
10723
|
+
},
|
|
10724
|
+
{
|
|
10725
|
+
"@context": context,
|
|
10726
|
+
id: "urn:uuid:492bb221-9dca-46a4-bce1-205537633878",
|
|
10727
|
+
type: ["VerifiableCredential", "AchievementCredential"],
|
|
10728
|
+
issuer,
|
|
10729
|
+
awardedDate: "2026-03-03T12:00:00Z",
|
|
10730
|
+
validFrom: "2026-04-01T12:00:00Z",
|
|
10731
|
+
validUntil: "2027-04-01T12:00:00Z",
|
|
10732
|
+
credentialSubject: {
|
|
10733
|
+
id: subject.id,
|
|
10734
|
+
type: ["AchievementSubject"],
|
|
10735
|
+
licenseNumber: "SYN-LOG-2048",
|
|
10736
|
+
achievement: {
|
|
10737
|
+
id: "urn:uuid:8067ec9d-6fae-41f0-aa5f-6356f7a96879",
|
|
10738
|
+
type: ["Achievement"],
|
|
10739
|
+
achievementType: "License",
|
|
10740
|
+
name: "Simulated logistics qualification",
|
|
10741
|
+
description: "Fictional qualification for display testing only.",
|
|
10742
|
+
criteria: {
|
|
10743
|
+
narrative: "Demonstrate the training objectives and complete the assessment."
|
|
10744
|
+
},
|
|
10745
|
+
otherIdentifier: [
|
|
10746
|
+
{
|
|
10747
|
+
type: "IdentifierEntry",
|
|
10748
|
+
identifier: "SYN-QUAL-48",
|
|
10749
|
+
identifierType: "identifier"
|
|
10750
|
+
}
|
|
10751
|
+
]
|
|
10752
|
+
}
|
|
10753
|
+
},
|
|
10754
|
+
evidence: [
|
|
10755
|
+
{
|
|
10756
|
+
type: ["Evidence"],
|
|
10757
|
+
name: "Qualification review",
|
|
10758
|
+
narrative: "Synthetic review of training and assessment evidence."
|
|
10759
|
+
}
|
|
10760
|
+
]
|
|
10761
|
+
}
|
|
10762
|
+
]
|
|
10763
|
+
}
|
|
10764
|
+
}
|
|
10765
|
+
};
|
|
10766
|
+
|
|
10202
10767
|
// src/fixtures/clr/professional-organization-record.ts
|
|
10203
10768
|
var clrProfessionalOrganizationRecord = {
|
|
10204
10769
|
id: "clr/professional-organization-record",
|
|
@@ -11674,7 +12239,7 @@ var clrMixedCareerRecord = {
|
|
|
11674
12239
|
};
|
|
11675
12240
|
|
|
11676
12241
|
// src/fixtures/boost/basic.ts
|
|
11677
|
-
var
|
|
12242
|
+
var import_types26 = require("@learncard/types");
|
|
11678
12243
|
var boostBasic = {
|
|
11679
12244
|
id: "boost/basic",
|
|
11680
12245
|
name: "Basic LearnCard Boost",
|
|
@@ -11685,7 +12250,7 @@ var boostBasic = {
|
|
|
11685
12250
|
source: "synthetic",
|
|
11686
12251
|
signed: false,
|
|
11687
12252
|
validity: "valid",
|
|
11688
|
-
validator:
|
|
12253
|
+
validator: import_types26.UnsignedAchievementCredentialValidator,
|
|
11689
12254
|
tags: ["learncard", "boost"],
|
|
11690
12255
|
credential: {
|
|
11691
12256
|
"@context": [
|
|
@@ -11721,7 +12286,7 @@ var boostBasic = {
|
|
|
11721
12286
|
};
|
|
11722
12287
|
|
|
11723
12288
|
// src/fixtures/boost/boost-id.ts
|
|
11724
|
-
var
|
|
12289
|
+
var import_types27 = require("@learncard/types");
|
|
11725
12290
|
var boostId = {
|
|
11726
12291
|
id: "boost/boost-id",
|
|
11727
12292
|
name: "LearnCard Boost ID",
|
|
@@ -11732,7 +12297,7 @@ var boostId = {
|
|
|
11732
12297
|
source: "synthetic",
|
|
11733
12298
|
signed: false,
|
|
11734
12299
|
validity: "valid",
|
|
11735
|
-
validator:
|
|
12300
|
+
validator: import_types27.UnsignedAchievementCredentialValidator,
|
|
11736
12301
|
tags: ["learncard", "boost", "id"],
|
|
11737
12302
|
credential: {
|
|
11738
12303
|
"@context": [
|
|
@@ -11777,7 +12342,7 @@ var boostId = {
|
|
|
11777
12342
|
};
|
|
11778
12343
|
|
|
11779
12344
|
// src/fixtures/boost/with-skills.ts
|
|
11780
|
-
var
|
|
12345
|
+
var import_types28 = require("@learncard/types");
|
|
11781
12346
|
var boostWithSkills = {
|
|
11782
12347
|
id: "boost/with-skills",
|
|
11783
12348
|
name: "LearnCard Boost with Skills",
|
|
@@ -11788,7 +12353,7 @@ var boostWithSkills = {
|
|
|
11788
12353
|
source: "synthetic",
|
|
11789
12354
|
signed: false,
|
|
11790
12355
|
validity: "valid",
|
|
11791
|
-
validator:
|
|
12356
|
+
validator: import_types28.UnsignedAchievementCredentialValidator,
|
|
11792
12357
|
tags: ["learncard", "boost", "skills"],
|
|
11793
12358
|
credential: {
|
|
11794
12359
|
"@context": [
|
|
@@ -11998,7 +12563,7 @@ var boostDelegate = {
|
|
|
11998
12563
|
};
|
|
11999
12564
|
|
|
12000
12565
|
// src/fixtures/invalid/missing-context.ts
|
|
12001
|
-
var
|
|
12566
|
+
var import_types29 = require("@learncard/types");
|
|
12002
12567
|
var invalidMissingContext = {
|
|
12003
12568
|
id: "invalid/missing-context",
|
|
12004
12569
|
name: "Missing @context",
|
|
@@ -12009,7 +12574,7 @@ var invalidMissingContext = {
|
|
|
12009
12574
|
source: "synthetic",
|
|
12010
12575
|
signed: false,
|
|
12011
12576
|
validity: "invalid",
|
|
12012
|
-
validator:
|
|
12577
|
+
validator: import_types29.UnsignedVCValidator,
|
|
12013
12578
|
tags: ["negative-test"],
|
|
12014
12579
|
credential: {
|
|
12015
12580
|
// Intentionally missing '@context'
|
|
@@ -12022,7 +12587,7 @@ var invalidMissingContext = {
|
|
|
12022
12587
|
};
|
|
12023
12588
|
|
|
12024
12589
|
// src/fixtures/invalid/empty-type.ts
|
|
12025
|
-
var
|
|
12590
|
+
var import_types30 = require("@learncard/types");
|
|
12026
12591
|
var invalidEmptyType = {
|
|
12027
12592
|
id: "invalid/empty-type",
|
|
12028
12593
|
name: "Empty type Array",
|
|
@@ -12033,7 +12598,7 @@ var invalidEmptyType = {
|
|
|
12033
12598
|
source: "synthetic",
|
|
12034
12599
|
signed: false,
|
|
12035
12600
|
validity: "invalid",
|
|
12036
|
-
validator:
|
|
12601
|
+
validator: import_types30.UnsignedVCValidator,
|
|
12037
12602
|
tags: ["negative-test"],
|
|
12038
12603
|
credential: {
|
|
12039
12604
|
"@context": ["https://www.w3.org/ns/credentials/v2"],
|
|
@@ -12046,7 +12611,7 @@ var invalidEmptyType = {
|
|
|
12046
12611
|
};
|
|
12047
12612
|
|
|
12048
12613
|
// src/fixtures/invalid/missing-issuer.ts
|
|
12049
|
-
var
|
|
12614
|
+
var import_types31 = require("@learncard/types");
|
|
12050
12615
|
var invalidMissingIssuer = {
|
|
12051
12616
|
id: "invalid/missing-issuer",
|
|
12052
12617
|
name: "Missing Issuer",
|
|
@@ -12057,7 +12622,7 @@ var invalidMissingIssuer = {
|
|
|
12057
12622
|
source: "synthetic",
|
|
12058
12623
|
signed: false,
|
|
12059
12624
|
validity: "invalid",
|
|
12060
|
-
validator:
|
|
12625
|
+
validator: import_types31.UnsignedVCValidator,
|
|
12061
12626
|
tags: ["negative-test"],
|
|
12062
12627
|
credential: {
|
|
12063
12628
|
"@context": ["https://www.w3.org/ns/credentials/v2"],
|
|
@@ -24260,7 +24825,7 @@ var clrAchievementIdAssociations = {
|
|
|
24260
24825
|
};
|
|
24261
24826
|
|
|
24262
24827
|
// src/fixtures/clr/provisional-transcript.ts
|
|
24263
|
-
var
|
|
24828
|
+
var import_types32 = require("@learncard/types");
|
|
24264
24829
|
var REFRESH_SERVICE_INLINE_CONTEXT = {
|
|
24265
24830
|
partial: "https://purl.imsglobal.org/spec/clr/v2p0#partial",
|
|
24266
24831
|
"LearnCardCredentialRefresh2026": "https://learncard.com/refresh#LearnCardCredentialRefresh2026",
|
|
@@ -24286,7 +24851,7 @@ var clrProvisionalTranscript = {
|
|
|
24286
24851
|
source: "synthetic",
|
|
24287
24852
|
signed: false,
|
|
24288
24853
|
validity: "valid",
|
|
24289
|
-
validator:
|
|
24854
|
+
validator: import_types32.UnsignedClrCredentialValidator,
|
|
24290
24855
|
tags: ["transcript", "provisional", "refresh", "clr", "managed-refresh"],
|
|
24291
24856
|
credential: {
|
|
24292
24857
|
"@context": [
|
|
@@ -24384,9 +24949,9 @@ var buildFinalTranscriptVariant = /* @__PURE__ */ __name((provisional, options =
|
|
|
24384
24949
|
if (options.validFrom) final.validFrom = options.validFrom;
|
|
24385
24950
|
delete final.validUntil;
|
|
24386
24951
|
delete final.partial;
|
|
24387
|
-
const
|
|
24388
|
-
if (isRecord(
|
|
24389
|
-
|
|
24952
|
+
const subject2 = final.credentialSubject;
|
|
24953
|
+
if (isRecord(subject2) && Array.isArray(subject2.verifiableCredential)) {
|
|
24954
|
+
subject2.verifiableCredential = subject2.verifiableCredential.map((nested) => {
|
|
24390
24955
|
if (!isRecord(nested)) return nested;
|
|
24391
24956
|
const next = { ...nested };
|
|
24392
24957
|
if (typeof next.name === "string") {
|
|
@@ -32911,6 +33476,970 @@ var clrDemoIsdDiplomaAssessments = {
|
|
|
32911
33476
|
}
|
|
32912
33477
|
};
|
|
32913
33478
|
|
|
33479
|
+
// src/fixtures/obv3/food-allergen-practice.ts
|
|
33480
|
+
var import_types33 = require("@learncard/types");
|
|
33481
|
+
var obv3FoodAllergenPractice = {
|
|
33482
|
+
id: "obv3/food-allergen-practice",
|
|
33483
|
+
name: "Food Allergen Control Practice",
|
|
33484
|
+
description: "Observed food-preparation practice with a RubricScore result, evidence, and ESCO alignment.",
|
|
33485
|
+
spec: "obv3",
|
|
33486
|
+
profile: "generic",
|
|
33487
|
+
features: ["evidence", "alignment", "results", "expiration"],
|
|
33488
|
+
source: "synthetic",
|
|
33489
|
+
signed: false,
|
|
33490
|
+
validity: "valid",
|
|
33491
|
+
validator: import_types33.UnsignedAchievementCredentialValidator,
|
|
33492
|
+
tags: ["food-safety", "rubric-score", "learner"],
|
|
33493
|
+
credential: {
|
|
33494
|
+
"@context": [
|
|
33495
|
+
"https://www.w3.org/ns/credentials/v2",
|
|
33496
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
|
|
33497
|
+
],
|
|
33498
|
+
id: "urn:uuid:7cc497f9-092a-5ea2-8cdb-7a2e60c25e68",
|
|
33499
|
+
type: ["VerifiableCredential", "OpenBadgeCredential"],
|
|
33500
|
+
name: "Food allergen control \u2014 observed practice",
|
|
33501
|
+
description: "Plan preparation for a fictional allergen-sensitive order. Demonstrate a controlled practice task with observer feedback.",
|
|
33502
|
+
issuer: {
|
|
33503
|
+
id: "did:example:lc2184-cedar-training",
|
|
33504
|
+
type: ["Profile"],
|
|
33505
|
+
name: "Cedar Technical Training",
|
|
33506
|
+
url: "https://cedar-training.example"
|
|
33507
|
+
},
|
|
33508
|
+
validFrom: "2026-09-01T00:00:00Z",
|
|
33509
|
+
validUntil: "2028-09-01T00:00:00Z",
|
|
33510
|
+
credentialSubject: {
|
|
33511
|
+
id: "https://fixtures.example.org/frenchfry/personas/d56d0c592ac6",
|
|
33512
|
+
type: ["AchievementSubject"],
|
|
33513
|
+
achievement: {
|
|
33514
|
+
id: "https://fixtures.example.org/frenchfry/achievements/d56d0c592ac6/practice",
|
|
33515
|
+
type: ["Achievement"],
|
|
33516
|
+
achievementType: "Assessment",
|
|
33517
|
+
name: "Food allergen control \u2014 observed practice",
|
|
33518
|
+
description: "Plan preparation for a fictional allergen-sensitive order. Demonstrate a controlled practice task with observer feedback.",
|
|
33519
|
+
criteria: {
|
|
33520
|
+
narrative: "Identify cross-contact routes and communication steps"
|
|
33521
|
+
},
|
|
33522
|
+
fieldOfStudy: "vocational",
|
|
33523
|
+
inLanguage: "en",
|
|
33524
|
+
tag: ["vocational", "Food allergen control", "learner"],
|
|
33525
|
+
resultDescription: [
|
|
33526
|
+
{
|
|
33527
|
+
id: "https://fixtures.example.org/frenchfry/achievements/d56d0c592ac6/practice/rubric",
|
|
33528
|
+
type: ["ResultDescription"],
|
|
33529
|
+
name: "Observed task rubric points",
|
|
33530
|
+
resultType: "RubricScore",
|
|
33531
|
+
valueMin: "0",
|
|
33532
|
+
valueMax: "4",
|
|
33533
|
+
requiredValue: "3"
|
|
33534
|
+
}
|
|
33535
|
+
],
|
|
33536
|
+
alignment: [
|
|
33537
|
+
{
|
|
33538
|
+
type: ["Alignment"],
|
|
33539
|
+
targetName: "food safety principles",
|
|
33540
|
+
targetUrl: "http://data.europa.eu/esco/skill/3f4e4eab-a8e0-4aed-b8bb-79afe7c890e3",
|
|
33541
|
+
targetFramework: "ESCO (requested dataset v1.2.0)",
|
|
33542
|
+
targetDescription: "Scientific background of food safety which includes preparation, handling, and storage of food to minimise the risk of foodborne illness and other health hazards."
|
|
33543
|
+
}
|
|
33544
|
+
]
|
|
33545
|
+
},
|
|
33546
|
+
role: "learner",
|
|
33547
|
+
narrative: "Demonstrate a controlled practice task with observer feedback.",
|
|
33548
|
+
activityStartDate: "2026-08-01T00:00:00Z",
|
|
33549
|
+
activityEndDate: "2026-08-31T00:00:00Z",
|
|
33550
|
+
result: [
|
|
33551
|
+
{
|
|
33552
|
+
type: ["Result"],
|
|
33553
|
+
resultDescription: "https://fixtures.example.org/frenchfry/achievements/d56d0c592ac6/practice/rubric",
|
|
33554
|
+
value: "4",
|
|
33555
|
+
status: "Completed"
|
|
33556
|
+
}
|
|
33557
|
+
]
|
|
33558
|
+
},
|
|
33559
|
+
evidence: [
|
|
33560
|
+
{
|
|
33561
|
+
id: "https://fixtures.example.org/frenchfry/evidence/d56d0c592ac6/practice",
|
|
33562
|
+
type: ["Evidence"],
|
|
33563
|
+
name: "Kitchen simulation checklist",
|
|
33564
|
+
description: "Plan preparation for a fictional allergen-sensitive order; evaluation considered: Identify cross-contact routes and communication steps",
|
|
33565
|
+
narrative: "Plan preparation for a fictional allergen-sensitive order; evaluation considered: Identify cross-contact routes and communication steps",
|
|
33566
|
+
genre: "Observation record",
|
|
33567
|
+
audience: "Assessors"
|
|
33568
|
+
}
|
|
33569
|
+
]
|
|
33570
|
+
}
|
|
33571
|
+
};
|
|
33572
|
+
|
|
33573
|
+
// src/fixtures/obv3/food-allergen-facilitator.ts
|
|
33574
|
+
var import_types34 = require("@learncard/types");
|
|
33575
|
+
var obv3FoodAllergenFacilitator = {
|
|
33576
|
+
id: "obv3/food-allergen-facilitator",
|
|
33577
|
+
name: "Food Allergen Control Facilitation",
|
|
33578
|
+
description: "Matched teaching-performance assessment with an instructor role and O*NET Instructing alignment.",
|
|
33579
|
+
spec: "obv3",
|
|
33580
|
+
profile: "generic",
|
|
33581
|
+
features: ["evidence", "alignment", "results", "expiration"],
|
|
33582
|
+
source: "synthetic",
|
|
33583
|
+
signed: false,
|
|
33584
|
+
validity: "valid",
|
|
33585
|
+
validator: import_types34.UnsignedAchievementCredentialValidator,
|
|
33586
|
+
tags: ["food-safety", "instructor", "role-scope"],
|
|
33587
|
+
credential: {
|
|
33588
|
+
"@context": [
|
|
33589
|
+
"https://www.w3.org/ns/credentials/v2",
|
|
33590
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
|
|
33591
|
+
],
|
|
33592
|
+
id: "urn:uuid:04adda59-747f-5d5b-b287-1a9b1943b2ba",
|
|
33593
|
+
type: ["VerifiableCredential", "OpenBadgeCredential"],
|
|
33594
|
+
name: "Teaching Food allergen control \u2014 facilitator performance",
|
|
33595
|
+
description: "Train a simulated food-preparation team on cross-contact communication in a fictional order. Assesses teaching performance; independent learner skill is outside this assessment.",
|
|
33596
|
+
issuer: {
|
|
33597
|
+
id: "did:example:lc2184-cedar-training",
|
|
33598
|
+
type: ["Profile"],
|
|
33599
|
+
name: "Cedar Technical Training",
|
|
33600
|
+
url: "https://cedar-training.example"
|
|
33601
|
+
},
|
|
33602
|
+
validFrom: "2026-09-01T00:00:00Z",
|
|
33603
|
+
validUntil: "2028-09-01T00:00:00Z",
|
|
33604
|
+
credentialSubject: {
|
|
33605
|
+
id: "https://fixtures.example.org/frenchfry/personas/d56d0c592ac6",
|
|
33606
|
+
type: ["AchievementSubject"],
|
|
33607
|
+
achievement: {
|
|
33608
|
+
id: "https://fixtures.example.org/frenchfry/achievements/d56d0c592ac6/facilitator",
|
|
33609
|
+
type: ["Achievement"],
|
|
33610
|
+
achievementType: "Assessment",
|
|
33611
|
+
name: "Teaching Food allergen control \u2014 facilitator performance",
|
|
33612
|
+
description: "Train a simulated food-preparation team on cross-contact communication in a fictional order. Assesses teaching performance; independent learner skill is outside this assessment.",
|
|
33613
|
+
criteria: {
|
|
33614
|
+
narrative: "Use a shared-tool counterexample and observe whether the team escalates uncertainty without making medical claims."
|
|
33615
|
+
},
|
|
33616
|
+
fieldOfStudy: "vocational",
|
|
33617
|
+
inLanguage: "en",
|
|
33618
|
+
tag: ["vocational", "Food allergen control", "instructor"],
|
|
33619
|
+
resultDescription: [
|
|
33620
|
+
{
|
|
33621
|
+
id: "https://fixtures.example.org/frenchfry/achievements/d56d0c592ac6/facilitator/rubric",
|
|
33622
|
+
type: ["ResultDescription"],
|
|
33623
|
+
name: "Instruction performance",
|
|
33624
|
+
resultType: "PerformanceLevel",
|
|
33625
|
+
allowedValue: ["Developing", "Proficient", "Advanced"],
|
|
33626
|
+
requiredValue: "Proficient"
|
|
33627
|
+
}
|
|
33628
|
+
],
|
|
33629
|
+
alignment: [
|
|
33630
|
+
{
|
|
33631
|
+
type: ["Alignment"],
|
|
33632
|
+
targetName: "Instructing",
|
|
33633
|
+
targetUrl: "https://www.onetcenter.org/ctdlasn/resources/ce-07c266f7-9119-11e8-b852-782bcb5df6ac",
|
|
33634
|
+
targetFramework: "O*NET Content Model Worker Requirements - Transferable Skills: U.S. Department of Labor (DOL)",
|
|
33635
|
+
targetDescription: "Teaching others how to do something.",
|
|
33636
|
+
targetType: "ceasn:Competency",
|
|
33637
|
+
targetCode: "2.B.1.e"
|
|
33638
|
+
}
|
|
33639
|
+
]
|
|
33640
|
+
},
|
|
33641
|
+
role: "instructor",
|
|
33642
|
+
narrative: "Assesses teaching performance; independent learner skill is outside this assessment.",
|
|
33643
|
+
activityStartDate: "2026-08-01T00:00:00Z",
|
|
33644
|
+
activityEndDate: "2026-08-31T00:00:00Z",
|
|
33645
|
+
result: [
|
|
33646
|
+
{
|
|
33647
|
+
type: ["Result"],
|
|
33648
|
+
resultDescription: "https://fixtures.example.org/frenchfry/achievements/d56d0c592ac6/facilitator/rubric",
|
|
33649
|
+
value: "Proficient",
|
|
33650
|
+
status: "Completed"
|
|
33651
|
+
}
|
|
33652
|
+
]
|
|
33653
|
+
},
|
|
33654
|
+
evidence: [
|
|
33655
|
+
{
|
|
33656
|
+
id: "https://fixtures.example.org/frenchfry/evidence/d56d0c592ac6/facilitator",
|
|
33657
|
+
type: ["Evidence"],
|
|
33658
|
+
name: "Cross-contact training tabletop and communication rubric",
|
|
33659
|
+
description: "Train a simulated food-preparation team on cross-contact communication in a fictional order; evaluation considered: Use a shared-tool counterexample and observe whether the team escalates uncertainty without making medical claims.",
|
|
33660
|
+
narrative: "Train a simulated food-preparation team on cross-contact communication in a fictional order; evaluation considered: Use a shared-tool counterexample and observe whether the team escalates uncertainty without making medical claims.",
|
|
33661
|
+
genre: "Portfolio",
|
|
33662
|
+
audience: "Assessors"
|
|
33663
|
+
}
|
|
33664
|
+
]
|
|
33665
|
+
}
|
|
33666
|
+
};
|
|
33667
|
+
|
|
33668
|
+
// src/fixtures/obv3/food-allergen-practice-fr.ts
|
|
33669
|
+
var import_types35 = require("@learncard/types");
|
|
33670
|
+
var obv3FoodAllergenPracticeFr = {
|
|
33671
|
+
id: "obv3/food-allergen-practice-fr",
|
|
33672
|
+
name: "Pr\xE9vention des contacts crois\xE9s avec des allerg\xE8nes",
|
|
33673
|
+
description: "French counterpart of the food-allergen practice assessment, retaining its RubricScore and alignment.",
|
|
33674
|
+
spec: "obv3",
|
|
33675
|
+
profile: "generic",
|
|
33676
|
+
features: ["evidence", "alignment", "results", "expiration"],
|
|
33677
|
+
source: "synthetic",
|
|
33678
|
+
signed: false,
|
|
33679
|
+
validity: "valid",
|
|
33680
|
+
validator: import_types35.UnsignedAchievementCredentialValidator,
|
|
33681
|
+
tags: ["food-safety", "rubric-score", "french", "localization", "learner"],
|
|
33682
|
+
credential: {
|
|
33683
|
+
"@context": [
|
|
33684
|
+
"https://www.w3.org/ns/credentials/v2",
|
|
33685
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
|
|
33686
|
+
],
|
|
33687
|
+
id: "urn:uuid:14adf3a3-43d2-5271-90be-9812f906deef",
|
|
33688
|
+
type: ["VerifiableCredential", "OpenBadgeCredential"],
|
|
33689
|
+
name: "Pr\xE9vention des contacts crois\xE9s avec des allerg\xE8nes",
|
|
33690
|
+
description: "\xC9valuation d'un exercice de pr\xE9vention des contacts crois\xE9s avec des allerg\xE8nes.",
|
|
33691
|
+
issuer: {
|
|
33692
|
+
id: "did:example:lc2184-cedar-training",
|
|
33693
|
+
type: ["Profile"],
|
|
33694
|
+
name: "Cedar Technical Training",
|
|
33695
|
+
url: "https://cedar-training.example"
|
|
33696
|
+
},
|
|
33697
|
+
validFrom: "2026-09-01T00:00:00Z",
|
|
33698
|
+
validUntil: "2028-09-01T00:00:00Z",
|
|
33699
|
+
credentialSubject: {
|
|
33700
|
+
id: "https://fixtures.example.org/frenchfry/personas/d56d0c592ac6",
|
|
33701
|
+
type: ["AchievementSubject"],
|
|
33702
|
+
achievement: {
|
|
33703
|
+
id: "https://fixtures.example.org/frenchfry/achievements/d56d0c592ac6/practice/fr",
|
|
33704
|
+
type: ["Achievement"],
|
|
33705
|
+
achievementType: "Assessment",
|
|
33706
|
+
name: "Pr\xE9vention des contacts crois\xE9s avec des allerg\xE8nes",
|
|
33707
|
+
description: "Planifie la pr\xE9paration d'une commande fictive dans un exercice de cuisine simul\xE9.",
|
|
33708
|
+
criteria: {
|
|
33709
|
+
narrative: "Rep\xE8re les possibilit\xE9s de contact crois\xE9, pr\xE9cise les \xE9tapes de communication et signale les incertitudes sans faire de diagnostic m\xE9dical."
|
|
33710
|
+
},
|
|
33711
|
+
fieldOfStudy: "vocational",
|
|
33712
|
+
inLanguage: "fr",
|
|
33713
|
+
tag: ["vocational", "Food allergen control", "learner"],
|
|
33714
|
+
resultDescription: [
|
|
33715
|
+
{
|
|
33716
|
+
id: "https://fixtures.example.org/frenchfry/achievements/d56d0c592ac6/practice/fr/rubric",
|
|
33717
|
+
type: ["ResultDescription"],
|
|
33718
|
+
name: "Points de la grille d'observation",
|
|
33719
|
+
resultType: "RubricScore",
|
|
33720
|
+
valueMin: "0",
|
|
33721
|
+
valueMax: "4",
|
|
33722
|
+
requiredValue: "3"
|
|
33723
|
+
}
|
|
33724
|
+
],
|
|
33725
|
+
alignment: [
|
|
33726
|
+
{
|
|
33727
|
+
type: ["Alignment"],
|
|
33728
|
+
targetName: "food safety principles",
|
|
33729
|
+
targetUrl: "http://data.europa.eu/esco/skill/3f4e4eab-a8e0-4aed-b8bb-79afe7c890e3",
|
|
33730
|
+
targetFramework: "ESCO (requested dataset v1.2.0)",
|
|
33731
|
+
targetDescription: "Scientific background of food safety which includes preparation, handling, and storage of food to minimise the risk of foodborne illness and other health hazards."
|
|
33732
|
+
}
|
|
33733
|
+
]
|
|
33734
|
+
},
|
|
33735
|
+
role: "learner",
|
|
33736
|
+
narrative: "Planifie la pr\xE9paration d'une commande fictive dans un exercice de cuisine simul\xE9.",
|
|
33737
|
+
activityStartDate: "2026-08-01T00:00:00Z",
|
|
33738
|
+
activityEndDate: "2026-08-31T00:00:00Z",
|
|
33739
|
+
result: [
|
|
33740
|
+
{
|
|
33741
|
+
type: ["Result"],
|
|
33742
|
+
resultDescription: "https://fixtures.example.org/frenchfry/achievements/d56d0c592ac6/practice/fr/rubric",
|
|
33743
|
+
value: "4",
|
|
33744
|
+
status: "Completed"
|
|
33745
|
+
}
|
|
33746
|
+
]
|
|
33747
|
+
},
|
|
33748
|
+
evidence: [
|
|
33749
|
+
{
|
|
33750
|
+
id: "https://fixtures.example.org/frenchfry/evidence/d56d0c592ac6/practice/fr",
|
|
33751
|
+
type: ["Evidence"],
|
|
33752
|
+
name: "Liste de contr\xF4le et compte rendu d'un exercice de simulation",
|
|
33753
|
+
description: "Planifie la pr\xE9paration d'une commande fictive dans un exercice de cuisine simul\xE9.",
|
|
33754
|
+
narrative: "Planifie la pr\xE9paration d'une commande fictive dans un exercice de cuisine simul\xE9.",
|
|
33755
|
+
genre: "Compte rendu d'observation",
|
|
33756
|
+
audience: "\xC9valuateurs"
|
|
33757
|
+
}
|
|
33758
|
+
]
|
|
33759
|
+
}
|
|
33760
|
+
};
|
|
33761
|
+
|
|
33762
|
+
// src/fixtures/obv3/phishing-transfer.ts
|
|
33763
|
+
var import_types36 = require("@learncard/types");
|
|
33764
|
+
var obv3PhishingTransfer = {
|
|
33765
|
+
id: "obv3/phishing-transfer",
|
|
33766
|
+
name: "Phishing Recognition Transfer Project",
|
|
33767
|
+
description: "Independent project with an achieved-level-only rubric result and a separate RawScore result.",
|
|
33768
|
+
spec: "obv3",
|
|
33769
|
+
profile: "micro-credential",
|
|
33770
|
+
features: ["evidence", "alignment", "results", "expiration"],
|
|
33771
|
+
source: "synthetic",
|
|
33772
|
+
signed: false,
|
|
33773
|
+
validity: "valid",
|
|
33774
|
+
validator: import_types36.UnsignedAchievementCredentialValidator,
|
|
33775
|
+
tags: ["phishing", "mixed-results", "achieved-level-only", "learner"],
|
|
33776
|
+
credential: {
|
|
33777
|
+
"@context": [
|
|
33778
|
+
"https://www.w3.org/ns/credentials/v2",
|
|
33779
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
|
|
33780
|
+
],
|
|
33781
|
+
id: "urn:uuid:670ef7c6-b8de-532c-9667-9817a0c942e8",
|
|
33782
|
+
type: ["VerifiableCredential", "OpenBadgeCredential"],
|
|
33783
|
+
name: "Phishing recognition \u2014 independent transfer project",
|
|
33784
|
+
description: "Adapt this task to a new fictional setting: Classify synthetic suspicious email examples. Complete an independently planned transfer project, recording assumptions, an initial failed approach and a supported revision.",
|
|
33785
|
+
issuer: {
|
|
33786
|
+
id: "did:example:issuer123",
|
|
33787
|
+
type: ["Profile"],
|
|
33788
|
+
name: "Tech Academy",
|
|
33789
|
+
url: "https://techacademy.example.com"
|
|
33790
|
+
},
|
|
33791
|
+
validFrom: "2026-09-01T00:00:00Z",
|
|
33792
|
+
validUntil: "2028-09-01T00:00:00Z",
|
|
33793
|
+
credentialSubject: {
|
|
33794
|
+
id: "https://fixtures.example.org/frenchfry/personas/ddf7bc68efd4",
|
|
33795
|
+
type: ["AchievementSubject"],
|
|
33796
|
+
achievement: {
|
|
33797
|
+
id: "https://fixtures.example.org/frenchfry/achievements/ddf7bc68efd4/transfer",
|
|
33798
|
+
type: ["Achievement"],
|
|
33799
|
+
achievementType: "MicroCredential",
|
|
33800
|
+
name: "Phishing recognition \u2014 independent transfer project",
|
|
33801
|
+
description: "Adapt this task to a new fictional setting: Classify synthetic suspicious email examples. Complete an independently planned transfer project, recording assumptions, an initial failed approach and a supported revision.",
|
|
33802
|
+
criteria: {
|
|
33803
|
+
narrative: "Identify cues without following links or sharing secrets; compare two alternative approaches and justify one under time and resource constraints."
|
|
33804
|
+
},
|
|
33805
|
+
fieldOfStudy: "technology",
|
|
33806
|
+
inLanguage: "en",
|
|
33807
|
+
tag: ["technology", "Phishing recognition", "learner"],
|
|
33808
|
+
resultDescription: [
|
|
33809
|
+
{
|
|
33810
|
+
id: "https://fixtures.example.org/frenchfry/achievements/ddf7bc68efd4/transfer/rubric",
|
|
33811
|
+
type: ["ResultDescription"],
|
|
33812
|
+
name: "Independent transfer rubric",
|
|
33813
|
+
resultType: "RubricCriterionLevel",
|
|
33814
|
+
requiredLevel: "https://fixtures.example.org/frenchfry/achievements/ddf7bc68efd4/transfer/rubric/proficient",
|
|
33815
|
+
rubricCriterionLevel: [
|
|
33816
|
+
{
|
|
33817
|
+
id: "https://fixtures.example.org/frenchfry/achievements/ddf7bc68efd4/transfer/rubric/developing",
|
|
33818
|
+
type: ["RubricCriterionLevel"],
|
|
33819
|
+
name: "Developing",
|
|
33820
|
+
level: "1",
|
|
33821
|
+
description: "Needs support to complete: Adapt this task to a new fictional setting: Classify synthetic suspicious email examples",
|
|
33822
|
+
points: "1"
|
|
33823
|
+
},
|
|
33824
|
+
{
|
|
33825
|
+
id: "https://fixtures.example.org/frenchfry/achievements/ddf7bc68efd4/transfer/rubric/proficient",
|
|
33826
|
+
type: ["RubricCriterionLevel"],
|
|
33827
|
+
name: "Proficient",
|
|
33828
|
+
level: "2",
|
|
33829
|
+
description: "Meets the task criterion: Identify cues without following links or sharing secrets; compare two alternative approaches and justify one under time and resource constraints.",
|
|
33830
|
+
points: "2"
|
|
33831
|
+
},
|
|
33832
|
+
{
|
|
33833
|
+
id: "https://fixtures.example.org/frenchfry/achievements/ddf7bc68efd4/transfer/rubric/advanced",
|
|
33834
|
+
type: ["RubricCriterionLevel"],
|
|
33835
|
+
name: "Advanced",
|
|
33836
|
+
level: "3",
|
|
33837
|
+
description: "Meets criterion and explains limits and alternative approaches.",
|
|
33838
|
+
points: "3"
|
|
33839
|
+
}
|
|
33840
|
+
]
|
|
33841
|
+
},
|
|
33842
|
+
{
|
|
33843
|
+
id: "https://fixtures.example.org/frenchfry/achievements/ddf7bc68efd4/transfer/rubric/functional-checks",
|
|
33844
|
+
type: ["ResultDescription"],
|
|
33845
|
+
name: "Simulated functional acceptance checks",
|
|
33846
|
+
resultType: "RawScore",
|
|
33847
|
+
valueMin: "0",
|
|
33848
|
+
valueMax: "10",
|
|
33849
|
+
requiredValue: "8"
|
|
33850
|
+
}
|
|
33851
|
+
],
|
|
33852
|
+
alignment: [
|
|
33853
|
+
{
|
|
33854
|
+
type: ["Alignment"],
|
|
33855
|
+
targetName: "Critical Thinking",
|
|
33856
|
+
targetUrl: "https://www.onetcenter.org/ctdlasn/resources/ce-07c26361-9119-11e8-b852-782bcb5df6ac",
|
|
33857
|
+
targetFramework: "O*NET Content Model Worker Requirements - Essential Skills: U.S. Department of Labor (DOL)",
|
|
33858
|
+
targetDescription: "Using logic and reasoning to identify the strengths and weaknesses of alternative solutions, conclusions, or approaches to problems.",
|
|
33859
|
+
targetType: "ceasn:Competency",
|
|
33860
|
+
targetCode: "2.A.2.a"
|
|
33861
|
+
}
|
|
33862
|
+
]
|
|
33863
|
+
},
|
|
33864
|
+
role: "learner",
|
|
33865
|
+
narrative: "Complete an independently planned transfer project, recording assumptions, an initial failed approach and a supported revision.",
|
|
33866
|
+
activityStartDate: "2026-08-01T00:00:00Z",
|
|
33867
|
+
activityEndDate: "2026-08-31T00:00:00Z",
|
|
33868
|
+
result: [
|
|
33869
|
+
{
|
|
33870
|
+
type: ["Result"],
|
|
33871
|
+
resultDescription: "https://fixtures.example.org/frenchfry/achievements/ddf7bc68efd4/transfer/rubric",
|
|
33872
|
+
achievedLevel: "https://fixtures.example.org/frenchfry/achievements/ddf7bc68efd4/transfer/rubric/proficient",
|
|
33873
|
+
status: "Completed"
|
|
33874
|
+
},
|
|
33875
|
+
{
|
|
33876
|
+
type: ["Result"],
|
|
33877
|
+
resultDescription: "https://fixtures.example.org/frenchfry/achievements/ddf7bc68efd4/transfer/rubric/functional-checks",
|
|
33878
|
+
value: "9",
|
|
33879
|
+
status: "Completed"
|
|
33880
|
+
}
|
|
33881
|
+
]
|
|
33882
|
+
},
|
|
33883
|
+
evidence: [
|
|
33884
|
+
{
|
|
33885
|
+
id: "https://fixtures.example.org/frenchfry/evidence/ddf7bc68efd4/transfer",
|
|
33886
|
+
type: ["Evidence"],
|
|
33887
|
+
name: "Independent project dossier; Classification worksheet and explanation",
|
|
33888
|
+
description: "Adapt this task to a new fictional setting: Classify synthetic suspicious email examples; evaluation considered: Identify cues without following links or sharing secrets; compare two alternative approaches and justify one under time and resource constraints.",
|
|
33889
|
+
narrative: "Adapt this task to a new fictional setting: Classify synthetic suspicious email examples; evaluation considered: Identify cues without following links or sharing secrets; compare two alternative approaches and justify one under time and resource constraints.",
|
|
33890
|
+
genre: "Portfolio",
|
|
33891
|
+
audience: "Assessors"
|
|
33892
|
+
},
|
|
33893
|
+
{
|
|
33894
|
+
id: "https://fixtures.example.org/frenchfry/evidence/ddf7bc68efd4/transfer-review",
|
|
33895
|
+
type: ["Evidence"],
|
|
33896
|
+
name: "Revision and peer critique record",
|
|
33897
|
+
narrative: "An initial approach was reviewed; the learner documented assumptions, evaluated an alternative and revised the work.",
|
|
33898
|
+
genre: "Reflective critique"
|
|
33899
|
+
}
|
|
33900
|
+
]
|
|
33901
|
+
}
|
|
33902
|
+
};
|
|
33903
|
+
|
|
33904
|
+
// src/fixtures/custom/course-enrollment.ts
|
|
33905
|
+
var import_types37 = require("@learncard/types");
|
|
33906
|
+
var customCourseEnrollment = {
|
|
33907
|
+
id: "custom/course-enrollment",
|
|
33908
|
+
name: "Course Enrollment",
|
|
33909
|
+
description: "Administrative course enrollment claim without completion, assessment, or skill attainment.",
|
|
33910
|
+
spec: "custom",
|
|
33911
|
+
profile: "generic",
|
|
33912
|
+
features: ["expiration"],
|
|
33913
|
+
source: "synthetic",
|
|
33914
|
+
signed: false,
|
|
33915
|
+
validity: "valid",
|
|
33916
|
+
validator: import_types37.UnsignedVCValidator,
|
|
33917
|
+
tags: ["enrollment", "administrative", "non-achievement"],
|
|
33918
|
+
credential: {
|
|
33919
|
+
"@context": [
|
|
33920
|
+
"https://www.w3.org/ns/credentials/v2",
|
|
33921
|
+
{
|
|
33922
|
+
designation: "https://fixtures.example.org/frenchfry/vocab/designation",
|
|
33923
|
+
claimScope: "https://fixtures.example.org/frenchfry/vocab/claimScope",
|
|
33924
|
+
claimRole: "https://fixtures.example.org/frenchfry/vocab/claimRole",
|
|
33925
|
+
Profile: "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Profile",
|
|
33926
|
+
url: {
|
|
33927
|
+
"@id": "https://schema.org/url",
|
|
33928
|
+
"@type": "https://www.w3.org/2001/XMLSchema#anyURI"
|
|
33929
|
+
},
|
|
33930
|
+
CourseEnrollmentCredential: "https://fixtures.example.org/frenchfry/vocab/CourseEnrollmentCredential"
|
|
33931
|
+
}
|
|
33932
|
+
],
|
|
33933
|
+
id: "urn:uuid:6ea43ad2-3fb5-55dd-aee8-6380b7ec0725",
|
|
33934
|
+
type: ["VerifiableCredential", "CourseEnrollmentCredential"],
|
|
33935
|
+
issuer: {
|
|
33936
|
+
id: "did:web:registrar.metropolis-university-example.edu",
|
|
33937
|
+
type: ["Profile"],
|
|
33938
|
+
name: "Metropolis University \u2013 Office of the Registrar",
|
|
33939
|
+
url: "https://metropolis-university-example.edu"
|
|
33940
|
+
},
|
|
33941
|
+
validFrom: "2026-09-01T00:00:00Z",
|
|
33942
|
+
validUntil: "2027-09-01T00:00:00Z",
|
|
33943
|
+
name: "Course Enrollment",
|
|
33944
|
+
description: "Administrative course enrollment claim without completion, assessment, or skill attainment.",
|
|
33945
|
+
credentialSubject: {
|
|
33946
|
+
id: "https://fixtures.example.org/frenchfry/personas/admin-5",
|
|
33947
|
+
designation: "Course enrollment",
|
|
33948
|
+
claimRole: "student",
|
|
33949
|
+
claimScope: "Enrollment in a fictional database course"
|
|
33950
|
+
}
|
|
33951
|
+
}
|
|
33952
|
+
};
|
|
33953
|
+
|
|
33954
|
+
// src/fixtures/custom/exam-accommodation.ts
|
|
33955
|
+
var import_types38 = require("@learncard/types");
|
|
33956
|
+
var customExamAccommodation = {
|
|
33957
|
+
id: "custom/exam-accommodation",
|
|
33958
|
+
name: "Extended Exam Time",
|
|
33959
|
+
description: "Administrative exam accommodation claim without a diagnosis or assessed achievement.",
|
|
33960
|
+
spec: "custom",
|
|
33961
|
+
profile: "generic",
|
|
33962
|
+
features: ["expiration"],
|
|
33963
|
+
source: "synthetic",
|
|
33964
|
+
signed: false,
|
|
33965
|
+
validity: "valid",
|
|
33966
|
+
validator: import_types38.UnsignedVCValidator,
|
|
33967
|
+
tags: ["accommodation", "administrative", "non-achievement"],
|
|
33968
|
+
credential: {
|
|
33969
|
+
"@context": [
|
|
33970
|
+
"https://www.w3.org/ns/credentials/v2",
|
|
33971
|
+
{
|
|
33972
|
+
designation: "https://fixtures.example.org/frenchfry/vocab/designation",
|
|
33973
|
+
claimScope: "https://fixtures.example.org/frenchfry/vocab/claimScope",
|
|
33974
|
+
claimRole: "https://fixtures.example.org/frenchfry/vocab/claimRole",
|
|
33975
|
+
Profile: "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Profile",
|
|
33976
|
+
url: {
|
|
33977
|
+
"@id": "https://schema.org/url",
|
|
33978
|
+
"@type": "https://www.w3.org/2001/XMLSchema#anyURI"
|
|
33979
|
+
},
|
|
33980
|
+
ExamAccommodationCredential: "https://fixtures.example.org/frenchfry/vocab/ExamAccommodationCredential"
|
|
33981
|
+
}
|
|
33982
|
+
],
|
|
33983
|
+
id: "urn:uuid:0e341ee2-6006-51b9-a559-62d7ac21a4e1",
|
|
33984
|
+
type: ["VerifiableCredential", "ExamAccommodationCredential"],
|
|
33985
|
+
issuer: {
|
|
33986
|
+
id: "did:web:university-example.edu",
|
|
33987
|
+
type: ["Profile"],
|
|
33988
|
+
name: "State University",
|
|
33989
|
+
url: "https://university-example.edu"
|
|
33990
|
+
},
|
|
33991
|
+
validFrom: "2026-09-01T00:00:00Z",
|
|
33992
|
+
validUntil: "2027-09-01T00:00:00Z",
|
|
33993
|
+
name: "Extended Exam Time",
|
|
33994
|
+
description: "Administrative exam accommodation claim without a diagnosis or assessed achievement.",
|
|
33995
|
+
credentialSubject: {
|
|
33996
|
+
id: "https://fixtures.example.org/frenchfry/personas/admin-20",
|
|
33997
|
+
designation: "Extended exam time",
|
|
33998
|
+
claimRole: "recipient",
|
|
33999
|
+
claimScope: "Fictional extra time provision; no diagnosis included"
|
|
34000
|
+
}
|
|
34001
|
+
}
|
|
34002
|
+
};
|
|
34003
|
+
|
|
34004
|
+
// src/fixtures/clr/mixed-role-portfolio.ts
|
|
34005
|
+
var import_types39 = require("@learncard/types");
|
|
34006
|
+
var clrMixedRolePortfolio = {
|
|
34007
|
+
id: "clr/mixed-role-portfolio",
|
|
34008
|
+
name: "Quadratic Modeling and Statistical Sampling Portfolio",
|
|
34009
|
+
description: "CLR collection with two learner assessments, one instructor assessment, and scalar Association types.",
|
|
34010
|
+
spec: "clr-v2",
|
|
34011
|
+
profile: "learner-record",
|
|
34012
|
+
features: [
|
|
34013
|
+
"evidence",
|
|
34014
|
+
"alignment",
|
|
34015
|
+
"results",
|
|
34016
|
+
"expiration",
|
|
34017
|
+
"associations",
|
|
34018
|
+
"nested-credentials"
|
|
34019
|
+
],
|
|
34020
|
+
source: "synthetic",
|
|
34021
|
+
signed: false,
|
|
34022
|
+
validity: "valid",
|
|
34023
|
+
validator: import_types39.UnsignedClrCredentialValidator,
|
|
34024
|
+
tags: ["portfolio", "mixed-role", "canonical-associations", "achievement-ids"],
|
|
34025
|
+
credential: {
|
|
34026
|
+
"@context": [
|
|
34027
|
+
"https://www.w3.org/ns/credentials/v2",
|
|
34028
|
+
"https://purl.imsglobal.org/spec/clr/v2p0/context.json",
|
|
34029
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
|
|
34030
|
+
],
|
|
34031
|
+
id: "urn:uuid:47213155-4246-5f73-bcf4-54776e488e21",
|
|
34032
|
+
type: ["VerifiableCredential", "ClrCredential"],
|
|
34033
|
+
name: "Quadratic Modeling and Statistical Sampling Portfolio",
|
|
34034
|
+
description: "Portfolio of quadratic modeling practice, statistical sampling transfer, and teaching performance.",
|
|
34035
|
+
issuer: {
|
|
34036
|
+
id: "did:example:communitycollegeXYZ",
|
|
34037
|
+
type: ["Profile"],
|
|
34038
|
+
name: "Community College XYZ",
|
|
34039
|
+
url: "https://ccxyz.example.edu"
|
|
34040
|
+
},
|
|
34041
|
+
validFrom: "2026-09-02T00:00:00Z",
|
|
34042
|
+
credentialSubject: {
|
|
34043
|
+
id: "https://fixtures.example.org/frenchfry/personas/b8aecbfaee47",
|
|
34044
|
+
type: ["ClrSubject"],
|
|
34045
|
+
verifiableCredential: [
|
|
34046
|
+
{
|
|
34047
|
+
"@context": [
|
|
34048
|
+
"https://www.w3.org/ns/credentials/v2",
|
|
34049
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
|
|
34050
|
+
],
|
|
34051
|
+
id: "urn:uuid:a70a3561-5b59-56ef-95c3-fba84bf4dbb6",
|
|
34052
|
+
type: ["VerifiableCredential", "OpenBadgeCredential"],
|
|
34053
|
+
name: "Quadratic modeling \u2014 observed practice",
|
|
34054
|
+
description: "Fit a parabola to a simulated projectile dataset. Demonstrate a controlled practice task with observer feedback.",
|
|
34055
|
+
issuer: {
|
|
34056
|
+
id: "did:example:communitycollegeXYZ",
|
|
34057
|
+
type: ["Profile"],
|
|
34058
|
+
name: "Community College XYZ",
|
|
34059
|
+
url: "https://ccxyz.example.edu"
|
|
34060
|
+
},
|
|
34061
|
+
validFrom: "2026-09-01T00:00:00Z",
|
|
34062
|
+
validUntil: "2028-09-01T00:00:00Z",
|
|
34063
|
+
credentialSubject: {
|
|
34064
|
+
id: "https://fixtures.example.org/frenchfry/personas/b8aecbfaee47",
|
|
34065
|
+
type: ["AchievementSubject"],
|
|
34066
|
+
achievement: {
|
|
34067
|
+
id: "https://fixtures.example.org/frenchfry/achievements/b8aecbfaee47/practice",
|
|
34068
|
+
type: ["Achievement"],
|
|
34069
|
+
achievementType: "Assessment",
|
|
34070
|
+
name: "Quadratic modeling \u2014 observed practice",
|
|
34071
|
+
description: "Fit a parabola to a simulated projectile dataset. Demonstrate a controlled practice task with observer feedback.",
|
|
34072
|
+
criteria: {
|
|
34073
|
+
narrative: "Report residuals and explain the valid time domain"
|
|
34074
|
+
},
|
|
34075
|
+
fieldOfStudy: "education",
|
|
34076
|
+
inLanguage: "en",
|
|
34077
|
+
tag: ["education", "Quadratic modeling", "learner"],
|
|
34078
|
+
resultDescription: [
|
|
34079
|
+
{
|
|
34080
|
+
id: "https://fixtures.example.org/frenchfry/achievements/b8aecbfaee47/practice/rubric",
|
|
34081
|
+
type: ["ResultDescription"],
|
|
34082
|
+
name: "Simulated performance rubric",
|
|
34083
|
+
resultType: "Percent",
|
|
34084
|
+
valueMin: "0",
|
|
34085
|
+
valueMax: "100",
|
|
34086
|
+
requiredValue: "80"
|
|
34087
|
+
}
|
|
34088
|
+
]
|
|
34089
|
+
},
|
|
34090
|
+
role: "learner",
|
|
34091
|
+
narrative: "Demonstrate a controlled practice task with observer feedback.",
|
|
34092
|
+
activityStartDate: "2026-08-01T00:00:00Z",
|
|
34093
|
+
activityEndDate: "2026-08-31T00:00:00Z",
|
|
34094
|
+
result: [
|
|
34095
|
+
{
|
|
34096
|
+
type: ["Result"],
|
|
34097
|
+
resultDescription: "https://fixtures.example.org/frenchfry/achievements/b8aecbfaee47/practice/rubric",
|
|
34098
|
+
value: "86",
|
|
34099
|
+
status: "Completed"
|
|
34100
|
+
}
|
|
34101
|
+
]
|
|
34102
|
+
},
|
|
34103
|
+
evidence: [
|
|
34104
|
+
{
|
|
34105
|
+
id: "https://fixtures.example.org/frenchfry/evidence/b8aecbfaee47/practice",
|
|
34106
|
+
type: ["Evidence"],
|
|
34107
|
+
name: "Model notebook and residual plot",
|
|
34108
|
+
description: "Fit a parabola to a simulated projectile dataset; evaluation considered: Report residuals and explain the valid time domain",
|
|
34109
|
+
narrative: "Fit a parabola to a simulated projectile dataset; evaluation considered: Report residuals and explain the valid time domain",
|
|
34110
|
+
genre: "Observation record",
|
|
34111
|
+
audience: "Assessors"
|
|
34112
|
+
}
|
|
34113
|
+
]
|
|
34114
|
+
},
|
|
34115
|
+
{
|
|
34116
|
+
"@context": [
|
|
34117
|
+
"https://www.w3.org/ns/credentials/v2",
|
|
34118
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
|
|
34119
|
+
],
|
|
34120
|
+
id: "urn:uuid:16476c98-56e6-5d0e-96dc-9ab47f234874",
|
|
34121
|
+
type: ["VerifiableCredential", "OpenBadgeCredential"],
|
|
34122
|
+
name: "Statistical sampling \u2014 independent transfer project",
|
|
34123
|
+
description: "Adapt this task to a new fictional setting: Design a stratified survey for a fictional school. Complete an independently planned transfer project, recording assumptions, an initial failed approach and a supported revision.",
|
|
34124
|
+
issuer: {
|
|
34125
|
+
id: "did:example:communitycollegeXYZ",
|
|
34126
|
+
type: ["Profile"],
|
|
34127
|
+
name: "Community College XYZ",
|
|
34128
|
+
url: "https://ccxyz.example.edu"
|
|
34129
|
+
},
|
|
34130
|
+
validFrom: "2026-09-01T00:00:00Z",
|
|
34131
|
+
validUntil: "2028-09-01T00:00:00Z",
|
|
34132
|
+
credentialSubject: {
|
|
34133
|
+
id: "https://fixtures.example.org/frenchfry/personas/b8aecbfaee47",
|
|
34134
|
+
type: ["AchievementSubject"],
|
|
34135
|
+
achievement: {
|
|
34136
|
+
id: "https://fixtures.example.org/frenchfry/achievements/c573cf61265a/transfer",
|
|
34137
|
+
type: ["Achievement"],
|
|
34138
|
+
achievementType: "Course",
|
|
34139
|
+
name: "Statistical sampling \u2014 independent transfer project",
|
|
34140
|
+
description: "Adapt this task to a new fictional setting: Design a stratified survey for a fictional school. Complete an independently planned transfer project, recording assumptions, an initial failed approach and a supported revision.",
|
|
34141
|
+
criteria: {
|
|
34142
|
+
narrative: "Identify population, sampling frame and two bias risks; compare two alternative approaches and justify one under time and resource constraints."
|
|
34143
|
+
},
|
|
34144
|
+
fieldOfStudy: "education",
|
|
34145
|
+
inLanguage: "en",
|
|
34146
|
+
tag: ["education", "Statistical sampling", "learner"],
|
|
34147
|
+
resultDescription: [
|
|
34148
|
+
{
|
|
34149
|
+
id: "https://fixtures.example.org/frenchfry/achievements/c573cf61265a/transfer/rubric",
|
|
34150
|
+
type: ["ResultDescription"],
|
|
34151
|
+
name: "Independent transfer rubric",
|
|
34152
|
+
resultType: "RubricCriterionLevel",
|
|
34153
|
+
requiredLevel: "https://fixtures.example.org/frenchfry/achievements/c573cf61265a/transfer/rubric/proficient",
|
|
34154
|
+
rubricCriterionLevel: [
|
|
34155
|
+
{
|
|
34156
|
+
id: "https://fixtures.example.org/frenchfry/achievements/c573cf61265a/transfer/rubric/developing",
|
|
34157
|
+
type: ["RubricCriterionLevel"],
|
|
34158
|
+
name: "Developing",
|
|
34159
|
+
level: "1",
|
|
34160
|
+
description: "Needs support to complete: Adapt this task to a new fictional setting: Design a stratified survey for a fictional school",
|
|
34161
|
+
points: "1"
|
|
34162
|
+
},
|
|
34163
|
+
{
|
|
34164
|
+
id: "https://fixtures.example.org/frenchfry/achievements/c573cf61265a/transfer/rubric/proficient",
|
|
34165
|
+
type: ["RubricCriterionLevel"],
|
|
34166
|
+
name: "Proficient",
|
|
34167
|
+
level: "2",
|
|
34168
|
+
description: "Meets the task criterion: Identify population, sampling frame and two bias risks; compare two alternative approaches and justify one under time and resource constraints.",
|
|
34169
|
+
points: "2"
|
|
34170
|
+
},
|
|
34171
|
+
{
|
|
34172
|
+
id: "https://fixtures.example.org/frenchfry/achievements/c573cf61265a/transfer/rubric/advanced",
|
|
34173
|
+
type: ["RubricCriterionLevel"],
|
|
34174
|
+
name: "Advanced",
|
|
34175
|
+
level: "3",
|
|
34176
|
+
description: "Meets criterion and explains limits and alternative approaches.",
|
|
34177
|
+
points: "3"
|
|
34178
|
+
}
|
|
34179
|
+
]
|
|
34180
|
+
}
|
|
34181
|
+
],
|
|
34182
|
+
alignment: [
|
|
34183
|
+
{
|
|
34184
|
+
type: ["Alignment"],
|
|
34185
|
+
targetName: "statistics",
|
|
34186
|
+
targetUrl: "http://data.europa.eu/esco/skill/7ee4c2ea-b349-4bd2-81a3-ec31475d4833",
|
|
34187
|
+
targetFramework: "ESCO (requested dataset v1.2.0)",
|
|
34188
|
+
targetDescription: "The study of statistical theory, methods and practices such as collection, organisation, analysis, interpretation and presentation of data. It deals with all aspects of data including the planning of data collection in terms of the design of surveys and experiments in order to forecast and plan work-related activities."
|
|
34189
|
+
}
|
|
34190
|
+
],
|
|
34191
|
+
creditsAvailable: 2
|
|
34192
|
+
},
|
|
34193
|
+
role: "learner",
|
|
34194
|
+
narrative: "Complete an independently planned transfer project, recording assumptions, an initial failed approach and a supported revision.",
|
|
34195
|
+
activityStartDate: "2026-08-01T00:00:00Z",
|
|
34196
|
+
activityEndDate: "2026-08-31T00:00:00Z",
|
|
34197
|
+
result: [
|
|
34198
|
+
{
|
|
34199
|
+
type: ["Result"],
|
|
34200
|
+
resultDescription: "https://fixtures.example.org/frenchfry/achievements/c573cf61265a/transfer/rubric",
|
|
34201
|
+
achievedLevel: "https://fixtures.example.org/frenchfry/achievements/c573cf61265a/transfer/rubric/proficient",
|
|
34202
|
+
status: "Completed"
|
|
34203
|
+
}
|
|
34204
|
+
],
|
|
34205
|
+
creditsEarned: 2,
|
|
34206
|
+
term: "Synthetic Fall 2026"
|
|
34207
|
+
},
|
|
34208
|
+
evidence: [
|
|
34209
|
+
{
|
|
34210
|
+
id: "https://fixtures.example.org/frenchfry/evidence/c573cf61265a/transfer",
|
|
34211
|
+
type: ["Evidence"],
|
|
34212
|
+
name: "Independent project dossier; Sampling plan and response audit",
|
|
34213
|
+
description: "Adapt this task to a new fictional setting: Design a stratified survey for a fictional school; evaluation considered: Identify population, sampling frame and two bias risks; compare two alternative approaches and justify one under time and resource constraints.",
|
|
34214
|
+
narrative: "Adapt this task to a new fictional setting: Design a stratified survey for a fictional school; evaluation considered: Identify population, sampling frame and two bias risks; compare two alternative approaches and justify one under time and resource constraints.",
|
|
34215
|
+
genre: "Portfolio",
|
|
34216
|
+
audience: "Assessors"
|
|
34217
|
+
},
|
|
34218
|
+
{
|
|
34219
|
+
id: "https://fixtures.example.org/frenchfry/evidence/c573cf61265a/transfer-review",
|
|
34220
|
+
type: ["Evidence"],
|
|
34221
|
+
name: "Revision and peer critique record",
|
|
34222
|
+
narrative: "An initial approach was reviewed; the learner documented assumptions, evaluated an alternative and revised the work.",
|
|
34223
|
+
genre: "Reflective critique"
|
|
34224
|
+
}
|
|
34225
|
+
]
|
|
34226
|
+
},
|
|
34227
|
+
{
|
|
34228
|
+
"@context": [
|
|
34229
|
+
"https://www.w3.org/ns/credentials/v2",
|
|
34230
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
|
|
34231
|
+
],
|
|
34232
|
+
id: "urn:uuid:b2aadaa8-c127-5a89-b4d0-c7f20f4da0df",
|
|
34233
|
+
type: ["VerifiableCredential", "OpenBadgeCredential"],
|
|
34234
|
+
name: "Teaching Quadratic modeling \u2014 facilitator performance",
|
|
34235
|
+
description: "Facilitate a simulated novice task: Fit a parabola to a simulated projectile dataset. Assesses teaching performance; independent learner skill is outside this assessment.",
|
|
34236
|
+
issuer: {
|
|
34237
|
+
id: "did:example:communitycollegeXYZ",
|
|
34238
|
+
type: ["Profile"],
|
|
34239
|
+
name: "Community College XYZ",
|
|
34240
|
+
url: "https://ccxyz.example.edu"
|
|
34241
|
+
},
|
|
34242
|
+
validFrom: "2026-09-01T00:00:00Z",
|
|
34243
|
+
validUntil: "2028-09-01T00:00:00Z",
|
|
34244
|
+
credentialSubject: {
|
|
34245
|
+
id: "https://fixtures.example.org/frenchfry/personas/b8aecbfaee47",
|
|
34246
|
+
type: ["AchievementSubject"],
|
|
34247
|
+
achievement: {
|
|
34248
|
+
id: "https://fixtures.example.org/frenchfry/achievements/b8aecbfaee47/facilitator",
|
|
34249
|
+
type: ["Achievement"],
|
|
34250
|
+
achievementType: "Assessment",
|
|
34251
|
+
name: "Teaching Quadratic modeling \u2014 facilitator performance",
|
|
34252
|
+
description: "Facilitate a simulated novice task: Fit a parabola to a simulated projectile dataset. Assesses teaching performance; independent learner skill is outside this assessment.",
|
|
34253
|
+
criteria: {
|
|
34254
|
+
narrative: "Coach the novice to explain and apply this task criterion: Report residuals and explain the valid time domain. Use an error example, ask for a revised attempt and distinguish this learning task from Linear regression."
|
|
34255
|
+
},
|
|
34256
|
+
fieldOfStudy: "education",
|
|
34257
|
+
inLanguage: "en",
|
|
34258
|
+
tag: ["education", "Quadratic modeling", "instructor"],
|
|
34259
|
+
resultDescription: [
|
|
34260
|
+
{
|
|
34261
|
+
id: "https://fixtures.example.org/frenchfry/achievements/b8aecbfaee47/facilitator/rubric",
|
|
34262
|
+
type: ["ResultDescription"],
|
|
34263
|
+
name: "Instruction performance",
|
|
34264
|
+
resultType: "PerformanceLevel",
|
|
34265
|
+
allowedValue: ["Developing", "Proficient", "Advanced"],
|
|
34266
|
+
requiredValue: "Proficient"
|
|
34267
|
+
}
|
|
34268
|
+
],
|
|
34269
|
+
alignment: [
|
|
34270
|
+
{
|
|
34271
|
+
type: ["Alignment"],
|
|
34272
|
+
targetName: "Instructing",
|
|
34273
|
+
targetUrl: "https://www.onetcenter.org/ctdlasn/resources/ce-07c266f7-9119-11e8-b852-782bcb5df6ac",
|
|
34274
|
+
targetFramework: "O*NET Content Model Worker Requirements - Transferable Skills: U.S. Department of Labor (DOL)",
|
|
34275
|
+
targetDescription: "Teaching others how to do something.",
|
|
34276
|
+
targetType: "ceasn:Competency",
|
|
34277
|
+
targetCode: "2.B.1.e"
|
|
34278
|
+
}
|
|
34279
|
+
]
|
|
34280
|
+
},
|
|
34281
|
+
role: "instructor",
|
|
34282
|
+
narrative: "Assesses teaching performance; independent learner skill is outside this assessment.",
|
|
34283
|
+
activityStartDate: "2026-08-01T00:00:00Z",
|
|
34284
|
+
activityEndDate: "2026-08-31T00:00:00Z",
|
|
34285
|
+
result: [
|
|
34286
|
+
{
|
|
34287
|
+
type: ["Result"],
|
|
34288
|
+
resultDescription: "https://fixtures.example.org/frenchfry/achievements/b8aecbfaee47/facilitator/rubric",
|
|
34289
|
+
value: "Proficient",
|
|
34290
|
+
status: "Completed"
|
|
34291
|
+
}
|
|
34292
|
+
]
|
|
34293
|
+
},
|
|
34294
|
+
evidence: [
|
|
34295
|
+
{
|
|
34296
|
+
id: "https://fixtures.example.org/frenchfry/evidence/b8aecbfaee47/facilitator",
|
|
34297
|
+
type: ["Evidence"],
|
|
34298
|
+
name: "Instructional worked example based on Model notebook and residual plot; simulated teach-back and observer critique",
|
|
34299
|
+
description: "Facilitate a simulated novice task: Fit a parabola to a simulated projectile dataset; evaluation considered: Coach the novice to explain and apply this task criterion: Report residuals and explain the valid time domain. Use an error example, ask for a revised attempt and distinguish this learning task from Linear regression.",
|
|
34300
|
+
narrative: "Facilitate a simulated novice task: Fit a parabola to a simulated projectile dataset; evaluation considered: Coach the novice to explain and apply this task criterion: Report residuals and explain the valid time domain. Use an error example, ask for a revised attempt and distinguish this learning task from Linear regression.",
|
|
34301
|
+
genre: "Portfolio",
|
|
34302
|
+
audience: "Assessors"
|
|
34303
|
+
}
|
|
34304
|
+
]
|
|
34305
|
+
}
|
|
34306
|
+
],
|
|
34307
|
+
achievement: [
|
|
34308
|
+
{
|
|
34309
|
+
id: "https://fixtures.example.org/frenchfry/achievements/b8aecbfaee47/practice",
|
|
34310
|
+
type: ["Achievement"],
|
|
34311
|
+
achievementType: "Assessment",
|
|
34312
|
+
name: "Quadratic modeling \u2014 observed practice",
|
|
34313
|
+
description: "Fit a parabola to a simulated projectile dataset. Demonstrate a controlled practice task with observer feedback.",
|
|
34314
|
+
criteria: {
|
|
34315
|
+
narrative: "Report residuals and explain the valid time domain"
|
|
34316
|
+
},
|
|
34317
|
+
fieldOfStudy: "education",
|
|
34318
|
+
inLanguage: "en",
|
|
34319
|
+
tag: ["education", "Quadratic modeling", "learner"],
|
|
34320
|
+
resultDescription: [
|
|
34321
|
+
{
|
|
34322
|
+
id: "https://fixtures.example.org/frenchfry/achievements/b8aecbfaee47/practice/rubric",
|
|
34323
|
+
type: ["ResultDescription"],
|
|
34324
|
+
name: "Simulated performance rubric",
|
|
34325
|
+
resultType: "Percent",
|
|
34326
|
+
valueMin: "0",
|
|
34327
|
+
valueMax: "100",
|
|
34328
|
+
requiredValue: "80"
|
|
34329
|
+
}
|
|
34330
|
+
]
|
|
34331
|
+
},
|
|
34332
|
+
{
|
|
34333
|
+
id: "https://fixtures.example.org/frenchfry/achievements/c573cf61265a/transfer",
|
|
34334
|
+
type: ["Achievement"],
|
|
34335
|
+
achievementType: "Course",
|
|
34336
|
+
name: "Statistical sampling \u2014 independent transfer project",
|
|
34337
|
+
description: "Adapt this task to a new fictional setting: Design a stratified survey for a fictional school. Complete an independently planned transfer project, recording assumptions, an initial failed approach and a supported revision.",
|
|
34338
|
+
criteria: {
|
|
34339
|
+
narrative: "Identify population, sampling frame and two bias risks; compare two alternative approaches and justify one under time and resource constraints."
|
|
34340
|
+
},
|
|
34341
|
+
fieldOfStudy: "education",
|
|
34342
|
+
inLanguage: "en",
|
|
34343
|
+
tag: ["education", "Statistical sampling", "learner"],
|
|
34344
|
+
resultDescription: [
|
|
34345
|
+
{
|
|
34346
|
+
id: "https://fixtures.example.org/frenchfry/achievements/c573cf61265a/transfer/rubric",
|
|
34347
|
+
type: ["ResultDescription"],
|
|
34348
|
+
name: "Independent transfer rubric",
|
|
34349
|
+
resultType: "RubricCriterionLevel",
|
|
34350
|
+
requiredLevel: "https://fixtures.example.org/frenchfry/achievements/c573cf61265a/transfer/rubric/proficient",
|
|
34351
|
+
rubricCriterionLevel: [
|
|
34352
|
+
{
|
|
34353
|
+
id: "https://fixtures.example.org/frenchfry/achievements/c573cf61265a/transfer/rubric/developing",
|
|
34354
|
+
type: ["RubricCriterionLevel"],
|
|
34355
|
+
name: "Developing",
|
|
34356
|
+
level: "1",
|
|
34357
|
+
description: "Needs support to complete: Adapt this task to a new fictional setting: Design a stratified survey for a fictional school",
|
|
34358
|
+
points: "1"
|
|
34359
|
+
},
|
|
34360
|
+
{
|
|
34361
|
+
id: "https://fixtures.example.org/frenchfry/achievements/c573cf61265a/transfer/rubric/proficient",
|
|
34362
|
+
type: ["RubricCriterionLevel"],
|
|
34363
|
+
name: "Proficient",
|
|
34364
|
+
level: "2",
|
|
34365
|
+
description: "Meets the task criterion: Identify population, sampling frame and two bias risks; compare two alternative approaches and justify one under time and resource constraints.",
|
|
34366
|
+
points: "2"
|
|
34367
|
+
},
|
|
34368
|
+
{
|
|
34369
|
+
id: "https://fixtures.example.org/frenchfry/achievements/c573cf61265a/transfer/rubric/advanced",
|
|
34370
|
+
type: ["RubricCriterionLevel"],
|
|
34371
|
+
name: "Advanced",
|
|
34372
|
+
level: "3",
|
|
34373
|
+
description: "Meets criterion and explains limits and alternative approaches.",
|
|
34374
|
+
points: "3"
|
|
34375
|
+
}
|
|
34376
|
+
]
|
|
34377
|
+
}
|
|
34378
|
+
],
|
|
34379
|
+
alignment: [
|
|
34380
|
+
{
|
|
34381
|
+
type: ["Alignment"],
|
|
34382
|
+
targetName: "statistics",
|
|
34383
|
+
targetUrl: "http://data.europa.eu/esco/skill/7ee4c2ea-b349-4bd2-81a3-ec31475d4833",
|
|
34384
|
+
targetFramework: "ESCO (requested dataset v1.2.0)",
|
|
34385
|
+
targetDescription: "The study of statistical theory, methods and practices such as collection, organisation, analysis, interpretation and presentation of data. It deals with all aspects of data including the planning of data collection in terms of the design of surveys and experiments in order to forecast and plan work-related activities."
|
|
34386
|
+
}
|
|
34387
|
+
],
|
|
34388
|
+
creditsAvailable: 2
|
|
34389
|
+
},
|
|
34390
|
+
{
|
|
34391
|
+
id: "https://fixtures.example.org/frenchfry/achievements/b8aecbfaee47/facilitator",
|
|
34392
|
+
type: ["Achievement"],
|
|
34393
|
+
achievementType: "Assessment",
|
|
34394
|
+
name: "Teaching Quadratic modeling \u2014 facilitator performance",
|
|
34395
|
+
description: "Facilitate a simulated novice task: Fit a parabola to a simulated projectile dataset. Assesses teaching performance; independent learner skill is outside this assessment.",
|
|
34396
|
+
criteria: {
|
|
34397
|
+
narrative: "Coach the novice to explain and apply this task criterion: Report residuals and explain the valid time domain. Use an error example, ask for a revised attempt and distinguish this learning task from Linear regression."
|
|
34398
|
+
},
|
|
34399
|
+
fieldOfStudy: "education",
|
|
34400
|
+
inLanguage: "en",
|
|
34401
|
+
tag: ["education", "Quadratic modeling", "instructor"],
|
|
34402
|
+
resultDescription: [
|
|
34403
|
+
{
|
|
34404
|
+
id: "https://fixtures.example.org/frenchfry/achievements/b8aecbfaee47/facilitator/rubric",
|
|
34405
|
+
type: ["ResultDescription"],
|
|
34406
|
+
name: "Instruction performance",
|
|
34407
|
+
resultType: "PerformanceLevel",
|
|
34408
|
+
allowedValue: ["Developing", "Proficient", "Advanced"],
|
|
34409
|
+
requiredValue: "Proficient"
|
|
34410
|
+
}
|
|
34411
|
+
],
|
|
34412
|
+
alignment: [
|
|
34413
|
+
{
|
|
34414
|
+
type: ["Alignment"],
|
|
34415
|
+
targetName: "Instructing",
|
|
34416
|
+
targetUrl: "https://www.onetcenter.org/ctdlasn/resources/ce-07c266f7-9119-11e8-b852-782bcb5df6ac",
|
|
34417
|
+
targetFramework: "O*NET Content Model Worker Requirements - Transferable Skills: U.S. Department of Labor (DOL)",
|
|
34418
|
+
targetDescription: "Teaching others how to do something.",
|
|
34419
|
+
targetType: "ceasn:Competency",
|
|
34420
|
+
targetCode: "2.B.1.e"
|
|
34421
|
+
}
|
|
34422
|
+
]
|
|
34423
|
+
}
|
|
34424
|
+
],
|
|
34425
|
+
association: [
|
|
34426
|
+
{
|
|
34427
|
+
type: "Association",
|
|
34428
|
+
associationType: "isRelatedTo",
|
|
34429
|
+
sourceId: "https://fixtures.example.org/frenchfry/achievements/b8aecbfaee47/practice",
|
|
34430
|
+
targetId: "https://fixtures.example.org/frenchfry/achievements/c573cf61265a/transfer"
|
|
34431
|
+
},
|
|
34432
|
+
{
|
|
34433
|
+
type: "Association",
|
|
34434
|
+
associationType: "isRelatedTo",
|
|
34435
|
+
sourceId: "https://fixtures.example.org/frenchfry/achievements/c573cf61265a/transfer",
|
|
34436
|
+
targetId: "https://fixtures.example.org/frenchfry/achievements/b8aecbfaee47/facilitator"
|
|
34437
|
+
}
|
|
34438
|
+
]
|
|
34439
|
+
}
|
|
34440
|
+
}
|
|
34441
|
+
};
|
|
34442
|
+
|
|
32914
34443
|
// src/fixtures/sd-jwt-vc/course-completion.ts
|
|
32915
34444
|
var sdJwtVcCourseCompletion = {
|
|
32916
34445
|
kind: "sd-jwt-vc",
|
|
@@ -32955,6 +34484,13 @@ var ALL_FIXTURES = [
|
|
|
32955
34484
|
obv3PlugfestJff2,
|
|
32956
34485
|
obv3OneedtechFull,
|
|
32957
34486
|
obv3ProfessionalCert,
|
|
34487
|
+
obv3QualificationLicense,
|
|
34488
|
+
obv3QualificationCertification,
|
|
34489
|
+
obv3QualificationApprenticeship,
|
|
34490
|
+
obv3QualificationJourneyman,
|
|
34491
|
+
obv3QualificationMaster,
|
|
34492
|
+
obv3QualificationExpired,
|
|
34493
|
+
obv3QualificationBadgeOverride,
|
|
32958
34494
|
obv3MicroCredential,
|
|
32959
34495
|
obv3CourseCompletion,
|
|
32960
34496
|
obv3StandaloneFullCourse,
|
|
@@ -32974,6 +34510,7 @@ var ALL_FIXTURES = [
|
|
|
32974
34510
|
clrEmploymentRecord,
|
|
32975
34511
|
clrTrainingProviderRecord,
|
|
32976
34512
|
clrMilitaryTrainingRecord,
|
|
34513
|
+
clrMilitaryComprehensiveRecord,
|
|
32977
34514
|
clrProfessionalOrganizationRecord,
|
|
32978
34515
|
clrLicensingRegulatoryRecord,
|
|
32979
34516
|
clrMixedCareerRecord,
|
|
@@ -33002,6 +34539,14 @@ var ALL_FIXTURES = [
|
|
|
33002
34539
|
clrAchievementIdAssociations,
|
|
33003
34540
|
clrProvisionalTranscript,
|
|
33004
34541
|
clrDemoIsdDiplomaAssessments,
|
|
34542
|
+
// Curated examples
|
|
34543
|
+
obv3FoodAllergenPractice,
|
|
34544
|
+
obv3FoodAllergenFacilitator,
|
|
34545
|
+
obv3FoodAllergenPracticeFr,
|
|
34546
|
+
obv3PhishingTransfer,
|
|
34547
|
+
customCourseEnrollment,
|
|
34548
|
+
customExamAccommodation,
|
|
34549
|
+
clrMixedRolePortfolio,
|
|
33005
34550
|
// SD-JWT VC
|
|
33006
34551
|
sdJwtVcCourseCompletion
|
|
33007
34552
|
];
|
|
@@ -33209,12 +34754,12 @@ var remapUuidReferences = /* @__PURE__ */ __name((value, idMap, preserveSignedCr
|
|
|
33209
34754
|
}
|
|
33210
34755
|
return value;
|
|
33211
34756
|
}, "remapUuidReferences");
|
|
33212
|
-
var patchIssuer = /* @__PURE__ */ __name((
|
|
33213
|
-
if (typeof
|
|
34757
|
+
var patchIssuer = /* @__PURE__ */ __name((issuer2, issuerDid) => {
|
|
34758
|
+
if (typeof issuer2 === "string") {
|
|
33214
34759
|
return issuerDid;
|
|
33215
34760
|
}
|
|
33216
|
-
if (
|
|
33217
|
-
return { ...
|
|
34761
|
+
if (issuer2 && typeof issuer2 === "object") {
|
|
34762
|
+
return { ...issuer2, id: issuerDid };
|
|
33218
34763
|
}
|
|
33219
34764
|
return issuerDid;
|
|
33220
34765
|
}, "patchIssuer");
|
|
@@ -33232,13 +34777,13 @@ var patchCredentialSubject = /* @__PURE__ */ __name((credential, subjectDid) =>
|
|
|
33232
34777
|
}
|
|
33233
34778
|
return patchedCredential;
|
|
33234
34779
|
}, "patchCredentialSubject");
|
|
33235
|
-
var patchSubject = /* @__PURE__ */ __name((
|
|
33236
|
-
if (Array.isArray(
|
|
33237
|
-
return
|
|
34780
|
+
var patchSubject = /* @__PURE__ */ __name((subject2, subjectDid) => {
|
|
34781
|
+
if (Array.isArray(subject2)) {
|
|
34782
|
+
return subject2.map((nestedSubject) => patchSubject(nestedSubject, subjectDid));
|
|
33238
34783
|
}
|
|
33239
|
-
if (!
|
|
34784
|
+
if (!subject2 || typeof subject2 !== "object") return subject2;
|
|
33240
34785
|
const patchedSubject = {
|
|
33241
|
-
...
|
|
34786
|
+
...subject2,
|
|
33242
34787
|
id: subjectDid
|
|
33243
34788
|
};
|
|
33244
34789
|
const embeddedCredentials = patchedSubject.verifiableCredential;
|