@fedify/express 0.1.3 → 0.1.4-dev.8
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 +4 -0
- package/dist/index.js +2 -1
- package/package.json +9 -3
- package/src/index.ts +0 -109
package/README.md
CHANGED
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/
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gXCJub2RlOnN0cmVhbVwiO1xuaW1wb3J0IHR5cGUgeyBGZWRlcmF0aW9uIH0gZnJvbSBcIkBmZWRpZnkvZmVkaWZ5XCI7XG5pbXBvcnQgdHlwZSB7XG4gIFJlcXVlc3QgYXMgRVJlcXVlc3QsXG4gIFJlc3BvbnNlIGFzIEVSZXNwb25zZSxcbiAgTmV4dEZ1bmN0aW9uLFxufSBmcm9tIFwiZXhwcmVzc1wiO1xuXG50eXBlIE1pZGRsZXdhcmUgPSAocmVxOiBFUmVxdWVzdCwgcmVzOiBFUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbikgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgQ29udGV4dERhdGFGYWN0b3J5PFRDb250ZXh0RGF0YT4gPSAoXG4gIHJlcTogRVJlcXVlc3QsXG4pID0+IFRDb250ZXh0RGF0YSB8IFByb21pc2U8VENvbnRleHREYXRhPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGludGVncmF0ZUZlZGVyYXRpb248VENvbnRleHREYXRhPihcbiAgZmVkZXJhdGlvbjogRmVkZXJhdGlvbjxUQ29udGV4dERhdGE+LFxuICBjb250ZXh0RGF0YUZhY3Rvcnk6IENvbnRleHREYXRhRmFjdG9yeTxUQ29udGV4dERhdGE+LFxuKTogTWlkZGxld2FyZSB7XG4gIHJldHVybiAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gZnJvbUVSZXF1ZXN0KHJlcSk7XG4gICAgY29uc3QgY29udGV4dERhdGEgPSBjb250ZXh0RGF0YUZhY3RvcnkocmVxKTtcbiAgICBjb25zdCBjb250ZXh0RGF0YVByb21pc2UgPVxuICAgICAgY29udGV4dERhdGEgaW5zdGFuY2VvZiBQcm9taXNlXG4gICAgICAgID8gY29udGV4dERhdGFcbiAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoY29udGV4dERhdGEpO1xuICAgIGNvbnRleHREYXRhUHJvbWlzZS50aGVuKGFzeW5jIChjb250ZXh0RGF0YSkgPT4ge1xuICAgICAgbGV0IG5vdEZvdW5kID0gZmFsc2U7XG4gICAgICBsZXQgbm90QWNjZXB0YWJsZSA9IGZhbHNlO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZWRlcmF0aW9uLmZldGNoKHJlcXVlc3QsIHtcbiAgICAgICAgY29udGV4dERhdGEsXG4gICAgICAgIG9uTm90Rm91bmQ6ICgpID0+IHtcbiAgICAgICAgICAvLyBJZiB0aGUgYGZlZGVyYXRpb25gIG9iamVjdCBmaW5kcyBhIHJlcXVlc3Qgbm90IHJlc3BvbnNpYmxlIGZvciBpdFxuICAgICAgICAgIC8vIChpLmUuLCBub3QgYSBmZWRlcmF0aW9uLXJlbGF0ZWQgcmVxdWVzdCksIGl0IHdpbGwgY2FsbCB0aGUgYG5leHRgXG4gICAgICAgICAgLy8gZnVuY3Rpb24gcHJvdmlkZWQgYnkgdGhlIEV4cHJlc3MgZnJhbWV3b3JrIHRvIGNvbnRpbnVlIHRoZSByZXF1ZXN0XG4gICAgICAgICAgLy8gaGFuZGxpbmcgYnkgdGhlIEV4cHJlc3M6XG4gICAgICAgICAgbm90Rm91bmQgPSB0cnVlO1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiTm90IGZvdW5kXCIsIHsgc3RhdHVzOiA0MDQgfSk7IC8vIHVudXNlZFxuICAgICAgICB9LFxuICAgICAgICBvbk5vdEFjY2VwdGFibGU6ICgpID0+IHtcbiAgICAgICAgICAvLyBTaW1pbGFyIHRvIGBvbk5vdEZvdW5kYCwgYnV0IHNsaWdodGx5IG1vcmUgdHJpY2t5LlxuICAgICAgICAgIC8vIFdoZW4gdGhlIGBmZWRlcmF0aW9uYCBvYmplY3QgZmluZHMgYSByZXF1ZXN0IG5vdCBhY2NlcHRhYmxlXG4gICAgICAgICAgLy8gdHlwZS13aXNlIChpLmUuLCBhIHVzZXItYWdlbnQgZG9lc24ndCB3YW50IEpTT04tTEQpLCBpdCB3aWxsIGNhbGxcbiAgICAgICAgICAvLyB0aGUgYG5leHRgIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5IHRoZSBFeHByZXNzIGZyYW1ld29yayB0byBjb250aW51ZVxuICAgICAgICAgIC8vIGlmIGFueSByb3V0ZSBpcyBtYXRjaGVkLCBhbmQgb3RoZXJ3aXNlLCBpdCB3aWxsIHJldHVybiBhIDQwNiBOb3RcbiAgICAgICAgICAvLyBBY2NlcHRhYmxlIHJlc3BvbnNlOlxuICAgICAgICAgIG5vdEFjY2VwdGFibGUgPSB0cnVlO1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiTm90IGFjY2VwdGFibGVcIiwge1xuICAgICAgICAgICAgc3RhdHVzOiA0MDYsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwidGV4dC9wbGFpblwiLFxuICAgICAgICAgICAgICBWYXJ5OiBcIkFjY2VwdFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgaWYgKG5vdEZvdW5kIHx8IChub3RBY2NlcHRhYmxlICYmIHJlcS5yb3V0ZSAhPSBudWxsKSkgcmV0dXJuO1xuICAgICAgYXdhaXQgc2V0RVJlc3BvbnNlKHJlcywgcmVzcG9uc2UpO1xuICAgICAgLy8gUHJldmVudCB0aGUgRXhwcmVzcyBmcmFtZXdvcmsgZnJvbSBzZW5kaW5nIHRoZSByZXNwb25zZSBhZ2FpbjpcbiAgICAgIHJlcy5lbmQoKTtcbiAgICAgIHJlcy5zdGF0dXMgPSAoKSA9PiByZXM7XG4gICAgICByZXMuc2VuZCA9ICgpID0+IHJlcztcbiAgICAgIHJlcy5lbmQgPSAoKSA9PiByZXM7XG4gICAgICByZXMuanNvbiA9ICgpID0+IHJlcztcbiAgICAgIHJlcy5yZW1vdmVIZWFkZXIgPSAoKSA9PiByZXM7XG4gICAgICByZXMuc2V0SGVhZGVyID0gKCkgPT4gcmVzO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBmcm9tRVJlcXVlc3QocmVxOiBFUmVxdWVzdCk6IFJlcXVlc3Qge1xuICBjb25zdCB1cmwgPSBgJHtyZXEucHJvdG9jb2x9Oi8vJHtyZXEuaGVhZGVyKFwiSG9zdFwiKSA/PyByZXEuaG9zdG5hbWV9JHtyZXEudXJsfWA7XG4gIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXEuaGVhZGVycykpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZSkgaGVhZGVycy5hcHBlbmQoa2V5LCB2KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICBtZXRob2Q6IHJlcS5tZXRob2QsXG4gICAgaGVhZGVycyxcbiAgICBkdXBsZXg6IFwiaGFsZlwiLFxuICAgIGJvZHk6XG4gICAgICByZXEubWV0aG9kID09PSBcIkdFVFwiIHx8IHJlcS5tZXRob2QgPT09IFwiSEVBRFwiXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogKFJlYWRhYmxlLnRvV2ViKHJlcSkpLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2V0RVJlc3BvbnNlKHJlczogRVJlc3BvbnNlLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmVzLnN0YXR1cyhyZXNwb25zZS5zdGF0dXMpO1xuICByZXNwb25zZS5oZWFkZXJzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHJlcy5zZXRIZWFkZXIoa2V5LCB2YWx1ZSkpO1xuICBpZiAocmVzcG9uc2UuYm9keSA9PSBudWxsKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIGNvbnN0IGJvZHkgPSByZXNwb25zZS5ib2R5O1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCByZWFkZXIgPSBib2R5LmdldFJlYWRlcigpO1xuICAgIHJlYWRlci5yZWFkKCkudGhlbihmdW5jdGlvbiByZWFkKHsgZG9uZSwgdmFsdWUgfSkge1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVzLndyaXRlKEJ1ZmZlci5mcm9tKHZhbHVlKSk7XG4gICAgICByZWFkZXIucmVhZCgpLnRoZW4ocmVhZCk7XG4gICAgfSk7XG4gIH0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLFNBQVMsZ0JBQWdCO0FBY2xCLFNBQVMsb0JBQ2QsWUFDQSxvQkFDWTtBQUNaLFNBQU8sQ0FBQyxLQUFLLEtBQUssU0FBUztBQUN6QixVQUFNLFVBQVUsYUFBYSxHQUFHO0FBQ2hDLFVBQU0sY0FBYyxtQkFBbUIsR0FBRztBQUMxQyxVQUFNLHFCQUNKLHVCQUF1QixVQUNuQixjQUNBLFFBQVEsUUFBUSxXQUFXO0FBQ2pDLHVCQUFtQixLQUFLLE9BQU9BLGlCQUFnQjtBQUM3QyxVQUFJLFdBQVc7QUFDZixVQUFJLGdCQUFnQjtBQUNwQixZQUFNLFdBQVcsTUFBTSxXQUFXLE1BQU0sU0FBUztBQUFBLFFBQy9DLGFBQUFBO0FBQUEsUUFDQSxZQUFZLE1BQU07QUFLaEIscUJBQVc7QUFDWCxlQUFLO0FBQ0wsaUJBQU8sSUFBSSxTQUFTLGFBQWEsRUFBRSxRQUFRLElBQUksQ0FBQztBQUFBLFFBQ2xEO0FBQUEsUUFDQSxpQkFBaUIsTUFBTTtBQU9yQiwwQkFBZ0I7QUFDaEIsZUFBSztBQUNMLGlCQUFPLElBQUksU0FBUyxrQkFBa0I7QUFBQSxZQUNwQyxRQUFRO0FBQUEsWUFDUixTQUFTO0FBQUEsY0FDUCxnQkFBZ0I7QUFBQSxjQUNoQixNQUFNO0FBQUEsWUFDUjtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGLENBQUM7QUFDRCxVQUFJLFlBQWEsaUJBQWlCLElBQUksU0FBUyxLQUFPO0FBQ3RELFlBQU0sYUFBYSxLQUFLLFFBQVE7QUFFaEMsVUFBSSxJQUFJO0FBQ1IsVUFBSSxTQUFTLE1BQU07QUFDbkIsVUFBSSxPQUFPLE1BQU07QUFDakIsVUFBSSxNQUFNLE1BQU07QUFDaEIsVUFBSSxPQUFPLE1BQU07QUFDakIsVUFBSSxlQUFlLE1BQU07QUFDekIsVUFBSSxZQUFZLE1BQU07QUFBQSxJQUN4QixDQUFDO0FBQUEsRUFDSDtBQUNGO0FBRUEsU0FBUyxhQUFhLEtBQXdCO0FBQzVDLFFBQU0sTUFBTSxHQUFHLElBQUksUUFBUSxNQUFNLElBQUksT0FBTyxNQUFNLEtBQUssSUFBSSxRQUFRLEdBQUcsSUFBSSxHQUFHO0FBQzdFLFFBQU0sVUFBVSxJQUFJLFFBQVE7QUFDNUIsYUFBVyxDQUFDLEtBQUssS0FBSyxLQUFLLE9BQU8sUUFBUSxJQUFJLE9BQU8sR0FBRztBQUN0RCxRQUFJLE1BQU0sUUFBUSxLQUFLLEdBQUc7QUFDeEIsaUJBQVcsS0FBSyxNQUFPLFNBQVEsT0FBTyxLQUFLLENBQUM7QUFBQSxJQUM5QyxXQUFXLE9BQU8sVUFBVSxVQUFVO0FBQ3BDLGNBQVEsT0FBTyxLQUFLLEtBQUs7QUFBQSxJQUMzQjtBQUFBLEVBQ0Y7QUFDQSxTQUFPLElBQUksUUFBUSxLQUFLO0FBQUEsSUFDdEIsUUFBUSxJQUFJO0FBQUEsSUFDWjtBQUFBLElBQ0EsUUFBUTtBQUFBLElBQ1IsTUFDRSxJQUFJLFdBQVcsU0FBUyxJQUFJLFdBQVcsU0FDbkMsU0FDQyxTQUFTLE1BQU0sR0FBRztBQUFBLEVBQzNCLENBQUM7QUFDSDtBQUVBLFNBQVMsYUFBYSxLQUFnQixVQUFtQztBQUN2RSxNQUFJLE9BQU8sU0FBUyxNQUFNO0FBQzFCLFdBQVMsUUFBUSxRQUFRLENBQUMsT0FBTyxRQUFRLElBQUksVUFBVSxLQUFLLEtBQUssQ0FBQztBQUNsRSxNQUFJLFNBQVMsUUFBUSxLQUFNLFFBQU8sUUFBUSxRQUFRO0FBQ2xELFFBQU0sT0FBTyxTQUFTO0FBQ3RCLFNBQU8sSUFBSSxRQUFRLENBQUMsWUFBWTtBQUM5QixVQUFNLFNBQVMsS0FBSyxVQUFVO0FBQzlCLFdBQU8sS0FBSyxFQUFFLEtBQUssU0FBUyxLQUFLLEVBQUUsTUFBTSxNQUFNLEdBQUc7QUFDaEQsVUFBSSxNQUFNO0FBQ1IsZUFBTyxZQUFZO0FBQ25CLGdCQUFRO0FBQ1I7QUFBQSxNQUNGO0FBQ0EsVUFBSSxNQUFNLE9BQU8sS0FBSyxLQUFLLENBQUM7QUFDNUIsYUFBTyxLQUFLLEVBQUUsS0FBSyxJQUFJO0FBQUEsSUFDekIsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogWyJjb250ZXh0RGF0YSJdCn0K
|
package/package.json
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fedify/express",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4-dev.8+334b0876",
|
|
4
4
|
"description": "Integrate Fedify with Express",
|
|
5
|
-
"keywords": [
|
|
5
|
+
"keywords": [
|
|
6
|
+
"Fedify",
|
|
7
|
+
"Express",
|
|
8
|
+
"Express.js"
|
|
9
|
+
],
|
|
6
10
|
"author": {
|
|
7
11
|
"name": "Hong Minhee",
|
|
8
12
|
"email": "hong@minhee.org",
|
|
@@ -32,7 +36,9 @@
|
|
|
32
36
|
}
|
|
33
37
|
}
|
|
34
38
|
},
|
|
35
|
-
"files": [
|
|
39
|
+
"files": [
|
|
40
|
+
"dist/"
|
|
41
|
+
],
|
|
36
42
|
"devDependencies": {
|
|
37
43
|
"@biomejs/biome": "1.8.3",
|
|
38
44
|
"@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
|
-
}
|