@fedify/express 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -34,6 +34,13 @@ app.use(integrateFederation(federation, (req) => "context data goes here"));
34
34
  Changelog
35
35
  ---------
36
36
 
37
+ ### Version 0.1.4
38
+
39
+ Released on August 31, 2024.
40
+
41
+ - Fixed a bug where it throws `TypeError` with message <q>RequestInit: duplex
42
+ option is required when sending a body.</q>
43
+
37
44
  ### Version 0.1.3
38
45
 
39
46
  Released on August 5, 2024.
package/dist/index.js CHANGED
@@ -52,6 +52,7 @@ function fromERequest(req) {
52
52
  return new Request(url, {
53
53
  method: req.method,
54
54
  headers,
55
+ duplex: "half",
55
56
  body: req.method === "GET" || req.method === "HEAD" ? void 0 : Readable.toWeb(req)
56
57
  });
57
58
  }
@@ -76,4 +77,4 @@ function setEResponse(res, response) {
76
77
  export {
77
78
  integrateFederation
78
79
  };
79
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gXCJub2RlOnN0cmVhbVwiO1xuaW1wb3J0IHR5cGUgeyBGZWRlcmF0aW9uIH0gZnJvbSBcIkBmZWRpZnkvZmVkaWZ5XCI7XG5pbXBvcnQgdHlwZSB7XG4gIFJlcXVlc3QgYXMgRVJlcXVlc3QsXG4gIFJlc3BvbnNlIGFzIEVSZXNwb25zZSxcbiAgTmV4dEZ1bmN0aW9uLFxufSBmcm9tIFwiZXhwcmVzc1wiO1xuXG50eXBlIE1pZGRsZXdhcmUgPSAocmVxOiBFUmVxdWVzdCwgcmVzOiBFUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbikgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgQ29udGV4dERhdGFGYWN0b3J5PFRDb250ZXh0RGF0YT4gPSAoXG4gIHJlcTogRVJlcXVlc3QsXG4pID0+IFRDb250ZXh0RGF0YSB8IFByb21pc2U8VENvbnRleHREYXRhPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGludGVncmF0ZUZlZGVyYXRpb248VENvbnRleHREYXRhPihcbiAgZmVkZXJhdGlvbjogRmVkZXJhdGlvbjxUQ29udGV4dERhdGE+LFxuICBjb250ZXh0RGF0YUZhY3Rvcnk6IENvbnRleHREYXRhRmFjdG9yeTxUQ29udGV4dERhdGE+LFxuKTogTWlkZGxld2FyZSB7XG4gIHJldHVybiAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gZnJvbUVSZXF1ZXN0KHJlcSk7XG4gICAgY29uc3QgY29udGV4dERhdGEgPSBjb250ZXh0RGF0YUZhY3RvcnkocmVxKTtcbiAgICBjb25zdCBjb250ZXh0RGF0YVByb21pc2UgPVxuICAgICAgY29udGV4dERhdGEgaW5zdGFuY2VvZiBQcm9taXNlXG4gICAgICAgID8gY29udGV4dERhdGFcbiAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoY29udGV4dERhdGEpO1xuICAgIGNvbnRleHREYXRhUHJvbWlzZS50aGVuKGFzeW5jIChjb250ZXh0RGF0YSkgPT4ge1xuICAgICAgbGV0IG5vdEZvdW5kID0gZmFsc2U7XG4gICAgICBsZXQgbm90QWNjZXB0YWJsZSA9IGZhbHNlO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZWRlcmF0aW9uLmZldGNoKHJlcXVlc3QsIHtcbiAgICAgICAgY29udGV4dERhdGEsXG4gICAgICAgIG9uTm90Rm91bmQ6ICgpID0+IHtcbiAgICAgICAgICAvLyBJZiB0aGUgYGZlZGVyYXRpb25gIG9iamVjdCBmaW5kcyBhIHJlcXVlc3Qgbm90IHJlc3BvbnNpYmxlIGZvciBpdFxuICAgICAgICAgIC8vIChpLmUuLCBub3QgYSBmZWRlcmF0aW9uLXJlbGF0ZWQgcmVxdWVzdCksIGl0IHdpbGwgY2FsbCB0aGUgYG5leHRgXG4gICAgICAgICAgLy8gZnVuY3Rpb24gcHJvdmlkZWQgYnkgdGhlIEV4cHJlc3MgZnJhbWV3b3JrIHRvIGNvbnRpbnVlIHRoZSByZXF1ZXN0XG4gICAgICAgICAgLy8gaGFuZGxpbmcgYnkgdGhlIEV4cHJlc3M6XG4gICAgICAgICAgbm90Rm91bmQgPSB0cnVlO1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiTm90IGZvdW5kXCIsIHsgc3RhdHVzOiA0MDQgfSk7IC8vIHVudXNlZFxuICAgICAgICB9LFxuICAgICAgICBvbk5vdEFjY2VwdGFibGU6ICgpID0+IHtcbiAgICAgICAgICAvLyBTaW1pbGFyIHRvIGBvbk5vdEZvdW5kYCwgYnV0IHNsaWdodGx5IG1vcmUgdHJpY2t5LlxuICAgICAgICAgIC8vIFdoZW4gdGhlIGBmZWRlcmF0aW9uYCBvYmplY3QgZmluZHMgYSByZXF1ZXN0IG5vdCBhY2NlcHRhYmxlXG4gICAgICAgICAgLy8gdHlwZS13aXNlIChpLmUuLCBhIHVzZXItYWdlbnQgZG9lc24ndCB3YW50IEpTT04tTEQpLCBpdCB3aWxsIGNhbGxcbiAgICAgICAgICAvLyB0aGUgYG5leHRgIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5IHRoZSBFeHByZXNzIGZyYW1ld29yayB0byBjb250aW51ZVxuICAgICAgICAgIC8vIGlmIGFueSByb3V0ZSBpcyBtYXRjaGVkLCBhbmQgb3RoZXJ3aXNlLCBpdCB3aWxsIHJldHVybiBhIDQwNiBOb3RcbiAgICAgICAgICAvLyBBY2NlcHRhYmxlIHJlc3BvbnNlOlxuICAgICAgICAgIG5vdEFjY2VwdGFibGUgPSB0cnVlO1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiTm90IGFjY2VwdGFibGVcIiwge1xuICAgICAgICAgICAgc3RhdHVzOiA0MDYsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwidGV4dC9wbGFpblwiLFxuICAgICAgICAgICAgICBWYXJ5OiBcIkFjY2VwdFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgaWYgKG5vdEZvdW5kIHx8IChub3RBY2NlcHRhYmxlICYmIHJlcS5yb3V0ZSAhPSBudWxsKSkgcmV0dXJuO1xuICAgICAgYXdhaXQgc2V0RVJlc3BvbnNlKHJlcywgcmVzcG9uc2UpO1xuICAgICAgLy8gUHJldmVudCB0aGUgRXhwcmVzcyBmcmFtZXdvcmsgZnJvbSBzZW5kaW5nIHRoZSByZXNwb25zZSBhZ2FpbjpcbiAgICAgIHJlcy5lbmQoKTtcbiAgICAgIHJlcy5zdGF0dXMgPSAoKSA9PiByZXM7XG4gICAgICByZXMuc2VuZCA9ICgpID0+IHJlcztcbiAgICAgIHJlcy5lbmQgPSAoKSA9PiByZXM7XG4gICAgICByZXMuanNvbiA9ICgpID0+IHJlcztcbiAgICAgIHJlcy5yZW1vdmVIZWFkZXIgPSAoKSA9PiByZXM7XG4gICAgICByZXMuc2V0SGVhZGVyID0gKCkgPT4gcmVzO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBmcm9tRVJlcXVlc3QocmVxOiBFUmVxdWVzdCk6IFJlcXVlc3Qge1xuICBjb25zdCB1cmwgPSBgJHtyZXEucHJvdG9jb2x9Oi8vJHtyZXEuaGVhZGVyKFwiSG9zdFwiKSA/PyByZXEuaG9zdG5hbWV9JHtyZXEudXJsfWA7XG4gIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXEuaGVhZGVycykpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZSkgaGVhZGVycy5hcHBlbmQoa2V5LCB2KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICBtZXRob2Q6IHJlcS5tZXRob2QsXG4gICAgaGVhZGVycyxcbiAgICBib2R5OlxuICAgICAgcmVxLm1ldGhvZCA9PT0gXCJHRVRcIiB8fCByZXEubWV0aG9kID09PSBcIkhFQURcIlxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IChSZWFkYWJsZS50b1dlYihyZXEpIGFzIFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+KSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNldEVSZXNwb25zZShyZXM6IEVSZXNwb25zZSwgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJlcy5zdGF0dXMocmVzcG9uc2Uuc3RhdHVzKTtcbiAgcmVzcG9uc2UuaGVhZGVycy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiByZXMuc2V0SGVhZGVyKGtleSwgdmFsdWUpKTtcbiAgaWYgKHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICBjb25zdCBib2R5ID0gcmVzcG9uc2UuYm9keTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgcmVhZGVyID0gYm9keS5nZXRSZWFkZXIoKTtcbiAgICByZWFkZXIucmVhZCgpLnRoZW4oZnVuY3Rpb24gcmVhZCh7IGRvbmUsIHZhbHVlIH0pIHtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlcy53cml0ZShCdWZmZXIuZnJvbSh2YWx1ZSkpO1xuICAgICAgcmVhZGVyLnJlYWQoKS50aGVuKHJlYWQpO1xuICAgIH0pO1xuICB9KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxTQUFTLGdCQUFnQjtBQWNsQixTQUFTLG9CQUNkLFlBQ0Esb0JBQ1k7QUFDWixTQUFPLENBQUMsS0FBSyxLQUFLLFNBQVM7QUFDekIsVUFBTSxVQUFVLGFBQWEsR0FBRztBQUNoQyxVQUFNLGNBQWMsbUJBQW1CLEdBQUc7QUFDMUMsVUFBTSxxQkFDSix1QkFBdUIsVUFDbkIsY0FDQSxRQUFRLFFBQVEsV0FBVztBQUNqQyx1QkFBbUIsS0FBSyxPQUFPQSxpQkFBZ0I7QUFDN0MsVUFBSSxXQUFXO0FBQ2YsVUFBSSxnQkFBZ0I7QUFDcEIsWUFBTSxXQUFXLE1BQU0sV0FBVyxNQUFNLFNBQVM7QUFBQSxRQUMvQyxhQUFBQTtBQUFBLFFBQ0EsWUFBWSxNQUFNO0FBS2hCLHFCQUFXO0FBQ1gsZUFBSztBQUNMLGlCQUFPLElBQUksU0FBUyxhQUFhLEVBQUUsUUFBUSxJQUFJLENBQUM7QUFBQSxRQUNsRDtBQUFBLFFBQ0EsaUJBQWlCLE1BQU07QUFPckIsMEJBQWdCO0FBQ2hCLGVBQUs7QUFDTCxpQkFBTyxJQUFJLFNBQVMsa0JBQWtCO0FBQUEsWUFDcEMsUUFBUTtBQUFBLFlBQ1IsU0FBUztBQUFBLGNBQ1AsZ0JBQWdCO0FBQUEsY0FDaEIsTUFBTTtBQUFBLFlBQ1I7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRixDQUFDO0FBQ0QsVUFBSSxZQUFhLGlCQUFpQixJQUFJLFNBQVMsS0FBTztBQUN0RCxZQUFNLGFBQWEsS0FBSyxRQUFRO0FBRWhDLFVBQUksSUFBSTtBQUNSLFVBQUksU0FBUyxNQUFNO0FBQ25CLFVBQUksT0FBTyxNQUFNO0FBQ2pCLFVBQUksTUFBTSxNQUFNO0FBQ2hCLFVBQUksT0FBTyxNQUFNO0FBQ2pCLFVBQUksZUFBZSxNQUFNO0FBQ3pCLFVBQUksWUFBWSxNQUFNO0FBQUEsSUFDeEIsQ0FBQztBQUFBLEVBQ0g7QUFDRjtBQUVBLFNBQVMsYUFBYSxLQUF3QjtBQUM1QyxRQUFNLE1BQU0sR0FBRyxJQUFJLFFBQVEsTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLElBQUksUUFBUSxHQUFHLElBQUksR0FBRztBQUM3RSxRQUFNLFVBQVUsSUFBSSxRQUFRO0FBQzVCLGFBQVcsQ0FBQyxLQUFLLEtBQUssS0FBSyxPQUFPLFFBQVEsSUFBSSxPQUFPLEdBQUc7QUFDdEQsUUFBSSxNQUFNLFFBQVEsS0FBSyxHQUFHO0FBQ3hCLGlCQUFXLEtBQUssTUFBTyxTQUFRLE9BQU8sS0FBSyxDQUFDO0FBQUEsSUFDOUMsV0FBVyxPQUFPLFVBQVUsVUFBVTtBQUNwQyxjQUFRLE9BQU8sS0FBSyxLQUFLO0FBQUEsSUFDM0I7QUFBQSxFQUNGO0FBQ0EsU0FBTyxJQUFJLFFBQVEsS0FBSztBQUFBLElBQ3RCLFFBQVEsSUFBSTtBQUFBLElBQ1o7QUFBQSxJQUNBLE1BQ0UsSUFBSSxXQUFXLFNBQVMsSUFBSSxXQUFXLFNBQ25DLFNBQ0MsU0FBUyxNQUFNLEdBQUc7QUFBQSxFQUMzQixDQUFDO0FBQ0g7QUFFQSxTQUFTLGFBQWEsS0FBZ0IsVUFBbUM7QUFDdkUsTUFBSSxPQUFPLFNBQVMsTUFBTTtBQUMxQixXQUFTLFFBQVEsUUFBUSxDQUFDLE9BQU8sUUFBUSxJQUFJLFVBQVUsS0FBSyxLQUFLLENBQUM7QUFDbEUsTUFBSSxTQUFTLFFBQVEsS0FBTSxRQUFPLFFBQVEsUUFBUTtBQUNsRCxRQUFNLE9BQU8sU0FBUztBQUN0QixTQUFPLElBQUksUUFBUSxDQUFDLFlBQVk7QUFDOUIsVUFBTSxTQUFTLEtBQUssVUFBVTtBQUM5QixXQUFPLEtBQUssRUFBRSxLQUFLLFNBQVMsS0FBSyxFQUFFLE1BQU0sTUFBTSxHQUFHO0FBQ2hELFVBQUksTUFBTTtBQUNSLGVBQU8sWUFBWTtBQUNuQixnQkFBUTtBQUNSO0FBQUEsTUFDRjtBQUNBLFVBQUksTUFBTSxPQUFPLEtBQUssS0FBSyxDQUFDO0FBQzVCLGFBQU8sS0FBSyxFQUFFLEtBQUssSUFBSTtBQUFBLElBQ3pCLENBQUM7QUFBQSxFQUNILENBQUM7QUFDSDsiLAogICJuYW1lcyI6IFsiY29udGV4dERhdGEiXQp9Cg==
80
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gXCJub2RlOnN0cmVhbVwiO1xuaW1wb3J0IHR5cGUgeyBGZWRlcmF0aW9uIH0gZnJvbSBcIkBmZWRpZnkvZmVkaWZ5XCI7XG5pbXBvcnQgdHlwZSB7XG4gIFJlcXVlc3QgYXMgRVJlcXVlc3QsXG4gIFJlc3BvbnNlIGFzIEVSZXNwb25zZSxcbiAgTmV4dEZ1bmN0aW9uLFxufSBmcm9tIFwiZXhwcmVzc1wiO1xuXG50eXBlIE1pZGRsZXdhcmUgPSAocmVxOiBFUmVxdWVzdCwgcmVzOiBFUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbikgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgQ29udGV4dERhdGFGYWN0b3J5PFRDb250ZXh0RGF0YT4gPSAoXG4gIHJlcTogRVJlcXVlc3QsXG4pID0+IFRDb250ZXh0RGF0YSB8IFByb21pc2U8VENvbnRleHREYXRhPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGludGVncmF0ZUZlZGVyYXRpb248VENvbnRleHREYXRhPihcbiAgZmVkZXJhdGlvbjogRmVkZXJhdGlvbjxUQ29udGV4dERhdGE+LFxuICBjb250ZXh0RGF0YUZhY3Rvcnk6IENvbnRleHREYXRhRmFjdG9yeTxUQ29udGV4dERhdGE+LFxuKTogTWlkZGxld2FyZSB7XG4gIHJldHVybiAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gZnJvbUVSZXF1ZXN0KHJlcSk7XG4gICAgY29uc3QgY29udGV4dERhdGEgPSBjb250ZXh0RGF0YUZhY3RvcnkocmVxKTtcbiAgICBjb25zdCBjb250ZXh0RGF0YVByb21pc2UgPVxuICAgICAgY29udGV4dERhdGEgaW5zdGFuY2VvZiBQcm9taXNlXG4gICAgICAgID8gY29udGV4dERhdGFcbiAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoY29udGV4dERhdGEpO1xuICAgIGNvbnRleHREYXRhUHJvbWlzZS50aGVuKGFzeW5jIChjb250ZXh0RGF0YSkgPT4ge1xuICAgICAgbGV0IG5vdEZvdW5kID0gZmFsc2U7XG4gICAgICBsZXQgbm90QWNjZXB0YWJsZSA9IGZhbHNlO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZWRlcmF0aW9uLmZldGNoKHJlcXVlc3QsIHtcbiAgICAgICAgY29udGV4dERhdGEsXG4gICAgICAgIG9uTm90Rm91bmQ6ICgpID0+IHtcbiAgICAgICAgICAvLyBJZiB0aGUgYGZlZGVyYXRpb25gIG9iamVjdCBmaW5kcyBhIHJlcXVlc3Qgbm90IHJlc3BvbnNpYmxlIGZvciBpdFxuICAgICAgICAgIC8vIChpLmUuLCBub3QgYSBmZWRlcmF0aW9uLXJlbGF0ZWQgcmVxdWVzdCksIGl0IHdpbGwgY2FsbCB0aGUgYG5leHRgXG4gICAgICAgICAgLy8gZnVuY3Rpb24gcHJvdmlkZWQgYnkgdGhlIEV4cHJlc3MgZnJhbWV3b3JrIHRvIGNvbnRpbnVlIHRoZSByZXF1ZXN0XG4gICAgICAgICAgLy8gaGFuZGxpbmcgYnkgdGhlIEV4cHJlc3M6XG4gICAgICAgICAgbm90Rm91bmQgPSB0cnVlO1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiTm90IGZvdW5kXCIsIHsgc3RhdHVzOiA0MDQgfSk7IC8vIHVudXNlZFxuICAgICAgICB9LFxuICAgICAgICBvbk5vdEFjY2VwdGFibGU6ICgpID0+IHtcbiAgICAgICAgICAvLyBTaW1pbGFyIHRvIGBvbk5vdEZvdW5kYCwgYnV0IHNsaWdodGx5IG1vcmUgdHJpY2t5LlxuICAgICAgICAgIC8vIFdoZW4gdGhlIGBmZWRlcmF0aW9uYCBvYmplY3QgZmluZHMgYSByZXF1ZXN0IG5vdCBhY2NlcHRhYmxlXG4gICAgICAgICAgLy8gdHlwZS13aXNlIChpLmUuLCBhIHVzZXItYWdlbnQgZG9lc24ndCB3YW50IEpTT04tTEQpLCBpdCB3aWxsIGNhbGxcbiAgICAgICAgICAvLyB0aGUgYG5leHRgIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5IHRoZSBFeHByZXNzIGZyYW1ld29yayB0byBjb250aW51ZVxuICAgICAgICAgIC8vIGlmIGFueSByb3V0ZSBpcyBtYXRjaGVkLCBhbmQgb3RoZXJ3aXNlLCBpdCB3aWxsIHJldHVybiBhIDQwNiBOb3RcbiAgICAgICAgICAvLyBBY2NlcHRhYmxlIHJlc3BvbnNlOlxuICAgICAgICAgIG5vdEFjY2VwdGFibGUgPSB0cnVlO1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiTm90IGFjY2VwdGFibGVcIiwge1xuICAgICAgICAgICAgc3RhdHVzOiA0MDYsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwidGV4dC9wbGFpblwiLFxuICAgICAgICAgICAgICBWYXJ5OiBcIkFjY2VwdFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgaWYgKG5vdEZvdW5kIHx8IChub3RBY2NlcHRhYmxlICYmIHJlcS5yb3V0ZSAhPSBudWxsKSkgcmV0dXJuO1xuICAgICAgYXdhaXQgc2V0RVJlc3BvbnNlKHJlcywgcmVzcG9uc2UpO1xuICAgICAgLy8gUHJldmVudCB0aGUgRXhwcmVzcyBmcmFtZXdvcmsgZnJvbSBzZW5kaW5nIHRoZSByZXNwb25zZSBhZ2FpbjpcbiAgICAgIHJlcy5lbmQoKTtcbiAgICAgIHJlcy5zdGF0dXMgPSAoKSA9PiByZXM7XG4gICAgICByZXMuc2VuZCA9ICgpID0+IHJlcztcbiAgICAgIHJlcy5lbmQgPSAoKSA9PiByZXM7XG4gICAgICByZXMuanNvbiA9ICgpID0+IHJlcztcbiAgICAgIHJlcy5yZW1vdmVIZWFkZXIgPSAoKSA9PiByZXM7XG4gICAgICByZXMuc2V0SGVhZGVyID0gKCkgPT4gcmVzO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBmcm9tRVJlcXVlc3QocmVxOiBFUmVxdWVzdCk6IFJlcXVlc3Qge1xuICBjb25zdCB1cmwgPSBgJHtyZXEucHJvdG9jb2x9Oi8vJHtyZXEuaGVhZGVyKFwiSG9zdFwiKSA/PyByZXEuaG9zdG5hbWV9JHtyZXEudXJsfWA7XG4gIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXEuaGVhZGVycykpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZSkgaGVhZGVycy5hcHBlbmQoa2V5LCB2KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICBtZXRob2Q6IHJlcS5tZXRob2QsXG4gICAgaGVhZGVycyxcbiAgICBkdXBsZXg6IFwiaGFsZlwiLFxuICAgIGJvZHk6XG4gICAgICByZXEubWV0aG9kID09PSBcIkdFVFwiIHx8IHJlcS5tZXRob2QgPT09IFwiSEVBRFwiXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogKFJlYWRhYmxlLnRvV2ViKHJlcSkpLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2V0RVJlc3BvbnNlKHJlczogRVJlc3BvbnNlLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmVzLnN0YXR1cyhyZXNwb25zZS5zdGF0dXMpO1xuICByZXNwb25zZS5oZWFkZXJzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHJlcy5zZXRIZWFkZXIoa2V5LCB2YWx1ZSkpO1xuICBpZiAocmVzcG9uc2UuYm9keSA9PSBudWxsKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIGNvbnN0IGJvZHkgPSByZXNwb25zZS5ib2R5O1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCByZWFkZXIgPSBib2R5LmdldFJlYWRlcigpO1xuICAgIHJlYWRlci5yZWFkKCkudGhlbihmdW5jdGlvbiByZWFkKHsgZG9uZSwgdmFsdWUgfSkge1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVzLndyaXRlKEJ1ZmZlci5mcm9tKHZhbHVlKSk7XG4gICAgICByZWFkZXIucmVhZCgpLnRoZW4ocmVhZCk7XG4gICAgfSk7XG4gIH0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLFNBQVMsZ0JBQWdCO0FBY2xCLFNBQVMsb0JBQ2QsWUFDQSxvQkFDWTtBQUNaLFNBQU8sQ0FBQyxLQUFLLEtBQUssU0FBUztBQUN6QixVQUFNLFVBQVUsYUFBYSxHQUFHO0FBQ2hDLFVBQU0sY0FBYyxtQkFBbUIsR0FBRztBQUMxQyxVQUFNLHFCQUNKLHVCQUF1QixVQUNuQixjQUNBLFFBQVEsUUFBUSxXQUFXO0FBQ2pDLHVCQUFtQixLQUFLLE9BQU9BLGlCQUFnQjtBQUM3QyxVQUFJLFdBQVc7QUFDZixVQUFJLGdCQUFnQjtBQUNwQixZQUFNLFdBQVcsTUFBTSxXQUFXLE1BQU0sU0FBUztBQUFBLFFBQy9DLGFBQUFBO0FBQUEsUUFDQSxZQUFZLE1BQU07QUFLaEIscUJBQVc7QUFDWCxlQUFLO0FBQ0wsaUJBQU8sSUFBSSxTQUFTLGFBQWEsRUFBRSxRQUFRLElBQUksQ0FBQztBQUFBLFFBQ2xEO0FBQUEsUUFDQSxpQkFBaUIsTUFBTTtBQU9yQiwwQkFBZ0I7QUFDaEIsZUFBSztBQUNMLGlCQUFPLElBQUksU0FBUyxrQkFBa0I7QUFBQSxZQUNwQyxRQUFRO0FBQUEsWUFDUixTQUFTO0FBQUEsY0FDUCxnQkFBZ0I7QUFBQSxjQUNoQixNQUFNO0FBQUEsWUFDUjtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGLENBQUM7QUFDRCxVQUFJLFlBQWEsaUJBQWlCLElBQUksU0FBUyxLQUFPO0FBQ3RELFlBQU0sYUFBYSxLQUFLLFFBQVE7QUFFaEMsVUFBSSxJQUFJO0FBQ1IsVUFBSSxTQUFTLE1BQU07QUFDbkIsVUFBSSxPQUFPLE1BQU07QUFDakIsVUFBSSxNQUFNLE1BQU07QUFDaEIsVUFBSSxPQUFPLE1BQU07QUFDakIsVUFBSSxlQUFlLE1BQU07QUFDekIsVUFBSSxZQUFZLE1BQU07QUFBQSxJQUN4QixDQUFDO0FBQUEsRUFDSDtBQUNGO0FBRUEsU0FBUyxhQUFhLEtBQXdCO0FBQzVDLFFBQU0sTUFBTSxHQUFHLElBQUksUUFBUSxNQUFNLElBQUksT0FBTyxNQUFNLEtBQUssSUFBSSxRQUFRLEdBQUcsSUFBSSxHQUFHO0FBQzdFLFFBQU0sVUFBVSxJQUFJLFFBQVE7QUFDNUIsYUFBVyxDQUFDLEtBQUssS0FBSyxLQUFLLE9BQU8sUUFBUSxJQUFJLE9BQU8sR0FBRztBQUN0RCxRQUFJLE1BQU0sUUFBUSxLQUFLLEdBQUc7QUFDeEIsaUJBQVcsS0FBSyxNQUFPLFNBQVEsT0FBTyxLQUFLLENBQUM7QUFBQSxJQUM5QyxXQUFXLE9BQU8sVUFBVSxVQUFVO0FBQ3BDLGNBQVEsT0FBTyxLQUFLLEtBQUs7QUFBQSxJQUMzQjtBQUFBLEVBQ0Y7QUFDQSxTQUFPLElBQUksUUFBUSxLQUFLO0FBQUEsSUFDdEIsUUFBUSxJQUFJO0FBQUEsSUFDWjtBQUFBLElBQ0EsUUFBUTtBQUFBLElBQ1IsTUFDRSxJQUFJLFdBQVcsU0FBUyxJQUFJLFdBQVcsU0FDbkMsU0FDQyxTQUFTLE1BQU0sR0FBRztBQUFBLEVBQzNCLENBQUM7QUFDSDtBQUVBLFNBQVMsYUFBYSxLQUFnQixVQUFtQztBQUN2RSxNQUFJLE9BQU8sU0FBUyxNQUFNO0FBQzFCLFdBQVMsUUFBUSxRQUFRLENBQUMsT0FBTyxRQUFRLElBQUksVUFBVSxLQUFLLEtBQUssQ0FBQztBQUNsRSxNQUFJLFNBQVMsUUFBUSxLQUFNLFFBQU8sUUFBUSxRQUFRO0FBQ2xELFFBQU0sT0FBTyxTQUFTO0FBQ3RCLFNBQU8sSUFBSSxRQUFRLENBQUMsWUFBWTtBQUM5QixVQUFNLFNBQVMsS0FBSyxVQUFVO0FBQzlCLFdBQU8sS0FBSyxFQUFFLEtBQUssU0FBUyxLQUFLLEVBQUUsTUFBTSxNQUFNLEdBQUc7QUFDaEQsVUFBSSxNQUFNO0FBQ1IsZUFBTyxZQUFZO0FBQ25CLGdCQUFRO0FBQ1I7QUFBQSxNQUNGO0FBQ0EsVUFBSSxNQUFNLE9BQU8sS0FBSyxLQUFLLENBQUM7QUFDNUIsYUFBTyxLQUFLLEVBQUUsS0FBSyxJQUFJO0FBQUEsSUFDekIsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogWyJjb250ZXh0RGF0YSJdCn0K
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fedify/express",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "Integrate Fedify with Express",
5
5
  "keywords": ["Fedify", "Express", "Express.js"],
6
6
  "author": {
@@ -32,7 +32,7 @@
32
32
  }
33
33
  }
