@fedify/express 0.2.1-dev.13 → 1.8.0-dev.935

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/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright 2024 Hong Minhee
3
+ Copyright 2024–2025 Hong Minhee
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy of
6
6
  this software and associated documentation files (the "Software"), to deal in
package/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ <!-- deno-fmt-ignore-file -->
2
+
1
3
  @fedify/express: Integrate Fedify with Express
2
4
  ==============================================
3
5
 
@@ -12,7 +14,7 @@ The integration code looks like this:
12
14
  ~~~~ typescript
13
15
  import express from "express";
14
16
  import { integrateFederation } from "@fedify/express";
15
- import { federation } from "./federation"; // Your `Federation` instance
17
+ import { federation } from "./federation.ts"; // Your `Federation` instance
16
18
 
17
19
  export const app = express();
18
20
 
@@ -29,50 +31,3 @@ app.use(integrateFederation(federation, (req) => "context data goes here"));
29
31
  [@fedify@hollo.social]: https://hollo.social/@fedify
30
32
  [Fedify]: https://fedify.dev/
31
33
  [Express]: https://expressjs.com/
32
-
33
-
34
- Changelog
35
- ---------
36
-
37
- ### Version 0.2.1
38
-
39
- To be released.
40
-
41
- ### Version 0.2.0
42
-
43
- Released on September 30, 2024.
44
-
45
- - Relaxed the requirement for the peer dependency `@fedify/fedify` to allow
46
- any version under 2.0.0.
47
-
48
- ### Version 0.1.4
49
-
50
- Released on August 31, 2024.
51
-
52
- - Fixed a bug where it throws `TypeError` with message <q>RequestInit: duplex
53
- option is required when sending a body.</q>
54
-
55
- ### Version 0.1.3
56
-
57
- Released on August 5, 2024.
58
-
59
- - Fixed the middleware to not fill `Request.body` when the request method is
60
- `GET` or `HEAD`.
61
- - Fixed the middleware to content-negotiate the response based on
62
- the `Accept` header.
63
-
64
- ### Version 0.1.2
65
-
66
- Released on August 5, 2024.
67
-
68
- - Fixed incorrectly configured export targets in *package.json*.
69
-
70
- ### Version 0.1.1
71
-
72
- Released on August 5, 2024.
73
-
74
- - Added missing entry points to the *package.json*.
75
-
76
- ### Version 0.1.0
77
-
78
- Initial release. Released on August 5, 2024.
package/dist/index.d.ts CHANGED
@@ -1,8 +1,9 @@
1
- import { Federation } from '@fedify/fedify';
2
- import { Request, Response, NextFunction } from 'express';
1
+ import { Federation } from "@fedify/fedify";
2
+ import { NextFunction, Request, Response } from "express";
3
3
 
4
+ //#region index.d.ts
4
5
  type Middleware = (req: Request, res: Response, next: NextFunction) => void;
5
6
  type ContextDataFactory<TContextData> = (req: Request) => TContextData | Promise<TContextData>;
6
7
  declare function integrateFederation<TContextData>(federation: Federation<TContextData>, contextDataFactory: ContextDataFactory<TContextData>): Middleware;
7
-
8
- export { type ContextDataFactory, integrateFederation };
8
+ //#endregion
9
+ export { ContextDataFactory, integrateFederation };
package/dist/index.js CHANGED
@@ -1,80 +1,76 @@
1
- // src/index.ts
1
+ import { Buffer } from "node:buffer";
2
2
  import { Readable } from "node:stream";
