@fedify/vocab-runtime 2.0.8 → 2.0.10
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/deno.json +1 -1
- package/dist/{chunk-CUT6urMc.cjs → chunk-CKQMccvm.cjs} +7 -9
- package/dist/jsonld.cjs +4 -5
- package/dist/jsonld.d.cts +3 -4
- package/dist/jsonld.d.ts +2 -2
- package/dist/jsonld.js +1 -3
- package/dist/mod.cjs +56 -121
- package/dist/mod.d.cts +1 -5
- package/dist/mod.d.ts +1 -5
- package/dist/mod.js +32 -100
- package/dist/tests/{chunk-DWy1uDak.cjs → chunk-Do9eywBl.cjs} +13 -17
- package/dist/tests/docloader.test.cjs +65 -106
- package/dist/tests/{docloader.test.js → docloader.test.mjs} +60 -107
- package/dist/tests/internal/multicodec.test.cjs +5 -7
- package/dist/tests/internal/{multicodec.test.js → multicodec.test.mjs} +3 -4
- package/dist/tests/key.test.cjs +39 -70
- package/dist/tests/{key.test.js → key.test.mjs} +32 -62
- package/dist/tests/langstr.test.cjs +6 -8
- package/dist/tests/{langstr.test.js → langstr.test.mjs} +2 -4
- package/dist/tests/{link-CdFPEo9O.cjs → link-B6ZWBZhf.cjs} +6 -8
- package/dist/tests/{link-Ck2yj4dH.js → link-B8JGXSS2.mjs} +1 -2
- package/dist/tests/link.test.cjs +5 -7
- package/dist/tests/{link.test.js → link.test.mjs} +3 -4
- package/dist/tests/multibase/multibase.test.cjs +10 -17
- package/dist/tests/multibase/{multibase.test.js → multibase.test.mjs} +10 -18
- package/dist/tests/{multibase-B2D6B0V4.cjs → multibase-CgYqpk4Z.cjs} +43 -49
- package/dist/tests/{multibase-BdHCGO4H.js → multibase-jcKrOpuU.mjs} +5 -12
- package/dist/tests/{multicodec-mHcRzSGY.cjs → multicodec-DeYop8xg.cjs} +16 -18
- package/dist/tests/{multicodec-DvC5xnX2.js → multicodec-aqbZnrNi.mjs} +1 -2
- package/dist/tests/{request-Cqx2eUpt.js → request-BaPLwjp1.mjs} +4 -45
- package/dist/tests/{request-D2-F2dMS.cjs → request-DIHEQLwz.cjs} +38 -72
- package/dist/tests/request.test.cjs +23 -24
- package/dist/tests/request.test.mjs +42 -0
- package/dist/tests/{url-C5Vs9nYh.cjs → url-Cr2K-wzd.cjs} +31 -35
- package/dist/tests/{url-fW_DHbih.js → url-Djghaq0m.mjs} +3 -7
- package/dist/tests/url.test.cjs +5 -7
- package/dist/tests/{url.test.js → url.test.mjs} +3 -4
- package/package.json +3 -3
- package/dist/tests/request.test.js +0 -43
- /package/dist/tests/{docloader.test.d.ts → docloader.test.d.mts} +0 -0
- /package/dist/tests/internal/{multicodec.test.d.ts → multicodec.test.d.mts} +0 -0
- /package/dist/tests/{key.test.d.ts → key.test.d.mts} +0 -0
- /package/dist/tests/{langstr.test.d.ts → langstr.test.d.mts} +0 -0
- /package/dist/tests/{link.test.d.ts → link.test.d.mts} +0 -0
- /package/dist/tests/multibase/{multibase.test.d.ts → multibase.test.d.mts} +0 -0
- /package/dist/tests/{request.test.d.ts → request.test.d.mts} +0 -0
- /package/dist/tests/{url.test.d.ts → url.test.d.mts} +0 -0
package/dist/tests/key.test.cjs
CHANGED
|
@@ -1,22 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
const require_multicodec = require(
|
|
3
|
-
const require_multibase = require(
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
require("./chunk-Do9eywBl.cjs");
|
|
2
|
+
const require_multicodec = require("./multicodec-DeYop8xg.cjs");
|
|
3
|
+
const require_multibase = require("./multibase-CgYqpk4Z.cjs");
|
|
4
|
+
let node_assert = require("node:assert");
|
|
5
|
+
let node_test = require("node:test");
|
|
6
|
+
let asn1js = require("asn1js");
|
|
7
|
+
let byte_encodings_base64 = require("byte-encodings/base64");
|
|
8
|
+
let byte_encodings_base64url = require("byte-encodings/base64url");
|
|
9
|
+
let node_crypto = require("node:crypto");
|
|
10
|
+
let pkijs = require("pkijs");
|
|
12
11
|
//#region src/jwk.ts
|
|
13
12
|
function validateCryptoKey(key, type) {
|
|
14
13
|
if (type != null && key.type !== type) throw new TypeError(`The key is not a ${type} key.`);
|
|
15
14
|
if (!key.extractable) throw new TypeError("The key is not extractable.");
|
|
16
15
|
if (key.algorithm.name !== "RSASSA-PKCS1-v1_5" && key.algorithm.name !== "Ed25519") throw new TypeError("Currently only RSASSA-PKCS1-v1_5 and Ed25519 keys are supported. More algorithms will be added in the future!");
|
|
17
16
|
if (key.algorithm.name === "RSASSA-PKCS1-v1_5") {
|
|
18
|
-
|
|
19
|
-
if (algorithm.hash.name !== "SHA-256") throw new TypeError("For compatibility with the existing Fediverse software (e.g., Mastodon), hash algorithm for RSASSA-PKCS1-v1_5 keys must be SHA-256.");
|
|
17
|
+
if (key.algorithm.hash.name !== "SHA-256") throw new TypeError("For compatibility with the existing Fediverse software (e.g., Mastodon), hash algorithm for RSASSA-PKCS1-v1_5 keys must be SHA-256.");
|
|
20
18
|
}
|
|
21
19
|
}
|
|
22
20
|
async function exportJwk(key) {
|
|
@@ -41,7 +39,6 @@ async function importJwk(jwk, type) {
|
|
|
41
39
|
validateCryptoKey(key, type);
|
|
42
40
|
return key;
|
|
43
41
|
}
|
|
44
|
-
|
|
45
42
|
//#endregion
|
|
46
43
|
//#region src/key.ts
|
|
47
44
|
const algorithms = {
|
|
@@ -66,8 +63,7 @@ async function importSpki(pem) {
|
|
|
66
63
|
} catch (_) {
|
|
67
64
|
throw new TypeError("Invalid PEM-SPKI format.");
|
|
68
65
|
}
|
|
69
|
-
const
|
|
70
|
-
const oid = pki.algorithm.algorithmId;
|
|
66
|
+
const oid = pkijs.PublicKeyInfo.fromBER(spki).algorithm.algorithmId;
|
|
71
67
|
const algorithm = algorithms[oid];
|
|
72
68
|
if (algorithm == null) throw new TypeError("Unsupported algorithm: " + oid);
|
|
73
69
|
return await crypto.subtle.importKey("spki", spki, algorithm, true, ["verify"]);
|
|
@@ -81,8 +77,7 @@ async function importSpki(pem) {
|
|
|
81
77
|
*/
|
|
82
78
|
async function exportSpki(key) {
|
|
83
79
|
validateCryptoKey(key);
|
|
84
|
-
|
|
85
|
-
let pem = (0, byte_encodings_base64.encodeBase64)(spki);
|
|
80
|
+
let pem = (0, byte_encodings_base64.encodeBase64)(await crypto.subtle.exportKey("spki", key));
|
|
86
81
|
pem = (pem.match(/.{1,64}/g) || []).join("\n");
|
|
87
82
|
return `-----BEGIN PUBLIC KEY-----\n${pem}\n-----END PUBLIC KEY-----\n`;
|
|
88
83
|
}
|
|
@@ -94,16 +89,14 @@ async function exportSpki(key) {
|
|
|
94
89
|
* @since 1.5.0
|
|
95
90
|
*/
|
|
96
91
|
function importPkcs1(pem) {
|
|
97
|
-
|
|
92
|
+
return importSpki((0, node_crypto.createPublicKey)({
|
|
98
93
|
key: pem,
|
|
99
94
|
format: "pem",
|
|
100
95
|
type: "pkcs1"
|
|
101
|
-
})
|
|
102
|
-
const spki = key.export({
|
|
96
|
+
}).export({
|
|
103
97
|
type: "spki",
|
|
104
98
|
format: "pem"
|
|
105
|
-
});
|
|
106
|
-
return importSpki(spki);
|
|
99
|
+
}));
|
|
107
100
|
}
|
|
108
101
|
const PKCS1_HEADER = /^\s*-----BEGIN\s+RSA\s+PUBLIC\s+KEY-----\s*\n/;
|
|
109
102
|
/**
|
|
@@ -130,12 +123,11 @@ async function importMultibaseKey(key) {
|
|
|
130
123
|
const { code } = require_multicodec.getMulticodecPrefix(decoded);
|
|
131
124
|
const content = require_multicodec.removeMulticodecPrefix(decoded);
|
|
132
125
|
if (code === 4613) {
|
|
133
|
-
const
|
|
126
|
+
const exported = (0, node_crypto.createPublicKey)({
|
|
134
127
|
key: content,
|
|
135
128
|
format: "der",
|
|
136
129
|
type: "pkcs1"
|
|
137
|
-
})
|
|
138
|
-
const exported = keyObject.export({
|
|
130
|
+
}).export({
|
|
139
131
|
type: "spki",
|
|
140
132
|
format: "der"
|
|
141
133
|
});
|
|
@@ -167,21 +159,18 @@ async function exportMultibaseKey(key) {
|
|
|
167
159
|
const decodedN = (0, byte_encodings_base64url.decodeBase64Url)(jwk.n);
|
|
168
160
|
const n = new Uint8Array(decodedN.length + 1);
|
|
169
161
|
n.set(decodedN, 1);
|
|
170
|
-
|
|
162
|
+
content = new asn1js.Sequence({ value: [new asn1js.Integer({
|
|
171
163
|
isHexOnly: true,
|
|
172
164
|
valueHex: n
|
|
173
165
|
}), new asn1js.Integer({
|
|
174
166
|
isHexOnly: true,
|
|
175
167
|
valueHex: (0, byte_encodings_base64url.decodeBase64Url)(jwk.e)
|
|
176
|
-
})] });
|
|
177
|
-
content = sequence.toBER(false);
|
|
168
|
+
})] }).toBER(false);
|
|
178
169
|
code = 4613;
|
|
179
170
|
} else throw new TypeError("Unsupported key type: " + JSON.stringify(key.algorithm));
|
|
180
|
-
const
|
|
181
|
-
const encoded = require_multibase.encodeMultibase("base58btc", prefixed);
|
|
171
|
+
const encoded = require_multibase.encodeMultibase("base58btc", require_multicodec.addMulticodecPrefix(code, new Uint8Array(content)));
|
|
182
172
|
return new TextDecoder().decode(encoded);
|
|
183
173
|
}
|
|
184
|
-
|
|
185
174
|
//#endregion
|
|
186
175
|
//#region src/key.test.ts
|
|
187
176
|
const rsaSpki = "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxsRuvCkgJtflBTl4OVsm\nnt/J1mQfZasfJtN33dcZ3d1lJroxmgmMu69zjGEAwkNbMQaWNLqC4eogkJaeJ4RR\n5MHYXkL9nNilVoTkjX5BVit3puzs7XJ7WQnKQgQMI+ezn24GHsZ/v1JIo77lerX5\nk4HNwTNVt+yaZVQWaOMR3+6FwziQR6kd0VuG9/a9dgAnz2cEoORRC1i4W7IZaB1s\nZnh1WbHbevlGd72HSXll5rocPIHn8gq6xpBgpHwRphlRsgn4KHaJ6brXDIJjrnQh\nIe/YUBOGj/ImSEXhRwlFerKsoAVnZ0Hwbfa46qk44TAt8CyoPMWmpK6pt0ng4pQ2\nuwIDAQAB\n-----END PUBLIC KEY-----\n";
|
|
@@ -206,36 +195,25 @@ const ed25519Jwk = {
|
|
|
206
195
|
};
|
|
207
196
|
const ed25519Multibase = "z6MksHj1MJnidCtDiyYW9ugNFftoX9fLK4bornTxmMZ6X7vq";
|
|
208
197
|
(0, node_test.test)("importSpki()", async () => {
|
|
209
|
-
|
|
210
|
-
(0, node_assert.deepStrictEqual)(await exportJwk(
|
|
211
|
-
const ed25519Key = await importSpki(ed25519Pem);
|
|
212
|
-
(0, node_assert.deepStrictEqual)(await exportJwk(ed25519Key), ed25519Jwk);
|
|
198
|
+
(0, node_assert.deepStrictEqual)(await exportJwk(await importSpki(rsaSpki)), rsaJwk);
|
|
199
|
+
(0, node_assert.deepStrictEqual)(await exportJwk(await importSpki(ed25519Pem)), ed25519Jwk);
|
|
213
200
|
});
|
|
214
201
|
(0, node_test.test)("exportSpki()", async () => {
|
|
215
|
-
const
|
|
216
|
-
|
|
217
|
-
(0, node_assert.deepStrictEqual)(
|
|
218
|
-
const ed25519Key = await importJwk(ed25519Jwk, "public");
|
|
219
|
-
const ed25519Spki = await exportSpki(ed25519Key);
|
|
220
|
-
(0, node_assert.deepStrictEqual)(ed25519Spki, ed25519Pem);
|
|
202
|
+
const rsaSpki = await exportSpki(await importJwk(rsaJwk, "public"));
|
|
203
|
+
(0, node_assert.deepStrictEqual)(rsaSpki, rsaSpki);
|
|
204
|
+
(0, node_assert.deepStrictEqual)(await exportSpki(await importJwk(ed25519Jwk, "public")), ed25519Pem);
|
|
221
205
|
});
|
|
222
206
|
(0, node_test.test)("importPkcs1()", async () => {
|
|
223
|
-
|
|
224
|
-
(0, node_assert.deepStrictEqual)(await exportJwk(rsaKey), rsaJwk);
|
|
207
|
+
(0, node_assert.deepStrictEqual)(await exportJwk(await importPkcs1(rsaPkcs1)), rsaJwk);
|
|
225
208
|
});
|
|
226
209
|
(0, node_test.test)("importPem()", async () => {
|
|
227
|
-
|
|
228
|
-
(0, node_assert.deepStrictEqual)(await exportJwk(
|
|
229
|
-
|
|
230
|
-
(0, node_assert.deepStrictEqual)(await exportJwk(rsaSpkiKey), rsaJwk);
|
|
231
|
-
const ed25519Key = await importPem(ed25519Pem);
|
|
232
|
-
(0, node_assert.deepStrictEqual)(await exportJwk(ed25519Key), ed25519Jwk);
|
|
210
|
+
(0, node_assert.deepStrictEqual)(await exportJwk(await importPem(rsaPkcs1)), rsaJwk);
|
|
211
|
+
(0, node_assert.deepStrictEqual)(await exportJwk(await importPem(rsaSpki)), rsaJwk);
|
|
212
|
+
(0, node_assert.deepStrictEqual)(await exportJwk(await importPem(ed25519Pem)), ed25519Jwk);
|
|
233
213
|
});
|
|
234
214
|
(0, node_test.test)("importMultibase()", async () => {
|
|
235
|
-
|
|
236
|
-
(0, node_assert.deepStrictEqual)(await exportJwk(
|
|
237
|
-
const ed25519Key = await importMultibaseKey(ed25519Multibase);
|
|
238
|
-
(0, node_assert.deepStrictEqual)(await exportJwk(ed25519Key), ed25519Jwk);
|
|
215
|
+
(0, node_assert.deepStrictEqual)(await exportJwk(await importMultibaseKey(rsaMultibase)), rsaJwk);
|
|
216
|
+
(0, node_assert.deepStrictEqual)(await exportJwk(await importMultibaseKey(ed25519Multibase)), ed25519Jwk);
|
|
239
217
|
});
|
|
240
218
|
(0, node_test.test)("importMultibase() rejects malformed multicodec prefixes", async () => {
|
|
241
219
|
const decoder = new TextDecoder();
|
|
@@ -243,32 +221,23 @@ const ed25519Multibase = "z6MksHj1MJnidCtDiyYW9ugNFftoX9fLK4bornTxmMZ6X7vq";
|
|
|
243
221
|
await (0, node_assert.rejects)(() => importMultibaseKey(decoder.decode(require_multibase.encodeMultibase("base58btc", Uint8Array.from([128])))), /* @__PURE__ */ new TypeError("Invalid multicodec prefix."));
|
|
244
222
|
});
|
|
245
223
|
(0, node_test.test)("exportMultibaseKey()", async () => {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
(0, node_assert.deepStrictEqual)(
|
|
249
|
-
const ed25519Key = await importJwk(ed25519Jwk, "public");
|
|
250
|
-
const ed25519Mb = await exportMultibaseKey(ed25519Key);
|
|
251
|
-
(0, node_assert.deepStrictEqual)(ed25519Mb, ed25519Multibase);
|
|
252
|
-
const rsaKey2 = await importJwk({
|
|
224
|
+
(0, node_assert.deepStrictEqual)(await exportMultibaseKey(await importJwk(rsaJwk, "public")), rsaMultibase);
|
|
225
|
+
(0, node_assert.deepStrictEqual)(await exportMultibaseKey(await importJwk(ed25519Jwk, "public")), ed25519Multibase);
|
|
226
|
+
(0, node_assert.deepStrictEqual)(await exportMultibaseKey(await importJwk({
|
|
253
227
|
alg: "RS256",
|
|
254
228
|
ext: true,
|
|
255
229
|
key_ops: ["verify"],
|
|
256
230
|
e: "AQAB",
|
|
257
231
|
kty: "RSA",
|
|
258
232
|
n: "sbX82NTV6IylxCh7MfV4hlyvaniCajuP97GyOqSvTmoEdBOflFvZ06kR_9D6ctt45Fk6hskfnag2GG69NALVH2o4RCR6tQiLRpKcMRtDYE_thEmfBvDzm_VVkOIYfxu-Ipuo9J_S5XDNDjczx2v-3oDh5-CIHkU46hvFeCvpUS-L8TJSbgX0kjVk_m4eIb9wh63rtmD6Uz_KBtCo5mmR4TEtcLZKYdqMp3wCjN-TlgHiz_4oVXWbHUefCEe8rFnX1iQnpDHU49_SaXQoud1jCaexFn25n-Aa8f8bc5Vm-5SeRwidHa6ErvEhTvf1dz6GoNPp2iRvm-wJ1gxwWJEYPQ"
|
|
259
|
-
}, "public");
|
|
260
|
-
|
|
261
|
-
(0, node_assert.deepStrictEqual)(rsaMb2, "z4MXj1wBzi9jUstyPMS4jQqB6KdJaiatPkAtVtGc6bQEQEEsKTic4G7Rou3iBf9vPmT5dbkm9qsZsuVNjq8HCuW1w24nhBFGkRE4cd2Uf2tfrB3N7h4mnyPp1BF3ZttHTYv3DLUPi1zMdkULiow3M1GfXkoC6DoxDUm1jmN6GBj22SjVsr6dxezRVQc7aj9TxE7JLbMH1wh5X3kA58H3DFW8rnYMakFGbca5CB2Jf6CnGQZmL7o5uJAdTwXfy2iiiyPxXEGerMhHwhjTA1mKYobyk2CpeEcmvynADfNZ5MBvcCS7m3XkFCMNUYBS9NQ3fze6vMSUPsNa6GVYmKx2x6JrdEjCk3qRMMmyjnjCMfR4pXbRMZa3i");
|
|
262
|
-
const ed25519Key2 = await importJwk({
|
|
233
|
+
}, "public")), "z4MXj1wBzi9jUstyPMS4jQqB6KdJaiatPkAtVtGc6bQEQEEsKTic4G7Rou3iBf9vPmT5dbkm9qsZsuVNjq8HCuW1w24nhBFGkRE4cd2Uf2tfrB3N7h4mnyPp1BF3ZttHTYv3DLUPi1zMdkULiow3M1GfXkoC6DoxDUm1jmN6GBj22SjVsr6dxezRVQc7aj9TxE7JLbMH1wh5X3kA58H3DFW8rnYMakFGbca5CB2Jf6CnGQZmL7o5uJAdTwXfy2iiiyPxXEGerMhHwhjTA1mKYobyk2CpeEcmvynADfNZ5MBvcCS7m3XkFCMNUYBS9NQ3fze6vMSUPsNa6GVYmKx2x6JrdEjCk3qRMMmyjnjCMfR4pXbRMZa3i");
|
|
234
|
+
(0, node_assert.deepStrictEqual)(await exportMultibaseKey(await importJwk({
|
|
263
235
|
alg: "Ed25519",
|
|
264
236
|
crv: "Ed25519",
|
|
265
237
|
ext: true,
|
|
266
238
|
key_ops: ["verify"],
|
|
267
239
|
kty: "OKP",
|
|
268
240
|
x: "Lm_M42cB3HkUiODQsXRcweM6TByfzEHGO9ND274JcOY"
|
|
269
|
-
}, "public");
|
|
270
|
-
const ed25519Mb2 = await exportMultibaseKey(ed25519Key2);
|
|
271
|
-
(0, node_assert.deepStrictEqual)(ed25519Mb2, "z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK");
|
|
241
|
+
}, "public")), "z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK");
|
|
272
242
|
});
|
|
273
|
-
|
|
274
|
-
//#endregion
|
|
243
|
+
//#endregion
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { n as getMulticodecPrefix, r as removeMulticodecPrefix, t as addMulticodecPrefix } from "./multicodec-aqbZnrNi.mjs";
|
|
2
|
+
import { n as encodeMultibase, t as decodeMultibase } from "./multibase-jcKrOpuU.mjs";
|
|
3
3
|
import { deepStrictEqual, rejects } from "node:assert";
|
|
4
4
|
import { test } from "node:test";
|
|
5
5
|
import { Integer, Sequence } from "asn1js";
|
|
@@ -7,15 +7,13 @@ import { decodeBase64, encodeBase64 } from "byte-encodings/base64";
|
|
|
7
7
|
import { decodeBase64Url } from "byte-encodings/base64url";
|
|
8
8
|
import { createPublicKey } from "node:crypto";
|
|
9
9
|
import { PublicKeyInfo } from "pkijs";
|
|
10
|
-
|
|
11
10
|
//#region src/jwk.ts
|
|
12
11
|
function validateCryptoKey(key, type) {
|
|
13
12
|
if (type != null && key.type !== type) throw new TypeError(`The key is not a ${type} key.`);
|
|
14
13
|
if (!key.extractable) throw new TypeError("The key is not extractable.");
|
|
15
14
|
if (key.algorithm.name !== "RSASSA-PKCS1-v1_5" && key.algorithm.name !== "Ed25519") throw new TypeError("Currently only RSASSA-PKCS1-v1_5 and Ed25519 keys are supported. More algorithms will be added in the future!");
|
|
16
15
|
if (key.algorithm.name === "RSASSA-PKCS1-v1_5") {
|
|
17
|
-
|
|
18
|
-
if (algorithm.hash.name !== "SHA-256") throw new TypeError("For compatibility with the existing Fediverse software (e.g., Mastodon), hash algorithm for RSASSA-PKCS1-v1_5 keys must be SHA-256.");
|
|
16
|
+
if (key.algorithm.hash.name !== "SHA-256") throw new TypeError("For compatibility with the existing Fediverse software (e.g., Mastodon), hash algorithm for RSASSA-PKCS1-v1_5 keys must be SHA-256.");
|
|
19
17
|
}
|
|
20
18
|
}
|
|
21
19
|
async function exportJwk(key) {
|
|
@@ -40,7 +38,6 @@ async function importJwk(jwk, type) {
|
|
|
40
38
|
validateCryptoKey(key, type);
|
|
41
39
|
return key;
|
|
42
40
|
}
|
|
43
|
-
|
|
44
41
|
//#endregion
|
|
45
42
|
//#region src/key.ts
|
|
46
43
|
const algorithms = {
|
|
@@ -65,8 +62,7 @@ async function importSpki(pem) {
|
|
|
65
62
|
} catch (_) {
|
|
66
63
|
throw new TypeError("Invalid PEM-SPKI format.");
|
|
67
64
|
}
|
|
68
|
-
const
|
|
69
|
-
const oid = pki.algorithm.algorithmId;
|
|
65
|
+
const oid = PublicKeyInfo.fromBER(spki).algorithm.algorithmId;
|
|
70
66
|
const algorithm = algorithms[oid];
|
|
71
67
|
if (algorithm == null) throw new TypeError("Unsupported algorithm: " + oid);
|
|
72
68
|
return await crypto.subtle.importKey("spki", spki, algorithm, true, ["verify"]);
|
|
@@ -80,8 +76,7 @@ async function importSpki(pem) {
|
|
|
80
76
|
*/
|
|
81
77
|
async function exportSpki(key) {
|
|
82
78
|
validateCryptoKey(key);
|
|
83
|
-
|
|
84
|
-
let pem = encodeBase64(spki);
|
|
79
|
+
let pem = encodeBase64(await crypto.subtle.exportKey("spki", key));
|
|
85
80
|
pem = (pem.match(/.{1,64}/g) || []).join("\n");
|
|
86
81
|
return `-----BEGIN PUBLIC KEY-----\n${pem}\n-----END PUBLIC KEY-----\n`;
|
|
87
82
|
}
|
|
@@ -93,16 +88,14 @@ async function exportSpki(key) {
|
|
|
93
88
|
* @since 1.5.0
|
|
94
89
|
*/
|
|
95
90
|
function importPkcs1(pem) {
|
|
96
|
-
|
|
91
|
+
return importSpki(createPublicKey({
|
|
97
92
|
key: pem,
|
|
98
93
|
format: "pem",
|
|
99
94
|
type: "pkcs1"
|
|
100
|
-
})
|
|
101
|
-
const spki = key.export({
|
|
95
|
+
}).export({
|
|
102
96
|
type: "spki",
|
|
103
97
|
format: "pem"
|
|
104
|
-
});
|
|
105
|
-
return importSpki(spki);
|
|
98
|
+
}));
|
|
106
99
|
}
|
|
107
100
|
const PKCS1_HEADER = /^\s*-----BEGIN\s+RSA\s+PUBLIC\s+KEY-----\s*\n/;
|
|
108
101
|
/**
|
|
@@ -129,12 +122,11 @@ async function importMultibaseKey(key) {
|
|
|
129
122
|
const { code } = getMulticodecPrefix(decoded);
|
|
130
123
|
const content = removeMulticodecPrefix(decoded);
|
|
131
124
|
if (code === 4613) {
|
|
132
|
-
const
|
|
125
|
+
const exported = createPublicKey({
|
|
133
126
|
key: content,
|
|
134
127
|
format: "der",
|
|
135
128
|
type: "pkcs1"
|
|
136
|
-
})
|
|
137
|
-
const exported = keyObject.export({
|
|
129
|
+
}).export({
|
|
138
130
|
type: "spki",
|
|
139
131
|
format: "der"
|
|
140
132
|
});
|
|
@@ -166,21 +158,18 @@ async function exportMultibaseKey(key) {
|
|
|
166
158
|
const decodedN = decodeBase64Url(jwk.n);
|
|
167
159
|
const n = new Uint8Array(decodedN.length + 1);
|
|
168
160
|
n.set(decodedN, 1);
|
|
169
|
-
|
|
161
|
+
content = new Sequence({ value: [new Integer({
|
|
170
162
|
isHexOnly: true,
|
|
171
163
|
valueHex: n
|
|
172
164
|
}), new Integer({
|
|
173
165
|
isHexOnly: true,
|
|
174
166
|
valueHex: decodeBase64Url(jwk.e)
|
|
175
|
-
})] });
|
|
176
|
-
content = sequence.toBER(false);
|
|
167
|
+
})] }).toBER(false);
|
|
177
168
|
code = 4613;
|
|
178
169
|
} else throw new TypeError("Unsupported key type: " + JSON.stringify(key.algorithm));
|
|
179
|
-
const
|
|
180
|
-
const encoded = encodeMultibase("base58btc", prefixed);
|
|
170
|
+
const encoded = encodeMultibase("base58btc", addMulticodecPrefix(code, new Uint8Array(content)));
|
|
181
171
|
return new TextDecoder().decode(encoded);
|
|
182
172
|
}
|
|
183
|
-
|
|
184
173
|
//#endregion
|
|
185
174
|
//#region src/key.test.ts
|
|
186
175
|
const rsaSpki = "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxsRuvCkgJtflBTl4OVsm\nnt/J1mQfZasfJtN33dcZ3d1lJroxmgmMu69zjGEAwkNbMQaWNLqC4eogkJaeJ4RR\n5MHYXkL9nNilVoTkjX5BVit3puzs7XJ7WQnKQgQMI+ezn24GHsZ/v1JIo77lerX5\nk4HNwTNVt+yaZVQWaOMR3+6FwziQR6kd0VuG9/a9dgAnz2cEoORRC1i4W7IZaB1s\nZnh1WbHbevlGd72HSXll5rocPIHn8gq6xpBgpHwRphlRsgn4KHaJ6brXDIJjrnQh\nIe/YUBOGj/ImSEXhRwlFerKsoAVnZ0Hwbfa46qk44TAt8CyoPMWmpK6pt0ng4pQ2\nuwIDAQAB\n-----END PUBLIC KEY-----\n";
|
|
@@ -205,36 +194,25 @@ const ed25519Jwk = {
|
|
|
205
194
|
};
|
|
206
195
|
const ed25519Multibase = "z6MksHj1MJnidCtDiyYW9ugNFftoX9fLK4bornTxmMZ6X7vq";
|
|
207
196
|
test("importSpki()", async () => {
|
|
208
|
-
|
|
209
|
-
deepStrictEqual(await exportJwk(
|
|
210
|
-
const ed25519Key = await importSpki(ed25519Pem);
|
|
211
|
-
deepStrictEqual(await exportJwk(ed25519Key), ed25519Jwk);
|
|
197
|
+
deepStrictEqual(await exportJwk(await importSpki(rsaSpki)), rsaJwk);
|
|
198
|
+
deepStrictEqual(await exportJwk(await importSpki(ed25519Pem)), ed25519Jwk);
|
|
212
199
|
});
|
|
213
200
|
test("exportSpki()", async () => {
|
|
214
|
-
const
|
|
215
|
-
|
|
216
|
-
deepStrictEqual(
|
|
217
|
-
const ed25519Key = await importJwk(ed25519Jwk, "public");
|
|
218
|
-
const ed25519Spki = await exportSpki(ed25519Key);
|
|
219
|
-
deepStrictEqual(ed25519Spki, ed25519Pem);
|
|
201
|
+
const rsaSpki = await exportSpki(await importJwk(rsaJwk, "public"));
|
|
202
|
+
deepStrictEqual(rsaSpki, rsaSpki);
|
|
203
|
+
deepStrictEqual(await exportSpki(await importJwk(ed25519Jwk, "public")), ed25519Pem);
|
|
220
204
|
});
|
|
221
205
|
test("importPkcs1()", async () => {
|
|
222
|
-
|
|
223
|
-
deepStrictEqual(await exportJwk(rsaKey), rsaJwk);
|
|
206
|
+
deepStrictEqual(await exportJwk(await importPkcs1(rsaPkcs1)), rsaJwk);
|
|
224
207
|
});
|
|
225
208
|
test("importPem()", async () => {
|
|
226
|
-
|
|
227
|
-
deepStrictEqual(await exportJwk(
|
|
228
|
-
|
|
229
|
-
deepStrictEqual(await exportJwk(rsaSpkiKey), rsaJwk);
|
|
230
|
-
const ed25519Key = await importPem(ed25519Pem);
|
|
231
|
-
deepStrictEqual(await exportJwk(ed25519Key), ed25519Jwk);
|
|
209
|
+
deepStrictEqual(await exportJwk(await importPem(rsaPkcs1)), rsaJwk);
|
|
210
|
+
deepStrictEqual(await exportJwk(await importPem(rsaSpki)), rsaJwk);
|
|
211
|
+
deepStrictEqual(await exportJwk(await importPem(ed25519Pem)), ed25519Jwk);
|
|
232
212
|
});
|
|
233
213
|
test("importMultibase()", async () => {
|
|
234
|
-
|
|
235
|
-
deepStrictEqual(await exportJwk(
|
|
236
|
-
const ed25519Key = await importMultibaseKey(ed25519Multibase);
|
|
237
|
-
deepStrictEqual(await exportJwk(ed25519Key), ed25519Jwk);
|
|
214
|
+
deepStrictEqual(await exportJwk(await importMultibaseKey(rsaMultibase)), rsaJwk);
|
|
215
|
+
deepStrictEqual(await exportJwk(await importMultibaseKey(ed25519Multibase)), ed25519Jwk);
|
|
238
216
|
});
|
|
239
217
|
test("importMultibase() rejects malformed multicodec prefixes", async () => {
|
|
240
218
|
const decoder = new TextDecoder();
|
|
@@ -242,32 +220,24 @@ test("importMultibase() rejects malformed multicodec prefixes", async () => {
|
|
|
242
220
|
await rejects(() => importMultibaseKey(decoder.decode(encodeMultibase("base58btc", Uint8Array.from([128])))), /* @__PURE__ */ new TypeError("Invalid multicodec prefix."));
|
|
243
221
|
});
|
|
244
222
|
test("exportMultibaseKey()", async () => {
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
deepStrictEqual(
|
|
248
|
-
const ed25519Key = await importJwk(ed25519Jwk, "public");
|
|
249
|
-
const ed25519Mb = await exportMultibaseKey(ed25519Key);
|
|
250
|
-
deepStrictEqual(ed25519Mb, ed25519Multibase);
|
|
251
|
-
const rsaKey2 = await importJwk({
|
|
223
|
+
deepStrictEqual(await exportMultibaseKey(await importJwk(rsaJwk, "public")), rsaMultibase);
|
|
224
|
+
deepStrictEqual(await exportMultibaseKey(await importJwk(ed25519Jwk, "public")), ed25519Multibase);
|
|
225
|
+
deepStrictEqual(await exportMultibaseKey(await importJwk({
|
|
252
226
|
alg: "RS256",
|
|
253
227
|
ext: true,
|
|
254
228
|
key_ops: ["verify"],
|
|
255
229
|
e: "AQAB",
|
|
256
230
|
kty: "RSA",
|
|
257
231
|
n: "sbX82NTV6IylxCh7MfV4hlyvaniCajuP97GyOqSvTmoEdBOflFvZ06kR_9D6ctt45Fk6hskfnag2GG69NALVH2o4RCR6tQiLRpKcMRtDYE_thEmfBvDzm_VVkOIYfxu-Ipuo9J_S5XDNDjczx2v-3oDh5-CIHkU46hvFeCvpUS-L8TJSbgX0kjVk_m4eIb9wh63rtmD6Uz_KBtCo5mmR4TEtcLZKYdqMp3wCjN-TlgHiz_4oVXWbHUefCEe8rFnX1iQnpDHU49_SaXQoud1jCaexFn25n-Aa8f8bc5Vm-5SeRwidHa6ErvEhTvf1dz6GoNPp2iRvm-wJ1gxwWJEYPQ"
|
|
258
|
-
}, "public");
|
|
259
|
-
|
|
260
|
-
deepStrictEqual(rsaMb2, "z4MXj1wBzi9jUstyPMS4jQqB6KdJaiatPkAtVtGc6bQEQEEsKTic4G7Rou3iBf9vPmT5dbkm9qsZsuVNjq8HCuW1w24nhBFGkRE4cd2Uf2tfrB3N7h4mnyPp1BF3ZttHTYv3DLUPi1zMdkULiow3M1GfXkoC6DoxDUm1jmN6GBj22SjVsr6dxezRVQc7aj9TxE7JLbMH1wh5X3kA58H3DFW8rnYMakFGbca5CB2Jf6CnGQZmL7o5uJAdTwXfy2iiiyPxXEGerMhHwhjTA1mKYobyk2CpeEcmvynADfNZ5MBvcCS7m3XkFCMNUYBS9NQ3fze6vMSUPsNa6GVYmKx2x6JrdEjCk3qRMMmyjnjCMfR4pXbRMZa3i");
|
|
261
|
-
const ed25519Key2 = await importJwk({
|
|
232
|
+
}, "public")), "z4MXj1wBzi9jUstyPMS4jQqB6KdJaiatPkAtVtGc6bQEQEEsKTic4G7Rou3iBf9vPmT5dbkm9qsZsuVNjq8HCuW1w24nhBFGkRE4cd2Uf2tfrB3N7h4mnyPp1BF3ZttHTYv3DLUPi1zMdkULiow3M1GfXkoC6DoxDUm1jmN6GBj22SjVsr6dxezRVQc7aj9TxE7JLbMH1wh5X3kA58H3DFW8rnYMakFGbca5CB2Jf6CnGQZmL7o5uJAdTwXfy2iiiyPxXEGerMhHwhjTA1mKYobyk2CpeEcmvynADfNZ5MBvcCS7m3XkFCMNUYBS9NQ3fze6vMSUPsNa6GVYmKx2x6JrdEjCk3qRMMmyjnjCMfR4pXbRMZa3i");
|
|
233
|
+
deepStrictEqual(await exportMultibaseKey(await importJwk({
|
|
262
234
|
alg: "Ed25519",
|
|
263
235
|
crv: "Ed25519",
|
|
264
236
|
ext: true,
|
|
265
237
|
key_ops: ["verify"],
|
|
266
238
|
kty: "OKP",
|
|
267
239
|
x: "Lm_M42cB3HkUiODQsXRcweM6TByfzEHGO9ND274JcOY"
|
|
268
|
-
}, "public");
|
|
269
|
-
const ed25519Mb2 = await exportMultibaseKey(ed25519Key2);
|
|
270
|
-
deepStrictEqual(ed25519Mb2, "z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK");
|
|
240
|
+
}, "public")), "z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK");
|
|
271
241
|
});
|
|
272
|
-
|
|
273
|
-
|
|
242
|
+
//#endregion
|
|
243
|
+
export {};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
const require_chunk = require(
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
const require_chunk = require("./chunk-Do9eywBl.cjs");
|
|
2
|
+
let node_assert = require("node:assert");
|
|
3
|
+
let node_test = require("node:test");
|
|
4
|
+
let node_util = require("node:util");
|
|
5
|
+
node_util = require_chunk.__toESM(node_util);
|
|
6
6
|
//#region src/langstr.ts
|
|
7
7
|
/**
|
|
8
8
|
* A language-tagged string which corresponds to the `rdf:langString` type.
|
|
@@ -30,7 +30,6 @@ LanguageString.prototype[Symbol.for("Deno.customInspect")] = function(inspect, o
|
|
|
30
30
|
LanguageString.prototype[Symbol.for("nodejs.util.inspect.custom")] = function(_depth, options, inspect) {
|
|
31
31
|
return `<${this.locale.baseName}> ${inspect(this.toString(), options)}`;
|
|
32
32
|
};
|
|
33
|
-
|
|
34
33
|
//#endregion
|
|
35
34
|
//#region src/langstr.test.ts
|
|
36
35
|
(0, node_test.test)("new LanguageString()", () => {
|
|
@@ -47,5 +46,4 @@ LanguageString.prototype[Symbol.for("nodejs.util.inspect.custom")] = function(_d
|
|
|
47
46
|
const langStr = new LanguageString("Hello, 'world'", "en");
|
|
48
47
|
(0, node_assert.deepStrictEqual)(node_util.default.inspect(langStr, { colors: false }), "<en> \"Hello, 'world'\"");
|
|
49
48
|
});
|
|
50
|
-
|
|
51
|
-
//#endregion
|
|
49
|
+
//#endregion
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { deepStrictEqual } from "node:assert";
|
|
2
2
|
import { test } from "node:test";
|
|
3
3
|
import util from "node:util";
|
|
4
|
-
|
|
5
4
|
//#region src/langstr.ts
|
|
6
5
|
/**
|
|
7
6
|
* A language-tagged string which corresponds to the `rdf:langString` type.
|
|
@@ -29,7 +28,6 @@ LanguageString.prototype[Symbol.for("Deno.customInspect")] = function(inspect, o
|
|
|
29
28
|
LanguageString.prototype[Symbol.for("nodejs.util.inspect.custom")] = function(_depth, options, inspect) {
|
|
30
29
|
return `<${this.locale.baseName}> ${inspect(this.toString(), options)}`;
|
|
31
30
|
};
|
|
32
|
-
|
|
33
31
|
//#endregion
|
|
34
32
|
//#region src/langstr.test.ts
|
|
35
33
|
test("new LanguageString()", () => {
|
|
@@ -46,5 +44,5 @@ test("util.inspect(LanguageString)", () => {
|
|
|
46
44
|
const langStr = new LanguageString("Hello, 'world'", "en");
|
|
47
45
|
deepStrictEqual(util.inspect(langStr, { colors: false }), "<en> \"Hello, 'world'\"");
|
|
48
46
|
});
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
//#endregion
|
|
48
|
+
export {};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
1
|
//#region src/link.ts
|
|
3
2
|
const parametersNeedLowerCase = ["rel", "type"];
|
|
4
3
|
const regexpLinkWhitespace = /[\n\r\s\t]/;
|
|
@@ -179,11 +178,10 @@ var HttpHeaderLink = class HttpHeaderLink {
|
|
|
179
178
|
return new this(...inputs).toString();
|
|
180
179
|
}
|
|
181
180
|
};
|
|
182
|
-
|
|
183
181
|
//#endregion
|
|
184
|
-
Object.defineProperty(exports,
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
});
|
|
182
|
+
Object.defineProperty(exports, "HttpHeaderLink", {
|
|
183
|
+
enumerable: true,
|
|
184
|
+
get: function() {
|
|
185
|
+
return HttpHeaderLink;
|
|
186
|
+
}
|
|
187
|
+
});
|
package/dist/tests/link.test.cjs
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
const require_link = require(
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
require("./chunk-Do9eywBl.cjs");
|
|
2
|
+
const require_link = require("./link-B6ZWBZhf.cjs");
|
|
3
|
+
let node_assert = require("node:assert");
|
|
4
|
+
let node_test = require("node:test");
|
|
6
5
|
//#region src/link.test.ts
|
|
7
6
|
(0, node_test.test)("String Good 1", () => {
|
|
8
7
|
const instance = new require_link.HttpHeaderLink(`<https://example.com>; rel="preconnect"`);
|
|
@@ -52,5 +51,4 @@ const node_test = require_chunk.__toESM(require("node:test"));
|
|
|
52
51
|
new require_link.HttpHeaderLink(`https://bad.example; rel="preconnect"`);
|
|
53
52
|
});
|
|
54
53
|
});
|
|
55
|
-
|
|
56
|
-
//#endregion
|
|
54
|
+
//#endregion
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { HttpHeaderLink } from "./link-
|
|
1
|
+
import { t as HttpHeaderLink } from "./link-B8JGXSS2.mjs";
|
|
2
2
|
import { deepStrictEqual, throws } from "node:assert";
|
|
3
3
|
import { test } from "node:test";
|
|
4
|
-
|
|
5
4
|
//#region src/link.test.ts
|
|
6
5
|
test("String Good 1", () => {
|
|
7
6
|
const instance = new HttpHeaderLink(`<https://example.com>; rel="preconnect"`);
|
|
@@ -51,5 +50,5 @@ test("String Bad 1", () => {
|
|
|
51
50
|
new HttpHeaderLink(`https://bad.example; rel="preconnect"`);
|
|
52
51
|
});
|
|
53
52
|
});
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
//#endregion
|
|
54
|
+
export {};
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
const require_multibase = require(
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
require("../chunk-Do9eywBl.cjs");
|
|
2
|
+
const require_multibase = require("../multibase-CgYqpk4Z.cjs");
|
|
3
|
+
let node_assert = require("node:assert");
|
|
4
|
+
let node_test = require("node:test");
|
|
6
5
|
//#region src/multibase/multibase.test.ts
|
|
7
6
|
(0, node_test.test)("multibase.encode and decode", async (t) => {
|
|
8
7
|
const testCases = [
|
|
@@ -318,18 +317,13 @@ const node_test = require_chunk.__toESM(require("node:test"));
|
|
|
318
317
|
]
|
|
319
318
|
];
|
|
320
319
|
for (const [name, input, expectedOutput] of testCases) await t.test(`Encoding/Decoding ${name} with ${input}`, () => {
|
|
321
|
-
|
|
322
|
-
(0, node_assert.deepStrictEqual)(require_multibase.
|
|
323
|
-
|
|
324
|
-
(0, node_assert.deepStrictEqual)(decoded, require_multibase.encodeText(input), `Decoding ${name} failed`);
|
|
325
|
-
const decodedFromBuffer = require_multibase.decodeMultibase(require_multibase.encodeText(expectedOutput));
|
|
326
|
-
(0, node_assert.deepStrictEqual)(decodedFromBuffer, require_multibase.encodeText(input), `Decoding buffer of ${name} failed`);
|
|
320
|
+
(0, node_assert.deepStrictEqual)(require_multibase.decodeText(require_multibase.encodeMultibase(name, require_multibase.encodeText(input))), expectedOutput, `Encoding ${name} failed`);
|
|
321
|
+
(0, node_assert.deepStrictEqual)(require_multibase.decodeMultibase(expectedOutput), require_multibase.encodeText(input), `Decoding ${name} failed`);
|
|
322
|
+
(0, node_assert.deepStrictEqual)(require_multibase.decodeMultibase(require_multibase.encodeText(expectedOutput)), require_multibase.encodeText(input), `Decoding buffer of ${name} failed`);
|
|
327
323
|
});
|
|
328
324
|
await t.test("should allow base32pad full alphabet", () => {
|
|
329
|
-
const
|
|
330
|
-
|
|
331
|
-
const encoded = require_multibase.encodeMultibase("c", decoded);
|
|
332
|
-
(0, node_assert.deepStrictEqual)(require_multibase.decodeMultibase(encoded), decoded);
|
|
325
|
+
const decoded = require_multibase.decodeMultibase("ctimaq4ygg2iegci7");
|
|
326
|
+
(0, node_assert.deepStrictEqual)(require_multibase.decodeMultibase(require_multibase.encodeMultibase("c", decoded)), decoded);
|
|
333
327
|
});
|
|
334
328
|
});
|
|
335
329
|
(0, node_test.test)("constants", async (t) => {
|
|
@@ -342,5 +336,4 @@ const node_test = require_chunk.__toESM(require("node:test"));
|
|
|
342
336
|
(0, node_assert.deepStrictEqual)(Object.keys(codes$1).length, 23);
|
|
343
337
|
});
|
|
344
338
|
});
|
|
345
|
-
|
|
346
|
-
//#endregion
|
|
339
|
+
//#endregion
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a as decodeText, i as names, n as encodeMultibase, o as encodeText, r as codes, t as decodeMultibase } from "../multibase-jcKrOpuU.mjs";
|
|
2
2
|
import { deepStrictEqual } from "node:assert";
|
|
3
3
|
import { test } from "node:test";
|
|
4
|
-
|
|
5
4
|
//#region src/multibase/multibase.test.ts
|
|
6
5
|
test("multibase.encode and decode", async (t) => {
|
|
7
6
|
const testCases = [
|
|
@@ -317,29 +316,22 @@ test("multibase.encode and decode", async (t) => {
|
|
|
317
316
|
]
|
|
318
317
|
];
|
|
319
318
|
for (const [name, input, expectedOutput] of testCases) await t.test(`Encoding/Decoding ${name} with ${input}`, () => {
|
|
320
|
-
|
|
321
|
-
deepStrictEqual(
|
|
322
|
-
|
|
323
|
-
deepStrictEqual(decoded, encodeText(input), `Decoding ${name} failed`);
|
|
324
|
-
const decodedFromBuffer = decodeMultibase(encodeText(expectedOutput));
|
|
325
|
-
deepStrictEqual(decodedFromBuffer, encodeText(input), `Decoding buffer of ${name} failed`);
|
|
319
|
+
deepStrictEqual(decodeText(encodeMultibase(name, encodeText(input))), expectedOutput, `Encoding ${name} failed`);
|
|
320
|
+
deepStrictEqual(decodeMultibase(expectedOutput), encodeText(input), `Decoding ${name} failed`);
|
|
321
|
+
deepStrictEqual(decodeMultibase(encodeText(expectedOutput)), encodeText(input), `Decoding buffer of ${name} failed`);
|
|
326
322
|
});
|
|
327
323
|
await t.test("should allow base32pad full alphabet", () => {
|
|
328
|
-
const
|
|
329
|
-
|
|
330
|
-
const encoded = encodeMultibase("c", decoded);
|
|
331
|
-
deepStrictEqual(decodeMultibase(encoded), decoded);
|
|
324
|
+
const decoded = decodeMultibase("ctimaq4ygg2iegci7");
|
|
325
|
+
deepStrictEqual(decodeMultibase(encodeMultibase("c", decoded)), decoded);
|
|
332
326
|
});
|
|
333
327
|
});
|
|
334
328
|
test("constants", async (t) => {
|
|
335
329
|
await t.test("constants indexed by name", () => {
|
|
336
|
-
|
|
337
|
-
deepStrictEqual(Object.keys(names$1).length, 23);
|
|
330
|
+
deepStrictEqual(Object.keys(names).length, 23);
|
|
338
331
|
});
|
|
339
332
|
await t.test("constants indexed by code", () => {
|
|
340
|
-
|
|
341
|
-
deepStrictEqual(Object.keys(codes$1).length, 23);
|
|
333
|
+
deepStrictEqual(Object.keys(codes).length, 23);
|
|
342
334
|
});
|
|
343
335
|
});
|
|
344
|
-
|
|
345
|
-
|
|
336
|
+
//#endregion
|
|
337
|
+
export {};
|