@learncard/init 2.4.3 → 2.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -7
- package/dist/init.cjs.development.cjs +205 -169
- package/dist/init.cjs.development.cjs.map +3 -3
- package/dist/init.cjs.production.min.cjs +7 -7
- package/dist/init.cjs.production.min.cjs.map +4 -4
- package/dist/init.esm.js +205 -169
- package/dist/init.esm.js.map +3 -3
- package/package.json +84 -92
- package/src/defaults.ts +6 -0
- package/src/index.ts +2 -0
- package/src/init.ts +144 -0
- package/src/initializers/apiLearnCard.ts +36 -0
- package/src/initializers/customLearnCard.ts +11 -0
- package/src/initializers/didWebLearnCardFromSeed.ts +96 -0
- package/src/initializers/didWebNetworkLearnCardFromSeed.ts +114 -0
- package/src/initializers/emptyLearnCard.ts +46 -0
- package/src/initializers/learnCardFromSeed.ts +93 -0
- package/src/initializers/networkLearnCardFromApiKey.ts +69 -0
- package/src/initializers/networkLearnCardFromSeed.ts +108 -0
- package/src/types/LearnCard.ts +244 -0
- package/src/types/didkit-plugin-node-ambient.d.ts +6 -0
- package/src/types/helpers.ts +17 -0
- package/dist/node-esm.mjs +0 -32
package/package.json
CHANGED
|
@@ -1,96 +1,88 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
2
|
+
"name": "@learncard/init",
|
|
3
|
+
"version": "2.4.5",
|
|
4
|
+
"description": "Primary initialization of LearnCard SDK",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/init.esm.js",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"development": "./src/index.ts",
|
|
11
|
+
"import": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"default": "./dist/init.esm.js"
|
|
14
|
+
},
|
|
15
|
+
"require": {
|
|
16
|
+
"types": "./dist/index.d.cts",
|
|
17
|
+
"default": "./dist/index.cjs"
|
|
18
|
+
}
|
|
14
19
|
},
|
|
15
|
-
"
|
|
16
|
-
|
|
17
|
-
|
|
20
|
+
"./dist/init.esm.js": {
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"default": "./dist/init.esm.js"
|
|
18
23
|
}
|
|
19
|
-
},
|
|
20
|
-
"import": {
|
|
21
|
-
"types": "./dist/index.d.ts",
|
|
22
|
-
"default": "./dist/init.esm.js"
|
|
23
|
-
},
|
|
24
|
-
"require": {
|
|
25
|
-
"types": "./dist/index.d.cts",
|
|
26
|
-
"default": "./dist/index.cjs"
|
|
27
|
-
}
|
|
28
24
|
},
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
"
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
"
|
|
92
|
-
|
|
93
|
-
"lint:fix": "aqu lint --fix",
|
|
94
|
-
"test": "vitest"
|
|
95
|
-
}
|
|
96
|
-
}
|
|
25
|
+
"files": [
|
|
26
|
+
"dist",
|
|
27
|
+
"src"
|
|
28
|
+
],
|
|
29
|
+
"scripts": {
|
|
30
|
+
"build": "node ./scripts/build.mjs && shx cp ./scripts/mixedEntypoint.js ./dist/index.cjs && tsc --p tsconfig.build.json && shx cp ./dist/index.d.ts ./dist/index.d.cts",
|
|
31
|
+
"start": "aqu watch",
|
|
32
|
+
"lint": "aqu lint",
|
|
33
|
+
"lint:fix": "aqu lint --fix",
|
|
34
|
+
"test": "vitest"
|
|
35
|
+
},
|
|
36
|
+
"author": "Learning Economy Foundation (www.learningeconomy.io)",
|
|
37
|
+
"license": "MIT",
|
|
38
|
+
"homepage": "https://github.com/learningeconomy/LearnCard/tree/main/packages/learn-card-init/README.md",
|
|
39
|
+
"repository": {
|
|
40
|
+
"type": "git",
|
|
41
|
+
"url": "https://github.com/learningeconomy/LearnCard"
|
|
42
|
+
},
|
|
43
|
+
"bugs": {
|
|
44
|
+
"url": "https://github.com/learningeconomy/LearnCard/issues"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@types/jest": "^29.2.2",
|
|
48
|
+
"@types/node": "^17.0.31",
|
|
49
|
+
"aqu": "0.4.3",
|
|
50
|
+
"esbuild": "^0.27.1",
|
|
51
|
+
"esbuild-jest": "^0.5.0",
|
|
52
|
+
"esbuild-plugin-copy": "^1.3.0",
|
|
53
|
+
"jest": "^29.3.0",
|
|
54
|
+
"jest-resolver-enhanced": "^1.1.0",
|
|
55
|
+
"jimp": "^0.16.1",
|
|
56
|
+
"qrcode-reader": "^1.0.4",
|
|
57
|
+
"shx": "^0.3.4",
|
|
58
|
+
"ts-jest": "^29.0.3"
|
|
59
|
+
},
|
|
60
|
+
"types": "./dist/index.d.ts",
|
|
61
|
+
"dependencies": {
|
|
62
|
+
"@learncard/chapi-plugin": "1.1.26",
|
|
63
|
+
"@learncard/core": "9.4.26",
|
|
64
|
+
"@learncard/crypto-plugin": "1.1.26",
|
|
65
|
+
"@learncard/didkey-plugin": "1.1.26",
|
|
66
|
+
"@learncard/didkit-plugin": "1.9.6",
|
|
67
|
+
"@learncard/did-web-plugin": "1.1.26",
|
|
68
|
+
"@learncard/dynamic-loader-plugin": "1.1.26",
|
|
69
|
+
"@learncard/encryption-plugin": "1.1.26",
|
|
70
|
+
"@learncard/ethereum-plugin": "1.1.27",
|
|
71
|
+
"@learncard/expiration-plugin": "1.2.26",
|
|
72
|
+
"@learncard/helpers": "1.3.8",
|
|
73
|
+
"@learncard/learn-card-plugin": "1.2.26",
|
|
74
|
+
"@learncard/learn-cloud-plugin": "2.3.31",
|
|
75
|
+
"@learncard/network-plugin": "^2.13.7",
|
|
76
|
+
"@learncard/openid4vc-plugin": "0.2.4",
|
|
77
|
+
"@learncard/sd-jwt-vc-plugin": "0.2.4",
|
|
78
|
+
"@learncard/types": "5.17.5",
|
|
79
|
+
"@learncard/vc-api-plugin": "1.1.26",
|
|
80
|
+
"@learncard/vc-plugin": "1.5.6",
|
|
81
|
+
"@learncard/vc-templates-plugin": "1.1.26",
|
|
82
|
+
"@learncard/vpqr-plugin": "1.1.26"
|
|
83
|
+
},
|
|
84
|
+
"optionalDependencies": {
|
|
85
|
+
"@learncard/didkit-plugin-node": "0.2.24"
|
|
86
|
+
},
|
|
87
|
+
"sideEffects": false
|
|
88
|
+
}
|
package/src/defaults.ts
ADDED
package/src/index.ts
ADDED
package/src/init.ts
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { customLearnCard } from './initializers/customLearnCard';
|
|
2
|
+
import { emptyLearnCard } from './initializers/emptyLearnCard';
|
|
3
|
+
import { learnCardFromSeed } from './initializers/learnCardFromSeed';
|
|
4
|
+
import { networkLearnCardFromSeed } from './initializers/networkLearnCardFromSeed';
|
|
5
|
+
import { didWebLearnCardFromSeed } from './initializers/didWebLearnCardFromSeed';
|
|
6
|
+
import { didWebNetworkLearnCardFromSeed } from './initializers/didWebNetworkLearnCardFromSeed';
|
|
7
|
+
import { networkLearnCardFromApiKey } from './initializers/networkLearnCardFromApiKey';
|
|
8
|
+
import { learnCardFromApiUrl } from './initializers/apiLearnCard';
|
|
9
|
+
|
|
10
|
+
import {
|
|
11
|
+
InitLearnCard,
|
|
12
|
+
EmptyLearnCard,
|
|
13
|
+
LearnCardFromSeed,
|
|
14
|
+
LearnCardFromVcApi,
|
|
15
|
+
CustomLearnCard,
|
|
16
|
+
NetworkLearnCardFromSeed,
|
|
17
|
+
DidWebLearnCardFromSeed,
|
|
18
|
+
DidWebNetworkLearnCardFromSeed,
|
|
19
|
+
NetworkLearnCardFromApiKey,
|
|
20
|
+
} from './types/LearnCard';
|
|
21
|
+
|
|
22
|
+
export * from './initializers/customLearnCard';
|
|
23
|
+
export * from './initializers/emptyLearnCard';
|
|
24
|
+
export * from './initializers/learnCardFromSeed';
|
|
25
|
+
export * from './initializers/networkLearnCardFromSeed';
|
|
26
|
+
export * from './initializers/didWebLearnCardFromSeed';
|
|
27
|
+
export * from './initializers/didWebNetworkLearnCardFromSeed';
|
|
28
|
+
export * from './initializers/apiLearnCard';
|
|
29
|
+
export * from './initializers/networkLearnCardFromApiKey';
|
|
30
|
+
|
|
31
|
+
// Overloads (Unfortunately necessary boilerplate 😢)
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Generates an Empty Wallet
|
|
35
|
+
*
|
|
36
|
+
* @group Init Functions
|
|
37
|
+
*/
|
|
38
|
+
export function initLearnCard(
|
|
39
|
+
config?: EmptyLearnCard['args']
|
|
40
|
+
): Promise<EmptyLearnCard['returnValue']>;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Generates a full wallet from a 32 byte seed
|
|
44
|
+
*
|
|
45
|
+
* @group Init Functions
|
|
46
|
+
*/
|
|
47
|
+
export function initLearnCard(
|
|
48
|
+
config: LearnCardFromSeed['args']
|
|
49
|
+
): Promise<LearnCardFromSeed['returnValue']>;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Generates a full wallet from a 32 byte seed
|
|
53
|
+
*
|
|
54
|
+
* @group Init Functions
|
|
55
|
+
*/
|
|
56
|
+
export function initLearnCard(
|
|
57
|
+
config: DidWebLearnCardFromSeed['args']
|
|
58
|
+
): Promise<DidWebLearnCardFromSeed['returnValue']>;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Generates a full wallet with access to LearnCard Network from a 32 byte seed
|
|
62
|
+
*
|
|
63
|
+
* @group Init Functions
|
|
64
|
+
*/
|
|
65
|
+
export function initLearnCard(
|
|
66
|
+
config: NetworkLearnCardFromSeed['args']
|
|
67
|
+
): Promise<NetworkLearnCardFromSeed['returnValue']>;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Generates a full wallet with access to LearnCard Network from a 32 byte seed using a different did:web
|
|
71
|
+
*
|
|
72
|
+
* @group Init Functions
|
|
73
|
+
*/
|
|
74
|
+
export function initLearnCard(
|
|
75
|
+
config: DidWebNetworkLearnCardFromSeed['args']
|
|
76
|
+
): Promise<DidWebNetworkLearnCardFromSeed['returnValue']>;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Generates a wallet with access to LearnCard Network using an API key (no local seed)
|
|
80
|
+
*
|
|
81
|
+
* @group Init Functions
|
|
82
|
+
*/
|
|
83
|
+
export function initLearnCard(
|
|
84
|
+
config: NetworkLearnCardFromApiKey['args']
|
|
85
|
+
): Promise<NetworkLearnCardFromApiKey['returnValue']>;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Generates a wallet that can sign VCs/VPs from a VC API
|
|
89
|
+
*
|
|
90
|
+
* @group Init Functions
|
|
91
|
+
*/
|
|
92
|
+
export function initLearnCard(
|
|
93
|
+
config: LearnCardFromVcApi['args']
|
|
94
|
+
): Promise<LearnCardFromVcApi['returnValue']>;
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Generates a custom wallet with no plugins added
|
|
98
|
+
*
|
|
99
|
+
* @group Init Functions
|
|
100
|
+
*/
|
|
101
|
+
export function initLearnCard(
|
|
102
|
+
config: CustomLearnCard['args']
|
|
103
|
+
): Promise<CustomLearnCard['returnValue']>;
|
|
104
|
+
|
|
105
|
+
// Implementation
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Generates a new LearnCard wallet
|
|
109
|
+
*
|
|
110
|
+
* @group Init Functions
|
|
111
|
+
*/
|
|
112
|
+
export async function initLearnCard(
|
|
113
|
+
config: InitLearnCard['args'] = {}
|
|
114
|
+
): InitLearnCard['returnValue'] {
|
|
115
|
+
if ('custom' in config) return customLearnCard({ debug: config.debug });
|
|
116
|
+
|
|
117
|
+
if ('vcApi' in config) {
|
|
118
|
+
const { vcApi, did, debug } = config;
|
|
119
|
+
|
|
120
|
+
return learnCardFromApiUrl({
|
|
121
|
+
url: typeof vcApi === 'string' ? vcApi : 'https://bridge.learncard.com',
|
|
122
|
+
did: vcApi === true ? 'did:key:z6MkjSz4mYqcn7dePGuktJ5PxecMkXQQHWRg8Lm6okATyFVh' : did,
|
|
123
|
+
debug,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if ('apiKey' in config) {
|
|
128
|
+
return networkLearnCardFromApiKey(config as NetworkLearnCardFromApiKey['args']);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if ('seed' in config) {
|
|
132
|
+
if ('network' in config) {
|
|
133
|
+
if ('didWeb' in config) return didWebNetworkLearnCardFromSeed(config);
|
|
134
|
+
|
|
135
|
+
return networkLearnCardFromSeed(config);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if ('didWeb' in config) return didWebLearnCardFromSeed(config);
|
|
139
|
+
|
|
140
|
+
return learnCardFromSeed(config);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return emptyLearnCard(config);
|
|
144
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { generateLearnCard } from '@learncard/core';
|
|
2
|
+
import { CryptoPlugin } from '@learncard/crypto-plugin';
|
|
3
|
+
import { getVCAPIPlugin } from '@learncard/vc-api-plugin';
|
|
4
|
+
import { expirationPlugin } from '@learncard/expiration-plugin';
|
|
5
|
+
import { getVCTemplatesPlugin } from '@learncard/vc-templates-plugin';
|
|
6
|
+
import { getCHAPIPlugin } from '@learncard/chapi-plugin';
|
|
7
|
+
import { getLearnCardPlugin } from '@learncard/learn-card-plugin';
|
|
8
|
+
|
|
9
|
+
import { LearnCardFromVcApi } from '../types/LearnCard';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Generates a LearnCard Wallet from a 64 character seed string
|
|
13
|
+
*
|
|
14
|
+
* @group Init Functions
|
|
15
|
+
*/
|
|
16
|
+
export const learnCardFromApiUrl = async ({
|
|
17
|
+
url,
|
|
18
|
+
did,
|
|
19
|
+
debug,
|
|
20
|
+
}: {
|
|
21
|
+
url: string;
|
|
22
|
+
did?: string;
|
|
23
|
+
debug?: typeof console.log;
|
|
24
|
+
}): Promise<LearnCardFromVcApi['returnValue']> => {
|
|
25
|
+
const cryptoLc = await (await generateLearnCard({ debug })).addPlugin(CryptoPlugin);
|
|
26
|
+
|
|
27
|
+
const apiLc = await cryptoLc.addPlugin(await getVCAPIPlugin({ url, did }));
|
|
28
|
+
|
|
29
|
+
const expirationLc = await apiLc.addPlugin(expirationPlugin(apiLc));
|
|
30
|
+
|
|
31
|
+
const templateLc = await expirationLc.addPlugin(getVCTemplatesPlugin());
|
|
32
|
+
|
|
33
|
+
const chapiLc = await templateLc.addPlugin(await getCHAPIPlugin());
|
|
34
|
+
|
|
35
|
+
return chapiLc.addPlugin(getLearnCardPlugin(chapiLc));
|
|
36
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { generateLearnCard } from '@learncard/core';
|
|
2
|
+
import { CustomLearnCard } from '../types/LearnCard';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Generates a custom LearnCard with no plugins added
|
|
6
|
+
*
|
|
7
|
+
* @group Init Functions
|
|
8
|
+
*/
|
|
9
|
+
export const customLearnCard = async ({ debug }: Partial<CustomLearnCard['args']> = {}): Promise<
|
|
10
|
+
CustomLearnCard['returnValue']
|
|
11
|
+
> => generateLearnCard({ debug });
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { generateLearnCard } from '@learncard/core';
|
|
2
|
+
import { DynamicLoaderPlugin } from '@learncard/dynamic-loader-plugin';
|
|
3
|
+
import { CryptoPlugin } from '@learncard/crypto-plugin';
|
|
4
|
+
import { DidMethod, getDidKitPlugin } from '@learncard/didkit-plugin';
|
|
5
|
+
import { getDidKeyPlugin } from '@learncard/didkey-plugin';
|
|
6
|
+
import { getEncryptionPlugin } from '@learncard/encryption-plugin';
|
|
7
|
+
import { getVCPlugin } from '@learncard/vc-plugin';
|
|
8
|
+
import { getVCTemplatesPlugin } from '@learncard/vc-templates-plugin';
|
|
9
|
+
import { getLearnCloudPlugin } from '@learncard/learn-cloud-plugin';
|
|
10
|
+
import { expirationPlugin } from '@learncard/expiration-plugin';
|
|
11
|
+
import { getEthereumPlugin } from '@learncard/ethereum-plugin';
|
|
12
|
+
|
|
13
|
+
import { getVpqrPlugin } from '@learncard/vpqr-plugin';
|
|
14
|
+
import { getCHAPIPlugin } from '@learncard/chapi-plugin';
|
|
15
|
+
import { getLearnCardPlugin } from '@learncard/learn-card-plugin';
|
|
16
|
+
import { getDidWebPlugin } from '@learncard/did-web-plugin';
|
|
17
|
+
import { getOpenID4VCPlugin } from '@learncard/openid4vc-plugin';
|
|
18
|
+
import { getSdJwtVcPlugin } from '@learncard/sd-jwt-vc-plugin';
|
|
19
|
+
|
|
20
|
+
import { DidWebLearnCardFromSeed } from '../types/LearnCard';
|
|
21
|
+
import { defaultEthereumArgs } from '../defaults';
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Generates a LearnCard Wallet from a 64 character seed string
|
|
25
|
+
*
|
|
26
|
+
* @group Init Functions
|
|
27
|
+
*/
|
|
28
|
+
export const didWebLearnCardFromSeed = async ({
|
|
29
|
+
seed,
|
|
30
|
+
didWeb,
|
|
31
|
+
cloud: {
|
|
32
|
+
url = 'https://cloud.learncard.com/trpc',
|
|
33
|
+
unencryptedFields = [],
|
|
34
|
+
unencryptedCustomFields = [],
|
|
35
|
+
automaticallyAssociateDids = true,
|
|
36
|
+
} = {},
|
|
37
|
+
didkit,
|
|
38
|
+
allowRemoteContexts = false,
|
|
39
|
+
ethereumConfig = defaultEthereumArgs,
|
|
40
|
+
openid4vc,
|
|
41
|
+
debug,
|
|
42
|
+
}: DidWebLearnCardFromSeed['args']): Promise<DidWebLearnCardFromSeed['returnValue']> => {
|
|
43
|
+
const dynamicLc = await (await generateLearnCard({ debug })).addPlugin(DynamicLoaderPlugin);
|
|
44
|
+
|
|
45
|
+
const cryptoLc = await dynamicLc.addPlugin(CryptoPlugin);
|
|
46
|
+
|
|
47
|
+
const getDidkit = async (): Promise<typeof getDidKitPlugin> => {
|
|
48
|
+
if (didkit === 'node') {
|
|
49
|
+
const mod = await import('@learncard/didkit-plugin-node');
|
|
50
|
+
return mod.getDidKitPlugin as typeof getDidKitPlugin;
|
|
51
|
+
}
|
|
52
|
+
return getDidKitPlugin;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const didkitLc = await cryptoLc.addPlugin(
|
|
56
|
+
await (
|
|
57
|
+
await getDidkit()
|
|
58
|
+
)(didkit === 'node' ? undefined : didkit, allowRemoteContexts)
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
const didkeyLc = await didkitLc.addPlugin(
|
|
62
|
+
await getDidKeyPlugin<DidMethod>(didkitLc, seed, 'key')
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
const encryptionLc = await didkeyLc.addPlugin(await getEncryptionPlugin(didkeyLc));
|
|
66
|
+
|
|
67
|
+
const vcLc = await encryptionLc.addPlugin(getVCPlugin(encryptionLc));
|
|
68
|
+
|
|
69
|
+
const templateLc = await vcLc.addPlugin(getVCTemplatesPlugin());
|
|
70
|
+
|
|
71
|
+
const cloudLc = await templateLc.addPlugin(
|
|
72
|
+
await getLearnCloudPlugin(
|
|
73
|
+
templateLc,
|
|
74
|
+
url,
|
|
75
|
+
unencryptedFields,
|
|
76
|
+
unencryptedCustomFields,
|
|
77
|
+
automaticallyAssociateDids
|
|
78
|
+
)
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
const expirationLc = await cloudLc.addPlugin(expirationPlugin(cloudLc));
|
|
82
|
+
|
|
83
|
+
const ethLc = await expirationLc.addPlugin(getEthereumPlugin(expirationLc, ethereumConfig));
|
|
84
|
+
|
|
85
|
+
const vpqrLc = await ethLc.addPlugin(getVpqrPlugin(ethLc));
|
|
86
|
+
|
|
87
|
+
const chapiLc = await vpqrLc.addPlugin(await getCHAPIPlugin());
|
|
88
|
+
|
|
89
|
+
const sdJwtVcLc = await chapiLc.addPlugin(getSdJwtVcPlugin(chapiLc));
|
|
90
|
+
|
|
91
|
+
const lcLc = await sdJwtVcLc.addPlugin(getLearnCardPlugin(sdJwtVcLc));
|
|
92
|
+
|
|
93
|
+
const didWebLc = await lcLc.addPlugin(await getDidWebPlugin(lcLc, didWeb));
|
|
94
|
+
|
|
95
|
+
return didWebLc.addPlugin(getOpenID4VCPlugin(didWebLc, openid4vc));
|
|
96
|
+
};
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { generateLearnCard } from '@learncard/core';
|
|
2
|
+
import { DynamicLoaderPlugin } from '@learncard/dynamic-loader-plugin';
|
|
3
|
+
import { CryptoPlugin } from '@learncard/crypto-plugin';
|
|
4
|
+
import { DidMethod, getDidKitPlugin } from '@learncard/didkit-plugin';
|
|
5
|
+
import { getDidKeyPlugin } from '@learncard/didkey-plugin';
|
|
6
|
+
import { getEncryptionPlugin } from '@learncard/encryption-plugin';
|
|
7
|
+
import { getVCPlugin } from '@learncard/vc-plugin';
|
|
8
|
+
import { getVCTemplatesPlugin } from '@learncard/vc-templates-plugin';
|
|
9
|
+
import { getLearnCloudPlugin } from '@learncard/learn-cloud-plugin';
|
|
10
|
+
import { expirationPlugin } from '@learncard/expiration-plugin';
|
|
11
|
+
import { getEthereumPlugin } from '@learncard/ethereum-plugin';
|
|
12
|
+
|
|
13
|
+
import { getVpqrPlugin } from '@learncard/vpqr-plugin';
|
|
14
|
+
import { getCHAPIPlugin } from '@learncard/chapi-plugin';
|
|
15
|
+
import { getVerifyBoostPlugin, getLearnCardNetworkPlugin } from '@learncard/network-plugin';
|
|
16
|
+
import { getLearnCardPlugin } from '@learncard/learn-card-plugin';
|
|
17
|
+
import { getDidWebPlugin } from '@learncard/did-web-plugin';
|
|
18
|
+
import { getOpenID4VCPlugin } from '@learncard/openid4vc-plugin';
|
|
19
|
+
import { getSdJwtVcPlugin } from '@learncard/sd-jwt-vc-plugin';
|
|
20
|
+
|
|
21
|
+
import { DidWebNetworkLearnCardFromSeed } from '../types/LearnCard';
|
|
22
|
+
import { defaultEthereumArgs } from '../defaults';
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Generates a Network LearnCard Wallet with a custom did:web did from a 64 character seed string
|
|
26
|
+
*
|
|
27
|
+
* @group Init Functions
|
|
28
|
+
*/
|
|
29
|
+
export const didWebNetworkLearnCardFromSeed = async ({
|
|
30
|
+
seed,
|
|
31
|
+
didWeb,
|
|
32
|
+
network: _network,
|
|
33
|
+
trustedBoostRegistry = 'https://raw.githubusercontent.com/learningeconomy/registries/main/learncard/trusted-app-registry.json',
|
|
34
|
+
guardianApprovalGetter,
|
|
35
|
+
extraHeaders,
|
|
36
|
+
|
|
37
|
+
cloud: {
|
|
38
|
+
url = 'https://cloud.learncard.com/trpc',
|
|
39
|
+
unencryptedFields = [],
|
|
40
|
+
unencryptedCustomFields = [],
|
|
41
|
+
automaticallyAssociateDids = true,
|
|
42
|
+
} = {},
|
|
43
|
+
didkit,
|
|
44
|
+
allowRemoteContexts = false,
|
|
45
|
+
ethereumConfig = defaultEthereumArgs,
|
|
46
|
+
openid4vc,
|
|
47
|
+
debug,
|
|
48
|
+
}: DidWebNetworkLearnCardFromSeed['args']): Promise<
|
|
49
|
+
DidWebNetworkLearnCardFromSeed['returnValue']
|
|
50
|
+
> => {
|
|
51
|
+
const network = typeof _network === 'boolean' ? 'https://network.learncard.com/trpc' : _network;
|
|
52
|
+
|
|
53
|
+
const dynamicLc = await (await generateLearnCard({ debug })).addPlugin(DynamicLoaderPlugin);
|
|
54
|
+
|
|
55
|
+
const cryptoLc = await dynamicLc.addPlugin(CryptoPlugin);
|
|
56
|
+
|
|
57
|
+
const getDidkit = async (): Promise<typeof getDidKitPlugin> => {
|
|
58
|
+
if (didkit === 'node') {
|
|
59
|
+
const mod = await import('@learncard/didkit-plugin-node');
|
|
60
|
+
return mod.getDidKitPlugin as typeof getDidKitPlugin;
|
|
61
|
+
}
|
|
62
|
+
return getDidKitPlugin;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const didkitLc = await cryptoLc.addPlugin(
|
|
66
|
+
await (
|
|
67
|
+
await getDidkit()
|
|
68
|
+
)(didkit === 'node' ? undefined : didkit, allowRemoteContexts)
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
const didkeyLc = await didkitLc.addPlugin(
|
|
72
|
+
await getDidKeyPlugin<DidMethod>(didkitLc, seed, 'key')
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
const encryptionLc = await didkeyLc.addPlugin(await getEncryptionPlugin(didkeyLc));
|
|
76
|
+
|
|
77
|
+
const vcLc = await encryptionLc.addPlugin(getVCPlugin(encryptionLc));
|
|
78
|
+
|
|
79
|
+
const templateLc = await vcLc.addPlugin(getVCTemplatesPlugin());
|
|
80
|
+
|
|
81
|
+
const cloudLc = await templateLc.addPlugin(
|
|
82
|
+
await getLearnCloudPlugin(
|
|
83
|
+
templateLc,
|
|
84
|
+
url,
|
|
85
|
+
unencryptedFields,
|
|
86
|
+
unencryptedCustomFields,
|
|
87
|
+
automaticallyAssociateDids
|
|
88
|
+
)
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
const expirationLc = await cloudLc.addPlugin(expirationPlugin(cloudLc));
|
|
92
|
+
|
|
93
|
+
const ethLc = await expirationLc.addPlugin(getEthereumPlugin(expirationLc, ethereumConfig));
|
|
94
|
+
|
|
95
|
+
const vpqrLc = await ethLc.addPlugin(getVpqrPlugin(ethLc));
|
|
96
|
+
|
|
97
|
+
const chapiLc = await vpqrLc.addPlugin(await getCHAPIPlugin());
|
|
98
|
+
|
|
99
|
+
const boostVerificationLc = await chapiLc.addPlugin(
|
|
100
|
+
await getVerifyBoostPlugin(chapiLc, trustedBoostRegistry)
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
const sdJwtVcLc = await boostVerificationLc.addPlugin(getSdJwtVcPlugin(boostVerificationLc));
|
|
104
|
+
|
|
105
|
+
const lcLc = await sdJwtVcLc.addPlugin(getLearnCardPlugin(sdJwtVcLc));
|
|
106
|
+
|
|
107
|
+
const didWebLc = await lcLc.addPlugin(await getDidWebPlugin(lcLc, didWeb));
|
|
108
|
+
|
|
109
|
+
const networkLc = await didWebLc.addPlugin(
|
|
110
|
+
await getLearnCardNetworkPlugin(didWebLc, network, { guardianApprovalGetter, extraHeaders })
|
|
111
|
+
);
|
|
112
|
+
|
|
113
|
+
return networkLc.addPlugin(getOpenID4VCPlugin(networkLc, openid4vc));
|
|
114
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { generateLearnCard } from '@learncard/core';
|
|
2
|
+
import { DynamicLoaderPlugin } from '@learncard/dynamic-loader-plugin';
|
|
3
|
+
import { CryptoPlugin } from '@learncard/crypto-plugin';
|
|
4
|
+
import { getDidKitPlugin } from '@learncard/didkit-plugin';
|
|
5
|
+
import { expirationPlugin } from '@learncard/expiration-plugin';
|
|
6
|
+
import { getVCTemplatesPlugin } from '@learncard/vc-templates-plugin';
|
|
7
|
+
import { getCHAPIPlugin } from '@learncard/chapi-plugin';
|
|
8
|
+
import { getLearnCardPlugin } from '@learncard/learn-card-plugin';
|
|
9
|
+
|
|
10
|
+
import { EmptyLearnCard } from '../types/LearnCard';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Generates an empty wallet with no key material
|
|
14
|
+
*
|
|
15
|
+
* @group Init Functions
|
|
16
|
+
*/
|
|
17
|
+
export const emptyLearnCard = async ({
|
|
18
|
+
didkit,
|
|
19
|
+
allowRemoteContexts = false,
|
|
20
|
+
debug,
|
|
21
|
+
}: EmptyLearnCard['args'] = {}): Promise<EmptyLearnCard['returnValue']> => {
|
|
22
|
+
const dynamicLc = await (await generateLearnCard({ debug })).addPlugin(DynamicLoaderPlugin);
|
|
23
|
+
|
|
24
|
+
const cryptoLc = await dynamicLc.addPlugin(CryptoPlugin);
|
|
25
|
+
|
|
26
|
+
const getDidkit = async (): Promise<typeof getDidKitPlugin> => {
|
|
27
|
+
if (didkit === 'node') {
|
|
28
|
+
const mod = await import('@learncard/didkit-plugin-node');
|
|
29
|
+
return mod.getDidKitPlugin as typeof getDidKitPlugin;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return getDidKitPlugin;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const didkitLc = await cryptoLc.addPlugin(
|
|
36
|
+
await (await getDidkit())(didkit === 'node' ? undefined : didkit, allowRemoteContexts)
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
const expirationLc = await didkitLc.addPlugin(expirationPlugin(didkitLc));
|
|
40
|
+
|
|
41
|
+
const templatesLc = await expirationLc.addPlugin(getVCTemplatesPlugin());
|
|
42
|
+
|
|
43
|
+
const chapiLc = await templatesLc.addPlugin(await getCHAPIPlugin());
|
|
44
|
+
|
|
45
|
+
return chapiLc.addPlugin(getLearnCardPlugin(chapiLc));
|
|
46
|
+
};
|