@learncard/core 9.4.13 → 9.4.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/core.cjs.development.cjs +25 -4
- package/dist/core.cjs.development.cjs.map +2 -2
- package/dist/core.cjs.production.min.cjs +1 -1
- package/dist/core.cjs.production.min.cjs.map +3 -3
- package/dist/core.esm.js +25 -4
- package/dist/core.esm.js.map +2 -2
- package/dist/types/planes.d.ts +1 -0
- package/dist/types/planes.d.ts.map +1 -1
- package/dist/wallet/base/wallet.d.ts.map +1 -1
- package/dist/wallet/plugins/test-storage/index.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -138,6 +138,15 @@ var addCachingToStorePlane = /* @__PURE__ */ __name((plane) => ({
|
|
|
138
138
|
}
|
|
139
139
|
return uri;
|
|
140
140
|
}, "uploadEncrypted")
|
|
141
|
+
} : {},
|
|
142
|
+
..."delete" in plane ? {
|
|
143
|
+
delete: /* @__PURE__ */ __name(async (_learnCard, uri, { cache = "cache-first" } = {}) => {
|
|
144
|
+
const result = await plane.delete?.(_learnCard, uri);
|
|
145
|
+
if (result && cache !== "skip-cache" && learnCardImplementsPlane(_learnCard, "cache")) {
|
|
146
|
+
await _learnCard.cache.setVc(uri, void 0);
|
|
147
|
+
}
|
|
148
|
+
return result;
|
|
149
|
+
}, "delete")
|
|
141
150
|
} : {}
|
|
142
151
|
}), "addCachingToStorePlane");
|
|
143
152
|
var generateStorePlane = /* @__PURE__ */ __name((learnCard) => {
|
|
@@ -663,8 +672,8 @@ var getTestIndex = /* @__PURE__ */ __name(() => {
|
|
|
663
672
|
|
|
664
673
|
// src/wallet/plugins/test-storage/index.ts
|
|
665
674
|
var getTestStorage = /* @__PURE__ */ __name(() => {
|
|
666
|
-
|
|
667
|
-
|
|
675
|
+
const index = [];
|
|
676
|
+
const vcs = [];
|
|
668
677
|
return {
|
|
669
678
|
name: "Test Storage",
|
|
670
679
|
displayName: "Test Storage",
|
|
@@ -684,7 +693,19 @@ var getTestStorage = /* @__PURE__ */ __name(() => {
|
|
|
684
693
|
const vcIndex = vcs.length;
|
|
685
694
|
vcs.push(vc);
|
|
686
695
|
return `lc:test:${vcIndex}`;
|
|
687
|
-
}, "upload")
|
|
696
|
+
}, "upload"),
|
|
697
|
+
delete: /* @__PURE__ */ __name(async (_learnCard, uri) => {
|
|
698
|
+
_learnCard.debug?.("Test Storage, store, delete", { uri });
|
|
699
|
+
if (!uri) return false;
|
|
700
|
+
const [_lc, method, vcIndex] = uri.split(":");
|
|
701
|
+
if (method !== "test") return false;
|
|
702
|
+
const vcIdx = Number.parseInt(vcIndex);
|
|
703
|
+
if (vcIdx >= 0 && vcIdx < vcs.length) {
|
|
704
|
+
vcs[vcIdx] = void 0;
|
|
705
|
+
return true;
|
|
706
|
+
}
|
|
707
|
+
return false;
|
|
708
|
+
}, "delete")
|
|
688
709
|
},
|
|
689
710
|
index: {
|
|
690
711
|
get: /* @__PURE__ */ __name(async (_learnCard, query) => {
|
|
@@ -700,7 +721,7 @@ var getTestStorage = /* @__PURE__ */ __name(() => {
|
|
|
700
721
|
// TODO: Implement
|
|
701
722
|
remove: /* @__PURE__ */ __name(async (_learnCard, id) => {
|
|
702
723
|
_learnCard.debug?.("Test Storage, index, remove", { id });
|
|
703
|
-
|
|
724
|
+
const recordIndex = index.findIndex((record) => record.id === id);
|
|
704
725
|
index.splice(recordIndex, 1);
|
|
705
726
|
return true;
|
|
706
727
|
}, "remove")
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/wallet/base/helpers.ts", "../src/wallet/base/wallet.ts", "../src/wallet/plugins/test-cache/index.ts", "../src/wallet/plugins/test-index/index.ts", "../src/wallet/plugins/test-storage/index.ts"],
|
|
4
|
-
"sourcesContent": ["/// <reference path=\"./types/global.d.ts\" />\n\nimport './polyfills';\n\nexport { LearnCard, Plugin } from 'types/wallet';\nexport * from 'types/LearnCard';\nexport * from '@wallet/base';\nexport * from '@wallet/plugins';\n", "import { LearnCard, Plugin } from 'types/wallet';\nimport { ControlPlane } from 'types/planes';\n\n/** Type guard for removing null/undefined */\nexport const isNotNull = <T>(item?: T | null): item is T => !!item;\n\n/** Removes null/undefined from items in an array */\nexport const filterNulls = <T>(array: (T | null | undefined)[]) => array.filter(isNotNull);\n\n/**\n * Loops through an array, running a callback over it until that callback returns a value. Once the\n * first value is found, it is returned. If no value is found, undefined is returned instead\n */\nexport const findFirstResult = <T, U>(\n array: T[],\n callback: (item: T) => U | undefined\n): U | undefined => {\n return array.reduce<U | undefined>((result, item) => {\n if (result !== undefined) return result;\n\n return callback(item);\n }, undefined);\n};\n\nexport const pluginImplementsPlane = <Plane extends ControlPlane>(\n plugin: Plugin,\n plane: Plane\n): plugin is Plugin<any, Plane> => {\n if (plane === 'read') return 'get' in (plugin.read ?? {});\n if (plane === 'store') return 'upload' in (plugin.store ?? {});\n if (plane === 'index') return 'get' in (plugin.index ?? {});\n if (plane === 'cache') return 'getIndex' in (plugin.cache ?? {});\n if (plane === 'id') return 'did' in (plugin.id ?? {});\n if (plane === 'context') return 'resolveStaticDocument' in (plugin.context ?? {});\n\n return false;\n};\n\nexport const learnCardImplementsPlane = <Plane extends ControlPlane>(\n learnCard: LearnCard<any, any, any>,\n plane: Plane\n): learnCard is LearnCard<any, Plane> => {\n if (plane === 'read') return 'read' in learnCard;\n if (plane === 'store') return 'store' in learnCard;\n if (plane === 'index') return 'index' in learnCard;\n if (plane === 'cache') return 'cache' in learnCard;\n if (plane === 'id') return 'id' in learnCard;\n if (plane === 'context') return 'context' in learnCard;\n\n return false;\n};\n\nexport const mapObject = <T extends string, U, V>(\n obj: Record<T, U>,\n callback: (value: U, index: number) => V\n): Record<T, V> => {\n return Object.fromEntries(\n Object.entries<U>(obj).map(([key, value], index) => [key, callback(value, index)])\n ) as any;\n};\n\nexport const isFulfilledAndNotEmpty = <T>(\n input: PromiseSettledResult<T>\n): input is PromiseFulfilledResult<T> => input.status === 'fulfilled' && !!input.value;\n\nexport const uniqBy = <Obj extends Record<string, any>>(\n array: Obj[],\n key: keyof Obj | ((obj: Obj) => any)\n) => {\n return [\n ...new Map(array.map(obj => [key instanceof Function ? key(obj) : obj[key], obj])).values(),\n ];\n};\n", "import { CredentialRecord } from '@learncard/types';\nimport { Query } from 'sift';\n\nimport { Plugin, LearnCard, GetPluginMethods, AddImplicitLearnCardArgument } from 'types/wallet';\nimport {\n ControlPlane,\n GetPlanesForPlugins,\n GetPlaneProviders,\n IndexPlane,\n LearnCardReadPlane,\n LearnCardStorePlane,\n LearnCardIndexPlane,\n LearnCardCachePlane,\n LearnCardIdPlane,\n LearnCardContextPlane,\n StorePlane,\n PlaneOptions,\n} from 'types/planes';\nimport {\n findFirstResult,\n pluginImplementsPlane,\n learnCardImplementsPlane,\n mapObject,\n isFulfilledAndNotEmpty,\n uniqBy,\n} from './helpers';\n\nconst getPlaneProviders = <Plugins extends Plugin[], Plane extends ControlPlane>(\n plugins: Plugins,\n plane: Plane\n): GetPlaneProviders<Plugins, Plane> => {\n return plugins.reduce((providers, plugin) => {\n if (plane in plugin) {\n providers[plugin.name as keyof typeof providers] = {\n name: plugin.name,\n displayName: plugin.displayName,\n description: plugin.description,\n } as any;\n }\n\n return providers;\n }, {} as GetPlaneProviders<Plugins, Plane>);\n};\n\nconst bindLearnCardToFunctionsObject = (\n learnCard: LearnCard<any, any, any>,\n obj: Record<string, (...args: any[]) => any>\n) => mapObject(obj, method => method.bind(learnCard, learnCard));\n\nconst addPluginToLearnCard = async <NewPlugin extends Plugin, Plugins extends Plugin[]>(\n learnCard: LearnCard<Plugins>,\n plugin: NewPlugin\n): Promise<LearnCard<[...Plugins, NewPlugin]>> => {\n learnCard.debug?.('Adding plugin', plugin.name);\n // eslint-disable-next-line\n return (generateLearnCard as any)({\n plugins: [...learnCard.plugins, plugin],\n debug: learnCard.debug,\n });\n};\n\nconst generateReadPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard:\n | LearnCard<Plugins, ControlPlanes, PluginMethods>\n | LearnCard<Plugins, 'cache', PluginMethods>\n): LearnCardReadPlane<Plugins> => {\n return {\n get: async (uri, { cache = 'cache-first' } = {}) => {\n learnCard.debug?.('learnCard.read.get', uri);\n\n if (!uri) return undefined;\n\n if (cache === 'cache-only' && !learnCardImplementsPlane(learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await learnCard.cache.getVc(uri);\n\n if (cachedResponse) {\n if (cache === 'cache-first' && learnCardImplementsPlane(learnCard, 'read')) {\n learnCard.read\n .get(uri, { cache: 'skip-cache' })\n .then(res => learnCard.cache.setVc(uri, res));\n }\n\n return cachedResponse;\n }\n }\n\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'read')) {\n throw new Error('Plugin is not a Read Plugin');\n }\n\n return plugin.read.get(learnCard as any, uri);\n })\n );\n\n const vc = results.find(isFulfilledAndNotEmpty)?.value;\n\n if (vc && learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n await learnCard.cache.setVc(uri, vc);\n }\n\n return vc;\n },\n providers: getPlaneProviders(learnCard.plugins, 'read'),\n };\n};\n\nconst addCachingToStorePlane = <\n ControlPlanes extends ControlPlane = never,\n Methods extends Record<string, (...args: any[]) => any> = Record<never, never>,\n DependentControlPlanes extends ControlPlane = never,\n DependentMethods extends Record<string, (...args: any[]) => any> = Record<never, never>\n>(\n plane: AddImplicitLearnCardArgument<\n StorePlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n >\n): AddImplicitLearnCardArgument<\n StorePlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n> => ({\n upload: async (_learnCard, vc, { cache = 'cache-first' } = {}) => {\n const uri = await plane.upload(_learnCard, vc);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.setVc(uri, vc);\n }\n\n return uri;\n },\n // TODO: Add caching to uploadMany\n ...('uploadMany' in plane ? { uploadMany: plane.uploadMany } : {}),\n ...('uploadEncrypted' in plane\n ? {\n uploadEncrypted: async (_learnCard, vc, params, { cache = 'cache-first' } = {}) => {\n const uri = await plane.uploadEncrypted?.(_learnCard, vc, params);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.setVc(uri, vc);\n }\n\n return uri;\n },\n }\n : {}),\n});\n\nconst generateStorePlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardStorePlane<Plugins> => {\n const pluginPlanes = learnCard.plugins.reduce((planes, plugin) => {\n if (pluginImplementsPlane(plugin, 'store')) {\n planes[plugin.name as keyof typeof planes] = bindLearnCardToFunctionsObject(\n learnCard,\n addCachingToStorePlane(plugin.store)\n ) as any;\n }\n\n return planes;\n }, {} as LearnCardStorePlane<Plugins>);\n\n return { ...pluginPlanes, providers: getPlaneProviders(learnCard.plugins, 'store') };\n};\n\nconst addCachingToIndexPlane = <\n ControlPlanes extends ControlPlane = never,\n Methods extends Record<string, (...args: any[]) => any> = Record<never, never>,\n DependentControlPlanes extends ControlPlane = never,\n DependentMethods extends Record<string, (...args: any[]) => any> = Record<never, never>\n>(\n plane: AddImplicitLearnCardArgument<\n IndexPlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n >,\n name: string\n): AddImplicitLearnCardArgument<\n IndexPlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n> => ({\n get: async (_learnCard, query, { cache = 'cache-first' } = {}) => {\n if (cache === 'cache-only' && !learnCardImplementsPlane(_learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await _learnCard.cache.getIndex(name, query ?? {});\n\n if (cachedResponse) {\n if (cache === 'cache-first') {\n plane.get(_learnCard, query, { cache: 'skip-cache' }).then(res => {\n _learnCard.cache.setIndex(name, query ?? {}, res);\n });\n }\n\n return cachedResponse;\n }\n }\n\n const list = await plane.get(_learnCard, query);\n\n if (list && learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n await _learnCard.cache.setIndex(name, query ?? {}, list);\n }\n\n return list;\n },\n ...(plane.getPage\n ? {\n getPage: async (\n _learnCard,\n query,\n paginationOptions,\n { cache = 'cache-first' } = {}\n ) => {\n if (cache === 'cache-only' && !learnCardImplementsPlane(_learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await _learnCard.cache.getIndexPage(\n name,\n query ?? {},\n paginationOptions\n );\n\n if (cachedResponse) {\n if (cache === 'cache-first') {\n plane\n .getPage?.(_learnCard, query, paginationOptions, {\n cache: 'skip-cache',\n })\n .then((res: any) => {\n _learnCard.cache.setIndexPage(\n name,\n query ?? {},\n res,\n paginationOptions\n );\n });\n }\n\n return cachedResponse;\n }\n }\n\n const result = await plane.getPage?.(_learnCard, query, paginationOptions);\n\n if (\n result &&\n learnCardImplementsPlane(_learnCard, 'cache') &&\n cache !== 'skip-cache'\n ) {\n await _learnCard.cache.setIndexPage(\n name,\n query ?? {},\n result,\n paginationOptions\n );\n }\n\n return result;\n },\n }\n : {}),\n ...(plane.getCount\n ? {\n getCount: async (_learnCard, query, { cache = 'cache-first' } = {}) => {\n if (cache === 'cache-only' && !learnCardImplementsPlane(_learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await _learnCard.cache.getIndexCount?.(\n name,\n query ?? {}\n );\n\n if (cachedResponse) {\n if (cache === 'cache-first') {\n plane\n .getCount?.(_learnCard, query, {\n cache: 'skip-cache',\n })\n .then((res: number) =>\n _learnCard.cache.setIndexCount?.(name, query ?? {}, res)\n );\n }\n\n return cachedResponse;\n }\n }\n\n const result = await plane.getCount?.(_learnCard, query);\n\n if (\n result &&\n learnCardImplementsPlane(_learnCard, 'cache') &&\n cache !== 'skip-cache'\n ) {\n await _learnCard.cache.setIndexCount?.(name, query ?? {}, result);\n }\n\n return result;\n },\n }\n : {}),\n add: async (_learnCard, record, { cache = 'cache-first' } = {}) => {\n const result = await plane.add(_learnCard, record);\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n ...(plane.addMany\n ? {\n addMany: async (_learnCard, records, { cache = 'cache-first' } = {}) => {\n const result = await plane.addMany?.(_learnCard, records);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n }\n : {}),\n update: async (_learnCard, id, update, { cache = 'cache-first' } = {}) => {\n const result = await plane.update(_learnCard, id, update);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n remove: async (_learnCard, id, { cache = 'cache-first' } = {}) => {\n const result = await plane.remove(_learnCard, id);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n ...(plane.removeAll\n ? {\n removeAll: async (_learnCard, { cache = 'cache-first' } = {}) => {\n const result = await plane.removeAll?.(_learnCard);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n }\n : {}),\n});\n\nconst generateIndexPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardIndexPlane<Plugins> => {\n const individualPlanes = learnCard.plugins.reduce<LearnCardIndexPlane<Plugins>>(\n (planes, plugin) => {\n if (pluginImplementsPlane(plugin, 'index')) {\n planes[plugin.name as keyof typeof planes] = bindLearnCardToFunctionsObject(\n learnCard,\n addCachingToIndexPlane(plugin.index, plugin.name)\n ) as any;\n }\n\n return planes;\n },\n {} as LearnCardIndexPlane<Plugins>\n );\n\n const all: Pick<IndexPlane, 'get'> = {\n get: async <Metadata extends Record<string, any> = Record<never, never>>(\n query?: Partial<Query<CredentialRecord<Metadata>>>,\n { cache = 'cache-first' }: PlaneOptions = {}\n ) => {\n learnCard.debug?.('learnCard.index.all.get');\n\n if (cache === 'cache-only' && !learnCardImplementsPlane(learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await learnCard.cache.getIndex<Metadata>('all', query ?? {});\n\n if (cachedResponse) {\n if (cache === 'cache-first' && learnCardImplementsPlane(learnCard, 'index')) {\n learnCard.index.all\n .get(query, { cache: 'skip-cache' })\n .then(res => learnCard.cache.setIndex('all', query ?? {}, res));\n }\n\n return cachedResponse;\n }\n }\n\n const resultsWithDuplicates = (\n await Promise.all(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'index')) return [];\n\n return plugin.index.get(learnCard as any, query) as Promise<\n CredentialRecord<Metadata>[]\n >;\n })\n )\n ).flat();\n\n const results = uniqBy(resultsWithDuplicates, 'id');\n\n if (results && learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n await learnCard.cache.setIndex('all', query ?? {}, results);\n }\n\n return results;\n },\n };\n\n return { ...individualPlanes, all, providers: getPlaneProviders(learnCard.plugins, 'index') };\n};\n\nconst generateCachePlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardCachePlane<Plugins> => {\n return {\n getIndex: async <Metadata extends Record<string, any> = Record<never, never>>(\n name: string,\n query: Partial<Query<CredentialRecord<Metadata>>>\n ) => {\n learnCard.debug?.('learnCard.cache.getIndex');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getIndex(learnCard as any, name, query) as Promise<\n CredentialRecord<Metadata>[]\n >;\n })\n );\n\n const index = results.find(isFulfilledAndNotEmpty)?.value;\n\n return index;\n } catch (error) {\n return undefined;\n }\n },\n setIndex: async (name, query, value) => {\n learnCard.debug?.('learnCard.cache.setIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setIndex(learnCard as any, name, query, value);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n getIndexPage: async <Metadata extends Record<string, any> = Record<never, never>>(\n name: string,\n query: Partial<Query<CredentialRecord<Metadata>>>,\n paginationOptions?: { limit?: number; cursor?: string }\n ) => {\n learnCard.debug?.('learnCard.cache.getIndex');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getIndexPage(\n learnCard as any,\n name,\n query,\n paginationOptions\n ) as Promise<\n | {\n records: CredentialRecord<Metadata>[];\n hasMore: boolean;\n cursor?: string;\n }\n | undefined\n >;\n })\n );\n\n const index = results.find(isFulfilledAndNotEmpty)?.value;\n\n return index;\n } catch (error) {\n return undefined;\n }\n },\n setIndexPage: async (name, query, value, paginationOptions) => {\n learnCard.debug?.('learnCard.cache.setIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setIndexPage(\n learnCard as any,\n name,\n query,\n value,\n paginationOptions\n );\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n getIndexCount: async <Metadata extends Record<string, any> = Record<never, never>>(\n name: string,\n query: Partial<Query<CredentialRecord<Metadata>>>\n ) => {\n learnCard.debug?.('learnCard.cache.getIndex');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getIndexCount?.(\n learnCard as any,\n name,\n query\n ) as Promise<number | undefined>;\n })\n );\n\n const index = results.find(isFulfilledAndNotEmpty)?.value;\n\n return index;\n } catch (error) {\n return undefined;\n }\n },\n setIndexCount: async (name, query, value) => {\n learnCard.debug?.('learnCard.cache.setIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setIndexCount?.(learnCard as any, name, query, value);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n flushIndex: async () => {\n learnCard.debug?.('learnCard.cache.flushIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.flushIndex(learnCard as any);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n getVc: async uri => {\n learnCard.debug?.('learnCard.cache.getVc');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getVc(learnCard as any, uri);\n })\n );\n\n const vc = results.find(isFulfilledAndNotEmpty)?.value;\n\n return vc;\n } catch (error) {\n return undefined;\n }\n },\n setVc: async (uri, value) => {\n learnCard.debug?.('learnCard.cache.setVc');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setVc(learnCard as any, uri, value);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n flushVc: async () => {\n learnCard.debug?.('learnCard.cache.flushVc');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.flushVc(learnCard as any);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n providers: getPlaneProviders(learnCard.plugins, 'cache'),\n };\n};\n\nconst generateIdPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardIdPlane<Plugins> => {\n return {\n did: method => {\n learnCard.debug?.('learnCard.id.did', method);\n\n const result = findFirstResult([...learnCard.plugins].reverse(), plugin => {\n try {\n if (!pluginImplementsPlane(plugin, 'id')) return undefined;\n\n return plugin.id.did(learnCard as any, method);\n } catch (error) {\n return undefined;\n }\n });\n\n if (!result) throw new Error(`No plugin supports did method ${method}`);\n\n return result;\n },\n keypair: algorithm => {\n learnCard.debug?.('learnCard.id.keypair', algorithm);\n\n const result = findFirstResult(learnCard.plugins, plugin => {\n try {\n if (!pluginImplementsPlane(plugin, 'id')) return undefined;\n\n return plugin.id.keypair(learnCard as any, algorithm);\n } catch (error) {\n return undefined;\n }\n });\n\n if (!result) throw new Error(`No plugin supports keypair type ${algorithm}`);\n\n return result;\n },\n providers: getPlaneProviders(learnCard.plugins, 'id'),\n };\n};\n\nconst generateContextPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardContextPlane<Plugins> => {\n return {\n resolveDocument: async (uri, allowRemote = false) => {\n learnCard.debug?.('learnCard.context.resolveDocument', uri);\n\n const staticResults = await Promise.all(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'context')) return undefined;\n\n return plugin.context.resolveStaticDocument(learnCard as any, uri);\n })\n );\n\n const staticResult = staticResults.find(Boolean);\n\n if (staticResult || !allowRemote) return staticResult;\n\n const remoteResults = await Promise.all(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'context')) return undefined;\n\n return plugin.context.resolveRemoteDocument?.(learnCard as any, uri);\n })\n );\n\n return remoteResults.find(Boolean);\n },\n providers: getPlaneProviders(learnCard.plugins, 'context'),\n };\n};\n\nconst bindMethods = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods extends GetPluginMethods<Plugins> = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>,\n pluginMethods: PluginMethods\n): PluginMethods => bindLearnCardToFunctionsObject(learnCard, pluginMethods as any) as any;\n\n/** @group Universal Wallets */\nexport const generateLearnCard = async <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods extends GetPluginMethods<Plugins> = GetPluginMethods<Plugins>\n>(\n _learnCard: Partial<LearnCard<Plugins, ControlPlanes, PluginMethods>> = {}\n): Promise<LearnCard<Plugins, ControlPlanes, PluginMethods>> => {\n const { plugins = [] as unknown as Plugins } = _learnCard;\n\n const pluginMethods = plugins.reduce<PluginMethods>((cumulativePluginMethods, plugin) => {\n const newPluginMethods = { ...(cumulativePluginMethods as any), ...plugin.methods };\n\n return newPluginMethods;\n }, {} as PluginMethods);\n\n const learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods> = {\n read: {} as LearnCardReadPlane<Plugins>,\n store: {} as LearnCardStorePlane<Plugins>,\n index: {} as LearnCardIndexPlane<Plugins>,\n cache: {} as LearnCardCachePlane<Plugins>,\n id: {} as LearnCardIdPlane<Plugins>,\n context: {} as LearnCardContextPlane<Plugins>,\n plugins: plugins as Plugins,\n invoke: pluginMethods,\n addPlugin: function (plugin) {\n return addPluginToLearnCard(this as any, plugin);\n },\n debug: _learnCard.debug,\n };\n\n (learnCard as any).read = generateReadPlane(learnCard);\n (learnCard as any).store = generateStorePlane(learnCard);\n (learnCard as any).index = generateIndexPlane(learnCard);\n (learnCard as any).cache = generateCachePlane(learnCard);\n (learnCard as any).id = generateIdPlane(learnCard);\n (learnCard as any).context = generateContextPlane(learnCard);\n\n if (pluginMethods) learnCard.invoke = bindMethods(learnCard, pluginMethods);\n\n return learnCard;\n};\n", "import { CredentialRecord, VC, VP } from '@learncard/types';\nimport { TestCachePlugin } from './types';\n\nexport const getTestCache = (): TestCachePlugin => {\n let index: Record<string, CredentialRecord[]> = {};\n let paginatedIndex: Record<\n string,\n { records: CredentialRecord[]; hasMore: boolean; cursor?: string }\n > = {};\n let vcs: Record<string, VC | VP | undefined> = {};\n\n return {\n name: 'Test Cache',\n displayName: 'Test Cache',\n description: '[Testing] Tests Caching Implementation',\n cache: {\n getIndex: async (_learnCard, name, query) => {\n _learnCard.debug?.('Test Cache, getIndex', { name, query, value: index });\n return index[name];\n },\n setIndex: async (_learnCard, name, query, value) => {\n _learnCard.debug?.('Test Cache, setIndex', { name, query, value });\n index[name] = value as any;\n return true;\n },\n getIndexPage: async (_learnCard, name, query, paginationOptions) => {\n _learnCard.debug?.('Test Cache, getIndex', {\n name,\n query,\n paginationOptions,\n value: index,\n });\n return paginatedIndex[name];\n },\n setIndexPage: async (_learnCard, name, query, value, paginationOptions) => {\n _learnCard.debug?.('Test Cache, setIndex', {\n name,\n query,\n paginationOptions,\n value,\n });\n paginatedIndex[name] = value as any;\n return true;\n },\n flushIndex: async _learnCard => {\n _learnCard.debug?.('Test Cache, flushIndex');\n index = {};\n return true;\n },\n getVc: async (_learnCard, uri) => {\n _learnCard.debug?.('Test Cache, getVc', { uri, value: vcs[uri] });\n return vcs[uri];\n },\n setVc: async (_learnCard, uri, vc) => {\n _learnCard.debug?.('Test Cache, setVc', { uri, value: vc });\n vcs[uri] = vc;\n return true;\n },\n flushVc: async _learnCard => {\n _learnCard.debug?.('Test Cache, flushVc');\n vcs = {};\n return true;\n },\n },\n methods: {},\n };\n};\n", "import { CredentialRecord, VC } from '@learncard/types';\nimport { TestIndexPlugin } from './types';\n\nexport const getTestIndex = (): TestIndexPlugin => {\n let index: CredentialRecord[] = [];\n\n return {\n name: 'Test Index',\n displayName: 'Test Index',\n description: '[Testing] Tests Index Implementations',\n index: {\n get: async (_learnCard, query) => {\n _learnCard.debug?.('Test Storage, index, get', { query });\n\n return index;\n },\n add: async (_learnCard, record) => {\n _learnCard.debug?.('Test Storage, index, add', { record });\n\n index.push(record);\n\n return true;\n },\n update: async () => false, // TODO: Implement\n remove: async (_learnCard, id) => {\n _learnCard.debug?.('Test Storage, index, remove', { id });\n\n let recordIndex = index.findIndex(record => record.id === id);\n\n index.splice(recordIndex, 1);\n\n return true;\n },\n },\n methods: {},\n };\n};\n", "import { CredentialRecord, VC, VP } from '@learncard/types';\nimport { TestStoragePlugin } from './types';\n\nexport const getTestStorage = (): TestStoragePlugin => {\n let index: CredentialRecord[] = [];\n let vcs: (VC | VP)[] = [];\n\n return {\n name: 'Test Storage',\n displayName: 'Test Storage',\n description: '[Testing] Tests Storage Implementations',\n read: {\n get: async (_learnCard, uri) => {\n _learnCard.debug?.('Test Storage, read, get', { uri });\n\n if (!uri) return undefined;\n\n const [_lc, method, vcIndex] = uri.split(':');\n\n if (method !== 'test') return undefined;\n\n return vcs[Number.parseInt(vcIndex)];\n },\n },\n store: {\n upload: async (_learnCard, vc) => {\n _learnCard.debug?.('Test Storage, store, upload', { vc });\n\n const vcIndex = vcs.length;\n\n vcs.push(vc);\n\n return `lc:test:${vcIndex}`;\n },\n },\n index: {\n get: async (_learnCard, query) => {\n _learnCard.debug?.('Test Storage, index, get', { query });\n\n return index;\n },\n add: async (_learnCard, record) => {\n _learnCard.debug?.('Test Storage, index, add', { record });\n\n index.push(record);\n\n return true;\n },\n update: async () => false, // TODO: Implement\n remove: async (_learnCard, id) => {\n _learnCard.debug?.('Test Storage, index, remove', { id });\n\n let recordIndex = index.findIndex(record => record.id === id);\n\n index.splice(recordIndex, 1);\n\n return true;\n },\n },\n methods: {},\n };\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/// <reference path=\"./types/global.d.ts\" />\n\nimport './polyfills';\n\nexport { LearnCard, Plugin } from 'types/wallet';\nexport * from 'types/LearnCard';\nexport * from '@wallet/base';\nexport * from '@wallet/plugins';\n", "import { LearnCard, Plugin } from 'types/wallet';\nimport { ControlPlane } from 'types/planes';\n\n/** Type guard for removing null/undefined */\nexport const isNotNull = <T>(item?: T | null): item is T => !!item;\n\n/** Removes null/undefined from items in an array */\nexport const filterNulls = <T>(array: (T | null | undefined)[]) => array.filter(isNotNull);\n\n/**\n * Loops through an array, running a callback over it until that callback returns a value. Once the\n * first value is found, it is returned. If no value is found, undefined is returned instead\n */\nexport const findFirstResult = <T, U>(\n array: T[],\n callback: (item: T) => U | undefined\n): U | undefined => {\n return array.reduce<U | undefined>((result, item) => {\n if (result !== undefined) return result;\n\n return callback(item);\n }, undefined);\n};\n\nexport const pluginImplementsPlane = <Plane extends ControlPlane>(\n plugin: Plugin,\n plane: Plane\n): plugin is Plugin<any, Plane> => {\n if (plane === 'read') return 'get' in (plugin.read ?? {});\n if (plane === 'store') return 'upload' in (plugin.store ?? {});\n if (plane === 'index') return 'get' in (plugin.index ?? {});\n if (plane === 'cache') return 'getIndex' in (plugin.cache ?? {});\n if (plane === 'id') return 'did' in (plugin.id ?? {});\n if (plane === 'context') return 'resolveStaticDocument' in (plugin.context ?? {});\n\n return false;\n};\n\nexport const learnCardImplementsPlane = <Plane extends ControlPlane>(\n learnCard: LearnCard<any, any, any>,\n plane: Plane\n): learnCard is LearnCard<any, Plane> => {\n if (plane === 'read') return 'read' in learnCard;\n if (plane === 'store') return 'store' in learnCard;\n if (plane === 'index') return 'index' in learnCard;\n if (plane === 'cache') return 'cache' in learnCard;\n if (plane === 'id') return 'id' in learnCard;\n if (plane === 'context') return 'context' in learnCard;\n\n return false;\n};\n\nexport const mapObject = <T extends string, U, V>(\n obj: Record<T, U>,\n callback: (value: U, index: number) => V\n): Record<T, V> => {\n return Object.fromEntries(\n Object.entries<U>(obj).map(([key, value], index) => [key, callback(value, index)])\n ) as any;\n};\n\nexport const isFulfilledAndNotEmpty = <T>(\n input: PromiseSettledResult<T>\n): input is PromiseFulfilledResult<T> => input.status === 'fulfilled' && !!input.value;\n\nexport const uniqBy = <Obj extends Record<string, any>>(\n array: Obj[],\n key: keyof Obj | ((obj: Obj) => any)\n) => {\n return [\n ...new Map(array.map(obj => [key instanceof Function ? key(obj) : obj[key], obj])).values(),\n ];\n};\n", "import { CredentialRecord } from '@learncard/types';\nimport { Query } from 'sift';\n\nimport { Plugin, LearnCard, GetPluginMethods, AddImplicitLearnCardArgument } from 'types/wallet';\nimport {\n ControlPlane,\n GetPlanesForPlugins,\n GetPlaneProviders,\n IndexPlane,\n LearnCardReadPlane,\n LearnCardStorePlane,\n LearnCardIndexPlane,\n LearnCardCachePlane,\n LearnCardIdPlane,\n LearnCardContextPlane,\n StorePlane,\n PlaneOptions,\n} from 'types/planes';\nimport {\n findFirstResult,\n pluginImplementsPlane,\n learnCardImplementsPlane,\n mapObject,\n isFulfilledAndNotEmpty,\n uniqBy,\n} from './helpers';\n\nconst getPlaneProviders = <Plugins extends Plugin[], Plane extends ControlPlane>(\n plugins: Plugins,\n plane: Plane\n): GetPlaneProviders<Plugins, Plane> => {\n return plugins.reduce((providers, plugin) => {\n if (plane in plugin) {\n providers[plugin.name as keyof typeof providers] = {\n name: plugin.name,\n displayName: plugin.displayName,\n description: plugin.description,\n } as any;\n }\n\n return providers;\n }, {} as GetPlaneProviders<Plugins, Plane>);\n};\n\nconst bindLearnCardToFunctionsObject = (\n learnCard: LearnCard<any, any, any>,\n obj: Record<string, (...args: any[]) => any>\n) => mapObject(obj, method => method.bind(learnCard, learnCard));\n\nconst addPluginToLearnCard = async <NewPlugin extends Plugin, Plugins extends Plugin[]>(\n learnCard: LearnCard<Plugins>,\n plugin: NewPlugin\n): Promise<LearnCard<[...Plugins, NewPlugin]>> => {\n learnCard.debug?.('Adding plugin', plugin.name);\n // eslint-disable-next-line\n return (generateLearnCard as any)({\n plugins: [...learnCard.plugins, plugin],\n debug: learnCard.debug,\n });\n};\n\nconst generateReadPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard:\n | LearnCard<Plugins, ControlPlanes, PluginMethods>\n | LearnCard<Plugins, 'cache', PluginMethods>\n): LearnCardReadPlane<Plugins> => {\n return {\n get: async (uri, { cache = 'cache-first' } = {}) => {\n learnCard.debug?.('learnCard.read.get', uri);\n\n if (!uri) return undefined;\n\n if (cache === 'cache-only' && !learnCardImplementsPlane(learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await learnCard.cache.getVc(uri);\n\n if (cachedResponse) {\n if (cache === 'cache-first' && learnCardImplementsPlane(learnCard, 'read')) {\n learnCard.read\n .get(uri, { cache: 'skip-cache' })\n .then(res => learnCard.cache.setVc(uri, res));\n }\n\n return cachedResponse;\n }\n }\n\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'read')) {\n throw new Error('Plugin is not a Read Plugin');\n }\n\n return plugin.read.get(learnCard as any, uri);\n })\n );\n\n const vc = results.find(isFulfilledAndNotEmpty)?.value;\n\n if (vc && learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n await learnCard.cache.setVc(uri, vc);\n }\n\n return vc;\n },\n providers: getPlaneProviders(learnCard.plugins, 'read'),\n };\n};\n\nconst addCachingToStorePlane = <\n ControlPlanes extends ControlPlane = never,\n Methods extends Record<string, (...args: any[]) => any> = Record<never, never>,\n DependentControlPlanes extends ControlPlane = never,\n DependentMethods extends Record<string, (...args: any[]) => any> = Record<never, never>\n>(\n plane: AddImplicitLearnCardArgument<\n StorePlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n >\n): AddImplicitLearnCardArgument<\n StorePlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n> => ({\n upload: async (_learnCard, vc, { cache = 'cache-first' } = {}) => {\n const uri = await plane.upload(_learnCard, vc);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.setVc(uri, vc);\n }\n\n return uri;\n },\n // TODO: Add caching to uploadMany\n ...('uploadMany' in plane ? { uploadMany: plane.uploadMany } : {}),\n ...('uploadEncrypted' in plane\n ? {\n uploadEncrypted: async (_learnCard, vc, params, { cache = 'cache-first' } = {}) => {\n const uri = await plane.uploadEncrypted?.(_learnCard, vc, params);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.setVc(uri, vc);\n }\n\n return uri;\n },\n }\n : {}),\n ...('delete' in plane\n ? {\n delete: async (_learnCard, uri, { cache = 'cache-first' } = {}) => {\n const result = await plane.delete?.(_learnCard, uri);\n\n if (result && cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.setVc(uri, undefined);\n }\n\n return result;\n },\n }\n : {}),\n});\n\nconst generateStorePlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardStorePlane<Plugins> => {\n const pluginPlanes = learnCard.plugins.reduce((planes, plugin) => {\n if (pluginImplementsPlane(plugin, 'store')) {\n planes[plugin.name as keyof typeof planes] = bindLearnCardToFunctionsObject(\n learnCard,\n addCachingToStorePlane(plugin.store)\n ) as any;\n }\n\n return planes;\n }, {} as LearnCardStorePlane<Plugins>);\n\n return { ...pluginPlanes, providers: getPlaneProviders(learnCard.plugins, 'store') };\n};\n\nconst addCachingToIndexPlane = <\n ControlPlanes extends ControlPlane = never,\n Methods extends Record<string, (...args: any[]) => any> = Record<never, never>,\n DependentControlPlanes extends ControlPlane = never,\n DependentMethods extends Record<string, (...args: any[]) => any> = Record<never, never>\n>(\n plane: AddImplicitLearnCardArgument<\n IndexPlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n >,\n name: string\n): AddImplicitLearnCardArgument<\n IndexPlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n> => ({\n get: async (_learnCard, query, { cache = 'cache-first' } = {}) => {\n if (cache === 'cache-only' && !learnCardImplementsPlane(_learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await _learnCard.cache.getIndex(name, query ?? {});\n\n if (cachedResponse) {\n if (cache === 'cache-first') {\n plane.get(_learnCard, query, { cache: 'skip-cache' }).then(res => {\n _learnCard.cache.setIndex(name, query ?? {}, res);\n });\n }\n\n return cachedResponse;\n }\n }\n\n const list = await plane.get(_learnCard, query);\n\n if (list && learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n await _learnCard.cache.setIndex(name, query ?? {}, list);\n }\n\n return list;\n },\n ...(plane.getPage\n ? {\n getPage: async (\n _learnCard,\n query,\n paginationOptions,\n { cache = 'cache-first' } = {}\n ) => {\n if (cache === 'cache-only' && !learnCardImplementsPlane(_learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await _learnCard.cache.getIndexPage(\n name,\n query ?? {},\n paginationOptions\n );\n\n if (cachedResponse) {\n if (cache === 'cache-first') {\n plane\n .getPage?.(_learnCard, query, paginationOptions, {\n cache: 'skip-cache',\n })\n .then((res: any) => {\n _learnCard.cache.setIndexPage(\n name,\n query ?? {},\n res,\n paginationOptions\n );\n });\n }\n\n return cachedResponse;\n }\n }\n\n const result = await plane.getPage?.(_learnCard, query, paginationOptions);\n\n if (\n result &&\n learnCardImplementsPlane(_learnCard, 'cache') &&\n cache !== 'skip-cache'\n ) {\n await _learnCard.cache.setIndexPage(\n name,\n query ?? {},\n result,\n paginationOptions\n );\n }\n\n return result;\n },\n }\n : {}),\n ...(plane.getCount\n ? {\n getCount: async (_learnCard, query, { cache = 'cache-first' } = {}) => {\n if (cache === 'cache-only' && !learnCardImplementsPlane(_learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await _learnCard.cache.getIndexCount?.(\n name,\n query ?? {}\n );\n\n if (cachedResponse) {\n if (cache === 'cache-first') {\n plane\n .getCount?.(_learnCard, query, {\n cache: 'skip-cache',\n })\n .then((res: number) =>\n _learnCard.cache.setIndexCount?.(name, query ?? {}, res)\n );\n }\n\n return cachedResponse;\n }\n }\n\n const result = await plane.getCount?.(_learnCard, query);\n\n if (\n result &&\n learnCardImplementsPlane(_learnCard, 'cache') &&\n cache !== 'skip-cache'\n ) {\n await _learnCard.cache.setIndexCount?.(name, query ?? {}, result);\n }\n\n return result;\n },\n }\n : {}),\n add: async (_learnCard, record, { cache = 'cache-first' } = {}) => {\n const result = await plane.add(_learnCard, record);\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n ...(plane.addMany\n ? {\n addMany: async (_learnCard, records, { cache = 'cache-first' } = {}) => {\n const result = await plane.addMany?.(_learnCard, records);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n }\n : {}),\n update: async (_learnCard, id, update, { cache = 'cache-first' } = {}) => {\n const result = await plane.update(_learnCard, id, update);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n remove: async (_learnCard, id, { cache = 'cache-first' } = {}) => {\n const result = await plane.remove(_learnCard, id);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n ...(plane.removeAll\n ? {\n removeAll: async (_learnCard, { cache = 'cache-first' } = {}) => {\n const result = await plane.removeAll?.(_learnCard);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n }\n : {}),\n});\n\nconst generateIndexPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardIndexPlane<Plugins> => {\n const individualPlanes = learnCard.plugins.reduce<LearnCardIndexPlane<Plugins>>(\n (planes, plugin) => {\n if (pluginImplementsPlane(plugin, 'index')) {\n planes[plugin.name as keyof typeof planes] = bindLearnCardToFunctionsObject(\n learnCard,\n addCachingToIndexPlane(plugin.index, plugin.name)\n ) as any;\n }\n\n return planes;\n },\n {} as LearnCardIndexPlane<Plugins>\n );\n\n const all: Pick<IndexPlane, 'get'> = {\n get: async <Metadata extends Record<string, any> = Record<never, never>>(\n query?: Partial<Query<CredentialRecord<Metadata>>>,\n { cache = 'cache-first' }: PlaneOptions = {}\n ) => {\n learnCard.debug?.('learnCard.index.all.get');\n\n if (cache === 'cache-only' && !learnCardImplementsPlane(learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await learnCard.cache.getIndex<Metadata>('all', query ?? {});\n\n if (cachedResponse) {\n if (cache === 'cache-first' && learnCardImplementsPlane(learnCard, 'index')) {\n learnCard.index.all\n .get(query, { cache: 'skip-cache' })\n .then(res => learnCard.cache.setIndex('all', query ?? {}, res));\n }\n\n return cachedResponse;\n }\n }\n\n const resultsWithDuplicates = (\n await Promise.all(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'index')) return [];\n\n return plugin.index.get(learnCard as any, query) as Promise<\n CredentialRecord<Metadata>[]\n >;\n })\n )\n ).flat();\n\n const results = uniqBy(resultsWithDuplicates, 'id');\n\n if (results && learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n await learnCard.cache.setIndex('all', query ?? {}, results);\n }\n\n return results;\n },\n };\n\n return { ...individualPlanes, all, providers: getPlaneProviders(learnCard.plugins, 'index') };\n};\n\nconst generateCachePlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardCachePlane<Plugins> => {\n return {\n getIndex: async <Metadata extends Record<string, any> = Record<never, never>>(\n name: string,\n query: Partial<Query<CredentialRecord<Metadata>>>\n ) => {\n learnCard.debug?.('learnCard.cache.getIndex');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getIndex(learnCard as any, name, query) as Promise<\n CredentialRecord<Metadata>[]\n >;\n })\n );\n\n const index = results.find(isFulfilledAndNotEmpty)?.value;\n\n return index;\n } catch (error) {\n return undefined;\n }\n },\n setIndex: async (name, query, value) => {\n learnCard.debug?.('learnCard.cache.setIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setIndex(learnCard as any, name, query, value);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n getIndexPage: async <Metadata extends Record<string, any> = Record<never, never>>(\n name: string,\n query: Partial<Query<CredentialRecord<Metadata>>>,\n paginationOptions?: { limit?: number; cursor?: string }\n ) => {\n learnCard.debug?.('learnCard.cache.getIndex');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getIndexPage(\n learnCard as any,\n name,\n query,\n paginationOptions\n ) as Promise<\n | {\n records: CredentialRecord<Metadata>[];\n hasMore: boolean;\n cursor?: string;\n }\n | undefined\n >;\n })\n );\n\n const index = results.find(isFulfilledAndNotEmpty)?.value;\n\n return index;\n } catch (error) {\n return undefined;\n }\n },\n setIndexPage: async (name, query, value, paginationOptions) => {\n learnCard.debug?.('learnCard.cache.setIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setIndexPage(\n learnCard as any,\n name,\n query,\n value,\n paginationOptions\n );\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n getIndexCount: async <Metadata extends Record<string, any> = Record<never, never>>(\n name: string,\n query: Partial<Query<CredentialRecord<Metadata>>>\n ) => {\n learnCard.debug?.('learnCard.cache.getIndex');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getIndexCount?.(\n learnCard as any,\n name,\n query\n ) as Promise<number | undefined>;\n })\n );\n\n const index = results.find(isFulfilledAndNotEmpty)?.value;\n\n return index;\n } catch (error) {\n return undefined;\n }\n },\n setIndexCount: async (name, query, value) => {\n learnCard.debug?.('learnCard.cache.setIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setIndexCount?.(learnCard as any, name, query, value);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n flushIndex: async () => {\n learnCard.debug?.('learnCard.cache.flushIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.flushIndex(learnCard as any);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n getVc: async uri => {\n learnCard.debug?.('learnCard.cache.getVc');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getVc(learnCard as any, uri);\n })\n );\n\n const vc = results.find(isFulfilledAndNotEmpty)?.value;\n\n return vc;\n } catch (error) {\n return undefined;\n }\n },\n setVc: async (uri, value) => {\n learnCard.debug?.('learnCard.cache.setVc');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setVc(learnCard as any, uri, value);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n flushVc: async () => {\n learnCard.debug?.('learnCard.cache.flushVc');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.flushVc(learnCard as any);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n providers: getPlaneProviders(learnCard.plugins, 'cache'),\n };\n};\n\nconst generateIdPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardIdPlane<Plugins> => {\n return {\n did: method => {\n learnCard.debug?.('learnCard.id.did', method);\n\n const result = findFirstResult([...learnCard.plugins].reverse(), plugin => {\n try {\n if (!pluginImplementsPlane(plugin, 'id')) return undefined;\n\n return plugin.id.did(learnCard as any, method);\n } catch (error) {\n return undefined;\n }\n });\n\n if (!result) throw new Error(`No plugin supports did method ${method}`);\n\n return result;\n },\n keypair: algorithm => {\n learnCard.debug?.('learnCard.id.keypair', algorithm);\n\n const result = findFirstResult(learnCard.plugins, plugin => {\n try {\n if (!pluginImplementsPlane(plugin, 'id')) return undefined;\n\n return plugin.id.keypair(learnCard as any, algorithm);\n } catch (error) {\n return undefined;\n }\n });\n\n if (!result) throw new Error(`No plugin supports keypair type ${algorithm}`);\n\n return result;\n },\n providers: getPlaneProviders(learnCard.plugins, 'id'),\n };\n};\n\nconst generateContextPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardContextPlane<Plugins> => {\n return {\n resolveDocument: async (uri, allowRemote = false) => {\n learnCard.debug?.('learnCard.context.resolveDocument', uri);\n\n const staticResults = await Promise.all(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'context')) return undefined;\n\n return plugin.context.resolveStaticDocument(learnCard as any, uri);\n })\n );\n\n const staticResult = staticResults.find(Boolean);\n\n if (staticResult || !allowRemote) return staticResult;\n\n const remoteResults = await Promise.all(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'context')) return undefined;\n\n return plugin.context.resolveRemoteDocument?.(learnCard as any, uri);\n })\n );\n\n return remoteResults.find(Boolean);\n },\n providers: getPlaneProviders(learnCard.plugins, 'context'),\n };\n};\n\nconst bindMethods = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods extends GetPluginMethods<Plugins> = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>,\n pluginMethods: PluginMethods\n): PluginMethods => bindLearnCardToFunctionsObject(learnCard, pluginMethods as any) as any;\n\n/** @group Universal Wallets */\nexport const generateLearnCard = async <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods extends GetPluginMethods<Plugins> = GetPluginMethods<Plugins>\n>(\n _learnCard: Partial<LearnCard<Plugins, ControlPlanes, PluginMethods>> = {}\n): Promise<LearnCard<Plugins, ControlPlanes, PluginMethods>> => {\n const { plugins = [] as unknown as Plugins } = _learnCard;\n\n const pluginMethods = plugins.reduce<PluginMethods>((cumulativePluginMethods, plugin) => {\n const newPluginMethods = { ...(cumulativePluginMethods as any), ...plugin.methods };\n\n return newPluginMethods;\n }, {} as PluginMethods);\n\n const learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods> = {\n read: {} as LearnCardReadPlane<Plugins>,\n store: {} as LearnCardStorePlane<Plugins>,\n index: {} as LearnCardIndexPlane<Plugins>,\n cache: {} as LearnCardCachePlane<Plugins>,\n id: {} as LearnCardIdPlane<Plugins>,\n context: {} as LearnCardContextPlane<Plugins>,\n plugins: plugins as Plugins,\n invoke: pluginMethods,\n addPlugin: function (plugin) {\n return addPluginToLearnCard(this as any, plugin);\n },\n debug: _learnCard.debug,\n };\n\n (learnCard as any).read = generateReadPlane(learnCard);\n (learnCard as any).store = generateStorePlane(learnCard);\n (learnCard as any).index = generateIndexPlane(learnCard);\n (learnCard as any).cache = generateCachePlane(learnCard);\n (learnCard as any).id = generateIdPlane(learnCard);\n (learnCard as any).context = generateContextPlane(learnCard);\n\n if (pluginMethods) learnCard.invoke = bindMethods(learnCard, pluginMethods);\n\n return learnCard;\n};\n", "import { CredentialRecord, VC, VP } from '@learncard/types';\nimport { TestCachePlugin } from './types';\n\nexport const getTestCache = (): TestCachePlugin => {\n let index: Record<string, CredentialRecord[]> = {};\n let paginatedIndex: Record<\n string,\n { records: CredentialRecord[]; hasMore: boolean; cursor?: string }\n > = {};\n let vcs: Record<string, VC | VP | undefined> = {};\n\n return {\n name: 'Test Cache',\n displayName: 'Test Cache',\n description: '[Testing] Tests Caching Implementation',\n cache: {\n getIndex: async (_learnCard, name, query) => {\n _learnCard.debug?.('Test Cache, getIndex', { name, query, value: index });\n return index[name];\n },\n setIndex: async (_learnCard, name, query, value) => {\n _learnCard.debug?.('Test Cache, setIndex', { name, query, value });\n index[name] = value as any;\n return true;\n },\n getIndexPage: async (_learnCard, name, query, paginationOptions) => {\n _learnCard.debug?.('Test Cache, getIndex', {\n name,\n query,\n paginationOptions,\n value: index,\n });\n return paginatedIndex[name];\n },\n setIndexPage: async (_learnCard, name, query, value, paginationOptions) => {\n _learnCard.debug?.('Test Cache, setIndex', {\n name,\n query,\n paginationOptions,\n value,\n });\n paginatedIndex[name] = value as any;\n return true;\n },\n flushIndex: async _learnCard => {\n _learnCard.debug?.('Test Cache, flushIndex');\n index = {};\n return true;\n },\n getVc: async (_learnCard, uri) => {\n _learnCard.debug?.('Test Cache, getVc', { uri, value: vcs[uri] });\n return vcs[uri];\n },\n setVc: async (_learnCard, uri, vc) => {\n _learnCard.debug?.('Test Cache, setVc', { uri, value: vc });\n vcs[uri] = vc;\n return true;\n },\n flushVc: async _learnCard => {\n _learnCard.debug?.('Test Cache, flushVc');\n vcs = {};\n return true;\n },\n },\n methods: {},\n };\n};\n", "import { CredentialRecord, VC } from '@learncard/types';\nimport { TestIndexPlugin } from './types';\n\nexport const getTestIndex = (): TestIndexPlugin => {\n let index: CredentialRecord[] = [];\n\n return {\n name: 'Test Index',\n displayName: 'Test Index',\n description: '[Testing] Tests Index Implementations',\n index: {\n get: async (_learnCard, query) => {\n _learnCard.debug?.('Test Storage, index, get', { query });\n\n return index;\n },\n add: async (_learnCard, record) => {\n _learnCard.debug?.('Test Storage, index, add', { record });\n\n index.push(record);\n\n return true;\n },\n update: async () => false, // TODO: Implement\n remove: async (_learnCard, id) => {\n _learnCard.debug?.('Test Storage, index, remove', { id });\n\n let recordIndex = index.findIndex(record => record.id === id);\n\n index.splice(recordIndex, 1);\n\n return true;\n },\n },\n methods: {},\n };\n};\n", "import { CredentialRecord, VC, VP } from '@learncard/types';\nimport { TestStoragePlugin } from './types';\n\nexport const getTestStorage = (): TestStoragePlugin => {\n const index: CredentialRecord[] = [];\n const vcs: (VC | VP)[] = [];\n\n return {\n name: 'Test Storage',\n displayName: 'Test Storage',\n description: '[Testing] Tests Storage Implementations',\n read: {\n get: async (_learnCard, uri) => {\n _learnCard.debug?.('Test Storage, read, get', { uri });\n\n if (!uri) return undefined;\n\n const [_lc, method, vcIndex] = uri.split(':');\n\n if (method !== 'test') return undefined;\n\n return vcs[Number.parseInt(vcIndex)];\n },\n },\n store: {\n upload: async (_learnCard, vc) => {\n _learnCard.debug?.('Test Storage, store, upload', { vc });\n\n const vcIndex = vcs.length;\n\n vcs.push(vc);\n\n return `lc:test:${vcIndex}`;\n },\n delete: async (_learnCard, uri) => {\n _learnCard.debug?.('Test Storage, store, delete', { uri });\n\n if (!uri) return false;\n\n const [_lc, method, vcIndex] = uri.split(':');\n\n if (method !== 'test') return false;\n\n const vcIdx = Number.parseInt(vcIndex);\n\n if (vcIdx >= 0 && vcIdx < vcs.length) {\n vcs[vcIdx] = undefined as unknown as VC | VP;\n return true;\n }\n\n return false;\n },\n },\n index: {\n get: async (_learnCard, query) => {\n _learnCard.debug?.('Test Storage, index, get', { query });\n\n return index;\n },\n add: async (_learnCard, record) => {\n _learnCard.debug?.('Test Storage, index, add', { record });\n\n index.push(record);\n\n return true;\n },\n update: async () => false, // TODO: Implement\n remove: async (_learnCard, id) => {\n _learnCard.debug?.('Test Storage, index, remove', { id });\n\n const recordIndex = index.findIndex(record => record.id === id);\n\n index.splice(recordIndex, 1);\n\n return true;\n },\n },\n methods: {},\n };\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var g=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var r=(e,s)=>g(e,"name",{value:s,configurable:!0});var C=(e,s)=>{for(var n in s)g(e,n,{get:s[n],enumerable:!0})},v=(e,s,n,t)=>{if(s&&typeof s=="object"||typeof s=="function")for(let a of w(s))!M.call(e,a)&&a!==n&&g(e,a,{get:()=>s[a],enumerable:!(t=I(s,a))||t.enumerable});return e};var R=e=>v(g({},"__esModule",{value:!0}),e);var U={};C(U,{generateLearnCard:()=>p,getTestCache:()=>A,getTestIndex:()=>N,getTestStorage:()=>j});module.exports=R(U);var f=r((e,s)=>e.reduce((n,t)=>n!==void 0?n:s(t),void 0),"findFirstResult"),d=r((e,s)=>s==="read"?"get"in(e.read??{}):s==="store"?"upload"in(e.store??{}):s==="index"?"get"in(e.index??{}):s==="cache"?"getIndex"in(e.cache??{}):s==="id"?"did"in(e.id??{}):s==="context"?"resolveStaticDocument"in(e.context??{}):!1,"pluginImplementsPlane"),c=r((e,s)=>s==="read"?"read"in e:s==="store"?"store"in e:s==="index"?"index"in e:s==="cache"?"cache"in e:s==="id"?"id"in e:s==="context"?"context"in e:!1,"learnCardImplementsPlane"),m=r((e,s)=>Object.fromEntries(Object.entries(e).map(([n,t],a)=>[n,s(t,a)])),"mapObject"),l=r(e=>e.status==="fulfilled"&&!!e.value,"isFulfilledAndNotEmpty"),y=r((e,s)=>[...new Map(e.map(n=>[s instanceof Function?s(n):n[s],n])).values()],"uniqBy");var P=r((e,s)=>e.reduce((n,t)=>(s in t&&(n[t.name]={name:t.name,displayName:t.displayName,description:t.description}),n),{}),"getPlaneProviders"),x=r((e,s)=>m(s,n=>n.bind(e,e)),"bindLearnCardToFunctionsObject"),T=r(async(e,s)=>(e.debug?.("Adding plugin",s.name),p({plugins:[...e.plugins,s],debug:e.debug})),"addPluginToLearnCard"),b=r(e=>({get:r(async(s,{cache:n="cache-first"}={})=>{if(e.debug?.("learnCard.read.get",s),!s)return;if(n==="cache-only"&&!c(e,"cache"))throw new Error("Cannot read from cache. Cache Plane is not implemented!");if(c(e,"cache")&&n!=="skip-cache"){let i=await e.cache.getVc(s);if(i)return n==="cache-first"&&c(e,"read")&&e.read.get(s,{cache:"skip-cache"}).then(o=>e.cache.setVc(s,o)),i}let a=(await Promise.allSettled(e.plugins.map(async i=>{if(!d(i,"read"))throw new Error("Plugin is not a Read Plugin");return i.read.get(e,s)}))).find(l)?.value;return a&&c(e,"cache")&&n!=="skip-cache"&&await e.cache.setVc(s,a),a},"get"),providers:P(e.plugins,"read")}),"generateReadPlane"),L=r(e=>({upload:r(async(s,n,{cache:t="cache-first"}={})=>{let a=await e.upload(s,n);return t!=="skip-cache"&&c(s,"cache")&&await s.cache.setVc(a,n),a},"upload"),..."uploadMany"in e?{uploadMany:e.uploadMany}:{},..."uploadEncrypted"in e?{uploadEncrypted:r(async(s,n,t,{cache:a="cache-first"}={})=>{let i=await e.uploadEncrypted?.(s,n,t);return a!=="skip-cache"&&c(s,"cache")&&await s.cache.setVc(i,n),i},"uploadEncrypted")}:{}}),"addCachingToStorePlane"),S=r(e=>({...e.plugins.reduce((n,t)=>(d(t,"store")&&(n[t.name]=x(e,L(t.store))),n),{}),providers:P(e.plugins,"store")}),"generateStorePlane"),k=r((e,s)=>({get:r(async(n,t,{cache:a="cache-first"}={})=>{if(a==="cache-only"&&!c(n,"cache"))throw new Error("Cannot read from cache. Cache Plane is not implemented!");if(c(n,"cache")&&a!=="skip-cache"){let o=await n.cache.getIndex(s,t??{});if(o)return a==="cache-first"&&e.get(n,t,{cache:"skip-cache"}).then(u=>{n.cache.setIndex(s,t??{},u)}),o}let i=await e.get(n,t);return i&&c(n,"cache")&&a!=="skip-cache"&&await n.cache.setIndex(s,t??{},i),i},"get"),...e.getPage?{getPage:r(async(n,t,a,{cache:i="cache-first"}={})=>{if(i==="cache-only"&&!c(n,"cache"))throw new Error("Cannot read from cache. Cache Plane is not implemented!");if(c(n,"cache")&&i!=="skip-cache"){let u=await n.cache.getIndexPage(s,t??{},a);if(u)return i==="cache-first"&&e.getPage?.(n,t,a,{cache:"skip-cache"}).then(h=>{n.cache.setIndexPage(s,t??{},h,a)}),u}let o=await e.getPage?.(n,t,a);return o&&c(n,"cache")&&i!=="skip-cache"&&await n.cache.setIndexPage(s,t??{},o,a),o},"getPage")}:{},...e.getCount?{getCount:r(async(n,t,{cache:a="cache-first"}={})=>{if(a==="cache-only"&&!c(n,"cache"))throw new Error("Cannot read from cache. Cache Plane is not implemented!");if(c(n,"cache")&&a!=="skip-cache"){let o=await n.cache.getIndexCount?.(s,t??{});if(o)return a==="cache-first"&&e.getCount?.(n,t,{cache:"skip-cache"}).then(u=>n.cache.setIndexCount?.(s,t??{},u)),o}let i=await e.getCount?.(n,t);return i&&c(n,"cache")&&a!=="skip-cache"&&await n.cache.setIndexCount?.(s,t??{},i),i},"getCount")}:{},add:r(async(n,t,{cache:a="cache-first"}={})=>{let i=await e.add(n,t);return a!=="skip-cache"&&c(n,"cache")&&await n.cache.flushIndex(),i},"add"),...e.addMany?{addMany:r(async(n,t,{cache:a="cache-first"}={})=>{let i=await e.addMany?.(n,t);return a!=="skip-cache"&&c(n,"cache")&&await n.cache.flushIndex(),i},"addMany")}:{},update:r(async(n,t,a,{cache:i="cache-first"}={})=>{let o=await e.update(n,t,a);return i!=="skip-cache"&&c(n,"cache")&&await n.cache.flushIndex(),o},"update"),remove:r(async(n,t,{cache:a="cache-first"}={})=>{let i=await e.remove(n,t);return a!=="skip-cache"&&c(n,"cache")&&await n.cache.flushIndex(),i},"remove"),...e.removeAll?{removeAll:r(async(n,{cache:t="cache-first"}={})=>{let a=await e.removeAll?.(n);return t!=="skip-cache"&&c(n,"cache")&&await n.cache.flushIndex(),a},"removeAll")}:{}}),"addCachingToIndexPlane"),V=r(e=>({...e.plugins.reduce((t,a)=>(d(a,"index")&&(t[a.name]=x(e,k(a.index,a.name))),t),{}),all:{get:r(async(t,{cache:a="cache-first"}={})=>{if(e.debug?.("learnCard.index.all.get"),a==="cache-only"&&!c(e,"cache"))throw new Error("Cannot read from cache. Cache Plane is not implemented!");if(c(e,"cache")&&a!=="skip-cache"){let u=await e.cache.getIndex("all",t??{});if(u)return a==="cache-first"&&c(e,"index")&&e.index.all.get(t,{cache:"skip-cache"}).then(h=>e.cache.setIndex("all",t??{},h)),u}let i=(await Promise.all(e.plugins.map(async u=>d(u,"index")?u.index.get(e,t):[]))).flat(),o=y(i,"id");return o&&c(e,"cache")&&a!=="skip-cache"&&await e.cache.setIndex("all",t??{},o),o},"get")},providers:P(e.plugins,"index")}),"generateIndexPlane"),G=r(e=>({getIndex:r(async(s,n)=>{e.debug?.("learnCard.cache.getIndex");try{return(await Promise.allSettled(e.plugins.map(async i=>{if(!d(i,"cache"))throw new Error("Plugin is not a Cache Plugin");return i.cache.getIndex(e,s,n)}))).find(l)?.value}catch{return}},"getIndex"),setIndex:r(async(s,n,t)=>(e.debug?.("learnCard.cache.setIndex"),(await Promise.allSettled(e.plugins.map(async i=>{if(!d(i,"cache"))throw new Error("Plugin is not a Cache Plugin");return i.cache.setIndex(e,s,n,t)}))).some(i=>i.status==="fulfilled")),"setIndex"),getIndexPage:r(async(s,n,t)=>{e.debug?.("learnCard.cache.getIndex");try{return(await Promise.allSettled(e.plugins.map(async o=>{if(!d(o,"cache"))throw new Error("Plugin is not a Cache Plugin");return o.cache.getIndexPage(e,s,n,t)}))).find(l)?.value}catch{return}},"getIndexPage"),setIndexPage:r(async(s,n,t,a)=>(e.debug?.("learnCard.cache.setIndex"),(await Promise.allSettled(e.plugins.map(async o=>{if(!d(o,"cache"))throw new Error("Plugin is not a Cache Plugin");return o.cache.setIndexPage(e,s,n,t,a)}))).some(o=>o.status==="fulfilled")),"setIndexPage"),getIndexCount:r(async(s,n)=>{e.debug?.("learnCard.cache.getIndex");try{return(await Promise.allSettled(e.plugins.map(async i=>{if(!d(i,"cache"))throw new Error("Plugin is not a Cache Plugin");return i.cache.getIndexCount?.(e,s,n)}))).find(l)?.value}catch{return}},"getIndexCount"),setIndexCount:r(async(s,n,t)=>(e.debug?.("learnCard.cache.setIndex"),(await Promise.allSettled(e.plugins.map(async i=>{if(!d(i,"cache"))throw new Error("Plugin is not a Cache Plugin");return i.cache.setIndexCount?.(e,s,n,t)}))).some(i=>i.status==="fulfilled")),"setIndexCount"),flushIndex:r(async()=>(e.debug?.("learnCard.cache.flushIndex"),(await Promise.allSettled(e.plugins.map(async n=>{if(!d(n,"cache"))throw new Error("Plugin is not a Cache Plugin");return n.cache.flushIndex(e)}))).some(n=>n.status==="fulfilled")),"flushIndex"),getVc:r(async s=>{e.debug?.("learnCard.cache.getVc");try{return(await Promise.allSettled(e.plugins.map(async a=>{if(!d(a,"cache"))throw new Error("Plugin is not a Cache Plugin");return a.cache.getVc(e,s)}))).find(l)?.value}catch{return}},"getVc"),setVc:r(async(s,n)=>(e.debug?.("learnCard.cache.setVc"),(await Promise.allSettled(e.plugins.map(async a=>{if(!d(a,"cache"))throw new Error("Plugin is not a Cache Plugin");return a.cache.setVc(e,s,n)}))).some(a=>a.status==="fulfilled")),"setVc"),flushVc:r(async()=>(e.debug?.("learnCard.cache.flushVc"),(await Promise.allSettled(e.plugins.map(async n=>{if(!d(n,"cache"))throw new Error("Plugin is not a Cache Plugin");return n.cache.flushVc(e)}))).some(n=>n.status==="fulfilled")),"flushVc"),providers:P(e.plugins,"cache")}),"generateCachePlane"),E=r(e=>({did:r(s=>{e.debug?.("learnCard.id.did",s);let n=f([...e.plugins].reverse(),t=>{try{return d(t,"id")?t.id.did(e,s):void 0}catch{return}});if(!n)throw new Error(`No plugin supports did method ${s}`);return n},"did"),keypair:r(s=>{e.debug?.("learnCard.id.keypair",s);let n=f(e.plugins,t=>{try{return d(t,"id")?t.id.keypair(e,s):void 0}catch{return}});if(!n)throw new Error(`No plugin supports keypair type ${s}`);return n},"keypair"),providers:P(e.plugins,"id")}),"generateIdPlane"),F=r(e=>({resolveDocument:r(async(s,n=!1)=>{e.debug?.("learnCard.context.resolveDocument",s);let a=(await Promise.all(e.plugins.map(async o=>{if(d(o,"context"))return o.context.resolveStaticDocument(e,s)}))).find(Boolean);return a||!n?a:(await Promise.all(e.plugins.map(async o=>{if(d(o,"context"))return o.context.resolveRemoteDocument?.(e,s)}))).find(Boolean)},"resolveDocument"),providers:P(e.plugins,"context")}),"generateContextPlane"),D=r((e,s)=>x(e,s),"bindMethods"),p=r(async(e={})=>{let{plugins:s=[]}=e,n=s.reduce((a,i)=>({...a,...i.methods}),{}),t={read:{},store:{},index:{},cache:{},id:{},context:{},plugins:s,invoke:n,addPlugin:r(function(a){return T(this,a)},"addPlugin"),debug:e.debug};return t.read=b(t),t.store=S(t),t.index=V(t),t.cache=G(t),t.id=E(t),t.context=F(t),n&&(t.invoke=D(t,n)),t},"generateLearnCard");var A=r(()=>{let e={},s={},n={};return{name:"Test Cache",displayName:"Test Cache",description:"[Testing] Tests Caching Implementation",cache:{getIndex:r(async(t,a,i)=>(t.debug?.("Test Cache, getIndex",{name:a,query:i,value:e}),e[a]),"getIndex"),setIndex:r(async(t,a,i,o)=>(t.debug?.("Test Cache, setIndex",{name:a,query:i,value:o}),e[a]=o,!0),"setIndex"),getIndexPage:r(async(t,a,i,o)=>(t.debug?.("Test Cache, getIndex",{name:a,query:i,paginationOptions:o,value:e}),s[a]),"getIndexPage"),setIndexPage:r(async(t,a,i,o,u)=>(t.debug?.("Test Cache, setIndex",{name:a,query:i,paginationOptions:u,value:o}),s[a]=o,!0),"setIndexPage"),flushIndex:r(async t=>(t.debug?.("Test Cache, flushIndex"),e={},!0),"flushIndex"),getVc:r(async(t,a)=>(t.debug?.("Test Cache, getVc",{uri:a,value:n[a]}),n[a]),"getVc"),setVc:r(async(t,a,i)=>(t.debug?.("Test Cache, setVc",{uri:a,value:i}),n[a]=i,!0),"setVc"),flushVc:r(async t=>(t.debug?.("Test Cache, flushVc"),n={},!0),"flushVc")},methods:{}}},"getTestCache");var N=r(()=>{let e=[];return{name:"Test Index",displayName:"Test Index",description:"[Testing] Tests Index Implementations",index:{get:r(async(s,n)=>(s.debug?.("Test Storage, index, get",{query:n}),e),"get"),add:r(async(s,n)=>(s.debug?.("Test Storage, index, add",{record:n}),e.push(n),!0),"add"),update:r(async()=>!1,"update"),remove:r(async(s,n)=>{s.debug?.("Test Storage, index, remove",{id:n});let t=e.findIndex(a=>a.id===n);return e.splice(t,1),!0},"remove")},methods:{}}},"getTestIndex");var j=r(()=>{let e=[],s=[];return{name:"Test Storage",displayName:"Test Storage",description:"[Testing] Tests Storage Implementations",read:{get:r(async(n,t)=>{if(n.debug?.("Test Storage, read, get",{uri:t}),!t)return;let[a,i,o]=t.split(":");if(i==="test")return s[Number.parseInt(o)]},"get")},store:{upload:r(async(n,t)=>{n.debug?.("Test Storage, store, upload",{vc:t});let a=s.length;return s.push(t),`lc:test:${a}`},"upload")},index:{get:r(async(n,t)=>(n.debug?.("Test Storage, index, get",{query:t}),e),"get"),add:r(async(n,t)=>(n.debug?.("Test Storage, index, add",{record:t}),e.push(t),!0),"add"),update:r(async()=>!1,"update"),remove:r(async(n,t)=>{n.debug?.("Test Storage, index, remove",{id:t});let a=e.findIndex(i=>i.id===t);return e.splice(a,1),!0},"remove")},methods:{}}},"getTestStorage");
|
|
1
|
+
"use strict";var g=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var r=(e,s)=>g(e,"name",{value:s,configurable:!0});var C=(e,s)=>{for(var n in s)g(e,n,{get:s[n],enumerable:!0})},v=(e,s,n,t)=>{if(s&&typeof s=="object"||typeof s=="function")for(let a of w(s))!M.call(e,a)&&a!==n&&g(e,a,{get:()=>s[a],enumerable:!(t=I(s,a))||t.enumerable});return e};var R=e=>v(g({},"__esModule",{value:!0}),e);var U={};C(U,{generateLearnCard:()=>p,getTestCache:()=>N,getTestIndex:()=>A,getTestStorage:()=>j});module.exports=R(U);var f=r((e,s)=>e.reduce((n,t)=>n!==void 0?n:s(t),void 0),"findFirstResult"),d=r((e,s)=>s==="read"?"get"in(e.read??{}):s==="store"?"upload"in(e.store??{}):s==="index"?"get"in(e.index??{}):s==="cache"?"getIndex"in(e.cache??{}):s==="id"?"did"in(e.id??{}):s==="context"?"resolveStaticDocument"in(e.context??{}):!1,"pluginImplementsPlane"),o=r((e,s)=>s==="read"?"read"in e:s==="store"?"store"in e:s==="index"?"index"in e:s==="cache"?"cache"in e:s==="id"?"id"in e:s==="context"?"context"in e:!1,"learnCardImplementsPlane"),m=r((e,s)=>Object.fromEntries(Object.entries(e).map(([n,t],a)=>[n,s(t,a)])),"mapObject"),l=r(e=>e.status==="fulfilled"&&!!e.value,"isFulfilledAndNotEmpty"),y=r((e,s)=>[...new Map(e.map(n=>[s instanceof Function?s(n):n[s],n])).values()],"uniqBy");var P=r((e,s)=>e.reduce((n,t)=>(s in t&&(n[t.name]={name:t.name,displayName:t.displayName,description:t.description}),n),{}),"getPlaneProviders"),x=r((e,s)=>m(s,n=>n.bind(e,e)),"bindLearnCardToFunctionsObject"),b=r(async(e,s)=>(e.debug?.("Adding plugin",s.name),p({plugins:[...e.plugins,s],debug:e.debug})),"addPluginToLearnCard"),T=r(e=>({get:r(async(s,{cache:n="cache-first"}={})=>{if(e.debug?.("learnCard.read.get",s),!s)return;if(n==="cache-only"&&!o(e,"cache"))throw new Error("Cannot read from cache. Cache Plane is not implemented!");if(o(e,"cache")&&n!=="skip-cache"){let i=await e.cache.getVc(s);if(i)return n==="cache-first"&&o(e,"read")&&e.read.get(s,{cache:"skip-cache"}).then(c=>e.cache.setVc(s,c)),i}let a=(await Promise.allSettled(e.plugins.map(async i=>{if(!d(i,"read"))throw new Error("Plugin is not a Read Plugin");return i.read.get(e,s)}))).find(l)?.value;return a&&o(e,"cache")&&n!=="skip-cache"&&await e.cache.setVc(s,a),a},"get"),providers:P(e.plugins,"read")}),"generateReadPlane"),L=r(e=>({upload:r(async(s,n,{cache:t="cache-first"}={})=>{let a=await e.upload(s,n);return t!=="skip-cache"&&o(s,"cache")&&await s.cache.setVc(a,n),a},"upload"),..."uploadMany"in e?{uploadMany:e.uploadMany}:{},..."uploadEncrypted"in e?{uploadEncrypted:r(async(s,n,t,{cache:a="cache-first"}={})=>{let i=await e.uploadEncrypted?.(s,n,t);return a!=="skip-cache"&&o(s,"cache")&&await s.cache.setVc(i,n),i},"uploadEncrypted")}:{},..."delete"in e?{delete:r(async(s,n,{cache:t="cache-first"}={})=>{let a=await e.delete?.(s,n);return a&&t!=="skip-cache"&&o(s,"cache")&&await s.cache.setVc(n,void 0),a},"delete")}:{}}),"addCachingToStorePlane"),S=r(e=>({...e.plugins.reduce((n,t)=>(d(t,"store")&&(n[t.name]=x(e,L(t.store))),n),{}),providers:P(e.plugins,"store")}),"generateStorePlane"),V=r((e,s)=>({get:r(async(n,t,{cache:a="cache-first"}={})=>{if(a==="cache-only"&&!o(n,"cache"))throw new Error("Cannot read from cache. Cache Plane is not implemented!");if(o(n,"cache")&&a!=="skip-cache"){let c=await n.cache.getIndex(s,t??{});if(c)return a==="cache-first"&&e.get(n,t,{cache:"skip-cache"}).then(u=>{n.cache.setIndex(s,t??{},u)}),c}let i=await e.get(n,t);return i&&o(n,"cache")&&a!=="skip-cache"&&await n.cache.setIndex(s,t??{},i),i},"get"),...e.getPage?{getPage:r(async(n,t,a,{cache:i="cache-first"}={})=>{if(i==="cache-only"&&!o(n,"cache"))throw new Error("Cannot read from cache. Cache Plane is not implemented!");if(o(n,"cache")&&i!=="skip-cache"){let u=await n.cache.getIndexPage(s,t??{},a);if(u)return i==="cache-first"&&e.getPage?.(n,t,a,{cache:"skip-cache"}).then(h=>{n.cache.setIndexPage(s,t??{},h,a)}),u}let c=await e.getPage?.(n,t,a);return c&&o(n,"cache")&&i!=="skip-cache"&&await n.cache.setIndexPage(s,t??{},c,a),c},"getPage")}:{},...e.getCount?{getCount:r(async(n,t,{cache:a="cache-first"}={})=>{if(a==="cache-only"&&!o(n,"cache"))throw new Error("Cannot read from cache. Cache Plane is not implemented!");if(o(n,"cache")&&a!=="skip-cache"){let c=await n.cache.getIndexCount?.(s,t??{});if(c)return a==="cache-first"&&e.getCount?.(n,t,{cache:"skip-cache"}).then(u=>n.cache.setIndexCount?.(s,t??{},u)),c}let i=await e.getCount?.(n,t);return i&&o(n,"cache")&&a!=="skip-cache"&&await n.cache.setIndexCount?.(s,t??{},i),i},"getCount")}:{},add:r(async(n,t,{cache:a="cache-first"}={})=>{let i=await e.add(n,t);return a!=="skip-cache"&&o(n,"cache")&&await n.cache.flushIndex(),i},"add"),...e.addMany?{addMany:r(async(n,t,{cache:a="cache-first"}={})=>{let i=await e.addMany?.(n,t);return a!=="skip-cache"&&o(n,"cache")&&await n.cache.flushIndex(),i},"addMany")}:{},update:r(async(n,t,a,{cache:i="cache-first"}={})=>{let c=await e.update(n,t,a);return i!=="skip-cache"&&o(n,"cache")&&await n.cache.flushIndex(),c},"update"),remove:r(async(n,t,{cache:a="cache-first"}={})=>{let i=await e.remove(n,t);return a!=="skip-cache"&&o(n,"cache")&&await n.cache.flushIndex(),i},"remove"),...e.removeAll?{removeAll:r(async(n,{cache:t="cache-first"}={})=>{let a=await e.removeAll?.(n);return t!=="skip-cache"&&o(n,"cache")&&await n.cache.flushIndex(),a},"removeAll")}:{}}),"addCachingToIndexPlane"),k=r(e=>({...e.plugins.reduce((t,a)=>(d(a,"index")&&(t[a.name]=x(e,V(a.index,a.name))),t),{}),all:{get:r(async(t,{cache:a="cache-first"}={})=>{if(e.debug?.("learnCard.index.all.get"),a==="cache-only"&&!o(e,"cache"))throw new Error("Cannot read from cache. Cache Plane is not implemented!");if(o(e,"cache")&&a!=="skip-cache"){let u=await e.cache.getIndex("all",t??{});if(u)return a==="cache-first"&&o(e,"index")&&e.index.all.get(t,{cache:"skip-cache"}).then(h=>e.cache.setIndex("all",t??{},h)),u}let i=(await Promise.all(e.plugins.map(async u=>d(u,"index")?u.index.get(e,t):[]))).flat(),c=y(i,"id");return c&&o(e,"cache")&&a!=="skip-cache"&&await e.cache.setIndex("all",t??{},c),c},"get")},providers:P(e.plugins,"index")}),"generateIndexPlane"),G=r(e=>({getIndex:r(async(s,n)=>{e.debug?.("learnCard.cache.getIndex");try{return(await Promise.allSettled(e.plugins.map(async i=>{if(!d(i,"cache"))throw new Error("Plugin is not a Cache Plugin");return i.cache.getIndex(e,s,n)}))).find(l)?.value}catch{return}},"getIndex"),setIndex:r(async(s,n,t)=>(e.debug?.("learnCard.cache.setIndex"),(await Promise.allSettled(e.plugins.map(async i=>{if(!d(i,"cache"))throw new Error("Plugin is not a Cache Plugin");return i.cache.setIndex(e,s,n,t)}))).some(i=>i.status==="fulfilled")),"setIndex"),getIndexPage:r(async(s,n,t)=>{e.debug?.("learnCard.cache.getIndex");try{return(await Promise.allSettled(e.plugins.map(async c=>{if(!d(c,"cache"))throw new Error("Plugin is not a Cache Plugin");return c.cache.getIndexPage(e,s,n,t)}))).find(l)?.value}catch{return}},"getIndexPage"),setIndexPage:r(async(s,n,t,a)=>(e.debug?.("learnCard.cache.setIndex"),(await Promise.allSettled(e.plugins.map(async c=>{if(!d(c,"cache"))throw new Error("Plugin is not a Cache Plugin");return c.cache.setIndexPage(e,s,n,t,a)}))).some(c=>c.status==="fulfilled")),"setIndexPage"),getIndexCount:r(async(s,n)=>{e.debug?.("learnCard.cache.getIndex");try{return(await Promise.allSettled(e.plugins.map(async i=>{if(!d(i,"cache"))throw new Error("Plugin is not a Cache Plugin");return i.cache.getIndexCount?.(e,s,n)}))).find(l)?.value}catch{return}},"getIndexCount"),setIndexCount:r(async(s,n,t)=>(e.debug?.("learnCard.cache.setIndex"),(await Promise.allSettled(e.plugins.map(async i=>{if(!d(i,"cache"))throw new Error("Plugin is not a Cache Plugin");return i.cache.setIndexCount?.(e,s,n,t)}))).some(i=>i.status==="fulfilled")),"setIndexCount"),flushIndex:r(async()=>(e.debug?.("learnCard.cache.flushIndex"),(await Promise.allSettled(e.plugins.map(async n=>{if(!d(n,"cache"))throw new Error("Plugin is not a Cache Plugin");return n.cache.flushIndex(e)}))).some(n=>n.status==="fulfilled")),"flushIndex"),getVc:r(async s=>{e.debug?.("learnCard.cache.getVc");try{return(await Promise.allSettled(e.plugins.map(async a=>{if(!d(a,"cache"))throw new Error("Plugin is not a Cache Plugin");return a.cache.getVc(e,s)}))).find(l)?.value}catch{return}},"getVc"),setVc:r(async(s,n)=>(e.debug?.("learnCard.cache.setVc"),(await Promise.allSettled(e.plugins.map(async a=>{if(!d(a,"cache"))throw new Error("Plugin is not a Cache Plugin");return a.cache.setVc(e,s,n)}))).some(a=>a.status==="fulfilled")),"setVc"),flushVc:r(async()=>(e.debug?.("learnCard.cache.flushVc"),(await Promise.allSettled(e.plugins.map(async n=>{if(!d(n,"cache"))throw new Error("Plugin is not a Cache Plugin");return n.cache.flushVc(e)}))).some(n=>n.status==="fulfilled")),"flushVc"),providers:P(e.plugins,"cache")}),"generateCachePlane"),E=r(e=>({did:r(s=>{e.debug?.("learnCard.id.did",s);let n=f([...e.plugins].reverse(),t=>{try{return d(t,"id")?t.id.did(e,s):void 0}catch{return}});if(!n)throw new Error(`No plugin supports did method ${s}`);return n},"did"),keypair:r(s=>{e.debug?.("learnCard.id.keypair",s);let n=f(e.plugins,t=>{try{return d(t,"id")?t.id.keypair(e,s):void 0}catch{return}});if(!n)throw new Error(`No plugin supports keypair type ${s}`);return n},"keypair"),providers:P(e.plugins,"id")}),"generateIdPlane"),F=r(e=>({resolveDocument:r(async(s,n=!1)=>{e.debug?.("learnCard.context.resolveDocument",s);let a=(await Promise.all(e.plugins.map(async c=>{if(d(c,"context"))return c.context.resolveStaticDocument(e,s)}))).find(Boolean);return a||!n?a:(await Promise.all(e.plugins.map(async c=>{if(d(c,"context"))return c.context.resolveRemoteDocument?.(e,s)}))).find(Boolean)},"resolveDocument"),providers:P(e.plugins,"context")}),"generateContextPlane"),D=r((e,s)=>x(e,s),"bindMethods"),p=r(async(e={})=>{let{plugins:s=[]}=e,n=s.reduce((a,i)=>({...a,...i.methods}),{}),t={read:{},store:{},index:{},cache:{},id:{},context:{},plugins:s,invoke:n,addPlugin:r(function(a){return b(this,a)},"addPlugin"),debug:e.debug};return t.read=T(t),t.store=S(t),t.index=k(t),t.cache=G(t),t.id=E(t),t.context=F(t),n&&(t.invoke=D(t,n)),t},"generateLearnCard");var N=r(()=>{let e={},s={},n={};return{name:"Test Cache",displayName:"Test Cache",description:"[Testing] Tests Caching Implementation",cache:{getIndex:r(async(t,a,i)=>(t.debug?.("Test Cache, getIndex",{name:a,query:i,value:e}),e[a]),"getIndex"),setIndex:r(async(t,a,i,c)=>(t.debug?.("Test Cache, setIndex",{name:a,query:i,value:c}),e[a]=c,!0),"setIndex"),getIndexPage:r(async(t,a,i,c)=>(t.debug?.("Test Cache, getIndex",{name:a,query:i,paginationOptions:c,value:e}),s[a]),"getIndexPage"),setIndexPage:r(async(t,a,i,c,u)=>(t.debug?.("Test Cache, setIndex",{name:a,query:i,paginationOptions:u,value:c}),s[a]=c,!0),"setIndexPage"),flushIndex:r(async t=>(t.debug?.("Test Cache, flushIndex"),e={},!0),"flushIndex"),getVc:r(async(t,a)=>(t.debug?.("Test Cache, getVc",{uri:a,value:n[a]}),n[a]),"getVc"),setVc:r(async(t,a,i)=>(t.debug?.("Test Cache, setVc",{uri:a,value:i}),n[a]=i,!0),"setVc"),flushVc:r(async t=>(t.debug?.("Test Cache, flushVc"),n={},!0),"flushVc")},methods:{}}},"getTestCache");var A=r(()=>{let e=[];return{name:"Test Index",displayName:"Test Index",description:"[Testing] Tests Index Implementations",index:{get:r(async(s,n)=>(s.debug?.("Test Storage, index, get",{query:n}),e),"get"),add:r(async(s,n)=>(s.debug?.("Test Storage, index, add",{record:n}),e.push(n),!0),"add"),update:r(async()=>!1,"update"),remove:r(async(s,n)=>{s.debug?.("Test Storage, index, remove",{id:n});let t=e.findIndex(a=>a.id===n);return e.splice(t,1),!0},"remove")},methods:{}}},"getTestIndex");var j=r(()=>{let e=[],s=[];return{name:"Test Storage",displayName:"Test Storage",description:"[Testing] Tests Storage Implementations",read:{get:r(async(n,t)=>{if(n.debug?.("Test Storage, read, get",{uri:t}),!t)return;let[a,i,c]=t.split(":");if(i==="test")return s[Number.parseInt(c)]},"get")},store:{upload:r(async(n,t)=>{n.debug?.("Test Storage, store, upload",{vc:t});let a=s.length;return s.push(t),`lc:test:${a}`},"upload"),delete:r(async(n,t)=>{if(n.debug?.("Test Storage, store, delete",{uri:t}),!t)return!1;let[a,i,c]=t.split(":");if(i!=="test")return!1;let u=Number.parseInt(c);return u>=0&&u<s.length?(s[u]=void 0,!0):!1},"delete")},index:{get:r(async(n,t)=>(n.debug?.("Test Storage, index, get",{query:t}),e),"get"),add:r(async(n,t)=>(n.debug?.("Test Storage, index, add",{record:t}),e.push(t),!0),"add"),update:r(async()=>!1,"update"),remove:r(async(n,t)=>{n.debug?.("Test Storage, index, remove",{id:t});let a=e.findIndex(i=>i.id===t);return e.splice(a,1),!0},"remove")},methods:{}}},"getTestStorage");
|
|
2
2
|
//# sourceMappingURL=core.cjs.production.min.cjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/wallet/base/helpers.ts", "../src/wallet/base/wallet.ts", "../src/wallet/plugins/test-cache/index.ts", "../src/wallet/plugins/test-index/index.ts", "../src/wallet/plugins/test-storage/index.ts"],
|
|
4
|
-
"sourcesContent": ["/// <reference path=\"./types/global.d.ts\" />\n\nimport './polyfills';\n\nexport { LearnCard, Plugin } from 'types/wallet';\nexport * from 'types/LearnCard';\nexport * from '@wallet/base';\nexport * from '@wallet/plugins';\n", "import { LearnCard, Plugin } from 'types/wallet';\nimport { ControlPlane } from 'types/planes';\n\n/** Type guard for removing null/undefined */\nexport const isNotNull = <T>(item?: T | null): item is T => !!item;\n\n/** Removes null/undefined from items in an array */\nexport const filterNulls = <T>(array: (T | null | undefined)[]) => array.filter(isNotNull);\n\n/**\n * Loops through an array, running a callback over it until that callback returns a value. Once the\n * first value is found, it is returned. If no value is found, undefined is returned instead\n */\nexport const findFirstResult = <T, U>(\n array: T[],\n callback: (item: T) => U | undefined\n): U | undefined => {\n return array.reduce<U | undefined>((result, item) => {\n if (result !== undefined) return result;\n\n return callback(item);\n }, undefined);\n};\n\nexport const pluginImplementsPlane = <Plane extends ControlPlane>(\n plugin: Plugin,\n plane: Plane\n): plugin is Plugin<any, Plane> => {\n if (plane === 'read') return 'get' in (plugin.read ?? {});\n if (plane === 'store') return 'upload' in (plugin.store ?? {});\n if (plane === 'index') return 'get' in (plugin.index ?? {});\n if (plane === 'cache') return 'getIndex' in (plugin.cache ?? {});\n if (plane === 'id') return 'did' in (plugin.id ?? {});\n if (plane === 'context') return 'resolveStaticDocument' in (plugin.context ?? {});\n\n return false;\n};\n\nexport const learnCardImplementsPlane = <Plane extends ControlPlane>(\n learnCard: LearnCard<any, any, any>,\n plane: Plane\n): learnCard is LearnCard<any, Plane> => {\n if (plane === 'read') return 'read' in learnCard;\n if (plane === 'store') return 'store' in learnCard;\n if (plane === 'index') return 'index' in learnCard;\n if (plane === 'cache') return 'cache' in learnCard;\n if (plane === 'id') return 'id' in learnCard;\n if (plane === 'context') return 'context' in learnCard;\n\n return false;\n};\n\nexport const mapObject = <T extends string, U, V>(\n obj: Record<T, U>,\n callback: (value: U, index: number) => V\n): Record<T, V> => {\n return Object.fromEntries(\n Object.entries<U>(obj).map(([key, value], index) => [key, callback(value, index)])\n ) as any;\n};\n\nexport const isFulfilledAndNotEmpty = <T>(\n input: PromiseSettledResult<T>\n): input is PromiseFulfilledResult<T> => input.status === 'fulfilled' && !!input.value;\n\nexport const uniqBy = <Obj extends Record<string, any>>(\n array: Obj[],\n key: keyof Obj | ((obj: Obj) => any)\n) => {\n return [\n ...new Map(array.map(obj => [key instanceof Function ? key(obj) : obj[key], obj])).values(),\n ];\n};\n", "import { CredentialRecord } from '@learncard/types';\nimport { Query } from 'sift';\n\nimport { Plugin, LearnCard, GetPluginMethods, AddImplicitLearnCardArgument } from 'types/wallet';\nimport {\n ControlPlane,\n GetPlanesForPlugins,\n GetPlaneProviders,\n IndexPlane,\n LearnCardReadPlane,\n LearnCardStorePlane,\n LearnCardIndexPlane,\n LearnCardCachePlane,\n LearnCardIdPlane,\n LearnCardContextPlane,\n StorePlane,\n PlaneOptions,\n} from 'types/planes';\nimport {\n findFirstResult,\n pluginImplementsPlane,\n learnCardImplementsPlane,\n mapObject,\n isFulfilledAndNotEmpty,\n uniqBy,\n} from './helpers';\n\nconst getPlaneProviders = <Plugins extends Plugin[], Plane extends ControlPlane>(\n plugins: Plugins,\n plane: Plane\n): GetPlaneProviders<Plugins, Plane> => {\n return plugins.reduce((providers, plugin) => {\n if (plane in plugin) {\n providers[plugin.name as keyof typeof providers] = {\n name: plugin.name,\n displayName: plugin.displayName,\n description: plugin.description,\n } as any;\n }\n\n return providers;\n }, {} as GetPlaneProviders<Plugins, Plane>);\n};\n\nconst bindLearnCardToFunctionsObject = (\n learnCard: LearnCard<any, any, any>,\n obj: Record<string, (...args: any[]) => any>\n) => mapObject(obj, method => method.bind(learnCard, learnCard));\n\nconst addPluginToLearnCard = async <NewPlugin extends Plugin, Plugins extends Plugin[]>(\n learnCard: LearnCard<Plugins>,\n plugin: NewPlugin\n): Promise<LearnCard<[...Plugins, NewPlugin]>> => {\n learnCard.debug?.('Adding plugin', plugin.name);\n // eslint-disable-next-line\n return (generateLearnCard as any)({\n plugins: [...learnCard.plugins, plugin],\n debug: learnCard.debug,\n });\n};\n\nconst generateReadPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard:\n | LearnCard<Plugins, ControlPlanes, PluginMethods>\n | LearnCard<Plugins, 'cache', PluginMethods>\n): LearnCardReadPlane<Plugins> => {\n return {\n get: async (uri, { cache = 'cache-first' } = {}) => {\n learnCard.debug?.('learnCard.read.get', uri);\n\n if (!uri) return undefined;\n\n if (cache === 'cache-only' && !learnCardImplementsPlane(learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await learnCard.cache.getVc(uri);\n\n if (cachedResponse) {\n if (cache === 'cache-first' && learnCardImplementsPlane(learnCard, 'read')) {\n learnCard.read\n .get(uri, { cache: 'skip-cache' })\n .then(res => learnCard.cache.setVc(uri, res));\n }\n\n return cachedResponse;\n }\n }\n\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'read')) {\n throw new Error('Plugin is not a Read Plugin');\n }\n\n return plugin.read.get(learnCard as any, uri);\n })\n );\n\n const vc = results.find(isFulfilledAndNotEmpty)?.value;\n\n if (vc && learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n await learnCard.cache.setVc(uri, vc);\n }\n\n return vc;\n },\n providers: getPlaneProviders(learnCard.plugins, 'read'),\n };\n};\n\nconst addCachingToStorePlane = <\n ControlPlanes extends ControlPlane = never,\n Methods extends Record<string, (...args: any[]) => any> = Record<never, never>,\n DependentControlPlanes extends ControlPlane = never,\n DependentMethods extends Record<string, (...args: any[]) => any> = Record<never, never>\n>(\n plane: AddImplicitLearnCardArgument<\n StorePlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n >\n): AddImplicitLearnCardArgument<\n StorePlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n> => ({\n upload: async (_learnCard, vc, { cache = 'cache-first' } = {}) => {\n const uri = await plane.upload(_learnCard, vc);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.setVc(uri, vc);\n }\n\n return uri;\n },\n // TODO: Add caching to uploadMany\n ...('uploadMany' in plane ? { uploadMany: plane.uploadMany } : {}),\n ...('uploadEncrypted' in plane\n ? {\n uploadEncrypted: async (_learnCard, vc, params, { cache = 'cache-first' } = {}) => {\n const uri = await plane.uploadEncrypted?.(_learnCard, vc, params);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.setVc(uri, vc);\n }\n\n return uri;\n },\n }\n : {}),\n});\n\nconst generateStorePlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardStorePlane<Plugins> => {\n const pluginPlanes = learnCard.plugins.reduce((planes, plugin) => {\n if (pluginImplementsPlane(plugin, 'store')) {\n planes[plugin.name as keyof typeof planes] = bindLearnCardToFunctionsObject(\n learnCard,\n addCachingToStorePlane(plugin.store)\n ) as any;\n }\n\n return planes;\n }, {} as LearnCardStorePlane<Plugins>);\n\n return { ...pluginPlanes, providers: getPlaneProviders(learnCard.plugins, 'store') };\n};\n\nconst addCachingToIndexPlane = <\n ControlPlanes extends ControlPlane = never,\n Methods extends Record<string, (...args: any[]) => any> = Record<never, never>,\n DependentControlPlanes extends ControlPlane = never,\n DependentMethods extends Record<string, (...args: any[]) => any> = Record<never, never>\n>(\n plane: AddImplicitLearnCardArgument<\n IndexPlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n >,\n name: string\n): AddImplicitLearnCardArgument<\n IndexPlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n> => ({\n get: async (_learnCard, query, { cache = 'cache-first' } = {}) => {\n if (cache === 'cache-only' && !learnCardImplementsPlane(_learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await _learnCard.cache.getIndex(name, query ?? {});\n\n if (cachedResponse) {\n if (cache === 'cache-first') {\n plane.get(_learnCard, query, { cache: 'skip-cache' }).then(res => {\n _learnCard.cache.setIndex(name, query ?? {}, res);\n });\n }\n\n return cachedResponse;\n }\n }\n\n const list = await plane.get(_learnCard, query);\n\n if (list && learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n await _learnCard.cache.setIndex(name, query ?? {}, list);\n }\n\n return list;\n },\n ...(plane.getPage\n ? {\n getPage: async (\n _learnCard,\n query,\n paginationOptions,\n { cache = 'cache-first' } = {}\n ) => {\n if (cache === 'cache-only' && !learnCardImplementsPlane(_learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await _learnCard.cache.getIndexPage(\n name,\n query ?? {},\n paginationOptions\n );\n\n if (cachedResponse) {\n if (cache === 'cache-first') {\n plane\n .getPage?.(_learnCard, query, paginationOptions, {\n cache: 'skip-cache',\n })\n .then((res: any) => {\n _learnCard.cache.setIndexPage(\n name,\n query ?? {},\n res,\n paginationOptions\n );\n });\n }\n\n return cachedResponse;\n }\n }\n\n const result = await plane.getPage?.(_learnCard, query, paginationOptions);\n\n if (\n result &&\n learnCardImplementsPlane(_learnCard, 'cache') &&\n cache !== 'skip-cache'\n ) {\n await _learnCard.cache.setIndexPage(\n name,\n query ?? {},\n result,\n paginationOptions\n );\n }\n\n return result;\n },\n }\n : {}),\n ...(plane.getCount\n ? {\n getCount: async (_learnCard, query, { cache = 'cache-first' } = {}) => {\n if (cache === 'cache-only' && !learnCardImplementsPlane(_learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await _learnCard.cache.getIndexCount?.(\n name,\n query ?? {}\n );\n\n if (cachedResponse) {\n if (cache === 'cache-first') {\n plane\n .getCount?.(_learnCard, query, {\n cache: 'skip-cache',\n })\n .then((res: number) =>\n _learnCard.cache.setIndexCount?.(name, query ?? {}, res)\n );\n }\n\n return cachedResponse;\n }\n }\n\n const result = await plane.getCount?.(_learnCard, query);\n\n if (\n result &&\n learnCardImplementsPlane(_learnCard, 'cache') &&\n cache !== 'skip-cache'\n ) {\n await _learnCard.cache.setIndexCount?.(name, query ?? {}, result);\n }\n\n return result;\n },\n }\n : {}),\n add: async (_learnCard, record, { cache = 'cache-first' } = {}) => {\n const result = await plane.add(_learnCard, record);\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n ...(plane.addMany\n ? {\n addMany: async (_learnCard, records, { cache = 'cache-first' } = {}) => {\n const result = await plane.addMany?.(_learnCard, records);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n }\n : {}),\n update: async (_learnCard, id, update, { cache = 'cache-first' } = {}) => {\n const result = await plane.update(_learnCard, id, update);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n remove: async (_learnCard, id, { cache = 'cache-first' } = {}) => {\n const result = await plane.remove(_learnCard, id);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n ...(plane.removeAll\n ? {\n removeAll: async (_learnCard, { cache = 'cache-first' } = {}) => {\n const result = await plane.removeAll?.(_learnCard);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n }\n : {}),\n});\n\nconst generateIndexPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardIndexPlane<Plugins> => {\n const individualPlanes = learnCard.plugins.reduce<LearnCardIndexPlane<Plugins>>(\n (planes, plugin) => {\n if (pluginImplementsPlane(plugin, 'index')) {\n planes[plugin.name as keyof typeof planes] = bindLearnCardToFunctionsObject(\n learnCard,\n addCachingToIndexPlane(plugin.index, plugin.name)\n ) as any;\n }\n\n return planes;\n },\n {} as LearnCardIndexPlane<Plugins>\n );\n\n const all: Pick<IndexPlane, 'get'> = {\n get: async <Metadata extends Record<string, any> = Record<never, never>>(\n query?: Partial<Query<CredentialRecord<Metadata>>>,\n { cache = 'cache-first' }: PlaneOptions = {}\n ) => {\n learnCard.debug?.('learnCard.index.all.get');\n\n if (cache === 'cache-only' && !learnCardImplementsPlane(learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await learnCard.cache.getIndex<Metadata>('all', query ?? {});\n\n if (cachedResponse) {\n if (cache === 'cache-first' && learnCardImplementsPlane(learnCard, 'index')) {\n learnCard.index.all\n .get(query, { cache: 'skip-cache' })\n .then(res => learnCard.cache.setIndex('all', query ?? {}, res));\n }\n\n return cachedResponse;\n }\n }\n\n const resultsWithDuplicates = (\n await Promise.all(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'index')) return [];\n\n return plugin.index.get(learnCard as any, query) as Promise<\n CredentialRecord<Metadata>[]\n >;\n })\n )\n ).flat();\n\n const results = uniqBy(resultsWithDuplicates, 'id');\n\n if (results && learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n await learnCard.cache.setIndex('all', query ?? {}, results);\n }\n\n return results;\n },\n };\n\n return { ...individualPlanes, all, providers: getPlaneProviders(learnCard.plugins, 'index') };\n};\n\nconst generateCachePlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardCachePlane<Plugins> => {\n return {\n getIndex: async <Metadata extends Record<string, any> = Record<never, never>>(\n name: string,\n query: Partial<Query<CredentialRecord<Metadata>>>\n ) => {\n learnCard.debug?.('learnCard.cache.getIndex');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getIndex(learnCard as any, name, query) as Promise<\n CredentialRecord<Metadata>[]\n >;\n })\n );\n\n const index = results.find(isFulfilledAndNotEmpty)?.value;\n\n return index;\n } catch (error) {\n return undefined;\n }\n },\n setIndex: async (name, query, value) => {\n learnCard.debug?.('learnCard.cache.setIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setIndex(learnCard as any, name, query, value);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n getIndexPage: async <Metadata extends Record<string, any> = Record<never, never>>(\n name: string,\n query: Partial<Query<CredentialRecord<Metadata>>>,\n paginationOptions?: { limit?: number; cursor?: string }\n ) => {\n learnCard.debug?.('learnCard.cache.getIndex');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getIndexPage(\n learnCard as any,\n name,\n query,\n paginationOptions\n ) as Promise<\n | {\n records: CredentialRecord<Metadata>[];\n hasMore: boolean;\n cursor?: string;\n }\n | undefined\n >;\n })\n );\n\n const index = results.find(isFulfilledAndNotEmpty)?.value;\n\n return index;\n } catch (error) {\n return undefined;\n }\n },\n setIndexPage: async (name, query, value, paginationOptions) => {\n learnCard.debug?.('learnCard.cache.setIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setIndexPage(\n learnCard as any,\n name,\n query,\n value,\n paginationOptions\n );\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n getIndexCount: async <Metadata extends Record<string, any> = Record<never, never>>(\n name: string,\n query: Partial<Query<CredentialRecord<Metadata>>>\n ) => {\n learnCard.debug?.('learnCard.cache.getIndex');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getIndexCount?.(\n learnCard as any,\n name,\n query\n ) as Promise<number | undefined>;\n })\n );\n\n const index = results.find(isFulfilledAndNotEmpty)?.value;\n\n return index;\n } catch (error) {\n return undefined;\n }\n },\n setIndexCount: async (name, query, value) => {\n learnCard.debug?.('learnCard.cache.setIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setIndexCount?.(learnCard as any, name, query, value);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n flushIndex: async () => {\n learnCard.debug?.('learnCard.cache.flushIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.flushIndex(learnCard as any);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n getVc: async uri => {\n learnCard.debug?.('learnCard.cache.getVc');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getVc(learnCard as any, uri);\n })\n );\n\n const vc = results.find(isFulfilledAndNotEmpty)?.value;\n\n return vc;\n } catch (error) {\n return undefined;\n }\n },\n setVc: async (uri, value) => {\n learnCard.debug?.('learnCard.cache.setVc');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setVc(learnCard as any, uri, value);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n flushVc: async () => {\n learnCard.debug?.('learnCard.cache.flushVc');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.flushVc(learnCard as any);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n providers: getPlaneProviders(learnCard.plugins, 'cache'),\n };\n};\n\nconst generateIdPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardIdPlane<Plugins> => {\n return {\n did: method => {\n learnCard.debug?.('learnCard.id.did', method);\n\n const result = findFirstResult([...learnCard.plugins].reverse(), plugin => {\n try {\n if (!pluginImplementsPlane(plugin, 'id')) return undefined;\n\n return plugin.id.did(learnCard as any, method);\n } catch (error) {\n return undefined;\n }\n });\n\n if (!result) throw new Error(`No plugin supports did method ${method}`);\n\n return result;\n },\n keypair: algorithm => {\n learnCard.debug?.('learnCard.id.keypair', algorithm);\n\n const result = findFirstResult(learnCard.plugins, plugin => {\n try {\n if (!pluginImplementsPlane(plugin, 'id')) return undefined;\n\n return plugin.id.keypair(learnCard as any, algorithm);\n } catch (error) {\n return undefined;\n }\n });\n\n if (!result) throw new Error(`No plugin supports keypair type ${algorithm}`);\n\n return result;\n },\n providers: getPlaneProviders(learnCard.plugins, 'id'),\n };\n};\n\nconst generateContextPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardContextPlane<Plugins> => {\n return {\n resolveDocument: async (uri, allowRemote = false) => {\n learnCard.debug?.('learnCard.context.resolveDocument', uri);\n\n const staticResults = await Promise.all(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'context')) return undefined;\n\n return plugin.context.resolveStaticDocument(learnCard as any, uri);\n })\n );\n\n const staticResult = staticResults.find(Boolean);\n\n if (staticResult || !allowRemote) return staticResult;\n\n const remoteResults = await Promise.all(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'context')) return undefined;\n\n return plugin.context.resolveRemoteDocument?.(learnCard as any, uri);\n })\n );\n\n return remoteResults.find(Boolean);\n },\n providers: getPlaneProviders(learnCard.plugins, 'context'),\n };\n};\n\nconst bindMethods = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods extends GetPluginMethods<Plugins> = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>,\n pluginMethods: PluginMethods\n): PluginMethods => bindLearnCardToFunctionsObject(learnCard, pluginMethods as any) as any;\n\n/** @group Universal Wallets */\nexport const generateLearnCard = async <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods extends GetPluginMethods<Plugins> = GetPluginMethods<Plugins>\n>(\n _learnCard: Partial<LearnCard<Plugins, ControlPlanes, PluginMethods>> = {}\n): Promise<LearnCard<Plugins, ControlPlanes, PluginMethods>> => {\n const { plugins = [] as unknown as Plugins } = _learnCard;\n\n const pluginMethods = plugins.reduce<PluginMethods>((cumulativePluginMethods, plugin) => {\n const newPluginMethods = { ...(cumulativePluginMethods as any), ...plugin.methods };\n\n return newPluginMethods;\n }, {} as PluginMethods);\n\n const learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods> = {\n read: {} as LearnCardReadPlane<Plugins>,\n store: {} as LearnCardStorePlane<Plugins>,\n index: {} as LearnCardIndexPlane<Plugins>,\n cache: {} as LearnCardCachePlane<Plugins>,\n id: {} as LearnCardIdPlane<Plugins>,\n context: {} as LearnCardContextPlane<Plugins>,\n plugins: plugins as Plugins,\n invoke: pluginMethods,\n addPlugin: function (plugin) {\n return addPluginToLearnCard(this as any, plugin);\n },\n debug: _learnCard.debug,\n };\n\n (learnCard as any).read = generateReadPlane(learnCard);\n (learnCard as any).store = generateStorePlane(learnCard);\n (learnCard as any).index = generateIndexPlane(learnCard);\n (learnCard as any).cache = generateCachePlane(learnCard);\n (learnCard as any).id = generateIdPlane(learnCard);\n (learnCard as any).context = generateContextPlane(learnCard);\n\n if (pluginMethods) learnCard.invoke = bindMethods(learnCard, pluginMethods);\n\n return learnCard;\n};\n", "import { CredentialRecord, VC, VP } from '@learncard/types';\nimport { TestCachePlugin } from './types';\n\nexport const getTestCache = (): TestCachePlugin => {\n let index: Record<string, CredentialRecord[]> = {};\n let paginatedIndex: Record<\n string,\n { records: CredentialRecord[]; hasMore: boolean; cursor?: string }\n > = {};\n let vcs: Record<string, VC | VP | undefined> = {};\n\n return {\n name: 'Test Cache',\n displayName: 'Test Cache',\n description: '[Testing] Tests Caching Implementation',\n cache: {\n getIndex: async (_learnCard, name, query) => {\n _learnCard.debug?.('Test Cache, getIndex', { name, query, value: index });\n return index[name];\n },\n setIndex: async (_learnCard, name, query, value) => {\n _learnCard.debug?.('Test Cache, setIndex', { name, query, value });\n index[name] = value as any;\n return true;\n },\n getIndexPage: async (_learnCard, name, query, paginationOptions) => {\n _learnCard.debug?.('Test Cache, getIndex', {\n name,\n query,\n paginationOptions,\n value: index,\n });\n return paginatedIndex[name];\n },\n setIndexPage: async (_learnCard, name, query, value, paginationOptions) => {\n _learnCard.debug?.('Test Cache, setIndex', {\n name,\n query,\n paginationOptions,\n value,\n });\n paginatedIndex[name] = value as any;\n return true;\n },\n flushIndex: async _learnCard => {\n _learnCard.debug?.('Test Cache, flushIndex');\n index = {};\n return true;\n },\n getVc: async (_learnCard, uri) => {\n _learnCard.debug?.('Test Cache, getVc', { uri, value: vcs[uri] });\n return vcs[uri];\n },\n setVc: async (_learnCard, uri, vc) => {\n _learnCard.debug?.('Test Cache, setVc', { uri, value: vc });\n vcs[uri] = vc;\n return true;\n },\n flushVc: async _learnCard => {\n _learnCard.debug?.('Test Cache, flushVc');\n vcs = {};\n return true;\n },\n },\n methods: {},\n };\n};\n", "import { CredentialRecord, VC } from '@learncard/types';\nimport { TestIndexPlugin } from './types';\n\nexport const getTestIndex = (): TestIndexPlugin => {\n let index: CredentialRecord[] = [];\n\n return {\n name: 'Test Index',\n displayName: 'Test Index',\n description: '[Testing] Tests Index Implementations',\n index: {\n get: async (_learnCard, query) => {\n _learnCard.debug?.('Test Storage, index, get', { query });\n\n return index;\n },\n add: async (_learnCard, record) => {\n _learnCard.debug?.('Test Storage, index, add', { record });\n\n index.push(record);\n\n return true;\n },\n update: async () => false, // TODO: Implement\n remove: async (_learnCard, id) => {\n _learnCard.debug?.('Test Storage, index, remove', { id });\n\n let recordIndex = index.findIndex(record => record.id === id);\n\n index.splice(recordIndex, 1);\n\n return true;\n },\n },\n methods: {},\n };\n};\n", "import { CredentialRecord, VC, VP } from '@learncard/types';\nimport { TestStoragePlugin } from './types';\n\nexport const getTestStorage = (): TestStoragePlugin => {\n let index: CredentialRecord[] = [];\n let vcs: (VC | VP)[] = [];\n\n return {\n name: 'Test Storage',\n displayName: 'Test Storage',\n description: '[Testing] Tests Storage Implementations',\n read: {\n get: async (_learnCard, uri) => {\n _learnCard.debug?.('Test Storage, read, get', { uri });\n\n if (!uri) return undefined;\n\n const [_lc, method, vcIndex] = uri.split(':');\n\n if (method !== 'test') return undefined;\n\n return vcs[Number.parseInt(vcIndex)];\n },\n },\n store: {\n upload: async (_learnCard, vc) => {\n _learnCard.debug?.('Test Storage, store, upload', { vc });\n\n const vcIndex = vcs.length;\n\n vcs.push(vc);\n\n return `lc:test:${vcIndex}`;\n },\n },\n index: {\n get: async (_learnCard, query) => {\n _learnCard.debug?.('Test Storage, index, get', { query });\n\n return index;\n },\n add: async (_learnCard, record) => {\n _learnCard.debug?.('Test Storage, index, add', { record });\n\n index.push(record);\n\n return true;\n },\n update: async () => false, // TODO: Implement\n remove: async (_learnCard, id) => {\n _learnCard.debug?.('Test Storage, index, remove', { id });\n\n let recordIndex = index.findIndex(record => record.id === id);\n\n index.splice(recordIndex, 1);\n\n return true;\n },\n },\n methods: {},\n };\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["index_exports", "__export", "generateLearnCard", "getTestCache", "getTestIndex", "getTestStorage", "__toCommonJS", "findFirstResult", "__name", "array", "callback", "result", "item", "pluginImplementsPlane", "plugin", "plane", "learnCardImplementsPlane", "learnCard", "mapObject", "obj", "key", "value", "index", "isFulfilledAndNotEmpty", "input", "uniqBy", "getPlaneProviders", "__name", "plugins", "plane", "providers", "plugin", "bindLearnCardToFunctionsObject", "learnCard", "obj", "mapObject", "method", "addPluginToLearnCard", "generateLearnCard", "generateReadPlane", "uri", "cache", "learnCardImplementsPlane", "cachedResponse", "res", "vc", "pluginImplementsPlane", "isFulfilledAndNotEmpty", "addCachingToStorePlane", "_learnCard", "params", "generateStorePlane", "planes", "addCachingToIndexPlane", "name", "query", "list", "paginationOptions", "
|
|
4
|
+
"sourcesContent": ["/// <reference path=\"./types/global.d.ts\" />\n\nimport './polyfills';\n\nexport { LearnCard, Plugin } from 'types/wallet';\nexport * from 'types/LearnCard';\nexport * from '@wallet/base';\nexport * from '@wallet/plugins';\n", "import { LearnCard, Plugin } from 'types/wallet';\nimport { ControlPlane } from 'types/planes';\n\n/** Type guard for removing null/undefined */\nexport const isNotNull = <T>(item?: T | null): item is T => !!item;\n\n/** Removes null/undefined from items in an array */\nexport const filterNulls = <T>(array: (T | null | undefined)[]) => array.filter(isNotNull);\n\n/**\n * Loops through an array, running a callback over it until that callback returns a value. Once the\n * first value is found, it is returned. If no value is found, undefined is returned instead\n */\nexport const findFirstResult = <T, U>(\n array: T[],\n callback: (item: T) => U | undefined\n): U | undefined => {\n return array.reduce<U | undefined>((result, item) => {\n if (result !== undefined) return result;\n\n return callback(item);\n }, undefined);\n};\n\nexport const pluginImplementsPlane = <Plane extends ControlPlane>(\n plugin: Plugin,\n plane: Plane\n): plugin is Plugin<any, Plane> => {\n if (plane === 'read') return 'get' in (plugin.read ?? {});\n if (plane === 'store') return 'upload' in (plugin.store ?? {});\n if (plane === 'index') return 'get' in (plugin.index ?? {});\n if (plane === 'cache') return 'getIndex' in (plugin.cache ?? {});\n if (plane === 'id') return 'did' in (plugin.id ?? {});\n if (plane === 'context') return 'resolveStaticDocument' in (plugin.context ?? {});\n\n return false;\n};\n\nexport const learnCardImplementsPlane = <Plane extends ControlPlane>(\n learnCard: LearnCard<any, any, any>,\n plane: Plane\n): learnCard is LearnCard<any, Plane> => {\n if (plane === 'read') return 'read' in learnCard;\n if (plane === 'store') return 'store' in learnCard;\n if (plane === 'index') return 'index' in learnCard;\n if (plane === 'cache') return 'cache' in learnCard;\n if (plane === 'id') return 'id' in learnCard;\n if (plane === 'context') return 'context' in learnCard;\n\n return false;\n};\n\nexport const mapObject = <T extends string, U, V>(\n obj: Record<T, U>,\n callback: (value: U, index: number) => V\n): Record<T, V> => {\n return Object.fromEntries(\n Object.entries<U>(obj).map(([key, value], index) => [key, callback(value, index)])\n ) as any;\n};\n\nexport const isFulfilledAndNotEmpty = <T>(\n input: PromiseSettledResult<T>\n): input is PromiseFulfilledResult<T> => input.status === 'fulfilled' && !!input.value;\n\nexport const uniqBy = <Obj extends Record<string, any>>(\n array: Obj[],\n key: keyof Obj | ((obj: Obj) => any)\n) => {\n return [\n ...new Map(array.map(obj => [key instanceof Function ? key(obj) : obj[key], obj])).values(),\n ];\n};\n", "import { CredentialRecord } from '@learncard/types';\nimport { Query } from 'sift';\n\nimport { Plugin, LearnCard, GetPluginMethods, AddImplicitLearnCardArgument } from 'types/wallet';\nimport {\n ControlPlane,\n GetPlanesForPlugins,\n GetPlaneProviders,\n IndexPlane,\n LearnCardReadPlane,\n LearnCardStorePlane,\n LearnCardIndexPlane,\n LearnCardCachePlane,\n LearnCardIdPlane,\n LearnCardContextPlane,\n StorePlane,\n PlaneOptions,\n} from 'types/planes';\nimport {\n findFirstResult,\n pluginImplementsPlane,\n learnCardImplementsPlane,\n mapObject,\n isFulfilledAndNotEmpty,\n uniqBy,\n} from './helpers';\n\nconst getPlaneProviders = <Plugins extends Plugin[], Plane extends ControlPlane>(\n plugins: Plugins,\n plane: Plane\n): GetPlaneProviders<Plugins, Plane> => {\n return plugins.reduce((providers, plugin) => {\n if (plane in plugin) {\n providers[plugin.name as keyof typeof providers] = {\n name: plugin.name,\n displayName: plugin.displayName,\n description: plugin.description,\n } as any;\n }\n\n return providers;\n }, {} as GetPlaneProviders<Plugins, Plane>);\n};\n\nconst bindLearnCardToFunctionsObject = (\n learnCard: LearnCard<any, any, any>,\n obj: Record<string, (...args: any[]) => any>\n) => mapObject(obj, method => method.bind(learnCard, learnCard));\n\nconst addPluginToLearnCard = async <NewPlugin extends Plugin, Plugins extends Plugin[]>(\n learnCard: LearnCard<Plugins>,\n plugin: NewPlugin\n): Promise<LearnCard<[...Plugins, NewPlugin]>> => {\n learnCard.debug?.('Adding plugin', plugin.name);\n // eslint-disable-next-line\n return (generateLearnCard as any)({\n plugins: [...learnCard.plugins, plugin],\n debug: learnCard.debug,\n });\n};\n\nconst generateReadPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard:\n | LearnCard<Plugins, ControlPlanes, PluginMethods>\n | LearnCard<Plugins, 'cache', PluginMethods>\n): LearnCardReadPlane<Plugins> => {\n return {\n get: async (uri, { cache = 'cache-first' } = {}) => {\n learnCard.debug?.('learnCard.read.get', uri);\n\n if (!uri) return undefined;\n\n if (cache === 'cache-only' && !learnCardImplementsPlane(learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await learnCard.cache.getVc(uri);\n\n if (cachedResponse) {\n if (cache === 'cache-first' && learnCardImplementsPlane(learnCard, 'read')) {\n learnCard.read\n .get(uri, { cache: 'skip-cache' })\n .then(res => learnCard.cache.setVc(uri, res));\n }\n\n return cachedResponse;\n }\n }\n\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'read')) {\n throw new Error('Plugin is not a Read Plugin');\n }\n\n return plugin.read.get(learnCard as any, uri);\n })\n );\n\n const vc = results.find(isFulfilledAndNotEmpty)?.value;\n\n if (vc && learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n await learnCard.cache.setVc(uri, vc);\n }\n\n return vc;\n },\n providers: getPlaneProviders(learnCard.plugins, 'read'),\n };\n};\n\nconst addCachingToStorePlane = <\n ControlPlanes extends ControlPlane = never,\n Methods extends Record<string, (...args: any[]) => any> = Record<never, never>,\n DependentControlPlanes extends ControlPlane = never,\n DependentMethods extends Record<string, (...args: any[]) => any> = Record<never, never>\n>(\n plane: AddImplicitLearnCardArgument<\n StorePlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n >\n): AddImplicitLearnCardArgument<\n StorePlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n> => ({\n upload: async (_learnCard, vc, { cache = 'cache-first' } = {}) => {\n const uri = await plane.upload(_learnCard, vc);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.setVc(uri, vc);\n }\n\n return uri;\n },\n // TODO: Add caching to uploadMany\n ...('uploadMany' in plane ? { uploadMany: plane.uploadMany } : {}),\n ...('uploadEncrypted' in plane\n ? {\n uploadEncrypted: async (_learnCard, vc, params, { cache = 'cache-first' } = {}) => {\n const uri = await plane.uploadEncrypted?.(_learnCard, vc, params);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.setVc(uri, vc);\n }\n\n return uri;\n },\n }\n : {}),\n ...('delete' in plane\n ? {\n delete: async (_learnCard, uri, { cache = 'cache-first' } = {}) => {\n const result = await plane.delete?.(_learnCard, uri);\n\n if (result && cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.setVc(uri, undefined);\n }\n\n return result;\n },\n }\n : {}),\n});\n\nconst generateStorePlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardStorePlane<Plugins> => {\n const pluginPlanes = learnCard.plugins.reduce((planes, plugin) => {\n if (pluginImplementsPlane(plugin, 'store')) {\n planes[plugin.name as keyof typeof planes] = bindLearnCardToFunctionsObject(\n learnCard,\n addCachingToStorePlane(plugin.store)\n ) as any;\n }\n\n return planes;\n }, {} as LearnCardStorePlane<Plugins>);\n\n return { ...pluginPlanes, providers: getPlaneProviders(learnCard.plugins, 'store') };\n};\n\nconst addCachingToIndexPlane = <\n ControlPlanes extends ControlPlane = never,\n Methods extends Record<string, (...args: any[]) => any> = Record<never, never>,\n DependentControlPlanes extends ControlPlane = never,\n DependentMethods extends Record<string, (...args: any[]) => any> = Record<never, never>\n>(\n plane: AddImplicitLearnCardArgument<\n IndexPlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n >,\n name: string\n): AddImplicitLearnCardArgument<\n IndexPlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n> => ({\n get: async (_learnCard, query, { cache = 'cache-first' } = {}) => {\n if (cache === 'cache-only' && !learnCardImplementsPlane(_learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await _learnCard.cache.getIndex(name, query ?? {});\n\n if (cachedResponse) {\n if (cache === 'cache-first') {\n plane.get(_learnCard, query, { cache: 'skip-cache' }).then(res => {\n _learnCard.cache.setIndex(name, query ?? {}, res);\n });\n }\n\n return cachedResponse;\n }\n }\n\n const list = await plane.get(_learnCard, query);\n\n if (list && learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n await _learnCard.cache.setIndex(name, query ?? {}, list);\n }\n\n return list;\n },\n ...(plane.getPage\n ? {\n getPage: async (\n _learnCard,\n query,\n paginationOptions,\n { cache = 'cache-first' } = {}\n ) => {\n if (cache === 'cache-only' && !learnCardImplementsPlane(_learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await _learnCard.cache.getIndexPage(\n name,\n query ?? {},\n paginationOptions\n );\n\n if (cachedResponse) {\n if (cache === 'cache-first') {\n plane\n .getPage?.(_learnCard, query, paginationOptions, {\n cache: 'skip-cache',\n })\n .then((res: any) => {\n _learnCard.cache.setIndexPage(\n name,\n query ?? {},\n res,\n paginationOptions\n );\n });\n }\n\n return cachedResponse;\n }\n }\n\n const result = await plane.getPage?.(_learnCard, query, paginationOptions);\n\n if (\n result &&\n learnCardImplementsPlane(_learnCard, 'cache') &&\n cache !== 'skip-cache'\n ) {\n await _learnCard.cache.setIndexPage(\n name,\n query ?? {},\n result,\n paginationOptions\n );\n }\n\n return result;\n },\n }\n : {}),\n ...(plane.getCount\n ? {\n getCount: async (_learnCard, query, { cache = 'cache-first' } = {}) => {\n if (cache === 'cache-only' && !learnCardImplementsPlane(_learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await _learnCard.cache.getIndexCount?.(\n name,\n query ?? {}\n );\n\n if (cachedResponse) {\n if (cache === 'cache-first') {\n plane\n .getCount?.(_learnCard, query, {\n cache: 'skip-cache',\n })\n .then((res: number) =>\n _learnCard.cache.setIndexCount?.(name, query ?? {}, res)\n );\n }\n\n return cachedResponse;\n }\n }\n\n const result = await plane.getCount?.(_learnCard, query);\n\n if (\n result &&\n learnCardImplementsPlane(_learnCard, 'cache') &&\n cache !== 'skip-cache'\n ) {\n await _learnCard.cache.setIndexCount?.(name, query ?? {}, result);\n }\n\n return result;\n },\n }\n : {}),\n add: async (_learnCard, record, { cache = 'cache-first' } = {}) => {\n const result = await plane.add(_learnCard, record);\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n ...(plane.addMany\n ? {\n addMany: async (_learnCard, records, { cache = 'cache-first' } = {}) => {\n const result = await plane.addMany?.(_learnCard, records);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n }\n : {}),\n update: async (_learnCard, id, update, { cache = 'cache-first' } = {}) => {\n const result = await plane.update(_learnCard, id, update);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n remove: async (_learnCard, id, { cache = 'cache-first' } = {}) => {\n const result = await plane.remove(_learnCard, id);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n ...(plane.removeAll\n ? {\n removeAll: async (_learnCard, { cache = 'cache-first' } = {}) => {\n const result = await plane.removeAll?.(_learnCard);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n }\n : {}),\n});\n\nconst generateIndexPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardIndexPlane<Plugins> => {\n const individualPlanes = learnCard.plugins.reduce<LearnCardIndexPlane<Plugins>>(\n (planes, plugin) => {\n if (pluginImplementsPlane(plugin, 'index')) {\n planes[plugin.name as keyof typeof planes] = bindLearnCardToFunctionsObject(\n learnCard,\n addCachingToIndexPlane(plugin.index, plugin.name)\n ) as any;\n }\n\n return planes;\n },\n {} as LearnCardIndexPlane<Plugins>\n );\n\n const all: Pick<IndexPlane, 'get'> = {\n get: async <Metadata extends Record<string, any> = Record<never, never>>(\n query?: Partial<Query<CredentialRecord<Metadata>>>,\n { cache = 'cache-first' }: PlaneOptions = {}\n ) => {\n learnCard.debug?.('learnCard.index.all.get');\n\n if (cache === 'cache-only' && !learnCardImplementsPlane(learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await learnCard.cache.getIndex<Metadata>('all', query ?? {});\n\n if (cachedResponse) {\n if (cache === 'cache-first' && learnCardImplementsPlane(learnCard, 'index')) {\n learnCard.index.all\n .get(query, { cache: 'skip-cache' })\n .then(res => learnCard.cache.setIndex('all', query ?? {}, res));\n }\n\n return cachedResponse;\n }\n }\n\n const resultsWithDuplicates = (\n await Promise.all(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'index')) return [];\n\n return plugin.index.get(learnCard as any, query) as Promise<\n CredentialRecord<Metadata>[]\n >;\n })\n )\n ).flat();\n\n const results = uniqBy(resultsWithDuplicates, 'id');\n\n if (results && learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n await learnCard.cache.setIndex('all', query ?? {}, results);\n }\n\n return results;\n },\n };\n\n return { ...individualPlanes, all, providers: getPlaneProviders(learnCard.plugins, 'index') };\n};\n\nconst generateCachePlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardCachePlane<Plugins> => {\n return {\n getIndex: async <Metadata extends Record<string, any> = Record<never, never>>(\n name: string,\n query: Partial<Query<CredentialRecord<Metadata>>>\n ) => {\n learnCard.debug?.('learnCard.cache.getIndex');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getIndex(learnCard as any, name, query) as Promise<\n CredentialRecord<Metadata>[]\n >;\n })\n );\n\n const index = results.find(isFulfilledAndNotEmpty)?.value;\n\n return index;\n } catch (error) {\n return undefined;\n }\n },\n setIndex: async (name, query, value) => {\n learnCard.debug?.('learnCard.cache.setIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setIndex(learnCard as any, name, query, value);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n getIndexPage: async <Metadata extends Record<string, any> = Record<never, never>>(\n name: string,\n query: Partial<Query<CredentialRecord<Metadata>>>,\n paginationOptions?: { limit?: number; cursor?: string }\n ) => {\n learnCard.debug?.('learnCard.cache.getIndex');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getIndexPage(\n learnCard as any,\n name,\n query,\n paginationOptions\n ) as Promise<\n | {\n records: CredentialRecord<Metadata>[];\n hasMore: boolean;\n cursor?: string;\n }\n | undefined\n >;\n })\n );\n\n const index = results.find(isFulfilledAndNotEmpty)?.value;\n\n return index;\n } catch (error) {\n return undefined;\n }\n },\n setIndexPage: async (name, query, value, paginationOptions) => {\n learnCard.debug?.('learnCard.cache.setIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setIndexPage(\n learnCard as any,\n name,\n query,\n value,\n paginationOptions\n );\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n getIndexCount: async <Metadata extends Record<string, any> = Record<never, never>>(\n name: string,\n query: Partial<Query<CredentialRecord<Metadata>>>\n ) => {\n learnCard.debug?.('learnCard.cache.getIndex');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getIndexCount?.(\n learnCard as any,\n name,\n query\n ) as Promise<number | undefined>;\n })\n );\n\n const index = results.find(isFulfilledAndNotEmpty)?.value;\n\n return index;\n } catch (error) {\n return undefined;\n }\n },\n setIndexCount: async (name, query, value) => {\n learnCard.debug?.('learnCard.cache.setIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setIndexCount?.(learnCard as any, name, query, value);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n flushIndex: async () => {\n learnCard.debug?.('learnCard.cache.flushIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.flushIndex(learnCard as any);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n getVc: async uri => {\n learnCard.debug?.('learnCard.cache.getVc');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getVc(learnCard as any, uri);\n })\n );\n\n const vc = results.find(isFulfilledAndNotEmpty)?.value;\n\n return vc;\n } catch (error) {\n return undefined;\n }\n },\n setVc: async (uri, value) => {\n learnCard.debug?.('learnCard.cache.setVc');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setVc(learnCard as any, uri, value);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n flushVc: async () => {\n learnCard.debug?.('learnCard.cache.flushVc');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.flushVc(learnCard as any);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n providers: getPlaneProviders(learnCard.plugins, 'cache'),\n };\n};\n\nconst generateIdPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardIdPlane<Plugins> => {\n return {\n did: method => {\n learnCard.debug?.('learnCard.id.did', method);\n\n const result = findFirstResult([...learnCard.plugins].reverse(), plugin => {\n try {\n if (!pluginImplementsPlane(plugin, 'id')) return undefined;\n\n return plugin.id.did(learnCard as any, method);\n } catch (error) {\n return undefined;\n }\n });\n\n if (!result) throw new Error(`No plugin supports did method ${method}`);\n\n return result;\n },\n keypair: algorithm => {\n learnCard.debug?.('learnCard.id.keypair', algorithm);\n\n const result = findFirstResult(learnCard.plugins, plugin => {\n try {\n if (!pluginImplementsPlane(plugin, 'id')) return undefined;\n\n return plugin.id.keypair(learnCard as any, algorithm);\n } catch (error) {\n return undefined;\n }\n });\n\n if (!result) throw new Error(`No plugin supports keypair type ${algorithm}`);\n\n return result;\n },\n providers: getPlaneProviders(learnCard.plugins, 'id'),\n };\n};\n\nconst generateContextPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardContextPlane<Plugins> => {\n return {\n resolveDocument: async (uri, allowRemote = false) => {\n learnCard.debug?.('learnCard.context.resolveDocument', uri);\n\n const staticResults = await Promise.all(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'context')) return undefined;\n\n return plugin.context.resolveStaticDocument(learnCard as any, uri);\n })\n );\n\n const staticResult = staticResults.find(Boolean);\n\n if (staticResult || !allowRemote) return staticResult;\n\n const remoteResults = await Promise.all(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'context')) return undefined;\n\n return plugin.context.resolveRemoteDocument?.(learnCard as any, uri);\n })\n );\n\n return remoteResults.find(Boolean);\n },\n providers: getPlaneProviders(learnCard.plugins, 'context'),\n };\n};\n\nconst bindMethods = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods extends GetPluginMethods<Plugins> = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>,\n pluginMethods: PluginMethods\n): PluginMethods => bindLearnCardToFunctionsObject(learnCard, pluginMethods as any) as any;\n\n/** @group Universal Wallets */\nexport const generateLearnCard = async <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods extends GetPluginMethods<Plugins> = GetPluginMethods<Plugins>\n>(\n _learnCard: Partial<LearnCard<Plugins, ControlPlanes, PluginMethods>> = {}\n): Promise<LearnCard<Plugins, ControlPlanes, PluginMethods>> => {\n const { plugins = [] as unknown as Plugins } = _learnCard;\n\n const pluginMethods = plugins.reduce<PluginMethods>((cumulativePluginMethods, plugin) => {\n const newPluginMethods = { ...(cumulativePluginMethods as any), ...plugin.methods };\n\n return newPluginMethods;\n }, {} as PluginMethods);\n\n const learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods> = {\n read: {} as LearnCardReadPlane<Plugins>,\n store: {} as LearnCardStorePlane<Plugins>,\n index: {} as LearnCardIndexPlane<Plugins>,\n cache: {} as LearnCardCachePlane<Plugins>,\n id: {} as LearnCardIdPlane<Plugins>,\n context: {} as LearnCardContextPlane<Plugins>,\n plugins: plugins as Plugins,\n invoke: pluginMethods,\n addPlugin: function (plugin) {\n return addPluginToLearnCard(this as any, plugin);\n },\n debug: _learnCard.debug,\n };\n\n (learnCard as any).read = generateReadPlane(learnCard);\n (learnCard as any).store = generateStorePlane(learnCard);\n (learnCard as any).index = generateIndexPlane(learnCard);\n (learnCard as any).cache = generateCachePlane(learnCard);\n (learnCard as any).id = generateIdPlane(learnCard);\n (learnCard as any).context = generateContextPlane(learnCard);\n\n if (pluginMethods) learnCard.invoke = bindMethods(learnCard, pluginMethods);\n\n return learnCard;\n};\n", "import { CredentialRecord, VC, VP } from '@learncard/types';\nimport { TestCachePlugin } from './types';\n\nexport const getTestCache = (): TestCachePlugin => {\n let index: Record<string, CredentialRecord[]> = {};\n let paginatedIndex: Record<\n string,\n { records: CredentialRecord[]; hasMore: boolean; cursor?: string }\n > = {};\n let vcs: Record<string, VC | VP | undefined> = {};\n\n return {\n name: 'Test Cache',\n displayName: 'Test Cache',\n description: '[Testing] Tests Caching Implementation',\n cache: {\n getIndex: async (_learnCard, name, query) => {\n _learnCard.debug?.('Test Cache, getIndex', { name, query, value: index });\n return index[name];\n },\n setIndex: async (_learnCard, name, query, value) => {\n _learnCard.debug?.('Test Cache, setIndex', { name, query, value });\n index[name] = value as any;\n return true;\n },\n getIndexPage: async (_learnCard, name, query, paginationOptions) => {\n _learnCard.debug?.('Test Cache, getIndex', {\n name,\n query,\n paginationOptions,\n value: index,\n });\n return paginatedIndex[name];\n },\n setIndexPage: async (_learnCard, name, query, value, paginationOptions) => {\n _learnCard.debug?.('Test Cache, setIndex', {\n name,\n query,\n paginationOptions,\n value,\n });\n paginatedIndex[name] = value as any;\n return true;\n },\n flushIndex: async _learnCard => {\n _learnCard.debug?.('Test Cache, flushIndex');\n index = {};\n return true;\n },\n getVc: async (_learnCard, uri) => {\n _learnCard.debug?.('Test Cache, getVc', { uri, value: vcs[uri] });\n return vcs[uri];\n },\n setVc: async (_learnCard, uri, vc) => {\n _learnCard.debug?.('Test Cache, setVc', { uri, value: vc });\n vcs[uri] = vc;\n return true;\n },\n flushVc: async _learnCard => {\n _learnCard.debug?.('Test Cache, flushVc');\n vcs = {};\n return true;\n },\n },\n methods: {},\n };\n};\n", "import { CredentialRecord, VC } from '@learncard/types';\nimport { TestIndexPlugin } from './types';\n\nexport const getTestIndex = (): TestIndexPlugin => {\n let index: CredentialRecord[] = [];\n\n return {\n name: 'Test Index',\n displayName: 'Test Index',\n description: '[Testing] Tests Index Implementations',\n index: {\n get: async (_learnCard, query) => {\n _learnCard.debug?.('Test Storage, index, get', { query });\n\n return index;\n },\n add: async (_learnCard, record) => {\n _learnCard.debug?.('Test Storage, index, add', { record });\n\n index.push(record);\n\n return true;\n },\n update: async () => false, // TODO: Implement\n remove: async (_learnCard, id) => {\n _learnCard.debug?.('Test Storage, index, remove', { id });\n\n let recordIndex = index.findIndex(record => record.id === id);\n\n index.splice(recordIndex, 1);\n\n return true;\n },\n },\n methods: {},\n };\n};\n", "import { CredentialRecord, VC, VP } from '@learncard/types';\nimport { TestStoragePlugin } from './types';\n\nexport const getTestStorage = (): TestStoragePlugin => {\n const index: CredentialRecord[] = [];\n const vcs: (VC | VP)[] = [];\n\n return {\n name: 'Test Storage',\n displayName: 'Test Storage',\n description: '[Testing] Tests Storage Implementations',\n read: {\n get: async (_learnCard, uri) => {\n _learnCard.debug?.('Test Storage, read, get', { uri });\n\n if (!uri) return undefined;\n\n const [_lc, method, vcIndex] = uri.split(':');\n\n if (method !== 'test') return undefined;\n\n return vcs[Number.parseInt(vcIndex)];\n },\n },\n store: {\n upload: async (_learnCard, vc) => {\n _learnCard.debug?.('Test Storage, store, upload', { vc });\n\n const vcIndex = vcs.length;\n\n vcs.push(vc);\n\n return `lc:test:${vcIndex}`;\n },\n delete: async (_learnCard, uri) => {\n _learnCard.debug?.('Test Storage, store, delete', { uri });\n\n if (!uri) return false;\n\n const [_lc, method, vcIndex] = uri.split(':');\n\n if (method !== 'test') return false;\n\n const vcIdx = Number.parseInt(vcIndex);\n\n if (vcIdx >= 0 && vcIdx < vcs.length) {\n vcs[vcIdx] = undefined as unknown as VC | VP;\n return true;\n }\n\n return false;\n },\n },\n index: {\n get: async (_learnCard, query) => {\n _learnCard.debug?.('Test Storage, index, get', { query });\n\n return index;\n },\n add: async (_learnCard, record) => {\n _learnCard.debug?.('Test Storage, index, add', { record });\n\n index.push(record);\n\n return true;\n },\n update: async () => false, // TODO: Implement\n remove: async (_learnCard, id) => {\n _learnCard.debug?.('Test Storage, index, remove', { id });\n\n const recordIndex = index.findIndex(record => record.id === id);\n\n index.splice(recordIndex, 1);\n\n return true;\n },\n },\n methods: {},\n };\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["index_exports", "__export", "generateLearnCard", "getTestCache", "getTestIndex", "getTestStorage", "__toCommonJS", "findFirstResult", "__name", "array", "callback", "result", "item", "pluginImplementsPlane", "plugin", "plane", "learnCardImplementsPlane", "learnCard", "mapObject", "obj", "key", "value", "index", "isFulfilledAndNotEmpty", "input", "uniqBy", "getPlaneProviders", "__name", "plugins", "plane", "providers", "plugin", "bindLearnCardToFunctionsObject", "learnCard", "obj", "mapObject", "method", "addPluginToLearnCard", "generateLearnCard", "generateReadPlane", "uri", "cache", "learnCardImplementsPlane", "cachedResponse", "res", "vc", "pluginImplementsPlane", "isFulfilledAndNotEmpty", "addCachingToStorePlane", "_learnCard", "params", "result", "generateStorePlane", "planes", "addCachingToIndexPlane", "name", "query", "list", "paginationOptions", "record", "records", "id", "update", "generateIndexPlane", "resultsWithDuplicates", "results", "uniqBy", "generateCachePlane", "value", "promiseResult", "generateIdPlane", "findFirstResult", "algorithm", "generateContextPlane", "allowRemote", "staticResult", "bindMethods", "pluginMethods", "cumulativePluginMethods", "getTestCache", "__name", "index", "paginatedIndex", "vcs", "_learnCard", "name", "query", "value", "paginationOptions", "uri", "vc", "getTestIndex", "__name", "index", "_learnCard", "query", "record", "id", "recordIndex", "getTestStorage", "__name", "index", "vcs", "_learnCard", "uri", "_lc", "method", "vcIndex", "vc", "vcIdx", "query", "record", "id", "recordIndex"]
|
|
7
7
|
}
|
package/dist/core.esm.js
CHANGED
|
@@ -111,6 +111,15 @@ var addCachingToStorePlane = /* @__PURE__ */ __name((plane) => ({
|
|
|
111
111
|
}
|
|
112
112
|
return uri;
|
|
113
113
|
}, "uploadEncrypted")
|
|
114
|
+
} : {},
|
|
115
|
+
..."delete" in plane ? {
|
|
116
|
+
delete: /* @__PURE__ */ __name(async (_learnCard, uri, { cache = "cache-first" } = {}) => {
|
|
117
|
+
const result = await plane.delete?.(_learnCard, uri);
|
|
118
|
+
if (result && cache !== "skip-cache" && learnCardImplementsPlane(_learnCard, "cache")) {
|
|
119
|
+
await _learnCard.cache.setVc(uri, void 0);
|
|
120
|
+
}
|
|
121
|
+
return result;
|
|
122
|
+
}, "delete")
|
|
114
123
|
} : {}
|
|
115
124
|
}), "addCachingToStorePlane");
|
|
116
125
|
var generateStorePlane = /* @__PURE__ */ __name((learnCard) => {
|
|
@@ -636,8 +645,8 @@ var getTestIndex = /* @__PURE__ */ __name(() => {
|
|
|
636
645
|
|
|
637
646
|
// src/wallet/plugins/test-storage/index.ts
|
|
638
647
|
var getTestStorage = /* @__PURE__ */ __name(() => {
|
|
639
|
-
|
|
640
|
-
|
|
648
|
+
const index = [];
|
|
649
|
+
const vcs = [];
|
|
641
650
|
return {
|
|
642
651
|
name: "Test Storage",
|
|
643
652
|
displayName: "Test Storage",
|
|
@@ -657,7 +666,19 @@ var getTestStorage = /* @__PURE__ */ __name(() => {
|
|
|
657
666
|
const vcIndex = vcs.length;
|
|
658
667
|
vcs.push(vc);
|
|
659
668
|
return `lc:test:${vcIndex}`;
|
|
660
|
-
}, "upload")
|
|
669
|
+
}, "upload"),
|
|
670
|
+
delete: /* @__PURE__ */ __name(async (_learnCard, uri) => {
|
|
671
|
+
_learnCard.debug?.("Test Storage, store, delete", { uri });
|
|
672
|
+
if (!uri) return false;
|
|
673
|
+
const [_lc, method, vcIndex] = uri.split(":");
|
|
674
|
+
if (method !== "test") return false;
|
|
675
|
+
const vcIdx = Number.parseInt(vcIndex);
|
|
676
|
+
if (vcIdx >= 0 && vcIdx < vcs.length) {
|
|
677
|
+
vcs[vcIdx] = void 0;
|
|
678
|
+
return true;
|
|
679
|
+
}
|
|
680
|
+
return false;
|
|
681
|
+
}, "delete")
|
|
661
682
|
},
|
|
662
683
|
index: {
|
|
663
684
|
get: /* @__PURE__ */ __name(async (_learnCard, query) => {
|
|
@@ -673,7 +694,7 @@ var getTestStorage = /* @__PURE__ */ __name(() => {
|
|
|
673
694
|
// TODO: Implement
|
|
674
695
|
remove: /* @__PURE__ */ __name(async (_learnCard, id) => {
|
|
675
696
|
_learnCard.debug?.("Test Storage, index, remove", { id });
|
|
676
|
-
|
|
697
|
+
const recordIndex = index.findIndex((record) => record.id === id);
|
|
677
698
|
index.splice(recordIndex, 1);
|
|
678
699
|
return true;
|
|
679
700
|
}, "remove")
|
package/dist/core.esm.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/wallet/base/helpers.ts", "../src/wallet/base/wallet.ts", "../src/wallet/plugins/test-cache/index.ts", "../src/wallet/plugins/test-index/index.ts", "../src/wallet/plugins/test-storage/index.ts"],
|
|
4
|
-
"sourcesContent": ["import { LearnCard, Plugin } from 'types/wallet';\nimport { ControlPlane } from 'types/planes';\n\n/** Type guard for removing null/undefined */\nexport const isNotNull = <T>(item?: T | null): item is T => !!item;\n\n/** Removes null/undefined from items in an array */\nexport const filterNulls = <T>(array: (T | null | undefined)[]) => array.filter(isNotNull);\n\n/**\n * Loops through an array, running a callback over it until that callback returns a value. Once the\n * first value is found, it is returned. If no value is found, undefined is returned instead\n */\nexport const findFirstResult = <T, U>(\n array: T[],\n callback: (item: T) => U | undefined\n): U | undefined => {\n return array.reduce<U | undefined>((result, item) => {\n if (result !== undefined) return result;\n\n return callback(item);\n }, undefined);\n};\n\nexport const pluginImplementsPlane = <Plane extends ControlPlane>(\n plugin: Plugin,\n plane: Plane\n): plugin is Plugin<any, Plane> => {\n if (plane === 'read') return 'get' in (plugin.read ?? {});\n if (plane === 'store') return 'upload' in (plugin.store ?? {});\n if (plane === 'index') return 'get' in (plugin.index ?? {});\n if (plane === 'cache') return 'getIndex' in (plugin.cache ?? {});\n if (plane === 'id') return 'did' in (plugin.id ?? {});\n if (plane === 'context') return 'resolveStaticDocument' in (plugin.context ?? {});\n\n return false;\n};\n\nexport const learnCardImplementsPlane = <Plane extends ControlPlane>(\n learnCard: LearnCard<any, any, any>,\n plane: Plane\n): learnCard is LearnCard<any, Plane> => {\n if (plane === 'read') return 'read' in learnCard;\n if (plane === 'store') return 'store' in learnCard;\n if (plane === 'index') return 'index' in learnCard;\n if (plane === 'cache') return 'cache' in learnCard;\n if (plane === 'id') return 'id' in learnCard;\n if (plane === 'context') return 'context' in learnCard;\n\n return false;\n};\n\nexport const mapObject = <T extends string, U, V>(\n obj: Record<T, U>,\n callback: (value: U, index: number) => V\n): Record<T, V> => {\n return Object.fromEntries(\n Object.entries<U>(obj).map(([key, value], index) => [key, callback(value, index)])\n ) as any;\n};\n\nexport const isFulfilledAndNotEmpty = <T>(\n input: PromiseSettledResult<T>\n): input is PromiseFulfilledResult<T> => input.status === 'fulfilled' && !!input.value;\n\nexport const uniqBy = <Obj extends Record<string, any>>(\n array: Obj[],\n key: keyof Obj | ((obj: Obj) => any)\n) => {\n return [\n ...new Map(array.map(obj => [key instanceof Function ? key(obj) : obj[key], obj])).values(),\n ];\n};\n", "import { CredentialRecord } from '@learncard/types';\nimport { Query } from 'sift';\n\nimport { Plugin, LearnCard, GetPluginMethods, AddImplicitLearnCardArgument } from 'types/wallet';\nimport {\n ControlPlane,\n GetPlanesForPlugins,\n GetPlaneProviders,\n IndexPlane,\n LearnCardReadPlane,\n LearnCardStorePlane,\n LearnCardIndexPlane,\n LearnCardCachePlane,\n LearnCardIdPlane,\n LearnCardContextPlane,\n StorePlane,\n PlaneOptions,\n} from 'types/planes';\nimport {\n findFirstResult,\n pluginImplementsPlane,\n learnCardImplementsPlane,\n mapObject,\n isFulfilledAndNotEmpty,\n uniqBy,\n} from './helpers';\n\nconst getPlaneProviders = <Plugins extends Plugin[], Plane extends ControlPlane>(\n plugins: Plugins,\n plane: Plane\n): GetPlaneProviders<Plugins, Plane> => {\n return plugins.reduce((providers, plugin) => {\n if (plane in plugin) {\n providers[plugin.name as keyof typeof providers] = {\n name: plugin.name,\n displayName: plugin.displayName,\n description: plugin.description,\n } as any;\n }\n\n return providers;\n }, {} as GetPlaneProviders<Plugins, Plane>);\n};\n\nconst bindLearnCardToFunctionsObject = (\n learnCard: LearnCard<any, any, any>,\n obj: Record<string, (...args: any[]) => any>\n) => mapObject(obj, method => method.bind(learnCard, learnCard));\n\nconst addPluginToLearnCard = async <NewPlugin extends Plugin, Plugins extends Plugin[]>(\n learnCard: LearnCard<Plugins>,\n plugin: NewPlugin\n): Promise<LearnCard<[...Plugins, NewPlugin]>> => {\n learnCard.debug?.('Adding plugin', plugin.name);\n // eslint-disable-next-line\n return (generateLearnCard as any)({\n plugins: [...learnCard.plugins, plugin],\n debug: learnCard.debug,\n });\n};\n\nconst generateReadPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard:\n | LearnCard<Plugins, ControlPlanes, PluginMethods>\n | LearnCard<Plugins, 'cache', PluginMethods>\n): LearnCardReadPlane<Plugins> => {\n return {\n get: async (uri, { cache = 'cache-first' } = {}) => {\n learnCard.debug?.('learnCard.read.get', uri);\n\n if (!uri) return undefined;\n\n if (cache === 'cache-only' && !learnCardImplementsPlane(learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await learnCard.cache.getVc(uri);\n\n if (cachedResponse) {\n if (cache === 'cache-first' && learnCardImplementsPlane(learnCard, 'read')) {\n learnCard.read\n .get(uri, { cache: 'skip-cache' })\n .then(res => learnCard.cache.setVc(uri, res));\n }\n\n return cachedResponse;\n }\n }\n\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'read')) {\n throw new Error('Plugin is not a Read Plugin');\n }\n\n return plugin.read.get(learnCard as any, uri);\n })\n );\n\n const vc = results.find(isFulfilledAndNotEmpty)?.value;\n\n if (vc && learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n await learnCard.cache.setVc(uri, vc);\n }\n\n return vc;\n },\n providers: getPlaneProviders(learnCard.plugins, 'read'),\n };\n};\n\nconst addCachingToStorePlane = <\n ControlPlanes extends ControlPlane = never,\n Methods extends Record<string, (...args: any[]) => any> = Record<never, never>,\n DependentControlPlanes extends ControlPlane = never,\n DependentMethods extends Record<string, (...args: any[]) => any> = Record<never, never>\n>(\n plane: AddImplicitLearnCardArgument<\n StorePlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n >\n): AddImplicitLearnCardArgument<\n StorePlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n> => ({\n upload: async (_learnCard, vc, { cache = 'cache-first' } = {}) => {\n const uri = await plane.upload(_learnCard, vc);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.setVc(uri, vc);\n }\n\n return uri;\n },\n // TODO: Add caching to uploadMany\n ...('uploadMany' in plane ? { uploadMany: plane.uploadMany } : {}),\n ...('uploadEncrypted' in plane\n ? {\n uploadEncrypted: async (_learnCard, vc, params, { cache = 'cache-first' } = {}) => {\n const uri = await plane.uploadEncrypted?.(_learnCard, vc, params);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.setVc(uri, vc);\n }\n\n return uri;\n },\n }\n : {}),\n});\n\nconst generateStorePlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardStorePlane<Plugins> => {\n const pluginPlanes = learnCard.plugins.reduce((planes, plugin) => {\n if (pluginImplementsPlane(plugin, 'store')) {\n planes[plugin.name as keyof typeof planes] = bindLearnCardToFunctionsObject(\n learnCard,\n addCachingToStorePlane(plugin.store)\n ) as any;\n }\n\n return planes;\n }, {} as LearnCardStorePlane<Plugins>);\n\n return { ...pluginPlanes, providers: getPlaneProviders(learnCard.plugins, 'store') };\n};\n\nconst addCachingToIndexPlane = <\n ControlPlanes extends ControlPlane = never,\n Methods extends Record<string, (...args: any[]) => any> = Record<never, never>,\n DependentControlPlanes extends ControlPlane = never,\n DependentMethods extends Record<string, (...args: any[]) => any> = Record<never, never>\n>(\n plane: AddImplicitLearnCardArgument<\n IndexPlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n >,\n name: string\n): AddImplicitLearnCardArgument<\n IndexPlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n> => ({\n get: async (_learnCard, query, { cache = 'cache-first' } = {}) => {\n if (cache === 'cache-only' && !learnCardImplementsPlane(_learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await _learnCard.cache.getIndex(name, query ?? {});\n\n if (cachedResponse) {\n if (cache === 'cache-first') {\n plane.get(_learnCard, query, { cache: 'skip-cache' }).then(res => {\n _learnCard.cache.setIndex(name, query ?? {}, res);\n });\n }\n\n return cachedResponse;\n }\n }\n\n const list = await plane.get(_learnCard, query);\n\n if (list && learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n await _learnCard.cache.setIndex(name, query ?? {}, list);\n }\n\n return list;\n },\n ...(plane.getPage\n ? {\n getPage: async (\n _learnCard,\n query,\n paginationOptions,\n { cache = 'cache-first' } = {}\n ) => {\n if (cache === 'cache-only' && !learnCardImplementsPlane(_learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await _learnCard.cache.getIndexPage(\n name,\n query ?? {},\n paginationOptions\n );\n\n if (cachedResponse) {\n if (cache === 'cache-first') {\n plane\n .getPage?.(_learnCard, query, paginationOptions, {\n cache: 'skip-cache',\n })\n .then((res: any) => {\n _learnCard.cache.setIndexPage(\n name,\n query ?? {},\n res,\n paginationOptions\n );\n });\n }\n\n return cachedResponse;\n }\n }\n\n const result = await plane.getPage?.(_learnCard, query, paginationOptions);\n\n if (\n result &&\n learnCardImplementsPlane(_learnCard, 'cache') &&\n cache !== 'skip-cache'\n ) {\n await _learnCard.cache.setIndexPage(\n name,\n query ?? {},\n result,\n paginationOptions\n );\n }\n\n return result;\n },\n }\n : {}),\n ...(plane.getCount\n ? {\n getCount: async (_learnCard, query, { cache = 'cache-first' } = {}) => {\n if (cache === 'cache-only' && !learnCardImplementsPlane(_learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await _learnCard.cache.getIndexCount?.(\n name,\n query ?? {}\n );\n\n if (cachedResponse) {\n if (cache === 'cache-first') {\n plane\n .getCount?.(_learnCard, query, {\n cache: 'skip-cache',\n })\n .then((res: number) =>\n _learnCard.cache.setIndexCount?.(name, query ?? {}, res)\n );\n }\n\n return cachedResponse;\n }\n }\n\n const result = await plane.getCount?.(_learnCard, query);\n\n if (\n result &&\n learnCardImplementsPlane(_learnCard, 'cache') &&\n cache !== 'skip-cache'\n ) {\n await _learnCard.cache.setIndexCount?.(name, query ?? {}, result);\n }\n\n return result;\n },\n }\n : {}),\n add: async (_learnCard, record, { cache = 'cache-first' } = {}) => {\n const result = await plane.add(_learnCard, record);\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n ...(plane.addMany\n ? {\n addMany: async (_learnCard, records, { cache = 'cache-first' } = {}) => {\n const result = await plane.addMany?.(_learnCard, records);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n }\n : {}),\n update: async (_learnCard, id, update, { cache = 'cache-first' } = {}) => {\n const result = await plane.update(_learnCard, id, update);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n remove: async (_learnCard, id, { cache = 'cache-first' } = {}) => {\n const result = await plane.remove(_learnCard, id);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n ...(plane.removeAll\n ? {\n removeAll: async (_learnCard, { cache = 'cache-first' } = {}) => {\n const result = await plane.removeAll?.(_learnCard);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n }\n : {}),\n});\n\nconst generateIndexPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardIndexPlane<Plugins> => {\n const individualPlanes = learnCard.plugins.reduce<LearnCardIndexPlane<Plugins>>(\n (planes, plugin) => {\n if (pluginImplementsPlane(plugin, 'index')) {\n planes[plugin.name as keyof typeof planes] = bindLearnCardToFunctionsObject(\n learnCard,\n addCachingToIndexPlane(plugin.index, plugin.name)\n ) as any;\n }\n\n return planes;\n },\n {} as LearnCardIndexPlane<Plugins>\n );\n\n const all: Pick<IndexPlane, 'get'> = {\n get: async <Metadata extends Record<string, any> = Record<never, never>>(\n query?: Partial<Query<CredentialRecord<Metadata>>>,\n { cache = 'cache-first' }: PlaneOptions = {}\n ) => {\n learnCard.debug?.('learnCard.index.all.get');\n\n if (cache === 'cache-only' && !learnCardImplementsPlane(learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await learnCard.cache.getIndex<Metadata>('all', query ?? {});\n\n if (cachedResponse) {\n if (cache === 'cache-first' && learnCardImplementsPlane(learnCard, 'index')) {\n learnCard.index.all\n .get(query, { cache: 'skip-cache' })\n .then(res => learnCard.cache.setIndex('all', query ?? {}, res));\n }\n\n return cachedResponse;\n }\n }\n\n const resultsWithDuplicates = (\n await Promise.all(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'index')) return [];\n\n return plugin.index.get(learnCard as any, query) as Promise<\n CredentialRecord<Metadata>[]\n >;\n })\n )\n ).flat();\n\n const results = uniqBy(resultsWithDuplicates, 'id');\n\n if (results && learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n await learnCard.cache.setIndex('all', query ?? {}, results);\n }\n\n return results;\n },\n };\n\n return { ...individualPlanes, all, providers: getPlaneProviders(learnCard.plugins, 'index') };\n};\n\nconst generateCachePlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardCachePlane<Plugins> => {\n return {\n getIndex: async <Metadata extends Record<string, any> = Record<never, never>>(\n name: string,\n query: Partial<Query<CredentialRecord<Metadata>>>\n ) => {\n learnCard.debug?.('learnCard.cache.getIndex');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getIndex(learnCard as any, name, query) as Promise<\n CredentialRecord<Metadata>[]\n >;\n })\n );\n\n const index = results.find(isFulfilledAndNotEmpty)?.value;\n\n return index;\n } catch (error) {\n return undefined;\n }\n },\n setIndex: async (name, query, value) => {\n learnCard.debug?.('learnCard.cache.setIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setIndex(learnCard as any, name, query, value);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n getIndexPage: async <Metadata extends Record<string, any> = Record<never, never>>(\n name: string,\n query: Partial<Query<CredentialRecord<Metadata>>>,\n paginationOptions?: { limit?: number; cursor?: string }\n ) => {\n learnCard.debug?.('learnCard.cache.getIndex');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getIndexPage(\n learnCard as any,\n name,\n query,\n paginationOptions\n ) as Promise<\n | {\n records: CredentialRecord<Metadata>[];\n hasMore: boolean;\n cursor?: string;\n }\n | undefined\n >;\n })\n );\n\n const index = results.find(isFulfilledAndNotEmpty)?.value;\n\n return index;\n } catch (error) {\n return undefined;\n }\n },\n setIndexPage: async (name, query, value, paginationOptions) => {\n learnCard.debug?.('learnCard.cache.setIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setIndexPage(\n learnCard as any,\n name,\n query,\n value,\n paginationOptions\n );\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n getIndexCount: async <Metadata extends Record<string, any> = Record<never, never>>(\n name: string,\n query: Partial<Query<CredentialRecord<Metadata>>>\n ) => {\n learnCard.debug?.('learnCard.cache.getIndex');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getIndexCount?.(\n learnCard as any,\n name,\n query\n ) as Promise<number | undefined>;\n })\n );\n\n const index = results.find(isFulfilledAndNotEmpty)?.value;\n\n return index;\n } catch (error) {\n return undefined;\n }\n },\n setIndexCount: async (name, query, value) => {\n learnCard.debug?.('learnCard.cache.setIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setIndexCount?.(learnCard as any, name, query, value);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n flushIndex: async () => {\n learnCard.debug?.('learnCard.cache.flushIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.flushIndex(learnCard as any);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n getVc: async uri => {\n learnCard.debug?.('learnCard.cache.getVc');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getVc(learnCard as any, uri);\n })\n );\n\n const vc = results.find(isFulfilledAndNotEmpty)?.value;\n\n return vc;\n } catch (error) {\n return undefined;\n }\n },\n setVc: async (uri, value) => {\n learnCard.debug?.('learnCard.cache.setVc');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setVc(learnCard as any, uri, value);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n flushVc: async () => {\n learnCard.debug?.('learnCard.cache.flushVc');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.flushVc(learnCard as any);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n providers: getPlaneProviders(learnCard.plugins, 'cache'),\n };\n};\n\nconst generateIdPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardIdPlane<Plugins> => {\n return {\n did: method => {\n learnCard.debug?.('learnCard.id.did', method);\n\n const result = findFirstResult([...learnCard.plugins].reverse(), plugin => {\n try {\n if (!pluginImplementsPlane(plugin, 'id')) return undefined;\n\n return plugin.id.did(learnCard as any, method);\n } catch (error) {\n return undefined;\n }\n });\n\n if (!result) throw new Error(`No plugin supports did method ${method}`);\n\n return result;\n },\n keypair: algorithm => {\n learnCard.debug?.('learnCard.id.keypair', algorithm);\n\n const result = findFirstResult(learnCard.plugins, plugin => {\n try {\n if (!pluginImplementsPlane(plugin, 'id')) return undefined;\n\n return plugin.id.keypair(learnCard as any, algorithm);\n } catch (error) {\n return undefined;\n }\n });\n\n if (!result) throw new Error(`No plugin supports keypair type ${algorithm}`);\n\n return result;\n },\n providers: getPlaneProviders(learnCard.plugins, 'id'),\n };\n};\n\nconst generateContextPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardContextPlane<Plugins> => {\n return {\n resolveDocument: async (uri, allowRemote = false) => {\n learnCard.debug?.('learnCard.context.resolveDocument', uri);\n\n const staticResults = await Promise.all(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'context')) return undefined;\n\n return plugin.context.resolveStaticDocument(learnCard as any, uri);\n })\n );\n\n const staticResult = staticResults.find(Boolean);\n\n if (staticResult || !allowRemote) return staticResult;\n\n const remoteResults = await Promise.all(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'context')) return undefined;\n\n return plugin.context.resolveRemoteDocument?.(learnCard as any, uri);\n })\n );\n\n return remoteResults.find(Boolean);\n },\n providers: getPlaneProviders(learnCard.plugins, 'context'),\n };\n};\n\nconst bindMethods = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods extends GetPluginMethods<Plugins> = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>,\n pluginMethods: PluginMethods\n): PluginMethods => bindLearnCardToFunctionsObject(learnCard, pluginMethods as any) as any;\n\n/** @group Universal Wallets */\nexport const generateLearnCard = async <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods extends GetPluginMethods<Plugins> = GetPluginMethods<Plugins>\n>(\n _learnCard: Partial<LearnCard<Plugins, ControlPlanes, PluginMethods>> = {}\n): Promise<LearnCard<Plugins, ControlPlanes, PluginMethods>> => {\n const { plugins = [] as unknown as Plugins } = _learnCard;\n\n const pluginMethods = plugins.reduce<PluginMethods>((cumulativePluginMethods, plugin) => {\n const newPluginMethods = { ...(cumulativePluginMethods as any), ...plugin.methods };\n\n return newPluginMethods;\n }, {} as PluginMethods);\n\n const learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods> = {\n read: {} as LearnCardReadPlane<Plugins>,\n store: {} as LearnCardStorePlane<Plugins>,\n index: {} as LearnCardIndexPlane<Plugins>,\n cache: {} as LearnCardCachePlane<Plugins>,\n id: {} as LearnCardIdPlane<Plugins>,\n context: {} as LearnCardContextPlane<Plugins>,\n plugins: plugins as Plugins,\n invoke: pluginMethods,\n addPlugin: function (plugin) {\n return addPluginToLearnCard(this as any, plugin);\n },\n debug: _learnCard.debug,\n };\n\n (learnCard as any).read = generateReadPlane(learnCard);\n (learnCard as any).store = generateStorePlane(learnCard);\n (learnCard as any).index = generateIndexPlane(learnCard);\n (learnCard as any).cache = generateCachePlane(learnCard);\n (learnCard as any).id = generateIdPlane(learnCard);\n (learnCard as any).context = generateContextPlane(learnCard);\n\n if (pluginMethods) learnCard.invoke = bindMethods(learnCard, pluginMethods);\n\n return learnCard;\n};\n", "import { CredentialRecord, VC, VP } from '@learncard/types';\nimport { TestCachePlugin } from './types';\n\nexport const getTestCache = (): TestCachePlugin => {\n let index: Record<string, CredentialRecord[]> = {};\n let paginatedIndex: Record<\n string,\n { records: CredentialRecord[]; hasMore: boolean; cursor?: string }\n > = {};\n let vcs: Record<string, VC | VP | undefined> = {};\n\n return {\n name: 'Test Cache',\n displayName: 'Test Cache',\n description: '[Testing] Tests Caching Implementation',\n cache: {\n getIndex: async (_learnCard, name, query) => {\n _learnCard.debug?.('Test Cache, getIndex', { name, query, value: index });\n return index[name];\n },\n setIndex: async (_learnCard, name, query, value) => {\n _learnCard.debug?.('Test Cache, setIndex', { name, query, value });\n index[name] = value as any;\n return true;\n },\n getIndexPage: async (_learnCard, name, query, paginationOptions) => {\n _learnCard.debug?.('Test Cache, getIndex', {\n name,\n query,\n paginationOptions,\n value: index,\n });\n return paginatedIndex[name];\n },\n setIndexPage: async (_learnCard, name, query, value, paginationOptions) => {\n _learnCard.debug?.('Test Cache, setIndex', {\n name,\n query,\n paginationOptions,\n value,\n });\n paginatedIndex[name] = value as any;\n return true;\n },\n flushIndex: async _learnCard => {\n _learnCard.debug?.('Test Cache, flushIndex');\n index = {};\n return true;\n },\n getVc: async (_learnCard, uri) => {\n _learnCard.debug?.('Test Cache, getVc', { uri, value: vcs[uri] });\n return vcs[uri];\n },\n setVc: async (_learnCard, uri, vc) => {\n _learnCard.debug?.('Test Cache, setVc', { uri, value: vc });\n vcs[uri] = vc;\n return true;\n },\n flushVc: async _learnCard => {\n _learnCard.debug?.('Test Cache, flushVc');\n vcs = {};\n return true;\n },\n },\n methods: {},\n };\n};\n", "import { CredentialRecord, VC } from '@learncard/types';\nimport { TestIndexPlugin } from './types';\n\nexport const getTestIndex = (): TestIndexPlugin => {\n let index: CredentialRecord[] = [];\n\n return {\n name: 'Test Index',\n displayName: 'Test Index',\n description: '[Testing] Tests Index Implementations',\n index: {\n get: async (_learnCard, query) => {\n _learnCard.debug?.('Test Storage, index, get', { query });\n\n return index;\n },\n add: async (_learnCard, record) => {\n _learnCard.debug?.('Test Storage, index, add', { record });\n\n index.push(record);\n\n return true;\n },\n update: async () => false, // TODO: Implement\n remove: async (_learnCard, id) => {\n _learnCard.debug?.('Test Storage, index, remove', { id });\n\n let recordIndex = index.findIndex(record => record.id === id);\n\n index.splice(recordIndex, 1);\n\n return true;\n },\n },\n methods: {},\n };\n};\n", "import { CredentialRecord, VC, VP } from '@learncard/types';\nimport { TestStoragePlugin } from './types';\n\nexport const getTestStorage = (): TestStoragePlugin => {\n let index: CredentialRecord[] = [];\n let vcs: (VC | VP)[] = [];\n\n return {\n name: 'Test Storage',\n displayName: 'Test Storage',\n description: '[Testing] Tests Storage Implementations',\n read: {\n get: async (_learnCard, uri) => {\n _learnCard.debug?.('Test Storage, read, get', { uri });\n\n if (!uri) return undefined;\n\n const [_lc, method, vcIndex] = uri.split(':');\n\n if (method !== 'test') return undefined;\n\n return vcs[Number.parseInt(vcIndex)];\n },\n },\n store: {\n upload: async (_learnCard, vc) => {\n _learnCard.debug?.('Test Storage, store, upload', { vc });\n\n const vcIndex = vcs.length;\n\n vcs.push(vc);\n\n return `lc:test:${vcIndex}`;\n },\n },\n index: {\n get: async (_learnCard, query) => {\n _learnCard.debug?.('Test Storage, index, get', { query });\n\n return index;\n },\n add: async (_learnCard, record) => {\n _learnCard.debug?.('Test Storage, index, add', { record });\n\n index.push(record);\n\n return true;\n },\n update: async () => false, // TODO: Implement\n remove: async (_learnCard, id) => {\n _learnCard.debug?.('Test Storage, index, remove', { id });\n\n let recordIndex = index.findIndex(record => record.id === id);\n\n index.splice(recordIndex, 1);\n\n return true;\n },\n },\n methods: {},\n };\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { LearnCard, Plugin } from 'types/wallet';\nimport { ControlPlane } from 'types/planes';\n\n/** Type guard for removing null/undefined */\nexport const isNotNull = <T>(item?: T | null): item is T => !!item;\n\n/** Removes null/undefined from items in an array */\nexport const filterNulls = <T>(array: (T | null | undefined)[]) => array.filter(isNotNull);\n\n/**\n * Loops through an array, running a callback over it until that callback returns a value. Once the\n * first value is found, it is returned. If no value is found, undefined is returned instead\n */\nexport const findFirstResult = <T, U>(\n array: T[],\n callback: (item: T) => U | undefined\n): U | undefined => {\n return array.reduce<U | undefined>((result, item) => {\n if (result !== undefined) return result;\n\n return callback(item);\n }, undefined);\n};\n\nexport const pluginImplementsPlane = <Plane extends ControlPlane>(\n plugin: Plugin,\n plane: Plane\n): plugin is Plugin<any, Plane> => {\n if (plane === 'read') return 'get' in (plugin.read ?? {});\n if (plane === 'store') return 'upload' in (plugin.store ?? {});\n if (plane === 'index') return 'get' in (plugin.index ?? {});\n if (plane === 'cache') return 'getIndex' in (plugin.cache ?? {});\n if (plane === 'id') return 'did' in (plugin.id ?? {});\n if (plane === 'context') return 'resolveStaticDocument' in (plugin.context ?? {});\n\n return false;\n};\n\nexport const learnCardImplementsPlane = <Plane extends ControlPlane>(\n learnCard: LearnCard<any, any, any>,\n plane: Plane\n): learnCard is LearnCard<any, Plane> => {\n if (plane === 'read') return 'read' in learnCard;\n if (plane === 'store') return 'store' in learnCard;\n if (plane === 'index') return 'index' in learnCard;\n if (plane === 'cache') return 'cache' in learnCard;\n if (plane === 'id') return 'id' in learnCard;\n if (plane === 'context') return 'context' in learnCard;\n\n return false;\n};\n\nexport const mapObject = <T extends string, U, V>(\n obj: Record<T, U>,\n callback: (value: U, index: number) => V\n): Record<T, V> => {\n return Object.fromEntries(\n Object.entries<U>(obj).map(([key, value], index) => [key, callback(value, index)])\n ) as any;\n};\n\nexport const isFulfilledAndNotEmpty = <T>(\n input: PromiseSettledResult<T>\n): input is PromiseFulfilledResult<T> => input.status === 'fulfilled' && !!input.value;\n\nexport const uniqBy = <Obj extends Record<string, any>>(\n array: Obj[],\n key: keyof Obj | ((obj: Obj) => any)\n) => {\n return [\n ...new Map(array.map(obj => [key instanceof Function ? key(obj) : obj[key], obj])).values(),\n ];\n};\n", "import { CredentialRecord } from '@learncard/types';\nimport { Query } from 'sift';\n\nimport { Plugin, LearnCard, GetPluginMethods, AddImplicitLearnCardArgument } from 'types/wallet';\nimport {\n ControlPlane,\n GetPlanesForPlugins,\n GetPlaneProviders,\n IndexPlane,\n LearnCardReadPlane,\n LearnCardStorePlane,\n LearnCardIndexPlane,\n LearnCardCachePlane,\n LearnCardIdPlane,\n LearnCardContextPlane,\n StorePlane,\n PlaneOptions,\n} from 'types/planes';\nimport {\n findFirstResult,\n pluginImplementsPlane,\n learnCardImplementsPlane,\n mapObject,\n isFulfilledAndNotEmpty,\n uniqBy,\n} from './helpers';\n\nconst getPlaneProviders = <Plugins extends Plugin[], Plane extends ControlPlane>(\n plugins: Plugins,\n plane: Plane\n): GetPlaneProviders<Plugins, Plane> => {\n return plugins.reduce((providers, plugin) => {\n if (plane in plugin) {\n providers[plugin.name as keyof typeof providers] = {\n name: plugin.name,\n displayName: plugin.displayName,\n description: plugin.description,\n } as any;\n }\n\n return providers;\n }, {} as GetPlaneProviders<Plugins, Plane>);\n};\n\nconst bindLearnCardToFunctionsObject = (\n learnCard: LearnCard<any, any, any>,\n obj: Record<string, (...args: any[]) => any>\n) => mapObject(obj, method => method.bind(learnCard, learnCard));\n\nconst addPluginToLearnCard = async <NewPlugin extends Plugin, Plugins extends Plugin[]>(\n learnCard: LearnCard<Plugins>,\n plugin: NewPlugin\n): Promise<LearnCard<[...Plugins, NewPlugin]>> => {\n learnCard.debug?.('Adding plugin', plugin.name);\n // eslint-disable-next-line\n return (generateLearnCard as any)({\n plugins: [...learnCard.plugins, plugin],\n debug: learnCard.debug,\n });\n};\n\nconst generateReadPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard:\n | LearnCard<Plugins, ControlPlanes, PluginMethods>\n | LearnCard<Plugins, 'cache', PluginMethods>\n): LearnCardReadPlane<Plugins> => {\n return {\n get: async (uri, { cache = 'cache-first' } = {}) => {\n learnCard.debug?.('learnCard.read.get', uri);\n\n if (!uri) return undefined;\n\n if (cache === 'cache-only' && !learnCardImplementsPlane(learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await learnCard.cache.getVc(uri);\n\n if (cachedResponse) {\n if (cache === 'cache-first' && learnCardImplementsPlane(learnCard, 'read')) {\n learnCard.read\n .get(uri, { cache: 'skip-cache' })\n .then(res => learnCard.cache.setVc(uri, res));\n }\n\n return cachedResponse;\n }\n }\n\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'read')) {\n throw new Error('Plugin is not a Read Plugin');\n }\n\n return plugin.read.get(learnCard as any, uri);\n })\n );\n\n const vc = results.find(isFulfilledAndNotEmpty)?.value;\n\n if (vc && learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n await learnCard.cache.setVc(uri, vc);\n }\n\n return vc;\n },\n providers: getPlaneProviders(learnCard.plugins, 'read'),\n };\n};\n\nconst addCachingToStorePlane = <\n ControlPlanes extends ControlPlane = never,\n Methods extends Record<string, (...args: any[]) => any> = Record<never, never>,\n DependentControlPlanes extends ControlPlane = never,\n DependentMethods extends Record<string, (...args: any[]) => any> = Record<never, never>\n>(\n plane: AddImplicitLearnCardArgument<\n StorePlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n >\n): AddImplicitLearnCardArgument<\n StorePlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n> => ({\n upload: async (_learnCard, vc, { cache = 'cache-first' } = {}) => {\n const uri = await plane.upload(_learnCard, vc);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.setVc(uri, vc);\n }\n\n return uri;\n },\n // TODO: Add caching to uploadMany\n ...('uploadMany' in plane ? { uploadMany: plane.uploadMany } : {}),\n ...('uploadEncrypted' in plane\n ? {\n uploadEncrypted: async (_learnCard, vc, params, { cache = 'cache-first' } = {}) => {\n const uri = await plane.uploadEncrypted?.(_learnCard, vc, params);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.setVc(uri, vc);\n }\n\n return uri;\n },\n }\n : {}),\n ...('delete' in plane\n ? {\n delete: async (_learnCard, uri, { cache = 'cache-first' } = {}) => {\n const result = await plane.delete?.(_learnCard, uri);\n\n if (result && cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.setVc(uri, undefined);\n }\n\n return result;\n },\n }\n : {}),\n});\n\nconst generateStorePlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardStorePlane<Plugins> => {\n const pluginPlanes = learnCard.plugins.reduce((planes, plugin) => {\n if (pluginImplementsPlane(plugin, 'store')) {\n planes[plugin.name as keyof typeof planes] = bindLearnCardToFunctionsObject(\n learnCard,\n addCachingToStorePlane(plugin.store)\n ) as any;\n }\n\n return planes;\n }, {} as LearnCardStorePlane<Plugins>);\n\n return { ...pluginPlanes, providers: getPlaneProviders(learnCard.plugins, 'store') };\n};\n\nconst addCachingToIndexPlane = <\n ControlPlanes extends ControlPlane = never,\n Methods extends Record<string, (...args: any[]) => any> = Record<never, never>,\n DependentControlPlanes extends ControlPlane = never,\n DependentMethods extends Record<string, (...args: any[]) => any> = Record<never, never>\n>(\n plane: AddImplicitLearnCardArgument<\n IndexPlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n >,\n name: string\n): AddImplicitLearnCardArgument<\n IndexPlane,\n ControlPlanes,\n Methods,\n DependentControlPlanes,\n DependentMethods\n> => ({\n get: async (_learnCard, query, { cache = 'cache-first' } = {}) => {\n if (cache === 'cache-only' && !learnCardImplementsPlane(_learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await _learnCard.cache.getIndex(name, query ?? {});\n\n if (cachedResponse) {\n if (cache === 'cache-first') {\n plane.get(_learnCard, query, { cache: 'skip-cache' }).then(res => {\n _learnCard.cache.setIndex(name, query ?? {}, res);\n });\n }\n\n return cachedResponse;\n }\n }\n\n const list = await plane.get(_learnCard, query);\n\n if (list && learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n await _learnCard.cache.setIndex(name, query ?? {}, list);\n }\n\n return list;\n },\n ...(plane.getPage\n ? {\n getPage: async (\n _learnCard,\n query,\n paginationOptions,\n { cache = 'cache-first' } = {}\n ) => {\n if (cache === 'cache-only' && !learnCardImplementsPlane(_learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await _learnCard.cache.getIndexPage(\n name,\n query ?? {},\n paginationOptions\n );\n\n if (cachedResponse) {\n if (cache === 'cache-first') {\n plane\n .getPage?.(_learnCard, query, paginationOptions, {\n cache: 'skip-cache',\n })\n .then((res: any) => {\n _learnCard.cache.setIndexPage(\n name,\n query ?? {},\n res,\n paginationOptions\n );\n });\n }\n\n return cachedResponse;\n }\n }\n\n const result = await plane.getPage?.(_learnCard, query, paginationOptions);\n\n if (\n result &&\n learnCardImplementsPlane(_learnCard, 'cache') &&\n cache !== 'skip-cache'\n ) {\n await _learnCard.cache.setIndexPage(\n name,\n query ?? {},\n result,\n paginationOptions\n );\n }\n\n return result;\n },\n }\n : {}),\n ...(plane.getCount\n ? {\n getCount: async (_learnCard, query, { cache = 'cache-first' } = {}) => {\n if (cache === 'cache-only' && !learnCardImplementsPlane(_learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(_learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await _learnCard.cache.getIndexCount?.(\n name,\n query ?? {}\n );\n\n if (cachedResponse) {\n if (cache === 'cache-first') {\n plane\n .getCount?.(_learnCard, query, {\n cache: 'skip-cache',\n })\n .then((res: number) =>\n _learnCard.cache.setIndexCount?.(name, query ?? {}, res)\n );\n }\n\n return cachedResponse;\n }\n }\n\n const result = await plane.getCount?.(_learnCard, query);\n\n if (\n result &&\n learnCardImplementsPlane(_learnCard, 'cache') &&\n cache !== 'skip-cache'\n ) {\n await _learnCard.cache.setIndexCount?.(name, query ?? {}, result);\n }\n\n return result;\n },\n }\n : {}),\n add: async (_learnCard, record, { cache = 'cache-first' } = {}) => {\n const result = await plane.add(_learnCard, record);\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n ...(plane.addMany\n ? {\n addMany: async (_learnCard, records, { cache = 'cache-first' } = {}) => {\n const result = await plane.addMany?.(_learnCard, records);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n }\n : {}),\n update: async (_learnCard, id, update, { cache = 'cache-first' } = {}) => {\n const result = await plane.update(_learnCard, id, update);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n remove: async (_learnCard, id, { cache = 'cache-first' } = {}) => {\n const result = await plane.remove(_learnCard, id);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n ...(plane.removeAll\n ? {\n removeAll: async (_learnCard, { cache = 'cache-first' } = {}) => {\n const result = await plane.removeAll?.(_learnCard);\n\n if (cache !== 'skip-cache' && learnCardImplementsPlane(_learnCard, 'cache')) {\n await _learnCard.cache.flushIndex();\n }\n\n return result;\n },\n }\n : {}),\n});\n\nconst generateIndexPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardIndexPlane<Plugins> => {\n const individualPlanes = learnCard.plugins.reduce<LearnCardIndexPlane<Plugins>>(\n (planes, plugin) => {\n if (pluginImplementsPlane(plugin, 'index')) {\n planes[plugin.name as keyof typeof planes] = bindLearnCardToFunctionsObject(\n learnCard,\n addCachingToIndexPlane(plugin.index, plugin.name)\n ) as any;\n }\n\n return planes;\n },\n {} as LearnCardIndexPlane<Plugins>\n );\n\n const all: Pick<IndexPlane, 'get'> = {\n get: async <Metadata extends Record<string, any> = Record<never, never>>(\n query?: Partial<Query<CredentialRecord<Metadata>>>,\n { cache = 'cache-first' }: PlaneOptions = {}\n ) => {\n learnCard.debug?.('learnCard.index.all.get');\n\n if (cache === 'cache-only' && !learnCardImplementsPlane(learnCard, 'cache')) {\n throw new Error('Cannot read from cache. Cache Plane is not implemented!');\n }\n\n if (learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n const cachedResponse = await learnCard.cache.getIndex<Metadata>('all', query ?? {});\n\n if (cachedResponse) {\n if (cache === 'cache-first' && learnCardImplementsPlane(learnCard, 'index')) {\n learnCard.index.all\n .get(query, { cache: 'skip-cache' })\n .then(res => learnCard.cache.setIndex('all', query ?? {}, res));\n }\n\n return cachedResponse;\n }\n }\n\n const resultsWithDuplicates = (\n await Promise.all(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'index')) return [];\n\n return plugin.index.get(learnCard as any, query) as Promise<\n CredentialRecord<Metadata>[]\n >;\n })\n )\n ).flat();\n\n const results = uniqBy(resultsWithDuplicates, 'id');\n\n if (results && learnCardImplementsPlane(learnCard, 'cache') && cache !== 'skip-cache') {\n await learnCard.cache.setIndex('all', query ?? {}, results);\n }\n\n return results;\n },\n };\n\n return { ...individualPlanes, all, providers: getPlaneProviders(learnCard.plugins, 'index') };\n};\n\nconst generateCachePlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardCachePlane<Plugins> => {\n return {\n getIndex: async <Metadata extends Record<string, any> = Record<never, never>>(\n name: string,\n query: Partial<Query<CredentialRecord<Metadata>>>\n ) => {\n learnCard.debug?.('learnCard.cache.getIndex');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getIndex(learnCard as any, name, query) as Promise<\n CredentialRecord<Metadata>[]\n >;\n })\n );\n\n const index = results.find(isFulfilledAndNotEmpty)?.value;\n\n return index;\n } catch (error) {\n return undefined;\n }\n },\n setIndex: async (name, query, value) => {\n learnCard.debug?.('learnCard.cache.setIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setIndex(learnCard as any, name, query, value);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n getIndexPage: async <Metadata extends Record<string, any> = Record<never, never>>(\n name: string,\n query: Partial<Query<CredentialRecord<Metadata>>>,\n paginationOptions?: { limit?: number; cursor?: string }\n ) => {\n learnCard.debug?.('learnCard.cache.getIndex');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getIndexPage(\n learnCard as any,\n name,\n query,\n paginationOptions\n ) as Promise<\n | {\n records: CredentialRecord<Metadata>[];\n hasMore: boolean;\n cursor?: string;\n }\n | undefined\n >;\n })\n );\n\n const index = results.find(isFulfilledAndNotEmpty)?.value;\n\n return index;\n } catch (error) {\n return undefined;\n }\n },\n setIndexPage: async (name, query, value, paginationOptions) => {\n learnCard.debug?.('learnCard.cache.setIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setIndexPage(\n learnCard as any,\n name,\n query,\n value,\n paginationOptions\n );\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n getIndexCount: async <Metadata extends Record<string, any> = Record<never, never>>(\n name: string,\n query: Partial<Query<CredentialRecord<Metadata>>>\n ) => {\n learnCard.debug?.('learnCard.cache.getIndex');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getIndexCount?.(\n learnCard as any,\n name,\n query\n ) as Promise<number | undefined>;\n })\n );\n\n const index = results.find(isFulfilledAndNotEmpty)?.value;\n\n return index;\n } catch (error) {\n return undefined;\n }\n },\n setIndexCount: async (name, query, value) => {\n learnCard.debug?.('learnCard.cache.setIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setIndexCount?.(learnCard as any, name, query, value);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n flushIndex: async () => {\n learnCard.debug?.('learnCard.cache.flushIndex');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.flushIndex(learnCard as any);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n getVc: async uri => {\n learnCard.debug?.('learnCard.cache.getVc');\n\n try {\n const results = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.getVc(learnCard as any, uri);\n })\n );\n\n const vc = results.find(isFulfilledAndNotEmpty)?.value;\n\n return vc;\n } catch (error) {\n return undefined;\n }\n },\n setVc: async (uri, value) => {\n learnCard.debug?.('learnCard.cache.setVc');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.setVc(learnCard as any, uri, value);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n flushVc: async () => {\n learnCard.debug?.('learnCard.cache.flushVc');\n\n const result = await Promise.allSettled(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'cache')) {\n throw new Error('Plugin is not a Cache Plugin');\n }\n\n return plugin.cache.flushVc(learnCard as any);\n })\n );\n\n return result.some(promiseResult => promiseResult.status === 'fulfilled');\n },\n providers: getPlaneProviders(learnCard.plugins, 'cache'),\n };\n};\n\nconst generateIdPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardIdPlane<Plugins> => {\n return {\n did: method => {\n learnCard.debug?.('learnCard.id.did', method);\n\n const result = findFirstResult([...learnCard.plugins].reverse(), plugin => {\n try {\n if (!pluginImplementsPlane(plugin, 'id')) return undefined;\n\n return plugin.id.did(learnCard as any, method);\n } catch (error) {\n return undefined;\n }\n });\n\n if (!result) throw new Error(`No plugin supports did method ${method}`);\n\n return result;\n },\n keypair: algorithm => {\n learnCard.debug?.('learnCard.id.keypair', algorithm);\n\n const result = findFirstResult(learnCard.plugins, plugin => {\n try {\n if (!pluginImplementsPlane(plugin, 'id')) return undefined;\n\n return plugin.id.keypair(learnCard as any, algorithm);\n } catch (error) {\n return undefined;\n }\n });\n\n if (!result) throw new Error(`No plugin supports keypair type ${algorithm}`);\n\n return result;\n },\n providers: getPlaneProviders(learnCard.plugins, 'id'),\n };\n};\n\nconst generateContextPlane = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>\n): LearnCardContextPlane<Plugins> => {\n return {\n resolveDocument: async (uri, allowRemote = false) => {\n learnCard.debug?.('learnCard.context.resolveDocument', uri);\n\n const staticResults = await Promise.all(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'context')) return undefined;\n\n return plugin.context.resolveStaticDocument(learnCard as any, uri);\n })\n );\n\n const staticResult = staticResults.find(Boolean);\n\n if (staticResult || !allowRemote) return staticResult;\n\n const remoteResults = await Promise.all(\n learnCard.plugins.map(async plugin => {\n if (!pluginImplementsPlane(plugin, 'context')) return undefined;\n\n return plugin.context.resolveRemoteDocument?.(learnCard as any, uri);\n })\n );\n\n return remoteResults.find(Boolean);\n },\n providers: getPlaneProviders(learnCard.plugins, 'context'),\n };\n};\n\nconst bindMethods = <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods extends GetPluginMethods<Plugins> = GetPluginMethods<Plugins>\n>(\n learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods>,\n pluginMethods: PluginMethods\n): PluginMethods => bindLearnCardToFunctionsObject(learnCard, pluginMethods as any) as any;\n\n/** @group Universal Wallets */\nexport const generateLearnCard = async <\n Plugins extends Plugin[] = [],\n ControlPlanes extends GetPlanesForPlugins<Plugins> = GetPlanesForPlugins<Plugins>,\n PluginMethods extends GetPluginMethods<Plugins> = GetPluginMethods<Plugins>\n>(\n _learnCard: Partial<LearnCard<Plugins, ControlPlanes, PluginMethods>> = {}\n): Promise<LearnCard<Plugins, ControlPlanes, PluginMethods>> => {\n const { plugins = [] as unknown as Plugins } = _learnCard;\n\n const pluginMethods = plugins.reduce<PluginMethods>((cumulativePluginMethods, plugin) => {\n const newPluginMethods = { ...(cumulativePluginMethods as any), ...plugin.methods };\n\n return newPluginMethods;\n }, {} as PluginMethods);\n\n const learnCard: LearnCard<Plugins, ControlPlanes, PluginMethods> = {\n read: {} as LearnCardReadPlane<Plugins>,\n store: {} as LearnCardStorePlane<Plugins>,\n index: {} as LearnCardIndexPlane<Plugins>,\n cache: {} as LearnCardCachePlane<Plugins>,\n id: {} as LearnCardIdPlane<Plugins>,\n context: {} as LearnCardContextPlane<Plugins>,\n plugins: plugins as Plugins,\n invoke: pluginMethods,\n addPlugin: function (plugin) {\n return addPluginToLearnCard(this as any, plugin);\n },\n debug: _learnCard.debug,\n };\n\n (learnCard as any).read = generateReadPlane(learnCard);\n (learnCard as any).store = generateStorePlane(learnCard);\n (learnCard as any).index = generateIndexPlane(learnCard);\n (learnCard as any).cache = generateCachePlane(learnCard);\n (learnCard as any).id = generateIdPlane(learnCard);\n (learnCard as any).context = generateContextPlane(learnCard);\n\n if (pluginMethods) learnCard.invoke = bindMethods(learnCard, pluginMethods);\n\n return learnCard;\n};\n", "import { CredentialRecord, VC, VP } from '@learncard/types';\nimport { TestCachePlugin } from './types';\n\nexport const getTestCache = (): TestCachePlugin => {\n let index: Record<string, CredentialRecord[]> = {};\n let paginatedIndex: Record<\n string,\n { records: CredentialRecord[]; hasMore: boolean; cursor?: string }\n > = {};\n let vcs: Record<string, VC | VP | undefined> = {};\n\n return {\n name: 'Test Cache',\n displayName: 'Test Cache',\n description: '[Testing] Tests Caching Implementation',\n cache: {\n getIndex: async (_learnCard, name, query) => {\n _learnCard.debug?.('Test Cache, getIndex', { name, query, value: index });\n return index[name];\n },\n setIndex: async (_learnCard, name, query, value) => {\n _learnCard.debug?.('Test Cache, setIndex', { name, query, value });\n index[name] = value as any;\n return true;\n },\n getIndexPage: async (_learnCard, name, query, paginationOptions) => {\n _learnCard.debug?.('Test Cache, getIndex', {\n name,\n query,\n paginationOptions,\n value: index,\n });\n return paginatedIndex[name];\n },\n setIndexPage: async (_learnCard, name, query, value, paginationOptions) => {\n _learnCard.debug?.('Test Cache, setIndex', {\n name,\n query,\n paginationOptions,\n value,\n });\n paginatedIndex[name] = value as any;\n return true;\n },\n flushIndex: async _learnCard => {\n _learnCard.debug?.('Test Cache, flushIndex');\n index = {};\n return true;\n },\n getVc: async (_learnCard, uri) => {\n _learnCard.debug?.('Test Cache, getVc', { uri, value: vcs[uri] });\n return vcs[uri];\n },\n setVc: async (_learnCard, uri, vc) => {\n _learnCard.debug?.('Test Cache, setVc', { uri, value: vc });\n vcs[uri] = vc;\n return true;\n },\n flushVc: async _learnCard => {\n _learnCard.debug?.('Test Cache, flushVc');\n vcs = {};\n return true;\n },\n },\n methods: {},\n };\n};\n", "import { CredentialRecord, VC } from '@learncard/types';\nimport { TestIndexPlugin } from './types';\n\nexport const getTestIndex = (): TestIndexPlugin => {\n let index: CredentialRecord[] = [];\n\n return {\n name: 'Test Index',\n displayName: 'Test Index',\n description: '[Testing] Tests Index Implementations',\n index: {\n get: async (_learnCard, query) => {\n _learnCard.debug?.('Test Storage, index, get', { query });\n\n return index;\n },\n add: async (_learnCard, record) => {\n _learnCard.debug?.('Test Storage, index, add', { record });\n\n index.push(record);\n\n return true;\n },\n update: async () => false, // TODO: Implement\n remove: async (_learnCard, id) => {\n _learnCard.debug?.('Test Storage, index, remove', { id });\n\n let recordIndex = index.findIndex(record => record.id === id);\n\n index.splice(recordIndex, 1);\n\n return true;\n },\n },\n methods: {},\n };\n};\n", "import { CredentialRecord, VC, VP } from '@learncard/types';\nimport { TestStoragePlugin } from './types';\n\nexport const getTestStorage = (): TestStoragePlugin => {\n const index: CredentialRecord[] = [];\n const vcs: (VC | VP)[] = [];\n\n return {\n name: 'Test Storage',\n displayName: 'Test Storage',\n description: '[Testing] Tests Storage Implementations',\n read: {\n get: async (_learnCard, uri) => {\n _learnCard.debug?.('Test Storage, read, get', { uri });\n\n if (!uri) return undefined;\n\n const [_lc, method, vcIndex] = uri.split(':');\n\n if (method !== 'test') return undefined;\n\n return vcs[Number.parseInt(vcIndex)];\n },\n },\n store: {\n upload: async (_learnCard, vc) => {\n _learnCard.debug?.('Test Storage, store, upload', { vc });\n\n const vcIndex = vcs.length;\n\n vcs.push(vc);\n\n return `lc:test:${vcIndex}`;\n },\n delete: async (_learnCard, uri) => {\n _learnCard.debug?.('Test Storage, store, delete', { uri });\n\n if (!uri) return false;\n\n const [_lc, method, vcIndex] = uri.split(':');\n\n if (method !== 'test') return false;\n\n const vcIdx = Number.parseInt(vcIndex);\n\n if (vcIdx >= 0 && vcIdx < vcs.length) {\n vcs[vcIdx] = undefined as unknown as VC | VP;\n return true;\n }\n\n return false;\n },\n },\n index: {\n get: async (_learnCard, query) => {\n _learnCard.debug?.('Test Storage, index, get', { query });\n\n return index;\n },\n add: async (_learnCard, record) => {\n _learnCard.debug?.('Test Storage, index, add', { record });\n\n index.push(record);\n\n return true;\n },\n update: async () => false, // TODO: Implement\n remove: async (_learnCard, id) => {\n _learnCard.debug?.('Test Storage, index, remove', { id });\n\n const recordIndex = index.findIndex(record => record.id === id);\n\n index.splice(recordIndex, 1);\n\n return true;\n },\n },\n methods: {},\n };\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/types/planes.d.ts
CHANGED
|
@@ -41,6 +41,7 @@ export type StorePlane = {
|
|
|
41
41
|
upload: (vc: VC | VP, options?: PlaneOptions) => Promise<string>;
|
|
42
42
|
uploadMany?: (vcs: (VC | VP)[], options?: PlaneOptions) => Promise<string[]>;
|
|
43
43
|
uploadEncrypted?: (vc: VC | VP, params?: EncryptionParams, options?: PlaneOptions) => Promise<string>;
|
|
44
|
+
delete?: (uri: string, options?: PlaneOptions) => Promise<boolean>;
|
|
44
45
|
};
|
|
45
46
|
export type PluginStorePlane = StorePlane;
|
|
46
47
|
export type LearnCardStorePlane<Plugins extends Plugin[]> = Record<FilterForPlane<Plugins, 'store'>, StorePlane> & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planes.d.ts","sourceRoot":"","sources":["../../src/types/planes.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"planes.d.ts","sourceRoot":"","sources":["../../src/types/planes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/wallet/base/wallet.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAgC,MAAM,cAAc,CAAC;AACjG,OAAO,EAEH,mBAAmB,EAWtB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/wallet/base/wallet.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAgC,MAAM,cAAc,CAAC;AACjG,OAAO,EAEH,mBAAmB,EAWtB,MAAM,cAAc,CAAC;AA4vBtB,+BAA+B;AAC/B,eAAO,MAAM,iBAAiB,GAC1B,OAAO,SAAS,MAAM,EAAE,OACxB,aAAa,SAAS,mBAAmB,CAAC,OAAO,CAAC,iCAClD,aAAa,SAAS,gBAAgB,CAAC,OAAO,CAAC,2CAEnC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,KACtE,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,CAkC1D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/wallet/plugins/test-storage/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,eAAO,MAAM,cAAc,QAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/wallet/plugins/test-storage/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,eAAO,MAAM,cAAc,QAAO,iBA4EjC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@learncard/core",
|
|
3
|
-
"version": "9.4.
|
|
3
|
+
"version": "9.4.16",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -37,14 +37,14 @@
|
|
|
37
37
|
"sift": "^17.0.1",
|
|
38
38
|
"ts-jest": "^29.0.3",
|
|
39
39
|
"tsc-alias": "^1.8.10",
|
|
40
|
-
"@learncard/types": "5.13.
|
|
40
|
+
"@learncard/types": "5.13.6"
|
|
41
41
|
},
|
|
42
42
|
"types": "./dist/index.d.ts",
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"abort-controller": "^3.0.0",
|
|
45
45
|
"core-js": "^3.25.5",
|
|
46
46
|
"isomorphic-webcrypto": "^2.3.8",
|
|
47
|
-
"@learncard/helpers": "1.2.
|
|
47
|
+
"@learncard/helpers": "1.2.16"
|
|
48
48
|
},
|
|
49
49
|
"sideEffects": false,
|
|
50
50
|
"scripts": {
|