@learncard/learn-cloud-plugin 1.0.6 → 1.1.0

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/helpers.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { CredentialRecord, JWE, EncryptedCredentialRecord } from '@learncard/types';
1
+ import { JWE, EncryptedRecord } from '@learncard/types';
2
2
  import { LearnCloudDependentLearnCard } from './types';
3
3
  export declare const hash: (learnCard: LearnCloudDependentLearnCard, message: string) => Promise<string>;
4
4
  export declare const generateJWE: (learnCard: LearnCloudDependentLearnCard, learnCloudDid: string, item: any) => Promise<JWE>;
5
5
  export declare const decryptJWE: <T>(learnCard: LearnCloudDependentLearnCard, jwe: JWE) => Promise<T>;
6
- export declare const generateEncryptedFieldsArray: (learnCard: LearnCloudDependentLearnCard, record: CredentialRecord, unencryptedFields?: string[]) => Promise<string[]>;
7
- export declare const generateEncryptedRecord: (learnCard: LearnCloudDependentLearnCard, record: CredentialRecord, unencryptedFields?: string[]) => Promise<Omit<EncryptedCredentialRecord, 'id'>>;
6
+ export declare const generateEncryptedFieldsArray: (learnCard: LearnCloudDependentLearnCard, record: Record<string, any>, unencryptedFields?: string[]) => Promise<string[]>;
7
+ export declare const generateEncryptedRecord: (learnCard: LearnCloudDependentLearnCard, record: Record<string, any>, unencryptedFields?: string[]) => Promise<EncryptedRecord>;
@@ -6972,6 +6972,7 @@ var require_types_cjs_development = __commonJS2({
6972
6972
  CredentialSubjectValidator: () => CredentialSubjectValidator2,
6973
6973
  CriteriaValidator: () => CriteriaValidator2,
6974
6974
  EncryptedCredentialRecordValidator: () => EncryptedCredentialRecordValidator2,
6975
+ EncryptedRecordValidator: () => EncryptedRecordValidator2,
6975
6976
  EndorsementCredentialValidator: () => EndorsementCredentialValidator2,
6976
6977
  EndorsementSubjectValidator: () => EndorsementSubjectValidator2,
6977
6978
  EvidenceValidator: () => EvidenceValidator2,
@@ -6997,6 +6998,7 @@ var require_types_cjs_development = __commonJS2({
6997
6998
  LCNSigningAuthorityForUserValidator: () => LCNSigningAuthorityForUserValidator2,
6998
6999
  LCNSigningAuthorityValidator: () => LCNSigningAuthorityValidator2,
6999
7000
  PaginatedEncryptedCredentialRecordsValidator: () => PaginatedEncryptedCredentialRecordsValidator2,
7001
+ PaginatedEncryptedRecordsValidator: () => PaginatedEncryptedRecordsValidator2,
7000
7002
  PaginationOptionsValidator: () => PaginationOptionsValidator2,
7001
7003
  PaginationResponseValidator: () => PaginationResponseValidator2,
7002
7004
  ProfileValidator: () => ProfileValidator2,
@@ -10762,11 +10764,13 @@ var require_types_cjs_development = __commonJS2({
10762
10764
  aad: mod2.string().optional(),
10763
10765
  recipients: JWERecipientValidator2.array().optional()
10764
10766
  });
10765
- var EncryptedCredentialRecordValidator2 = mod2.object({
10766
- encryptedRecord: JWEValidator2,
10767
- fields: mod2.string().array(),
10767
+ var EncryptedRecordValidator2 = mod2.object({ encryptedRecord: JWEValidator2, fields: mod2.string().array() }).catchall(mod2.any());
10768
+ var PaginatedEncryptedRecordsValidator2 = PaginationResponseValidator2.extend({
10769
+ records: EncryptedRecordValidator2.array()
10770
+ });
10771
+ var EncryptedCredentialRecordValidator2 = EncryptedRecordValidator2.extend({
10768
10772
  id: mod2.string()
10769
- }).catchall(mod2.any());
10773
+ });
10770
10774
  var PaginatedEncryptedCredentialRecordsValidator2 = PaginationResponseValidator2.extend({
10771
10775
  records: EncryptedCredentialRecordValidator2.array()
10772
10776
  });
@@ -14584,11 +14588,13 @@ var JWEValidator = mod.object({
14584
14588
  aad: mod.string().optional(),
14585
14589
  recipients: JWERecipientValidator.array().optional()
14586
14590
  });
14587
- var EncryptedCredentialRecordValidator = mod.object({
14588
- encryptedRecord: JWEValidator,
14589
- fields: mod.string().array(),
14591
+ var EncryptedRecordValidator = mod.object({ encryptedRecord: JWEValidator, fields: mod.string().array() }).catchall(mod.any());
14592
+ var PaginatedEncryptedRecordsValidator = PaginationResponseValidator.extend({
14593
+ records: EncryptedRecordValidator.array()
14594
+ });
14595
+ var EncryptedCredentialRecordValidator = EncryptedRecordValidator.extend({
14590
14596
  id: mod.string()
14591
- }).catchall(mod.any());
14597
+ });
14592
14598
  var PaginatedEncryptedCredentialRecordsValidator = PaginationResponseValidator.extend({
14593
14599
  records: EncryptedCredentialRecordValidator.array()
14594
14600
  });
@@ -14791,7 +14797,7 @@ var getLearnCloudClient = /* @__PURE__ */ __name(async (url, learnCard) => {
14791
14797
  return jwt;
14792
14798
  });
14793
14799
  }, "getLearnCloudClient");
14794
- var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url, unencryptedFields = []) => {
14800
+ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url, unencryptedFields = [], unencryptedCustomFields = []) => {
14795
14801
  let learnCard = initialLearnCard;
14796
14802
  learnCard.debug?.("Adding LearnCloud Plugin");
14797
14803
  let client = await getLearnCloudClient(url, learnCard);
@@ -14817,7 +14823,166 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url, u
14817
14823
  name: "LearnCloud",
14818
14824
  displayName: "LearnCloud",
14819
14825
  description: "LearnCloud Integration",
14820
- methods: {},
14826
+ methods: {
14827
+ learnCloudCreate: async (_learnCard, document) => {
14828
+ await updateLearnCard(_learnCard);
14829
+ const item = await generateEncryptedRecord(
14830
+ _learnCard,
14831
+ document,
14832
+ unencryptedCustomFields
14833
+ );
14834
+ return client.customStorage.create.mutate({
14835
+ item: await generateJWE(_learnCard, learnCloudDid, item)
14836
+ });
14837
+ },
14838
+ learnCloudCreateMany: async (_learnCard, documents) => {
14839
+ await updateLearnCard(_learnCard);
14840
+ const items = await Promise.all(
14841
+ documents.map(
14842
+ async (document) => generateEncryptedRecord(_learnCard, document, unencryptedCustomFields)
14843
+ )
14844
+ );
14845
+ return client.customStorage.createMany.mutate({
14846
+ items: await generateJWE(_learnCard, learnCloudDid, items)
14847
+ });
14848
+ },
14849
+ learnCloudRead: async (_learnCard, query, includeAssociatedDids) => {
14850
+ await updateLearnCard(_learnCard);
14851
+ const documents = [];
14852
+ let result = await _learnCard.invoke.learnCloudReadPage(
14853
+ query,
14854
+ {},
14855
+ includeAssociatedDids
14856
+ );
14857
+ documents.push(...result.records);
14858
+ while (result.hasMore) {
14859
+ result = await _learnCard.invoke.learnCloudReadPage(
14860
+ query,
14861
+ {},
14862
+ includeAssociatedDids
14863
+ );
14864
+ documents.push(...result.records);
14865
+ }
14866
+ return documents;
14867
+ },
14868
+ learnCloudReadPage: async (_learnCard, query, paginationOptions, includeAssociatedDids) => {
14869
+ await updateLearnCard(_learnCard);
14870
+ if (!query) {
14871
+ const jwe2 = await client.customStorage.read.query({
14872
+ includeAssociatedDids,
14873
+ ...paginationOptions
14874
+ });
14875
+ const encryptedRecords2 = isEncrypted(jwe2) ? await decryptJWE(_learnCard, jwe2) : jwe2;
14876
+ return {
14877
+ ...encryptedRecords2,
14878
+ records: await Promise.all(
14879
+ encryptedRecords2.records.map(async (record) => ({
14880
+ ...await decryptJWE(
14881
+ _learnCard,
14882
+ record.encryptedRecord
14883
+ ),
14884
+ _id: record._id
14885
+ }))
14886
+ )
14887
+ };
14888
+ }
14889
+ const fields = await generateEncryptedFieldsArray(_learnCard, query, [
14890
+ ...unencryptedCustomFields,
14891
+ "_id"
14892
+ ]);
14893
+ const unencryptedEntries = Object.fromEntries(
14894
+ Object.entries(query).filter(
14895
+ ([key]) => [...unencryptedCustomFields, "_id"].includes(key)
14896
+ )
14897
+ );
14898
+ const jwe = await client.customStorage.read.query({
14899
+ query: await generateJWE(_learnCard, learnCloudDid, {
14900
+ ...unencryptedEntries,
14901
+ ...fields.length > 0 ? { fields: { $in: fields } } : {}
14902
+ }),
14903
+ ...paginationOptions,
14904
+ includeAssociatedDids
14905
+ });
14906
+ const encryptedRecords = isEncrypted(jwe) ? await decryptJWE(_learnCard, jwe) : jwe;
14907
+ return {
14908
+ ...encryptedRecords,
14909
+ records: await Promise.all(
14910
+ encryptedRecords.records.map(async (record) => ({
14911
+ ...await decryptJWE(
14912
+ _learnCard,
14913
+ record.encryptedRecord
14914
+ ),
14915
+ _id: record._id
14916
+ }))
14917
+ )
14918
+ };
14919
+ },
14920
+ learnCloudCount: async (_learnCard, query, includeAssociatedDids) => {
14921
+ await updateLearnCard(_learnCard);
14922
+ if (!query)
14923
+ return client.customStorage.count.query({ includeAssociatedDids });
14924
+ const fields = await generateEncryptedFieldsArray(_learnCard, query, [
14925
+ ...unencryptedCustomFields,
14926
+ "_id"
14927
+ ]);
14928
+ const unencryptedEntries = Object.fromEntries(
14929
+ Object.entries(query).filter(
14930
+ ([key]) => [...unencryptedCustomFields, "_id"].includes(key)
14931
+ )
14932
+ );
14933
+ return client.customStorage.count.query({
14934
+ query: await generateJWE(_learnCard, learnCloudDid, {
14935
+ ...unencryptedEntries,
14936
+ ...fields.length > 0 ? { fields: { $in: fields } } : {}
14937
+ }),
14938
+ includeAssociatedDids
14939
+ });
14940
+ },
14941
+ learnCloudUpdate: async (_learnCard, query, update) => {
14942
+ await updateLearnCard(_learnCard);
14943
+ const documents = await _learnCard.invoke.learnCloudRead(query);
14944
+ const updates = await Promise.all(
14945
+ documents.map(
14946
+ async (document) => client.customStorage.update.mutate({
14947
+ query: await generateJWE(_learnCard, learnCloudDid, {
14948
+ _id: document._id
14949
+ }),
14950
+ update: await generateJWE(
14951
+ _learnCard,
14952
+ learnCloudDid,
14953
+ await generateEncryptedRecord(
14954
+ _learnCard,
14955
+ { ...document, ...update },
14956
+ unencryptedCustomFields
14957
+ )
14958
+ )
14959
+ })
14960
+ )
14961
+ );
14962
+ return updates.reduce((sum, current) => current + sum, 0);
14963
+ },
14964
+ learnCloudDelete: async (_learnCard, query, includeAssociatedDids) => {
14965
+ await updateLearnCard(_learnCard);
14966
+ if (!query)
14967
+ return client.customStorage.delete.mutate({ includeAssociatedDids });
14968
+ const fields = await generateEncryptedFieldsArray(_learnCard, query, [
14969
+ ...unencryptedCustomFields,
14970
+ "_id"
14971
+ ]);
14972
+ const unencryptedEntries = Object.fromEntries(
14973
+ Object.entries(query).filter(
14974
+ ([key]) => [...unencryptedCustomFields, "_id"].includes(key)
14975
+ )
14976
+ );
14977
+ return client.customStorage.delete.mutate({
14978
+ query: await generateJWE(_learnCard, learnCloudDid, {
14979
+ ...unencryptedEntries,
14980
+ ...fields.length > 0 ? { fields: { $in: fields } } : {}
14981
+ }),
14982
+ includeAssociatedDids
14983
+ });
14984
+ }
14985
+ },
14821
14986
  read: {
14822
14987
  get: async (_learnCard, uri) => {
14823
14988
  if (!uri)
@@ -14901,7 +15066,7 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url, u
14901
15066
  const jwe = await client.index.get.query({
14902
15067
  query: await generateJWE(_learnCard, learnCloudDid, {
14903
15068
  ...unencryptedEntries,
14904
- fields: { $in: fields }
15069
+ ...fields.length > 0 ? { fields: { $in: fields } } : {}
14905
15070
  }),
14906
15071
  ...paginationOptions
14907
15072
  });
@@ -14947,7 +15112,7 @@ var getLearnCloudPlugin = /* @__PURE__ */ __name(async (initialLearnCard, url, u
14947
15112
  const jwe = await client.index.count.query({
14948
15113
  query: await generateJWE(_learnCard, learnCloudDid, {
14949
15114
  ...unencryptedEntries,
14950
- fields: { $in: fields }
15115
+ ...fields.length > 0 ? { fields: { $in: fields } } : {}
14951
15116
  })
14952
15117
  });
14953
15118
  _learnCard.debug?.("LearnCloud index.count (query response)", jwe);