@mondaydotcomorg/monday-authorization 3.3.0-feature-bashanye-navigate-can-action-in-scope-to-graph-46d4fc5 → 3.3.0-feature-bashanye-navigate-can-action-in-scope-to-graph-7ce3f8a

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 (37) hide show
  1. package/dist/authorization-service.d.ts +0 -8
  2. package/dist/authorization-service.d.ts.map +1 -1
  3. package/dist/authorization-service.js +12 -160
  4. package/dist/clients/graph-api.client.d.ts +24 -0
  5. package/dist/clients/graph-api.client.d.ts.map +1 -0
  6. package/dist/clients/graph-api.client.js +102 -0
  7. package/dist/clients/platform-api.client.d.ts +31 -0
  8. package/dist/clients/platform-api.client.d.ts.map +1 -0
  9. package/dist/clients/platform-api.client.js +86 -0
  10. package/dist/esm/authorization-service.d.ts +0 -8
  11. package/dist/esm/authorization-service.d.ts.map +1 -1
  12. package/dist/esm/authorization-service.mjs +13 -155
  13. package/dist/esm/clients/graph-api.client.d.ts +24 -0
  14. package/dist/esm/clients/graph-api.client.d.ts.map +1 -0
  15. package/dist/esm/clients/graph-api.client.mjs +100 -0
  16. package/dist/esm/clients/platform-api.client.d.ts +31 -0
  17. package/dist/esm/clients/platform-api.client.d.ts.map +1 -0
  18. package/dist/esm/clients/platform-api.client.mjs +84 -0
  19. package/dist/esm/prometheus-service.d.ts +3 -3
  20. package/dist/esm/prometheus-service.d.ts.map +1 -1
  21. package/dist/esm/prometheus-service.mjs +65 -3
  22. package/dist/esm/types/graph-api.types.d.ts +11 -0
  23. package/dist/esm/types/graph-api.types.d.ts.map +1 -0
  24. package/dist/esm/types/graph-api.types.mjs +1 -0
  25. package/dist/esm/utils/authorization.utils.d.ts +22 -0
  26. package/dist/esm/utils/authorization.utils.d.ts.map +1 -0
  27. package/dist/esm/utils/authorization.utils.mjs +39 -0
  28. package/dist/prometheus-service.d.ts +3 -3
  29. package/dist/prometheus-service.d.ts.map +1 -1
  30. package/dist/prometheus-service.js +65 -3
  31. package/dist/types/graph-api.types.d.ts +11 -0
  32. package/dist/types/graph-api.types.d.ts.map +1 -0
  33. package/dist/types/graph-api.types.js +1 -0
  34. package/dist/utils/authorization.utils.d.ts +22 -0
  35. package/dist/utils/authorization.utils.d.ts.map +1 -0
  36. package/dist/utils/authorization.utils.js +49 -0
  37. package/package.json +1 -1
