@learncard/core 6.3.1 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -36927,6 +36927,9 @@ var require_base32_decode = __commonJS({
36927
36927
  // src/index.ts
36928
36928
  var src_exports2 = {};
36929
36929
  __export(src_exports2, {
36930
+ BackwardsCompatCredentialsListValidator: () => BackwardsCompatCredentialsListValidator,
36931
+ BackwardsCompatIDXCredentialValidator: () => BackwardsCompatIDXCredentialValidator,
36932
+ CeramicURIValidator: () => CeramicURIValidator,
36930
36933
  CredentialsListValidator: () => CredentialsListValidator,
36931
36934
  ExpirationPlugin: () => ExpirationPlugin,
36932
36935
  emptyWallet: () => emptyWallet,
@@ -42192,7 +42195,7 @@ var AlignmentValidator = mod.object({
42192
42195
  targetType: AlignmentTargetTypeValidator.optional(),
42193
42196
  targetUrl: mod.string()
42194
42197
  });
42195
- var AchievementTypeValidator = mod.enum([
42198
+ var KnownAchievementTypeValidator = mod.enum([
42196
42199
  "Achievement",
42197
42200
  "ApprenticeshipCertificate",
42198
42201
  "Assessment",
@@ -42224,7 +42227,8 @@ var AchievementTypeValidator = mod.enum([
42224
42227
  "MicroCredential",
42225
42228
  "ResearchDoctorate",
42226
42229
  "SecondarySchoolDiploma"
42227
- ]).or(mod.string());
42230
+ ]);
42231
+ var AchievementTypeValidator = KnownAchievementTypeValidator.or(mod.string());
42228
42232
  var CriteriaValidator = mod.object({ id: mod.string().optional(), narrative: mod.string().optional() }).catchall(mod.any());
42229
42233
  var EndorsementSubjectValidator = mod.object({
42230
42234
  id: mod.string(),
@@ -42377,13 +42381,7 @@ var CredentialInfoValidator = mod.object({
42377
42381
  issuee: ProfileValidator.optional(),
42378
42382
  credentialSubject: CredentialSubjectValidator.optional()
42379
42383
  });
42380
- var StorageTypeValidator = mod.enum(["ceramic"]);
42381
- var StorageTypeEnum = StorageTypeValidator.enum;
42382
- var IDXCredentialValidator = mod.object({
42383
- id: mod.string(),
42384
- title: mod.string(),
42385
- storageType: StorageTypeValidator.optional()
42386
- });
42384
+ var IDXCredentialValidator = mod.object({ id: mod.string(), uri: mod.string() }).catchall(mod.any());
42387
42385
  var JWKValidator = mod.object({
42388
42386
  kty: mod.string(),
42389
42387
  crv: mod.string(),
@@ -56711,8 +56709,16 @@ var CeramicClient = class {
56711
56709
  };
56712
56710
  __name(CeramicClient, "CeramicClient");
56713
56711
 
56712
+ // src/wallet/plugins/idx/helpers.ts
56713
+ var streamIdToCeramicURI = /* @__PURE__ */ __name((id) => `lc:ceramic:${id}`, "streamIdToCeramicURI");
56714
+
56714
56715
  // src/wallet/plugins/idx/types.ts
56716
+ var CeramicURIValidator = mod.string().refine((string2) => string2.split(":").length === 3 && string2.split(":")[0] === "lc", "URI must be of the form lc:${storage}:${url}").refine((string2) => string2.split(":")[1] === "ceramic", "URI must use storage type ceramic (i.e. must be lc:ceramic:${streamID})");
56715
56717
  var CredentialsListValidator = mod.object({ credentials: IDXCredentialValidator.array() }).strict();
56718
+ var BackwardsCompatIDXCredentialValidator = mod.object({ id: mod.string(), title: mod.string(), storageType: mod.literal("ceramic").optional() }).catchall(mod.any());
56719
+ var BackwardsCompatCredentialsListValidator = mod.object({
56720
+ credentials: IDXCredentialValidator.or(BackwardsCompatIDXCredentialValidator).array()
56721
+ }).strict();
56716
56722
 
56717
56723
  // src/wallet/plugins/idx/idx.ts
56718
56724
  var getCeramicClientFromWalletSuite = /* @__PURE__ */ __name((wallet, ceramicEndpoint) => __async(void 0, null, function* () {
@@ -56737,38 +56743,32 @@ var getIDXPlugin = /* @__PURE__ */ __name((_0, _1) => __async(void 0, [_0, _1],
56737
56743
  const validationResult = yield CredentialsListValidator.spa(list);
56738
56744
  if (validationResult.success)
56739
56745
  return validationResult.data;
56746
+ const backwardsCompatValidationResult = yield BackwardsCompatCredentialsListValidator.spa(list);
56747
+ if (backwardsCompatValidationResult.success) {
56748
+ const oldCreds = backwardsCompatValidationResult.data.credentials;
56749
+ const newCreds = oldCreds.map((cred) => {
56750
+ if ("uri" in cred)
56751
+ return cred;
56752
+ const _a = cred, { title, id, storageType } = _a, rest = __objRest(_a, ["title", "id", "storageType"]);
56753
+ return __spreadProps(__spreadValues({}, rest), {
56754
+ id: title,
56755
+ uri: `lc:ceramic:${id.replace("ceramic://", "")}`
56756
+ });
56757
+ });
56758
+ const credentialsList = { credentials: newCreds };
56759
+ yield dataStore.set(credentialAlias, credentialsList);
56760
+ return credentialsList;
56761
+ }
56740
56762
  console.error(validationResult.error);
56741
56763
  throw new Error("Invalid credentials list stored in IDX");
56742
56764
  }), "getCredentialsListFromIdx");
56743
- const addCredentialStreamIdToIdx = /* @__PURE__ */ __name((_record, alias) => __async(void 0, null, function* () {
56744
- const record = IDXCredentialValidator.parse(_record);
56745
- if (!record)
56746
- throw new Error("record is required");
56747
- if (!record.id)
56748
- throw Error("No streamId provided");
56749
- if (record.id.indexOf("ceramic://") === -1)
56750
- record.id = "ceramic://" + record.id;
56751
- if (!alias)
56752
- alias = credentialAlias;
56753
- const existing = yield getCredentialsListFromIdx(alias);
56754
- const indexOfExistingCredential = existing.credentials.findIndex((credential) => {
56755
- return credential.title === record.title;
56756
- });
56757
- if (indexOfExistingCredential > -1) {
56758
- existing.credentials[indexOfExistingCredential] = __spreadValues({
56759
- storageType: StorageTypeEnum.ceramic
56760
- }, record);
56761
- } else
56762
- existing.credentials.push(__spreadValues({ storageType: StorageTypeEnum.ceramic }, record));
56763
- return dataStore.set(alias, existing);
56764
- }), "addCredentialStreamIdToIdx");
56765
- const removeCredentialFromIdx = /* @__PURE__ */ __name((title, alias) => __async(void 0, null, function* () {
56766
- if (!title)
56767
- throw new Error("record is required");
56765
+ const removeCredentialFromIdx = /* @__PURE__ */ __name((id, alias) => __async(void 0, null, function* () {
56766
+ if (!id)
56767
+ throw new Error("Must provide id to remove");
56768
56768
  if (!alias)
56769
56769
  alias = credentialAlias;
56770
56770
  const existing = yield getCredentialsListFromIdx(alias);
56771
- existing.credentials = existing.credentials.filter((credential) => credential.title !== title);
56771
+ existing.credentials = existing.credentials.filter((credential) => credential.id !== id);
56772
56772
  return dataStore.set(alias, existing);
56773
56773
  }), "removeCredentialFromIdx");
56774
56774
  const publishContentToCeramic = /* @__PURE__ */ __name((_02, ..._12) => __async(void 0, [_02, ..._12], function* (content, metadata = {}, options = {}) {
@@ -56793,30 +56793,56 @@ var getIDXPlugin = /* @__PURE__ */ __name((_0, _1) => __async(void 0, [_0, _1],
56793
56793
  return getCredentialsListFromIdx(alias);
56794
56794
  }),
56795
56795
  publishContentToCeramic: (_wallet, cred) => __async(void 0, null, function* () {
56796
- return publishContentToCeramic(cred);
56796
+ return streamIdToCeramicURI(yield publishContentToCeramic(cred));
56797
56797
  }),
56798
56798
  readContentFromCeramic: (_wallet, streamId) => __async(void 0, null, function* () {
56799
56799
  return readContentFromCeramic(streamId);
56800
56800
  }),
56801
- getVerifiableCredentialFromIdx: (_wallet, title) => __async(void 0, null, function* () {
56801
+ getVerifiableCredentialFromIdx: (_wallet, id) => __async(void 0, null, function* () {
56802
56802
  var _a;
56803
56803
  const credentialList = yield getCredentialsListFromIdx();
56804
- const credential = (_a = credentialList == null ? void 0 : credentialList.credentials) == null ? void 0 : _a.find((cred) => (cred == null ? void 0 : cred.title) === title);
56805
- return credential && (yield readContentFromCeramic(credential.id));
56804
+ const credential = (_a = credentialList == null ? void 0 : credentialList.credentials) == null ? void 0 : _a.find((cred) => (cred == null ? void 0 : cred.id) === id);
56805
+ return (credential == null ? void 0 : credential.uri) ? _wallet.pluginMethods.resolveCredential(credential.uri) : void 0;
56806
56806
  }),
56807
- getVerifiableCredentialsFromIdx: () => __async(void 0, null, function* () {
56807
+ getVerifiableCredentialsFromIdx: (_wallet) => __async(void 0, null, function* () {
56808
56808
  var _a, _b;
56809
56809
  const credentialList = yield getCredentialsListFromIdx();
56810
- const streamIds = (_b = (_a = credentialList == null ? void 0 : credentialList.credentials) == null ? void 0 : _a.map((credential) => credential == null ? void 0 : credential.id)) != null ? _b : [];
56811
- return Promise.all(streamIds.map((streamId) => __async(void 0, null, function* () {
56812
- return readContentFromCeramic(streamId);
56813
- })));
56810
+ const uris = (_b = (_a = credentialList == null ? void 0 : credentialList.credentials) == null ? void 0 : _a.map((credential) => credential == null ? void 0 : credential.uri)) != null ? _b : [];
56811
+ return (yield Promise.all(uris.map((uri) => __async(void 0, null, function* () {
56812
+ return _wallet.pluginMethods.resolveCredential(uri);
56813
+ })))).filter((vc) => !!vc);
56814
56814
  }),
56815
56815
  addVerifiableCredentialInIdx: (_wallet, idxCredential) => __async(void 0, null, function* () {
56816
- return addCredentialStreamIdToIdx(idxCredential);
56816
+ const record = IDXCredentialValidator.parse(idxCredential);
56817
+ if (!record)
56818
+ throw new Error("record is required");
56819
+ if (!record.uri)
56820
+ throw Error("No URI provided");
56821
+ yield _wallet.pluginMethods.resolveCredential(record.uri);
56822
+ const existing = yield getCredentialsListFromIdx(credentialAlias);
56823
+ const indexOfExistingCredential = existing.credentials.findIndex((credential) => {
56824
+ return credential.id === record.id;
56825
+ });
56826
+ if (indexOfExistingCredential > -1) {
56827
+ existing.credentials[indexOfExistingCredential] = record;
56828
+ } else
56829
+ existing.credentials.push(record);
56830
+ return streamIdToCeramicURI(yield dataStore.set(credentialAlias, existing));
56817
56831
  }),
56818
- removeVerifiableCredentialInIdx: (_wallet, title) => __async(void 0, null, function* () {
56819
- return removeCredentialFromIdx(title);
56832
+ removeVerifiableCredentialInIdx: (_wallet, id) => __async(void 0, null, function* () {
56833
+ return removeCredentialFromIdx(id);
56834
+ }),
56835
+ resolveCredential: (_wallet, uri) => __async(void 0, null, function* () {
56836
+ if (!uri)
56837
+ return void 0;
56838
+ if (uri.startsWith("ceramic://")) {
56839
+ return VCValidator.parseAsync(yield readContentFromCeramic(uri));
56840
+ }
56841
+ const verificationResult = yield CeramicURIValidator.spa(uri);
56842
+ if (!verificationResult.success)
56843
+ return wallet.pluginMethods.resolveCredential(uri);
56844
+ const streamId = verificationResult.data.split(":")[2];
56845
+ return VCValidator.parseAsync(yield readContentFromCeramic(streamId));
56820
56846
  })
56821
56847
  }
56822
56848
  };
@@ -60307,6 +60333,15 @@ var defaultEthereumArgs = {
60307
60333
  network: "mainnet"
60308
60334
  };
60309
60335
 
60336
+ // src/wallet/plugins/vc-resolution/index.ts
60337
+ var VCResolutionPlugin = {
60338
+ pluginMethods: {
60339
+ resolveCredential: (_wallet, uri) => __async(void 0, null, function* () {
60340
+ throw new Error(`No Credential Resolution Plugins found that can resolve ${uri}`);
60341
+ })
60342
+ }
60343
+ };
60344
+
60310
60345
  // src/wallet/initializers/walletFromKey.ts
60311
60346
  var walletFromKey = /* @__PURE__ */ __name((_0, ..._1) => __async(void 0, [_0, ..._1], function* (key2, {
60312
60347
  ceramicIdx = defaultCeramicIDXArgs,
@@ -60318,7 +60353,8 @@ var walletFromKey = /* @__PURE__ */ __name((_0, ..._1) => __async(void 0, [_0, .
60318
60353
  const didkeyWallet = yield didkitWallet.addPlugin(yield getDidKeyPlugin(didkitWallet, key2));
60319
60354
  const didkeyAndVCWallet = yield didkeyWallet.addPlugin(getVCPlugin(didkeyWallet));
60320
60355
  const templateWallet = yield didkeyAndVCWallet.addPlugin(getVCTemplatesPlugin());
60321
- const idxWallet = yield templateWallet.addPlugin(yield getIDXPlugin(templateWallet, ceramicIdx));
60356
+ const resolutionWallet = yield templateWallet.addPlugin(VCResolutionPlugin);
60357
+ const idxWallet = yield resolutionWallet.addPlugin(yield getIDXPlugin(resolutionWallet, ceramicIdx));
60322
60358
  const expirationWallet = yield idxWallet.addPlugin(ExpirationPlugin(idxWallet));
60323
60359
  const ethWallet = yield expirationWallet.addPlugin(getEthereumPlugin(expirationWallet, ethereumConfig));
60324
60360
  const vpqrWallet = yield ethWallet.addPlugin(getVpqrPlugin(ethWallet));
@@ -60347,6 +60383,7 @@ var walletFromKey = /* @__PURE__ */ __name((_0, ..._1) => __async(void 0, [_0, .
60347
60383
  }),
60348
60384
  resolveDid: wallet.pluginMethods.resolveDid,
60349
60385
  readFromCeramic: wallet.pluginMethods.readContentFromCeramic,
60386
+ resolveCredential: wallet.pluginMethods.resolveCredential,
60350
60387
  getTestVc: wallet.pluginMethods.getTestVc,
60351
60388
  getTestVp: wallet.pluginMethods.getTestVp,
60352
60389
  vpFromQrCode: wallet.pluginMethods.vpFromQrCode,