34
34
  },
35
- "files": ["src/", "dist/"],
35
+ "files": ["dist/"],
36
36
  "devDependencies": {
37
37
  "@biomejs/biome": "1.8.3",
38
38
  "@types/express": ">=4.0.0, <5",
package/src/index.ts DELETED
@@ -1,109 +0,0 @@
1
- import { Readable } from "node:stream";
2
- import type { Federation } from "@fedify/fedify";
3
- import type {
4
- Request as ERequest,
5
- Response as EResponse,
6
- NextFunction,
7
- } from "express";
8
-
9
- type Middleware = (req: ERequest, res: EResponse, next: NextFunction) => void;
10
-
11
- export type ContextDataFactory<TContextData> = (
12
- req: ERequest,
13
- ) => TContextData | Promise<TContextData>;
14
-
15
- export function integrateFederation<TContextData>(
16
- federation: Federation<TContextData>,
17
- contextDataFactory: ContextDataFactory<TContextData>,
18
- ): Middleware {
19
- return (req, res, next) => {
20
- const request = fromERequest(req);
21
- const contextData = contextDataFactory(req);
22
- const contextDataPromise =
23
- contextData instanceof Promise
24
- ? contextData
25
- : Promise.resolve(contextData);
26
- contextDataPromise.then(async (contextData) => {
27
- let notFound = false;
28
- let notAcceptable = false;
29
- const response = await federation.fetch(request, {
30
- contextData,
31
- onNotFound: () => {
32
- // If the `federation` object finds a request not responsible for it
33
- // (i.e., not a federation-related request), it will call the `next`
34
- // function provided by the Express framework to continue the request
35
- // handling by the Express:
36
- notFound = true;
37
- next();
38
- return new Response("Not found", { status: 404 }); // unused
39
- },
40
- onNotAcceptable: () => {
41
- // Similar to `onNotFound`, but slightly more tricky.
42
- // When the `federation` object finds a request not acceptable
43
- // type-wise (i.e., a user-agent doesn't want JSON-LD), it will call
44
- // the `next` function provided by the Express framework to continue
45
- // if any route is matched, and otherwise, it will return a 406 Not
46
- // Acceptable response:
47
- notAcceptable = true;
48
- next();
49
- return new Response("Not acceptable", {
50
- status: 406,
51
- headers: {
52
- "Content-Type": "text/plain",
53
- Vary: "Accept",
54
- },
55
- });
56
- },
57
- });
58
- if (notFound || (notAcceptable && req.route != null)) return;
59
- await setEResponse(res, response);
60
- // Prevent the Express framework from sending the response again:
61
- res.end();
62
- res.status = () => res;
63
- res.send = () => res;
64
- res.end = () => res;
65
- res.json = () => res;
66
- res.removeHeader = () => res;
67
- res.setHeader = () => res;
68
- });
69
- };
70
- }
71
-
72
- function fromERequest(req: ERequest): Request {
73
- const url = `${req.protocol}://${req.header("Host") ?? req.hostname}${req.url}`;
74
- const headers = new Headers();
75
- for (const [key, value] of Object.entries(req.headers)) {
76
- if (Array.isArray(value)) {
77
- for (const v of value) headers.append(key, v);
78
- } else if (typeof value === "string") {
79
- headers.append(key, value);
80
- }
81
- }
82
- return new Request(url, {
83
- method: req.method,
84
- headers,
85
- body:
86
- req.method === "GET" || req.method === "HEAD"
87
- ? undefined
88
- : (Readable.toWeb(req) as ReadableStream<Uint8Array>),
89
- });
90
- }
91
-
92
- function setEResponse(res: EResponse, response: Response): Promise<void> {
93
- res.status(response.status);
94
- response.headers.forEach((value, key) => res.setHeader(key, value));
95
- if (response.body == null) return Promise.resolve();
96
- const body = response.body;
97
- return new Promise((resolve) => {
98
- const reader = body.getReader();
99
- reader.read().then(function read({ done, value }) {
100
- if (done) {
101
- reader.releaseLock();
102
- resolve();
103
- return;
104
- }
105
- res.write(Buffer.from(value));
106
- reader.read().then(read);
107
- });
108
- });
109
- }