3
+
4
+ //#region index.ts
3
5
  function integrateFederation(federation, contextDataFactory) {
4
- return (req, res, next) => {
5
- const request = fromERequest(req);
6
- const contextData = contextDataFactory(req);
7
- const contextDataPromise = contextData instanceof Promise ? contextData : Promise.resolve(contextData);
8
- contextDataPromise.then(async (contextData2) => {
9
- let notFound = false;
10
- let notAcceptable = false;
11
- const response = await federation.fetch(request, {
12
- contextData: contextData2,
13
- onNotFound: () => {
14
- notFound = true;
15
- next();
16
- return new Response("Not found", { status: 404 });
17
- },
18
- onNotAcceptable: () => {
19
- notAcceptable = true;
20
- next();
21
- return new Response("Not acceptable", {
22
- status: 406,
23
- headers: {
24
- "Content-Type": "text/plain",
25
- Vary: "Accept"
26
- }
27
- });
28
- }
29
- });
30
- if (notFound || notAcceptable && req.route != null) return;
31
- await setEResponse(res, response);
32
- res.end();
33
- res.status = () => res;
34
- res.send = () => res;
35
- res.end = () => res;
36
- res.json = () => res;
37
- res.removeHeader = () => res;
38
- res.setHeader = () => res;
39
- });
40
- };
6
+ return (req, res, next) => {
7
+ const request = fromERequest(req);
8
+ const contextData = contextDataFactory(req);
9
+ const contextDataPromise = contextData instanceof Promise ? contextData : Promise.resolve(contextData);
10
+ contextDataPromise.then(async (contextData$1) => {
11
+ let notFound = false;
12
+ let notAcceptable = false;
13
+ const response = await federation.fetch(request, {
14
+ contextData: contextData$1,
15
+ onNotFound: () => {
16
+ notFound = true;
17
+ next();
18
+ return new Response("Not found", { status: 404 });
19
+ },
20
+ onNotAcceptable: () => {
21
+ notAcceptable = true;
22
+ next();
23
+ return new Response("Not acceptable", {
24
+ status: 406,
25
+ headers: {
26
+ "Content-Type": "text/plain",
27
+ Vary: "Accept"
28
+ }
29
+ });
30
+ }
31
+ });
32
+ if (notFound || notAcceptable && req.route != null) return;
33
+ await setEResponse(res, response);
34
+ res.end();
35
+ res.status = () => res;
36
+ res.send = () => res;
37
+ res.end = () => res;
38
+ res.json = () => res;
39
+ res.removeHeader = () => res;
40
+ res.setHeader = () => res;
41
+ });
42
+ };
41
43
  }
42
44
  function fromERequest(req) {
43
- const url = `${req.protocol}://${req.header("Host") ?? req.hostname}${req.url}`;
44
- const headers = new Headers();
45
- for (const [key, value] of Object.entries(req.headers)) {
46
- if (Array.isArray(value)) {
47
- for (const v of value) headers.append(key, v);
48
- } else if (typeof value === "string") {
49
- headers.append(key, value);
50
- }
51
- }
52
- return new Request(url, {
53
- method: req.method,
54
- headers,
55
- duplex: "half",
56
- body: req.method === "GET" || req.method === "HEAD" ? void 0 : Readable.toWeb(req)
57
- });
45
+ const url = `${req.protocol}://${req.header("Host") ?? req.hostname}${req.url}`;
46
+ const headers = new Headers();
47
+ for (const [key, value] of Object.entries(req.headers)) if (Array.isArray(value)) for (const v of value) headers.append(key, v);
48
+ else if (typeof value === "string") headers.append(key, value);
49
+ return new Request(url, {
50
+ method: req.method,
51
+ headers,
52
+ duplex: "half",
53
+ body: req.method === "GET" || req.method === "HEAD" ? void 0 : Readable.toWeb(req)
54
+ });
58
55
  }
59
56
  function setEResponse(res, response) {
60
- res.status(response.status);
61
- response.headers.forEach((value, key) => res.setHeader(key, value));
62
- if (response.body == null) return Promise.resolve();
63
- const body = response.body;
64
- return new Promise((resolve) => {
65
- const reader = body.getReader();
66
- reader.read().then(function read({ done, value }) {
67
- if (done) {
68
- reader.releaseLock();
69
- resolve();
70
- return;
71
- }
72
- res.write(Buffer.from(value));
73
- reader.read().then(read);
74
- });
75
- });
57
+ res.status(response.status);
58
+ response.headers.forEach((value, key) => res.setHeader(key, value));
59
+ if (response.body == null) return Promise.resolve();
60
+ const body = response.body;
61
+ return new Promise((resolve) => {
62
+ const reader = body.getReader();
63
+ reader.read().then(function read({ done, value }) {
64
+ if (done) {
65
+ reader.releaseLock();
66
+ resolve();
67
+ return;
68
+ }
69
+ res.write(Buffer.from(value));
70
+ reader.read().then(read);
71
+ });
72
+ });
76
73
  }
