@learncard/core 5.1.1 → 6.1.0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +2 -1
- package/dist/core.cjs.development.js +143 -26
- package/dist/core.cjs.development.js.map +3 -3
- package/dist/core.cjs.production.min.js +76 -76
- package/dist/core.cjs.production.min.js.map +3 -3
- package/dist/core.d.ts +627 -362
- package/dist/core.esm.js +143 -26
- package/dist/core.esm.js.map +3 -3
- package/dist/didkit/didkit_wasm.js +1 -1
- package/dist/didkit/didkit_wasm_bg.wasm +0 -0
- package/dist/didkit_wasm.js +1 -1
- package/dist/didkit_wasm_bg.wasm +0 -0
- package/package.json +2 -2
package/README.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
[<img src="https://user-images.githubusercontent.com/2185016/
|
1
|
+
[<img src="https://user-images.githubusercontent.com/2185016/190510561-294db809-09fd-4771-9749-6c0e0f4144fd.png" width="215"/>](https://learncard.com)
|
2
|
+
|
2
3
|
# @learncard/core
|
3
4
|
|
4
5
|
[![npm version](https://img.shields.io/npm/v/@learncard/core)](https://www.npmjs.com/package/@learncard/core)
|
@@ -35266,8 +35266,19 @@ var require_base32_decode = __commonJS({
|
|
35266
35266
|
// src/index.ts
|
35267
35267
|
var src_exports2 = {};
|
35268
35268
|
__export(src_exports2, {
|
35269
|
+
CredentialsListValidator: () => CredentialsListValidator,
|
35270
|
+
ExpirationPlugin: () => ExpirationPlugin,
|
35269
35271
|
emptyWallet: () => emptyWallet,
|
35272
|
+
generateWallet: () => generateWallet,
|
35273
|
+
getDidKeyPlugin: () => getDidKeyPlugin,
|
35274
|
+
getDidKitPlugin: () => getDidKitPlugin,
|
35275
|
+
getEthereumPlugin: () => getEthereumPlugin,
|
35276
|
+
getIDXPlugin: () => getIDXPlugin,
|
35277
|
+
getVCPlugin: () => getVCPlugin,
|
35278
|
+
getVpqrPlugin: () => getVpqrPlugin,
|
35270
35279
|
initLearnCard: () => initLearnCard,
|
35280
|
+
passwordToKey: () => passwordToKey,
|
35281
|
+
seedToId: () => seedToId,
|
35271
35282
|
walletFromKey: () => walletFromKey
|
35272
35283
|
});
|
35273
35284
|
module.exports = __toCommonJS(src_exports2);
|
@@ -35278,6 +35289,34 @@ var import_polyfill = require("abort-controller/polyfill");
|
|
35278
35289
|
var import_isomorphic_webcrypto = __toESM(require("isomorphic-webcrypto"));
|
35279
35290
|
if (typeof window === "undefined" && !globalThis.crypto)
|
35280
35291
|
globalThis.crypto = import_isomorphic_webcrypto.default;
|
35292
|
+
var crypto_default = import_isomorphic_webcrypto.default;
|
35293
|
+
|
35294
|
+
// src/wallet/base/functions/passwordToKey.ts
|
35295
|
+
var passwordToKey = /* @__PURE__ */ __name((password, salt = "salt", iterations = 1e5, digest2 = "SHA-256") => __async(void 0, null, function* () {
|
35296
|
+
var saltBuffer = Buffer.from(salt);
|
35297
|
+
var passphraseKey = Buffer.from(password);
|
35298
|
+
return crypto_default.subtle.importKey("raw", passphraseKey, { name: "PBKDF2" }, false, [
|
35299
|
+
"deriveBits",
|
35300
|
+
"deriveKey"
|
35301
|
+
]).then(function(key2) {
|
35302
|
+
return crypto_default.subtle.deriveKey({
|
35303
|
+
name: "PBKDF2",
|
35304
|
+
salt: saltBuffer,
|
35305
|
+
iterations,
|
35306
|
+
hash: digest2
|
35307
|
+
}, key2, { name: "AES-CBC", length: 256 }, true, ["encrypt", "decrypt"]);
|
35308
|
+
}).then((webKey) => {
|
35309
|
+
return crypto_default.subtle.exportKey("raw", webKey);
|
35310
|
+
}).then((buffer2) => {
|
35311
|
+
return new Uint8Array(buffer2);
|
35312
|
+
});
|
35313
|
+
}), "passwordToKey");
|
35314
|
+
|
35315
|
+
// src/wallet/base/functions/seedToId.ts
|
35316
|
+
var seedToId = /* @__PURE__ */ __name((seed) => __async(void 0, null, function* () {
|
35317
|
+
const buffer2 = yield crypto_default.subtle.digest("SHA-256", seed);
|
35318
|
+
return `urn:digest:${Buffer.from(new Int8Array(buffer2)).toString("hex")}`;
|
35319
|
+
}), "seedToId");
|
35281
35320
|
|
35282
35321
|
// src/wallet/base/wallet.ts
|
35283
35322
|
var addPluginToWallet = /* @__PURE__ */ __name((wallet, plugin) => __async(void 0, null, function* () {
|
@@ -35985,7 +36024,7 @@ function getImports() {
|
|
35985
36024
|
const ret = wasm.memory;
|
35986
36025
|
return addHeapObject(ret);
|
35987
36026
|
};
|
35988
|
-
imports.wbg.
|
36027
|
+
imports.wbg.__wbindgen_closure_wrapper10021 = function(arg0, arg1, arg2) {
|
35989
36028
|
const ret = makeMutClosure(arg0, arg1, 3552, __wbg_adapter_24);
|
35990
36029
|
return addHeapObject(ret);
|
35991
36030
|
};
|
@@ -36022,7 +36061,7 @@ var didkit_wasm_default = init;
|
|
36022
36061
|
|
36023
36062
|
// src/didkit/index.ts
|
36024
36063
|
var initialized = false;
|
36025
|
-
var init2 = /* @__PURE__ */ __name((arg = "https://cdn.filestackcontent.com/
|
36064
|
+
var init2 = /* @__PURE__ */ __name((arg = "https://cdn.filestackcontent.com/R0BsvnoVRhezGazRDUy5") => __async(void 0, null, function* () {
|
36026
36065
|
if (initialized)
|
36027
36066
|
return;
|
36028
36067
|
initialized = true;
|
@@ -36087,6 +36126,90 @@ var ExpirationPlugin = /* @__PURE__ */ __name((wallet) => ({
|
|
36087
36126
|
}
|
36088
36127
|
}), "ExpirationPlugin");
|
36089
36128
|
|
36129
|
+
// src/wallet/helpers/wallet.helpers.ts
|
36130
|
+
var recycleDependents = /* @__PURE__ */ __name((_methods) => ({}), "recycleDependents");
|
36131
|
+
|
36132
|
+
// src/wallet/plugins/vc-templates/templates.ts
|
36133
|
+
var VC_TEMPLATES = {
|
36134
|
+
basic: ({
|
36135
|
+
did = "did:example:d23dd687a7dc6787646f2eb98d0",
|
36136
|
+
subject = "did:example:d23dd687a7dc6787646f2eb98d0",
|
36137
|
+
issuanceDate = "2020-08-19T21:41:50Z"
|
36138
|
+
} = {}) => ({
|
36139
|
+
"@context": ["https://www.w3.org/2018/credentials/v1"],
|
36140
|
+
id: "http://example.org/credentials/3731",
|
36141
|
+
type: ["VerifiableCredential"],
|
36142
|
+
issuer: did,
|
36143
|
+
issuanceDate,
|
36144
|
+
credentialSubject: { id: subject }
|
36145
|
+
}),
|
36146
|
+
achievement: ({
|
36147
|
+
did = "did:example:d23dd687a7dc6787646f2eb98d0",
|
36148
|
+
subject = "did:example:d23dd687a7dc6787646f2eb98d0",
|
36149
|
+
name: name5 = "Teamwork Badge",
|
36150
|
+
achievementName = "Teamwork",
|
36151
|
+
description = "This badge recognizes the development of the capacity to collaborate within a group environment.",
|
36152
|
+
criteriaNarrative = "Team members are nominated for this badge by their peers and recognized upon review by Example Corp management.",
|
36153
|
+
issuanceDate = "2020-08-19T21:41:50Z"
|
36154
|
+
} = {}) => ({
|
36155
|
+
"@context": [
|
36156
|
+
"https://www.w3.org/2018/credentials/v1",
|
36157
|
+
"https://imsglobal.github.io/openbadges-specification/context.json"
|
36158
|
+
],
|
36159
|
+
id: "http://example.com/credentials/3527",
|
36160
|
+
type: ["VerifiableCredential", "OpenBadgeCredential"],
|
36161
|
+
issuer: did,
|
36162
|
+
issuanceDate,
|
36163
|
+
name: name5,
|
36164
|
+
credentialSubject: {
|
36165
|
+
id: subject,
|
36166
|
+
type: ["AchievementSubject"],
|
36167
|
+
achievement: {
|
36168
|
+
id: "https://example.com/achievements/21st-century-skills/teamwork",
|
36169
|
+
type: ["Achievement"],
|
36170
|
+
criteria: { narrative: criteriaNarrative },
|
36171
|
+
description,
|
36172
|
+
name: achievementName
|
36173
|
+
}
|
36174
|
+
}
|
36175
|
+
})
|
36176
|
+
};
|
36177
|
+
|
36178
|
+
// src/wallet/plugins/vc-templates/vc-templates.ts
|
36179
|
+
var getVCTemplatesPlugin = /* @__PURE__ */ __name((wallet) => {
|
36180
|
+
return {
|
36181
|
+
pluginMethods: __spreadProps(__spreadValues({}, recycleDependents(wallet.pluginMethods)), {
|
36182
|
+
newCredential: (_wallet, args = { type: "basic" }) => {
|
36183
|
+
var _a, _b;
|
36184
|
+
const did = args.did || ((_b = (_a = _wallet.pluginMethods).getSubjectDid) == null ? void 0 : _b.call(_a, "key"));
|
36185
|
+
if (!did)
|
36186
|
+
throw new Error("Could not get issuer did!");
|
36187
|
+
const defaults = {
|
36188
|
+
did,
|
36189
|
+
subject: "did:example:d23dd687a7dc6787646f2eb98d0",
|
36190
|
+
issuanceDate: "2020-08-19T21:41:50Z"
|
36191
|
+
};
|
36192
|
+
const _c = args, { type = "basic" } = _c, functionArgs = __objRest(_c, ["type"]);
|
36193
|
+
if (!(type in VC_TEMPLATES))
|
36194
|
+
throw new Error("Invalid Test VC Type!");
|
36195
|
+
return VC_TEMPLATES[type](__spreadValues(__spreadValues({}, defaults), functionArgs));
|
36196
|
+
},
|
36197
|
+
newPresentation: (_0, _1, ..._2) => __async(void 0, [_0, _1, ..._2], function* (_wallet, credential, args = {}) {
|
36198
|
+
var _a, _b;
|
36199
|
+
const did = (args == null ? void 0 : args.did) || ((_b = (_a = _wallet.pluginMethods).getSubjectDid) == null ? void 0 : _b.call(_a, "key"));
|
36200
|
+
if (!did)
|
36201
|
+
throw new Error("Could not get issuer did!");
|
36202
|
+
return {
|
36203
|
+
"@context": ["https://www.w3.org/2018/credentials/v1"],
|
36204
|
+
type: ["VerifiablePresentation"],
|
36205
|
+
holder: did,
|
36206
|
+
verifiableCredential: credential
|
36207
|
+
};
|
36208
|
+
})
|
36209
|
+
})
|
36210
|
+
};
|
36211
|
+
}, "getVCTemplatesPlugin");
|
36212
|
+
|
36090
36213
|
// ../../node_modules/.pnpm/zod@3.17.3/node_modules/zod/lib/index.mjs
|
36091
36214
|
var util;
|
36092
36215
|
(function(util2) {
|
@@ -38831,12 +38954,12 @@ var ImageValidator = mod.string().or(mod.object({
|
|
38831
38954
|
caption: mod.string().optional()
|
38832
38955
|
}));
|
38833
38956
|
var GeoCoordinatesValidator = mod.object({
|
38834
|
-
type: mod.string().array().nonempty(),
|
38957
|
+
type: mod.string().min(1).or(mod.string().array().nonempty()),
|
38835
38958
|
latitude: mod.number(),
|
38836
38959
|
longitude: mod.number()
|
38837
38960
|
});
|
38838
38961
|
var AddressValidator = mod.object({
|
38839
|
-
type: mod.string().array().nonempty(),
|
38962
|
+
type: mod.string().min(1).or(mod.string().array().nonempty()),
|
38840
38963
|
addressCountry: mod.string().optional(),
|
38841
38964
|
addressCountryCode: mod.string().optional(),
|
38842
38965
|
addressRegion: mod.string().optional(),
|
@@ -38867,7 +38990,7 @@ var IdentifierTypeValidator = mod.enum([
|
|
38867
38990
|
"identifier"
|
38868
38991
|
]).or(mod.string());
|
38869
38992
|
var IdentifierEntryValidator = mod.object({
|
38870
|
-
type: mod.string().array().nonempty(),
|
38993
|
+
type: mod.string().min(1).or(mod.string().array().nonempty()),
|
38871
38994
|
identifier: mod.string(),
|
38872
38995
|
identifierType: IdentifierTypeValidator
|
38873
38996
|
});
|
@@ -39087,7 +39210,7 @@ var AchievementSubjectValidator = mod.object({
|
|
39087
39210
|
activityStartDate: mod.string().optional(),
|
39088
39211
|
creditsEarned: mod.number().optional(),
|
39089
39212
|
achievement: AchievementValidator.optional(),
|
39090
|
-
identifier: IdentityObjectValidator.optional(),
|
39213
|
+
identifier: IdentityObjectValidator.array().optional(),
|
39091
39214
|
image: ImageValidator.optional(),
|
39092
39215
|
licenseNumber: mod.string().optional(),
|
39093
39216
|
narrative: mod.string().optional(),
|
@@ -39108,7 +39231,7 @@ var EvidenceValidator = mod.object({
|
|
39108
39231
|
var UnsignedAchievementCredentialValidator = UnsignedVCValidator.extend({
|
39109
39232
|
name: mod.string().optional(),
|
39110
39233
|
description: mod.string().optional(),
|
39111
|
-
image:
|
39234
|
+
image: ImageValidator.optional(),
|
39112
39235
|
credentialSubject: AchievementSubjectValidator.or(AchievementSubjectValidator.array()),
|
39113
39236
|
endorsement: UnsignedVCValidator.array().optional(),
|
39114
39237
|
evidence: EvidenceValidator.array().optional()
|
@@ -40755,9 +40878,12 @@ var verifyCredential2 = /* @__PURE__ */ __name((wallet) => {
|
|
40755
40878
|
// src/wallet/initializers/emptyWallet.ts
|
40756
40879
|
var emptyWallet = /* @__PURE__ */ __name((..._0) => __async(void 0, [..._0], function* ({ didkit } = {}) {
|
40757
40880
|
const didkitWallet = yield (yield generateWallet()).addPlugin(yield getDidKitPlugin(didkit));
|
40758
|
-
const
|
40881
|
+
const expirationWallet = yield didkitWallet.addPlugin(ExpirationPlugin(didkitWallet));
|
40882
|
+
const wallet = yield expirationWallet.addPlugin(getVCTemplatesPlugin(expirationWallet));
|
40759
40883
|
return {
|
40760
40884
|
_wallet: wallet,
|
40885
|
+
newCredential: wallet.pluginMethods.newCredential,
|
40886
|
+
newPresentation: wallet.pluginMethods.newPresentation,
|
40761
40887
|
verifyCredential: verifyCredential2(wallet),
|
40762
40888
|
verifyPresentation: wallet.pluginMethods.verifyPresentation,
|
40763
40889
|
resolveDid: wallet.pluginMethods.resolveDid
|
@@ -53455,16 +53581,7 @@ var CeramicClient = class {
|
|
53455
53581
|
__name(CeramicClient, "CeramicClient");
|
53456
53582
|
|
53457
53583
|
// src/wallet/plugins/idx/types.ts
|
53458
|
-
var
|
53459
|
-
var StorageTypeEnum2 = StorageTypeValidator2.enum;
|
53460
|
-
var CredentialMetadataValidator = mod.object({ name: mod.string().optional(), image: mod.string().optional() }).catchall(mod.any());
|
53461
|
-
var IDXCredentialValidator2 = mod.object({
|
53462
|
-
id: mod.string(),
|
53463
|
-
title: mod.string(),
|
53464
|
-
storageType: StorageTypeValidator2.optional(),
|
53465
|
-
metadata: CredentialMetadataValidator.optional()
|
53466
|
-
}).strict();
|
53467
|
-
var CredentialsListValidator = mod.object({ credentials: IDXCredentialValidator2.array() }).strict();
|
53584
|
+
var CredentialsListValidator = mod.object({ credentials: IDXCredentialValidator.array() }).strict();
|
53468
53585
|
|
53469
53586
|
// src/wallet/plugins/idx/idx.ts
|
53470
53587
|
var getCeramicClientFromWalletSuite = /* @__PURE__ */ __name((wallet, ceramicEndpoint) => __async(void 0, null, function* () {
|
@@ -53493,7 +53610,7 @@ var getIDXPlugin = /* @__PURE__ */ __name((_0, _1) => __async(void 0, [_0, _1],
|
|
53493
53610
|
throw new Error("Invalid credentials list stored in IDX");
|
53494
53611
|
}), "getCredentialsListFromIdx");
|
53495
53612
|
const addCredentialStreamIdToIdx = /* @__PURE__ */ __name((_record, alias) => __async(void 0, null, function* () {
|
53496
|
-
const record =
|
53613
|
+
const record = IDXCredentialValidator.parse(_record);
|
53497
53614
|
if (!record)
|
53498
53615
|
throw new Error("record is required");
|
53499
53616
|
if (!record.id)
|
@@ -53639,9 +53756,6 @@ var getDidKeyPlugin = /* @__PURE__ */ __name((wallet, key2) => __async(void 0, n
|
|
53639
53756
|
};
|
53640
53757
|
}), "getDidKeyPlugin");
|
53641
53758
|
|
53642
|
-
// src/wallet/helpers/wallet.helpers.ts
|
53643
|
-
var recycleDependents = /* @__PURE__ */ __name((_methods) => ({}), "recycleDependents");
|
53644
|
-
|
53645
53759
|
// src/wallet/plugins/vc/issueCredential.ts
|
53646
53760
|
var issueCredential2 = /* @__PURE__ */ __name((initWallet) => {
|
53647
53761
|
return (wallet, credential) => __async(void 0, null, function* () {
|
@@ -53685,7 +53799,7 @@ var verifyPresentation2 = /* @__PURE__ */ __name((initWallet) => {
|
|
53685
53799
|
}, "verifyPresentation");
|
53686
53800
|
|
53687
53801
|
// src/wallet/plugins/vc/vc.ts
|
53688
|
-
var getVCPlugin = /* @__PURE__ */ __name((wallet) =>
|
53802
|
+
var getVCPlugin = /* @__PURE__ */ __name((wallet) => {
|
53689
53803
|
return {
|
53690
53804
|
pluginMethods: __spreadProps(__spreadValues({}, recycleDependents(wallet.pluginMethods)), {
|
53691
53805
|
issueCredential: issueCredential2(wallet),
|
@@ -53715,7 +53829,7 @@ var getVCPlugin = /* @__PURE__ */ __name((wallet) => __async(void 0, null, funct
|
|
53715
53829
|
})
|
53716
53830
|
})
|
53717
53831
|
};
|
53718
|
-
}
|
53832
|
+
}, "getVCPlugin");
|
53719
53833
|
|
53720
53834
|
// src/wallet/plugins/EthereumPlugin/index.ts
|
53721
53835
|
var import_ethers2 = require("ethers");
|
@@ -57066,8 +57180,9 @@ var walletFromKey = /* @__PURE__ */ __name((_0, ..._1) => __async(void 0, [_0, .
|
|
57066
57180
|
} = {}) {
|
57067
57181
|
const didkitWallet = yield (yield generateWallet(defaultContents)).addPlugin(yield getDidKitPlugin(didkit));
|
57068
57182
|
const didkeyWallet = yield didkitWallet.addPlugin(yield getDidKeyPlugin(didkitWallet, key2));
|
57069
|
-
const didkeyAndVCWallet = yield didkeyWallet.addPlugin(
|
57070
|
-
const
|
57183
|
+
const didkeyAndVCWallet = yield didkeyWallet.addPlugin(getVCPlugin(didkeyWallet));
|
57184
|
+
const templateWallet = yield didkeyAndVCWallet.addPlugin(getVCTemplatesPlugin(didkeyAndVCWallet));
|
57185
|
+
const idxWallet = yield templateWallet.addPlugin(yield getIDXPlugin(templateWallet, ceramicIdx));
|
57071
57186
|
const expirationWallet = yield idxWallet.addPlugin(ExpirationPlugin(idxWallet));
|
57072
57187
|
const ethWallet = yield expirationWallet.addPlugin(getEthereumPlugin(expirationWallet, ethereumConfig));
|
57073
57188
|
const wallet = yield ethWallet.addPlugin(getVpqrPlugin(ethWallet));
|
@@ -57075,6 +57190,8 @@ var walletFromKey = /* @__PURE__ */ __name((_0, ..._1) => __async(void 0, [_0, .
|
|
57075
57190
|
_wallet: wallet,
|
57076
57191
|
did: (type = "key") => wallet.pluginMethods.getSubjectDid(type),
|
57077
57192
|
keypair: (type = "ed25519") => wallet.pluginMethods.getSubjectKeypair(type),
|
57193
|
+
newCredential: wallet.pluginMethods.newCredential,
|
57194
|
+
newPresentation: wallet.pluginMethods.newPresentation,
|
57078
57195
|
issueCredential: wallet.pluginMethods.issueCredential,
|
57079
57196
|
verifyCredential: verifyCredential2(wallet),
|
57080
57197
|
issuePresentation: wallet.pluginMethods.issuePresentation,
|