@lokalise/fastify-extras 17.0.2 → 17.1.0

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.
Files changed (28) hide show
  1. package/README.md +4 -0
  2. package/dist/index.d.ts +4 -2
  3. package/dist/index.js +8 -3
  4. package/dist/index.js.map +1 -1
  5. package/dist/plugins/amplitude/Amplitude.d.ts +13 -0
  6. package/dist/plugins/amplitude/Amplitude.js +22 -0
  7. package/dist/plugins/amplitude/Amplitude.js.map +1 -0
  8. package/dist/plugins/amplitude/AmplitudeAdapter.d.ts +31 -0
  9. package/dist/plugins/amplitude/AmplitudeAdapter.js +30 -0
  10. package/dist/plugins/amplitude/AmplitudeAdapter.js.map +1 -0
  11. package/dist/plugins/amplitude/AmplitudeAdapter.spec.js +56 -0
  12. package/dist/plugins/amplitude/AmplitudeAdapter.spec.js.map +1 -0
  13. package/dist/plugins/{amplitudePlugin.d.ts → amplitude/amplitudePlugin.d.ts} +2 -13
  14. package/dist/plugins/{amplitudePlugin.js → amplitude/amplitudePlugin.js} +3 -19
  15. package/dist/plugins/amplitude/amplitudePlugin.js.map +1 -0
  16. package/dist/plugins/amplitude/amplitudePlugin.spec.d.ts +1 -0
  17. package/dist/plugins/amplitude/amplitudePlugin.spec.js.map +1 -0
  18. package/dist/plugins/bugsnagPlugin.d.ts +2 -2
  19. package/dist/plugins/bugsnagPlugin.js +2 -1
  20. package/dist/plugins/bugsnagPlugin.js.map +1 -1
  21. package/dist/plugins/metricsPlugin.d.ts +1 -1
  22. package/dist/plugins/metricsPlugin.js +43 -38
  23. package/dist/plugins/metricsPlugin.js.map +1 -1
  24. package/package.json +4 -4
  25. package/dist/plugins/amplitudePlugin.js.map +0 -1
  26. package/dist/plugins/amplitudePlugin.spec.js.map +0 -1
  27. /package/dist/plugins/{amplitudePlugin.spec.d.ts → amplitude/AmplitudeAdapter.spec.d.ts} +0 -0
  28. /package/dist/plugins/{amplitudePlugin.spec.js → amplitude/amplitudePlugin.spec.js} +0 -0
package/README.md CHANGED
@@ -176,6 +176,10 @@ The plugin decorates your Fastify instance with a `Amplitude`, which you can inj
176
176
  > "@amplitude/analytics-types": "*"
177
177
  > ```
178
178
 
179
+ Additionally, you have the option to enhance the safety and accuracy of your events and properties by wrapping your `Amplitude` instance with `AmplitudeAdapter`.
180
+
181
+ > 📘Check [`AmplitudeAdapter.spec.ts](./lib/plugins/amplitude/amplitudePlugin.spec.ts) for a practical example
182
+
179
183
  ### UnhandledException Plugin
180
184
 
181
185
  This plugin provides a mechanism for handling uncaught exceptions within your Fastify application, ensuring that such exceptions are logged and reported. It's especially useful for capturing unforeseen exceptions and provides a controlled shutdown of the Fastify server, thereby ensuring no potential data corruption.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { bugsnagPlugin, reportErrorToBugsnag, bugsnagErrorReporter } from './plugins/bugsnagPlugin';
1
+ export { bugsnagPlugin, reportErrorToBugsnag, bugsnagErrorReporter, addFeatureFlag, } from './plugins/bugsnagPlugin';
2
2
  export type { ErrorReport } from './plugins/bugsnagPlugin';
3
3
  export { requestContextProviderPlugin, getRequestIdFastifyAppConfig, REQUEST_ID_STORE_KEY, } from './plugins/requestContextProviderPlugin';
4
4
  export type { BaseRequestContext as RequestContext } from './plugins/requestContextProviderPlugin';
@@ -16,7 +16,9 @@ export { publicHealthcheckPlugin } from './plugins/healthcheck/publicHealthcheck
16
16
  export type { PublicHealthcheckPluginOptions, HealthCheck, InfoProvider, } from './plugins/healthcheck/publicHealthcheckPlugin';
17
17
  export { wrapHealthCheck } from './plugins/healthcheck/healthcheckCommons';
18
18
  export type { HealthChecker } from './plugins/healthcheck/healthcheckCommons';
19
- export { amplitudePlugin, Amplitude, type AmplitudeConfig, type CreateApiTrackingEventFn, } from './plugins/amplitudePlugin';
19
+ export { amplitudePlugin, type AmplitudeConfig, type CreateApiTrackingEventFn, } from './plugins/amplitude/amplitudePlugin';
20
+ export { Amplitude } from './plugins/amplitude/Amplitude';
21
+ export { AmplitudeAdapter, AMPLITUDE_BASE_MESSAGE_SCHEMA, type AmplitudeMessage, type AmplitudeAdapterDependencies, } from './plugins/amplitude/AmplitudeAdapter';
20
22
  export type { FastifyReplyWithPayload } from './types';
21
23
  export { unhandledExceptionPlugin } from './plugins/unhandledExceptionPlugin';
22
24
  export type { UnhandledExceptionPluginOptions } from './plugins/unhandledExceptionPlugin';
