@learncard/core 6.4.0 → 7.0.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/dist/core.esm.js CHANGED
@@ -42103,7 +42103,7 @@ var IdentifierEntryValidator = mod.object({
42103
42103
  });
42104
42104
  var ProfileValidator = mod.string().or(mod.object({
42105
42105
  id: mod.string().optional(),
42106
- type: mod.string().array().nonempty().optional(),
42106
+ type: mod.string().or(mod.string().array().nonempty().optional()),
42107
42107
  name: mod.string().optional(),
42108
42108
  url: mod.string().optional(),
42109
42109
  phone: mod.string().optional(),
@@ -42367,13 +42367,7 @@ var CredentialInfoValidator = mod.object({
42367
42367
  issuee: ProfileValidator.optional(),
42368
42368
  credentialSubject: CredentialSubjectValidator.optional()
42369
42369
  });
42370
- var StorageTypeValidator = mod.enum(["ceramic"]);
42371
- var StorageTypeEnum = StorageTypeValidator.enum;
42372
- var IDXCredentialValidator = mod.object({
42373
- id: mod.string(),
42374
- title: mod.string(),
42375
- storageType: StorageTypeValidator.optional()
42376
- }).catchall(mod.any());
42370
+ var IDXCredentialValidator = mod.object({ id: mod.string(), uri: mod.string() }).catchall(mod.any());
42377
42371
  var JWKValidator = mod.object({
42378
42372
  kty: mod.string(),
42379
42373
  crv: mod.string(),
@@ -56701,8 +56695,16 @@ var CeramicClient = class {
56701
56695
  };
56702
56696
  __name(CeramicClient, "CeramicClient");
56703
56697
 
56698
+ // src/wallet/plugins/idx/helpers.ts
56699
+ var streamIdToCeramicURI = /* @__PURE__ */ __name((id) => `lc:ceramic:${id}`, "streamIdToCeramicURI");
56700
+
56704
56701
  // src/wallet/plugins/idx/types.ts
56702
+ 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})");
56705
56703
  var CredentialsListValidator = mod.object({ credentials: IDXCredentialValidator.array() }).strict();
56704
+ var BackwardsCompatIDXCredentialValidator = mod.object({ id: mod.string(), title: mod.string(), storageType: mod.literal("ceramic").optional() }).catchall(mod.any());
56705
+ var BackwardsCompatCredentialsListValidator = mod.object({
56706
+ credentials: IDXCredentialValidator.or(BackwardsCompatIDXCredentialValidator).array()
56707
+ }).strict();
56706
56708
 
56707
56709
  // src/wallet/plugins/idx/idx.ts
56708
56710
  var getCeramicClientFromWalletSuite = /* @__PURE__ */ __name((wallet, ceramicEndpoint) => __async(void 0, null, function* () {
@@ -56727,38 +56729,32 @@ var getIDXPlugin = /* @__PURE__ */ __name((_0, _1) => __async(void 0, [_0, _1],
56727
56729
  const validationResult = yield CredentialsListValidator.spa(list);
56728
56730
  if (validationResult.success)
56729
56731
  return validationResult.data;
56732
+ const backwardsCompatValidationResult = yield BackwardsCompatCredentialsListValidator.spa(list);
56733
+ if (backwardsCompatValidationResult.success) {
56734
+ const oldCreds = backwardsCompatValidationResult.data.credentials;
56735
+ const newCreds = oldCreds.map((cred) => {
56736
+ if ("uri" in cred)
56737
+ return cred;
56738
+ const _a = cred, { title, id, storageType } = _a, rest = __objRest(_a, ["title", "id", "storageType"]);
56739
+ return __spreadProps(__spreadValues({}, rest), {
56740
+ id: title,
56741
+ uri: `lc:ceramic:${id.replace("ceramic://", "")}`
56742
+ });
56743
+ });
56744
+ const credentialsList = { credentials: newCreds };
56745
+ yield dataStore.set(credentialAlias, credentialsList);
56746
+ return credentialsList;
56747
+ }
56730
56748
  console.error(validationResult.error);
56731
56749
  throw new Error("Invalid credentials list stored in IDX");
56732
56750
  }), "getCredentialsListFromIdx");
56733
- const addCredentialStreamIdToIdx = /* @__PURE__ */ __name((_record, alias) => __async(void 0, null, function* () {
56734
- const record = IDXCredentialValidator.parse(_record);
56735
- if (!record)
56736
- throw new Error("record is required");
56737
- if (!record.id)
56738
- throw Error("No streamId provided");
56739
- if (record.id.indexOf("ceramic://") === -1)
56740
- record.id = "ceramic://" + record.id;
56741
- if (!alias)
56742
- alias = credentialAlias;
56743
- const existing = yield getCredentialsListFromIdx(alias);
56744
- const indexOfExistingCredential = existing.credentials.findIndex((credential) => {
56745
- return credential.title === record.title;
56746
- });
56747
- if (indexOfExistingCredential > -1) {
56748
- existing.credentials[indexOfExistingCredential] = __spreadValues({
56749
- storageType: StorageTypeEnum.ceramic
56750
- }, record);
56751
- } else
56752
- existing.credentials.push(__spreadValues({ storageType: StorageTypeEnum.ceramic }, record));
56753
- return dataStore.set(alias, existing);
56754
- }), "addCredentialStreamIdToIdx");
56755
- const removeCredentialFromIdx = /* @__PURE__ */ __name((title, alias) => __async(void 0, null, function* () {
56756
- if (!title)
56757
- throw new Error("record is required");
56751
+ const removeCredentialFromIdx = /* @__PURE__ */ __name((id, alias) => __async(void 0, null, function* () {
56752
+ if (!id)
56753
+ throw new Error("Must provide id to remove");
56758
56754
  if (!alias)
56759
56755
  alias = credentialAlias;
56760
56756
  const existing = yield getCredentialsListFromIdx(alias);
56761
- existing.credentials = existing.credentials.filter((credential) => credential.title !== title);
56757
+ existing.credentials = existing.credentials.filter((credential) => credential.id !== id);
56762
56758
  return dataStore.set(alias, existing);
56763
56759
  }), "removeCredentialFromIdx");
56764
56760
  const publishContentToCeramic = /* @__PURE__ */ __name((_02, ..._12) => __async(void 0, [_02, ..._12], function* (content, metadata = {}, options = {}) {
@@ -56783,30 +56779,56 @@ var getIDXPlugin = /* @__PURE__ */ __name((_0, _1) => __async(void 0, [_0, _1],
56783
56779
  return getCredentialsListFromIdx(alias);
56784
56780
  }),
56785
56781
  publishContentToCeramic: (_wallet, cred) => __async(void 0, null, function* () {
56786
- return publishContentToCeramic(cred);
56782
+ return streamIdToCeramicURI(yield publishContentToCeramic(cred));
56787
56783
  }),
56788
56784
  readContentFromCeramic: (_wallet, streamId) => __async(void 0, null, function* () {
56789
56785
  return readContentFromCeramic(streamId);
56790
56786
  }),
56791
- getVerifiableCredentialFromIdx: (_wallet, title) => __async(void 0, null, function* () {
56787
+ getVerifiableCredentialFromIdx: (_wallet, id) => __async(void 0, null, function* () {
56792
56788
  var _a;
56793
56789
  const credentialList = yield getCredentialsListFromIdx();
56794
- const credential = (_a = credentialList == null ? void 0 : credentialList.credentials) == null ? void 0 : _a.find((cred) => (cred == null ? void 0 : cred.title) === title);
56795
- return credential && (yield readContentFromCeramic(credential.id));
56790
+ const credential = (_a = credentialList == null ? void 0 : credentialList.credentials) == null ? void 0 : _a.find((cred) => (cred == null ? void 0 : cred.id) === id);
56791
+ return (credential == null ? void 0 : credential.uri) ? _wallet.pluginMethods.resolveCredential(credential.uri) : void 0;
56796
56792
  }),
56797
- getVerifiableCredentialsFromIdx: () => __async(void 0, null, function* () {
56793
+ getVerifiableCredentialsFromIdx: (_wallet) => __async(void 0, null, function* () {
56798
56794
  var _a, _b;
56799
56795
  const credentialList = yield getCredentialsListFromIdx();
56800
- const streamIds = (_b = (_a = credentialList == null ? void 0 : credentialList.credentials) == null ? void 0 : _a.map((credential) => credential == null ? void 0 : credential.id)) != null ? _b : [];
56801
- return Promise.all(streamIds.map((streamId) => __async(void 0, null, function* () {
56802
- return readContentFromCeramic(streamId);
56803
- })));
56796
+ const uris = (_b = (_a = credentialList == null ? void 0 : credentialList.credentials) == null ? void 0 : _a.map((credential) => credential == null ? void 0 : credential.uri)) != null ? _b : [];
56797
+ return (yield Promise.all(uris.map((uri) => __async(void 0, null, function* () {
56798
+ return _wallet.pluginMethods.resolveCredential(uri);
56799
+ })))).filter((vc) => !!vc);
56804
56800
  }),
56805
56801
  addVerifiableCredentialInIdx: (_wallet, idxCredential) => __async(void 0, null, function* () {
56806
- return addCredentialStreamIdToIdx(idxCredential);
56802
+ const record = IDXCredentialValidator.parse(idxCredential);
56803
+ if (!record)
56804
+ throw new Error("record is required");
56805
+ if (!record.uri)
56806
+ throw Error("No URI provided");
56807
+ yield _wallet.pluginMethods.resolveCredential(record.uri);
56808
+ const existing = yield getCredentialsListFromIdx(credentialAlias);
56809
+ const indexOfExistingCredential = existing.credentials.findIndex((credential) => {
56810
+ return credential.id === record.id;
56811
+ });
56812
+ if (indexOfExistingCredential > -1) {
56813
+ existing.credentials[indexOfExistingCredential] = record;
56814
+ } else
56815
+ existing.credentials.push(record);
56816
+ return streamIdToCeramicURI(yield dataStore.set(credentialAlias, existing));
56817
+ }),
56818
+ removeVerifiableCredentialInIdx: (_wallet, id) => __async(void 0, null, function* () {
56819
+ return removeCredentialFromIdx(id);
56807
56820
  }),
56808
- removeVerifiableCredentialInIdx: (_wallet, title) => __async(void 0, null, function* () {
56809
- return removeCredentialFromIdx(title);
56821
+ resolveCredential: (_wallet, uri) => __async(void 0, null, function* () {
56822
+ if (!uri)
56823
+ return void 0;
56824
+ if (uri.startsWith("ceramic://")) {
56825
+ return VCValidator.parseAsync(yield readContentFromCeramic(uri));
56826
+ }
56827
+ const verificationResult = yield CeramicURIValidator.spa(uri);
56828
+ if (!verificationResult.success)
56829
+ return wallet.pluginMethods.resolveCredential(uri);
56830
+ const streamId = verificationResult.data.split(":")[2];
56831
+ return VCValidator.parseAsync(yield readContentFromCeramic(streamId));
56810
56832
  })
56811
56833
  }
56812
56834
  };
@@ -60297,6 +60319,15 @@ var defaultEthereumArgs = {
60297
60319
  network: "mainnet"
60298
60320
  };
60299
60321
 
60322
+ // src/wallet/plugins/vc-resolution/index.ts
60323
+ var VCResolutionPlugin = {
60324
+ pluginMethods: {
60325
+ resolveCredential: (_wallet, uri) => __async(void 0, null, function* () {
60326
+ throw new Error(`No Credential Resolution Plugins found that can resolve ${uri}`);
60327
+ })
60328
+ }
60329
+ };
60330
+
60300
60331
  // src/wallet/initializers/walletFromKey.ts
60301
60332
  var walletFromKey = /* @__PURE__ */ __name((_0, ..._1) => __async(void 0, [_0, ..._1], function* (key2, {
60302
60333
  ceramicIdx = defaultCeramicIDXArgs,
@@ -60308,7 +60339,8 @@ var walletFromKey = /* @__PURE__ */ __name((_0, ..._1) => __async(void 0, [_0, .
60308
60339
  const didkeyWallet = yield didkitWallet.addPlugin(yield getDidKeyPlugin(didkitWallet, key2));
60309
60340
  const didkeyAndVCWallet = yield didkeyWallet.addPlugin(getVCPlugin(didkeyWallet));
60310
60341
  const templateWallet = yield didkeyAndVCWallet.addPlugin(getVCTemplatesPlugin());
60311
- const idxWallet = yield templateWallet.addPlugin(yield getIDXPlugin(templateWallet, ceramicIdx));
60342
+ const resolutionWallet = yield templateWallet.addPlugin(VCResolutionPlugin);
60343
+ const idxWallet = yield resolutionWallet.addPlugin(yield getIDXPlugin(resolutionWallet, ceramicIdx));
60312
60344
  const expirationWallet = yield idxWallet.addPlugin(ExpirationPlugin(idxWallet));
60313
60345
  const ethWallet = yield expirationWallet.addPlugin(getEthereumPlugin(expirationWallet, ethereumConfig));
60314
60346
  const vpqrWallet = yield ethWallet.addPlugin(getVpqrPlugin(ethWallet));
@@ -60337,6 +60369,7 @@ var walletFromKey = /* @__PURE__ */ __name((_0, ..._1) => __async(void 0, [_0, .
60337
60369
  }),
60338
60370
  resolveDid: wallet.pluginMethods.resolveDid,
60339
60371
  readFromCeramic: wallet.pluginMethods.readContentFromCeramic,
60372
+ resolveCredential: wallet.pluginMethods.resolveCredential,
60340
60373
  getTestVc: wallet.pluginMethods.getTestVc,
60341
60374
  getTestVp: wallet.pluginMethods.getTestVp,
60342
60375
  vpFromQrCode: wallet.pluginMethods.vpFromQrCode,
@@ -60488,6 +60521,9 @@ function initLearnCard() {
60488
60521
  }
60489
60522
  __name(initLearnCard, "initLearnCard");
60490
60523
  export {
60524
+ BackwardsCompatCredentialsListValidator,
60525
+ BackwardsCompatIDXCredentialValidator,
60526
+ CeramicURIValidator,
60491
60527
  CredentialsListValidator,
60492
60528
  ExpirationPlugin,
60493
60529
  emptyWallet,