@fedify/vocab-runtime 2.1.0 → 2.1.2
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 +107 -180
- package/dist/mod.d.cts +1 -2
- package/dist/mod.d.ts +1 -2
- package/dist/mod.js +83 -159
- package/dist/tests/{chunk-DWy1uDak.cjs → chunk-Do9eywBl.cjs} +13 -17
- package/dist/tests/decimal.test.cjs +12 -21
- package/dist/tests/{decimal.test.js → decimal.test.mjs} +10 -18
- package/dist/tests/{docloader-D3nu2LmR.cjs → docloader-0Yz9aPvU.cjs} +78 -91
- package/dist/tests/{docloader-U31begIa.js → docloader-DiLx08rm.mjs} +62 -75
- package/dist/tests/docloader.test.cjs +98 -88
- package/dist/tests/{docloader.test.js → docloader.test.mjs} +98 -94
- 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-ByCmSI2y.js → key-BeTHFQJK.mjs} +14 -25
- package/dist/tests/{key-CCPn6TEY.cjs → key-DTTIntwb.cjs} +60 -71
- package/dist/tests/key.test.cjs +23 -45
- package/dist/tests/{key.test.js → key.test.mjs} +21 -42
- package/dist/tests/{langstr-EPh86hXK.cjs → langstr-CbAxaeEZ.cjs} +6 -8
- package/dist/tests/{langstr-BsVE3s9u.js → langstr-Di5AvKpB.mjs} +1 -2
- package/dist/tests/langstr.test.cjs +7 -8
- package/dist/tests/{langstr.test.js → langstr.test.mjs} +3 -4
- package/dist/tests/{link-DYNFAdNu.cjs → link-FguCydMA.cjs} +6 -8
- package/dist/tests/{link-C3q2TC2G.js → link-NUUWCdnK.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-B4g8pz6F.js → multibase-BgU9XRf7.mjs} +5 -12
- package/dist/tests/{multibase-o_ovPHYJ.cjs → multibase-F7LtMMsK.cjs} +43 -49
- package/dist/tests/{multicodec--6hQ74zI.cjs → multicodec-CxGVGa91.cjs} +16 -18
- package/dist/tests/{multicodec-Dq3IiOV4.js → multicodec-CyFp54fI.mjs} +1 -2
- package/dist/tests/{request-DyrEDYQ-.cjs → request-B4BOehn0.cjs} +38 -72
- package/dist/tests/{request-BH_NlxCL.js → request-Nob25QBF.mjs} +4 -45
- package/dist/tests/request.test.cjs +23 -24
- package/dist/tests/request.test.mjs +42 -0
- package/dist/tests/{url-CWEP9Zs9.js → url-BQ_kgmCk.mjs} +3 -7
- package/dist/tests/{url-DIjOdK8Q.cjs → url-pFuSds44.cjs} +31 -35
- 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/src/docloader.test.ts +67 -0
- package/src/docloader.ts +43 -11
- package/dist/tests/request.test.js +0 -43
- /package/dist/tests/{decimal.test.d.ts → decimal.test.d.mts} +0 -0
- /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/mod.d.cts
CHANGED
|
@@ -363,7 +363,6 @@ declare class LanguageString extends String {
|
|
|
363
363
|
//#endregion
|
|
364
364
|
//#region src/multibase/types.d.ts
|
|
365
365
|
type BaseCode = "\x00" | "0" | "7" | "9" | "f" | "F" | "v" | "V" | "t" | "T" | "b" | "B" | "c" | "C" | "h" | "k" | "K" | "z" | "Z" | "m" | "M" | "u" | "U";
|
|
366
|
-
|
|
367
366
|
/**
|
|
368
367
|
* - Names of the supported encodings
|
|
369
368
|
*/
|
|
@@ -427,4 +426,4 @@ declare function isValidPublicIPv4Address(address: string): boolean;
|
|
|
427
426
|
declare function isValidPublicIPv6Address(address: string): boolean;
|
|
428
427
|
declare function expandIPv6Address(address: string): string;
|
|
429
428
|
//#endregion
|
|
430
|
-
export { AuthenticatedDocumentLoaderFactory, CreateRequestOptions, Decimal, DocumentLoader, DocumentLoaderFactory, DocumentLoaderFactoryOptions, DocumentLoaderOptions, FetchError, GetDocumentLoaderOptions, GetUserAgentOptions, LanguageString, RemoteDocument, UrlError, canParseDecimal, createActivityPubRequest, decodeMultibase, encodeMultibase, encodingFromBaseData, expandIPv6Address, exportMultibaseKey, exportSpki, getDocumentLoader, getRemoteDocument, getUserAgent, importMultibaseKey, importPem, importPkcs1, importSpki, isDecimal, isValidPublicIPv4Address, isValidPublicIPv6Address, logRequest, parseDecimal, preloadedContexts, validatePublicUrl };
|
|
429
|
+
export { type AuthenticatedDocumentLoaderFactory, type CreateRequestOptions, type Decimal, type DocumentLoader, type DocumentLoaderFactory, type DocumentLoaderFactoryOptions, type DocumentLoaderOptions, FetchError, type GetDocumentLoaderOptions, type GetUserAgentOptions, LanguageString, type RemoteDocument, UrlError, canParseDecimal, createActivityPubRequest, decodeMultibase, encodeMultibase, encodingFromBaseData, expandIPv6Address, exportMultibaseKey, exportSpki, getDocumentLoader, getRemoteDocument, getUserAgent, importMultibaseKey, importPem, importPkcs1, importSpki, isDecimal, isValidPublicIPv4Address, isValidPublicIPv6Address, logRequest, parseDecimal, preloadedContexts, validatePublicUrl };
|
package/dist/mod.d.ts
CHANGED
|
@@ -363,7 +363,6 @@ declare class LanguageString extends String {
|
|
|
363
363
|
//#endregion
|
|
364
364
|
//#region src/multibase/types.d.ts
|
|
365
365
|
type BaseCode = "\x00" | "0" | "7" | "9" | "f" | "F" | "v" | "V" | "t" | "T" | "b" | "B" | "c" | "C" | "h" | "k" | "K" | "z" | "Z" | "m" | "M" | "u" | "U";
|
|
366
|
-
|
|
367
366
|
/**
|
|
368
367
|
* - Names of the supported encodings
|
|
369
368
|
*/
|
|
@@ -427,4 +426,4 @@ declare function isValidPublicIPv4Address(address: string): boolean;
|
|
|
427
426
|
declare function isValidPublicIPv6Address(address: string): boolean;
|
|
428
427
|
declare function expandIPv6Address(address: string): string;
|
|
429
428
|
//#endregion
|
|
430
|
-
export { AuthenticatedDocumentLoaderFactory, CreateRequestOptions, Decimal, DocumentLoader, DocumentLoaderFactory, DocumentLoaderFactoryOptions, DocumentLoaderOptions, FetchError, GetDocumentLoaderOptions, GetUserAgentOptions, LanguageString, RemoteDocument, UrlError, canParseDecimal, createActivityPubRequest, decodeMultibase, encodeMultibase, encodingFromBaseData, expandIPv6Address, exportMultibaseKey, exportSpki, getDocumentLoader, getRemoteDocument, getUserAgent, importMultibaseKey, importPem, importPkcs1, importSpki, isDecimal, isValidPublicIPv4Address, isValidPublicIPv6Address, logRequest, parseDecimal, preloadedContexts, validatePublicUrl };
|
|
429
|
+
export { type AuthenticatedDocumentLoaderFactory, type CreateRequestOptions, type Decimal, type DocumentLoader, type DocumentLoaderFactory, type DocumentLoaderFactoryOptions, type DocumentLoaderOptions, FetchError, type GetDocumentLoaderOptions, type GetUserAgentOptions, LanguageString, type RemoteDocument, UrlError, canParseDecimal, createActivityPubRequest, decodeMultibase, encodeMultibase, encodingFromBaseData, expandIPv6Address, exportMultibaseKey, exportSpki, getDocumentLoader, getRemoteDocument, getUserAgent, importMultibaseKey, importPem, importPkcs1, importSpki, isDecimal, isValidPublicIPv4Address, isValidPublicIPv6Address, logRequest, parseDecimal, preloadedContexts, validatePublicUrl };
|
package/dist/mod.js
CHANGED
|
@@ -9,9 +9,8 @@ import { decodeBase64Url } from "byte-encodings/base64url";
|
|
|
9
9
|
import { createPublicKey } from "node:crypto";
|
|
10
10
|
import { PublicKeyInfo } from "pkijs";
|
|
11
11
|
import baseX from "@multiformats/base-x";
|
|
12
|
-
|
|
13
12
|
//#region src/contexts/activitystreams.json
|
|
14
|
-
var
|
|
13
|
+
var activitystreams_default = { "@context": {
|
|
15
14
|
"@vocab": "_:",
|
|
16
15
|
"xsd": "http://www.w3.org/2001/XMLSchema#",
|
|
17
16
|
"as": "https://www.w3.org/ns/activitystreams#",
|
|
@@ -387,12 +386,10 @@ var __context$11 = {
|
|
|
387
386
|
"@id": "as:alsoKnownAs",
|
|
388
387
|
"@type": "@id"
|
|
389
388
|
}
|
|
390
|
-
};
|
|
391
|
-
var activitystreams_default = { "@context": __context$11 };
|
|
392
|
-
|
|
389
|
+
} };
|
|
393
390
|
//#endregion
|
|
394
391
|
//#region src/contexts/did-v1.json
|
|
395
|
-
var
|
|
392
|
+
var did_v1_default = { "@context": {
|
|
396
393
|
"@protected": true,
|
|
397
394
|
"id": "@id",
|
|
398
395
|
"type": "@type",
|
|
@@ -446,12 +443,10 @@ var __context$10 = {
|
|
|
446
443
|
"@id": "https://w3id.org/security#verificationMethod",
|
|
447
444
|
"@type": "@id"
|
|
448
445
|
}
|
|
449
|
-
};
|
|
450
|
-
var did_v1_default = { "@context": __context$10 };
|
|
451
|
-
|
|
446
|
+
} };
|
|
452
447
|
//#endregion
|
|
453
448
|
//#region src/contexts/fep-5711.json
|
|
454
|
-
var
|
|
449
|
+
var fep_5711_default = { "@context": {
|
|
455
450
|
"likesOf": {
|
|
456
451
|
"@id": "https://w3id.org/fep/5711#likesOf",
|
|
457
452
|
"@type": "@id"
|
|
@@ -484,12 +479,10 @@ var __context$9 = {
|
|
|
484
479
|
"@id": "https://w3id.org/fep/5711#likedOf",
|
|
485
480
|
"@type": "@id"
|
|
486
481
|
}
|
|
487
|
-
};
|
|
488
|
-
var fep_5711_default = { "@context": __context$9 };
|
|
489
|
-
|
|
482
|
+
} };
|
|
490
483
|
//#endregion
|
|
491
484
|
//#region src/contexts/gotosocial.json
|
|
492
|
-
var
|
|
485
|
+
var gotosocial_default = { "@context": {
|
|
493
486
|
"xsd": "http://www.w3.org/2001/XMLSchema#",
|
|
494
487
|
"gts": "https://gotosocial.org/ns#",
|
|
495
488
|
"LikeRequest": "gts:LikeRequest",
|
|
@@ -572,12 +565,10 @@ var __context$8 = {
|
|
|
572
565
|
"@id": "gts:approvedBy",
|
|
573
566
|
"@type": "@id"
|
|
574
567
|
}
|
|
575
|
-
};
|
|
576
|
-
var gotosocial_default = { "@context": __context$8 };
|
|
577
|
-
|
|
568
|
+
} };
|
|
578
569
|
//#endregion
|
|
579
570
|
//#region src/contexts/identity-v1.json
|
|
580
|
-
var
|
|
571
|
+
var identity_v1_default = { "@context": {
|
|
581
572
|
"id": "@id",
|
|
582
573
|
"type": "@type",
|
|
583
574
|
"cred": "https://w3id.org/credentials#",
|
|
@@ -726,12 +717,10 @@ var __context$7 = {
|
|
|
726
717
|
"@id": "perm:writePermission",
|
|
727
718
|
"@type": "@id"
|
|
728
719
|
}
|
|
729
|
-
};
|
|
730
|
-
var identity_v1_default = { "@context": __context$7 };
|
|
731
|
-
|
|
720
|
+
} };
|
|
732
721
|
//#endregion
|
|
733
722
|
//#region src/contexts/joinmastodon.json
|
|
734
|
-
var
|
|
723
|
+
var joinmastodon_default = { "@context": {
|
|
735
724
|
"toot": "http://joinmastodon.org/ns#",
|
|
736
725
|
"Emoji": "toot:Emoji",
|
|
737
726
|
"featured": {
|
|
@@ -756,12 +745,10 @@ var __context$6 = {
|
|
|
756
745
|
"@id": "toot:attributionDomains",
|
|
757
746
|
"@type": "@id"
|
|
758
747
|
}
|
|
759
|
-
};
|
|
760
|
-
var joinmastodon_default = { "@context": __context$6 };
|
|
761
|
-
|
|
748
|
+
} };
|
|
762
749
|
//#endregion
|
|
763
750
|
//#region src/contexts/schemaorg.json
|
|
764
|
-
var
|
|
751
|
+
var schemaorg_default = { "@context": {
|
|
765
752
|
"type": "@type",
|
|
766
753
|
"id": "@id",
|
|
767
754
|
"HTML": { "@id": "rdf:HTML" },
|
|
@@ -4063,12 +4050,10 @@ var __context$5 = {
|
|
|
4063
4050
|
"yearlyRevenue": { "@id": "schema:yearlyRevenue" },
|
|
4064
4051
|
"yearsInOperation": { "@id": "schema:yearsInOperation" },
|
|
4065
4052
|
"yield": { "@id": "schema:yield" }
|
|
4066
|
-
};
|
|
4067
|
-
var schemaorg_default = { "@context": __context$5 };
|
|
4068
|
-
|
|
4053
|
+
} };
|
|
4069
4054
|
//#endregion
|
|
4070
4055
|
//#region src/contexts/security-data-integrity-v1.json
|
|
4071
|
-
var
|
|
4056
|
+
var security_data_integrity_v1_default = { "@context": {
|
|
4072
4057
|
"id": "@id",
|
|
4073
4058
|
"type": "@type",
|
|
4074
4059
|
"@protected": true,
|
|
@@ -4143,12 +4128,10 @@ var __context$4 = {
|
|
|
4143
4128
|
}
|
|
4144
4129
|
}
|
|
4145
4130
|
}
|
|
4146
|
-
};
|
|
4147
|
-
var security_data_integrity_v1_default = { "@context": __context$4 };
|
|
4148
|
-
|
|
4131
|
+
} };
|
|
4149
4132
|
//#endregion
|
|
4150
4133
|
//#region src/contexts/security-data-integrity-v2.json
|
|
4151
|
-
var
|
|
4134
|
+
var security_data_integrity_v2_default = { "@context": {
|
|
4152
4135
|
"id": "@id",
|
|
4153
4136
|
"type": "@type",
|
|
4154
4137
|
"@protected": true,
|
|
@@ -4226,12 +4209,10 @@ var __context$3 = {
|
|
|
4226
4209
|
}
|
|
4227
4210
|
}
|
|
4228
4211
|
}
|
|
4229
|
-
};
|
|
4230
|
-
var security_data_integrity_v2_default = { "@context": __context$3 };
|
|
4231
|
-
|
|
4212
|
+
} };
|
|
4232
4213
|
//#endregion
|
|
4233
4214
|
//#region src/contexts/security-multikey-v1.json
|
|
4234
|
-
var
|
|
4215
|
+
var security_multikey_v1_default = { "@context": {
|
|
4235
4216
|
"id": "@id",
|
|
4236
4217
|
"type": "@type",
|
|
4237
4218
|
"@protected": true,
|
|
@@ -4263,12 +4244,10 @@ var __context$2 = {
|
|
|
4263
4244
|
}
|
|
4264
4245
|
}
|
|
4265
4246
|
}
|
|
4266
|
-
};
|
|
4267
|
-
var security_multikey_v1_default = { "@context": __context$2 };
|
|
4268
|
-
|
|
4247
|
+
} };
|
|
4269
4248
|
//#endregion
|
|
4270
4249
|
//#region src/contexts/security-v1.json
|
|
4271
|
-
var
|
|
4250
|
+
var security_v1_default = { "@context": {
|
|
4272
4251
|
"id": "@id",
|
|
4273
4252
|
"type": "@type",
|
|
4274
4253
|
"dc": "http://purl.org/dc/terms/",
|
|
@@ -4339,21 +4318,17 @@ var __context$1 = {
|
|
|
4339
4318
|
"signature": "sec:signature",
|
|
4340
4319
|
"signatureAlgorithm": "sec:signingAlgorithm",
|
|
4341
4320
|
"signatureValue": "sec:signatureValue"
|
|
4342
|
-
};
|
|
4343
|
-
var security_v1_default = { "@context": __context$1 };
|
|
4344
|
-
|
|
4321
|
+
} };
|
|
4345
4322
|
//#endregion
|
|
4346
4323
|
//#region src/contexts/webfinger.json
|
|
4347
|
-
var
|
|
4324
|
+
var webfinger_default = { "@context": {
|
|
4348
4325
|
"wf": "https://purl.archive.org/socialweb/webfinger#",
|
|
4349
4326
|
"xsd": "http://www.w3.org/2001/XMLSchema#",
|
|
4350
4327
|
"webfinger": {
|
|
4351
4328
|
"@id": "wf:webfinger",
|
|
4352
4329
|
"@type": "xsd:string"
|
|
4353
4330
|
}
|
|
4354
|
-
};
|
|
4355
|
-
var webfinger_default = { "@context": __context };
|
|
4356
|
-
|
|
4331
|
+
} };
|
|
4357
4332
|
//#endregion
|
|
4358
4333
|
//#region src/contexts.ts
|
|
4359
4334
|
const preloadedContexts = {
|
|
@@ -4370,50 +4345,10 @@ const preloadedContexts = {
|
|
|
4370
4345
|
"https://w3id.org/fep/5711": fep_5711_default,
|
|
4371
4346
|
"http://joinmastodon.org/ns": joinmastodon_default
|
|
4372
4347
|
};
|
|
4373
|
-
var contexts_default = preloadedContexts;
|
|
4374
|
-
|
|
4375
4348
|
//#endregion
|
|
4376
4349
|
//#region deno.json
|
|
4377
4350
|
var name = "@fedify/vocab-runtime";
|
|
4378
|
-
var version = "2.1.
|
|
4379
|
-
var license = "MIT";
|
|
4380
|
-
var exports = {
|
|
4381
|
-
".": "./src/mod.ts",
|
|
4382
|
-
"./jsonld": "./src/jsonld.ts"
|
|
4383
|
-
};
|
|
4384
|
-
var description = "Runtime library for @fedify/vocab";
|
|
4385
|
-
var author = {
|
|
4386
|
-
"name": "Hong Minhee",
|
|
4387
|
-
"email": "hong@minhee.org",
|
|
4388
|
-
"url": "https://hongminhee.org/"
|
|
4389
|
-
};
|
|
4390
|
-
var imports = {
|
|
4391
|
-
"@multiformats/base-x": "npm:@multiformats/base-x@^4.0.1",
|
|
4392
|
-
"asn1js": "npm:asn1js@^3.0.6",
|
|
4393
|
-
"byte-encodings": "npm:byte-encodings@^1.0.11",
|
|
4394
|
-
"fetch-mock": "npm:fetch-mock@^12.5.4",
|
|
4395
|
-
"jsonld": "npm:jsonld@^9.0.0",
|
|
4396
|
-
"pkijs": "npm:pkijs@^3.2.5"
|
|
4397
|
-
};
|
|
4398
|
-
var exclude = ["dist", "node_modules"];
|
|
4399
|
-
var publish = { "exclude": ["**/*.test.ts", "tsdown.config.ts"] };
|
|
4400
|
-
var tasks = {
|
|
4401
|
-
"check": "deno fmt --check && deno lint && deno check src/*.ts",
|
|
4402
|
-
"test": "deno test"
|
|
4403
|
-
};
|
|
4404
|
-
var deno_default = {
|
|
4405
|
-
name,
|
|
4406
|
-
version,
|
|
4407
|
-
license,
|
|
4408
|
-
exports,
|
|
4409
|
-
description,
|
|
4410
|
-
author,
|
|
4411
|
-
imports,
|
|
4412
|
-
exclude,
|
|
4413
|
-
publish,
|
|
4414
|
-
tasks
|
|
4415
|
-
};
|
|
4416
|
-
|
|
4351
|
+
var version = "2.1.2";
|
|
4417
4352
|
//#endregion
|
|
4418
4353
|
//#region src/link.ts
|
|
4419
4354
|
const parametersNeedLowerCase = ["rel", "type"];
|
|
@@ -4595,7 +4530,6 @@ var HttpHeaderLink = class HttpHeaderLink {
|
|
|
4595
4530
|
return new this(...inputs).toString();
|
|
4596
4531
|
}
|
|
4597
4532
|
};
|
|
4598
|
-
|
|
4599
4533
|
//#endregion
|
|
4600
4534
|
//#region src/request.ts
|
|
4601
4535
|
/**
|
|
@@ -4647,27 +4581,25 @@ function createActivityPubRequest(url, options = {}) {
|
|
|
4647
4581
|
* @since 1.3.0
|
|
4648
4582
|
*/
|
|
4649
4583
|
function getUserAgent({ software, url } = {}) {
|
|
4650
|
-
const fedify = `Fedify/${
|
|
4584
|
+
const fedify = `Fedify/${version}`;
|
|
4651
4585
|
const runtime = globalThis.Deno?.version?.deno != null ? `Deno/${Deno.version.deno}` : globalThis.process?.versions?.bun != null ? `Bun/${process.versions.bun}` : "navigator" in globalThis && navigator.userAgent === "Cloudflare-Workers" ? navigator.userAgent : globalThis.process?.versions?.node != null ? `Node.js/${process.versions.node}` : null;
|
|
4652
4586
|
const userAgent = software == null ? [fedify] : [software, fedify];
|
|
4653
4587
|
if (runtime != null) userAgent.push(runtime);
|
|
4654
4588
|
if (url != null) userAgent.push(`+${url.toString()}`);
|
|
4655
|
-
|
|
4656
|
-
return `${first} (${userAgent.join("; ")})`;
|
|
4589
|
+
return `${userAgent.shift()} (${userAgent.join("; ")})`;
|
|
4657
4590
|
}
|
|
4658
4591
|
/**
|
|
4659
4592
|
* Logs the request.
|
|
4660
4593
|
* @param request The request to log.
|
|
4661
4594
|
* @internal
|
|
4662
4595
|
*/
|
|
4663
|
-
function logRequest(logger
|
|
4664
|
-
logger
|
|
4596
|
+
function logRequest(logger, request) {
|
|
4597
|
+
logger.debug("Fetching document: {method} {url} {headers}", {
|
|
4665
4598
|
method: request.method,
|
|
4666
4599
|
url: request.url,
|
|
4667
4600
|
headers: Object.fromEntries(request.headers.entries())
|
|
4668
4601
|
});
|
|
4669
4602
|
}
|
|
4670
|
-
|
|
4671
4603
|
//#endregion
|
|
4672
4604
|
//#region src/url.ts
|
|
4673
4605
|
var UrlError = class extends Error {
|
|
@@ -4686,8 +4618,7 @@ async function validatePublicUrl(url) {
|
|
|
4686
4618
|
if (hostname.startsWith("[") && hostname.endsWith("]")) hostname = hostname.substring(1, hostname.length - 2);
|
|
4687
4619
|
if (hostname === "localhost") throw new UrlError("Localhost is not allowed");
|
|
4688
4620
|
if ("Deno" in globalThis && !isIP(hostname)) {
|
|
4689
|
-
|
|
4690
|
-
if (netPermission.state !== "granted") return;
|
|
4621
|
+
if ((await Deno.permissions.query({ name: "net" })).state !== "granted") return;
|
|
4691
4622
|
}
|
|
4692
4623
|
if ("Bun" in globalThis) {
|
|
4693
4624
|
if (hostname === "example.com" || hostname.endsWith(".example.com")) return;
|
|
@@ -4723,10 +4654,8 @@ function expandIPv6Address(address) {
|
|
|
4723
4654
|
if (address.startsWith("::")) address = "0000" + address;
|
|
4724
4655
|
if (address.endsWith("::")) address = address + "0000";
|
|
4725
4656
|
address = address.replace("::", ":0000".repeat(8 - (address.match(/:/g) || []).length) + ":");
|
|
4726
|
-
|
|
4727
|
-
return parts.map((part) => part.padStart(4, "0")).join(":");
|
|
4657
|
+
return address.split(":").map((part) => part.padStart(4, "0")).join(":");
|
|
4728
4658
|
}
|
|
4729
|
-
|
|
4730
4659
|
//#endregion
|
|
4731
4660
|
//#region src/docloader.ts
|
|
4732
4661
|
const logger = getLogger([
|
|
@@ -4734,6 +4663,7 @@ const logger = getLogger([
|
|
|
4734
4663
|
"runtime",
|
|
4735
4664
|
"docloader"
|
|
4736
4665
|
]);
|
|
4666
|
+
const DEFAULT_MAX_REDIRECTION = 20;
|
|
4737
4667
|
/**
|
|
4738
4668
|
* Gets a {@link RemoteDocument} from the given response.
|
|
4739
4669
|
* @param url The URL of the document to load.
|
|
@@ -4743,7 +4673,7 @@ const logger = getLogger([
|
|
|
4743
4673
|
* @throws {FetchError} If the response is not OK.
|
|
4744
4674
|
* @internal
|
|
4745
4675
|
*/
|
|
4746
|
-
async function getRemoteDocument(url, response, fetch
|
|
4676
|
+
async function getRemoteDocument(url, response, fetch) {
|
|
4747
4677
|
const documentUrl = response.url === "" ? url : response.url;
|
|
4748
4678
|
const docUrl = new URL(documentUrl);
|
|
4749
4679
|
if (!response.ok) {
|
|
@@ -4781,7 +4711,7 @@ async function getRemoteDocument(url, response, fetch$1) {
|
|
|
4781
4711
|
alternateUrl: altUri.href,
|
|
4782
4712
|
url: documentUrl
|
|
4783
4713
|
});
|
|
4784
|
-
return await fetch
|
|
4714
|
+
return await fetch(altUri.href);
|
|
4785
4715
|
}
|
|
4786
4716
|
}
|
|
4787
4717
|
}
|
|
@@ -4807,15 +4737,14 @@ async function getRemoteDocument(url, response, fetch$1) {
|
|
|
4807
4737
|
attrPattern.lastIndex = 0;
|
|
4808
4738
|
while ((attrMatch = attrPattern.exec(tagContent)) !== null) {
|
|
4809
4739
|
const key = attrMatch[1].toLowerCase();
|
|
4810
|
-
|
|
4811
|
-
attribs[key] = value;
|
|
4740
|
+
attribs[key] = attrMatch[2] ?? attrMatch[3] ?? attrMatch[4] ?? "";
|
|
4812
4741
|
}
|
|
4813
4742
|
if (attribs.rel === "alternate" && "type" in attribs && (attribs.type === "application/activity+json" || attribs.type === "application/ld+json" || attribs.type.startsWith("application/ld+json;")) && "href" in attribs && new URL(attribs.href, docUrl).href !== docUrl.href) {
|
|
4814
4743
|
logger.debug("Found alternate document: {alternateUrl} from {url}", {
|
|
4815
4744
|
alternateUrl: attribs.href,
|
|
4816
4745
|
url: documentUrl
|
|
4817
4746
|
});
|
|
4818
|
-
return await fetch
|
|
4747
|
+
return await fetch(new URL(attribs.href, docUrl).href);
|
|
4819
4748
|
}
|
|
4820
4749
|
}
|
|
4821
4750
|
document = JSON.parse(html);
|
|
@@ -4850,33 +4779,34 @@ async function getRemoteDocument(url, response, fetch$1) {
|
|
|
4850
4779
|
* @since 1.3.0
|
|
4851
4780
|
*/
|
|
4852
4781
|
function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAgent } = {}) {
|
|
4853
|
-
const
|
|
4854
|
-
|
|
4855
|
-
async function load(url, options) {
|
|
4782
|
+
const tracer = trace.getTracerProvider().getTracer(name, version);
|
|
4783
|
+
async function load(url, options, redirected = 0, visited = /* @__PURE__ */ new Set()) {
|
|
4856
4784
|
options?.signal?.throwIfAborted();
|
|
4857
|
-
|
|
4858
|
-
|
|
4785
|
+
const currentUrl = new URL(url).href;
|
|
4786
|
+
if (!skipPreloadedContexts && currentUrl in preloadedContexts) {
|
|
4787
|
+
logger.debug("Using preloaded context: {url}.", { url: currentUrl });
|
|
4859
4788
|
return {
|
|
4860
4789
|
contextUrl: null,
|
|
4861
|
-
document:
|
|
4862
|
-
documentUrl:
|
|
4790
|
+
document: preloadedContexts[currentUrl],
|
|
4791
|
+
documentUrl: currentUrl
|
|
4863
4792
|
};
|
|
4864
4793
|
}
|
|
4865
4794
|
if (!allowPrivateAddress) try {
|
|
4866
|
-
await validatePublicUrl(
|
|
4795
|
+
await validatePublicUrl(currentUrl);
|
|
4867
4796
|
} catch (error) {
|
|
4868
4797
|
if (error instanceof UrlError) logger.error("Disallowed private URL: {url}", {
|
|
4869
|
-
url,
|
|
4798
|
+
url: currentUrl,
|
|
4870
4799
|
error
|
|
4871
4800
|
});
|
|
4872
4801
|
throw error;
|
|
4873
4802
|
}
|
|
4803
|
+
visited.add(currentUrl);
|
|
4874
4804
|
return await tracer.startActiveSpan("activitypub.fetch_document", {
|
|
4875
4805
|
kind: SpanKind.CLIENT,
|
|
4876
|
-
attributes: { "url.full":
|
|
4806
|
+
attributes: { "url.full": currentUrl }
|
|
4877
4807
|
}, async (span) => {
|
|
4878
4808
|
try {
|
|
4879
|
-
const request = createActivityPubRequest(
|
|
4809
|
+
const request = createActivityPubRequest(currentUrl, { userAgent });
|
|
4880
4810
|
logRequest(logger, request);
|
|
4881
4811
|
const response = await fetch(request, {
|
|
4882
4812
|
redirect: "manual",
|
|
@@ -4884,11 +4814,25 @@ function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAge
|
|
|
4884
4814
|
});
|
|
4885
4815
|
span.setAttribute("http.response.status_code", response.status);
|
|
4886
4816
|
if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
|
|
4887
|
-
|
|
4817
|
+
if (redirected >= DEFAULT_MAX_REDIRECTION) {
|
|
4818
|
+
logger.error("Too many redirections ({redirections}) while fetching document.", {
|
|
4819
|
+
redirections: redirected + 1,
|
|
4820
|
+
url: currentUrl
|
|
4821
|
+
});
|
|
4822
|
+
throw new FetchError(currentUrl, `Too many redirections (${redirected + 1})`);
|
|
4823
|
+
}
|
|
4824
|
+
const redirectUrl = new URL(response.headers.get("Location"), response.url === "" ? currentUrl : response.url).href;
|
|
4888
4825
|
span.setAttribute("http.redirect.url", redirectUrl);
|
|
4889
|
-
|
|
4826
|
+
if (visited.has(redirectUrl)) {
|
|
4827
|
+
logger.error("Detected a redirect loop while fetching document: {url} -> {redirectUrl}", {
|
|
4828
|
+
url: currentUrl,
|
|
4829
|
+
redirectUrl
|
|
4830
|
+
});
|
|
4831
|
+
throw new FetchError(currentUrl, `Redirect loop detected: ${redirectUrl}`);
|
|
4832
|
+
}
|
|
4833
|
+
return await load(redirectUrl, options, redirected + 1, visited);
|
|
4890
4834
|
}
|
|
4891
|
-
const result = await getRemoteDocument(
|
|
4835
|
+
const result = await getRemoteDocument(currentUrl, response, load);
|
|
4892
4836
|
span.setAttribute("docloader.document_url", result.documentUrl);
|
|
4893
4837
|
if (result.contextUrl != null) span.setAttribute("docloader.context_url", result.contextUrl);
|
|
4894
4838
|
return result;
|
|
@@ -4906,7 +4850,6 @@ function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAge
|
|
|
4906
4850
|
}
|
|
4907
4851
|
return load;
|
|
4908
4852
|
}
|
|
4909
|
-
|
|
4910
4853
|
//#endregion
|
|
4911
4854
|
//#region src/internal/multicodec.ts
|
|
4912
4855
|
const INVALID_MULTICODEC_PREFIX = "Invalid multicodec prefix.";
|
|
@@ -4946,7 +4889,6 @@ function addMulticodecPrefix(code, payload) {
|
|
|
4946
4889
|
prefixed.set(payload, prefix.length);
|
|
4947
4890
|
return prefixed;
|
|
4948
4891
|
}
|
|
4949
|
-
|
|
4950
4892
|
//#endregion
|
|
4951
4893
|
//#region src/jwk.ts
|
|
4952
4894
|
function validateCryptoKey(key, type) {
|
|
@@ -4954,11 +4896,9 @@ function validateCryptoKey(key, type) {
|
|
|
4954
4896
|
if (!key.extractable) throw new TypeError("The key is not extractable.");
|
|
4955
4897
|
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!");
|
|
4956
4898
|
if (key.algorithm.name === "RSASSA-PKCS1-v1_5") {
|
|
4957
|
-
|
|
4958
|
-
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.");
|
|
4899
|
+
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.");
|
|
4959
4900
|
}
|
|
4960
4901
|
}
|
|
4961
|
-
|
|
4962
4902
|
//#endregion
|
|
4963
4903
|
//#region src/multibase/util.ts
|
|
4964
4904
|
const textDecoder = new TextDecoder();
|
|
@@ -4974,7 +4914,6 @@ function concat(arrs, length) {
|
|
|
4974
4914
|
}
|
|
4975
4915
|
return output;
|
|
4976
4916
|
}
|
|
4977
|
-
|
|
4978
4917
|
//#endregion
|
|
4979
4918
|
//#region src/multibase/base.ts
|
|
4980
4919
|
/**
|
|
@@ -4983,8 +4922,8 @@ function concat(arrs, length) {
|
|
|
4983
4922
|
var Base = class {
|
|
4984
4923
|
codeBuf;
|
|
4985
4924
|
codec;
|
|
4986
|
-
constructor(name
|
|
4987
|
-
this.name = name
|
|
4925
|
+
constructor(name, code, factory, alphabet) {
|
|
4926
|
+
this.name = name;
|
|
4988
4927
|
this.code = code;
|
|
4989
4928
|
this.alphabet = alphabet;
|
|
4990
4929
|
this.codeBuf = encodeText(this.code);
|
|
@@ -4999,12 +4938,11 @@ var Base = class {
|
|
|
4999
4938
|
return this.codec.decode(string);
|
|
5000
4939
|
}
|
|
5001
4940
|
};
|
|
5002
|
-
|
|
5003
4941
|
//#endregion
|
|
5004
4942
|
//#region src/multibase/rfc4648.ts
|
|
5005
4943
|
const decode = (string, alphabet, bitsPerChar) => {
|
|
5006
|
-
const codes
|
|
5007
|
-
for (let i = 0; i < alphabet.length; ++i) codes
|
|
4944
|
+
const codes = {};
|
|
4945
|
+
for (let i = 0; i < alphabet.length; ++i) codes[alphabet[i]] = i;
|
|
5008
4946
|
let end = string.length;
|
|
5009
4947
|
while (string[end - 1] === "=") --end;
|
|
5010
4948
|
const out = new Uint8Array(end * bitsPerChar / 8 | 0);
|
|
@@ -5012,7 +4950,7 @@ const decode = (string, alphabet, bitsPerChar) => {
|
|
|
5012
4950
|
let buffer = 0;
|
|
5013
4951
|
let written = 0;
|
|
5014
4952
|
for (let i = 0; i < end; ++i) {
|
|
5015
|
-
const value = codes
|
|
4953
|
+
const value = codes[string[i]];
|
|
5016
4954
|
if (value === void 0) throw new SyntaxError("Invalid character " + string[i]);
|
|
5017
4955
|
buffer = buffer << bitsPerChar | value;
|
|
5018
4956
|
bits += bitsPerChar;
|
|
@@ -5055,7 +4993,6 @@ const rfc4648 = (bitsPerChar) => (alphabet) => {
|
|
|
5055
4993
|
}
|
|
5056
4994
|
};
|
|
5057
4995
|
};
|
|
5058
|
-
|
|
5059
4996
|
//#endregion
|
|
5060
4997
|
//#region src/multibase/constants.ts
|
|
5061
4998
|
const identity = () => {
|
|
@@ -5217,7 +5154,6 @@ const codes = constants.reduce((prev, tupple) => {
|
|
|
5217
5154
|
prev[tupple[1]] = names[tupple[0]];
|
|
5218
5155
|
return prev;
|
|
5219
5156
|
}, {});
|
|
5220
|
-
|
|
5221
5157
|
//#endregion
|
|
5222
5158
|
//#region src/multibase/mod.ts
|
|
5223
5159
|
/**
|
|
@@ -5254,8 +5190,7 @@ function decodeMultibase(data) {
|
|
|
5254
5190
|
"k",
|
|
5255
5191
|
"K"
|
|
5256
5192
|
].includes(prefix)) data = data.toLowerCase();
|
|
5257
|
-
|
|
5258
|
-
return enc.decode(data.substring(1));
|
|
5193
|
+
return encoding(data[0]).decode(data.substring(1));
|
|
5259
5194
|
}
|
|
5260
5195
|
/**
|
|
5261
5196
|
* Get the encoding by name or code
|
|
@@ -5277,7 +5212,6 @@ function encodingFromBaseData(data) {
|
|
|
5277
5212
|
if (data instanceof Uint8Array) data = decodeText(data);
|
|
5278
5213
|
return encoding(data[0]);
|
|
5279
5214
|
}
|
|
5280
|
-
|
|
5281
5215
|
//#endregion
|
|
5282
5216
|
//#region src/key.ts
|
|
5283
5217
|
const algorithms = {
|
|
@@ -5302,8 +5236,7 @@ async function importSpki(pem) {
|
|
|
5302
5236
|
} catch (_) {
|
|
5303
5237
|
throw new TypeError("Invalid PEM-SPKI format.");
|
|
5304
5238
|
}
|
|
5305
|
-
const
|
|
5306
|
-
const oid = pki.algorithm.algorithmId;
|
|
5239
|
+
const oid = PublicKeyInfo.fromBER(spki).algorithm.algorithmId;
|
|
5307
5240
|
const algorithm = algorithms[oid];
|
|
5308
5241
|
if (algorithm == null) throw new TypeError("Unsupported algorithm: " + oid);
|
|
5309
5242
|
return await crypto.subtle.importKey("spki", spki, algorithm, true, ["verify"]);
|
|
@@ -5317,8 +5250,7 @@ async function importSpki(pem) {
|
|
|
5317
5250
|
*/
|
|
5318
5251
|
async function exportSpki(key) {
|
|
5319
5252
|
validateCryptoKey(key);
|
|
5320
|
-
|
|
5321
|
-
let pem = encodeBase64(spki);
|
|
5253
|
+
let pem = encodeBase64(await crypto.subtle.exportKey("spki", key));
|
|
5322
5254
|
pem = (pem.match(/.{1,64}/g) || []).join("\n");
|
|
5323
5255
|
return `-----BEGIN PUBLIC KEY-----\n${pem}\n-----END PUBLIC KEY-----\n`;
|
|
5324
5256
|
}
|
|
@@ -5330,16 +5262,14 @@ async function exportSpki(key) {
|
|
|
5330
5262
|
* @since 1.5.0
|
|
5331
5263
|
*/
|
|
5332
5264
|
function importPkcs1(pem) {
|
|
5333
|
-
|
|
5265
|
+
return importSpki(createPublicKey({
|
|
5334
5266
|
key: pem,
|
|
5335
5267
|
format: "pem",
|
|
5336
5268
|
type: "pkcs1"
|
|
5337
|
-
})
|
|
5338
|
-
const spki = key.export({
|
|
5269
|
+
}).export({
|
|
5339
5270
|
type: "spki",
|
|
5340
5271
|
format: "pem"
|
|
5341
|
-
});
|
|
5342
|
-
return importSpki(spki);
|
|
5272
|
+
}));
|
|
5343
5273
|
}
|
|
5344
5274
|
const PKCS1_HEADER = /^\s*-----BEGIN\s+RSA\s+PUBLIC\s+KEY-----\s*\n/;
|
|
5345
5275
|
/**
|
|
@@ -5366,12 +5296,11 @@ async function importMultibaseKey(key) {
|
|
|
5366
5296
|
const { code } = getMulticodecPrefix(decoded);
|
|
5367
5297
|
const content = removeMulticodecPrefix(decoded);
|
|
5368
5298
|
if (code === 4613) {
|
|
5369
|
-
const
|
|
5299
|
+
const exported = createPublicKey({
|
|
5370
5300
|
key: content,
|
|
5371
5301
|
format: "der",
|
|
5372
5302
|
type: "pkcs1"
|
|
5373
|
-
})
|
|
5374
|
-
const exported = keyObject.export({
|
|
5303
|
+
}).export({
|
|
5375
5304
|
type: "spki",
|
|
5376
5305
|
format: "der"
|
|
5377
5306
|
});
|
|
@@ -5403,21 +5332,18 @@ async function exportMultibaseKey(key) {
|
|
|
5403
5332
|
const decodedN = decodeBase64Url(jwk.n);
|
|
5404
5333
|
const n = new Uint8Array(decodedN.length + 1);
|
|
5405
5334
|
n.set(decodedN, 1);
|
|
5406
|
-
|
|
5335
|
+
content = new Sequence({ value: [new Integer({
|
|
5407
5336
|
isHexOnly: true,
|
|
5408
5337
|
valueHex: n
|
|
5409
5338
|
}), new Integer({
|
|
5410
5339
|
isHexOnly: true,
|
|
5411
5340
|
valueHex: decodeBase64Url(jwk.e)
|
|
5412
|
-
})] });
|
|
5413
|
-
content = sequence.toBER(false);
|
|
5341
|
+
})] }).toBER(false);
|
|
5414
5342
|
code = 4613;
|
|
5415
5343
|
} else throw new TypeError("Unsupported key type: " + JSON.stringify(key.algorithm));
|
|
5416
|
-
const
|
|
5417
|
-
const encoded = encodeMultibase("base58btc", prefixed);
|
|
5344
|
+
const encoded = encodeMultibase("base58btc", addMulticodecPrefix(code, new Uint8Array(content)));
|
|
5418
5345
|
return new TextDecoder().decode(encoded);
|
|
5419
5346
|
}
|
|
5420
|
-
|
|
5421
5347
|
//#endregion
|
|
5422
5348
|
//#region src/decimal.ts
|
|
5423
5349
|
const DECIMAL_PATTERN = /^(\+|-)?([0-9]+(\.[0-9]*)?|\.[0-9]+)$/;
|
|
@@ -5493,7 +5419,6 @@ function parseDecimal(value) {
|
|
|
5493
5419
|
if (!isDecimal(normalized)) throw new TypeError(`${JSON.stringify(value)} is not a valid xsd:decimal lexical form.`);
|
|
5494
5420
|
return normalized;
|
|
5495
5421
|
}
|
|
5496
|
-
|
|
5497
5422
|
//#endregion
|
|
5498
5423
|
//#region src/langstr.ts
|
|
5499
5424
|
/**
|
|
@@ -5522,6 +5447,5 @@ LanguageString.prototype[Symbol.for("Deno.customInspect")] = function(inspect, o
|
|
|
5522
5447
|
LanguageString.prototype[Symbol.for("nodejs.util.inspect.custom")] = function(_depth, options, inspect) {
|
|
5523
5448
|
return `<${this.locale.baseName}> ${inspect(this.toString(), options)}`;
|
|
5524
5449
|
};
|
|
5525
|
-
|
|
5526
5450
|
//#endregion
|
|
5527
|
-
export { FetchError, LanguageString, UrlError, canParseDecimal, createActivityPubRequest, decodeMultibase, encodeMultibase, encodingFromBaseData, expandIPv6Address, exportMultibaseKey, exportSpki, getDocumentLoader, getRemoteDocument, getUserAgent, importMultibaseKey, importPem, importPkcs1, importSpki, isDecimal, isValidPublicIPv4Address, isValidPublicIPv6Address, logRequest, parseDecimal,
|
|
5451
|
+
export { FetchError, LanguageString, UrlError, canParseDecimal, createActivityPubRequest, decodeMultibase, encodeMultibase, encodingFromBaseData, expandIPv6Address, exportMultibaseKey, exportSpki, getDocumentLoader, getRemoteDocument, getUserAgent, importMultibaseKey, importPem, importPkcs1, importSpki, isDecimal, isValidPublicIPv4Address, isValidPublicIPv6Address, logRequest, parseDecimal, preloadedContexts, validatePublicUrl };
|