fastify-early-hints
TypeScript icon, indicating that this package has built-in type declarations

0.0.3 • Public • Published

Fastify Early Hints

js-standard-style ContinuousIntegration

Draft proposal of plugin handling the HTTP 103 code. Based on : https://github.com/fastify/fastify/issues/2683

Install

npm i fastify-early-hints

Usage

  • eh.add: Every call writes to the socket and returns a promise. Altought all the promises created throught the reply lifecycle are awaited in the onSend hook.
const Fastify = require("fastify");
const eh = require("fastify-early-hints");
 
const fastify = Fastify({ logger: true });
fastify.register(eh);
 
fastify.get("/", async (request, reply) => {
  reply.eh.add([
    "Link: </style.css>; rel=preload; as=style",
    "Link: </script.js>; rel=preload; as=script",
  ]);
  await reply.eh.add([
    { href: "//example.com", rel: "preload", as: "style" },
    { href: "//example.com", rel: "preload", as: "style", cors: true },
    { href: "//example.com", rel: "preconnect" },
    { href: "//example2.com", rel: "preconnect", cors: true },
    { href: "//example3.com", rel: "preconnect", cors: "use-credentials" },
  ]);
  return { hello: "world" };
});
 
const start = async () => {
  try {
    await fastify.listen(3000);
    fastify.log.info(`server listening on ${fastify.server.address().port}`);
  } catch (err) {
    fastify.log.error(err);
    process.exit(1);
  }
};
start();

Result

$ curl -D - http://localhost:3000    
HTTP/1.1 103 Early Hints
Link: </style.css>; rel=preload; as=style
Link: </script.js>; rel=preload; as=script

HTTP/1.1 103 Early Hints
Link: </style.css>; rel=preload; as=style
Link: </script.js>; rel=preload; as=script
Link: <//example.com>; rel=preload; as=style
Link: <//example.com>; rel=preload; as=style; crossorigin
Link: <//example.com>; rel=preconnect
Link: <//example2.com>; rel=preconnect; crossorigin
Link: <//example3.com>; rel=preconnect; crossorigin=use-credentials

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
content-length: 17
Date: Thu, 12 Nov 2020 22:45:54 GMT
Connection: keep-alive

{"hello":"world"}

Todo

  • Handling different cases combinations
  • improve tests

References

License

Licensed under MIT.

Dependencies (2)

Dev Dependencies (8)

Package Sidebar

Install

npm i fastify-early-hints

Weekly Downloads

0

Version

0.0.3

License

MIT

Unpacked Size

69.2 kB

Total Files

24

Last publish

Collaborators

  • matteo.collina
  • zekth