@mondaydotcomorg/monday-authorization 3.3.1-fix-use-standard-env-var-for-metric-server-host-7ed2241 → 3.3.1-fix-use-standard-env-var-for-metric-server-host-bd2a88a

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
@@ -39,7 +39,9 @@ startServer(...)
39
39
  **Recommended** - optionally init authorization with redisClient so the granted feature results will be cached and reduce http calls.
40
40
 
41
41
  - grantedFeatureRedisExpirationInSeconds - (optional), redis TTL for cached granted features, default set to 5 minutes
42
- - metrics - (optional), configure internal DataDog/observability integration. Defaults to `process.env.APP_NAME` as the service name, uses the standard StatsD endpoint (`localhost:8125`) when host/port are not provided, and disables emission automatically in test/development environments (override with `disabled`).
42
+ - metrics - (optional), configure internal DataDog/observability integration. Provide either:
43
+ - `metrics.client` with a pre-initialized StatsD client that exposes `distribution` and `increment`.
44
+ - Or the config fields (`serviceName`, `host`, `port`, `disabled`) to let the SDK initialize `@mondaydotcomorg/monday-observability-kit` for you. Defaults to `process.env.APP_NAME` as the service name, uses the standard StatsD endpoint (`localhost:8125`) when host/port are not provided, and disables emission automatically in test/development environments (override with `disabled`).
43
45
 
44
46
  ### Metrics & Observability
45
47
 
@@ -48,7 +50,7 @@ startServer(...)
48
50
  - `authorization.authorizationCheck.platform.duration` / `.graph.duration` (distributions per API path)
49
51
  - `authorization.authorizationCheck.platform.error` / `.graph.error` counters (with `statusCode` tag)
50
52
  - When `metrics.disabled` is omitted, the SDK automatically disables StatsD in `test`/`development` environments.
51
- - StatsD requires `HOST_IP` / `DOGSTATSD_PORT` (or the defaults `localhost:8125`). Errors are logged and skipped if the client is unavailable.
53
+ - StatsD requires `DOGSTATSD_HOST` / `DOGSTATSD_PORT` (or the defaults `localhost:8125`). Errors are logged and skipped if the client is unavailable.
52
54
 
53
55
  ## Usage
54
56
 
@@ -1,16 +1,19 @@
1
1
  import { MondayFetchOptions } from '@mondaydotcomorg/monday-fetch';
2
+ import { MetricsClient } from './metrics-service';
2
3
  import * as TestKit from './testKit';
4
+ interface MetricsInitOptions {
5
+ client?: MetricsClient;
6
+ serviceName?: string;
7
+ host?: string;
8
+ port?: number;
9
+ disabled?: boolean;
10
+ }
3
11
  export interface InitOptions {
4
12
  prometheus?: any;
5
13
  mondayFetchOptions?: MondayFetchOptions;
6
14
  redisClient?: any;
7
15
  grantedFeatureRedisExpirationInSeconds?: number;
8
- metrics?: {
9
- serviceName?: string;
10
- host?: string;
11
- port?: number;
12
- disabled?: boolean;
13
- };
16
+ metrics?: MetricsInitOptions;
14
17
  }
15
18
  export declare function init(options?: InitOptions): Promise<void>;
