@event-driven-io/emmett-fastify 0.43.0-beta.50 → 0.43.0-beta.51

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
@@ -228,7 +228,7 @@ await startAPI(app, { port: 3000 });
228
228
 
229
229
  ### Custom Server Options
230
230
 
231
- Configure Fastify server options, including logging:
231
+ `serverOptions` takes Fastify's full server options. Fastify's logger is off by default, as in Fastify itself. Turn it on with `logger`, or pass your own logger with `loggerInstance`:
232
232
 
233
233
  ```typescript
234
234
  const app = await getApplication({
@@ -319,11 +319,11 @@ Creates a configured Fastify application instance.
319
319
 
320
320
  **Parameters:**
321
321
 
322
- | Option | Type | Default | Description |
323
- | ---------------------- | -------------------------------- | ---------------------------- | -------------------------------- |
324
- | `registerRoutes` | `(app: FastifyInstance) => void` | `undefined` | Function to register your routes |
325
- | `serverOptions` | `{ logger: boolean }` | `{ logger: true }` | Fastify server configuration |
326
- | `activeDefaultPlugins` | `Plugin[]` | `[ETag, Compress, FormBody]` | Plugins to register |
322
+ | Option | Type | Default | Description |
323
+ | ---------------------- | -------------------------------- | ------------------------------------ | -------------------------------- |
324
+ | `registerRoutes` | `(app: FastifyInstance) => void` | `undefined` | Function to register your routes |
325
+ | `serverOptions` | `FastifyServerOptions` | Fastify's defaults (`logger: false`) | Fastify server configuration |
326
+ | `activeDefaultPlugins` | `Plugin[]` | `[ETag, Compress, FormBody]` | Plugins to register |
327
327
 
328
328
  **Returns:** A Promise that resolves to a configured `FastifyInstance`.
329
329
 
@@ -342,9 +342,11 @@ Starts the Fastify server.
342
342
 
343
343
  ```typescript
344
344
  interface ApplicationOptions {
345
- serverOptions?: { logger: boolean };
345
+ serverOptions?: FastifyServerOptions;
346
346
  registerRoutes?: (app: FastifyInstance) => void;
347
347
  activeDefaultPlugins?: Plugin[];
348
+ observability?: Partial<Observability<string>>;
349
+ disableTraceIdHeader?: boolean;
348
350
  }