77
- export {
78
- integrateFederation
79
- };
80
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gXCJub2RlOnN0cmVhbVwiO1xuaW1wb3J0IHR5cGUgeyBGZWRlcmF0aW9uIH0gZnJvbSBcIkBmZWRpZnkvZmVkaWZ5XCI7XG5pbXBvcnQgdHlwZSB7XG4gIFJlcXVlc3QgYXMgRVJlcXVlc3QsXG4gIFJlc3BvbnNlIGFzIEVSZXNwb25zZSxcbiAgTmV4dEZ1bmN0aW9uLFxufSBmcm9tIFwiZXhwcmVzc1wiO1xuXG50eXBlIE1pZGRsZXdhcmUgPSAocmVxOiBFUmVxdWVzdCwgcmVzOiBFUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbikgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgQ29udGV4dERhdGFGYWN0b3J5PFRDb250ZXh0RGF0YT4gPSAoXG4gIHJlcTogRVJlcXVlc3QsXG4pID0+IFRDb250ZXh0RGF0YSB8IFByb21pc2U8VENvbnRleHREYXRhPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGludGVncmF0ZUZlZGVyYXRpb248VENvbnRleHREYXRhPihcbiAgZmVkZXJhdGlvbjogRmVkZXJhdGlvbjxUQ29udGV4dERhdGE+LFxuICBjb250ZXh0RGF0YUZhY3Rvcnk6IENvbnRleHREYXRhRmFjdG9yeTxUQ29udGV4dERhdGE+LFxuKTogTWlkZGxld2FyZSB7XG4gIHJldHVybiAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gZnJvbUVSZXF1ZXN0KHJlcSk7XG4gICAgY29uc3QgY29udGV4dERhdGEgPSBjb250ZXh0RGF0YUZhY3RvcnkocmVxKTtcbiAgICBjb25zdCBjb250ZXh0RGF0YVByb21pc2UgPVxuICAgICAgY29udGV4dERhdGEgaW5zdGFuY2VvZiBQcm9taXNlXG4gICAgICAgID8gY29udGV4dERhdGFcbiAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoY29udGV4dERhdGEpO1xuICAgIGNvbnRleHREYXRhUHJvbWlzZS50aGVuKGFzeW5jIChjb250ZXh0RGF0YSkgPT4ge1xuICAgICAgbGV0IG5vdEZvdW5kID0gZmFsc2U7XG4gICAgICBsZXQgbm90QWNjZXB0YWJsZSA9IGZhbHNlO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZWRlcmF0aW9uLmZldGNoKHJlcXVlc3QsIHtcbiAgICAgICAgY29udGV4dERhdGEsXG4gICAgICAgIG9uTm90Rm91bmQ6ICgpID0+IHtcbiAgICAgICAgICAvLyBJZiB0aGUgYGZlZGVyYXRpb25gIG9iamVjdCBmaW5kcyBhIHJlcXVlc3Qgbm90IHJlc3BvbnNpYmxlIGZvciBpdFxuICAgICAgICAgIC8vIChpLmUuLCBub3QgYSBmZWRlcmF0aW9uLXJlbGF0ZWQgcmVxdWVzdCksIGl0IHdpbGwgY2FsbCB0aGUgYG5leHRgXG4gICAgICAgICAgLy8gZnVuY3Rpb24gcHJvdmlkZWQgYnkgdGhlIEV4cHJlc3MgZnJhbWV3b3JrIHRvIGNvbnRpbnVlIHRoZSByZXF1ZXN0XG4gICAgICAgICAgLy8gaGFuZGxpbmcgYnkgdGhlIEV4cHJlc3M6XG4gICAgICAgICAgbm90Rm91bmQgPSB0cnVlO1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiTm90IGZvdW5kXCIsIHsgc3RhdHVzOiA0MDQgfSk7IC8vIHVudXNlZFxuICAgICAgICB9LFxuICAgICAgICBvbk5vdEFjY2VwdGFibGU6ICgpID0+IHtcbiAgICAgICAgICAvLyBTaW1pbGFyIHRvIGBvbk5vdEZvdW5kYCwgYnV0IHNsaWdodGx5IG1vcmUgdHJpY2t5LlxuICAgICAgICAgIC8vIFdoZW4gdGhlIGBmZWRlcmF0aW9uYCBvYmplY3QgZmluZHMgYSByZXF1ZXN0IG5vdCBhY2NlcHRhYmxlXG4gICAgICAgICAgLy8gdHlwZS13aXNlIChpLmUuLCBhIHVzZXItYWdlbnQgZG9lc24ndCB3YW50IEpTT04tTEQpLCBpdCB3aWxsIGNhbGxcbiAgICAgICAgICAvLyB0aGUgYG5leHRgIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5IHRoZSBFeHByZXNzIGZyYW1ld29yayB0byBjb250aW51ZVxuICAgICAgICAgIC8vIGlmIGFueSByb3V0ZSBpcyBtYXRjaGVkLCBhbmQgb3RoZXJ3aXNlLCBpdCB3aWxsIHJldHVybiBhIDQwNiBOb3RcbiAgICAgICAgICAvLyBBY2NlcHRhYmxlIHJlc3BvbnNlOlxuICAgICAgICAgIG5vdEFjY2VwdGFibGUgPSB0cnVlO1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiTm90IGFjY2VwdGFibGVcIiwge1xuICAgICAgICAgICAgc3RhdHVzOiA0MDYsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwidGV4dC9wbGFpblwiLFxuICAgICAgICAgICAgICBWYXJ5OiBcIkFjY2VwdFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgaWYgKG5vdEZvdW5kIHx8IChub3RBY2NlcHRhYmxlICYmIHJlcS5yb3V0ZSAhPSBudWxsKSkgcmV0dXJuO1xuICAgICAgYXdhaXQgc2V0RVJlc3BvbnNlKHJlcywgcmVzcG9uc2UpO1xuICAgICAgLy8gUHJldmVudCB0aGUgRXhwcmVzcyBmcmFtZXdvcmsgZnJvbSBzZW5kaW5nIHRoZSByZXNwb25zZSBhZ2FpbjpcbiAgICAgIHJlcy5lbmQoKTtcbiAgICAgIHJlcy5zdGF0dXMgPSAoKSA9PiByZXM7XG4gICAgICByZXMuc2VuZCA9ICgpID0+IHJlcztcbiAgICAgIHJlcy5lbmQgPSAoKSA9PiByZXM7XG4gICAgICByZXMuanNvbiA9ICgpID0+IHJlcztcbiAgICAgIHJlcy5yZW1vdmVIZWFkZXIgPSAoKSA9PiByZXM7XG4gICAgICByZXMuc2V0SGVhZGVyID0gKCkgPT4gcmVzO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBmcm9tRVJlcXVlc3QocmVxOiBFUmVxdWVzdCk6IFJlcXVlc3Qge1xuICBjb25zdCB1cmwgPSBgJHtyZXEucHJvdG9jb2x9Oi8vJHtyZXEuaGVhZGVyKFwiSG9zdFwiKSA/PyByZXEuaG9zdG5hbWV9JHtyZXEudXJsfWA7XG4gIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXEuaGVhZGVycykpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZSkgaGVhZGVycy5hcHBlbmQoa2V5LCB2KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICBtZXRob2Q6IHJlcS5tZXRob2QsXG4gICAgaGVhZGVycyxcbiAgICBkdXBsZXg6IFwiaGFsZlwiLFxuICAgIGJvZHk6XG4gICAgICByZXEubWV0aG9kID09PSBcIkdFVFwiIHx8IHJlcS5tZXRob2QgPT09IFwiSEVBRFwiXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogKFJlYWRhYmxlLnRvV2ViKHJlcSkpLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2V0RVJlc3BvbnNlKHJlczogRVJlc3BvbnNlLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmVzLnN0YXR1cyhyZXNwb25zZS5zdGF0dXMpO1xuICByZXNwb25zZS5oZWFkZXJzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHJlcy5zZXRIZWFkZXIoa2V5LCB2YWx1ZSkpO1xuICBpZiAocmVzcG9uc2UuYm9keSA9PSBudWxsKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIGNvbnN0IGJvZHkgPSByZXNwb25zZS5ib2R5O1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCByZWFkZXIgPSBib2R5LmdldFJlYWRlcigpO1xuICAgIHJlYWRlci5yZWFkKCkudGhlbihmdW5jdGlvbiByZWFkKHsgZG9uZSwgdmFsdWUgfSkge1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVzLndyaXRlKEJ1ZmZlci5mcm9tKHZhbHVlKSk7XG4gICAgICByZWFkZXIucmVhZCgpLnRoZW4ocmVhZCk7XG4gICAgfSk7XG4gIH0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLFNBQVMsZ0JBQWdCO0FBY2xCLFNBQVMsb0JBQ2QsWUFDQSxvQkFDWTtBQUNaLFNBQU8sQ0FBQyxLQUFLLEtBQUssU0FBUztBQUN6QixVQUFNLFVBQVUsYUFBYSxHQUFHO0FBQ2hDLFVBQU0sY0FBYyxtQkFBbUIsR0FBRztBQUMxQyxVQUFNLHFCQUNKLHVCQUF1QixVQUNuQixjQUNBLFFBQVEsUUFBUSxXQUFXO0FBQ2pDLHVCQUFtQixLQUFLLE9BQU9BLGlCQUFnQjtBQUM3QyxVQUFJLFdBQVc7QUFDZixVQUFJLGdCQUFnQjtBQUNwQixZQUFNLFdBQVcsTUFBTSxXQUFXLE1BQU0sU0FBUztBQUFBLFFBQy9DLGFBQUFBO0FBQUEsUUFDQSxZQUFZLE1BQU07QUFLaEIscUJBQVc7QUFDWCxlQUFLO0FBQ0wsaUJBQU8sSUFBSSxTQUFTLGFBQWEsRUFBRSxRQUFRLElBQUksQ0FBQztBQUFBLFFBQ2xEO0FBQUEsUUFDQSxpQkFBaUIsTUFBTTtBQU9yQiwwQkFBZ0I7QUFDaEIsZUFBSztBQUNMLGlCQUFPLElBQUksU0FBUyxrQkFBa0I7QUFBQSxZQUNwQyxRQUFRO0FBQUEsWUFDUixTQUFTO0FBQUEsY0FDUCxnQkFBZ0I7QUFBQSxjQUNoQixNQUFNO0FBQUEsWUFDUjtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGLENBQUM7QUFDRCxVQUFJLFlBQWEsaUJBQWlCLElBQUksU0FBUyxLQUFPO0FBQ3RELFlBQU0sYUFBYSxLQUFLLFFBQVE7QUFFaEMsVUFBSSxJQUFJO0FBQ1IsVUFBSSxTQUFTLE1BQU07QUFDbkIsVUFBSSxPQUFPLE1BQU07QUFDakIsVUFBSSxNQUFNLE1BQU07QUFDaEIsVUFBSSxPQUFPLE1BQU07QUFDakIsVUFBSSxlQUFlLE1BQU07QUFDekIsVUFBSSxZQUFZLE1BQU07QUFBQSxJQUN4QixDQUFDO0FBQUEsRUFDSDtBQUNGO0FBRUEsU0FBUyxhQUFhLEtBQXdCO0FBQzVDLFFBQU0sTUFBTSxHQUFHLElBQUksUUFBUSxNQUFNLElBQUksT0FBTyxNQUFNLEtBQUssSUFBSSxRQUFRLEdBQUcsSUFBSSxHQUFHO0FBQzdFLFFBQU0sVUFBVSxJQUFJLFFBQVE7QUFDNUIsYUFBVyxDQUFDLEtBQUssS0FBSyxLQUFLLE9BQU8sUUFBUSxJQUFJLE9BQU8sR0FBRztBQUN0RCxRQUFJLE1BQU0sUUFBUSxLQUFLLEdBQUc7QUFDeEIsaUJBQVcsS0FBSyxNQUFPLFNBQVEsT0FBTyxLQUFLLENBQUM7QUFBQSxJQUM5QyxXQUFXLE9BQU8sVUFBVSxVQUFVO0FBQ3BDLGNBQVEsT0FBTyxLQUFLLEtBQUs7QUFBQSxJQUMzQjtBQUFBLEVBQ0Y7QUFDQSxTQUFPLElBQUksUUFBUSxLQUFLO0FBQUEsSUFDdEIsUUFBUSxJQUFJO0FBQUEsSUFDWjtBQUFBLElBQ0EsUUFBUTtBQUFBLElBQ1IsTUFDRSxJQUFJLFdBQVcsU0FBUyxJQUFJLFdBQVcsU0FDbkMsU0FDQyxTQUFTLE1BQU0sR0FBRztBQUFBLEVBQzNCLENBQUM7QUFDSDtBQUVBLFNBQVMsYUFBYSxLQUFnQixVQUFtQztBQUN2RSxNQUFJLE9BQU8sU0FBUyxNQUFNO0FBQzFCLFdBQVMsUUFBUSxRQUFRLENBQUMsT0FBTyxRQUFRLElBQUksVUFBVSxLQUFLLEtBQUssQ0FBQztBQUNsRSxNQUFJLFNBQVMsUUFBUSxLQUFNLFFBQU8sUUFBUSxRQUFRO0FBQ2xELFFBQU0sT0FBTyxTQUFTO0FBQ3RCLFNBQU8sSUFBSSxRQUFRLENBQUMsWUFBWTtBQUM5QixVQUFNLFNBQVMsS0FBSyxVQUFVO0FBQzlCLFdBQU8sS0FBSyxFQUFFLEtBQUssU0FBUyxLQUFLLEVBQUUsTUFBTSxNQUFNLEdBQUc7QUFDaEQsVUFBSSxNQUFNO0FBQ1IsZUFBTyxZQUFZO0FBQ25CLGdCQUFRO0FBQ1I7QUFBQSxNQUNGO0FBQ0EsVUFBSSxNQUFNLE9BQU8sS0FBSyxLQUFLLENBQUM7QUFDNUIsYUFBTyxLQUFLLEVBQUUsS0FBSyxJQUFJO0FBQUEsSUFDekIsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogWyJjb250ZXh0RGF0YSJdCn0K
74
+
75
+ //#endregion
76
+ export { integrateFederation };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fedify/express",
3
- "version": "0.2.1-dev.13+1112562e",
3
+ "version": "1.8.0-dev.935+e865d6e4",
4
4
  "description": "Integrate Fedify with Express",
