@learncard/core 9.4.21 → 9.4.22

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.
@@ -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 ...('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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",
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, StoredCredentialEnvelope, 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 | StoredCredentialEnvelope | 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, StoredCredentialEnvelope, VC, VP } from '@learncard/types';\nimport { TestStoragePlugin } from './types';\n\ntype StoredItem = VC | VP | StoredCredentialEnvelope;\n\nexport const getTestStorage = (): TestStoragePlugin => {\n const index: CredentialRecord[] = [];\n const vcs: StoredItem[] = [];\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 StoredItem;\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:()=>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");
1
+ "use strict";var g=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var r=(e,s)=>g(e,"name",{value:s,configurable:!0});var M=(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))!C.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={};M(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"),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"),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"&&!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")}:{},..."delete"in e?{delete:r(async(s,n,{cache:t="cache-first"}={})=>{let a=await e.delete?.(s,n);return a&&t!=="skip-cache"&&c(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"),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 b(this,a)},"addPlugin"),debug:e.debug};return t.read=T(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 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,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 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,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"),delete:r(async(n,t)=>{if(n.debug?.("Test Storage, store, delete",{uri:t}),!t)return!1;let[a,i,o]=t.split(":");if(i!=="test")return!1;let u=Number.parseInt(o);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 ...('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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",
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, StoredCredentialEnvelope, 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 | StoredCredentialEnvelope | 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, StoredCredentialEnvelope, VC, VP } from '@learncard/types';\nimport { TestStoragePlugin } from './types';\n\ntype StoredItem = VC | VP | StoredCredentialEnvelope;\n\nexport const getTestStorage = (): TestStoragePlugin => {\n const index: CredentialRecord[] = [];\n const vcs: StoredItem[] = [];\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 StoredItem;\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": ["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
  }
@@ -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 ...('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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",
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, StoredCredentialEnvelope, 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 | StoredCredentialEnvelope | 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, StoredCredentialEnvelope, VC, VP } from '@learncard/types';\nimport { TestStoragePlugin } from './types';\n\ntype StoredItem = VC | VP | StoredCredentialEnvelope;\n\nexport const getTestStorage = (): TestStoragePlugin => {\n const index: CredentialRecord[] = [];\n const vcs: StoredItem[] = [];\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 StoredItem;\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,4 +1,4 @@
1
- import { CredentialRecord, VC, VP, JWKWithPrivateKey } from '@learncard/types';
1
+ import { CredentialRecord, StoredCredentialEnvelope, VC, VP, JWKWithPrivateKey } from '@learncard/types';
2
2
  import { Query } from 'sift';
3
3
  import { Plugin } from './wallet';
4
4
  import { OmitNevers } from './helpers';
@@ -28,7 +28,7 @@ export type GetPlaneProviders<Plugins extends Plugin[], Plane extends ControlPla
28
28
  }>;
29
29
  }[number];
30
30
  export type ReadPlane = {
31
- get: (uri?: string, options?: PlaneOptions) => Promise<VC | VP | undefined>;
31
+ get: (uri?: string, options?: PlaneOptions) => Promise<VC | VP | StoredCredentialEnvelope | undefined>;
32
32
  };
33
33
  export type PluginReadPlane = ReadPlane;
34
34
  export type LearnCardReadPlane<Plugins extends Plugin[]> = ReadPlane & {
@@ -38,9 +38,9 @@ export type EncryptionParams = {
38
38
  recipients: string[];
39
39
  };
40
40
  export type StorePlane = {
41
- upload: (vc: VC | VP, options?: PlaneOptions) => Promise<string>;
42
- uploadMany?: (vcs: (VC | VP)[], options?: PlaneOptions) => Promise<string[]>;
43
- uploadEncrypted?: (vc: VC | VP, params?: EncryptionParams, options?: PlaneOptions) => Promise<string>;
41
+ upload: (vc: VC | VP | StoredCredentialEnvelope, options?: PlaneOptions) => Promise<string>;
42
+ uploadMany?: (vcs: Array<VC | VP | StoredCredentialEnvelope>, options?: PlaneOptions) => Promise<string[]>;
43
+ uploadEncrypted?: (vc: VC | VP | StoredCredentialEnvelope, params?: EncryptionParams, options?: PlaneOptions) => Promise<string>;
44
44
  delete?: (uri: string, options?: PlaneOptions) => Promise<boolean>;
45
45
  };
46
46
  export type PluginStorePlane = StorePlane;
@@ -93,8 +93,8 @@ export type CachePlane = {
93
93
  getIndexCount?: <Metadata extends Record<string, any> = Record<never, never>>(name: string, query: Partial<Query<CredentialRecord<Metadata>>>) => Promise<number | undefined>;
94
94
  setIndexCount?: <Metadata extends Record<string, any> = Record<never, never>>(name: string, query: Partial<Query<CredentialRecord<Metadata>>>, value: number) => Promise<boolean>;
95
95
  flushIndex: () => Promise<boolean>;
96
- getVc: (uri: string) => Promise<VC | VP | undefined>;
97
- setVc: (uri: string, value: VC | VP | undefined) => Promise<boolean>;
96
+ getVc: (uri: string) => Promise<VC | VP | StoredCredentialEnvelope | undefined>;
97
+ setVc: (uri: string, value: VC | VP | StoredCredentialEnvelope | undefined) => Promise<boolean>;
98
98
  flushVc: () => Promise<boolean>;
99
99
  };
100
100
  export type PluginCachePlane = CachePlane;
@@ -1 +1 @@
1
- {"version":3,"file":"planes.d.ts","sourceRoot":"","sources":["../../src/types/planes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,aAAa,GAAG,YAAY,CAAC;AAExE,MAAM,MAAM,YAAY,GAAG;IACvB,KAAK,CAAC,EAAE,aAAa,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAEnF,MAAM,MAAM,cAAc,CAAC,OAAO,SAAS,MAAM,EAAE,EAAE,KAAK,SAAS,YAAY,IAAI;IAC/E,OAAO;CACV,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,GACjB,GAAG,GACH;KACG,KAAK,IAAI,MAAM,OAAO,GAAG,SAAS,SAAS,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAC/D,KAAK,GACL,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;CAC3B,CAAC,MAAM,CAAC,CAAC;AAEd,MAAM,MAAM,mBAAmB,CAAC,OAAO,SAAS,MAAM,EAAE,IAAI,GAAG,EAAE,SAAS,OAAO,GAC3E,KAAK,GACL;KACG,KAAK,IAAI,MAAM,OAAO,GAAG;SACrB,GAAG,IAAI,YAAY,GAAG,SAAS,SAAS,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG;KAC7E,CAAC,YAAY,CAAC;CAClB,CAAC,MAAM,CAAC,CAAC;AAEd,MAAM,MAAM,iBAAiB,CACzB,OAAO,SAAS,MAAM,EAAE,EACxB,KAAK,SAAS,YAAY,IAC1B,GAAG,EAAE,SAAS,OAAO,GACnB,GAAG,GACH;KACG,KAAK,IAAI,MAAM,OAAO,GAAG,SAAS,SAAS,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAC/D,KAAK,GACL,UAAU,CAAC;SACR,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,SAAS,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GACpE;YAAE,IAAI,EAAE,IAAI,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,GAC1D,KAAK;KACV,CAAC;CACL,CAAC,MAAM,CAAC,CAAC;AAId,MAAM,MAAM,SAAS,GAAG;IACpB,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;CAC/E,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,SAAS,CAAC;AAExC,MAAM,MAAM,kBAAkB,CAAC,OAAO,SAAS,MAAM,EAAE,IAAI,SAAS,GAAG;IACnE,SAAS,EAAE,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;CACjD,CAAC;AAIF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,UAAU,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACrB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,eAAe,CAAC,EAAE,CACd,EAAE,EAAE,EAAE,GAAG,EAAE,EACX,MAAM,CAAC,EAAE,gBAAgB,EACzB,OAAO,CAAC,EAAE,YAAY,KACrB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACtE,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAE1C,MAAM,MAAM,mBAAmB,CAAC,OAAO,SAAS,MAAM,EAAE,IAAI,MAAM,CAC9D,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,EAChC,UAAU,CACb,GAAG;IACA,SAAS,EAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;CAClD,CAAC;AAIF,MAAM,MAAM,UAAU,GAAG;IACrB,GAAG,EAAE,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAC7D,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAClD,OAAO,CAAC,EAAE,YAAY,KACrB,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,EAAE,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAClE,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAClD,iBAAiB,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EACtE,OAAO,CAAC,EAAE,YAAY,KACrB,OAAO,CAAC;QAAE,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3F,QAAQ,CAAC,EAAE,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EACnE,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAClD,OAAO,CAAC,EAAE,YAAY,KACrB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,GAAG,EAAE,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAC7D,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAClC,OAAO,CAAC,EAAE,YAAY,KACrB,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAClE,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAAE,EACrC,OAAO,CAAC,EAAE,YAAY,KACrB,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,MAAM,EAAE,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAChE,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,WAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EAChD,OAAO,CAAC,EAAE,YAAY,KACrB,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACjE,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5D,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAE1C,MAAM,MAAM,mBAAmB,CAAC,OAAO,SAAS,MAAM,EAAE,IAAI;IACxD,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC7B,SAAS,EAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;CAClD,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;AAIzD,MAAM,MAAM,UAAU,GAAG;IACrB,QAAQ,EAAE,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAClE,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAChD,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;IACvD,QAAQ,EAAE,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAClE,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,EACjD,KAAK,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAAE,KAClC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,YAAY,EAAE,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EACtE,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,EACjD,iBAAiB,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KACrE,OAAO,CACR;QAAE,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAC3F,CAAC;IACF,YAAY,EAAE,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EACtE,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,EACjD,KAAK,EAAE;QAAE,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,EACnF,iBAAiB,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KACtD,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EACxE,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAChD,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EACxE,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,EACjD,KAAK,EAAE,MAAM,KACZ,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,UAAU,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;IACrD,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACrE,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACnC,CAAC;AACF,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAE1C,MAAM,MAAM,mBAAmB,CAAC,OAAO,SAAS,MAAM,EAAE,IAAI,UAAU,GAAG;IACrE,SAAS,EAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;CAClD,CAAC;AAIF,MAAM,MAAM,OAAO,GAAG;IAClB,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,MAAM,CAAC;IACzD,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,iBAAiB,CAAC;CAC9E,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC;AAEpC,MAAM,MAAM,gBAAgB,CAAC,OAAO,SAAS,MAAM,EAAE,IAAI,OAAO,GAAG;IAC/D,SAAS,EAAE,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;CAC/C,CAAC;AAIF,MAAM,MAAM,YAAY,GAAG;IACvB,eAAe,EAAE,CACb,GAAG,EAAE,MAAM,EACX,WAAW,CAAC,EAAE,OAAO,KACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC7B,qBAAqB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IACjF,qBAAqB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;CACrF,CAAC;AAEF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,MAAM,EAAE,IAAI,YAAY,GAAG;IACzE,SAAS,EAAE,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;CACpD,CAAC"}
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":"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"}
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;AAI5C,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.21",
3
+ "version": "9.4.22",
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.17.1"
40
+ "@learncard/types": "5.17.2"
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.3.3"
47
+ "@learncard/helpers": "1.3.4"
48
48
  },
49
49
  "sideEffects": false,
50
50
  "scripts": {