@fedify/vocab-runtime 2.0.0-pr.479.1922 → 2.0.0-pr.490.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 -2
- package/dist/mod.cjs +70 -44
- package/dist/mod.js +70 -44
- package/package.json +3 -2
- package/src/docloader.ts +55 -17
package/deno.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fedify/vocab-runtime",
|
|
3
|
-
"version": "2.0.0-pr.
|
|
3
|
+
"version": "2.0.0-pr.490.2+99a396d5",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./src/mod.ts"
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
"url": "https://hongminhee.org/"
|
|
13
13
|
},
|
|
14
14
|
"imports": {
|
|
15
|
-
"@multiformats/base-x": "npm:@multiformats/base-x@^4.0.1",
|
|
16
15
|
"asn1js": "npm:asn1js@^3.0.6",
|
|
17
16
|
"byte-encodings": "npm:byte-encodings@^1.0.11",
|
|
18
17
|
"fetch-mock": "npm:fetch-mock@^12.5.4",
|
package/dist/mod.cjs
CHANGED
|
@@ -22,6 +22,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
22
22
|
|
|
23
23
|
//#endregion
|
|
24
24
|
const __logtape_logtape = __toESM(require("@logtape/logtape"));
|
|
25
|
+
const __opentelemetry_api = __toESM(require("@opentelemetry/api"));
|
|
25
26
|
const node_process = __toESM(require("node:process"));
|
|
26
27
|
const node_dns_promises = __toESM(require("node:dns/promises"));
|
|
27
28
|
const node_net = __toESM(require("node:net"));
|
|
@@ -4178,6 +4179,42 @@ const preloadedContexts = {
|
|
|
4178
4179
|
};
|
|
4179
4180
|
var contexts_default = preloadedContexts;
|
|
4180
4181
|
|
|
4182
|
+
//#endregion
|
|
4183
|
+
//#region deno.json
|
|
4184
|
+
var name = "@fedify/vocab-runtime";
|
|
4185
|
+
var version = "2.0.0-pr.490.2+99a396d5";
|
|
4186
|
+
var license = "MIT";
|
|
4187
|
+
var exports$1 = { ".": "./src/mod.ts" };
|
|
4188
|
+
var description = "Runtime library for @fedify/vocab";
|
|
4189
|
+
var author = {
|
|
4190
|
+
"name": "Hong Minhee",
|
|
4191
|
+
"email": "hong@minhee.org",
|
|
4192
|
+
"url": "https://hongminhee.org/"
|
|
4193
|
+
};
|
|
4194
|
+
var imports = {
|
|
4195
|
+
"asn1js": "npm:asn1js@^3.0.6",
|
|
4196
|
+
"byte-encodings": "npm:byte-encodings@^1.0.11",
|
|
4197
|
+
"fetch-mock": "npm:fetch-mock@^12.5.4",
|
|
4198
|
+
"multicodec": "npm:multicodec@^3.2.1",
|
|
4199
|
+
"pkijs": "npm:pkijs@^3.2.5"
|
|
4200
|
+
};
|
|
4201
|
+
var exclude = ["dist", "node_modules"];
|
|
4202
|
+
var tasks = {
|
|
4203
|
+
"check": "deno fmt --check && deno lint && deno check src/*.ts",
|
|
4204
|
+
"test": "deno test"
|
|
4205
|
+
};
|
|
4206
|
+
var deno_default = {
|
|
4207
|
+
name,
|
|
4208
|
+
version,
|
|
4209
|
+
license,
|
|
4210
|
+
exports: exports$1,
|
|
4211
|
+
description,
|
|
4212
|
+
author,
|
|
4213
|
+
imports,
|
|
4214
|
+
exclude,
|
|
4215
|
+
tasks
|
|
4216
|
+
};
|
|
4217
|
+
|
|
4181
4218
|
//#endregion
|
|
4182
4219
|
//#region src/link.ts
|
|
4183
4220
|
const parametersNeedLowerCase = ["rel", "type"];
|
|
@@ -4360,43 +4397,6 @@ var HttpHeaderLink = class HttpHeaderLink {
|
|
|
4360
4397
|
}
|
|
4361
4398
|
};
|
|
4362
4399
|
|
|
4363
|
-
//#endregion
|
|
4364
|
-
//#region deno.json
|
|
4365
|
-
var name = "@fedify/vocab-runtime";
|
|
4366
|
-
var version = "2.0.0-pr.479.1922+564a1890";
|
|
4367
|
-
var license = "MIT";
|
|
4368
|
-
var exports$1 = { ".": "./src/mod.ts" };
|
|
4369
|
-
var description = "Runtime library for @fedify/vocab";
|
|
4370
|
-
var author = {
|
|
4371
|
-
"name": "Hong Minhee",
|
|
4372
|
-
"email": "hong@minhee.org",
|
|
4373
|
-
"url": "https://hongminhee.org/"
|
|
4374
|
-
};
|
|
4375
|
-
var imports = {
|
|
4376
|
-
"@multiformats/base-x": "npm:@multiformats/base-x@^4.0.1",
|
|
4377
|
-
"asn1js": "npm:asn1js@^3.0.6",
|
|
4378
|
-
"byte-encodings": "npm:byte-encodings@^1.0.11",
|
|
4379
|
-
"fetch-mock": "npm:fetch-mock@^12.5.4",
|
|
4380
|
-
"multicodec": "npm:multicodec@^3.2.1",
|
|
4381
|
-
"pkijs": "npm:pkijs@^3.2.5"
|
|
4382
|
-
};
|
|
4383
|
-
var exclude = ["dist", "node_modules"];
|
|
4384
|
-
var tasks = {
|
|
4385
|
-
"check": "deno fmt --check && deno lint && deno check src/*.ts",
|
|
4386
|
-
"test": "deno test"
|
|
4387
|
-
};
|
|
4388
|
-
var deno_default = {
|
|
4389
|
-
name,
|
|
4390
|
-
version,
|
|
4391
|
-
license,
|
|
4392
|
-
exports: exports$1,
|
|
4393
|
-
description,
|
|
4394
|
-
author,
|
|
4395
|
-
imports,
|
|
4396
|
-
exclude,
|
|
4397
|
-
tasks
|
|
4398
|
-
};
|
|
4399
|
-
|
|
4400
4400
|
//#endregion
|
|
4401
4401
|
//#region src/request.ts
|
|
4402
4402
|
/**
|
|
@@ -4636,6 +4636,8 @@ async function getRemoteDocument(url, response, fetch$1) {
|
|
|
4636
4636
|
* @since 1.3.0
|
|
4637
4637
|
*/
|
|
4638
4638
|
function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAgent } = {}) {
|
|
4639
|
+
const tracerProvider = __opentelemetry_api.trace.getTracerProvider();
|
|
4640
|
+
const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
|
|
4639
4641
|
async function load(url, options) {
|
|
4640
4642
|
options?.signal?.throwIfAborted();
|
|
4641
4643
|
if (!skipPreloadedContexts && url in contexts_default) {
|
|
@@ -4655,14 +4657,38 @@ function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAge
|
|
|
4655
4657
|
});
|
|
4656
4658
|
throw error;
|
|
4657
4659
|
}
|
|
4658
|
-
|
|
4659
|
-
|
|
4660
|
-
|
|
4661
|
-
|
|
4662
|
-
|
|
4660
|
+
return await tracer.startActiveSpan("activitypub.fetch_document", {
|
|
4661
|
+
kind: __opentelemetry_api.SpanKind.CLIENT,
|
|
4662
|
+
attributes: { "url.full": url }
|
|
4663
|
+
}, async (span) => {
|
|
4664
|
+
try {
|
|
4665
|
+
const request = createActivityPubRequest(url, { userAgent });
|
|
4666
|
+
logRequest(logger, request);
|
|
4667
|
+
const response = await fetch(request, {
|
|
4668
|
+
redirect: "manual",
|
|
4669
|
+
signal: options?.signal
|
|
4670
|
+
});
|
|
4671
|
+
span.setAttribute("http.response.status_code", response.status);
|
|
4672
|
+
if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
|
|
4673
|
+
const redirectUrl = response.headers.get("Location");
|
|
4674
|
+
span.setAttribute("http.redirect.url", redirectUrl);
|
|
4675
|
+
return await load(redirectUrl, options);
|
|
4676
|
+
}
|
|
4677
|
+
const result = await getRemoteDocument(url, response, load);
|
|
4678
|
+
span.setAttribute("docloader.document_url", result.documentUrl);
|
|
4679
|
+
if (result.contextUrl != null) span.setAttribute("docloader.context_url", result.contextUrl);
|
|
4680
|
+
return result;
|
|
4681
|
+
} catch (error) {
|
|
4682
|
+
span.recordException(error);
|
|
4683
|
+
span.setStatus({
|
|
4684
|
+
code: __opentelemetry_api.SpanStatusCode.ERROR,
|
|
4685
|
+
message: String(error)
|
|
4686
|
+
});
|
|
4687
|
+
throw error;
|
|
4688
|
+
} finally {
|
|
4689
|
+
span.end();
|
|
4690
|
+
}
|
|
4663
4691
|
});
|
|
4664
|
-
if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) return load(response.headers.get("Location"), options);
|
|
4665
|
-
return getRemoteDocument(url, response, load);
|
|
4666
4692
|
}
|
|
4667
4693
|
return load;
|
|
4668
4694
|
}
|
package/dist/mod.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getLogger } from "@logtape/logtape";
|
|
2
|
+
import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
|
|
2
3
|
import process from "node:process";
|
|
3
4
|
import { lookup } from "node:dns/promises";
|
|
4
5
|
import { isIP } from "node:net";
|
|
@@ -4155,6 +4156,42 @@ const preloadedContexts = {
|
|
|
4155
4156
|
};
|
|
4156
4157
|
var contexts_default = preloadedContexts;
|
|
4157
4158
|
|
|
4159
|
+
//#endregion
|
|
4160
|
+
//#region deno.json
|
|
4161
|
+
var name = "@fedify/vocab-runtime";
|
|
4162
|
+
var version = "2.0.0-pr.490.2+99a396d5";
|
|
4163
|
+
var license = "MIT";
|
|
4164
|
+
var exports = { ".": "./src/mod.ts" };
|
|
4165
|
+
var description = "Runtime library for @fedify/vocab";
|
|
4166
|
+
var author = {
|
|
4167
|
+
"name": "Hong Minhee",
|
|
4168
|
+
"email": "hong@minhee.org",
|
|
4169
|
+
"url": "https://hongminhee.org/"
|
|
4170
|
+
};
|
|
4171
|
+
var imports = {
|
|
4172
|
+
"asn1js": "npm:asn1js@^3.0.6",
|
|
4173
|
+
"byte-encodings": "npm:byte-encodings@^1.0.11",
|
|
4174
|
+
"fetch-mock": "npm:fetch-mock@^12.5.4",
|
|
4175
|
+
"multicodec": "npm:multicodec@^3.2.1",
|
|
4176
|
+
"pkijs": "npm:pkijs@^3.2.5"
|
|
4177
|
+
};
|
|
4178
|
+
var exclude = ["dist", "node_modules"];
|
|
4179
|
+
var tasks = {
|
|
4180
|
+
"check": "deno fmt --check && deno lint && deno check src/*.ts",
|
|
4181
|
+
"test": "deno test"
|
|
4182
|
+
};
|
|
4183
|
+
var deno_default = {
|
|
4184
|
+
name,
|
|
4185
|
+
version,
|
|
4186
|
+
license,
|
|
4187
|
+
exports,
|
|
4188
|
+
description,
|
|
4189
|
+
author,
|
|
4190
|
+
imports,
|
|
4191
|
+
exclude,
|
|
4192
|
+
tasks
|
|
4193
|
+
};
|
|
4194
|
+
|
|
4158
4195
|
//#endregion
|
|
4159
4196
|
//#region src/link.ts
|
|
4160
4197
|
const parametersNeedLowerCase = ["rel", "type"];
|
|
@@ -4337,43 +4374,6 @@ var HttpHeaderLink = class HttpHeaderLink {
|
|
|
4337
4374
|
}
|
|
4338
4375
|
};
|
|
4339
4376
|
|
|
4340
|
-
//#endregion
|
|
4341
|
-
//#region deno.json
|
|
4342
|
-
var name = "@fedify/vocab-runtime";
|
|
4343
|
-
var version = "2.0.0-pr.479.1922+564a1890";
|
|
4344
|
-
var license = "MIT";
|
|
4345
|
-
var exports = { ".": "./src/mod.ts" };
|
|
4346
|
-
var description = "Runtime library for @fedify/vocab";
|
|
4347
|
-
var author = {
|
|
4348
|
-
"name": "Hong Minhee",
|
|
4349
|
-
"email": "hong@minhee.org",
|
|
4350
|
-
"url": "https://hongminhee.org/"
|
|
4351
|
-
};
|
|
4352
|
-
var imports = {
|
|
4353
|
-
"@multiformats/base-x": "npm:@multiformats/base-x@^4.0.1",
|
|
4354
|
-
"asn1js": "npm:asn1js@^3.0.6",
|
|
4355
|
-
"byte-encodings": "npm:byte-encodings@^1.0.11",
|
|
4356
|
-
"fetch-mock": "npm:fetch-mock@^12.5.4",
|
|
4357
|
-
"multicodec": "npm:multicodec@^3.2.1",
|
|
4358
|
-
"pkijs": "npm:pkijs@^3.2.5"
|
|
4359
|
-
};
|
|
4360
|
-
var exclude = ["dist", "node_modules"];
|
|
4361
|
-
var tasks = {
|
|
4362
|
-
"check": "deno fmt --check && deno lint && deno check src/*.ts",
|
|
4363
|
-
"test": "deno test"
|
|
4364
|
-
};
|
|
4365
|
-
var deno_default = {
|
|
4366
|
-
name,
|
|
4367
|
-
version,
|
|
4368
|
-
license,
|
|
4369
|
-
exports,
|
|
4370
|
-
description,
|
|
4371
|
-
author,
|
|
4372
|
-
imports,
|
|
4373
|
-
exclude,
|
|
4374
|
-
tasks
|
|
4375
|
-
};
|
|
4376
|
-
|
|
4377
4377
|
//#endregion
|
|
4378
4378
|
//#region src/request.ts
|
|
4379
4379
|
/**
|
|
@@ -4613,6 +4613,8 @@ async function getRemoteDocument(url, response, fetch$1) {
|
|
|
4613
4613
|
* @since 1.3.0
|
|
4614
4614
|
*/
|
|
4615
4615
|
function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAgent } = {}) {
|
|
4616
|
+
const tracerProvider = trace.getTracerProvider();
|
|
4617
|
+
const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
|
|
4616
4618
|
async function load(url, options) {
|
|
4617
4619
|
options?.signal?.throwIfAborted();
|
|
4618
4620
|
if (!skipPreloadedContexts && url in contexts_default) {
|
|
@@ -4632,14 +4634,38 @@ function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAge
|
|
|
4632
4634
|
});
|
|
4633
4635
|
throw error;
|
|
4634
4636
|
}
|
|
4635
|
-
|
|
4636
|
-
|
|
4637
|
-
|
|
4638
|
-
|
|
4639
|
-
|
|
4637
|
+
return await tracer.startActiveSpan("activitypub.fetch_document", {
|
|
4638
|
+
kind: SpanKind.CLIENT,
|
|
4639
|
+
attributes: { "url.full": url }
|
|
4640
|
+
}, async (span) => {
|
|
4641
|
+
try {
|
|
4642
|
+
const request = createActivityPubRequest(url, { userAgent });
|
|
4643
|
+
logRequest(logger, request);
|
|
4644
|
+
const response = await fetch(request, {
|
|
4645
|
+
redirect: "manual",
|
|
4646
|
+
signal: options?.signal
|
|
4647
|
+
});
|
|
4648
|
+
span.setAttribute("http.response.status_code", response.status);
|
|
4649
|
+
if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
|
|
4650
|
+
const redirectUrl = response.headers.get("Location");
|
|
4651
|
+
span.setAttribute("http.redirect.url", redirectUrl);
|
|
4652
|
+
return await load(redirectUrl, options);
|
|
4653
|
+
}
|
|
4654
|
+
const result = await getRemoteDocument(url, response, load);
|
|
4655
|
+
span.setAttribute("docloader.document_url", result.documentUrl);
|
|
4656
|
+
if (result.contextUrl != null) span.setAttribute("docloader.context_url", result.contextUrl);
|
|
4657
|
+
return result;
|
|
4658
|
+
} catch (error) {
|
|
4659
|
+
span.recordException(error);
|
|
4660
|
+
span.setStatus({
|
|
4661
|
+
code: SpanStatusCode.ERROR,
|
|
4662
|
+
message: String(error)
|
|
4663
|
+
});
|
|
4664
|
+
throw error;
|
|
4665
|
+
} finally {
|
|
4666
|
+
span.end();
|
|
4667
|
+
}
|
|
4640
4668
|
});
|
|
4641
|
-
if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) return load(response.headers.get("Location"), options);
|
|
4642
|
-
return getRemoteDocument(url, response, load);
|
|
4643
4669
|
}
|
|
4644
4670
|
return load;
|
|
4645
4671
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fedify/vocab-runtime",
|
|
3
|
-
"version": "2.0.0-pr.
|
|
3
|
+
"version": "2.0.0-pr.490.2+99a396d5",
|
|
4
4
|
"homepage": "https://fedify.dev/",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -55,8 +55,9 @@
|
|
|
55
55
|
"typescript": "^5.9.3"
|
|
56
56
|
},
|
|
57
57
|
"dependencies": {
|
|
58
|
-
"@logtape/logtape": "^1.
|
|
58
|
+
"@logtape/logtape": "^1.2.2",
|
|
59
59
|
"@multiformats/base-x": "^4.0.1",
|
|
60
|
+
"@opentelemetry/api": "^1.9.0",
|
|
60
61
|
"asn1js": "^3.0.6",
|
|
61
62
|
"byte-encodings": "^1.0.11",
|
|
62
63
|
"multicodec": "^3.2.1",
|
package/src/docloader.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { getLogger } from "@logtape/logtape";
|
|
2
|
+
import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
|
|
3
|
+
import metadata from "../deno.json" with { type: "json" };
|
|
2
4
|
import preloadedContexts from "./contexts.ts";
|
|
3
5
|
import { HttpHeaderLink } from "./link.ts";
|
|
4
6
|
import {
|
|
@@ -266,6 +268,9 @@ export function getDocumentLoader(
|
|
|
266
268
|
{ allowPrivateAddress, skipPreloadedContexts, userAgent }:
|
|
267
269
|
GetDocumentLoaderOptions = {},
|
|
268
270
|
): DocumentLoader {
|
|
271
|
+
const tracerProvider = trace.getTracerProvider();
|
|
272
|
+
const tracer = tracerProvider.getTracer(metadata.name, metadata.version);
|
|
273
|
+
|
|
269
274
|
async function load(
|
|
270
275
|
url: string,
|
|
271
276
|
options?: DocumentLoaderOptions,
|
|
@@ -289,23 +294,56 @@ export function getDocumentLoader(
|
|
|
289
294
|
throw error;
|
|
290
295
|
}
|
|
291
296
|
}
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
297
|
+
|
|
298
|
+
return await tracer.startActiveSpan(
|
|
299
|
+
"activitypub.fetch_document",
|
|
300
|
+
{
|
|
301
|
+
kind: SpanKind.CLIENT,
|
|
302
|
+
attributes: {
|
|
303
|
+
"url.full": url,
|
|
304
|
+
},
|
|
305
|
+
},
|
|
306
|
+
async (span) => {
|
|
307
|
+
try {
|
|
308
|
+
const request = createActivityPubRequest(url, { userAgent });
|
|
309
|
+
logRequest(logger, request);
|
|
310
|
+
const response = await fetch(request, {
|
|
311
|
+
// Since Bun has a bug that ignores the `Request.redirect` option,
|
|
312
|
+
// to work around it we specify `redirect: "manual"` here too:
|
|
313
|
+
// https://github.com/oven-sh/bun/issues/10754
|
|
314
|
+
redirect: "manual",
|
|
315
|
+
signal: options?.signal,
|
|
316
|
+
});
|
|
317
|
+
span.setAttribute("http.response.status_code", response.status);
|
|
318
|
+
|
|
319
|
+
// Follow redirects manually to get the final URL:
|
|
320
|
+
if (
|
|
321
|
+
response.status >= 300 && response.status < 400 &&
|
|
322
|
+
response.headers.has("Location")
|
|
323
|
+
) {
|
|
324
|
+
const redirectUrl = response.headers.get("Location")!;
|
|
325
|
+
span.setAttribute("http.redirect.url", redirectUrl);
|
|
326
|
+
return await load(redirectUrl, options);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
const result = await getRemoteDocument(url, response, load);
|
|
330
|
+
span.setAttribute("docloader.document_url", result.documentUrl);
|
|
331
|
+
if (result.contextUrl != null) {
|
|
332
|
+
span.setAttribute("docloader.context_url", result.contextUrl);
|
|
333
|
+
}
|
|
334
|
+
return result;
|
|
335
|
+
} catch (error) {
|
|
336
|
+
span.recordException(error as Error);
|
|
337
|
+
span.setStatus({
|
|
338
|
+
code: SpanStatusCode.ERROR,
|
|
339
|
+
message: String(error),
|
|
340
|
+
});
|
|
341
|
+
throw error;
|
|
342
|
+
} finally {
|
|
343
|
+
span.end();
|
|
344
|
+
}
|
|
345
|
+
},
|
|
346
|
+
);
|
|
309
347
|
}
|
|
310
348
|
return load;
|
|
311
349
|
}
|