package/dist/index.js CHANGED
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.decodeJwtToken = exports.generateJwtToken = exports.isZodError = exports.createErrorHandler = exports.unhandledExceptionPlugin = exports.Amplitude = exports.amplitudePlugin = exports.wrapHealthCheck = exports.publicHealthcheckPlugin = exports.prismaOtelTracingPlugin = exports.metricsPlugin = exports.wrapHealthCheckForPrometheus = exports.healthcheckMetricsPlugin = exports.SplitIOFeatureManager = exports.splitIOFeatureManagerPlugin = exports.NewRelicTransactionManager = exports.newrelicTransactionManagerPlugin = exports.REQUEST_ID_STORE_KEY = exports.getRequestIdFastifyAppConfig = exports.requestContextProviderPlugin = exports.bugsnagErrorReporter = exports.reportErrorToBugsnag = exports.bugsnagPlugin = void 0;
3
+ exports.decodeJwtToken = exports.generateJwtToken = exports.isZodError = exports.createErrorHandler = exports.unhandledExceptionPlugin = exports.AMPLITUDE_BASE_MESSAGE_SCHEMA = exports.AmplitudeAdapter = exports.Amplitude = exports.amplitudePlugin = exports.wrapHealthCheck = exports.publicHealthcheckPlugin = exports.prismaOtelTracingPlugin = exports.metricsPlugin = exports.wrapHealthCheckForPrometheus = exports.healthcheckMetricsPlugin = exports.SplitIOFeatureManager = exports.splitIOFeatureManagerPlugin = exports.NewRelicTransactionManager = exports.newrelicTransactionManagerPlugin = exports.REQUEST_ID_STORE_KEY = exports.getRequestIdFastifyAppConfig = exports.requestContextProviderPlugin = exports.addFeatureFlag = exports.bugsnagErrorReporter = exports.reportErrorToBugsnag = exports.bugsnagPlugin = void 0;
4
4
  var bugsnagPlugin_1 = require("./plugins/bugsnagPlugin");
5
5
  Object.defineProperty(exports, "bugsnagPlugin", { enumerable: true, get: function () { return bugsnagPlugin_1.bugsnagPlugin; } });
6
6
  Object.defineProperty(exports, "reportErrorToBugsnag", { enumerable: true, get: function () { return bugsnagPlugin_1.reportErrorToBugsnag; } });
7
7
  Object.defineProperty(exports, "bugsnagErrorReporter", { enumerable: true, get: function () { return bugsnagPlugin_1.bugsnagErrorReporter; } });
8
+ Object.defineProperty(exports, "addFeatureFlag", { enumerable: true, get: function () { return bugsnagPlugin_1.addFeatureFlag; } });
8
9
  var requestContextProviderPlugin_1 = require("./plugins/requestContextProviderPlugin");
9
10
  Object.defineProperty(exports, "requestContextProviderPlugin", { enumerable: true, get: function () { return requestContextProviderPlugin_1.requestContextProviderPlugin; } });
10
11
  Object.defineProperty(exports, "getRequestIdFastifyAppConfig", { enumerable: true, get: function () { return requestContextProviderPlugin_1.getRequestIdFastifyAppConfig; } });
