@learncard/credential-library 1.0.14 → 1.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/credential-library.cjs.development.js +227 -21
- package/dist/credential-library.cjs.development.js.map +4 -4
- package/dist/credential-library.cjs.production.min.js +1 -1
- package/dist/credential-library.cjs.production.min.js.map +4 -4
- package/dist/credential-library.esm.js +217 -11
- package/dist/credential-library.esm.js.map +4 -4
- package/dist/fixtures/boost/community-award.d.ts.map +1 -1
- package/dist/fixtures/boost/delegate.d.ts.map +1 -1
- package/dist/fixtures/clr/westbridge-full.d.ts.map +1 -1
- package/dist/fixtures/index.d.ts +2 -1
- package/dist/fixtures/index.d.ts.map +1 -1
- package/dist/fixtures/obv3/endorsement.d.ts.map +1 -1
- package/dist/fixtures/obv3/professional-cert.d.ts.map +1 -1
- package/dist/fixtures/obv3/standalone-full-course.d.ts +3 -0
- package/dist/fixtures/obv3/standalone-full-course.d.ts.map +1 -0
- package/package.json +5 -5
- package/src/__tests__/issuance.test.ts +32 -14
- package/src/fixtures/boost/community-award.ts +3 -1
- package/src/fixtures/boost/delegate.ts +1 -0
- package/src/fixtures/clr/westbridge-full.ts +10 -1
- package/src/fixtures/index.ts +3 -0
- package/src/fixtures/obv3/endorsement.ts +1 -0
- package/src/fixtures/obv3/professional-cert.ts +5 -2
- package/src/fixtures/obv3/standalone-full-course.ts +207 -0
|
@@ -60,6 +60,7 @@ __export(index_exports, {
|
|
|
60
60
|
obv3OneedtechFull: () => obv3OneedtechFull,
|
|
61
61
|
obv3PlugfestJff2: () => obv3PlugfestJff2,
|
|
62
62
|
obv3ProfessionalCert: () => obv3ProfessionalCert,
|
|
63
|
+
obv3StandaloneFullCourse: () => obv3StandaloneFullCourse,
|
|
63
64
|
obv3WithAlignment: () => obv3WithAlignment,
|
|
64
65
|
obv3WithEndorsement: () => obv3WithEndorsement,
|
|
65
66
|
prepareFixture: () => prepareFixture,
|
|
@@ -923,7 +924,8 @@ var obv3ProfessionalCert = {
|
|
|
923
924
|
credential: {
|
|
924
925
|
"@context": [
|
|
925
926
|
"https://www.w3.org/ns/credentials/v2",
|
|
926
|
-
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
|
|
927
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
|
|
928
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
|
|
927
929
|
],
|
|
928
930
|
id: "urn:uuid:b34ca6cd-29d7-4b2f-9e99-4902fd84c5a1",
|
|
929
931
|
type: ["VerifiableCredential", "OpenBadgeCredential"],
|
|
@@ -1242,6 +1244,197 @@ var obv3CourseCompletion = {
|
|
|
1242
1244
|
}
|
|
1243
1245
|
};
|
|
1244
1246
|
|
|
1247
|
+
// src/fixtures/obv3/standalone-full-course.ts
|
|
1248
|
+
var import_types12 = require("@learncard/types");
|
|
1249
|
+
var obv3StandaloneFullCourse = {
|
|
1250
|
+
id: "obv3/standalone-full-course",
|
|
1251
|
+
name: "Applied Data Ethics and Responsible AI Course Completion",
|
|
1252
|
+
description: "A standalone Open Badges v3 course credential with the academic metadata commonly present on a course nested inside a Comprehensive Learner Record.",
|
|
1253
|
+
spec: "obv3",
|
|
1254
|
+
profile: "course",
|
|
1255
|
+
features: ["image", "evidence", "alignment", "results", "source"],
|
|
1256
|
+
source: "synthetic",
|
|
1257
|
+
signed: false,
|
|
1258
|
+
validity: "valid",
|
|
1259
|
+
validator: import_types12.UnsignedAchievementCredentialValidator,
|
|
1260
|
+
tags: ["course", "standalone", "higher-education", "responsible-ai", "full-metadata"],
|
|
1261
|
+
credential: {
|
|
1262
|
+
"@context": [
|
|
1263
|
+
"https://www.w3.org/ns/credentials/v2",
|
|
1264
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
|
|
1265
|
+
],
|
|
1266
|
+
id: "urn:uuid:7f1a9b36-91d2-4bd5-a7af-3d8d8e418101",
|
|
1267
|
+
type: ["VerifiableCredential", "AchievementCredential"],
|
|
1268
|
+
name: "Applied Data Ethics and Responsible AI",
|
|
1269
|
+
description: "Recognizes successful completion of a four-credit undergraduate course in ethical data practice and responsible artificial intelligence.",
|
|
1270
|
+
image: {
|
|
1271
|
+
id: "https://aster-ridge.example/credentials/images/data-ethics-course.png",
|
|
1272
|
+
type: "Image",
|
|
1273
|
+
caption: "Applied Data Ethics and Responsible AI course credential"
|
|
1274
|
+
},
|
|
1275
|
+
issuer: {
|
|
1276
|
+
id: "did:web:aster-ridge.example",
|
|
1277
|
+
type: ["Profile"],
|
|
1278
|
+
name: "Aster Ridge Institute",
|
|
1279
|
+
url: "https://aster-ridge.example",
|
|
1280
|
+
description: "A fictional higher education institution focused on technology and public impact.",
|
|
1281
|
+
email: "registrar@aster-ridge.example",
|
|
1282
|
+
image: {
|
|
1283
|
+
id: "https://aster-ridge.example/brand/institute-mark.png",
|
|
1284
|
+
type: "Image",
|
|
1285
|
+
caption: "Aster Ridge Institute mark"
|
|
1286
|
+
}
|
|
1287
|
+
},
|
|
1288
|
+
validFrom: "2026-05-22T16:00:00Z",
|
|
1289
|
+
credentialSubject: {
|
|
1290
|
+
id: "did:example:learner-ari-1087",
|
|
1291
|
+
type: ["AchievementSubject"],
|
|
1292
|
+
activityStartDate: "2026-01-12T08:00:00Z",
|
|
1293
|
+
activityEndDate: "2026-05-18T23:59:59Z",
|
|
1294
|
+
creditsEarned: 4,
|
|
1295
|
+
term: "Spring 2026",
|
|
1296
|
+
narrative: "The learner completed the course requirements, including a team audit of an automated decision system.",
|
|
1297
|
+
source: {
|
|
1298
|
+
id: "https://aster-ridge.example/offices/registrar",
|
|
1299
|
+
type: ["Profile"],
|
|
1300
|
+
name: "Aster Ridge Institute Registrar",
|
|
1301
|
+
url: "https://aster-ridge.example/offices/registrar"
|
|
1302
|
+
},
|
|
1303
|
+
achievement: {
|
|
1304
|
+
id: "https://aster-ridge.example/catalog/courses/DAI-318",
|
|
1305
|
+
type: ["Achievement"],
|
|
1306
|
+
achievementType: "Course",
|
|
1307
|
+
name: "Applied Data Ethics and Responsible AI",
|
|
1308
|
+
description: "An interdisciplinary course covering data governance, algorithmic accountability, bias assessment, privacy, transparency, and responsible deployment of artificial intelligence systems.",
|
|
1309
|
+
humanCode: "DAI-318",
|
|
1310
|
+
fieldOfStudy: "Data Science",
|
|
1311
|
+
creditsAvailable: 4,
|
|
1312
|
+
inLanguage: "en-US",
|
|
1313
|
+
version: "2026.1",
|
|
1314
|
+
criteria: {
|
|
1315
|
+
id: "https://aster-ridge.example/catalog/courses/DAI-318/criteria",
|
|
1316
|
+
narrative: "Complete all seminars and labs, earn at least 70 percent overall, and pass the final algorithmic impact assessment project."
|
|
1317
|
+
},
|
|
1318
|
+
image: {
|
|
1319
|
+
id: "https://aster-ridge.example/credentials/images/data-ethics-course.png",
|
|
1320
|
+
type: "Image",
|
|
1321
|
+
caption: "Applied Data Ethics and Responsible AI course credential"
|
|
1322
|
+
},
|
|
1323
|
+
creator: {
|
|
1324
|
+
id: "https://aster-ridge.example/schools/computing-and-society",
|
|
1325
|
+
type: ["Profile"],
|
|
1326
|
+
name: "School of Computing and Society",
|
|
1327
|
+
url: "https://aster-ridge.example/schools/computing-and-society",
|
|
1328
|
+
description: "The academic unit responsible for the course curriculum and assessment.",
|
|
1329
|
+
parentOrg: {
|
|
1330
|
+
id: "did:web:aster-ridge.example",
|
|
1331
|
+
type: ["Profile"],
|
|
1332
|
+
name: "Aster Ridge Institute"
|
|
1333
|
+
}
|
|
1334
|
+
},
|
|
1335
|
+
otherIdentifier: [
|
|
1336
|
+
{
|
|
1337
|
+
type: "IdentifierEntry",
|
|
1338
|
+
identifier: "ARI-DAI-318-2026-SP",
|
|
1339
|
+
identifierType: "identifier"
|
|
1340
|
+
}
|
|
1341
|
+
],
|
|
1342
|
+
alignment: [
|
|
1343
|
+
{
|
|
1344
|
+
type: ["Alignment"],
|
|
1345
|
+
targetCode: "ARIDF-4.2",
|
|
1346
|
+
targetName: "Evaluate algorithmic bias and disparate impact",
|
|
1347
|
+
targetDescription: "Evaluate automated systems for bias, disparate impact, and limitations in representative data.",
|
|
1348
|
+
targetFramework: "Aster Ridge Data Responsibility Framework",
|
|
1349
|
+
targetType: "CFItem",
|
|
1350
|
+
targetUrl: "https://aster-ridge.example/frameworks/data-responsibility/items/4.2"
|
|
1351
|
+
},
|
|
1352
|
+
{
|
|
1353
|
+
type: ["Alignment"],
|
|
1354
|
+
targetCode: "ARIDF-6.1",
|
|
1355
|
+
targetName: "Design accountable data governance practices",
|
|
1356
|
+
targetDescription: "Design governance practices that document data provenance, consent, oversight, and recourse.",
|
|
1357
|
+
targetFramework: "Aster Ridge Data Responsibility Framework",
|
|
1358
|
+
targetType: "CFItem",
|
|
1359
|
+
targetUrl: "https://aster-ridge.example/frameworks/data-responsibility/items/6.1"
|
|
1360
|
+
}
|
|
1361
|
+
],
|
|
1362
|
+
resultDescription: [
|
|
1363
|
+
{
|
|
1364
|
+
id: "urn:uuid:7f1a9b36-91d2-4bd5-a7af-3d8d8e418103",
|
|
1365
|
+
type: ["ResultDescription"],
|
|
1366
|
+
name: "Final Letter Grade",
|
|
1367
|
+
resultType: "LetterGrade",
|
|
1368
|
+
allowedValue: ["A", "A-", "B+", "B", "B-", "C+", "C", "D", "F"],
|
|
1369
|
+
requiredValue: "C"
|
|
1370
|
+
},
|
|
1371
|
+
{
|
|
1372
|
+
id: "urn:uuid:7f1a9b36-91d2-4bd5-a7af-3d8d8e418104",
|
|
1373
|
+
type: ["ResultDescription"],
|
|
1374
|
+
name: "Final Percentage",
|
|
1375
|
+
resultType: "Percent",
|
|
1376
|
+
valueMin: "0",
|
|
1377
|
+
valueMax: "100",
|
|
1378
|
+
requiredValue: "70"
|
|
1379
|
+
},
|
|
1380
|
+
{
|
|
1381
|
+
id: "urn:uuid:7f1a9b36-91d2-4bd5-a7af-3d8d8e418105",
|
|
1382
|
+
type: ["ResultDescription"],
|
|
1383
|
+
name: "Course Completion Status",
|
|
1384
|
+
resultType: "Status",
|
|
1385
|
+
allowedValue: [
|
|
1386
|
+
"Completed",
|
|
1387
|
+
"Enrolled",
|
|
1388
|
+
"Failed",
|
|
1389
|
+
"InProgress",
|
|
1390
|
+
"OnHold",
|
|
1391
|
+
"Withdrew"
|
|
1392
|
+
]
|
|
1393
|
+
}
|
|
1394
|
+
],
|
|
1395
|
+
tag: [
|
|
1396
|
+
"data-ethics",
|
|
1397
|
+
"responsible-ai",
|
|
1398
|
+
"algorithmic-accountability",
|
|
1399
|
+
"data-governance"
|
|
1400
|
+
]
|
|
1401
|
+
},
|
|
1402
|
+
result: [
|
|
1403
|
+
{
|
|
1404
|
+
type: ["Result"],
|
|
1405
|
+
resultDescription: "urn:uuid:7f1a9b36-91d2-4bd5-a7af-3d8d8e418103",
|
|
1406
|
+
value: "A-"
|
|
1407
|
+
},
|
|
1408
|
+
{
|
|
1409
|
+
type: ["Result"],
|
|
1410
|
+
resultDescription: "urn:uuid:7f1a9b36-91d2-4bd5-a7af-3d8d8e418104",
|
|
1411
|
+
value: "92"
|
|
1412
|
+
},
|
|
1413
|
+
{
|
|
1414
|
+
type: ["Result"],
|
|
1415
|
+
resultDescription: "urn:uuid:7f1a9b36-91d2-4bd5-a7af-3d8d8e418105",
|
|
1416
|
+
status: "Completed"
|
|
1417
|
+
}
|
|
1418
|
+
]
|
|
1419
|
+
},
|
|
1420
|
+
evidence: [
|
|
1421
|
+
{
|
|
1422
|
+
id: "https://aster-ridge.example/records/ari-1087/DAI-318",
|
|
1423
|
+
type: ["Evidence"],
|
|
1424
|
+
name: "Official Course Completion Record",
|
|
1425
|
+
description: "Registrar record confirming the learner earned four credits with a final grade of A-.",
|
|
1426
|
+
narrative: "Course requirements were completed during the Spring 2026 academic term."
|
|
1427
|
+
},
|
|
1428
|
+
{
|
|
1429
|
+
id: "https://aster-ridge.example/showcase/ari-1087/impact-assessment",
|
|
1430
|
+
type: ["Evidence"],
|
|
1431
|
+
name: "Algorithmic Impact Assessment",
|
|
1432
|
+
description: "Final project evaluating fairness, transparency, and governance controls for a fictional automated decision system."
|
|
1433
|
+
}
|
|
1434
|
+
]
|
|
1435
|
+
}
|
|
1436
|
+
};
|
|
1437
|
+
|
|
1245
1438
|
// src/fixtures/obv3/k12-diploma.ts
|
|
1246
1439
|
var obv3K12Diploma = {
|
|
1247
1440
|
id: "obv3/k12-diploma",
|
|
@@ -1343,7 +1536,8 @@ var obv3EndorsementCredential = {
|
|
|
1343
1536
|
credential: {
|
|
1344
1537
|
"@context": [
|
|
1345
1538
|
"https://www.w3.org/ns/credentials/v2",
|
|
1346
|
-
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
|
|
1539
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
|
|
1540
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
|
|
1347
1541
|
],
|
|
1348
1542
|
id: "urn:uuid:a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
|
|
1349
1543
|
type: ["VerifiableCredential", "EndorsementCredential"],
|
|
@@ -1382,7 +1576,7 @@ var obv3EndorsementCredential = {
|
|
|
1382
1576
|
};
|
|
1383
1577
|
|
|
1384
1578
|
// src/fixtures/clr/minimal.ts
|
|
1385
|
-
var
|
|
1579
|
+
var import_types13 = require("@learncard/types");
|
|
1386
1580
|
var clrMinimal = {
|
|
1387
1581
|
id: "clr/minimal",
|
|
1388
1582
|
name: "Minimal CLR v2 Credential",
|
|
@@ -1393,7 +1587,7 @@ var clrMinimal = {
|
|
|
1393
1587
|
source: "spec-example",
|
|
1394
1588
|
signed: false,
|
|
1395
1589
|
validity: "valid",
|
|
1396
|
-
validator:
|
|
1590
|
+
validator: import_types13.UnsignedClrCredentialValidator,
|
|
1397
1591
|
credential: {
|
|
1398
1592
|
"@context": [
|
|
1399
1593
|
"https://www.w3.org/ns/credentials/v2",
|
|
@@ -1432,7 +1626,7 @@ var clrMinimal = {
|
|
|
1432
1626
|
};
|
|
1433
1627
|
|
|
1434
1628
|
// src/fixtures/clr/multi-achievement.ts
|
|
1435
|
-
var
|
|
1629
|
+
var import_types14 = require("@learncard/types");
|
|
1436
1630
|
var clrMultiAchievement = {
|
|
1437
1631
|
id: "clr/multi-achievement",
|
|
1438
1632
|
name: "CLR v2 with Multiple Achievements and Associations",
|
|
@@ -1443,7 +1637,7 @@ var clrMultiAchievement = {
|
|
|
1443
1637
|
source: "synthetic",
|
|
1444
1638
|
signed: false,
|
|
1445
1639
|
validity: "valid",
|
|
1446
|
-
validator:
|
|
1640
|
+
validator: import_types14.UnsignedClrCredentialValidator,
|
|
1447
1641
|
tags: ["comprehensive"],
|
|
1448
1642
|
credential: {
|
|
1449
1643
|
"@context": [
|
|
@@ -1878,7 +2072,7 @@ var clrUniversityTranscript = {
|
|
|
1878
2072
|
};
|
|
1879
2073
|
|
|
1880
2074
|
// src/fixtures/boost/basic.ts
|
|
1881
|
-
var
|
|
2075
|
+
var import_types15 = require("@learncard/types");
|
|
1882
2076
|
var boostBasic = {
|
|
1883
2077
|
id: "boost/basic",
|
|
1884
2078
|
name: "Basic LearnCard Boost",
|
|
@@ -1889,7 +2083,7 @@ var boostBasic = {
|
|
|
1889
2083
|
source: "synthetic",
|
|
1890
2084
|
signed: false,
|
|
1891
2085
|
validity: "valid",
|
|
1892
|
-
validator:
|
|
2086
|
+
validator: import_types15.UnsignedAchievementCredentialValidator,
|
|
1893
2087
|
tags: ["learncard", "boost"],
|
|
1894
2088
|
credential: {
|
|
1895
2089
|
"@context": [
|
|
@@ -1925,7 +2119,7 @@ var boostBasic = {
|
|
|
1925
2119
|
};
|
|
1926
2120
|
|
|
1927
2121
|
// src/fixtures/boost/boost-id.ts
|
|
1928
|
-
var
|
|
2122
|
+
var import_types16 = require("@learncard/types");
|
|
1929
2123
|
var boostId = {
|
|
1930
2124
|
id: "boost/boost-id",
|
|
1931
2125
|
name: "LearnCard Boost ID",
|
|
@@ -1936,7 +2130,7 @@ var boostId = {
|
|
|
1936
2130
|
source: "synthetic",
|
|
1937
2131
|
signed: false,
|
|
1938
2132
|
validity: "valid",
|
|
1939
|
-
validator:
|
|
2133
|
+
validator: import_types16.UnsignedAchievementCredentialValidator,
|
|
1940
2134
|
tags: ["learncard", "boost", "id"],
|
|
1941
2135
|
credential: {
|
|
1942
2136
|
"@context": [
|
|
@@ -1981,7 +2175,7 @@ var boostId = {
|
|
|
1981
2175
|
};
|
|
1982
2176
|
|
|
1983
2177
|
// src/fixtures/boost/with-skills.ts
|
|
1984
|
-
var
|
|
2178
|
+
var import_types17 = require("@learncard/types");
|
|
1985
2179
|
var boostWithSkills = {
|
|
1986
2180
|
id: "boost/with-skills",
|
|
1987
2181
|
name: "LearnCard Boost with Skills",
|
|
@@ -1992,7 +2186,7 @@ var boostWithSkills = {
|
|
|
1992
2186
|
source: "synthetic",
|
|
1993
2187
|
signed: false,
|
|
1994
2188
|
validity: "valid",
|
|
1995
|
-
validator:
|
|
2189
|
+
validator: import_types17.UnsignedAchievementCredentialValidator,
|
|
1996
2190
|
tags: ["learncard", "boost", "skills"],
|
|
1997
2191
|
credential: {
|
|
1998
2192
|
"@context": [
|
|
@@ -2071,7 +2265,8 @@ var boostCommunityAward = {
|
|
|
2071
2265
|
credential: {
|
|
2072
2266
|
"@context": [
|
|
2073
2267
|
"https://www.w3.org/ns/credentials/v2",
|
|
2074
|
-
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
|
|
2268
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
|
|
2269
|
+
"https://ctx.learncard.com/boosts/1.0.3.json"
|
|
2075
2270
|
],
|
|
2076
2271
|
id: "urn:uuid:d8c4f2a1-3b67-4e89-a1d0-5f9e7c2b8a43",
|
|
2077
2272
|
type: ["VerifiableCredential", "OpenBadgeCredential", "BoostCredential"],
|
|
@@ -2160,7 +2355,8 @@ var boostDelegate = {
|
|
|
2160
2355
|
credential: {
|
|
2161
2356
|
"@context": [
|
|
2162
2357
|
"https://www.w3.org/ns/credentials/v2",
|
|
2163
|
-
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
|
|
2358
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
|
|
2359
|
+
"https://ctx.learncard.com/boosts/1.0.3.json"
|
|
2164
2360
|
],
|
|
2165
2361
|
id: "urn:uuid:e7b3d1f4-9a26-4c58-b0d3-8f1e2c7a9b56",
|
|
2166
2362
|
type: ["VerifiableCredential", "OpenBadgeCredential", "BoostCredential"],
|
|
@@ -2200,7 +2396,7 @@ var boostDelegate = {
|
|
|
2200
2396
|
};
|
|
2201
2397
|
|
|
2202
2398
|
// src/fixtures/invalid/missing-context.ts
|
|
2203
|
-
var
|
|
2399
|
+
var import_types18 = require("@learncard/types");
|
|
2204
2400
|
var invalidMissingContext = {
|
|
2205
2401
|
id: "invalid/missing-context",
|
|
2206
2402
|
name: "Missing @context",
|
|
@@ -2211,7 +2407,7 @@ var invalidMissingContext = {
|
|
|
2211
2407
|
source: "synthetic",
|
|
2212
2408
|
signed: false,
|
|
2213
2409
|
validity: "invalid",
|
|
2214
|
-
validator:
|
|
2410
|
+
validator: import_types18.UnsignedVCValidator,
|
|
2215
2411
|
tags: ["negative-test"],
|
|
2216
2412
|
credential: {
|
|
2217
2413
|
// Intentionally missing '@context'
|
|
@@ -2224,7 +2420,7 @@ var invalidMissingContext = {
|
|
|
2224
2420
|
};
|
|
2225
2421
|
|
|
2226
2422
|
// src/fixtures/invalid/empty-type.ts
|
|
2227
|
-
var
|
|
2423
|
+
var import_types19 = require("@learncard/types");
|
|
2228
2424
|
var invalidEmptyType = {
|
|
2229
2425
|
id: "invalid/empty-type",
|
|
2230
2426
|
name: "Empty type Array",
|
|
@@ -2235,7 +2431,7 @@ var invalidEmptyType = {
|
|
|
2235
2431
|
source: "synthetic",
|
|
2236
2432
|
signed: false,
|
|
2237
2433
|
validity: "invalid",
|
|
2238
|
-
validator:
|
|
2434
|
+
validator: import_types19.UnsignedVCValidator,
|
|
2239
2435
|
tags: ["negative-test"],
|
|
2240
2436
|
credential: {
|
|
2241
2437
|
"@context": ["https://www.w3.org/ns/credentials/v2"],
|
|
@@ -2248,7 +2444,7 @@ var invalidEmptyType = {
|
|
|
2248
2444
|
};
|
|
2249
2445
|
|
|
2250
2446
|
// src/fixtures/invalid/missing-issuer.ts
|
|
2251
|
-
var
|
|
2447
|
+
var import_types20 = require("@learncard/types");
|
|
2252
2448
|
var invalidMissingIssuer = {
|
|
2253
2449
|
id: "invalid/missing-issuer",
|
|
2254
2450
|
name: "Missing Issuer",
|
|
@@ -2259,7 +2455,7 @@ var invalidMissingIssuer = {
|
|
|
2259
2455
|
source: "synthetic",
|
|
2260
2456
|
signed: false,
|
|
2261
2457
|
validity: "invalid",
|
|
2262
|
-
validator:
|
|
2458
|
+
validator: import_types20.UnsignedVCValidator,
|
|
2263
2459
|
tags: ["negative-test"],
|
|
2264
2460
|
credential: {
|
|
2265
2461
|
"@context": ["https://www.w3.org/ns/credentials/v2"],
|
|
@@ -10922,7 +11118,9 @@ var clrWestbridgeFull = {
|
|
|
10922
11118
|
"@context": [
|
|
10923
11119
|
"https://www.w3.org/ns/credentials/v2",
|
|
10924
11120
|
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
|
|
10925
|
-
"https://purl.imsglobal.org/spec/clr/v2p0/context
|
|
11121
|
+
"https://purl.imsglobal.org/spec/clr/v2p0/context.json",
|
|
11122
|
+
"https://purl.imsglobal.org/spec/ob/v3p0/extensions.json",
|
|
11123
|
+
{ IssuerPolicy: "https://westbridge.edu/credentials#IssuerPolicy" }
|
|
10926
11124
|
],
|
|
10927
11125
|
id: "urn:uuid:wb-clr-2025-jordan-reyes-001",
|
|
10928
11126
|
type: ["VerifiableCredential", "ClrCredential"],
|
|
@@ -10993,6 +11191,13 @@ var clrWestbridgeFull = {
|
|
|
10993
11191
|
}
|
|
10994
11192
|
],
|
|
10995
11193
|
credentialSubject: {
|
|
11194
|
+
// CLR v2's ClrSubject scoped context omits the Open Badges identifier term.
|
|
11195
|
+
"@context": {
|
|
11196
|
+
identifier: {
|
|
11197
|
+
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#identifier",
|
|
11198
|
+
"@container": "@set"
|
|
11199
|
+
}
|
|
11200
|
+
},
|
|
10996
11201
|
id: "did:example:wb-student-2025-001",
|
|
10997
11202
|
type: ["ClrSubject"],
|
|
10998
11203
|
identifier: [
|
|
@@ -14134,6 +14339,7 @@ var ALL_FIXTURES = [
|
|
|
14134
14339
|
obv3ProfessionalCert,
|
|
14135
14340
|
obv3MicroCredential,
|
|
14136
14341
|
obv3CourseCompletion,
|
|
14342
|
+
obv3StandaloneFullCourse,
|
|
14137
14343
|
obv3K12Diploma,
|
|
14138
14344
|
obv3EndorsementCredential,
|
|
14139
14345
|
// CLR v2
|