@@ -7,7 +7,7 @@ export declare const METRICS: {
7
7
  export declare function setPrometheus(customPrometheus: any): void;
8
8
  export declare function getMetricsManager(): any;
9
9
  export declare function sendAuthorizationCheckResponseTimeMetric(resourceType: string, action: Action, isAuthorized: boolean, responseStatus: number, time: number, apiType?: 'platform' | 'graph'): void;
10
- export declare function incrementAuthorizationSuccess(_resourceType: string, _action: Action): void;
11
- export declare function incrementAuthorizationError(_resourceType: string, _action: Action, _statusCode: number): void;
12
- export declare function setGraphAvailability(_isAvailable: boolean): void;
10
+ export declare function incrementAuthorizationSuccess(resourceType: string, action: Action): void;
11
+ export declare function incrementAuthorizationError(resourceType: string, action: Action, statusCode: number): void;
12
+ export declare function setGraphAvailability(isAvailable: boolean): void;
13
13
  //# sourceMappingURL=prometheus-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prometheus-service.d.ts","sourceRoot":"","sources":["../src/prometheus-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAKzC,eAAO,MAAM,OAAO;;;;CAInB,CAAC;AAQF,wBAAgB,aAAa,CAAC,gBAAgB,KAAA,QAiB7C;AAED,wBAAgB,iBAAiB,QAEhC;AAED,wBAAgB,wCAAwC,CACtD,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,OAAO,EACrB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,UAAU,GAAG,OAAoB,QAW3C;AAED,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAAI;AAExF,wBAAgB,2BAA2B,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,QAAI;AAE3G,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,OAAO,QAAI"}
1
+ {"version":3,"file":"prometheus-service.d.ts","sourceRoot":"","sources":["../src/prometheus-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAQzC,eAAO,MAAM,OAAO;;;;CAInB,CAAC;AAQF,wBAAgB,aAAa,CAAC,gBAAgB,KAAA,QAsB7C;AAED,wBAAgB,iBAAiB,QAEhC;AAED,wBAAgB,wCAAwC,CACtD,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,OAAO,EACrB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,UAAU,GAAG,OAAoB,QAW3C;AAoBD,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAQjF;AAED,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAQnG;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,OAAO,QAQxD"}
@@ -2,6 +2,9 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
3
  let prometheus = null;
4
4
  let authorizationCheckResponseTimeMetric = null;
5
+ let authorizationSuccessMetric = null;
6
+ let authorizationErrorMetric = null;
7
+ let graphAvailabilityMetric = null;
5
8
  const METRICS = {
6
9
  AUTHORIZATION_CHECK: 'authorization_check',
7
10
  AUTHORIZATION_CHECKS_PER_REQUEST: 'authorization_checks_per_request',
@@ -16,12 +19,16 @@ function setPrometheus(customPrometheus) {
16
19
  prometheus = customPrometheus;
17
20
  if (!prometheus) {
18
21
  authorizationCheckResponseTimeMetric = null;
22
+ authorizationSuccessMetric = null;
23
+ authorizationErrorMetric = null;
24
+ graphAvailabilityMetric = null;
19
25
  return;
20
26
  }
21
27
  const { METRICS_TYPES } = prometheus;
22
28
  const metricsManager = getMetricsManager();
23
29
  if (metricsManager) {
24
30
  authorizationCheckResponseTimeMetric = metricsManager.addMetric(METRICS_TYPES.SUMMARY, authorizationCheckResponseTimeMetricConfig.name, authorizationCheckResponseTimeMetricConfig.labels, authorizationCheckResponseTimeMetricConfig.description);
31
+ initializeAdditionalMetrics();
25
32
  }
26
33
  }
27
34
  function getMetricsManager() {
@@ -39,9 +46,64 @@ function sendAuthorizationCheckResponseTimeMetric(resourceType, action, isAuthor
39
46
  // ignore
40
47
  }
41
48
  }
42
- function incrementAuthorizationSuccess(_resourceType, _action) { }
43
- function incrementAuthorizationError(_resourceType, _action, _statusCode) { }
44
- function setGraphAvailability(_isAvailable) { }
49
+ const authorizationSuccessMetricConfig = {
50
+ name: 'authorization_success_total',
51
+ labels: ['resourceType', 'action'],
52
+ description: 'Total number of successful authorization checks',
53
+ };
54
+ const authorizationErrorMetricConfig = {
55
+ name: 'authorization_error_total',
56
+ labels: ['resourceType', 'action', 'statusCode'],
57
+ description: 'Total number of authorization errors',
58
+ };
59
+ const graphAvailabilityMetricConfig = {
60
+ name: 'graph_api_availability',
61
+ labels: ['available'],
62
+ description: 'Graph API availability status',
63
+ };
64
+ function incrementAuthorizationSuccess(resourceType, action) {
65
+ try {
66
+ if (authorizationSuccessMetric) {
67
+ authorizationSuccessMetric.labels(resourceType, action).inc();
68
+ }
69
+ }
70
+ catch (e) {
71
+ // ignore
72
+ }
73
+ }
74
+ function incrementAuthorizationError(resourceType, action, statusCode) {
75
+ try {
76
+ if (authorizationErrorMetric) {
77
+ authorizationErrorMetric.labels(resourceType, action, statusCode).inc();
78
+ }
79
+ }
80
+ catch (e) {
81
+ // ignore
82
+ }
83
+ }
84
+ function setGraphAvailability(isAvailable) {
85
+ try {
86
+ if (graphAvailabilityMetric) {
87
+ graphAvailabilityMetric.labels(isAvailable ? 'true' : 'false').set(isAvailable ? 1 : 0);
88
+ }
89
+ }
90
+ catch (e) {
91
+ // ignore
92
+ }
93
+ }
94
+ // Initialize additional metrics when prometheus is set
95
+ function initializeAdditionalMetrics() {
96
+ if (!prometheus) {
97
+ return;
98
+ }
99
+ const { METRICS_TYPES } = prometheus;
100
+ const metricsManager = getMetricsManager();
101
+ if (metricsManager) {
102
+ authorizationSuccessMetric = metricsManager.addMetric(METRICS_TYPES.COUNTER, authorizationSuccessMetricConfig.name, authorizationSuccessMetricConfig.labels, authorizationSuccessMetricConfig.description);
103
+ authorizationErrorMetric = metricsManager.addMetric(METRICS_TYPES.COUNTER, authorizationErrorMetricConfig.name, authorizationErrorMetricConfig.labels, authorizationErrorMetricConfig.description);
104
+ graphAvailabilityMetric = metricsManager.addMetric(METRICS_TYPES.GAUGE, graphAvailabilityMetricConfig.name, graphAvailabilityMetricConfig.labels, graphAvailabilityMetricConfig.description);
105
+ }
106
+ }
45
107
 
46
108
  exports.METRICS = METRICS;
47
109
  exports.getMetricsManager = getMetricsManager;
@@ -0,0 +1,11 @@
1
+ export type ResourceType = string;
2
+ export type ResourceId = number;
3
+ export type ActionName = string;
4
+ export type GraphIsAllowedDto = Record<ResourceType, Record<ResourceId, ActionName[]>>;
5
+ export type GraphPermissionResult = {
6
+ can: boolean;
7
+ reason: string;
8
+ };
9
+ export type GraphPermissionResults = Record<ActionName, GraphPermissionResult>;
10
+ export type GraphIsAllowedResponse = Record<ResourceType, Record<string, GraphPermissionResults>>;
11
+ //# sourceMappingURL=graph-api.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-api.types.d.ts","sourceRoot":"","sources":["../../src/types/graph-api.types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAClC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAChC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;AAEvF,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;AAI/E,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,22 @@
1
+ import { ScopeOptions } from '../types/scoped-actions-contracts';
2
+ import { ResourceType, ResourceId } from '../types/graph-api.types';
3
+ export type CamelCase<S extends string> = S extends `${infer F}_${infer R}` ? `${F}${Capitalize<CamelCase<R>>}` : S;
4
+ export type CamelCaseKeys<T> = T extends object ? {
5
+ [K in keyof T as K extends string ? CamelCase<K> : K]: CamelCaseKeys<T[K]>;
6
+ } : T;
7
+ /**
8
+ * Converts a scope object to resource type and resource ID
9
+ */
10
+ export declare function scopeToResource(scope: ScopeOptions): {
11
+ resourceType: ResourceType;
12
+ resourceId: ResourceId;
13
+ };
14
+ /**
15
+ * Converts object keys from snake_case to camelCase
16
+ */
17
+ export declare function toCamelCase<T extends object>(obj: T): CamelCaseKeys<T>;
18
+ /**
19
+ * Converts object keys from camelCase to snake_case
20
+ */
21
+ export declare function toSnakeCase<T extends object>(obj: T): Record<string, any>;
22
+ //# sourceMappingURL=authorization.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorization.utils.d.ts","sourceRoot":"","sources":["../../src/utils/authorization.utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEpE,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,MAAM,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACpH,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAC3C;KAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GAC9E,CAAC,CAAC;AAEN;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG;IAAE,YAAY,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAiB3G;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAEtE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAEzE"}
@@ -0,0 +1,49 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+
3
+ const snakeCase = require('lodash/snakeCase.js');
4
+ const camelCase = require('lodash/camelCase.js');
5
+ const mapKeys = require('lodash/mapKeys.js');
6
+
7
+ const _interopDefault = e => e && e.__esModule ? e : { default: e };
8
+
9
+ const snakeCase__default = /*#__PURE__*/_interopDefault(snakeCase);
10
+ const camelCase__default = /*#__PURE__*/_interopDefault(camelCase);
11
+ const mapKeys__default = /*#__PURE__*/_interopDefault(mapKeys);
12
+
13
+ /**
14
+ * Converts a scope object to resource type and resource ID
15
+ */
16
+ function scopeToResource(scope) {
17
+ if ('workspaceId' in scope) {
18
+ return { resourceType: 'workspace', resourceId: scope.workspaceId };
19
+ }
20
+ if ('boardId' in scope) {
21
+ return { resourceType: 'board', resourceId: scope.boardId };
22
+ }
23
+ if ('pulseId' in scope) {
24
+ return { resourceType: 'pulse', resourceId: scope.pulseId };
25
+ }
26
+ if ('accountProductId' in scope) {
27
+ return { resourceType: 'account_product', resourceId: scope.accountProductId };
28
+ }
29
+ if ('accountId' in scope) {
30
+ return { resourceType: 'account', resourceId: scope.accountId };
31
+ }
32
+ throw new Error('Unsupported scope provided');
33
+ }
34
+ /**
35
+ * Converts object keys from snake_case to camelCase
36
+ */
37
+ function toCamelCase(obj) {
38
+ return mapKeys__default.default(obj, (_, key) => camelCase__default.default(key));
39
+ }
40
+ /**
41
+ * Converts object keys from camelCase to snake_case
42
+ */
43
+ function toSnakeCase(obj) {
44
+ return mapKeys__default.default(obj, (_, key) => snakeCase__default.default(key));
45
+ }
46
+
47
+ exports.scopeToResource = scopeToResource;
48
+ exports.toCamelCase = toCamelCase;
49
+ exports.toSnakeCase = toSnakeCase;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mondaydotcomorg/monday-authorization",
3
- "version": "3.3.0-feature-bashanye-navigate-can-action-in-scope-to-graph-46d4fc5",
3
+ "version": "3.3.0-feature-bashanye-navigate-can-action-in-scope-to-graph-7ce3f8a",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "BSD-3-Clause",