@@ -26,9 +27,13 @@ var publicHealthcheckPlugin_1 = require("./plugins/healthcheck/publicHealthcheck
26
27
  Object.defineProperty(exports, "publicHealthcheckPlugin", { enumerable: true, get: function () { return publicHealthcheckPlugin_1.publicHealthcheckPlugin; } });
27
28
  var healthcheckCommons_1 = require("./plugins/healthcheck/healthcheckCommons");
28
29
  Object.defineProperty(exports, "wrapHealthCheck", { enumerable: true, get: function () { return healthcheckCommons_1.wrapHealthCheck; } });
29
- var amplitudePlugin_1 = require("./plugins/amplitudePlugin");
30
+ var amplitudePlugin_1 = require("./plugins/amplitude/amplitudePlugin");
30
31
  Object.defineProperty(exports, "amplitudePlugin", { enumerable: true, get: function () { return amplitudePlugin_1.amplitudePlugin; } });
31
- Object.defineProperty(exports, "Amplitude", { enumerable: true, get: function () { return amplitudePlugin_1.Amplitude; } });
32
+ var Amplitude_1 = require("./plugins/amplitude/Amplitude");
33
+ Object.defineProperty(exports, "Amplitude", { enumerable: true, get: function () { return Amplitude_1.Amplitude; } });
34
+ var AmplitudeAdapter_1 = require("./plugins/amplitude/AmplitudeAdapter");
35
+ Object.defineProperty(exports, "AmplitudeAdapter", { enumerable: true, get: function () { return AmplitudeAdapter_1.AmplitudeAdapter; } });
36
+ Object.defineProperty(exports, "AMPLITUDE_BASE_MESSAGE_SCHEMA", { enumerable: true, get: function () { return AmplitudeAdapter_1.AMPLITUDE_BASE_MESSAGE_SCHEMA; } });
32
37
  var unhandledExceptionPlugin_1 = require("./plugins/unhandledExceptionPlugin");
33
38
  Object.defineProperty(exports, "unhandledExceptionPlugin", { enumerable: true, get: function () { return unhandledExceptionPlugin_1.unhandledExceptionPlugin; } });
34
39
  var errorHandler_1 = require("./errors/errorHandler");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;;AAAA,yDAAmG;AAA1F,8GAAA,aAAa,OAAA;AAAE,qHAAA,oBAAoB,OAAA;AAAE,qHAAA,oBAAoB,OAAA;AAGlE,uFAI+C;AAH7C,4IAAA,4BAA4B,OAAA;AAC5B,4IAAA,4BAA4B,OAAA;AAC5B,oIAAA,oBAAoB,OAAA;AAItB,+FAGmD;AAFjD,oJAAA,gCAAgC,OAAA;AAChC,8IAAA,0BAA0B,OAAA;AAI5B,qFAG8C;AAF5C,0IAAA,2BAA2B,OAAA;AAC3B,oIAAA,qBAAqB,OAAA;AAIvB,2FAGuD;AAFrD,oIAAA,wBAAwB,OAAA;AACxB,wIAAA,4BAA4B,OAAA;AAQ9B,yDAAuD;AAA9C,8GAAA,aAAa,OAAA;AAGtB,2FAAyF;AAAhF,kIAAA,uBAAuB,OAAA;AAGhC,yFAAuF;AAA9E,kIAAA,uBAAuB,OAAA;AAOhC,+EAA0E;AAAjE,qHAAA,eAAe,OAAA;AAGxB,6DAKkC;AAJhC,kHAAA,eAAe,OAAA;AACf,4GAAA,SAAS,OAAA;AAOX,+EAA6E;AAApE,oIAAA,wBAAwB,OAAA;AAGjC,sDAAsE;AAA7D,kHAAA,kBAAkB,OAAA;AAAE,0GAAA,UAAU,OAAA;AAGvC,qDAAyE;AAAhE,8GAAA,gBAAgB,OAAA;AAAE,4GAAA,cAAc,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;;AAAA,yDAKgC;AAJ9B,8GAAA,aAAa,OAAA;AACb,qHAAA,oBAAoB,OAAA;AACpB,qHAAA,oBAAoB,OAAA;AACpB,+GAAA,cAAc,OAAA;AAIhB,uFAI+C;AAH7C,4IAAA,4BAA4B,OAAA;AAC5B,4IAAA,4BAA4B,OAAA;AAC5B,oIAAA,oBAAoB,OAAA;AAItB,+FAGmD;AAFjD,oJAAA,gCAAgC,OAAA;AAChC,8IAAA,0BAA0B,OAAA;AAI5B,qFAG8C;AAF5C,0IAAA,2BAA2B,OAAA;AAC3B,oIAAA,qBAAqB,OAAA;AAIvB,2FAGuD;AAFrD,oIAAA,wBAAwB,OAAA;AACxB,wIAAA,4BAA4B,OAAA;AAQ9B,yDAAuD;AAA9C,8GAAA,aAAa,OAAA;AAGtB,2FAAyF;AAAhF,kIAAA,uBAAuB,OAAA;AAGhC,yFAAuF;AAA9E,kIAAA,uBAAuB,OAAA;AAOhC,+EAA0E;AAAjE,qHAAA,eAAe,OAAA;AAGxB,uEAI4C;AAH1C,kHAAA,eAAe,OAAA;AAIjB,2DAAyD;AAAhD,sGAAA,SAAS,OAAA;AAClB,yEAK6C;AAJ3C,oHAAA,gBAAgB,OAAA;AAChB,iIAAA,6BAA6B,OAAA;AAO/B,+EAA6E;AAApE,oIAAA,wBAAwB,OAAA;AAGjC,sDAAsE;AAA7D,kHAAA,kBAAkB,OAAA;AAAE,0GAAA,UAAU,OAAA;AAGvC,qDAAyE;AAAhE,8GAAA,gBAAgB,OAAA;AAAE,4GAAA,cAAc,OAAA"}
@@ -0,0 +1,13 @@
1
+ import type { AmplitudeReturn, BaseEvent, Result } from '@amplitude/analytics-types';
2
+ export declare class Amplitude {
3
+ private readonly isEnabled;
4
+ constructor(isEnabled: boolean);
5
+ /**
6
+ * Sends the given event to Amplitude
7
+ *
8
+ * @param event Event to send to amplitude. Please check
9
+ * [this](https://amplitude.github.io/Amplitude-TypeScript/interfaces/_amplitude_analytics_node.Types.BaseEvent.html)
10
+ * to get more info about the BaseEvent type
11
+ */
12
+ track(event: BaseEvent): AmplitudeReturn<Result | null>;
13
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Amplitude = void 0;
4
+ const analytics_node_1 = require("@amplitude/analytics-node");
5
+ class Amplitude {
6
+ isEnabled;
7
+ constructor(isEnabled) {
8
+ this.isEnabled = isEnabled;
9
+ }
10
+ /**
11
+ * Sends the given event to Amplitude
12
+ *
13
+ * @param event Event to send to amplitude. Please check
14
+ * [this](https://amplitude.github.io/Amplitude-TypeScript/interfaces/_amplitude_analytics_node.Types.BaseEvent.html)
15
+ * to get more info about the BaseEvent type
16
+ */
17
+ track(event) {
18
+ return this.isEnabled ? (0, analytics_node_1.track)(event) : { promise: Promise.resolve(null) };
19
+ }
20
+ }
21
+ exports.Amplitude = Amplitude;
22
+ //# sourceMappingURL=Amplitude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Amplitude.js","sourceRoot":"","sources":["../../../lib/plugins/amplitude/Amplitude.ts"],"names":[],"mappings":";;;AAAA,8DAAiD;AAGjD,MAAa,SAAS;IACH,SAAS,CAAS;IAEnC,YAAY,SAAkB;QAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,KAAgB;QAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAA,sBAAK,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAA;IAC3E,CAAC;CACF;AAjBD,8BAiBC"}
@@ -0,0 +1,31 @@
1
+ import z, { type ZodObject } from 'zod';
2
+ import type { Amplitude } from './Amplitude';
3
+ export declare const AMPLITUDE_BASE_MESSAGE_SCHEMA: z.ZodObject<{
4
+ event_type: z.ZodLiteral<string>;
5
+ event_properties: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
6
+ user_id: z.ZodString;
7
+ }, "strip", z.ZodTypeAny, {
8
+ event_type: string;
9
+ event_properties: {};
10
+ user_id: string;
11
+ }, {
12
+ event_type: string;
13
+ event_properties: {};
14
+ user_id: string;
15
+ }>;
16
+ export type AmplitudeAdapterDependencies = {
17
+ amplitude: Amplitude;
18
+ };
19
+ export type AmplitudeMessage = {
20
+ schema: ZodObject<(typeof AMPLITUDE_BASE_MESSAGE_SCHEMA)['shape']>;
21
+ };
22
+ type AmplitudeMessageSchemaType<T extends AmplitudeMessage> = z.infer<T['schema']>;
23
+ /**
24
+ * Amplitude adapter which provides type safe tracking of events
25
+ */
26
+ export declare class AmplitudeAdapter<AmplitudeMessages extends AmplitudeMessage[]> {
27
+ private readonly amplitude;
28
+ constructor({ amplitude }: AmplitudeAdapterDependencies);
29
+ track<Message extends AmplitudeMessages[number]>(supportedMessage: Message, data: Omit<AmplitudeMessageSchemaType<Message>, 'event_type'>): void;
30
+ }
31
+ export {};
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AmplitudeAdapter = exports.AMPLITUDE_BASE_MESSAGE_SCHEMA = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const zod_1 = tslib_1.__importDefault(require("zod"));
6
+ exports.AMPLITUDE_BASE_MESSAGE_SCHEMA = zod_1.default
7
+ .object({
8
+ event_type: zod_1.default.literal('<replace.me>'),
9
+ event_properties: zod_1.default.object({}),
10
+ user_id: zod_1.default.string().uuid(),
11
+ })
12
+ .strip();
13
+ /**
14
+ * Amplitude adapter which provides type safe tracking of events
15
+ */
16
+ class AmplitudeAdapter {
17
+ amplitude;
18
+ constructor({ amplitude }) {
19
+ this.amplitude = amplitude;
20
+ }
21
+ track(supportedMessage, data) {
22
+ const message = supportedMessage.schema.parse({
23
+ event_type: supportedMessage.schema.shape.event_type.value,
24
+ ...data,
25
+ });
26
+ this.amplitude.track(message);
27
+ }
28
+ }
29
+ exports.AmplitudeAdapter = AmplitudeAdapter;
30
+ //# sourceMappingURL=AmplitudeAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AmplitudeAdapter.js","sourceRoot":"","sources":["../../../lib/plugins/amplitude/AmplitudeAdapter.ts"],"names":[],"mappings":";;;;AAAA,sDAAuC;AAI1B,QAAA,6BAA6B,GAAG,aAAC;KAC3C,MAAM,CAAC;IACN,UAAU,EAAE,aAAC,CAAC,OAAO,CAAS,cAAc,CAAC;IAC7C,gBAAgB,EAAE,aAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IAC9B,OAAO,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;CAC3B,CAAC;KACD,KAAK,EAAE,CAAA;AAWV;;GAEG;AACH,MAAa,gBAAgB;IACV,SAAS,CAAW;IAErC,YAAY,EAAE,SAAS,EAAgC;QACrD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAEM,KAAK,CACV,gBAAyB,EACzB,IAA6D;QAE7D,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;YAC5C,UAAU,EAAE,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK;YAC1D,GAAG,IAAI;SACR,CAAC,CAAA;QACF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC/B,CAAC;CACF;AAjBD,4CAiBC"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const crypto_1 = require("crypto");
4
+ const vitest_1 = require("vitest");
5
+ const zod_1 = require("zod");
6
+ const Amplitude_1 = require("./Amplitude");
7
+ const AmplitudeAdapter_1 = require("./AmplitudeAdapter");
8
+ const testMessages = {
9
+ myEvent: {
10
+ schema: AmplitudeAdapter_1.AMPLITUDE_BASE_MESSAGE_SCHEMA.extend({
11
+ event_type: zod_1.z.literal('my event'),
12
+ event_properties: zod_1.z.object({
13
+ number: zod_1.z.number(),
14
+ }),
15
+ }),
16
+ },
17
+ };
18
+ const testMessagesValues = Object.values(testMessages);
19
+ describe('Amplitude adapter', () => {
20
+ let amplitudeAdapter;
21
+ let amplitudeTrackSpy;
22
+ (0, vitest_1.beforeAll)(() => {
23
+ const amplitude = new Amplitude_1.Amplitude(true);
24
+ amplitudeTrackSpy = vi
25
+ .spyOn(amplitude, 'track')
26
+ .mockImplementation(() => ({ promise: Promise.resolve(null) }));
27
+ amplitudeAdapter = new AmplitudeAdapter_1.AmplitudeAdapter({ amplitude });
28
+ });
29
+ it('works', () => {
30
+ const user_id = (0, crypto_1.randomUUID)();
31
+ amplitudeAdapter.track(testMessages.myEvent, {
32
+ user_id,
33
+ event_properties: { number: 42 },
34
+ });
35
+ (0, vitest_1.expect)(amplitudeTrackSpy).toHaveBeenCalledWith({
36
+ event_type: 'my event',
37
+ user_id,
38
+ event_properties: { number: 42 },
39
+ });
40
+ });
41
+ it('wrong type', () => {
42
+ let error;
43
+ try {
44
+ amplitudeAdapter.track(testMessages.myEvent, {
45
+ user_id: (0, crypto_1.randomUUID)(),
46
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
47
+ event_properties: { number: 'bad' },
48
+ });
49
+ }
50
+ catch (e) {
51
+ error = e;
52
+ }
53
+ (0, vitest_1.expect)(error).toBeInstanceOf(zod_1.z.ZodError);
54
+ });
55
+ });
56
+ //# sourceMappingURL=AmplitudeAdapter.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AmplitudeAdapter.spec.js","sourceRoot":"","sources":["../../../lib/plugins/amplitude/AmplitudeAdapter.spec.ts"],"names":[],"mappings":";;AAAA,mCAAmC;AAGnC,mCAA0C;AAC1C,6BAAuB;AAEvB,2CAAuC;AACvC,yDAAoF;AAGpF,MAAM,YAAY,GAAqC;IACrD,OAAO,EAAE;QACP,MAAM,EAAE,gDAA6B,CAAC,MAAM,CAAC;YAC3C,UAAU,EAAE,OAAC,CAAC,OAAO,CAAC,UAAU,CAAC;YACjC,gBAAgB,EAAE,OAAC,CAAC,MAAM,CAAC;gBACzB,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE;aACnB,CAAC;SACH,CAAC;KACH;CACF,CAAA;AACD,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;AAGtD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,gBAAqD,CAAA;IACzD,IAAI,iBAA+B,CAAA;IAEnC,IAAA,kBAAS,EAAC,GAAG,EAAE;QACb,MAAM,SAAS,GAAG,IAAI,qBAAS,CAAC,IAAI,CAAC,CAAA;QACrC,iBAAiB,GAAG,EAAE;aACnB,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;aACzB,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;QACjE,gBAAgB,GAAG,IAAI,mCAAgB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAA;IACxD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QACf,MAAM,OAAO,GAAG,IAAA,mBAAU,GAAE,CAAA;QAC5B,gBAAgB,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE;YAC3C,OAAO;YACP,gBAAgB,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;SACjC,CAAC,CAAA;QAEF,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAC,oBAAoB,CAAC;YAC7C,UAAU,EAAE,UAAU;YACtB,OAAO;YACP,gBAAgB,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;SACjC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;QACpB,IAAI,KAAc,CAAA;QAClB,IAAI,CAAC;YACH,gBAAgB,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE;gBAC3C,OAAO,EAAE,IAAA,mBAAU,GAAE;gBACrB,8DAA8D;gBAC9D,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAY,EAAE;aAC3C,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,KAAK,GAAG,CAAC,CAAA;QACX,CAAC;QAED,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,cAAc,CAAC,OAAC,CAAC,QAAQ,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,5 +1,6 @@
1
- import type { AmplitudeReturn, BaseEvent, NodeOptions, Plugin, Result } from '@amplitude/analytics-types';
1
+ import type { BaseEvent, NodeOptions, Plugin } from '@amplitude/analytics-types';
2
2
  import type { FastifyReply, FastifyRequest } from 'fastify';
3
+ import { Amplitude } from './Amplitude';
3
4
  declare module 'fastify' {
4
5
  interface FastifyInstance {
5
6
  amplitude: Amplitude;
@@ -53,15 +54,3 @@ export interface AmplitudeConfig {
53
54
  * ```
54
55
  */
55
56
  export declare const amplitudePlugin: import("fastify").FastifyPluginCallback<AmplitudeConfig, import("fastify").RawServerDefault, import("fastify").FastifyTypeProviderDefault, import("fastify").FastifyBaseLogger>;
56
- export declare class Amplitude {
57
- private readonly isEnabled;
58
- constructor(isEnabled: boolean);
59
- /**
60
- * Sends the given event to Amplitude
61
- *
62
- * @param event Event to send to amplitude. Please check
63
- * [this](https://amplitude.github.io/Amplitude-TypeScript/interfaces/_amplitude_analytics_node.Types.BaseEvent.html)
64
- * to get more info about the BaseEvent type
65
- */
66
- track(event: BaseEvent): AmplitudeReturn<Result | null>;
67
- }
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Amplitude = exports.amplitudePlugin = void 0;
3
+ exports.amplitudePlugin = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const analytics_node_1 = require("@amplitude/analytics-node");
6
6
  const fastify_plugin_1 = tslib_1.__importDefault(require("fastify-plugin"));
7
+ const Amplitude_1 = require("./Amplitude");
7
8
  function plugin(fastify, config, next) {
8
- const amplitudeInstance = new Amplitude(config.isEnabled);
9
+ const amplitudeInstance = new Amplitude_1.Amplitude(config.isEnabled);
9
10
  fastify.decorate('amplitude', amplitudeInstance);
10
11
  if (!config.isEnabled) {
11
12
  return next();
@@ -55,21 +56,4 @@ exports.amplitudePlugin = (0, fastify_plugin_1.default)(plugin, {
55
56
  fastify: '4.x',
56
57
  name: 'amplitude-plugin',
57
58
  });
58
- class Amplitude {
59
- isEnabled;
60
- constructor(isEnabled) {
61
- this.isEnabled = isEnabled;
62
- }
63
- /**
64
- * Sends the given event to Amplitude
65
- *
66
- * @param event Event to send to amplitude. Please check
67
- * [this](https://amplitude.github.io/Amplitude-TypeScript/interfaces/_amplitude_analytics_node.Types.BaseEvent.html)
68
- * to get more info about the BaseEvent type
69
- */
70
- track(event) {
71
- return this.isEnabled ? (0, analytics_node_1.track)(event) : { promise: Promise.resolve(null) };
72
- }
73
- }
74
- exports.Amplitude = Amplitude;
75
59
  //# sourceMappingURL=amplitudePlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amplitudePlugin.js","sourceRoot":"","sources":["../../../lib/plugins/amplitude/amplitudePlugin.ts"],"names":[],"mappings":";;;;AAAA,8DAAqD;AAQrD,4EAA+B;AAE/B,2CAAuC;AAQvC,SAAS,MAAM,CAAC,OAAwB,EAAE,MAAuB,EAAE,IAA2B;IAC5F,MAAM,iBAAiB,GAAG,IAAI,qBAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IACzD,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAA;IAEhD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,IAAI,EAAE,CAAA;IACf,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAA;IACjD,CAAC;IAED,IAAA,qBAAI,EAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC;SAChC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;QACjB,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5B,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAA;QAC7E,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,mBAAmB;YACnB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,oBAAG,EAAC,CAAC,CAAC,CAAC,CAAA;QACvC,CAAC;QAED,IAAI,EAAE,CAAA;IACR,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACb,IAAI,CAAC,GAAY,CAAC,CAAA;IACpB,CAAC,CAAC,CAAA;AACN,CAAC;AAED,SAAS,sBAAsB,CAC7B,OAAwB,EACxB,SAAoB,EACpB,eAAyC;IAEzC,OAAO,CAAC,OAAO,CACb,YAAY,EACZ,CAAC,GAAmB,EAAE,GAAiB,EAAE,IAA6B,EAAE,EAAE;QACxE,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QACvC,IAAI,KAAK,EAAE,CAAC;YACV,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC;QACD,OAAO,IAAI,EAAE,CAAA;IACf,CAAC,CACF,CAAA;AACH,CAAC;AAqCD;;;;;;;;;;;;;GAaG;AACU,QAAA,eAAe,GAAG,IAAA,wBAAE,EAAkB,MAAM,EAAE;IACzD,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,kBAAkB;CACzB,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amplitudePlugin.spec.js","sourceRoot":"","sources":["../../../lib/plugins/amplitude/amplitudePlugin.spec.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { NodeConfig } from '@bugsnag/node';
2
- import { bugsnagErrorReporter, type ErrorReport, reportErrorToBugsnag, type Severity } from '@lokalise/error-utils';
2
+ import { bugsnagErrorReporter, type ErrorReport, reportErrorToBugsnag, addFeatureFlag, type Severity } from '@lokalise/error-utils';
3
3
  import type { FastifyInstance } from 'fastify';
4
- export { reportErrorToBugsnag, bugsnagErrorReporter, ErrorReport, Severity };
4
+ export { reportErrorToBugsnag, addFeatureFlag, bugsnagErrorReporter, ErrorReport, Severity };
5
5
  export interface BugsnagPluginConfig {
6
6
  bugsnag: NodeConfig;
7
7
  isEnabled: boolean;
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.bugsnagPlugin = exports.bugsnagErrorReporter = exports.reportErrorToBugsnag = void 0;
3
+ exports.bugsnagPlugin = exports.bugsnagErrorReporter = exports.addFeatureFlag = exports.reportErrorToBugsnag = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const js_1 = tslib_1.__importDefault(require("@bugsnag/js"));
6
6
  const error_utils_1 = require("@lokalise/error-utils");
7
7
  Object.defineProperty(exports, "bugsnagErrorReporter", { enumerable: true, get: function () { return error_utils_1.bugsnagErrorReporter; } });
8
8
  Object.defineProperty(exports, "reportErrorToBugsnag", { enumerable: true, get: function () { return error_utils_1.reportErrorToBugsnag; } });
9
+ Object.defineProperty(exports, "addFeatureFlag", { enumerable: true, get: function () { return error_utils_1.addFeatureFlag; } });
9
10
  const fastify_plugin_1 = tslib_1.__importDefault(require("fastify-plugin"));
10
11
  function plugin(_app, opts, done) {
11
12
  if (opts.isEnabled) {
@@ -1 +1 @@
1
- {"version":3,"file":"bugsnagPlugin.js","sourceRoot":"","sources":["../../lib/plugins/bugsnagPlugin.ts"],"names":[],"mappings":";;;;AAAA,6DAAiC;AAEjC,uDAK8B;AAIC,qGAR7B,kCAAoB,OAQ6B;AAA1C,qGANP,kCAAoB,OAMO;AAF7B,4EAA+B;AAS/B,SAAS,MAAM,CAAC,IAAqB,EAAE,IAAyB,EAAE,IAAgB;IAChF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,YAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC;IAED,IAAI,EAAE,CAAA;AACR,CAAC;AAEY,QAAA,aAAa,GAAG,IAAA,wBAAE,EAAC,MAAM,EAAE;IACtC,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,gBAAgB;CACvB,CAAC,CAAA"}
1
+ {"version":3,"file":"bugsnagPlugin.js","sourceRoot":"","sources":["../../lib/plugins/bugsnagPlugin.ts"],"names":[],"mappings":";;;;AAAA,6DAAiC;AAEjC,uDAM8B;AAIiB,qGAT7C,kCAAoB,OAS6C;AAA1D,qGAPP,kCAAoB,OAOO;AAAE,+FAN7B,4BAAc,OAM6B;AAF7C,4EAA+B;AAS/B,SAAS,MAAM,CAAC,IAAqB,EAAE,IAAyB,EAAE,IAAgB;IAChF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,YAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC;IAED,IAAI,EAAE,CAAA;AACR,CAAC;AAEY,QAAA,aAAa,GAAG,IAAA,wBAAE,EAAC,MAAM,EAAE;IACtC,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,gBAAgB;CACvB,CAAC,CAAA"}
@@ -7,6 +7,6 @@ export interface MetricsPluginOptions {
7
7
  bindAddress?: string;
8
8
  errorObjectResolver: ErrorObjectResolver;
9
9
  }
10
- declare function plugin(app: FastifyInstance, opts: MetricsPluginOptions): Promise<void>;
10
+ declare function plugin(app: FastifyInstance, opts: MetricsPluginOptions, done: (err?: Error) => void): void;
11
11
  export declare const metricsPlugin: typeof plugin;
12
12
  export {};
@@ -6,7 +6,7 @@ const fastify_1 = tslib_1.__importDefault(require("fastify"));
6
6
  const fastify_metrics_1 = tslib_1.__importDefault(require("fastify-metrics"));
7
7
  const fastify_plugin_1 = tslib_1.__importDefault(require("fastify-plugin"));
8
8
  const METRICS_PORT = 9080;
9
- function plugin(app, opts) {
9
+ function plugin(app, opts, done) {
10
10
  void app.register(fastify_metrics_1.default, {
11
11
  defaultMetrics: { enabled: true },
12
12
  endpoint: null,
@@ -14,43 +14,48 @@ function plugin(app, opts) {
14
14
  name: 'metrics',
15
15
  routeMetrics: { enabled: true },
16
16
  });
17
- const promServer = (0, fastify_1.default)({
18
- logger: opts.loggerOptions,
19
- disableRequestLogging: opts.disablePrometheusRequestLogging ?? true,
20
- });
21
- promServer.route({
22
- url: '/metrics',
23
- method: 'GET',
24
- logLevel: 'info',
25
- schema: {
26
- // hide route from swagger plugins
27
- // @ts-expect-error
28
- hide: true,
29
- },
30
- handler: async (_, reply) => {
31
- const metrics = await app.metrics.client.register.metrics();
32
- return reply.type('text/plain').send(metrics);
33
- },
34
- });
35
- app.addHook('onClose', async () => {
36
- await promServer.close();
37
- });
38
- return promServer
39
- .listen({
40
- port: METRICS_PORT,
41
- host: opts.bindAddress,
42
- listenTextResolver: (address) => {
43
- return `Prometheus metrics server listening at ${address}`;
44
- },
45
- })
46
- .catch((err) => {
47
- const logObject = opts.errorObjectResolver(err);
48
- promServer.log.error(logObject);
49
- throw new Error('Critical error when trying to launch metrics server');
50
- })
51
- .then(() => {
52
- // this is to consume string which plugin does not expect
53
- });
17
+ try {
18
+ const promServer = (0, fastify_1.default)({
19
+ logger: opts.loggerOptions,
20
+ disableRequestLogging: opts.disablePrometheusRequestLogging ?? true,
21
+ });
22
+ promServer.route({
23
+ url: '/metrics',
24
+ method: 'GET',
25
+ logLevel: 'info',
26
+ schema: {
27
+ // hide route from swagger plugins
28
+ // @ts-expect-error
29
+ hide: true,
30
+ },
31
+ handler: async (_, reply) => {
32
+ const metrics = await app.metrics.client.register.metrics();
33
+ return reply.type('text/plain').send(metrics);
34
+ },
35
+ });
36
+ app.addHook('onClose', async () => {
37
+ await promServer.close();
38
+ });
39
+ promServer
40
+ .listen({
41
+ port: METRICS_PORT,
42
+ host: opts.bindAddress,
43
+ listenTextResolver: (address) => {
44
+ return `Prometheus metrics server listening at ${address}`;
45
+ },
46
+ })
47
+ .then(() => {
48
+ done();
49
+ })
50
+ .catch((err) => {
51
+ const logObject = opts.errorObjectResolver(err);
52
+ promServer.log.error(logObject);
53
+ done(new Error('Critical error when trying to launch metrics server'));
54
+ });
55
+ }
56
+ catch (err) {
57
+ done(err);
58
+ }
54
59
  }
55
60
  exports.metricsPlugin = (0, fastify_plugin_1.default)(plugin, {
56
61
  fastify: '4.x',
@@ -1 +1 @@
1
- {"version":3,"file":"metricsPlugin.js","sourceRoot":"","sources":["../../lib/plugins/metricsPlugin.ts"],"names":[],"mappings":";;;;AACA,8DAA6B;AAE7B,8EAA4C;AAC5C,4EAA+B;AAE/B,MAAM,YAAY,GAAG,IAAI,CAAA;AAWzB,SAAS,MAAM,CAAC,GAAoB,EAAE,IAA0B;IAC9D,KAAK,GAAG,CAAC,QAAQ,CAAC,yBAAc,EAAE;QAChC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACjC,QAAQ,EAAE,IAAI;QACd,mBAAmB,EAAE,IAAI;QACzB,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;KAChC,CAAC,CAAA;IAEF,MAAM,UAAU,GAAG,IAAA,iBAAO,EAAC;QACzB,MAAM,EAAE,IAAI,CAAC,aAAa;QAC1B,qBAAqB,EAAE,IAAI,CAAC,+BAA+B,IAAI,IAAI;KACpE,CAAC,CAAA;IAEF,UAAU,CAAC,KAAK,CAAC;QACf,GAAG,EAAE,UAAU;QACf,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE;YACN,kCAAkC;YAClC,mBAAmB;YACnB,IAAI,EAAE,IAAI;SACX;QACD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE;YAC1B,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;YAC3D,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC/C,CAAC;KACF,CAAC,CAAA;IAEF,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAChC,MAAM,UAAU,CAAC,KAAK,EAAE,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,OAAO,UAAU;SACd,MAAM,CAAC;QACN,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,IAAI,CAAC,WAAW;QACtB,kBAAkB,EAAE,CAAC,OAAO,EAAE,EAAE;YAC9B,OAAO,0CAA0C,OAAO,EAAE,CAAA;QAC5D,CAAC;KACF,CAAC;SACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAA;QAC/C,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAC/B,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;IACxE,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,EAAE;QACT,yDAAyD;IAC3D,CAAC,CAAC,CAAA;AACN,CAAC;AAEY,QAAA,aAAa,GAAG,IAAA,wBAAE,EAAC,MAAM,EAAE;IACtC,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,gBAAgB;CACvB,CAAC,CAAA"}
1
+ {"version":3,"file":"metricsPlugin.js","sourceRoot":"","sources":["../../lib/plugins/metricsPlugin.ts"],"names":[],"mappings":";;;;AACA,8DAA6B;AAE7B,8EAA4C;AAC5C,4EAA+B;AAE/B,MAAM,YAAY,GAAG,IAAI,CAAA;AAWzB,SAAS,MAAM,CAAC,GAAoB,EAAE,IAA0B,EAAE,IAA2B;IAC3F,KAAK,GAAG,CAAC,QAAQ,CAAC,yBAAc,EAAE;QAChC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACjC,QAAQ,EAAE,IAAI;QACd,mBAAmB,EAAE,IAAI;QACzB,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;KAChC,CAAC,CAAA;IACF,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAA,iBAAO,EAAC;YACzB,MAAM,EAAE,IAAI,CAAC,aAAa;YAC1B,qBAAqB,EAAE,IAAI,CAAC,+BAA+B,IAAI,IAAI;SACpE,CAAC,CAAA;QAEF,UAAU,CAAC,KAAK,CAAC;YACf,GAAG,EAAE,UAAU;YACf,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE;gBACN,kCAAkC;gBAClC,mBAAmB;gBACnB,IAAI,EAAE,IAAI;aACX;YACD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE;gBAC1B,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;gBAC3D,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC/C,CAAC;SACF,CAAC,CAAA;QAEF,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAChC,MAAM,UAAU,CAAC,KAAK,EAAE,CAAA;QAC1B,CAAC,CAAC,CAAA;QAEF,UAAU;aACP,MAAM,CAAC;YACN,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,IAAI,CAAC,WAAW;YACtB,kBAAkB,EAAE,CAAC,OAAO,EAAE,EAAE;gBAC9B,OAAO,0CAA0C,OAAO,EAAE,CAAA;YAC5D,CAAC;SACF,CAAC;aACD,IAAI,CAAC,GAAG,EAAE;YACT,IAAI,EAAE,CAAA;QACR,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACb,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAA;YAC/C,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YAC/B,IAAI,CAAC,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC,CAAA;QACxE,CAAC,CAAC,CAAA;IACN,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,GAAY,CAAC,CAAA;IACpB,CAAC;AACH,CAAC;AAEY,QAAA,aAAa,GAAG,IAAA,wBAAE,EAAC,MAAM,EAAE;IACtC,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,gBAAgB;CACvB,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lokalise/fastify-extras",
3
- "version": "17.0.2",
3
+ "version": "17.1.0",
4
4
  "description": "Opinionated set of fastify plugins, commonly used in Lokalise",
5
5
  "author": {
6
6
  "name": "Lokalise",
@@ -43,7 +43,7 @@
43
43
  },
44
44
  "dependencies": {
45
45
  "@bugsnag/js": "^7.22.4",
46
- "@lokalise/error-utils": "^1.0.1",
46
+ "@lokalise/error-utils": "^1.1.0",
47
47
  "@opentelemetry/api": "1.8.0",
48
48
  "@opentelemetry/exporter-trace-otlp-grpc": "~0.49.1",
49
49
  "@opentelemetry/instrumentation": "~0.49.1",
@@ -81,9 +81,9 @@
81
81
  "eslint-plugin-import": "^2.29.1",
82
82
  "eslint-plugin-vitest": "^0.3.20",
83
83
  "fastify": "^4.25.2",
84
- "newrelic": "11.10.1",
84
+ "newrelic": "11.15.0",
85
85
  "pino": "^8.17.2",
86
- "pino-pretty": "^10.3.1",
86
+ "pino-pretty": "^11.0.0",
87
87
  "prettier": "^3.2.5",
88
88
  "shx": "^0.3.4",
89
89
  "ts-node": "^10.9.1",
@@ -1 +0,0 @@
1
- {"version":3,"file":"amplitudePlugin.js","sourceRoot":"","sources":["../../lib/plugins/amplitudePlugin.ts"],"names":[],"mappings":";;;;AAAA,8DAA4D;AAc5D,4EAA+B;AAQ/B,SAAS,MAAM,CAAC,OAAwB,EAAE,MAAuB,EAAE,IAA2B;IAC5F,MAAM,iBAAiB,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IACzD,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAA;IAEhD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,IAAI,EAAE,CAAA;IACf,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAA;IACjD,CAAC;IAED,IAAA,qBAAI,EAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC;SAChC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;QACjB,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5B,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAA;QAC7E,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,mBAAmB;YACnB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,oBAAG,EAAC,CAAC,CAAC,CAAC,CAAA;QACvC,CAAC;QAED,IAAI,EAAE,CAAA;IACR,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACb,IAAI,CAAC,GAAY,CAAC,CAAA;IACpB,CAAC,CAAC,CAAA;AACN,CAAC;AAED,SAAS,sBAAsB,CAC7B,OAAwB,EACxB,SAAoB,EACpB,eAAyC;IAEzC,OAAO,CAAC,OAAO,CACb,YAAY,EACZ,CAAC,GAAmB,EAAE,GAAiB,EAAE,IAA6B,EAAE,EAAE;QACxE,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QACvC,IAAI,KAAK,EAAE,CAAC;YACV,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC;QACD,OAAO,IAAI,EAAE,CAAA;IACf,CAAC,CACF,CAAA;AACH,CAAC;AAqCD;;;;;;;;;;;;;GAaG;AACU,QAAA,eAAe,GAAG,IAAA,wBAAE,EAAkB,MAAM,EAAE;IACzD,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,kBAAkB;CACzB,CAAC,CAAA;AAEF,MAAa,SAAS;IACH,SAAS,CAAS;IAEnC,YAAY,SAAkB;QAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,KAAgB;QAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAA,sBAAK,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAA;IAC3E,CAAC;CACF;AAjBD,8BAiBC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"amplitudePlugin.spec.js","sourceRoot":"","sources":["../../lib/plugins/amplitudePlugin.spec.ts"],"names":[],"mappings":"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"}