349
351
  ```
350
352
 
package/dist/index.cjs CHANGED
@@ -32,11 +32,21 @@ let _fastify_etag = require("@fastify/etag");
32
32
  _fastify_etag = __toESM(_fastify_etag, 1);
33
33
  let _fastify_formbody = require("@fastify/formbody");
34
34
  _fastify_formbody = __toESM(_fastify_formbody, 1);
35
+ let _event_driven_io_emmett = require("@event-driven-io/emmett");
35
36
  let close_with_grace = require("close-with-grace");
36
37
  close_with_grace = __toESM(close_with_grace, 1);
37
38
  let fastify = require("fastify");
38
39
  fastify = __toESM(fastify, 1);
40
+ let _opentelemetry_api = require("@opentelemetry/api");
39
41
 
42
+ //#region src/traceIdHook.ts
43
+ const traceIdHook = (_request, reply, done) => {
44
+ const traceId = _opentelemetry_api.trace.getSpan(_opentelemetry_api.context.active())?.spanContext().traceId;
45
+ if (traceId) reply.header("x-trace-id", traceId);
46
+ done();
47
+ };
48
+
49
+ //#endregion
40
50
  //#region src/index.ts
41
51
  const defaultPlugins = [
42
52
  {
@@ -53,8 +63,9 @@ const defaultPlugins = [
53
63
  }
54
64
  ];
55
65
  const getApplication = async (options) => {
56
- const { registerRoutes, activeDefaultPlugins = defaultPlugins, serverOptions = { logger: true } } = options;
66
+ const { registerRoutes, activeDefaultPlugins = defaultPlugins, serverOptions, observability, disableTraceIdHeader } = options;
57
67
  const app = (0, fastify.default)(serverOptions);
68
+ if ((observability !== void 0 || (0, _event_driven_io_emmett.currentDefaultObservability)() !== void 0) && disableTraceIdHeader !== true) app.addHook("onRequest", traceIdHook);
58
69
  await Promise.all(activeDefaultPlugins.map(async ({ plugin, options }) => {
59
70
  await app.register(plugin, options);
60
71
  }));
@@ -73,8 +84,6 @@ const startAPI = async (app, options = { port: 5e3 }) => {
73
84
  const { port } = options;
74
85
  try {
75
86
  await app.listen({ port });
76
- const address = app.server.address();
77
- console.log(`Server listening on ${address?.address}:${address?.port}`);
78
87
  } catch (err) {
79
88
  app.log.error(err);
80
89
  process.exit(1);
@@ -84,4 +93,5 @@ const startAPI = async (app, options = { port: 5e3 }) => {
84
93
  //#endregion
85
94
  exports.getApplication = getApplication;
86
95
  exports.startAPI = startAPI;
96
+ exports.traceIdHook = traceIdHook;
87
97
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["Etag","Compress","Form"],"sources":["../src/index.ts"],"sourcesContent":["import Compress from '@fastify/compress';\nimport Etag from '@fastify/etag';\nimport Form from '@fastify/formbody';\nimport closeWithGrace from 'close-with-grace';\nimport Fastify, {\n type FastifyInstance,\n type FastifyPluginAsync,\n type FastifyPluginCallback,\n type FastifyPluginOptions,\n} from 'fastify';\n\n// TODO: THIS WILL NEED TO BE BETTER TYPED\ntype Plugin = {\n plugin: FastifyPluginAsync | FastifyPluginCallback;\n options: FastifyPluginOptions;\n};\n\nconst defaultPlugins: Plugin[] = [\n { plugin: Etag, options: {} },\n { plugin: Compress, options: { global: false } },\n { plugin: Form, options: {} },\n];\n\nexport interface ApplicationOptions {\n serverOptions?: { logger: boolean };\n registerRoutes?: (app: FastifyInstance) => void;\n activeDefaultPlugins?: Plugin[];\n}\n\nexport const getApplication = async (options: ApplicationOptions) => {\n const {\n registerRoutes,\n activeDefaultPlugins = defaultPlugins,\n serverOptions = {\n logger: true,\n },\n } = options;\n\n const app: FastifyInstance = Fastify(serverOptions);\n\n await Promise.all(\n activeDefaultPlugins.map(async ({ plugin, options }) => {\n await app.register(plugin, options);\n }),\n );\n\n if (registerRoutes) {\n registerRoutes(app);\n }\n\n const closeListeners = closeWithGrace({ delay: 500 }, async (opts) => {\n if (opts.err) {\n app.log.error(opts.err);\n }\n\n await app.close();\n });\n\n app.addHook('onClose', (instance, done) => {\n closeListeners.uninstall();\n done();\n });\n\n return app;\n};\n\nexport type StartApiOptions = {\n port?: number;\n};\n\nexport const startAPI = async (\n app: FastifyInstance,\n options: StartApiOptions = { port: 5000 },\n) => {\n const { port } = options;\n try {\n await app.listen({ port });\n const address = app.server.address() as { address: string; port: number };\n\n console.log(`Server listening on ${address?.address}:${address?.port}`);\n } catch (err) {\n app.log.error(err);\n process.exit(1);\n }\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,MAAM,iBAA2B;CAC/B;EAAE,QAAQA;EAAM,SAAS,EAAE;EAAE;CAC7B;EAAE,QAAQC;EAAU,SAAS,EAAE,QAAQ,OAAO;EAAE;CAChD;EAAE,QAAQC;EAAM,SAAS,EAAE;EAAE;CAC9B;AAQD,MAAa,iBAAiB,OAAO,YAAgC;CACnE,MAAM,EACJ,gBACA,uBAAuB,gBACvB,gBAAgB,EACd,QAAQ,MACT,KACC;CAEJ,MAAM,2BAA+B,cAAc;AAEnD,OAAM,QAAQ,IACZ,qBAAqB,IAAI,OAAO,EAAE,QAAQ,cAAc;AACtD,QAAM,IAAI,SAAS,QAAQ,QAAQ;GACnC,CACH;AAED,KAAI,eACF,gBAAe,IAAI;CAGrB,MAAM,+CAAgC,EAAE,OAAO,KAAK,EAAE,OAAO,SAAS;AACpE,MAAI,KAAK,IACP,KAAI,IAAI,MAAM,KAAK,IAAI;AAGzB,QAAM,IAAI,OAAO;GACjB;AAEF,KAAI,QAAQ,YAAY,UAAU,SAAS;AACzC,iBAAe,WAAW;AAC1B,QAAM;GACN;AAEF,QAAO;;AAOT,MAAa,WAAW,OACtB,KACA,UAA2B,EAAE,MAAM,KAAM,KACtC;CACH,MAAM,EAAE,SAAS;AACjB,KAAI;AACF,QAAM,IAAI,OAAO,EAAE,MAAM,CAAC;EAC1B,MAAM,UAAU,IAAI,OAAO,SAAS;AAEpC,UAAQ,IAAI,uBAAuB,SAAS,QAAQ,GAAG,SAAS,OAAO;UAChE,KAAK;AACZ,MAAI,IAAI,MAAM,IAAI;AAClB,UAAQ,KAAK,EAAE"}
1
+ {"version":3,"file":"index.cjs","names":["trace","context","Etag","Compress","Form"],"sources":["../src/traceIdHook.ts","../src/index.ts"],"sourcesContent":["import { context, trace } from '@opentelemetry/api';\nimport type { onRequestHookHandler } from 'fastify';\n\nexport const traceIdHook: onRequestHookHandler = (_request, reply, done) => {\n const traceId = trace.getSpan(context.active())?.spanContext().traceId;\n if (traceId) void reply.header('x-trace-id', traceId);\n done();\n};\n","import Compress from '@fastify/compress';\nimport Etag from '@fastify/etag';\nimport Form from '@fastify/formbody';\nimport {\n currentDefaultObservability,\n type Observability,\n} from '@event-driven-io/emmett';\nimport closeWithGrace from 'close-with-grace';\nimport Fastify, {\n type FastifyInstance,\n type FastifyPluginAsync,\n type FastifyPluginCallback,\n type FastifyPluginOptions,\n type FastifyServerOptions,\n} from 'fastify';\nimport { traceIdHook } from './traceIdHook';\n\nexport * from './traceIdHook';\n\n// TODO: THIS WILL NEED TO BE BETTER TYPED\ntype Plugin = {\n plugin: FastifyPluginAsync | FastifyPluginCallback;\n options: FastifyPluginOptions;\n};\n\nconst defaultPlugins: Plugin[] = [\n { plugin: Etag, options: {} },\n { plugin: Compress, options: { global: false } },\n { plugin: Form, options: {} },\n];\n\nexport interface ApplicationOptions {\n serverOptions?: FastifyServerOptions;\n registerRoutes?: (app: FastifyInstance) => void;\n activeDefaultPlugins?: Plugin[];\n observability?: Partial<Observability<string>>;\n disableTraceIdHeader?: boolean;\n}\n\nexport const getApplication = async (options: ApplicationOptions) => {\n const {\n registerRoutes,\n activeDefaultPlugins = defaultPlugins,\n serverOptions,\n observability,\n disableTraceIdHeader,\n } = options;\n\n const app: FastifyInstance = Fastify(serverOptions);\n\n const isObservabilityRegistered =\n observability !== undefined || currentDefaultObservability() !== undefined;\n\n if (isObservabilityRegistered && disableTraceIdHeader !== true)\n app.addHook('onRequest', traceIdHook);\n\n await Promise.all(\n activeDefaultPlugins.map(async ({ plugin, options }) => {\n await app.register(plugin, options);\n }),\n );\n\n if (registerRoutes) {\n registerRoutes(app);\n }\n\n const closeListeners = closeWithGrace({ delay: 500 }, async (opts) => {\n if (opts.err) {\n app.log.error(opts.err);\n }\n\n await app.close();\n });\n\n app.addHook('onClose', (instance, done) => {\n closeListeners.uninstall();\n done();\n });\n\n return app;\n};\n\nexport type StartApiOptions = {\n port?: number;\n};\n\nexport const startAPI = async (\n app: FastifyInstance,\n options: StartApiOptions = { port: 5000 },\n) => {\n const { port } = options;\n try {\n await app.listen({ port });\n } catch (err) {\n app.log.error(err);\n process.exit(1);\n }\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,MAAa,eAAqC,UAAU,OAAO,SAAS;CAC1E,MAAM,UAAUA,yBAAM,QAAQC,2BAAQ,QAAQ,CAAC,EAAE,aAAa,CAAC;AAC/D,KAAI,QAAS,CAAK,MAAM,OAAO,cAAc,QAAQ;AACrD,OAAM;;;;;ACmBR,MAAM,iBAA2B;CAC/B;EAAE,QAAQC;EAAM,SAAS,EAAE;EAAE;CAC7B;EAAE,QAAQC;EAAU,SAAS,EAAE,QAAQ,OAAO;EAAE;CAChD;EAAE,QAAQC;EAAM,SAAS,EAAE;EAAE;CAC9B;AAUD,MAAa,iBAAiB,OAAO,YAAgC;CACnE,MAAM,EACJ,gBACA,uBAAuB,gBACvB,eACA,eACA,yBACE;CAEJ,MAAM,2BAA+B,cAAc;AAKnD,MAFE,kBAAkB,oEAA0C,KAAK,WAElC,yBAAyB,KACxD,KAAI,QAAQ,aAAa,YAAY;AAEvC,OAAM,QAAQ,IACZ,qBAAqB,IAAI,OAAO,EAAE,QAAQ,cAAc;AACtD,QAAM,IAAI,SAAS,QAAQ,QAAQ;GACnC,CACH;AAED,KAAI,eACF,gBAAe,IAAI;CAGrB,MAAM,+CAAgC,EAAE,OAAO,KAAK,EAAE,OAAO,SAAS;AACpE,MAAI,KAAK,IACP,KAAI,IAAI,MAAM,KAAK,IAAI;AAGzB,QAAM,IAAI,OAAO;GACjB;AAEF,KAAI,QAAQ,YAAY,UAAU,SAAS;AACzC,iBAAe,WAAW;AAC1B,QAAM;GACN;AAEF,QAAO;;AAOT,MAAa,WAAW,OACtB,KACA,UAA2B,EAAE,MAAM,KAAM,KACtC;CACH,MAAM,EAAE,SAAS;AACjB,KAAI;AACF,QAAM,IAAI,OAAO,EAAE,MAAM,CAAC;UACnB,KAAK;AACZ,MAAI,IAAI,MAAM,IAAI;AAClB,UAAQ,KAAK,EAAE"}
package/dist/index.d.cts CHANGED
@@ -1,18 +1,22 @@
1
1
  import * as _$fastify from "fastify";
2
- import { FastifyInstance, FastifyPluginAsync, FastifyPluginCallback, FastifyPluginOptions } from "fastify";
2
+ import { FastifyInstance, FastifyPluginAsync, FastifyPluginCallback, FastifyPluginOptions, FastifyServerOptions, onRequestHookHandler } from "fastify";
3
3
  import * as _$node_http0 from "node:http";
4
+ import { Observability } from "@event-driven-io/emmett";
4
5
 
6
+ //#region src/traceIdHook.d.ts
7
+ declare const traceIdHook: onRequestHookHandler;
8
+ //#endregion
5
9
  //#region src/index.d.ts
6
10
  type Plugin = {
7
11
  plugin: FastifyPluginAsync | FastifyPluginCallback;
8
12
  options: FastifyPluginOptions;
9
13
  };
10
14
  interface ApplicationOptions {
11
- serverOptions?: {
12
- logger: boolean;
13
- };
15
+ serverOptions?: FastifyServerOptions;
14
16
  registerRoutes?: (app: FastifyInstance) => void;
15
17
  activeDefaultPlugins?: Plugin[];
18
+ observability?: Partial<Observability<string>>;
19
+ disableTraceIdHeader?: boolean;
16
20
  }
17
21
  declare const getApplication: (options: ApplicationOptions) => Promise<FastifyInstance<_$fastify.RawServerDefault, _$node_http0.IncomingMessage, _$node_http0.ServerResponse<_$node_http0.IncomingMessage>, _$fastify.FastifyBaseLogger, _$fastify.FastifyTypeProviderDefault>>;
18
22
  type StartApiOptions = {
@@ -20,5 +24,5 @@ type StartApiOptions = {
20
24
  };
21
25
  declare const startAPI: (app: FastifyInstance, options?: StartApiOptions) => Promise<void>;
22
26
  //#endregion
23
- export { ApplicationOptions, StartApiOptions, getApplication, startAPI };
27
+ export { ApplicationOptions, StartApiOptions, getApplication, startAPI, traceIdHook };
24
28
  //# sourceMappingURL=index.d.cts.map
package/dist/index.d.ts CHANGED
@@ -1,18 +1,22 @@
1
+ import { Observability } from "@event-driven-io/emmett";
1
2
  import * as _$fastify from "fastify";
2
- import { FastifyInstance, FastifyPluginAsync, FastifyPluginCallback, FastifyPluginOptions } from "fastify";
3
+ import { FastifyInstance, FastifyPluginAsync, FastifyPluginCallback, FastifyPluginOptions, FastifyServerOptions, onRequestHookHandler } from "fastify";
3
4
  import * as _$node_http0 from "node:http";
4
5
 
6
+ //#region src/traceIdHook.d.ts
7
+ declare const traceIdHook: onRequestHookHandler;
8
+ //#endregion
5
9
  //#region src/index.d.ts
6
10
  type Plugin = {
7
11
  plugin: FastifyPluginAsync | FastifyPluginCallback;
8
12
  options: FastifyPluginOptions;
9
13
  };
10
14
  interface ApplicationOptions {
11
- serverOptions?: {
12
- logger: boolean;
13
- };
15
+ serverOptions?: FastifyServerOptions;
14
16
  registerRoutes?: (app: FastifyInstance) => void;
15
17
  activeDefaultPlugins?: Plugin[];
18
+ observability?: Partial<Observability<string>>;
19
+ disableTraceIdHeader?: boolean;
16
20
  }
17
21
  declare const getApplication: (options: ApplicationOptions) => Promise<FastifyInstance<_$fastify.RawServerDefault, _$node_http0.IncomingMessage, _$node_http0.ServerResponse<_$node_http0.IncomingMessage>, _$fastify.FastifyBaseLogger, _$fastify.FastifyTypeProviderDefault>>;
18
22
  type StartApiOptions = {
@@ -20,5 +24,5 @@ type StartApiOptions = {
20
24
  };
21
25
  declare const startAPI: (app: FastifyInstance, options?: StartApiOptions) => Promise<void>;
22
26
  //#endregion
23
- export { ApplicationOptions, StartApiOptions, getApplication, startAPI };
27
+ export { ApplicationOptions, StartApiOptions, getApplication, startAPI, traceIdHook };
24
28
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,9 +1,19 @@
1
1
  import Compress from "@fastify/compress";
2
2
  import Etag from "@fastify/etag";
3
3
  import Form from "@fastify/formbody";
4
+ import { currentDefaultObservability } from "@event-driven-io/emmett";
4
5
  import closeWithGrace from "close-with-grace";
5
6
  import Fastify from "fastify";
7
+ import { context, trace } from "@opentelemetry/api";
6
8
 
9
+ //#region src/traceIdHook.ts
10
+ const traceIdHook = (_request, reply, done) => {
11
+ const traceId = trace.getSpan(context.active())?.spanContext().traceId;
12
+ if (traceId) reply.header("x-trace-id", traceId);
13
+ done();
14
+ };
15
+
16
+ //#endregion
7
17
  //#region src/index.ts
8
18
  const defaultPlugins = [
9
19
  {
@@ -20,8 +30,9 @@ const defaultPlugins = [
20
30
  }
21
31
  ];
22
32
  const getApplication = async (options) => {
23
- const { registerRoutes, activeDefaultPlugins = defaultPlugins, serverOptions = { logger: true } } = options;
33
+ const { registerRoutes, activeDefaultPlugins = defaultPlugins, serverOptions, observability, disableTraceIdHeader } = options;
24
34
  const app = Fastify(serverOptions);
35
+ if ((observability !== void 0 || currentDefaultObservability() !== void 0) && disableTraceIdHeader !== true) app.addHook("onRequest", traceIdHook);
25
36
  await Promise.all(activeDefaultPlugins.map(async ({ plugin, options }) => {
26
37
  await app.register(plugin, options);
27
38
  }));
@@ -40,8 +51,6 @@ const startAPI = async (app, options = { port: 5e3 }) => {
40
51
  const { port } = options;
41
52
  try {
42
53
  await app.listen({ port });
43
- const address = app.server.address();
44
- console.log(`Server listening on ${address?.address}:${address?.port}`);
45
54
  } catch (err) {
46
55
  app.log.error(err);
47
56
  process.exit(1);
@@ -49,5 +58,5 @@ const startAPI = async (app, options = { port: 5e3 }) => {
49
58
  };
50
59
 
51
60
  //#endregion
52
- export { getApplication, startAPI };
61
+ export { getApplication, startAPI, traceIdHook };
53
62
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import Compress from '@fastify/compress';\nimport Etag from '@fastify/etag';\nimport Form from '@fastify/formbody';\nimport closeWithGrace from 'close-with-grace';\nimport Fastify, {\n type FastifyInstance,\n type FastifyPluginAsync,\n type FastifyPluginCallback,\n type FastifyPluginOptions,\n} from 'fastify';\n\n// TODO: THIS WILL NEED TO BE BETTER TYPED\ntype Plugin = {\n plugin: FastifyPluginAsync | FastifyPluginCallback;\n options: FastifyPluginOptions;\n};\n\nconst defaultPlugins: Plugin[] = [\n { plugin: Etag, options: {} },\n { plugin: Compress, options: { global: false } },\n { plugin: Form, options: {} },\n];\n\nexport interface ApplicationOptions {\n serverOptions?: { logger: boolean };\n registerRoutes?: (app: FastifyInstance) => void;\n activeDefaultPlugins?: Plugin[];\n}\n\nexport const getApplication = async (options: ApplicationOptions) => {\n const {\n registerRoutes,\n activeDefaultPlugins = defaultPlugins,\n serverOptions = {\n logger: true,\n },\n } = options;\n\n const app: FastifyInstance = Fastify(serverOptions);\n\n await Promise.all(\n activeDefaultPlugins.map(async ({ plugin, options }) => {\n await app.register(plugin, options);\n }),\n );\n\n if (registerRoutes) {\n registerRoutes(app);\n }\n\n const closeListeners = closeWithGrace({ delay: 500 }, async (opts) => {\n if (opts.err) {\n app.log.error(opts.err);\n }\n\n await app.close();\n });\n\n app.addHook('onClose', (instance, done) => {\n closeListeners.uninstall();\n done();\n });\n\n return app;\n};\n\nexport type StartApiOptions = {\n port?: number;\n};\n\nexport const startAPI = async (\n app: FastifyInstance,\n options: StartApiOptions = { port: 5000 },\n) => {\n const { port } = options;\n try {\n await app.listen({ port });\n const address = app.server.address() as { address: string; port: number };\n\n console.log(`Server listening on ${address?.address}:${address?.port}`);\n } catch (err) {\n app.log.error(err);\n process.exit(1);\n }\n};\n"],"mappings":";;;;;;;AAiBA,MAAM,iBAA2B;CAC/B;EAAE,QAAQ;EAAM,SAAS,EAAE;EAAE;CAC7B;EAAE,QAAQ;EAAU,SAAS,EAAE,QAAQ,OAAO;EAAE;CAChD;EAAE,QAAQ;EAAM,SAAS,EAAE;EAAE;CAC9B;AAQD,MAAa,iBAAiB,OAAO,YAAgC;CACnE,MAAM,EACJ,gBACA,uBAAuB,gBACvB,gBAAgB,EACd,QAAQ,MACT,KACC;CAEJ,MAAM,MAAuB,QAAQ,cAAc;AAEnD,OAAM,QAAQ,IACZ,qBAAqB,IAAI,OAAO,EAAE,QAAQ,cAAc;AACtD,QAAM,IAAI,SAAS,QAAQ,QAAQ;GACnC,CACH;AAED,KAAI,eACF,gBAAe,IAAI;CAGrB,MAAM,iBAAiB,eAAe,EAAE,OAAO,KAAK,EAAE,OAAO,SAAS;AACpE,MAAI,KAAK,IACP,KAAI,IAAI,MAAM,KAAK,IAAI;AAGzB,QAAM,IAAI,OAAO;GACjB;AAEF,KAAI,QAAQ,YAAY,UAAU,SAAS;AACzC,iBAAe,WAAW;AAC1B,QAAM;GACN;AAEF,QAAO;;AAOT,MAAa,WAAW,OACtB,KACA,UAA2B,EAAE,MAAM,KAAM,KACtC;CACH,MAAM,EAAE,SAAS;AACjB,KAAI;AACF,QAAM,IAAI,OAAO,EAAE,MAAM,CAAC;EAC1B,MAAM,UAAU,IAAI,OAAO,SAAS;AAEpC,UAAQ,IAAI,uBAAuB,SAAS,QAAQ,GAAG,SAAS,OAAO;UAChE,KAAK;AACZ,MAAI,IAAI,MAAM,IAAI;AAClB,UAAQ,KAAK,EAAE"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/traceIdHook.ts","../src/index.ts"],"sourcesContent":["import { context, trace } from '@opentelemetry/api';\nimport type { onRequestHookHandler } from 'fastify';\n\nexport const traceIdHook: onRequestHookHandler = (_request, reply, done) => {\n const traceId = trace.getSpan(context.active())?.spanContext().traceId;\n if (traceId) void reply.header('x-trace-id', traceId);\n done();\n};\n","import Compress from '@fastify/compress';\nimport Etag from '@fastify/etag';\nimport Form from '@fastify/formbody';\nimport {\n currentDefaultObservability,\n type Observability,\n} from '@event-driven-io/emmett';\nimport closeWithGrace from 'close-with-grace';\nimport Fastify, {\n type FastifyInstance,\n type FastifyPluginAsync,\n type FastifyPluginCallback,\n type FastifyPluginOptions,\n type FastifyServerOptions,\n} from 'fastify';\nimport { traceIdHook } from './traceIdHook';\n\nexport * from './traceIdHook';\n\n// TODO: THIS WILL NEED TO BE BETTER TYPED\ntype Plugin = {\n plugin: FastifyPluginAsync | FastifyPluginCallback;\n options: FastifyPluginOptions;\n};\n\nconst defaultPlugins: Plugin[] = [\n { plugin: Etag, options: {} },\n { plugin: Compress, options: { global: false } },\n { plugin: Form, options: {} },\n];\n\nexport interface ApplicationOptions {\n serverOptions?: FastifyServerOptions;\n registerRoutes?: (app: FastifyInstance) => void;\n activeDefaultPlugins?: Plugin[];\n observability?: Partial<Observability<string>>;\n disableTraceIdHeader?: boolean;\n}\n\nexport const getApplication = async (options: ApplicationOptions) => {\n const {\n registerRoutes,\n activeDefaultPlugins = defaultPlugins,\n serverOptions,\n observability,\n disableTraceIdHeader,\n } = options;\n\n const app: FastifyInstance = Fastify(serverOptions);\n\n const isObservabilityRegistered =\n observability !== undefined || currentDefaultObservability() !== undefined;\n\n if (isObservabilityRegistered && disableTraceIdHeader !== true)\n app.addHook('onRequest', traceIdHook);\n\n await Promise.all(\n activeDefaultPlugins.map(async ({ plugin, options }) => {\n await app.register(plugin, options);\n }),\n );\n\n if (registerRoutes) {\n registerRoutes(app);\n }\n\n const closeListeners = closeWithGrace({ delay: 500 }, async (opts) => {\n if (opts.err) {\n app.log.error(opts.err);\n }\n\n await app.close();\n });\n\n app.addHook('onClose', (instance, done) => {\n closeListeners.uninstall();\n done();\n });\n\n return app;\n};\n\nexport type StartApiOptions = {\n port?: number;\n};\n\nexport const startAPI = async (\n app: FastifyInstance,\n options: StartApiOptions = { port: 5000 },\n) => {\n const { port } = options;\n try {\n await app.listen({ port });\n } catch (err) {\n app.log.error(err);\n process.exit(1);\n }\n};\n"],"mappings":";;;;;;;;;AAGA,MAAa,eAAqC,UAAU,OAAO,SAAS;CAC1E,MAAM,UAAU,MAAM,QAAQ,QAAQ,QAAQ,CAAC,EAAE,aAAa,CAAC;AAC/D,KAAI,QAAS,CAAK,MAAM,OAAO,cAAc,QAAQ;AACrD,OAAM;;;;;ACmBR,MAAM,iBAA2B;CAC/B;EAAE,QAAQ;EAAM,SAAS,EAAE;EAAE;CAC7B;EAAE,QAAQ;EAAU,SAAS,EAAE,QAAQ,OAAO;EAAE;CAChD;EAAE,QAAQ;EAAM,SAAS,EAAE;EAAE;CAC9B;AAUD,MAAa,iBAAiB,OAAO,YAAgC;CACnE,MAAM,EACJ,gBACA,uBAAuB,gBACvB,eACA,eACA,yBACE;CAEJ,MAAM,MAAuB,QAAQ,cAAc;AAKnD,MAFE,kBAAkB,UAAa,6BAA6B,KAAK,WAElC,yBAAyB,KACxD,KAAI,QAAQ,aAAa,YAAY;AAEvC,OAAM,QAAQ,IACZ,qBAAqB,IAAI,OAAO,EAAE,QAAQ,cAAc;AACtD,QAAM,IAAI,SAAS,QAAQ,QAAQ;GACnC,CACH;AAED,KAAI,eACF,gBAAe,IAAI;CAGrB,MAAM,iBAAiB,eAAe,EAAE,OAAO,KAAK,EAAE,OAAO,SAAS;AACpE,MAAI,KAAK,IACP,KAAI,IAAI,MAAM,KAAK,IAAI;AAGzB,QAAM,IAAI,OAAO;GACjB;AAEF,KAAI,QAAQ,YAAY,UAAU,SAAS;AACzC,iBAAe,WAAW;AAC1B,QAAM;GACN;AAEF,QAAO;;AAOT,MAAa,WAAW,OACtB,KACA,UAA2B,EAAE,MAAM,KAAM,KACtC;CACH,MAAM,EAAE,SAAS;AACjB,KAAI;AACF,QAAM,IAAI,OAAO,EAAE,MAAM,CAAC;UACnB,KAAK;AACZ,MAAI,IAAI,MAAM,IAAI;AAClB,UAAQ,KAAK,EAAE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@event-driven-io/emmett-fastify",
3
- "version": "0.43.0-beta.50",
3
+ "version": "0.43.0-beta.51",
4
4
  "type": "module",
5
5
  "description": "Emmett - Event Sourcing development made simple",
6
6
  "scripts": {
@@ -53,7 +53,7 @@
53
53
  "dependencies": {},
54
54
  "devDependencies": {},
55
55
  "peerDependencies": {
56
- "@event-driven-io/emmett": "0.43.0-beta.50",
56
+ "@event-driven-io/emmett": "0.43.0-beta.51",
57
57
  "fastify": "^5.8.5",
58
58
  "@fastify/compress": "^8.3.1",
59
59
  "@fastify/etag": "^6.1.0",