5
5
  "keywords": [
6
6
  "Fedify",
@@ -12,16 +12,18 @@
12
12
  "email": "hong@minhee.org",
13
13
  "url": "https://hongminhee.org/"
14
14
  },
15
- "homepage": "https://github.com/fedify-dev/express",
15
+ "homepage": "https://fedify.dev/",
16
16
  "repository": {
17
17
  "type": "git",
18
- "url": "git+https://github.com/fedify-dev/express.git"
18
+ "url": "git+https://github.com/fedify-dev/fedify.git",
19
+ "directory": "express"
19
20
  },
20
21
  "license": "MIT",
21
22
  "bugs": {
22
- "url": "https://github.com/fedify-dev/express/issues"
23
+ "url": "https://github.com/fedify-dev/fedify/issues"
23
24
  },
24
25
  "funding": [
26
+ "https://opencollective.com/fedify",
25
27
  "https://github.com/sponsors/dahlia"
26
28
  ],
27
29
  "type": "module",
@@ -33,24 +35,25 @@
33
35
  "types": "./dist/index.d.ts",
34
36
  "default": "./dist/index.js"
35
37
  }
36
- }
38
+ },
39
+ "./package.json": "./package.json"
37
40
  },
38
41
  "files": [
39
- "dist/"
42
+ "dist/",
43
+ "package.json"
40
44
  ],
41
- "devDependencies": {
42
- "@biomejs/biome": "1.8.3",
43
- "@types/express": ">=4.0.0 <5",
44
- "@types/node": "^20.14.10",
45
- "express": ">= 4.0.0 < 5",
46
- "tsup": "^8.1.0",
47
- "typescript": "^5.0.0"
48
- },
49
45
  "peerDependencies": {
50
- "@fedify/fedify": ">=0.12.0 <2"
46
+ "express": "^4.0.0",
47
+ "@fedify/fedify": "1.8.0-dev.935+e865d6e4"
48
+ },
49
+ "devDependencies": {
50
+ "@types/express": "^4.0.0",
51
+ "@types/node": "^22.16.0",
52
+ "tsdown": "^0.12.9",
53
+ "typescript": "^5.8.3"
51
54
  },
52
55
  "scripts": {
53
- "build": "tsup",
54
- "prepack": "tsup"
56
+ "build": "tsdown",
57
+ "prepublish": "tsdown"
55
58
  }
56
- }
59
+ }