@learncard/vc-plugin 1.5.4 → 1.5.6
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/vc-plugin.cjs.development.cjs +5 -5
- package/dist/vc-plugin.cjs.development.cjs.map +1 -1
- package/dist/vc-plugin.cjs.production.min.cjs.map +1 -1
- package/dist/vc-plugin.esm.js +5 -5
- package/dist/vc-plugin.esm.js.map +1 -1
- package/package.json +59 -57
- package/src/helpers.ts +46 -0
- package/src/index.ts +2 -0
- package/src/issueCredential.test.ts +137 -0
- package/src/issueCredential.ts +59 -0
- package/src/issuePresentation.ts +47 -0
- package/src/types.ts +73 -0
- package/src/vc.ts +64 -0
- package/src/verifyCredential.ts +22 -0
- package/src/verifyPresentation.ts +14 -0
package/README.md
CHANGED
|
@@ -9,25 +9,26 @@
|
|
|
9
9
|
The LearnCard Core is a pluggable, open-source, universal digital wallet to enable any individual or organization to seamlessly **issue, earn, store, share, and spend currency and credentials** built for the future of education and work.
|
|
10
10
|
|
|
11
11
|
## Documentation
|
|
12
|
+
|
|
12
13
|
All LearnCard documentation can be found at:
|
|
13
14
|
https://docs.learncard.com
|
|
14
15
|
|
|
15
16
|
## Install
|
|
16
17
|
|
|
17
18
|
```bash
|
|
18
|
-
|
|
19
|
+
bun add @learncard/core
|
|
19
20
|
```
|
|
20
21
|
|
|
21
22
|
## Usage
|
|
22
23
|
|
|
23
24
|
### Instantiation
|
|
24
25
|
|
|
25
|
-
Instantiate a wallet using `initLearnCard`. This method accepts a unique identifier string that is
|
|
26
|
+
Instantiate a wallet using `initLearnCard`. This method accepts a unique identifier string that is
|
|
26
27
|
up to 64 characters long. If it is less than 64 characters, `initLearnCard` will pad the start of
|
|
27
28
|
the string with 0's until it is 64 characters long.
|
|
28
29
|
|
|
29
30
|
```js
|
|
30
|
-
import { initLearnCard } from
|
|
31
|
+
import { initLearnCard } from '@learncard/core';
|
|
31
32
|
|
|
32
33
|
const wallet = await initLearnCard({ seed: 'a'.repeat(64) });
|
|
33
34
|
```
|
|
@@ -35,6 +36,7 @@ const wallet = await initLearnCard({ seed: 'a'.repeat(64) });
|
|
|
35
36
|
### Issuing/Verifying Credentials and Presentations
|
|
36
37
|
|
|
37
38
|
#### Issue a credential
|
|
39
|
+
|
|
38
40
|
```js
|
|
39
41
|
// Grab a test VC, or create your own!
|
|
40
42
|
const unsignedVc = await wallet.invoke.getTestVc();
|
|
@@ -43,6 +45,7 @@ const vc = await wallet.invoke.issueCredential(unsignedVc);
|
|
|
43
45
|
```
|
|
44
46
|
|
|
45
47
|
#### Verify a credential
|
|
48
|
+
|
|
46
49
|
```js
|
|
47
50
|
const result = await wallet.invoke.verifyCredential(vc, {}, true);
|
|
48
51
|
|
|
@@ -53,11 +56,13 @@ else console.log('This credential is valid!');
|
|
|
53
56
|
```
|
|
54
57
|
|
|
55
58
|
#### Issue a presentation
|
|
59
|
+
|
|
56
60
|
```js
|
|
57
61
|
const vp = await wallet.invoke.issuePresentation(vc);
|
|
58
62
|
```
|
|
59
63
|
|
|
60
64
|
#### Verify a presentation
|
|
65
|
+
|
|
61
66
|
```js
|
|
62
67
|
const result = await wallet.invoke.verifyPresentation(vp);
|
|
63
68
|
|
|
@@ -74,14 +79,14 @@ else console.log('This presentation is valid!');
|
|
|
74
79
|
To maintain co-ownership of credentials, it is best to store credentials in a public place, and then
|
|
75
80
|
store references to that public place. While this is not the only way to store credentials (and is
|
|
76
81
|
also definitely not a silver bullet! E.g. credentials containing private data), it is the opinion of
|
|
77
|
-
this library that it should be used by default. As a result, instantiating a wallet, will
|
|
78
|
-
automatically connect you to WeLibrary's ceramic node, and allow you to publish and retrieve
|
|
82
|
+
this library that it should be used by default. As a result, instantiating a wallet, will
|
|
83
|
+
automatically connect you to WeLibrary's ceramic node, and allow you to publish and retrieve
|
|
79
84
|
credentials there using IDX.
|
|
80
85
|
|
|
81
86
|
#### Publish Credential
|
|
82
87
|
|
|
83
88
|
After signing a VC, you may choose to publish that credential to Ceramic. Doing so will return a
|
|
84
|
-
stream ID, which you may share to the recipient. That stream ID can then be used to resolve the
|
|
89
|
+
stream ID, which you may share to the recipient. That stream ID can then be used to resolve the
|
|
85
90
|
issued credential. This means both the issuer and recipient may store the _stream ID_ instead of the
|
|
86
91
|
credential itself.
|
|
87
92
|
|
|
@@ -126,6 +131,7 @@ const vcs = await Promise.all(uris.map(async uri => wallet.read.get(uri)));
|
|
|
126
131
|
```
|
|
127
132
|
|
|
128
133
|
## Contributing
|
|
134
|
+
|
|
129
135
|
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
|
|
130
136
|
|
|
131
137
|
Please make sure to update tests as appropriate.
|
|
@@ -134,7 +140,6 @@ Please make sure to update tests as appropriate.
|
|
|
134
140
|
|
|
135
141
|
**[Learning Economy Foundation (LEF)](https://www.learningeconomy.io)** is a 501(c)(3) non-profit organization leveraging global standards and web3 protocols to bring quality skills and equal opportunity to every human on earth, and address the persistent inequities that exist around the globe in education and employment. We help you build the future of education and work with:
|
|
136
142
|
|
|
137
|
-
|
|
138
143
|
## License
|
|
139
144
|
|
|
140
145
|
MIT © [Learning Economy Foundation](https://github.com/Learning-Economy-Foundation)
|
|
@@ -25,7 +25,7 @@ __export(index_exports, {
|
|
|
25
25
|
});
|
|
26
26
|
module.exports = __toCommonJS(index_exports);
|
|
27
27
|
|
|
28
|
-
// ../../../node_modules
|
|
28
|
+
// ../../../node_modules/multiformats/vendor/base-x.js
|
|
29
29
|
function base(ALPHABET, name) {
|
|
30
30
|
if (ALPHABET.length >= 255) {
|
|
31
31
|
throw new TypeError("Alphabet too long");
|
|
@@ -164,7 +164,7 @@ var src = base;
|
|
|
164
164
|
var _brrp__multiformats_scope_baseX = src;
|
|
165
165
|
var base_x_default = _brrp__multiformats_scope_baseX;
|
|
166
166
|
|
|
167
|
-
// ../../../node_modules
|
|
167
|
+
// ../../../node_modules/multiformats/src/bytes.js
|
|
168
168
|
var empty = new Uint8Array(0);
|
|
169
169
|
var coerce = /* @__PURE__ */ __name((o) => {
|
|
170
170
|
if (o instanceof Uint8Array && o.constructor.name === "Uint8Array") return o;
|
|
@@ -175,7 +175,7 @@ var coerce = /* @__PURE__ */ __name((o) => {
|
|
|
175
175
|
throw new Error("Unknown type, must be binary type");
|
|
176
176
|
}, "coerce");
|
|
177
177
|
|
|
178
|
-
// ../../../node_modules
|
|
178
|
+
// ../../../node_modules/multiformats/src/bases/base.js
|
|
179
179
|
var _Encoder = class _Encoder {
|
|
180
180
|
/**
|
|
181
181
|
* @param {Base} name
|
|
@@ -398,7 +398,7 @@ var rfc4648 = /* @__PURE__ */ __name(({ name, prefix, bitsPerChar, alphabet }) =
|
|
|
398
398
|
});
|
|
399
399
|
}, "rfc4648");
|
|
400
400
|
|
|
401
|
-
// ../../../node_modules
|
|
401
|
+
// ../../../node_modules/multiformats/src/bases/base58.js
|
|
402
402
|
var base58btc = baseX({
|
|
403
403
|
name: "base58btc",
|
|
404
404
|
prefix: "z",
|
|
@@ -410,7 +410,7 @@ var base58flickr = baseX({
|
|
|
410
410
|
alphabet: "123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"
|
|
411
411
|
});
|
|
412
412
|
|
|
413
|
-
// ../../../node_modules
|
|
413
|
+
// ../../../node_modules/multiformats/src/bases/base64.js
|
|
414
414
|
var base64 = rfc4648({
|
|
415
415
|
prefix: "m",
|
|
416
416
|
name: "base64",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/index.ts", "../../../../node_modules
|
|
3
|
+
"sources": ["../src/index.ts", "../../../../node_modules/multiformats/vendor/base-x.js", "../../../../node_modules/multiformats/src/bytes.js", "../../../../node_modules/multiformats/src/bases/base.js", "../../../../node_modules/multiformats/src/bases/base58.js", "../../../../node_modules/multiformats/src/bases/base64.js", "../src/helpers.ts", "../src/issueCredential.ts", "../src/verifyCredential.ts", "../src/issuePresentation.ts", "../src/verifyPresentation.ts", "../src/vc.ts"],
|
|
4
4
|
"sourcesContent": ["export { getVCPlugin } from './vc';\nexport * from './types';\n", "// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET, name) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n function encode (source) {\n if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n var b58 = new Uint8Array(size);\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin];\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0;\n b58[it1] = (carry % BASE) >>> 0;\n carry = (carry / BASE) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n pbegin++;\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0;\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size);\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)];\n // Invalid character\n if (carry === 255) { return }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0;\n b256[it3] = (carry % 256) >>> 0;\n carry = (carry / 256) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n psz++;\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string);\n if (buffer) { return buffer }\n throw new Error(`Non-${name} character`)\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n", "const empty = new Uint8Array(0)\n\n/**\n * @param {Uint8Array} d\n */\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n\n/**\n * @param {string} hex\n */\nconst fromHex = hex => {\n const hexes = hex.match(/../g)\n return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\n/**\n * @param {Uint8Array} aa\n * @param {Uint8Array} bb\n */\nconst equals = (aa, bb) => {\n if (aa === bb) return true\n if (aa.byteLength !== bb.byteLength) {\n return false\n }\n\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * @param {ArrayBufferView|ArrayBuffer|Uint8Array} o\n * @returns {Uint8Array}\n */\nconst coerce = o => {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o\n if (o instanceof ArrayBuffer) return new Uint8Array(o)\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n }\n throw new Error('Unknown type, must be binary type')\n}\n\n/**\n * @param {any} o\n * @returns {o is ArrayBuffer|ArrayBufferView}\n */\nconst isBinary = o =>\n o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n\n/**\n * @param {string} str\n * @returns {Uint8Array}\n */\nconst fromString = str => (new TextEncoder()).encode(str)\n\n/**\n * @param {Uint8Array} b\n * @returns {string}\n */\nconst toString = b => (new TextDecoder()).decode(b)\n\nexport { equals, coerce, isBinary, fromHex, toHex, fromString, toString, empty }\n", "import basex from '../../vendor/base-x.js'\nimport { coerce } from '../bytes.js'\n// Linter can't see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.BaseEncoder}\n */\nclass Encoder {\n /**\n * @param {Base} name\n * @param {Prefix} prefix\n * @param {(bytes:Uint8Array) => string} baseEncode\n */\n constructor (name, prefix, baseEncode) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n }\n\n /**\n * @param {Uint8Array} bytes\n * @returns {API.Multibase<Prefix>}\n */\n encode (bytes) {\n if (bytes instanceof Uint8Array) {\n return `${this.prefix}${this.baseEncode(bytes)}`\n } else {\n throw Error('Unknown type, must be binary type')\n }\n }\n}\n\n/**\n * @template {string} Prefix\n */\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.UnibaseDecoder<Prefix>}\n * @implements {API.BaseDecoder}\n */\nclass Decoder {\n /**\n * @param {Base} name\n * @param {Prefix} prefix\n * @param {(text:string) => Uint8Array} baseDecode\n */\n constructor (name, prefix, baseDecode) {\n this.name = name\n this.prefix = prefix\n /* c8 ignore next 3 */\n if (prefix.codePointAt(0) === undefined) {\n throw new Error('Invalid prefix character')\n }\n /** @private */\n this.prefixCodePoint = /** @type {number} */ (prefix.codePointAt(0))\n this.baseDecode = baseDecode\n }\n\n /**\n * @param {string} text\n */\n decode (text) {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n }\n return this.baseDecode(text.slice(this.prefix.length))\n } else {\n throw Error('Can only multibase decode strings')\n }\n }\n\n /**\n * @template {string} OtherPrefix\n * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n */\n or (decoder) {\n return or(this, decoder)\n }\n}\n\n/**\n * @template {string} Prefix\n * @typedef {Record<Prefix, API.UnibaseDecoder<Prefix>>} Decoders\n */\n\n/**\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.CombobaseDecoder<Prefix>}\n */\nclass ComposedDecoder {\n /**\n * @param {Decoders<Prefix>} decoders\n */\n constructor (decoders) {\n this.decoders = decoders\n }\n\n /**\n * @template {string} OtherPrefix\n * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n */\n or (decoder) {\n return or(this, decoder)\n }\n\n /**\n * @param {string} input\n * @returns {Uint8Array}\n */\n decode (input) {\n const prefix = /** @type {Prefix} */ (input[0])\n const decoder = this.decoders[prefix]\n if (decoder) {\n return decoder.decode(input)\n } else {\n throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n }\n }\n}\n\n/**\n * @template {string} L\n * @template {string} R\n * @param {API.UnibaseDecoder<L>|API.CombobaseDecoder<L>} left\n * @param {API.UnibaseDecoder<R>|API.CombobaseDecoder<R>} right\n * @returns {ComposedDecoder<L|R>}\n */\nexport const or = (left, right) => new ComposedDecoder(/** @type {Decoders<L|R>} */({\n ...(left.decoders || { [/** @type API.UnibaseDecoder<L> */(left).prefix]: left }),\n ...(right.decoders || { [/** @type API.UnibaseDecoder<R> */(right).prefix]: right })\n}))\n\n/**\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseCodec<Prefix>}\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.BaseCodec}\n * @implements {API.BaseEncoder}\n * @implements {API.BaseDecoder}\n */\nexport class Codec {\n /**\n * @param {Base} name\n * @param {Prefix} prefix\n * @param {(bytes:Uint8Array) => string} baseEncode\n * @param {(text:string) => Uint8Array} baseDecode\n */\n constructor (name, prefix, baseEncode, baseDecode) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n this.baseDecode = baseDecode\n this.encoder = new Encoder(name, prefix, baseEncode)\n this.decoder = new Decoder(name, prefix, baseDecode)\n }\n\n /**\n * @param {Uint8Array} input\n */\n encode (input) {\n return this.encoder.encode(input)\n }\n\n /**\n * @param {string} input\n */\n decode (input) {\n return this.decoder.decode(input)\n }\n}\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {(bytes:Uint8Array) => string} options.encode\n * @param {(input:string) => Uint8Array} options.decode\n * @returns {Codec<Base, Prefix>}\n */\nexport const from = ({ name, prefix, encode, decode }) =>\n new Codec(name, prefix, encode, decode)\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @returns {Codec<Base, Prefix>}\n */\nexport const baseX = ({ prefix, name, alphabet }) => {\n const { encode, decode } = basex(alphabet, name)\n return from({\n prefix,\n name,\n encode,\n /**\n * @param {string} text\n */\n decode: text => coerce(decode(text))\n })\n}\n\n/**\n * @param {string} string\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @param {string} name\n * @returns {Uint8Array}\n */\nconst decode = (string, alphabet, bitsPerChar, name) => {\n // Build the character lookup table:\n /** @type {Record<string, number>} */\n const codes = {}\n for (let i = 0; i < alphabet.length; ++i) {\n codes[alphabet[i]] = i\n }\n\n // Count the padding bytes:\n let end = string.length\n while (string[end - 1] === '=') {\n --end\n }\n\n // Allocate the output:\n const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n // Parse the data:\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n let written = 0 // Next byte to write\n for (let i = 0; i < end; ++i) {\n // Read one character from the string:\n const value = codes[string[i]]\n if (value === undefined) {\n throw new SyntaxError(`Non-${name} character`)\n }\n\n // Append the bits to the buffer:\n buffer = (buffer << bitsPerChar) | value\n bits += bitsPerChar\n\n // Write out some bits if the buffer has a byte's worth:\n if (bits >= 8) {\n bits -= 8\n out[written++] = 0xff & (buffer >> bits)\n }\n }\n\n // Verify that we have received just enough bits:\n if (bits >= bitsPerChar || 0xff & (buffer << (8 - bits))) {\n throw new SyntaxError('Unexpected end of data')\n }\n\n return out\n}\n\n/**\n * @param {Uint8Array} data\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {string}\n */\nconst encode = (data, alphabet, bitsPerChar) => {\n const pad = alphabet[alphabet.length - 1] === '='\n const mask = (1 << bitsPerChar) - 1\n let out = ''\n\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n for (let i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = (buffer << 8) | data[i]\n bits += 8\n\n // Write out as much as we can:\n while (bits > bitsPerChar) {\n bits -= bitsPerChar\n out += alphabet[mask & (buffer >> bits)]\n }\n }\n\n // Partial character:\n if (bits) {\n out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n }\n\n // Add padding characters until we hit a byte boundary:\n if (pad) {\n while ((out.length * bitsPerChar) & 7) {\n out += '='\n }\n }\n\n return out\n}\n\n/**\n * RFC4648 Factory\n *\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @param {number} options.bitsPerChar\n */\nexport const rfc4648 = ({ name, prefix, bitsPerChar, alphabet }) => {\n return from({\n prefix,\n name,\n encode (input) {\n return encode(input, alphabet, bitsPerChar)\n },\n decode (input) {\n return decode(input, alphabet, bitsPerChar, name)\n }\n })\n}\n", "import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n", "// @ts-check\n\nimport { rfc4648 } from './base.js'\n\nexport const base64 = rfc4648({\n prefix: 'm',\n name: 'base64',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n bitsPerChar: 6\n})\n\nexport const base64pad = rfc4648({\n prefix: 'M',\n name: 'base64pad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n bitsPerChar: 6\n})\n\nexport const base64url = rfc4648({\n prefix: 'u',\n name: 'base64url',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n bitsPerChar: 6\n})\n\nexport const base64urlpad = rfc4648({\n prefix: 'U',\n name: 'base64urlpad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n bitsPerChar: 6\n})\n", "import { VCImplicitLearnCard } from './types';\nimport { base58btc } from 'multiformats/bases/base58';\nimport { base64url } from 'multiformats/bases/base64';\n\n/**\n * Determines the default verification method to use for a given did by resolving it and looking\n * for a keypair that matches the default keypair for the LearnCard\n */\nexport const getDefaultVerificationMethod = async (\n learnCard: VCImplicitLearnCard,\n issuerDid: string\n) => {\n const kp = learnCard.id.keypair();\n\n if (!kp) {\n throw new Error('Cannot get default verification method: unable to get subject keypair');\n }\n\n const issuerDidDoc = await learnCard.invoke.resolveDid(issuerDid);\n\n const toX = (vm: any): string | undefined => {\n if (!vm || typeof vm === 'string') return undefined;\n if (vm.publicKeyJwk?.x) return vm.publicKeyJwk.x;\n if (vm.publicKeyMultibase) {\n const decoded = base58btc.decode(vm.publicKeyMultibase);\n const ed = decoded[0] === 0xed && decoded[1] === 0x01 ? decoded.slice(2) : decoded;\n return base64url.encode(ed).slice(1);\n }\n if (vm.publicKeyBase58) {\n const ed = base58btc.baseDecode(vm.publicKeyBase58);\n return base64url.encode(ed).slice(1);\n }\n return undefined;\n };\n\n const verificationMethodEntry =\n typeof issuerDidDoc === 'string'\n ? undefined\n : issuerDidDoc?.verificationMethod?.find(entry => toX(entry as any) === kp.x);\n\n const verificationMethod =\n (typeof verificationMethodEntry !== 'string' && verificationMethodEntry?.id) ||\n (await learnCard.invoke.didToVerificationMethod(issuerDid));\n\n return verificationMethod;\n};\n", "import { UnsignedVC } from '@learncard/types';\n\nimport { ProofOptions } from '@learncard/didkit-plugin';\nimport { VCDependentLearnCard, VCImplicitLearnCard } from './types';\nimport { getDefaultVerificationMethod } from './helpers';\n\nexport const issueCredential = (initLearnCard: VCDependentLearnCard) => {\n return async (\n learnCard: VCImplicitLearnCard,\n credential: UnsignedVC,\n signingOptions: Partial<ProofOptions> = {}\n ) => {\n const kp = learnCard.id.keypair();\n\n if (!kp) throw new Error('Cannot issue credential: Could not get subject keypair');\n\n const contexts = Array.isArray(credential['@context'])\n ? credential['@context']\n : [credential['@context']];\n\n const hasV2Context = contexts.some(\n ctx =>\n typeof ctx === 'string' &&\n (ctx.includes('/ns/credentials/v2') || ctx.includes('/credentials/v2'))\n );\n\n // Ed25519Signature2018 is incompatible with credentials v2.\n const proofType =\n hasV2Context && signingOptions.type === 'Ed25519Signature2018'\n ? 'Ed25519Signature2020'\n : signingOptions.type ??\n (signingOptions.proofFormat === 'jwt' ? undefined : 'DataIntegrityProof');\n\n const options: ProofOptions = {\n proofPurpose: 'assertionMethod',\n ...signingOptions,\n ...(proofType ? { type: proofType } : {}),\n };\n\n if (options.type === 'DataIntegrityProof' && !options.cryptosuite) {\n options.cryptosuite = 'eddsa-rdfc-2022';\n }\n\n if (!('verificationMethod' in options)) {\n const issuerDid =\n typeof credential.issuer === 'string' ? credential.issuer : credential.issuer.id!;\n\n options.verificationMethod = await getDefaultVerificationMethod(learnCard, issuerDid);\n }\n\n learnCard.debug?.('Signing with these options', {\n credential,\n options,\n kp,\n });\n\n return initLearnCard.invoke.issueCredential(credential, options, kp);\n };\n};\n", "import { VC } from '@learncard/types';\n\nimport { ProofOptions } from '@learncard/didkit-plugin';\nimport { VCDependentLearnCard, VCImplicitLearnCard } from './types';\n\nexport const verifyCredential = (initLearnCard: VCDependentLearnCard) => {\n return async (\n _learnCard: VCImplicitLearnCard,\n credential: VC,\n _options: Partial<ProofOptions> = {}\n ) => {\n const options: Partial<ProofOptions> = { ..._options };\n\n if (!options.checks) {\n options.checks = ['proof'];\n if (credential.credentialStatus) options.checks.push('credentialStatus');\n if (credential.credentialSchema) options.checks.push('credentialSchema');\n }\n\n return initLearnCard.invoke.verifyCredential(credential, options);\n };\n};\n", "import { UnsignedVP } from '@learncard/types';\n\nimport { ProofOptions } from '@learncard/didkit-plugin';\nimport { VCDependentLearnCard, VCImplicitLearnCard } from './types';\nimport { getDefaultVerificationMethod } from './helpers';\n\nexport const issuePresentation = (initLearnCard: VCDependentLearnCard) => {\n return async (\n learnCard: VCImplicitLearnCard,\n presentation: UnsignedVP,\n signingOptions: Partial<ProofOptions> = {}\n ) => {\n const kp = learnCard.id.keypair();\n\n if (!kp) throw new Error('Cannot issue credential: Could not get subject keypair');\n\n // Check if presentation uses v2 context\n const contexts = Array.isArray(presentation['@context']) \n ? presentation['@context'] \n : [presentation['@context']];\n const hasV2Context = contexts.some(ctx => \n typeof ctx === 'string' && (ctx.includes('/ns/credentials/v2') || ctx.includes('/credentials/v2'))\n );\n\n // For v2 contexts, upgrade Ed25519Signature2018 to Ed25519Signature2020\n // Ed25519Signature2018 is incompatible with credentials v2\n const proofType = hasV2Context && signingOptions.type === 'Ed25519Signature2018'\n ? 'Ed25519Signature2020'\n : signingOptions.type ?? 'Ed25519Signature2020';\n\n const options = {\n ...(signingOptions.proofFormat === 'jwt'\n ? {}\n : { proofPurpose: 'assertionMethod', type: proofType }),\n ...signingOptions,\n };\n\n if (!('verificationMethod' in options)) {\n options.verificationMethod = await getDefaultVerificationMethod(\n learnCard,\n learnCard.id.did()\n );\n }\n\n return initLearnCard.invoke.issuePresentation(presentation, options, kp);\n };\n};\n", "import { VP } from '@learncard/types';\n\nimport { ProofOptions } from '@learncard/didkit-plugin';\nimport { VCDependentLearnCard, VCImplicitLearnCard } from './types';\n\nexport const verifyPresentation = (initLearnCard: VCDependentLearnCard) => {\n return async (\n _learnCard: VCImplicitLearnCard,\n presentation: VP | string,\n options: Partial<ProofOptions> = {}\n ) => {\n return initLearnCard.invoke.verifyPresentation(presentation, options);\n };\n};\n", "import { issueCredential } from './issueCredential';\nimport { verifyCredential } from './verifyCredential';\nimport { issuePresentation } from './issuePresentation';\nimport { verifyPresentation } from './verifyPresentation';\n\nimport { VCDependentLearnCard, VCPlugin } from './types';\nimport { UnsignedVP } from '@learncard/types';\n\n/**\n * @group Plugins\n */\nexport const getVCPlugin = (learnCard: VCDependentLearnCard): VCPlugin => {\n return {\n name: 'VC',\n displayName: 'VC',\n description:\n 'Handles the infrastructure needed to issue and verify credentials and presentations',\n methods: {\n issueCredential: issueCredential(learnCard),\n verifyCredential: verifyCredential(learnCard),\n issuePresentation: issuePresentation(learnCard),\n verifyPresentation: verifyPresentation(learnCard),\n getTestVc: (_learnCard, subject = 'did:example:d23dd687a7dc6787646f2eb98d0') => {\n const did = _learnCard.id.did();\n\n return {\n '@context': ['https://www.w3.org/ns/credentials/v2'],\n id: `urn:uuid:${crypto.randomUUID()}`,\n type: ['VerifiableCredential'],\n issuer: did,\n validFrom: new Date().toISOString(),\n credentialSubject: { id: subject },\n };\n },\n getTestVp: async (_learnCard, _credential) => {\n const credential =\n _credential ||\n (await _learnCard.invoke.issueCredential(_learnCard.invoke.getTestVc()));\n\n const did = _learnCard.id.did();\n\n return {\n '@context': ['https://www.w3.org/ns/credentials/v2'],\n type: ['VerifiablePresentation'],\n holder: did,\n verifiableCredential: credential,\n };\n },\n getDidAuthVp: async (_learnCard, options = {}) => {\n const did = _learnCard.id.did();\n const unsignedVP: UnsignedVP = {\n '@context': ['https://www.w3.org/ns/credentials/v2'],\n type: ['VerifiablePresentation'],\n holder: did,\n };\n\n return _learnCard.invoke.issuePresentation(unsignedVP, {\n proofPurpose: 'authentication',\n ...options,\n });\n },\n },\n };\n};\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["encode", "i", "j", "decode", "encode", "decode"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/index.ts", "../../../../node_modules
|
|
3
|
+
"sources": ["../src/index.ts", "../../../../node_modules/multiformats/vendor/base-x.js", "../../../../node_modules/multiformats/src/bytes.js", "../../../../node_modules/multiformats/src/bases/base.js", "../../../../node_modules/multiformats/src/bases/base58.js", "../../../../node_modules/multiformats/src/bases/base64.js", "../src/helpers.ts", "../src/issueCredential.ts", "../src/verifyCredential.ts", "../src/issuePresentation.ts", "../src/verifyPresentation.ts", "../src/vc.ts"],
|
|
4
4
|
"sourcesContent": ["export { getVCPlugin } from './vc';\nexport * from './types';\n", "// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET, name) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n function encode (source) {\n if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n var b58 = new Uint8Array(size);\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin];\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0;\n b58[it1] = (carry % BASE) >>> 0;\n carry = (carry / BASE) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n pbegin++;\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0;\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size);\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)];\n // Invalid character\n if (carry === 255) { return }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0;\n b256[it3] = (carry % 256) >>> 0;\n carry = (carry / 256) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n psz++;\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string);\n if (buffer) { return buffer }\n throw new Error(`Non-${name} character`)\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n", "const empty = new Uint8Array(0)\n\n/**\n * @param {Uint8Array} d\n */\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n\n/**\n * @param {string} hex\n */\nconst fromHex = hex => {\n const hexes = hex.match(/../g)\n return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\n/**\n * @param {Uint8Array} aa\n * @param {Uint8Array} bb\n */\nconst equals = (aa, bb) => {\n if (aa === bb) return true\n if (aa.byteLength !== bb.byteLength) {\n return false\n }\n\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * @param {ArrayBufferView|ArrayBuffer|Uint8Array} o\n * @returns {Uint8Array}\n */\nconst coerce = o => {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o\n if (o instanceof ArrayBuffer) return new Uint8Array(o)\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n }\n throw new Error('Unknown type, must be binary type')\n}\n\n/**\n * @param {any} o\n * @returns {o is ArrayBuffer|ArrayBufferView}\n */\nconst isBinary = o =>\n o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n\n/**\n * @param {string} str\n * @returns {Uint8Array}\n */\nconst fromString = str => (new TextEncoder()).encode(str)\n\n/**\n * @param {Uint8Array} b\n * @returns {string}\n */\nconst toString = b => (new TextDecoder()).decode(b)\n\nexport { equals, coerce, isBinary, fromHex, toHex, fromString, toString, empty }\n", "import basex from '../../vendor/base-x.js'\nimport { coerce } from '../bytes.js'\n// Linter can't see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.BaseEncoder}\n */\nclass Encoder {\n /**\n * @param {Base} name\n * @param {Prefix} prefix\n * @param {(bytes:Uint8Array) => string} baseEncode\n */\n constructor (name, prefix, baseEncode) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n }\n\n /**\n * @param {Uint8Array} bytes\n * @returns {API.Multibase<Prefix>}\n */\n encode (bytes) {\n if (bytes instanceof Uint8Array) {\n return `${this.prefix}${this.baseEncode(bytes)}`\n } else {\n throw Error('Unknown type, must be binary type')\n }\n }\n}\n\n/**\n * @template {string} Prefix\n */\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.UnibaseDecoder<Prefix>}\n * @implements {API.BaseDecoder}\n */\nclass Decoder {\n /**\n * @param {Base} name\n * @param {Prefix} prefix\n * @param {(text:string) => Uint8Array} baseDecode\n */\n constructor (name, prefix, baseDecode) {\n this.name = name\n this.prefix = prefix\n /* c8 ignore next 3 */\n if (prefix.codePointAt(0) === undefined) {\n throw new Error('Invalid prefix character')\n }\n /** @private */\n this.prefixCodePoint = /** @type {number} */ (prefix.codePointAt(0))\n this.baseDecode = baseDecode\n }\n\n /**\n * @param {string} text\n */\n decode (text) {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n }\n return this.baseDecode(text.slice(this.prefix.length))\n } else {\n throw Error('Can only multibase decode strings')\n }\n }\n\n /**\n * @template {string} OtherPrefix\n * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n */\n or (decoder) {\n return or(this, decoder)\n }\n}\n\n/**\n * @template {string} Prefix\n * @typedef {Record<Prefix, API.UnibaseDecoder<Prefix>>} Decoders\n */\n\n/**\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.CombobaseDecoder<Prefix>}\n */\nclass ComposedDecoder {\n /**\n * @param {Decoders<Prefix>} decoders\n */\n constructor (decoders) {\n this.decoders = decoders\n }\n\n /**\n * @template {string} OtherPrefix\n * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n */\n or (decoder) {\n return or(this, decoder)\n }\n\n /**\n * @param {string} input\n * @returns {Uint8Array}\n */\n decode (input) {\n const prefix = /** @type {Prefix} */ (input[0])\n const decoder = this.decoders[prefix]\n if (decoder) {\n return decoder.decode(input)\n } else {\n throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n }\n }\n}\n\n/**\n * @template {string} L\n * @template {string} R\n * @param {API.UnibaseDecoder<L>|API.CombobaseDecoder<L>} left\n * @param {API.UnibaseDecoder<R>|API.CombobaseDecoder<R>} right\n * @returns {ComposedDecoder<L|R>}\n */\nexport const or = (left, right) => new ComposedDecoder(/** @type {Decoders<L|R>} */({\n ...(left.decoders || { [/** @type API.UnibaseDecoder<L> */(left).prefix]: left }),\n ...(right.decoders || { [/** @type API.UnibaseDecoder<R> */(right).prefix]: right })\n}))\n\n/**\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseCodec<Prefix>}\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.BaseCodec}\n * @implements {API.BaseEncoder}\n * @implements {API.BaseDecoder}\n */\nexport class Codec {\n /**\n * @param {Base} name\n * @param {Prefix} prefix\n * @param {(bytes:Uint8Array) => string} baseEncode\n * @param {(text:string) => Uint8Array} baseDecode\n */\n constructor (name, prefix, baseEncode, baseDecode) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n this.baseDecode = baseDecode\n this.encoder = new Encoder(name, prefix, baseEncode)\n this.decoder = new Decoder(name, prefix, baseDecode)\n }\n\n /**\n * @param {Uint8Array} input\n */\n encode (input) {\n return this.encoder.encode(input)\n }\n\n /**\n * @param {string} input\n */\n decode (input) {\n return this.decoder.decode(input)\n }\n}\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {(bytes:Uint8Array) => string} options.encode\n * @param {(input:string) => Uint8Array} options.decode\n * @returns {Codec<Base, Prefix>}\n */\nexport const from = ({ name, prefix, encode, decode }) =>\n new Codec(name, prefix, encode, decode)\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @returns {Codec<Base, Prefix>}\n */\nexport const baseX = ({ prefix, name, alphabet }) => {\n const { encode, decode } = basex(alphabet, name)\n return from({\n prefix,\n name,\n encode,\n /**\n * @param {string} text\n */\n decode: text => coerce(decode(text))\n })\n}\n\n/**\n * @param {string} string\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @param {string} name\n * @returns {Uint8Array}\n */\nconst decode = (string, alphabet, bitsPerChar, name) => {\n // Build the character lookup table:\n /** @type {Record<string, number>} */\n const codes = {}\n for (let i = 0; i < alphabet.length; ++i) {\n codes[alphabet[i]] = i\n }\n\n // Count the padding bytes:\n let end = string.length\n while (string[end - 1] === '=') {\n --end\n }\n\n // Allocate the output:\n const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n // Parse the data:\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n let written = 0 // Next byte to write\n for (let i = 0; i < end; ++i) {\n // Read one character from the string:\n const value = codes[string[i]]\n if (value === undefined) {\n throw new SyntaxError(`Non-${name} character`)\n }\n\n // Append the bits to the buffer:\n buffer = (buffer << bitsPerChar) | value\n bits += bitsPerChar\n\n // Write out some bits if the buffer has a byte's worth:\n if (bits >= 8) {\n bits -= 8\n out[written++] = 0xff & (buffer >> bits)\n }\n }\n\n // Verify that we have received just enough bits:\n if (bits >= bitsPerChar || 0xff & (buffer << (8 - bits))) {\n throw new SyntaxError('Unexpected end of data')\n }\n\n return out\n}\n\n/**\n * @param {Uint8Array} data\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {string}\n */\nconst encode = (data, alphabet, bitsPerChar) => {\n const pad = alphabet[alphabet.length - 1] === '='\n const mask = (1 << bitsPerChar) - 1\n let out = ''\n\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n for (let i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = (buffer << 8) | data[i]\n bits += 8\n\n // Write out as much as we can:\n while (bits > bitsPerChar) {\n bits -= bitsPerChar\n out += alphabet[mask & (buffer >> bits)]\n }\n }\n\n // Partial character:\n if (bits) {\n out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n }\n\n // Add padding characters until we hit a byte boundary:\n if (pad) {\n while ((out.length * bitsPerChar) & 7) {\n out += '='\n }\n }\n\n return out\n}\n\n/**\n * RFC4648 Factory\n *\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @param {number} options.bitsPerChar\n */\nexport const rfc4648 = ({ name, prefix, bitsPerChar, alphabet }) => {\n return from({\n prefix,\n name,\n encode (input) {\n return encode(input, alphabet, bitsPerChar)\n },\n decode (input) {\n return decode(input, alphabet, bitsPerChar, name)\n }\n })\n}\n", "import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n", "// @ts-check\n\nimport { rfc4648 } from './base.js'\n\nexport const base64 = rfc4648({\n prefix: 'm',\n name: 'base64',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n bitsPerChar: 6\n})\n\nexport const base64pad = rfc4648({\n prefix: 'M',\n name: 'base64pad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n bitsPerChar: 6\n})\n\nexport const base64url = rfc4648({\n prefix: 'u',\n name: 'base64url',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n bitsPerChar: 6\n})\n\nexport const base64urlpad = rfc4648({\n prefix: 'U',\n name: 'base64urlpad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n bitsPerChar: 6\n})\n", "import { VCImplicitLearnCard } from './types';\nimport { base58btc } from 'multiformats/bases/base58';\nimport { base64url } from 'multiformats/bases/base64';\n\n/**\n * Determines the default verification method to use for a given did by resolving it and looking\n * for a keypair that matches the default keypair for the LearnCard\n */\nexport const getDefaultVerificationMethod = async (\n learnCard: VCImplicitLearnCard,\n issuerDid: string\n) => {\n const kp = learnCard.id.keypair();\n\n if (!kp) {\n throw new Error('Cannot get default verification method: unable to get subject keypair');\n }\n\n const issuerDidDoc = await learnCard.invoke.resolveDid(issuerDid);\n\n const toX = (vm: any): string | undefined => {\n if (!vm || typeof vm === 'string') return undefined;\n if (vm.publicKeyJwk?.x) return vm.publicKeyJwk.x;\n if (vm.publicKeyMultibase) {\n const decoded = base58btc.decode(vm.publicKeyMultibase);\n const ed = decoded[0] === 0xed && decoded[1] === 0x01 ? decoded.slice(2) : decoded;\n return base64url.encode(ed).slice(1);\n }\n if (vm.publicKeyBase58) {\n const ed = base58btc.baseDecode(vm.publicKeyBase58);\n return base64url.encode(ed).slice(1);\n }\n return undefined;\n };\n\n const verificationMethodEntry =\n typeof issuerDidDoc === 'string'\n ? undefined\n : issuerDidDoc?.verificationMethod?.find(entry => toX(entry as any) === kp.x);\n\n const verificationMethod =\n (typeof verificationMethodEntry !== 'string' && verificationMethodEntry?.id) ||\n (await learnCard.invoke.didToVerificationMethod(issuerDid));\n\n return verificationMethod;\n};\n", "import { UnsignedVC } from '@learncard/types';\n\nimport { ProofOptions } from '@learncard/didkit-plugin';\nimport { VCDependentLearnCard, VCImplicitLearnCard } from './types';\nimport { getDefaultVerificationMethod } from './helpers';\n\nexport const issueCredential = (initLearnCard: VCDependentLearnCard) => {\n return async (\n learnCard: VCImplicitLearnCard,\n credential: UnsignedVC,\n signingOptions: Partial<ProofOptions> = {}\n ) => {\n const kp = learnCard.id.keypair();\n\n if (!kp) throw new Error('Cannot issue credential: Could not get subject keypair');\n\n const contexts = Array.isArray(credential['@context'])\n ? credential['@context']\n : [credential['@context']];\n\n const hasV2Context = contexts.some(\n ctx =>\n typeof ctx === 'string' &&\n (ctx.includes('/ns/credentials/v2') || ctx.includes('/credentials/v2'))\n );\n\n // Ed25519Signature2018 is incompatible with credentials v2.\n const proofType =\n hasV2Context && signingOptions.type === 'Ed25519Signature2018'\n ? 'Ed25519Signature2020'\n : signingOptions.type ??\n (signingOptions.proofFormat === 'jwt' ? undefined : 'DataIntegrityProof');\n\n const options: ProofOptions = {\n proofPurpose: 'assertionMethod',\n ...signingOptions,\n ...(proofType ? { type: proofType } : {}),\n };\n\n if (options.type === 'DataIntegrityProof' && !options.cryptosuite) {\n options.cryptosuite = 'eddsa-rdfc-2022';\n }\n\n if (!('verificationMethod' in options)) {\n const issuerDid =\n typeof credential.issuer === 'string' ? credential.issuer : credential.issuer.id!;\n\n options.verificationMethod = await getDefaultVerificationMethod(learnCard, issuerDid);\n }\n\n learnCard.debug?.('Signing with these options', {\n credential,\n options,\n kp,\n });\n\n return initLearnCard.invoke.issueCredential(credential, options, kp);\n };\n};\n", "import { VC } from '@learncard/types';\n\nimport { ProofOptions } from '@learncard/didkit-plugin';\nimport { VCDependentLearnCard, VCImplicitLearnCard } from './types';\n\nexport const verifyCredential = (initLearnCard: VCDependentLearnCard) => {\n return async (\n _learnCard: VCImplicitLearnCard,\n credential: VC,\n _options: Partial<ProofOptions> = {}\n ) => {\n const options: Partial<ProofOptions> = { ..._options };\n\n if (!options.checks) {\n options.checks = ['proof'];\n if (credential.credentialStatus) options.checks.push('credentialStatus');\n if (credential.credentialSchema) options.checks.push('credentialSchema');\n }\n\n return initLearnCard.invoke.verifyCredential(credential, options);\n };\n};\n", "import { UnsignedVP } from '@learncard/types';\n\nimport { ProofOptions } from '@learncard/didkit-plugin';\nimport { VCDependentLearnCard, VCImplicitLearnCard } from './types';\nimport { getDefaultVerificationMethod } from './helpers';\n\nexport const issuePresentation = (initLearnCard: VCDependentLearnCard) => {\n return async (\n learnCard: VCImplicitLearnCard,\n presentation: UnsignedVP,\n signingOptions: Partial<ProofOptions> = {}\n ) => {\n const kp = learnCard.id.keypair();\n\n if (!kp) throw new Error('Cannot issue credential: Could not get subject keypair');\n\n // Check if presentation uses v2 context\n const contexts = Array.isArray(presentation['@context']) \n ? presentation['@context'] \n : [presentation['@context']];\n const hasV2Context = contexts.some(ctx => \n typeof ctx === 'string' && (ctx.includes('/ns/credentials/v2') || ctx.includes('/credentials/v2'))\n );\n\n // For v2 contexts, upgrade Ed25519Signature2018 to Ed25519Signature2020\n // Ed25519Signature2018 is incompatible with credentials v2\n const proofType = hasV2Context && signingOptions.type === 'Ed25519Signature2018'\n ? 'Ed25519Signature2020'\n : signingOptions.type ?? 'Ed25519Signature2020';\n\n const options = {\n ...(signingOptions.proofFormat === 'jwt'\n ? {}\n : { proofPurpose: 'assertionMethod', type: proofType }),\n ...signingOptions,\n };\n\n if (!('verificationMethod' in options)) {\n options.verificationMethod = await getDefaultVerificationMethod(\n learnCard,\n learnCard.id.did()\n );\n }\n\n return initLearnCard.invoke.issuePresentation(presentation, options, kp);\n };\n};\n", "import { VP } from '@learncard/types';\n\nimport { ProofOptions } from '@learncard/didkit-plugin';\nimport { VCDependentLearnCard, VCImplicitLearnCard } from './types';\n\nexport const verifyPresentation = (initLearnCard: VCDependentLearnCard) => {\n return async (\n _learnCard: VCImplicitLearnCard,\n presentation: VP | string,\n options: Partial<ProofOptions> = {}\n ) => {\n return initLearnCard.invoke.verifyPresentation(presentation, options);\n };\n};\n", "import { issueCredential } from './issueCredential';\nimport { verifyCredential } from './verifyCredential';\nimport { issuePresentation } from './issuePresentation';\nimport { verifyPresentation } from './verifyPresentation';\n\nimport { VCDependentLearnCard, VCPlugin } from './types';\nimport { UnsignedVP } from '@learncard/types';\n\n/**\n * @group Plugins\n */\nexport const getVCPlugin = (learnCard: VCDependentLearnCard): VCPlugin => {\n return {\n name: 'VC',\n displayName: 'VC',\n description:\n 'Handles the infrastructure needed to issue and verify credentials and presentations',\n methods: {\n issueCredential: issueCredential(learnCard),\n verifyCredential: verifyCredential(learnCard),\n issuePresentation: issuePresentation(learnCard),\n verifyPresentation: verifyPresentation(learnCard),\n getTestVc: (_learnCard, subject = 'did:example:d23dd687a7dc6787646f2eb98d0') => {\n const did = _learnCard.id.did();\n\n return {\n '@context': ['https://www.w3.org/ns/credentials/v2'],\n id: `urn:uuid:${crypto.randomUUID()}`,\n type: ['VerifiableCredential'],\n issuer: did,\n validFrom: new Date().toISOString(),\n credentialSubject: { id: subject },\n };\n },\n getTestVp: async (_learnCard, _credential) => {\n const credential =\n _credential ||\n (await _learnCard.invoke.issueCredential(_learnCard.invoke.getTestVc()));\n\n const did = _learnCard.id.did();\n\n return {\n '@context': ['https://www.w3.org/ns/credentials/v2'],\n type: ['VerifiablePresentation'],\n holder: did,\n verifiableCredential: credential,\n };\n },\n getDidAuthVp: async (_learnCard, options = {}) => {\n const did = _learnCard.id.did();\n const unsignedVP: UnsignedVP = {\n '@context': ['https://www.w3.org/ns/credentials/v2'],\n type: ['VerifiablePresentation'],\n holder: did,\n };\n\n return _learnCard.invoke.issuePresentation(unsignedVP, {\n proofPurpose: 'authentication',\n ...options,\n });\n },\n },\n };\n};\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["index_exports", "__export", "getVCPlugin", "__toCommonJS", "base", "ALPHABET", "name", "BASE_MAP", "j", "i", "x", "xc", "BASE", "LEADER", "FACTOR", "iFACTOR", "encode", "source", "zeroes", "length", "pbegin", "pend", "size", "b58", "carry", "it1", "it2", "str", "__name", "decodeUnsafe", "psz", "b256", "it3", "it4", "vch", "decode", "string", "buffer", "src", "_brrp__multiformats_scope_baseX", "base_x_default", "empty", "coerce", "__name", "o", "_Encoder", "name", "prefix", "baseEncode", "bytes", "__name", "Encoder", "_Decoder", "baseDecode", "text", "decoder", "or", "Decoder", "_ComposedDecoder", "decoders", "input", "ComposedDecoder", "left", "right", "_Codec", "Codec", "from", "encode", "decode", "baseX", "alphabet", "base_x_default", "coerce", "string", "bitsPerChar", "codes", "i", "end", "out", "bits", "buffer", "written", "value", "data", "pad", "mask", "rfc4648", "base58btc", "baseX", "base58flickr", "base64", "rfc4648", "base64pad", "base64url", "base64urlpad", "getDefaultVerificationMethod", "__name", "learnCard", "issuerDid", "kp", "issuerDidDoc", "toX", "vm", "decoded", "base58btc", "ed", "base64url", "verificationMethodEntry", "entry", "issueCredential", "__name", "initLearnCard", "learnCard", "credential", "signingOptions", "kp", "proofType", "ctx", "options", "issuerDid", "getDefaultVerificationMethod", "verifyCredential", "__name", "initLearnCard", "_learnCard", "credential", "_options", "options", "issuePresentation", "__name", "initLearnCard", "learnCard", "presentation", "signingOptions", "kp", "proofType", "ctx", "options", "getDefaultVerificationMethod", "verifyPresentation", "__name", "initLearnCard", "_learnCard", "presentation", "options", "getVCPlugin", "__name", "learnCard", "issueCredential", "verifyCredential", "issuePresentation", "verifyPresentation", "_learnCard", "subject", "did", "_credential", "credential", "options", "unsignedVP"]
|
package/dist/vc-plugin.esm.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
3
|
|
|
4
|
-
// ../../../node_modules
|
|
4
|
+
// ../../../node_modules/multiformats/vendor/base-x.js
|
|
5
5
|
function base(ALPHABET, name) {
|
|
6
6
|
if (ALPHABET.length >= 255) {
|
|
7
7
|
throw new TypeError("Alphabet too long");
|
|
@@ -140,7 +140,7 @@ var src = base;
|
|
|
140
140
|
var _brrp__multiformats_scope_baseX = src;
|
|
141
141
|
var base_x_default = _brrp__multiformats_scope_baseX;
|
|
142
142
|
|
|
143
|
-
// ../../../node_modules
|
|
143
|
+
// ../../../node_modules/multiformats/src/bytes.js
|
|
144
144
|
var empty = new Uint8Array(0);
|
|
145
145
|
var coerce = /* @__PURE__ */ __name((o) => {
|
|
146
146
|
if (o instanceof Uint8Array && o.constructor.name === "Uint8Array") return o;
|
|
@@ -151,7 +151,7 @@ var coerce = /* @__PURE__ */ __name((o) => {
|
|
|
151
151
|
throw new Error("Unknown type, must be binary type");
|
|
152
152
|
}, "coerce");
|
|
153
153
|
|
|
154
|
-
// ../../../node_modules
|
|
154
|
+
// ../../../node_modules/multiformats/src/bases/base.js
|
|
155
155
|
var _Encoder = class _Encoder {
|
|
156
156
|
/**
|
|
157
157
|
* @param {Base} name
|
|
@@ -374,7 +374,7 @@ var rfc4648 = /* @__PURE__ */ __name(({ name, prefix, bitsPerChar, alphabet }) =
|
|
|
374
374
|
});
|
|
375
375
|
}, "rfc4648");
|
|
376
376
|
|
|
377
|
-
// ../../../node_modules
|
|
377
|
+
// ../../../node_modules/multiformats/src/bases/base58.js
|
|
378
378
|
var base58btc = baseX({
|
|
379
379
|
name: "base58btc",
|
|
380
380
|
prefix: "z",
|
|
@@ -386,7 +386,7 @@ var base58flickr = baseX({
|
|
|
386
386
|
alphabet: "123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"
|
|
387
387
|
});
|
|
388
388
|
|
|
389
|
-
// ../../../node_modules
|
|
389
|
+
// ../../../node_modules/multiformats/src/bases/base64.js
|
|
390
390
|
var base64 = rfc4648({
|
|
391
391
|
prefix: "m",
|
|
392
392
|
name: "base64",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../../node_modules
|
|
3
|
+
"sources": ["../../../../node_modules/multiformats/vendor/base-x.js", "../../../../node_modules/multiformats/src/bytes.js", "../../../../node_modules/multiformats/src/bases/base.js", "../../../../node_modules/multiformats/src/bases/base58.js", "../../../../node_modules/multiformats/src/bases/base64.js", "../src/helpers.ts", "../src/issueCredential.ts", "../src/verifyCredential.ts", "../src/issuePresentation.ts", "../src/verifyPresentation.ts", "../src/vc.ts"],
|
|
4
4
|
"sourcesContent": ["// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET, name) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n function encode (source) {\n if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n var b58 = new Uint8Array(size);\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin];\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0;\n b58[it1] = (carry % BASE) >>> 0;\n carry = (carry / BASE) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n pbegin++;\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0;\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size);\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)];\n // Invalid character\n if (carry === 255) { return }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0;\n b256[it3] = (carry % 256) >>> 0;\n carry = (carry / 256) >>> 0;\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i;\n psz++;\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string);\n if (buffer) { return buffer }\n throw new Error(`Non-${name} character`)\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n", "const empty = new Uint8Array(0)\n\n/**\n * @param {Uint8Array} d\n */\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n\n/**\n * @param {string} hex\n */\nconst fromHex = hex => {\n const hexes = hex.match(/../g)\n return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\n/**\n * @param {Uint8Array} aa\n * @param {Uint8Array} bb\n */\nconst equals = (aa, bb) => {\n if (aa === bb) return true\n if (aa.byteLength !== bb.byteLength) {\n return false\n }\n\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * @param {ArrayBufferView|ArrayBuffer|Uint8Array} o\n * @returns {Uint8Array}\n */\nconst coerce = o => {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o\n if (o instanceof ArrayBuffer) return new Uint8Array(o)\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n }\n throw new Error('Unknown type, must be binary type')\n}\n\n/**\n * @param {any} o\n * @returns {o is ArrayBuffer|ArrayBufferView}\n */\nconst isBinary = o =>\n o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n\n/**\n * @param {string} str\n * @returns {Uint8Array}\n */\nconst fromString = str => (new TextEncoder()).encode(str)\n\n/**\n * @param {Uint8Array} b\n * @returns {string}\n */\nconst toString = b => (new TextDecoder()).decode(b)\n\nexport { equals, coerce, isBinary, fromHex, toHex, fromString, toString, empty }\n", "import basex from '../../vendor/base-x.js'\nimport { coerce } from '../bytes.js'\n// Linter can't see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.BaseEncoder}\n */\nclass Encoder {\n /**\n * @param {Base} name\n * @param {Prefix} prefix\n * @param {(bytes:Uint8Array) => string} baseEncode\n */\n constructor (name, prefix, baseEncode) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n }\n\n /**\n * @param {Uint8Array} bytes\n * @returns {API.Multibase<Prefix>}\n */\n encode (bytes) {\n if (bytes instanceof Uint8Array) {\n return `${this.prefix}${this.baseEncode(bytes)}`\n } else {\n throw Error('Unknown type, must be binary type')\n }\n }\n}\n\n/**\n * @template {string} Prefix\n */\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.UnibaseDecoder<Prefix>}\n * @implements {API.BaseDecoder}\n */\nclass Decoder {\n /**\n * @param {Base} name\n * @param {Prefix} prefix\n * @param {(text:string) => Uint8Array} baseDecode\n */\n constructor (name, prefix, baseDecode) {\n this.name = name\n this.prefix = prefix\n /* c8 ignore next 3 */\n if (prefix.codePointAt(0) === undefined) {\n throw new Error('Invalid prefix character')\n }\n /** @private */\n this.prefixCodePoint = /** @type {number} */ (prefix.codePointAt(0))\n this.baseDecode = baseDecode\n }\n\n /**\n * @param {string} text\n */\n decode (text) {\n if (typeof text === 'string') {\n if (text.codePointAt(0) !== this.prefixCodePoint) {\n throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n }\n return this.baseDecode(text.slice(this.prefix.length))\n } else {\n throw Error('Can only multibase decode strings')\n }\n }\n\n /**\n * @template {string} OtherPrefix\n * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n */\n or (decoder) {\n return or(this, decoder)\n }\n}\n\n/**\n * @template {string} Prefix\n * @typedef {Record<Prefix, API.UnibaseDecoder<Prefix>>} Decoders\n */\n\n/**\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.CombobaseDecoder<Prefix>}\n */\nclass ComposedDecoder {\n /**\n * @param {Decoders<Prefix>} decoders\n */\n constructor (decoders) {\n this.decoders = decoders\n }\n\n /**\n * @template {string} OtherPrefix\n * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n */\n or (decoder) {\n return or(this, decoder)\n }\n\n /**\n * @param {string} input\n * @returns {Uint8Array}\n */\n decode (input) {\n const prefix = /** @type {Prefix} */ (input[0])\n const decoder = this.decoders[prefix]\n if (decoder) {\n return decoder.decode(input)\n } else {\n throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n }\n }\n}\n\n/**\n * @template {string} L\n * @template {string} R\n * @param {API.UnibaseDecoder<L>|API.CombobaseDecoder<L>} left\n * @param {API.UnibaseDecoder<R>|API.CombobaseDecoder<R>} right\n * @returns {ComposedDecoder<L|R>}\n */\nexport const or = (left, right) => new ComposedDecoder(/** @type {Decoders<L|R>} */({\n ...(left.decoders || { [/** @type API.UnibaseDecoder<L> */(left).prefix]: left }),\n ...(right.decoders || { [/** @type API.UnibaseDecoder<R> */(right).prefix]: right })\n}))\n\n/**\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseCodec<Prefix>}\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.BaseCodec}\n * @implements {API.BaseEncoder}\n * @implements {API.BaseDecoder}\n */\nexport class Codec {\n /**\n * @param {Base} name\n * @param {Prefix} prefix\n * @param {(bytes:Uint8Array) => string} baseEncode\n * @param {(text:string) => Uint8Array} baseDecode\n */\n constructor (name, prefix, baseEncode, baseDecode) {\n this.name = name\n this.prefix = prefix\n this.baseEncode = baseEncode\n this.baseDecode = baseDecode\n this.encoder = new Encoder(name, prefix, baseEncode)\n this.decoder = new Decoder(name, prefix, baseDecode)\n }\n\n /**\n * @param {Uint8Array} input\n */\n encode (input) {\n return this.encoder.encode(input)\n }\n\n /**\n * @param {string} input\n */\n decode (input) {\n return this.decoder.decode(input)\n }\n}\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {(bytes:Uint8Array) => string} options.encode\n * @param {(input:string) => Uint8Array} options.decode\n * @returns {Codec<Base, Prefix>}\n */\nexport const from = ({ name, prefix, encode, decode }) =>\n new Codec(name, prefix, encode, decode)\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @returns {Codec<Base, Prefix>}\n */\nexport const baseX = ({ prefix, name, alphabet }) => {\n const { encode, decode } = basex(alphabet, name)\n return from({\n prefix,\n name,\n encode,\n /**\n * @param {string} text\n */\n decode: text => coerce(decode(text))\n })\n}\n\n/**\n * @param {string} string\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @param {string} name\n * @returns {Uint8Array}\n */\nconst decode = (string, alphabet, bitsPerChar, name) => {\n // Build the character lookup table:\n /** @type {Record<string, number>} */\n const codes = {}\n for (let i = 0; i < alphabet.length; ++i) {\n codes[alphabet[i]] = i\n }\n\n // Count the padding bytes:\n let end = string.length\n while (string[end - 1] === '=') {\n --end\n }\n\n // Allocate the output:\n const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n // Parse the data:\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n let written = 0 // Next byte to write\n for (let i = 0; i < end; ++i) {\n // Read one character from the string:\n const value = codes[string[i]]\n if (value === undefined) {\n throw new SyntaxError(`Non-${name} character`)\n }\n\n // Append the bits to the buffer:\n buffer = (buffer << bitsPerChar) | value\n bits += bitsPerChar\n\n // Write out some bits if the buffer has a byte's worth:\n if (bits >= 8) {\n bits -= 8\n out[written++] = 0xff & (buffer >> bits)\n }\n }\n\n // Verify that we have received just enough bits:\n if (bits >= bitsPerChar || 0xff & (buffer << (8 - bits))) {\n throw new SyntaxError('Unexpected end of data')\n }\n\n return out\n}\n\n/**\n * @param {Uint8Array} data\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {string}\n */\nconst encode = (data, alphabet, bitsPerChar) => {\n const pad = alphabet[alphabet.length - 1] === '='\n const mask = (1 << bitsPerChar) - 1\n let out = ''\n\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n for (let i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = (buffer << 8) | data[i]\n bits += 8\n\n // Write out as much as we can:\n while (bits > bitsPerChar) {\n bits -= bitsPerChar\n out += alphabet[mask & (buffer >> bits)]\n }\n }\n\n // Partial character:\n if (bits) {\n out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n }\n\n // Add padding characters until we hit a byte boundary:\n if (pad) {\n while ((out.length * bitsPerChar) & 7) {\n out += '='\n }\n }\n\n return out\n}\n\n/**\n * RFC4648 Factory\n *\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @param {number} options.bitsPerChar\n */\nexport const rfc4648 = ({ name, prefix, bitsPerChar, alphabet }) => {\n return from({\n prefix,\n name,\n encode (input) {\n return encode(input, alphabet, bitsPerChar)\n },\n decode (input) {\n return decode(input, alphabet, bitsPerChar, name)\n }\n })\n}\n", "import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n", "// @ts-check\n\nimport { rfc4648 } from './base.js'\n\nexport const base64 = rfc4648({\n prefix: 'm',\n name: 'base64',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n bitsPerChar: 6\n})\n\nexport const base64pad = rfc4648({\n prefix: 'M',\n name: 'base64pad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n bitsPerChar: 6\n})\n\nexport const base64url = rfc4648({\n prefix: 'u',\n name: 'base64url',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n bitsPerChar: 6\n})\n\nexport const base64urlpad = rfc4648({\n prefix: 'U',\n name: 'base64urlpad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n bitsPerChar: 6\n})\n", "import { VCImplicitLearnCard } from './types';\nimport { base58btc } from 'multiformats/bases/base58';\nimport { base64url } from 'multiformats/bases/base64';\n\n/**\n * Determines the default verification method to use for a given did by resolving it and looking\n * for a keypair that matches the default keypair for the LearnCard\n */\nexport const getDefaultVerificationMethod = async (\n learnCard: VCImplicitLearnCard,\n issuerDid: string\n) => {\n const kp = learnCard.id.keypair();\n\n if (!kp) {\n throw new Error('Cannot get default verification method: unable to get subject keypair');\n }\n\n const issuerDidDoc = await learnCard.invoke.resolveDid(issuerDid);\n\n const toX = (vm: any): string | undefined => {\n if (!vm || typeof vm === 'string') return undefined;\n if (vm.publicKeyJwk?.x) return vm.publicKeyJwk.x;\n if (vm.publicKeyMultibase) {\n const decoded = base58btc.decode(vm.publicKeyMultibase);\n const ed = decoded[0] === 0xed && decoded[1] === 0x01 ? decoded.slice(2) : decoded;\n return base64url.encode(ed).slice(1);\n }\n if (vm.publicKeyBase58) {\n const ed = base58btc.baseDecode(vm.publicKeyBase58);\n return base64url.encode(ed).slice(1);\n }\n return undefined;\n };\n\n const verificationMethodEntry =\n typeof issuerDidDoc === 'string'\n ? undefined\n : issuerDidDoc?.verificationMethod?.find(entry => toX(entry as any) === kp.x);\n\n const verificationMethod =\n (typeof verificationMethodEntry !== 'string' && verificationMethodEntry?.id) ||\n (await learnCard.invoke.didToVerificationMethod(issuerDid));\n\n return verificationMethod;\n};\n", "import { UnsignedVC } from '@learncard/types';\n\nimport { ProofOptions } from '@learncard/didkit-plugin';\nimport { VCDependentLearnCard, VCImplicitLearnCard } from './types';\nimport { getDefaultVerificationMethod } from './helpers';\n\nexport const issueCredential = (initLearnCard: VCDependentLearnCard) => {\n return async (\n learnCard: VCImplicitLearnCard,\n credential: UnsignedVC,\n signingOptions: Partial<ProofOptions> = {}\n ) => {\n const kp = learnCard.id.keypair();\n\n if (!kp) throw new Error('Cannot issue credential: Could not get subject keypair');\n\n const contexts = Array.isArray(credential['@context'])\n ? credential['@context']\n : [credential['@context']];\n\n const hasV2Context = contexts.some(\n ctx =>\n typeof ctx === 'string' &&\n (ctx.includes('/ns/credentials/v2') || ctx.includes('/credentials/v2'))\n );\n\n // Ed25519Signature2018 is incompatible with credentials v2.\n const proofType =\n hasV2Context && signingOptions.type === 'Ed25519Signature2018'\n ? 'Ed25519Signature2020'\n : signingOptions.type ??\n (signingOptions.proofFormat === 'jwt' ? undefined : 'DataIntegrityProof');\n\n const options: ProofOptions = {\n proofPurpose: 'assertionMethod',\n ...signingOptions,\n ...(proofType ? { type: proofType } : {}),\n };\n\n if (options.type === 'DataIntegrityProof' && !options.cryptosuite) {\n options.cryptosuite = 'eddsa-rdfc-2022';\n }\n\n if (!('verificationMethod' in options)) {\n const issuerDid =\n typeof credential.issuer === 'string' ? credential.issuer : credential.issuer.id!;\n\n options.verificationMethod = await getDefaultVerificationMethod(learnCard, issuerDid);\n }\n\n learnCard.debug?.('Signing with these options', {\n credential,\n options,\n kp,\n });\n\n return initLearnCard.invoke.issueCredential(credential, options, kp);\n };\n};\n", "import { VC } from '@learncard/types';\n\nimport { ProofOptions } from '@learncard/didkit-plugin';\nimport { VCDependentLearnCard, VCImplicitLearnCard } from './types';\n\nexport const verifyCredential = (initLearnCard: VCDependentLearnCard) => {\n return async (\n _learnCard: VCImplicitLearnCard,\n credential: VC,\n _options: Partial<ProofOptions> = {}\n ) => {\n const options: Partial<ProofOptions> = { ..._options };\n\n if (!options.checks) {\n options.checks = ['proof'];\n if (credential.credentialStatus) options.checks.push('credentialStatus');\n if (credential.credentialSchema) options.checks.push('credentialSchema');\n }\n\n return initLearnCard.invoke.verifyCredential(credential, options);\n };\n};\n", "import { UnsignedVP } from '@learncard/types';\n\nimport { ProofOptions } from '@learncard/didkit-plugin';\nimport { VCDependentLearnCard, VCImplicitLearnCard } from './types';\nimport { getDefaultVerificationMethod } from './helpers';\n\nexport const issuePresentation = (initLearnCard: VCDependentLearnCard) => {\n return async (\n learnCard: VCImplicitLearnCard,\n presentation: UnsignedVP,\n signingOptions: Partial<ProofOptions> = {}\n ) => {\n const kp = learnCard.id.keypair();\n\n if (!kp) throw new Error('Cannot issue credential: Could not get subject keypair');\n\n // Check if presentation uses v2 context\n const contexts = Array.isArray(presentation['@context']) \n ? presentation['@context'] \n : [presentation['@context']];\n const hasV2Context = contexts.some(ctx => \n typeof ctx === 'string' && (ctx.includes('/ns/credentials/v2') || ctx.includes('/credentials/v2'))\n );\n\n // For v2 contexts, upgrade Ed25519Signature2018 to Ed25519Signature2020\n // Ed25519Signature2018 is incompatible with credentials v2\n const proofType = hasV2Context && signingOptions.type === 'Ed25519Signature2018'\n ? 'Ed25519Signature2020'\n : signingOptions.type ?? 'Ed25519Signature2020';\n\n const options = {\n ...(signingOptions.proofFormat === 'jwt'\n ? {}\n : { proofPurpose: 'assertionMethod', type: proofType }),\n ...signingOptions,\n };\n\n if (!('verificationMethod' in options)) {\n options.verificationMethod = await getDefaultVerificationMethod(\n learnCard,\n learnCard.id.did()\n );\n }\n\n return initLearnCard.invoke.issuePresentation(presentation, options, kp);\n };\n};\n", "import { VP } from '@learncard/types';\n\nimport { ProofOptions } from '@learncard/didkit-plugin';\nimport { VCDependentLearnCard, VCImplicitLearnCard } from './types';\n\nexport const verifyPresentation = (initLearnCard: VCDependentLearnCard) => {\n return async (\n _learnCard: VCImplicitLearnCard,\n presentation: VP | string,\n options: Partial<ProofOptions> = {}\n ) => {\n return initLearnCard.invoke.verifyPresentation(presentation, options);\n };\n};\n", "import { issueCredential } from './issueCredential';\nimport { verifyCredential } from './verifyCredential';\nimport { issuePresentation } from './issuePresentation';\nimport { verifyPresentation } from './verifyPresentation';\n\nimport { VCDependentLearnCard, VCPlugin } from './types';\nimport { UnsignedVP } from '@learncard/types';\n\n/**\n * @group Plugins\n */\nexport const getVCPlugin = (learnCard: VCDependentLearnCard): VCPlugin => {\n return {\n name: 'VC',\n displayName: 'VC',\n description:\n 'Handles the infrastructure needed to issue and verify credentials and presentations',\n methods: {\n issueCredential: issueCredential(learnCard),\n verifyCredential: verifyCredential(learnCard),\n issuePresentation: issuePresentation(learnCard),\n verifyPresentation: verifyPresentation(learnCard),\n getTestVc: (_learnCard, subject = 'did:example:d23dd687a7dc6787646f2eb98d0') => {\n const did = _learnCard.id.did();\n\n return {\n '@context': ['https://www.w3.org/ns/credentials/v2'],\n id: `urn:uuid:${crypto.randomUUID()}`,\n type: ['VerifiableCredential'],\n issuer: did,\n validFrom: new Date().toISOString(),\n credentialSubject: { id: subject },\n };\n },\n getTestVp: async (_learnCard, _credential) => {\n const credential =\n _credential ||\n (await _learnCard.invoke.issueCredential(_learnCard.invoke.getTestVc()));\n\n const did = _learnCard.id.did();\n\n return {\n '@context': ['https://www.w3.org/ns/credentials/v2'],\n type: ['VerifiablePresentation'],\n holder: did,\n verifiableCredential: credential,\n };\n },\n getDidAuthVp: async (_learnCard, options = {}) => {\n const did = _learnCard.id.did();\n const unsignedVP: UnsignedVP = {\n '@context': ['https://www.w3.org/ns/credentials/v2'],\n type: ['VerifiablePresentation'],\n holder: did,\n };\n\n return _learnCard.invoke.issuePresentation(unsignedVP, {\n proofPurpose: 'authentication',\n ...options,\n });\n },\n },\n };\n};\n"],
|
|
5
5
|
"mappings": ";;;;AAKA,SAAS,KAAM,UAAU,MAAM;AAC7B,MAAI,SAAS,UAAU,KAAK;AAAE,UAAM,IAAI,UAAU,mBAAmB;AAAA,EAAE;AACvE,MAAI,WAAW,IAAI,WAAW,GAAG;AACjC,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,aAAS,CAAC,IAAI;AAAA,EAChB;AACA,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,QAAI,IAAI,SAAS,OAAO,CAAC;AACzB,QAAI,KAAK,EAAE,WAAW,CAAC;AACvB,QAAI,SAAS,EAAE,MAAM,KAAK;AAAE,YAAM,IAAI,UAAU,IAAI,eAAe;AAAA,IAAE;AACrE,aAAS,EAAE,IAAI;AAAA,EACjB;AACA,MAAI,OAAO,SAAS;AACpB,MAAI,SAAS,SAAS,OAAO,CAAC;AAC9B,MAAI,SAAS,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,GAAG;AAC1C,MAAI,UAAU,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,IAAI;AAC3C,WAASA,QAAQ,QAAQ;AACvB,QAAI,kBAAkB,WAAY;AAAA,aAAW,YAAY,OAAO,MAAM,GAAG;AACvE,eAAS,IAAI,WAAW,OAAO,QAAQ,OAAO,YAAY,OAAO,UAAU;AAAA,IAC7E,WAAW,MAAM,QAAQ,MAAM,GAAG;AAChC,eAAS,WAAW,KAAK,MAAM;AAAA,IACjC;AACA,QAAI,EAAE,kBAAkB,aAAa;AAAE,YAAM,IAAI,UAAU,qBAAqB;AAAA,IAAE;AAClF,QAAI,OAAO,WAAW,GAAG;AAAE,aAAO;AAAA,IAAG;AAErC,QAAI,SAAS;AACb,QAAI,SAAS;AACb,QAAI,SAAS;AACb,QAAI,OAAO,OAAO;AAClB,WAAO,WAAW,QAAQ,OAAO,MAAM,MAAM,GAAG;AAC9C;AACA;AAAA,IACF;AAEA,QAAI,QAAS,OAAO,UAAU,UAAU,MAAO;AAC/C,QAAI,MAAM,IAAI,WAAW,IAAI;AAE7B,WAAO,WAAW,MAAM;AACtB,UAAI,QAAQ,OAAO,MAAM;AAEzB,UAAIC,KAAI;AACR,eAAS,MAAM,OAAO,IAAI,UAAU,KAAKA,KAAI,WAAY,QAAQ,IAAK,OAAOA,MAAK;AAChF,iBAAU,MAAM,IAAI,GAAG,MAAO;AAC9B,YAAI,GAAG,IAAK,QAAQ,SAAU;AAC9B,gBAAS,QAAQ,SAAU;AAAA,MAC7B;AACA,UAAI,UAAU,GAAG;AAAE,cAAM,IAAI,MAAM,gBAAgB;AAAA,MAAE;AACrD,eAASA;AACT;AAAA,IACF;AAEA,QAAI,MAAM,OAAO;AACjB,WAAO,QAAQ,QAAQ,IAAI,GAAG,MAAM,GAAG;AACrC;AAAA,IACF;AAEA,QAAI,MAAM,OAAO,OAAO,MAAM;AAC9B,WAAO,MAAM,MAAM,EAAE,KAAK;AAAE,aAAO,SAAS,OAAO,IAAI,GAAG,CAAC;AAAA,IAAG;AAC9D,WAAO;AAAA,EACT;AA3CS,SAAAD,SAAA;AA4CT,WAAS,aAAc,QAAQ;AAC7B,QAAI,OAAO,WAAW,UAAU;AAAE,YAAM,IAAI,UAAU,iBAAiB;AAAA,IAAE;AACzE,QAAI,OAAO,WAAW,GAAG;AAAE,aAAO,IAAI,WAAW;AAAA,IAAE;AACnD,QAAI,MAAM;AAEV,QAAI,OAAO,GAAG,MAAM,KAAK;AAAE;AAAA,IAAO;AAElC,QAAI,SAAS;AACb,QAAI,SAAS;AACb,WAAO,OAAO,GAAG,MAAM,QAAQ;AAC7B;AACA;AAAA,IACF;AAEA,QAAI,QAAU,OAAO,SAAS,OAAO,SAAU,MAAO;AACtD,QAAI,OAAO,IAAI,WAAW,IAAI;AAE9B,WAAO,OAAO,GAAG,GAAG;AAElB,UAAI,QAAQ,SAAS,OAAO,WAAW,GAAG,CAAC;AAE3C,UAAI,UAAU,KAAK;AAAE;AAAA,MAAO;AAC5B,UAAIC,KAAI;AACR,eAAS,MAAM,OAAO,IAAI,UAAU,KAAKA,KAAI,WAAY,QAAQ,IAAK,OAAOA,MAAK;AAChF,iBAAU,OAAO,KAAK,GAAG,MAAO;AAChC,aAAK,GAAG,IAAK,QAAQ,QAAS;AAC9B,gBAAS,QAAQ,QAAS;AAAA,MAC5B;AACA,UAAI,UAAU,GAAG;AAAE,cAAM,IAAI,MAAM,gBAAgB;AAAA,MAAE;AACrD,eAASA;AACT;AAAA,IACF;AAEA,QAAI,OAAO,GAAG,MAAM,KAAK;AAAE;AAAA,IAAO;AAElC,QAAI,MAAM,OAAO;AACjB,WAAO,QAAQ,QAAQ,KAAK,GAAG,MAAM,GAAG;AACtC;AAAA,IACF;AACA,QAAI,MAAM,IAAI,WAAW,UAAU,OAAO,IAAI;AAC9C,QAAIC,KAAI;AACR,WAAO,QAAQ,MAAM;AACnB,UAAIA,IAAG,IAAI,KAAK,KAAK;AAAA,IACvB;AACA,WAAO;AAAA,EACT;AA7CS;AA8CT,WAASC,QAAQ,QAAQ;AACvB,QAAI,SAAS,aAAa,MAAM;AAChC,QAAI,QAAQ;AAAE,aAAO;AAAA,IAAO;AAC5B,UAAM,IAAI,MAAM,OAAO,IAAI,YAAY;AAAA,EACzC;AAJS,SAAAA,SAAA;AAKT,SAAO;AAAA,IACL,QAAQH;AAAA,IACR;AAAA,IACA,QAAQG;AAAA,EACV;AACF;AApHS;AAqHT,IAAI,MAAM;AAEV,IAAI,kCAAkC;AAEtC,IAAO,iBAAQ;;;AC9Hf,IAAM,QAAQ,IAAI,WAAW,CAAC;AAsC9B,IAAM,SAAS,8BAAK;AAClB,MAAI,aAAa,cAAc,EAAE,YAAY,SAAS,aAAc,QAAO;AAC3E,MAAI,aAAa,YAAa,QAAO,IAAI,WAAW,CAAC;AACrD,MAAI,YAAY,OAAO,CAAC,GAAG;AACzB,WAAO,IAAI,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU;AAAA,EAC5D;AACA,QAAM,IAAI,MAAM,mCAAmC;AACrD,GAPe;;;ACrBf,IAAM,WAAN,MAAM,SAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMZ,YAAa,MAAM,QAAQ,YAAY;AACrC,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,aAAa;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAQ,OAAO;AACb,QAAI,iBAAiB,YAAY;AAC/B,aAAO,GAAG,KAAK,MAAM,GAAG,KAAK,WAAW,KAAK,CAAC;AAAA,IAChD,OAAO;AACL,YAAM,MAAM,mCAAmC;AAAA,IACjD;AAAA,EACF;AACF;AAvBc;AAAd,IAAM,UAAN;AAwCA,IAAM,WAAN,MAAM,SAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMZ,YAAa,MAAM,QAAQ,YAAY;AACrC,SAAK,OAAO;AACZ,SAAK,SAAS;AAEd,QAAI,OAAO,YAAY,CAAC,MAAM,QAAW;AACvC,YAAM,IAAI,MAAM,0BAA0B;AAAA,IAC5C;AAEA,SAAK;AAAA,IAAyC,OAAO,YAAY,CAAC;AAClE,SAAK,aAAa;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAQ,MAAM;AACZ,QAAI,OAAO,SAAS,UAAU;AAC5B,UAAI,KAAK,YAAY,CAAC,MAAM,KAAK,iBAAiB;AAChD,cAAM,MAAM,qCAAqC,KAAK,UAAU,IAAI,CAAC,KAAK,KAAK,IAAI,+CAA+C,KAAK,MAAM,EAAE;AAAA,MACjJ;AACA,aAAO,KAAK,WAAW,KAAK,MAAM,KAAK,OAAO,MAAM,CAAC;AAAA,IACvD,OAAO;AACL,YAAM,MAAM,mCAAmC;AAAA,IACjD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,GAAI,SAAS;AACX,WAAO,GAAG,MAAM,OAAO;AAAA,EACzB;AACF;AAxCc;AAAd,IAAM,UAAN;AAoDA,IAAM,mBAAN,MAAM,iBAAgB;AAAA;AAAA;AAAA;AAAA,EAIpB,YAAa,UAAU;AACrB,SAAK,WAAW;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,GAAI,SAAS;AACX,WAAO,GAAG,MAAM,OAAO;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAQ,OAAO;AACb,UAAM;AAAA;AAAA,MAAgC,MAAM,CAAC;AAAA;AAC7C,UAAM,UAAU,KAAK,SAAS,MAAM;AACpC,QAAI,SAAS;AACX,aAAO,QAAQ,OAAO,KAAK;AAAA,IAC7B,OAAO;AACL,YAAM,WAAW,qCAAqC,KAAK,UAAU,KAAK,CAAC,+BAA+B,OAAO,KAAK,KAAK,QAAQ,CAAC,gBAAgB;AAAA,IACtJ;AAAA,EACF;AACF;AA9BsB;AAAtB,IAAM,kBAAN;AAuCO,IAAM,KAAK,wBAAC,MAAM,UAAU,IAAI;AAAA;AAAA,EAA6C;AAAA,IAClF,GAAI,KAAK,YAAY,EAAE;AAAA;AAAA,MAAoC,KAAM;AAAA,IAAM,GAAG,KAAK;AAAA,IAC/E,GAAI,MAAM,YAAY,EAAE;AAAA;AAAA,MAAoC,MAAO;AAAA,IAAM,GAAG,MAAM;AAAA,EACpF;AAAE,GAHgB;AAgBX,IAAM,SAAN,MAAM,OAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOjB,YAAa,MAAM,QAAQ,YAAY,YAAY;AACjD,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,aAAa;AAClB,SAAK,aAAa;AAClB,SAAK,UAAU,IAAI,QAAQ,MAAM,QAAQ,UAAU;AACnD,SAAK,UAAU,IAAI,QAAQ,MAAM,QAAQ,UAAU;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAQ,OAAO;AACb,WAAO,KAAK,QAAQ,OAAO,KAAK;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAQ,OAAO;AACb,WAAO,KAAK,QAAQ,OAAO,KAAK;AAAA,EAClC;AACF;AA7BmB;AAAZ,IAAM,QAAN;AAyCA,IAAM,OAAO,wBAAC,EAAE,MAAM,QAAQ,QAAAC,SAAQ,QAAAC,QAAO,MAClD,IAAI,MAAM,MAAM,QAAQD,SAAQC,OAAM,GADpB;AAYb,IAAM,QAAQ,wBAAC,EAAE,QAAQ,MAAM,SAAS,MAAM;AACnD,QAAM,EAAE,QAAAD,SAAQ,QAAAC,QAAO,IAAI,eAAM,UAAU,IAAI;AAC/C,SAAO,KAAK;AAAA,IACV;AAAA,IACA;AAAA,IACA,QAAAD;AAAA;AAAA;AAAA;AAAA,IAIA,QAAQ,iCAAQ,OAAOC,QAAO,IAAI,CAAC,GAA3B;AAAA,EACV,CAAC;AACH,GAXqB;AAoBrB,IAAM,SAAS,wBAAC,QAAQ,UAAU,aAAa,SAAS;AAGtD,QAAM,QAAQ,CAAC;AACf,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,EAAE,GAAG;AACxC,UAAM,SAAS,CAAC,CAAC,IAAI;AAAA,EACvB;AAGA,MAAI,MAAM,OAAO;AACjB,SAAO,OAAO,MAAM,CAAC,MAAM,KAAK;AAC9B,MAAE;AAAA,EACJ;AAGA,QAAM,MAAM,IAAI,WAAY,MAAM,cAAc,IAAK,CAAC;AAGtD,MAAI,OAAO;AACX,MAAI,SAAS;AACb,MAAI,UAAU;AACd,WAAS,IAAI,GAAG,IAAI,KAAK,EAAE,GAAG;AAE5B,UAAM,QAAQ,MAAM,OAAO,CAAC,CAAC;AAC7B,QAAI,UAAU,QAAW;AACvB,YAAM,IAAI,YAAY,OAAO,IAAI,YAAY;AAAA,IAC/C;AAGA,aAAU,UAAU,cAAe;AACnC,YAAQ;AAGR,QAAI,QAAQ,GAAG;AACb,cAAQ;AACR,UAAI,SAAS,IAAI,MAAQ,UAAU;AAAA,IACrC;AAAA,EACF;AAGA,MAAI,QAAQ,eAAe,MAAQ,UAAW,IAAI,MAAQ;AACxD,UAAM,IAAI,YAAY,wBAAwB;AAAA,EAChD;AAEA,SAAO;AACT,GA7Ce;AAqDf,IAAM,SAAS,wBAAC,MAAM,UAAU,gBAAgB;AAC9C,QAAM,MAAM,SAAS,SAAS,SAAS,CAAC,MAAM;AAC9C,QAAM,QAAQ,KAAK,eAAe;AAClC,MAAI,MAAM;AAEV,MAAI,OAAO;AACX,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AAEpC,aAAU,UAAU,IAAK,KAAK,CAAC;AAC/B,YAAQ;AAGR,WAAO,OAAO,aAAa;AACzB,cAAQ;AACR,aAAO,SAAS,OAAQ,UAAU,IAAK;AAAA,IACzC;AAAA,EACF;AAGA,MAAI,MAAM;AACR,WAAO,SAAS,OAAQ,UAAW,cAAc,IAAM;AAAA,EACzD;AAGA,MAAI,KAAK;AACP,WAAQ,IAAI,SAAS,cAAe,GAAG;AACrC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT,GAhCe;AA6CR,IAAM,UAAU,wBAAC,EAAE,MAAM,QAAQ,aAAa,SAAS,MAAM;AAClE,SAAO,KAAK;AAAA,IACV;AAAA,IACA;AAAA,IACA,OAAQ,OAAO;AACb,aAAO,OAAO,OAAO,UAAU,WAAW;AAAA,IAC5C;AAAA,IACA,OAAQ,OAAO;AACb,aAAO,OAAO,OAAO,UAAU,aAAa,IAAI;AAAA,IAClD;AAAA,EACF,CAAC;AACH,GAXuB;;;AC7UhB,IAAM,YAAY,MAAM;AAAA,EAC7B,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,UAAU;AACZ,CAAC;AAEM,IAAM,eAAe,MAAM;AAAA,EAChC,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,UAAU;AACZ,CAAC;;;ACRM,IAAM,SAAS,QAAQ;AAAA,EAC5B,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AACf,CAAC;AAEM,IAAM,YAAY,QAAQ;AAAA,EAC/B,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AACf,CAAC;AAEM,IAAM,YAAY,QAAQ;AAAA,EAC/B,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AACf,CAAC;AAEM,IAAM,eAAe,QAAQ;AAAA,EAClC,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AACf,CAAC;;;ACtBM,IAAM,+BAA+B,8BACxC,WACA,cACC;AACD,QAAM,KAAK,UAAU,GAAG,QAAQ;AAEhC,MAAI,CAAC,IAAI;AACL,UAAM,IAAI,MAAM,uEAAuE;AAAA,EAC3F;AAEA,QAAM,eAAe,MAAM,UAAU,OAAO,WAAW,SAAS;AAEhE,QAAM,MAAM,wBAAC,OAAgC;AACzC,QAAI,CAAC,MAAM,OAAO,OAAO,SAAU,QAAO;AAC1C,QAAI,GAAG,cAAc,EAAG,QAAO,GAAG,aAAa;AAC/C,QAAI,GAAG,oBAAoB;AACvB,YAAM,UAAU,UAAU,OAAO,GAAG,kBAAkB;AACtD,YAAM,KAAK,QAAQ,CAAC,MAAM,OAAQ,QAAQ,CAAC,MAAM,IAAO,QAAQ,MAAM,CAAC,IAAI;AAC3E,aAAO,UAAU,OAAO,EAAE,EAAE,MAAM,CAAC;AAAA,IACvC;AACA,QAAI,GAAG,iBAAiB;AACpB,YAAM,KAAK,UAAU,WAAW,GAAG,eAAe;AAClD,aAAO,UAAU,OAAO,EAAE,EAAE,MAAM,CAAC;AAAA,IACvC;AACA,WAAO;AAAA,EACX,GAbY;AAeZ,QAAM,0BACF,OAAO,iBAAiB,WAClB,SACA,cAAc,oBAAoB,KAAK,WAAS,IAAI,KAAY,MAAM,GAAG,CAAC;AAEpF,QAAM,qBACD,OAAO,4BAA4B,YAAY,yBAAyB,MACxE,MAAM,UAAU,OAAO,wBAAwB,SAAS;AAE7D,SAAO;AACX,GArC4C;;;ACFrC,IAAM,kBAAkB,wBAAC,kBAAwC;AACpE,SAAO,OACH,WACA,YACA,iBAAwC,CAAC,MACxC;AACD,UAAM,KAAK,UAAU,GAAG,QAAQ;AAEhC,QAAI,CAAC,GAAI,OAAM,IAAI,MAAM,wDAAwD;AAEjF,UAAM,WAAW,MAAM,QAAQ,WAAW,UAAU,CAAC,IAC/C,WAAW,UAAU,IACrB,CAAC,WAAW,UAAU,CAAC;AAE7B,UAAM,eAAe,SAAS;AAAA,MAC1B,SACI,OAAO,QAAQ,aACd,IAAI,SAAS,oBAAoB,KAAK,IAAI,SAAS,iBAAiB;AAAA,IAC7E;AAGA,UAAM,YACF,gBAAgB,eAAe,SAAS,yBAClC,yBACA,eAAe,SACd,eAAe,gBAAgB,QAAQ,SAAY;AAE9D,UAAM,UAAwB;AAAA,MAC1B,cAAc;AAAA,MACd,GAAG;AAAA,MACH,GAAI,YAAY,EAAE,MAAM,UAAU,IAAI,CAAC;AAAA,IAC3C;AAEA,QAAI,QAAQ,SAAS,wBAAwB,CAAC,QAAQ,aAAa;AAC/D,cAAQ,cAAc;AAAA,IAC1B;AAEA,QAAI,EAAE,wBAAwB,UAAU;AACpC,YAAM,YACF,OAAO,WAAW,WAAW,WAAW,WAAW,SAAS,WAAW,OAAO;AAElF,cAAQ,qBAAqB,MAAM,6BAA6B,WAAW,SAAS;AAAA,IACxF;AAEA,cAAU,QAAQ,8BAA8B;AAAA,MAC5C;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AAED,WAAO,cAAc,OAAO,gBAAgB,YAAY,SAAS,EAAE;AAAA,EACvE;AACJ,GApD+B;;;ACDxB,IAAM,mBAAmB,wBAAC,kBAAwC;AACrE,SAAO,OACH,YACA,YACA,WAAkC,CAAC,MAClC;AACD,UAAM,UAAiC,EAAE,GAAG,SAAS;AAErD,QAAI,CAAC,QAAQ,QAAQ;AACjB,cAAQ,SAAS,CAAC,OAAO;AACzB,UAAI,WAAW,iBAAkB,SAAQ,OAAO,KAAK,kBAAkB;AACvE,UAAI,WAAW,iBAAkB,SAAQ,OAAO,KAAK,kBAAkB;AAAA,IAC3E;AAEA,WAAO,cAAc,OAAO,iBAAiB,YAAY,OAAO;AAAA,EACpE;AACJ,GAhBgC;;;ACCzB,IAAM,oBAAoB,wBAAC,kBAAwC;AACtE,SAAO,OACH,WACA,cACA,iBAAwC,CAAC,MACxC;AACD,UAAM,KAAK,UAAU,GAAG,QAAQ;AAEhC,QAAI,CAAC,GAAI,OAAM,IAAI,MAAM,wDAAwD;AAGjF,UAAM,WAAW,MAAM,QAAQ,aAAa,UAAU,CAAC,IACjD,aAAa,UAAU,IACvB,CAAC,aAAa,UAAU,CAAC;AAC/B,UAAM,eAAe,SAAS;AAAA,MAAK,SAC/B,OAAO,QAAQ,aAAa,IAAI,SAAS,oBAAoB,KAAK,IAAI,SAAS,iBAAiB;AAAA,IACpG;AAIA,UAAM,YAAY,gBAAgB,eAAe,SAAS,yBACpD,yBACA,eAAe,QAAQ;AAE7B,UAAM,UAAU;AAAA,MACZ,GAAI,eAAe,gBAAgB,QAC7B,CAAC,IACD,EAAE,cAAc,mBAAmB,MAAM,UAAU;AAAA,MACzD,GAAG;AAAA,IACP;AAEA,QAAI,EAAE,wBAAwB,UAAU;AACpC,cAAQ,qBAAqB,MAAM;AAAA,QAC/B;AAAA,QACA,UAAU,GAAG,IAAI;AAAA,MACrB;AAAA,IACJ;AAEA,WAAO,cAAc,OAAO,kBAAkB,cAAc,SAAS,EAAE;AAAA,EAC3E;AACJ,GAxCiC;;;ACD1B,IAAM,qBAAqB,wBAAC,kBAAwC;AACvE,SAAO,OACH,YACA,cACA,UAAiC,CAAC,MACjC;AACD,WAAO,cAAc,OAAO,mBAAmB,cAAc,OAAO;AAAA,EACxE;AACJ,GARkC;;;ACM3B,IAAM,cAAc,wBAAC,cAA8C;AACtE,SAAO;AAAA,IACH,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aACI;AAAA,IACJ,SAAS;AAAA,MACL,iBAAiB,gBAAgB,SAAS;AAAA,MAC1C,kBAAkB,iBAAiB,SAAS;AAAA,MAC5C,mBAAmB,kBAAkB,SAAS;AAAA,MAC9C,oBAAoB,mBAAmB,SAAS;AAAA,MAChD,WAAW,wBAAC,YAAY,UAAU,8CAA8C;AAC5E,cAAM,MAAM,WAAW,GAAG,IAAI;AAE9B,eAAO;AAAA,UACH,YAAY,CAAC,sCAAsC;AAAA,UACnD,IAAI,YAAY,OAAO,WAAW,CAAC;AAAA,UACnC,MAAM,CAAC,sBAAsB;AAAA,UAC7B,QAAQ;AAAA,UACR,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,UAClC,mBAAmB,EAAE,IAAI,QAAQ;AAAA,QACrC;AAAA,MACJ,GAXW;AAAA,MAYX,WAAW,8BAAO,YAAY,gBAAgB;AAC1C,cAAM,aACF,eACC,MAAM,WAAW,OAAO,gBAAgB,WAAW,OAAO,UAAU,CAAC;AAE1E,cAAM,MAAM,WAAW,GAAG,IAAI;AAE9B,eAAO;AAAA,UACH,YAAY,CAAC,sCAAsC;AAAA,UACnD,MAAM,CAAC,wBAAwB;AAAA,UAC/B,QAAQ;AAAA,UACR,sBAAsB;AAAA,QAC1B;AAAA,MACJ,GAbW;AAAA,MAcX,cAAc,8BAAO,YAAY,UAAU,CAAC,MAAM;AAC9C,cAAM,MAAM,WAAW,GAAG,IAAI;AAC9B,cAAM,aAAyB;AAAA,UAC3B,YAAY,CAAC,sCAAsC;AAAA,UACnD,MAAM,CAAC,wBAAwB;AAAA,UAC/B,QAAQ;AAAA,QACZ;AAEA,eAAO,WAAW,OAAO,kBAAkB,YAAY;AAAA,UACnD,cAAc;AAAA,UACd,GAAG;AAAA,QACP,CAAC;AAAA,MACL,GAZc;AAAA,IAalB;AAAA,EACJ;AACJ,GApD2B;",
|
|
6
6
|
"names": ["encode", "i", "j", "decode", "encode", "decode"]
|
package/package.json
CHANGED
|
@@ -1,58 +1,60 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
}
|
|
2
|
+
"name": "@learncard/vc-plugin",
|
|
3
|
+
"version": "1.5.6",
|
|
4
|
+
"description": "",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/vc-plugin.esm.js",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"development": "./src/index.ts",
|
|
11
|
+
"import": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"default": "./dist/vc-plugin.esm.js"
|
|
14
|
+
},
|
|
15
|
+
"require": {
|
|
16
|
+
"types": "./dist/index.d.cts",
|
|
17
|
+
"default": "./dist/index.cjs"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"dist",
|
|
23
|
+
"src"
|
|
24
|
+
],
|
|
25
|
+
"scripts": {
|
|
26
|
+
"build": "node ./scripts/build.mjs && shx cp ./scripts/mixedEntypoint.js ./dist/index.cjs && tsc --p tsconfig.json && shx cp ./dist/index.d.ts ./dist/index.d.cts",
|
|
27
|
+
"test": "jest --passWithNoTests",
|
|
28
|
+
"test:watch": "jest --watch",
|
|
29
|
+
"test:coverage": "jest --silent --ci --coverage --coverageReporters=\"text\" --coverageReporters=\"text-summary\""
|
|
30
|
+
},
|
|
31
|
+
"author": "Learning Economy Foundation (www.learningeconomy.io)",
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"homepage": "https://github.com/learningeconomy/LearnCard/tree/main/packages/plugins/vc/README.md",
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "https://github.com/learningeconomy/LearnCard"
|
|
37
|
+
},
|
|
38
|
+
"bugs": {
|
|
39
|
+
"url": "https://github.com/learningeconomy/LearnCard/issues"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@types/jest": "^29.2.2",
|
|
43
|
+
"@types/node": "^17.0.31",
|
|
44
|
+
"aqu": "0.4.3",
|
|
45
|
+
"esbuild": "^0.27.1",
|
|
46
|
+
"esbuild-jest": "^0.5.0",
|
|
47
|
+
"esbuild-plugin-copy": "^1.3.0",
|
|
48
|
+
"jest": "^29.3.0",
|
|
49
|
+
"shx": "^0.3.4",
|
|
50
|
+
"ts-jest": "^29.0.3"
|
|
51
|
+
},
|
|
52
|
+
"types": "./dist/index.d.ts",
|
|
53
|
+
"dependencies": {
|
|
54
|
+
"@learncard/core": "9.4.26",
|
|
55
|
+
"@learncard/didkit-plugin": "^1.9.6",
|
|
56
|
+
"@learncard/types": "5.17.5",
|
|
57
|
+
"multiformats": "^11.0.1"
|
|
58
|
+
},
|
|
59
|
+
"sideEffects": false
|
|
60
|
+
}
|
package/src/helpers.ts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { VCImplicitLearnCard } from './types';
|
|
2
|
+
import { base58btc } from 'multiformats/bases/base58';
|
|
3
|
+
import { base64url } from 'multiformats/bases/base64';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Determines the default verification method to use for a given did by resolving it and looking
|
|
7
|
+
* for a keypair that matches the default keypair for the LearnCard
|
|
8
|
+
*/
|
|
9
|
+
export const getDefaultVerificationMethod = async (
|
|
10
|
+
learnCard: VCImplicitLearnCard,
|
|
11
|
+
issuerDid: string
|
|
12
|
+
) => {
|
|
13
|
+
const kp = learnCard.id.keypair();
|
|
14
|
+
|
|
15
|
+
if (!kp) {
|
|
16
|
+
throw new Error('Cannot get default verification method: unable to get subject keypair');
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const issuerDidDoc = await learnCard.invoke.resolveDid(issuerDid);
|
|
20
|
+
|
|
21
|
+
const toX = (vm: any): string | undefined => {
|
|
22
|
+
if (!vm || typeof vm === 'string') return undefined;
|
|
23
|
+
if (vm.publicKeyJwk?.x) return vm.publicKeyJwk.x;
|
|
24
|
+
if (vm.publicKeyMultibase) {
|
|
25
|
+
const decoded = base58btc.decode(vm.publicKeyMultibase);
|
|
26
|
+
const ed = decoded[0] === 0xed && decoded[1] === 0x01 ? decoded.slice(2) : decoded;
|
|
27
|
+
return base64url.encode(ed).slice(1);
|
|
28
|
+
}
|
|
29
|
+
if (vm.publicKeyBase58) {
|
|
30
|
+
const ed = base58btc.baseDecode(vm.publicKeyBase58);
|
|
31
|
+
return base64url.encode(ed).slice(1);
|
|
32
|
+
}
|
|
33
|
+
return undefined;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const verificationMethodEntry =
|
|
37
|
+
typeof issuerDidDoc === 'string'
|
|
38
|
+
? undefined
|
|
39
|
+
: issuerDidDoc?.verificationMethod?.find(entry => toX(entry as any) === kp.x);
|
|
40
|
+
|
|
41
|
+
const verificationMethod =
|
|
42
|
+
(typeof verificationMethodEntry !== 'string' && verificationMethodEntry?.id) ||
|
|
43
|
+
(await learnCard.invoke.didToVerificationMethod(issuerDid));
|
|
44
|
+
|
|
45
|
+
return verificationMethod;
|
|
46
|
+
};
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
jest.mock('multiformats/bases/base58', () => ({ base58btc: {} }), { virtual: true });
|
|
2
|
+
jest.mock('multiformats/bases/base64', () => ({ base64url: {} }), { virtual: true });
|
|
3
|
+
|
|
4
|
+
import { issueCredential } from './issueCredential';
|
|
5
|
+
|
|
6
|
+
type Keypair = {
|
|
7
|
+
kty: string;
|
|
8
|
+
crv: string;
|
|
9
|
+
x: string;
|
|
10
|
+
d: string;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
type Credential = {
|
|
14
|
+
'@context': string[];
|
|
15
|
+
type: string[];
|
|
16
|
+
issuer: string;
|
|
17
|
+
validFrom: string;
|
|
18
|
+
credentialSubject: { id: string };
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
type ProofOptionsForTest = {
|
|
22
|
+
type?: string;
|
|
23
|
+
proofPurpose?: string;
|
|
24
|
+
cryptosuite?: string;
|
|
25
|
+
proofFormat?: string;
|
|
26
|
+
verificationMethod?: string;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const keypair: Keypair = {
|
|
30
|
+
kty: 'OKP',
|
|
31
|
+
crv: 'Ed25519',
|
|
32
|
+
x: 'issuer-key',
|
|
33
|
+
d: 'issuer-secret',
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const credential: Credential = {
|
|
37
|
+
'@context': ['https://www.w3.org/ns/credentials/v2'],
|
|
38
|
+
type: ['VerifiableCredential'],
|
|
39
|
+
issuer: 'did:example:issuer',
|
|
40
|
+
validFrom: '2026-01-01T00:00:00Z',
|
|
41
|
+
credentialSubject: { id: 'did:example:subject' },
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const getLearnCard = () => {
|
|
45
|
+
const issueCredentialMock = jest.fn(
|
|
46
|
+
async (
|
|
47
|
+
unsignedCredential: Credential,
|
|
48
|
+
_options: ProofOptionsForTest,
|
|
49
|
+
_keypair: Keypair
|
|
50
|
+
) => ({
|
|
51
|
+
...unsignedCredential,
|
|
52
|
+
proof: {
|
|
53
|
+
type: 'DataIntegrityProof',
|
|
54
|
+
created: '2026-01-01T00:00:00Z',
|
|
55
|
+
proofPurpose: 'assertionMethod',
|
|
56
|
+
verificationMethod: 'did:example:issuer#key-1',
|
|
57
|
+
},
|
|
58
|
+
})
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
const initLearnCard = {
|
|
62
|
+
invoke: {
|
|
63
|
+
issueCredential: issueCredentialMock,
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
const learnCard = {
|
|
68
|
+
id: {
|
|
69
|
+
keypair: () => keypair,
|
|
70
|
+
},
|
|
71
|
+
invoke: {
|
|
72
|
+
didToVerificationMethod: jest.fn(async () => 'did:example:issuer#key-1'),
|
|
73
|
+
resolveDid: jest.fn(async () => ({ verificationMethod: [] })),
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
return { initLearnCard, issueCredentialMock, learnCard };
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
describe('issueCredential', () => {
|
|
81
|
+
test('defaults to DataIntegrityProof with eddsa-rdfc-2022', async () => {
|
|
82
|
+
const { initLearnCard, issueCredentialMock, learnCard } = getLearnCard();
|
|
83
|
+
|
|
84
|
+
await issueCredential(initLearnCard as never)(learnCard as never, credential as never);
|
|
85
|
+
|
|
86
|
+
expect(issueCredentialMock).toHaveBeenCalledWith(
|
|
87
|
+
credential,
|
|
88
|
+
expect.objectContaining({
|
|
89
|
+
type: 'DataIntegrityProof',
|
|
90
|
+
cryptosuite: 'eddsa-rdfc-2022',
|
|
91
|
+
proofPurpose: 'assertionMethod',
|
|
92
|
+
verificationMethod: 'did:example:issuer#key-1',
|
|
93
|
+
}),
|
|
94
|
+
keypair
|
|
95
|
+
);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
test('does not add a cryptosuite for explicit non-DataIntegrity proofs', async () => {
|
|
99
|
+
const { initLearnCard, issueCredentialMock, learnCard } = getLearnCard();
|
|
100
|
+
|
|
101
|
+
await issueCredential(initLearnCard as never)(learnCard as never, credential as never, {
|
|
102
|
+
type: 'Ed25519Signature2020',
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
const options = issueCredentialMock.mock.calls[0][1] as ProofOptionsForTest;
|
|
106
|
+
|
|
107
|
+
expect(options.type).toBe('Ed25519Signature2020');
|
|
108
|
+
expect(options.cryptosuite).toBeUndefined();
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
test('preserves explicit DataIntegrity cryptosuite overrides', async () => {
|
|
112
|
+
const { initLearnCard, issueCredentialMock, learnCard } = getLearnCard();
|
|
113
|
+
|
|
114
|
+
await issueCredential(initLearnCard as never)(learnCard as never, credential as never, {
|
|
115
|
+
type: 'DataIntegrityProof',
|
|
116
|
+
cryptosuite: 'json-eddsa-2022',
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
const options = issueCredentialMock.mock.calls[0][1] as ProofOptionsForTest;
|
|
120
|
+
|
|
121
|
+
expect(options.cryptosuite).toBe('json-eddsa-2022');
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
test('leaves type unset and does not inject a cryptosuite for JWT proof format', async () => {
|
|
125
|
+
const { initLearnCard, issueCredentialMock, learnCard } = getLearnCard();
|
|
126
|
+
|
|
127
|
+
await issueCredential(initLearnCard as never)(learnCard as never, credential as never, {
|
|
128
|
+
proofFormat: 'jwt',
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
const options = issueCredentialMock.mock.calls[0][1] as ProofOptionsForTest;
|
|
132
|
+
|
|
133
|
+
expect(options.type).toBeUndefined();
|
|
134
|
+
expect(options.cryptosuite).toBeUndefined();
|
|
135
|
+
expect(options.proofFormat).toBe('jwt');
|
|
136
|
+
});
|
|
137
|
+
});
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { UnsignedVC } from '@learncard/types';
|
|
2
|
+
|
|
3
|
+
import { ProofOptions } from '@learncard/didkit-plugin';
|
|
4
|
+
import { VCDependentLearnCard, VCImplicitLearnCard } from './types';
|
|
5
|
+
import { getDefaultVerificationMethod } from './helpers';
|
|
6
|
+
|
|
7
|
+
export const issueCredential = (initLearnCard: VCDependentLearnCard) => {
|
|
8
|
+
return async (
|
|
9
|
+
learnCard: VCImplicitLearnCard,
|
|
10
|
+
credential: UnsignedVC,
|
|
11
|
+
signingOptions: Partial<ProofOptions> = {}
|
|
12
|
+
) => {
|
|
13
|
+
const kp = learnCard.id.keypair();
|
|
14
|
+
|
|
15
|
+
if (!kp) throw new Error('Cannot issue credential: Could not get subject keypair');
|
|
16
|
+
|
|
17
|
+
const contexts = Array.isArray(credential['@context'])
|
|
18
|
+
? credential['@context']
|
|
19
|
+
: [credential['@context']];
|
|
20
|
+
|
|
21
|
+
const hasV2Context = contexts.some(
|
|
22
|
+
ctx =>
|
|
23
|
+
typeof ctx === 'string' &&
|
|
24
|
+
(ctx.includes('/ns/credentials/v2') || ctx.includes('/credentials/v2'))
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
// Ed25519Signature2018 is incompatible with credentials v2.
|
|
28
|
+
const proofType =
|
|
29
|
+
hasV2Context && signingOptions.type === 'Ed25519Signature2018'
|
|
30
|
+
? 'Ed25519Signature2020'
|
|
31
|
+
: signingOptions.type ??
|
|
32
|
+
(signingOptions.proofFormat === 'jwt' ? undefined : 'DataIntegrityProof');
|
|
33
|
+
|
|
34
|
+
const options: ProofOptions = {
|
|
35
|
+
proofPurpose: 'assertionMethod',
|
|
36
|
+
...signingOptions,
|
|
37
|
+
...(proofType ? { type: proofType } : {}),
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
if (options.type === 'DataIntegrityProof' && !options.cryptosuite) {
|
|
41
|
+
options.cryptosuite = 'eddsa-rdfc-2022';
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (!('verificationMethod' in options)) {
|
|
45
|
+
const issuerDid =
|
|
46
|
+
typeof credential.issuer === 'string' ? credential.issuer : credential.issuer.id!;
|
|
47
|
+
|
|
48
|
+
options.verificationMethod = await getDefaultVerificationMethod(learnCard, issuerDid);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
learnCard.debug?.('Signing with these options', {
|
|
52
|
+
credential,
|
|
53
|
+
options,
|
|
54
|
+
kp,
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
return initLearnCard.invoke.issueCredential(credential, options, kp);
|
|
58
|
+
};
|
|
59
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { UnsignedVP } from '@learncard/types';
|
|
2
|
+
|
|
3
|
+
import { ProofOptions } from '@learncard/didkit-plugin';
|
|
4
|
+
import { VCDependentLearnCard, VCImplicitLearnCard } from './types';
|
|
5
|
+
import { getDefaultVerificationMethod } from './helpers';
|
|
6
|
+
|
|
7
|
+
export const issuePresentation = (initLearnCard: VCDependentLearnCard) => {
|
|
8
|
+
return async (
|
|
9
|
+
learnCard: VCImplicitLearnCard,
|
|
10
|
+
presentation: UnsignedVP,
|
|
11
|
+
signingOptions: Partial<ProofOptions> = {}
|
|
12
|
+
) => {
|
|
13
|
+
const kp = learnCard.id.keypair();
|
|
14
|
+
|
|
15
|
+
if (!kp) throw new Error('Cannot issue credential: Could not get subject keypair');
|
|
16
|
+
|
|
17
|
+
// Check if presentation uses v2 context
|
|
18
|
+
const contexts = Array.isArray(presentation['@context'])
|
|
19
|
+
? presentation['@context']
|
|
20
|
+
: [presentation['@context']];
|
|
21
|
+
const hasV2Context = contexts.some(ctx =>
|
|
22
|
+
typeof ctx === 'string' && (ctx.includes('/ns/credentials/v2') || ctx.includes('/credentials/v2'))
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
// For v2 contexts, upgrade Ed25519Signature2018 to Ed25519Signature2020
|
|
26
|
+
// Ed25519Signature2018 is incompatible with credentials v2
|
|
27
|
+
const proofType = hasV2Context && signingOptions.type === 'Ed25519Signature2018'
|
|
28
|
+
? 'Ed25519Signature2020'
|
|
29
|
+
: signingOptions.type ?? 'Ed25519Signature2020';
|
|
30
|
+
|
|
31
|
+
const options = {
|
|
32
|
+
...(signingOptions.proofFormat === 'jwt'
|
|
33
|
+
? {}
|
|
34
|
+
: { proofPurpose: 'assertionMethod', type: proofType }),
|
|
35
|
+
...signingOptions,
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
if (!('verificationMethod' in options)) {
|
|
39
|
+
options.verificationMethod = await getDefaultVerificationMethod(
|
|
40
|
+
learnCard,
|
|
41
|
+
learnCard.id.did()
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return initLearnCard.invoke.issuePresentation(presentation, options, kp);
|
|
46
|
+
};
|
|
47
|
+
};
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import {
|
|
2
|
+
UnsignedVC,
|
|
3
|
+
VC,
|
|
4
|
+
UnsignedVP,
|
|
5
|
+
VP,
|
|
6
|
+
VerificationCheck,
|
|
7
|
+
DidDocument,
|
|
8
|
+
JWKWithPrivateKey,
|
|
9
|
+
} from '@learncard/types';
|
|
10
|
+
import { Plugin, LearnCard } from '@learncard/core';
|
|
11
|
+
import { ProofOptions, InputMetadata } from '@learncard/didkit-plugin';
|
|
12
|
+
|
|
13
|
+
/** @group VC Plugin */
|
|
14
|
+
export type VCPluginDependentMethods = {
|
|
15
|
+
keyToVerificationMethod: (type: string, keypair: JWKWithPrivateKey) => Promise<string>;
|
|
16
|
+
didToVerificationMethod: (did: string) => Promise<string>;
|
|
17
|
+
issueCredential: (
|
|
18
|
+
credential: UnsignedVC,
|
|
19
|
+
options: ProofOptions,
|
|
20
|
+
keypair: JWKWithPrivateKey
|
|
21
|
+
) => Promise<VC>;
|
|
22
|
+
verifyCredential: (credential: VC, options?: ProofOptions) => Promise<VerificationCheck>;
|
|
23
|
+
issuePresentation: (
|
|
24
|
+
presentation: UnsignedVP,
|
|
25
|
+
options: ProofOptions,
|
|
26
|
+
keypair: JWKWithPrivateKey
|
|
27
|
+
) => Promise<VP>;
|
|
28
|
+
verifyPresentation: (
|
|
29
|
+
presentation: VP | string,
|
|
30
|
+
options?: ProofOptions
|
|
31
|
+
) => Promise<VerificationCheck>;
|
|
32
|
+
resolveDid: (did: string, inputMetadata?: InputMetadata) => Promise<DidDocument>;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/** @group VC Plugin */
|
|
36
|
+
export type VCPluginMethods = {
|
|
37
|
+
issueCredential: (
|
|
38
|
+
credential: UnsignedVC,
|
|
39
|
+
signingOptions?: Partial<ProofOptions>
|
|
40
|
+
) => Promise<VC>;
|
|
41
|
+
verifyCredential: (
|
|
42
|
+
credential: VC,
|
|
43
|
+
options?: Partial<ProofOptions>
|
|
44
|
+
) => Promise<VerificationCheck>;
|
|
45
|
+
issuePresentation: (
|
|
46
|
+
credential: UnsignedVP,
|
|
47
|
+
signingOptions?: Partial<ProofOptions>
|
|
48
|
+
) => Promise<VP>;
|
|
49
|
+
verifyPresentation: (
|
|
50
|
+
presentation: VP | string,
|
|
51
|
+
options?: Partial<ProofOptions>
|
|
52
|
+
) => Promise<VerificationCheck>;
|
|
53
|
+
getTestVc: (subject?: string) => UnsignedVC;
|
|
54
|
+
getTestVp: (credential?: VC) => Promise<UnsignedVP>;
|
|
55
|
+
getDidAuthVp: (options?: ProofOptions) => Promise<VP | string>;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/** @group VC Plugin */
|
|
59
|
+
export type VCDependentLearnCard = LearnCard<any, any, VCPluginDependentMethods>;
|
|
60
|
+
|
|
61
|
+
/** @group VC Plugin */
|
|
62
|
+
export type VCImplicitLearnCard = LearnCard<any, 'id', VCPluginMethods & VCPluginDependentMethods>;
|
|
63
|
+
|
|
64
|
+
/** @group VC Plugin */
|
|
65
|
+
export type VerifyExtension = {
|
|
66
|
+
verifyCredential: (
|
|
67
|
+
credential: VC,
|
|
68
|
+
options?: Partial<ProofOptions>
|
|
69
|
+
) => Promise<VerificationCheck>;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
/** @group VC Plugin */
|
|
73
|
+
export type VCPlugin = Plugin<'VC', any, VCPluginMethods, 'id', VCPluginDependentMethods>;
|
package/src/vc.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { issueCredential } from './issueCredential';
|
|
2
|
+
import { verifyCredential } from './verifyCredential';
|
|
3
|
+
import { issuePresentation } from './issuePresentation';
|
|
4
|
+
import { verifyPresentation } from './verifyPresentation';
|
|
5
|
+
|
|
6
|
+
import { VCDependentLearnCard, VCPlugin } from './types';
|
|
7
|
+
import { UnsignedVP } from '@learncard/types';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @group Plugins
|
|
11
|
+
*/
|
|
12
|
+
export const getVCPlugin = (learnCard: VCDependentLearnCard): VCPlugin => {
|
|
13
|
+
return {
|
|
14
|
+
name: 'VC',
|
|
15
|
+
displayName: 'VC',
|
|
16
|
+
description:
|
|
17
|
+
'Handles the infrastructure needed to issue and verify credentials and presentations',
|
|
18
|
+
methods: {
|
|
19
|
+
issueCredential: issueCredential(learnCard),
|
|
20
|
+
verifyCredential: verifyCredential(learnCard),
|
|
21
|
+
issuePresentation: issuePresentation(learnCard),
|
|
22
|
+
verifyPresentation: verifyPresentation(learnCard),
|
|
23
|
+
getTestVc: (_learnCard, subject = 'did:example:d23dd687a7dc6787646f2eb98d0') => {
|
|
24
|
+
const did = _learnCard.id.did();
|
|
25
|
+
|
|
26
|
+
return {
|
|
27
|
+
'@context': ['https://www.w3.org/ns/credentials/v2'],
|
|
28
|
+
id: `urn:uuid:${crypto.randomUUID()}`,
|
|
29
|
+
type: ['VerifiableCredential'],
|
|
30
|
+
issuer: did,
|
|
31
|
+
validFrom: new Date().toISOString(),
|
|
32
|
+
credentialSubject: { id: subject },
|
|
33
|
+
};
|
|
34
|
+
},
|
|
35
|
+
getTestVp: async (_learnCard, _credential) => {
|
|
36
|
+
const credential =
|
|
37
|
+
_credential ||
|
|
38
|
+
(await _learnCard.invoke.issueCredential(_learnCard.invoke.getTestVc()));
|
|
39
|
+
|
|
40
|
+
const did = _learnCard.id.did();
|
|
41
|
+
|
|
42
|
+
return {
|
|
43
|
+
'@context': ['https://www.w3.org/ns/credentials/v2'],
|
|
44
|
+
type: ['VerifiablePresentation'],
|
|
45
|
+
holder: did,
|
|
46
|
+
verifiableCredential: credential,
|
|
47
|
+
};
|
|
48
|
+
},
|
|
49
|
+
getDidAuthVp: async (_learnCard, options = {}) => {
|
|
50
|
+
const did = _learnCard.id.did();
|
|
51
|
+
const unsignedVP: UnsignedVP = {
|
|
52
|
+
'@context': ['https://www.w3.org/ns/credentials/v2'],
|
|
53
|
+
type: ['VerifiablePresentation'],
|
|
54
|
+
holder: did,
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
return _learnCard.invoke.issuePresentation(unsignedVP, {
|
|
58
|
+
proofPurpose: 'authentication',
|
|
59
|
+
...options,
|
|
60
|
+
});
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { VC } from '@learncard/types';
|
|
2
|
+
|
|
3
|
+
import { ProofOptions } from '@learncard/didkit-plugin';
|
|
4
|
+
import { VCDependentLearnCard, VCImplicitLearnCard } from './types';
|
|
5
|
+
|
|
6
|
+
export const verifyCredential = (initLearnCard: VCDependentLearnCard) => {
|
|
7
|
+
return async (
|
|
8
|
+
_learnCard: VCImplicitLearnCard,
|
|
9
|
+
credential: VC,
|
|
10
|
+
_options: Partial<ProofOptions> = {}
|
|
11
|
+
) => {
|
|
12
|
+
const options: Partial<ProofOptions> = { ..._options };
|
|
13
|
+
|
|
14
|
+
if (!options.checks) {
|
|
15
|
+
options.checks = ['proof'];
|
|
16
|
+
if (credential.credentialStatus) options.checks.push('credentialStatus');
|
|
17
|
+
if (credential.credentialSchema) options.checks.push('credentialSchema');
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return initLearnCard.invoke.verifyCredential(credential, options);
|
|
21
|
+
};
|
|
22
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { VP } from '@learncard/types';
|
|
2
|
+
|
|
3
|
+
import { ProofOptions } from '@learncard/didkit-plugin';
|
|
4
|
+
import { VCDependentLearnCard, VCImplicitLearnCard } from './types';
|
|
5
|
+
|
|
6
|
+
export const verifyPresentation = (initLearnCard: VCDependentLearnCard) => {
|
|
7
|
+
return async (
|
|
8
|
+
_learnCard: VCImplicitLearnCard,
|
|
9
|
+
presentation: VP | string,
|
|
10
|
+
options: Partial<ProofOptions> = {}
|
|
11
|
+
) => {
|
|
12
|
+
return initLearnCard.invoke.verifyPresentation(presentation, options);
|
|
13
|
+
};
|
|
14
|
+
};
|