16
19
  export { authorizationCheckMiddleware, getAuthorizationMiddleware, skipAuthorizationMiddleware, } from './authorization-middleware';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAInE,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AAErC,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,sCAAsC,CAAC,EAAE,MAAM,CAAC;IAChD,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAED,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,iBAuBnD;AAED,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,8BAA8B,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC5G,OAAO,EACL,WAAW,EACX,YAAY,EACZ,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAErH,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,OAAO,EAAqB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AAErC,UAAU,kBAAkB;IAC1B,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,sCAAsC,CAAC,EAAE,MAAM,CAAC;IAChD,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,iBA6BnD;AAED,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,8BAA8B,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC5G,OAAO,EACL,WAAW,EACX,YAAY,EACZ,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAErH,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -13,13 +13,20 @@ async function init(options = {}) {
13
13
  if (options.prometheus) {
14
14
  setPrometheus(options.prometheus);
15
15
  }
16
- const resolvedDisabled = options.metrics?.disabled ?? ['test', 'development'].includes((process.env.NODE_ENV ?? '').toLowerCase());
17
- initializeMetrics({
18
- serviceName: options.metrics?.serviceName ?? process.env.APP_NAME ?? 'authorization-sdk',
19
- host: options.metrics?.host,
20
- port: options.metrics?.port,
21
- disabled: resolvedDisabled,
22
- });
16
+ if (options.metrics) {
17
+ if (options.metrics.client) {
18
+ initializeMetrics({ client: options.metrics.client });
19
+ }
20
+ else {
21
+ const resolvedDisabled = options.metrics.disabled ?? ['test', 'development'].includes((process.env.NODE_ENV ?? '').toLowerCase());
22
+ initializeMetrics({
23
+ serviceName: options.metrics.serviceName ?? process.env.APP_NAME ?? 'authorization-sdk',
24
+ host: options.metrics.host,
25
+ port: options.metrics.port,
26
+ disabled: resolvedDisabled,
27
+ });
28
+ }
29
+ }
23
30
  if (options.mondayFetchOptions) {
24
31
  setRequestFetchOptions(options.mondayFetchOptions);
25
32
  }
@@ -1,6 +1,9 @@
1
+ import { Metric } from '@mondaydotcomorg/monday-observability-kit';
1
2
  type ApiType = 'platform' | 'graph';
3
+ export type MetricsClient = Pick<typeof Metric, 'distribution' | 'increment'>;
2
4
  interface InitializeMetricsOptions {
3
- serviceName: string;
5
+ client?: MetricsClient;
6
+ serviceName?: string;
4
7
  host?: string;
5
8
  port?: number;
6
9
  disabled?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"metrics-service.d.ts","sourceRoot":"","sources":["../../src/metrics-service.ts"],"names":[],"mappings":"AAGA,KAAK,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;AAEpC,UAAU,wBAAwB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAID,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CA4BzE;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAUlF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAUnF"}
1
+ {"version":3,"file":"metrics-service.d.ts","sourceRoot":"","sources":["../../src/metrics-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGnE,KAAK,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;AAEpC,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,MAAM,EAAE,cAAc,GAAG,WAAW,CAAC,CAAC;AAE9E,UAAU,wBAAwB;IAChC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAID,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAiCzE;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAmBlF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAmBnF"}
@@ -1,14 +1,18 @@
1
1
  import { Metric } from '@mondaydotcomorg/monday-observability-kit';
2
2
  import { logger } from './authorization-internal-service.mjs';
3
3
 
4
- let initialized = false;
4
+ let metricsClient = null;
5
5
  function initializeMetrics(options) {
6
- if (initialized) {
6
+ if (metricsClient) {
7
+ return;
8
+ }
9
+ if (options.client) {
10
+ metricsClient = options.client;
7
11
  return;
8
12
  }
9
13
  const { serviceName } = options;
10
14
  if (!serviceName) {
11
- logger.warn({ tag: 'metrics-service' }, 'Metrics initialization skipped: serviceName is missing');
15
+ logger.warn({ tag: 'monday-authorization-sdk' }, 'Metrics initialization skipped: serviceName is missing');
12
16
  return;
13
17
  }
14
18
  const resolvedHost = options.host ?? process.env.HOST_IP ?? 'localhost';
@@ -22,32 +26,44 @@ function initializeMetrics(options) {
22
26
  port: resolvedPort,
23
27
  disabled: resolvedDisabled,
24
28
  });
25
- initialized = true;
29
+ metricsClient = Metric;
26
30
  }
27
31
  catch (error) {
28
- logger.warn({ tag: 'metrics-service', error }, 'Failed to initialize metrics');
32
+ logger.warn({ tag: 'monday-authorization-sdk', error }, 'Failed to initialize metrics');
29
33
  }
30
34
  }
31
35
  function recordAuthorizationTiming(apiType, duration) {
32
- if (!initialized) {
36
+ if (!metricsClient) {
33
37
  return;
34
38
  }
35
39
  try {
36
- Metric.distribution(`authorization.authorizationCheck.${apiType}.duration`, duration);
40
+ metricsClient.distribution(`authorization.authorizationCheck.${apiType}.duration`, duration);
37
41
  }
38
- catch {
39
- // ignore metric emission failures
42
+ catch (error) {
43
+ logger.warn({
44
+ tag: 'monday-authorization-sdk',
45
+ metric: 'authorizationCheckDuration',
46
+ apiType,
47
+ duration,
48
+ error,
49
+ }, 'Failed to emit authorization timing metric');
40
50
  }
41
51
  }
42
52
  function recordAuthorizationError(apiType, statusCode) {
43
- if (!initialized) {
53
+ if (!metricsClient) {
44
54
  return;
45
55
  }
46
56
  try {
47
- Metric.increment(`authorization.authorizationCheck.${apiType}.error`, { statusCode: String(statusCode) }, 1);
57
+ metricsClient.increment(`authorization.authorizationCheck.${apiType}.error`, { statusCode: String(statusCode) }, 1);
48
58
  }
49
- catch {
50
- // ignore metric emission failures
59
+ catch (error) {
60
+ logger.warn({
61
+ tag: 'monday-authorization-sdk',
62
+ metric: 'authorizationCheckError',
63
+ apiType,
64
+ statusCode,
65
+ error,
66
+ }, 'Failed to emit authorization error metric');
51
67
  }
52
68
  }
53
69
 
package/dist/index.d.ts CHANGED
@@ -1,16 +1,19 @@
1
1
  import { MondayFetchOptions } from '@mondaydotcomorg/monday-fetch';
2
+ import { MetricsClient } from './metrics-service';
2
3
  import * as TestKit from './testKit';
4
+ interface MetricsInitOptions {
5
+ client?: MetricsClient;
6
+ serviceName?: string;
7
+ host?: string;
8
+ port?: number;
9
+ disabled?: boolean;
10
+ }
3
11
  export interface InitOptions {
4
12
  prometheus?: any;
5
13
  mondayFetchOptions?: MondayFetchOptions;
6
14
  redisClient?: any;
7
15
  grantedFeatureRedisExpirationInSeconds?: number;
8
- metrics?: {
9
- serviceName?: string;
10
- host?: string;
11
- port?: number;
12
- disabled?: boolean;
13
- };
16
+ metrics?: MetricsInitOptions;
14
17
  }
15
18
  export declare function init(options?: InitOptions): Promise<void>;
16
19
  export { authorizationCheckMiddleware, getAuthorizationMiddleware, skipAuthorizationMiddleware, } from './authorization-middleware';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAInE,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AAErC,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,sCAAsC,CAAC,EAAE,MAAM,CAAC;IAChD,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAED,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,iBAuBnD;AAED,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,8BAA8B,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC5G,OAAO,EACL,WAAW,EACX,YAAY,EACZ,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAErH,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,OAAO,EAAqB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AAErC,UAAU,kBAAkB;IAC1B,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,sCAAsC,CAAC,EAAE,MAAM,CAAC;IAChD,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,iBA6BnD;AAED,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,8BAA8B,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC5G,OAAO,EACL,WAAW,EACX,YAAY,EACZ,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAErH,OAAO,EAAE,OAAO,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -13,13 +13,20 @@ async function init(options = {}) {
13
13
  if (options.prometheus) {
14
14
  prometheusService.setPrometheus(options.prometheus);
15
15
  }
16
- const resolvedDisabled = options.metrics?.disabled ?? ['test', 'development'].includes((process.env.NODE_ENV ?? '').toLowerCase());
17
- metricsService.initializeMetrics({
18
- serviceName: options.metrics?.serviceName ?? process.env.APP_NAME ?? 'authorization-sdk',
19
- host: options.metrics?.host,
20
- port: options.metrics?.port,
21
- disabled: resolvedDisabled,
22
- });
16
+ if (options.metrics) {
17
+ if (options.metrics.client) {
18
+ metricsService.initializeMetrics({ client: options.metrics.client });
19
+ }
20
+ else {
21
+ const resolvedDisabled = options.metrics.disabled ?? ['test', 'development'].includes((process.env.NODE_ENV ?? '').toLowerCase());
22
+ metricsService.initializeMetrics({
23
+ serviceName: options.metrics.serviceName ?? process.env.APP_NAME ?? 'authorization-sdk',
24
+ host: options.metrics.host,
25
+ port: options.metrics.port,
26
+ disabled: resolvedDisabled,
27
+ });
28
+ }
29
+ }
23
30
  if (options.mondayFetchOptions) {
24
31
  authorizationService.setRequestFetchOptions(options.mondayFetchOptions);
25
32
  }
@@ -1,6 +1,9 @@
1
+ import { Metric } from '@mondaydotcomorg/monday-observability-kit';
1
2
  type ApiType = 'platform' | 'graph';
3
+ export type MetricsClient = Pick<typeof Metric, 'distribution' | 'increment'>;
2
4
  interface InitializeMetricsOptions {
3
- serviceName: string;
5
+ client?: MetricsClient;
6
+ serviceName?: string;
4
7
  host?: string;
5
8
  port?: number;
6
9
  disabled?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"metrics-service.d.ts","sourceRoot":"","sources":["../src/metrics-service.ts"],"names":[],"mappings":"AAGA,KAAK,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;AAEpC,UAAU,wBAAwB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAID,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CA4BzE;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAUlF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAUnF"}
1
+ {"version":3,"file":"metrics-service.d.ts","sourceRoot":"","sources":["../src/metrics-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGnE,KAAK,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;AAEpC,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,MAAM,EAAE,cAAc,GAAG,WAAW,CAAC,CAAC;AAE9E,UAAU,wBAAwB;IAChC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAID,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAiCzE;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAmBlF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAmBnF"}
@@ -3,14 +3,18 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
3
3
  const mondayObservabilityKit = require('@mondaydotcomorg/monday-observability-kit');
4
4
  const authorizationInternalService = require('./authorization-internal-service.js');
5
5
 
6
- let initialized = false;
6
+ let metricsClient = null;
7
7
  function initializeMetrics(options) {
8
- if (initialized) {
8
+ if (metricsClient) {
9
+ return;
10
+ }
11
+ if (options.client) {
12
+ metricsClient = options.client;
9
13
  return;
10
14
  }
11
15
  const { serviceName } = options;
12
16
  if (!serviceName) {
13
- authorizationInternalService.logger.warn({ tag: 'metrics-service' }, 'Metrics initialization skipped: serviceName is missing');
17
+ authorizationInternalService.logger.warn({ tag: 'monday-authorization-sdk' }, 'Metrics initialization skipped: serviceName is missing');
14
18
  return;
15
19
  }
16
20
  const resolvedHost = options.host ?? process.env.HOST_IP ?? 'localhost';
@@ -24,32 +28,44 @@ function initializeMetrics(options) {
24
28
  port: resolvedPort,
25
29
  disabled: resolvedDisabled,
26
30
  });
27
- initialized = true;
31
+ metricsClient = mondayObservabilityKit.Metric;
28
32
  }
29
33
  catch (error) {
30
- authorizationInternalService.logger.warn({ tag: 'metrics-service', error }, 'Failed to initialize metrics');
34
+ authorizationInternalService.logger.warn({ tag: 'monday-authorization-sdk', error }, 'Failed to initialize metrics');
31
35
  }
32
36
  }
33
37
  function recordAuthorizationTiming(apiType, duration) {
34
- if (!initialized) {
38
+ if (!metricsClient) {
35
39
  return;
36
40
  }
37
41
  try {
38
- mondayObservabilityKit.Metric.distribution(`authorization.authorizationCheck.${apiType}.duration`, duration);
42
+ metricsClient.distribution(`authorization.authorizationCheck.${apiType}.duration`, duration);
39
43
  }
40
- catch {
41
- // ignore metric emission failures
44
+ catch (error) {
45
+ authorizationInternalService.logger.warn({
46
+ tag: 'monday-authorization-sdk',
47
+ metric: 'authorizationCheckDuration',
48
+ apiType,
49
+ duration,
50
+ error,
51
+ }, 'Failed to emit authorization timing metric');
42
52
  }
43
53
  }
44
54
  function recordAuthorizationError(apiType, statusCode) {
45
- if (!initialized) {
55
+ if (!metricsClient) {
46
56
  return;
47
57
  }
48
58
  try {
49
- mondayObservabilityKit.Metric.increment(`authorization.authorizationCheck.${apiType}.error`, { statusCode: String(statusCode) }, 1);
59
+ metricsClient.increment(`authorization.authorizationCheck.${apiType}.error`, { statusCode: String(statusCode) }, 1);
50
60
  }
51
- catch {
52
- // ignore metric emission failures
61
+ catch (error) {
62
+ authorizationInternalService.logger.warn({
63
+ tag: 'monday-authorization-sdk',
64
+ metric: 'authorizationCheckError',
65
+ apiType,
66
+ statusCode,
67
+ error,
68
+ }, 'Failed to emit authorization error metric');
53
69
  }
54
70
  }
55
71
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mondaydotcomorg/monday-authorization",
3
- "version": "3.3.1-fix-use-standard-env-var-for-metric-server-host-7ed2241",
3
+ "version": "3.3.1-fix-use-standard-env-var-for-metric-server-host-bd2a88a",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "BSD-3-Clause",
package/src/index.ts CHANGED
@@ -1,20 +1,23 @@
1
1
  import { MondayFetchOptions } from '@mondaydotcomorg/monday-fetch';
2
2
  import { setPrometheus } from './prometheus-service';
3
3
  import { setIgniteClient, setRedisClient, setRequestFetchOptions } from './authorization-service';
4
- import { initializeMetrics } from './metrics-service';
4
+ import { initializeMetrics, MetricsClient } from './metrics-service';
5
5
  import * as TestKit from './testKit';
6
6
 
7
+ interface MetricsInitOptions {
8
+ client?: MetricsClient;
9
+ serviceName?: string;
10
+ host?: string;
11
+ port?: number;
12
+ disabled?: boolean;
13
+ }
14
+
7
15
  export interface InitOptions {
8
16
  prometheus?: any;
9
17
  mondayFetchOptions?: MondayFetchOptions;
10
18
  redisClient?: any;
11
19
  grantedFeatureRedisExpirationInSeconds?: number;
12
- metrics?: {
13
- serviceName?: string;
14
- host?: string;
15
- port?: number;
16
- disabled?: boolean;
17
- };
20
+ metrics?: MetricsInitOptions;
18
21
  }
19
22
 
20
23
  export async function init(options: InitOptions = {}) {
@@ -22,14 +25,20 @@ export async function init(options: InitOptions = {}) {
22
25
  setPrometheus(options.prometheus);
23
26
  }
24
27
 
25
- const resolvedDisabled =
26
- options.metrics?.disabled ?? ['test', 'development'].includes((process.env.NODE_ENV ?? '').toLowerCase());
27
- initializeMetrics({
28
- serviceName: options.metrics?.serviceName ?? process.env.APP_NAME ?? 'authorization-sdk',
29
- host: options.metrics?.host,
30
- port: options.metrics?.port,
31
- disabled: resolvedDisabled,
32
- });
28
+ if (options.metrics) {
29
+ if (options.metrics.client) {
30
+ initializeMetrics({ client: options.metrics.client });
31
+ } else {
32
+ const resolvedDisabled =
33
+ options.metrics.disabled ?? ['test', 'development'].includes((process.env.NODE_ENV ?? '').toLowerCase());
34
+ initializeMetrics({
35
+ serviceName: options.metrics.serviceName ?? process.env.APP_NAME ?? 'authorization-sdk',
36
+ host: options.metrics.host,
37
+ port: options.metrics.port,
38
+ disabled: resolvedDisabled,
39
+ });
40
+ }
41
+ }
33
42
 
34
43
  if (options.mondayFetchOptions) {
35
44
  setRequestFetchOptions(options.mondayFetchOptions);
@@ -3,23 +3,31 @@ import { logger } from './authorization-internal-service';
3
3
 
4
4
  type ApiType = 'platform' | 'graph';
5
5
 
6
+ export type MetricsClient = Pick<typeof Metric, 'distribution' | 'increment'>;
7
+
6
8
  interface InitializeMetricsOptions {
7
- serviceName: string;
9
+ client?: MetricsClient;
10
+ serviceName?: string;
8
11
  host?: string;
9
12
  port?: number;
10
13
  disabled?: boolean;
11
14
  }
12
15
 
13
- let initialized = false;
16
+ let metricsClient: MetricsClient | null = null;
14
17
 
15
18
  export function initializeMetrics(options: InitializeMetricsOptions): void {
16
- if (initialized) {
19
+ if (metricsClient) {
20
+ return;
21
+ }
22
+
23
+ if (options.client) {
24
+ metricsClient = options.client;
17
25
  return;
18
26
  }
19
27
 
20
28
  const { serviceName } = options;
21
29
  if (!serviceName) {
22
- logger.warn({ tag: 'metrics-service' }, 'Metrics initialization skipped: serviceName is missing');
30
+ logger.warn({ tag: 'monday-authorization-sdk' }, 'Metrics initialization skipped: serviceName is missing');
23
31
  return;
24
32
  }
25
33
 
@@ -36,32 +44,50 @@ export function initializeMetrics(options: InitializeMetricsOptions): void {
36
44
  port: resolvedPort,
37
45
  disabled: resolvedDisabled,
38
46
  });
39
- initialized = true;
47
+ metricsClient = Metric;
40
48
  } catch (error) {
41
- logger.warn({ tag: 'metrics-service', error }, 'Failed to initialize metrics');
49
+ logger.warn({ tag: 'monday-authorization-sdk', error }, 'Failed to initialize metrics');
42
50
  }
43
51
  }
44
52
 
45
53
  export function recordAuthorizationTiming(apiType: ApiType, duration: number): void {
46
- if (!initialized) {
54
+ if (!metricsClient) {
47
55
  return;
48
56
  }
49
57
 
50
58
  try {
51
- Metric.distribution(`authorization.authorizationCheck.${apiType}.duration`, duration);
52
- } catch {
53
- // ignore metric emission failures
59
+ metricsClient.distribution(`authorization.authorizationCheck.${apiType}.duration`, duration);
60
+ } catch (error) {
61
+ logger.warn(
62
+ {
63
+ tag: 'monday-authorization-sdk',
64
+ metric: 'authorizationCheckDuration',
65
+ apiType,
66
+ duration,
67
+ error,
68
+ },
69
+ 'Failed to emit authorization timing metric'
70
+ );
54
71
  }
55
72
  }
56
73
 
57
74
  export function recordAuthorizationError(apiType: ApiType, statusCode: number): void {
58
- if (!initialized) {
75
+ if (!metricsClient) {
59
76
  return;
60
77
  }
61
78
 
62
79
  try {
63
- Metric.increment(`authorization.authorizationCheck.${apiType}.error`, { statusCode: String(statusCode) }, 1);
64
- } catch {
65
- // ignore metric emission failures
80
+ metricsClient.increment(`authorization.authorizationCheck.${apiType}.error`, { statusCode: String(statusCode) }, 1);
81
+ } catch (error) {
82
+ logger.warn(
83
+ {
84
+ tag: 'monday-authorization-sdk',
85
+ metric: 'authorizationCheckError',
86
+ apiType,
87
+ statusCode,
88
+ error,
89
+ },
90
+ 'Failed to emit authorization error metric'
91
+ );
66
92
  }
67
93
  }