@mondaydotcomorg/monday-authorization 3.5.1 → 3.5.2-feat-shaime-support-entity-attributes-4-ddec1d3

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 (97) hide show
  1. package/dist/authorization-attributes-ms-service.d.ts +88 -0
  2. package/dist/authorization-attributes-ms-service.d.ts.map +1 -0
  3. package/dist/authorization-attributes-ms-service.js +290 -0
  4. package/dist/authorization-attributes-service.d.ts +25 -47
  5. package/dist/authorization-attributes-service.d.ts.map +1 -1
  6. package/dist/authorization-attributes-service.js +32 -171
  7. package/dist/authorization-attributes-sns-service.d.ts +91 -0
  8. package/dist/authorization-attributes-sns-service.d.ts.map +1 -0
  9. package/dist/authorization-attributes-sns-service.js +217 -0
  10. package/dist/base-attribute-assignment.d.ts +20 -0
  11. package/dist/base-attribute-assignment.d.ts.map +1 -0
  12. package/dist/base-attribute-assignment.js +36 -0
  13. package/dist/constants/sns.d.ts +12 -2
  14. package/dist/constants/sns.d.ts.map +1 -1
  15. package/dist/constants/sns.js +22 -2
  16. package/dist/entity-attribute-assignment.d.ts +20 -0
  17. package/dist/entity-attribute-assignment.d.ts.map +1 -0
  18. package/dist/entity-attribute-assignment.js +32 -0
  19. package/dist/entity-attributes-constants.d.ts +7 -0
  20. package/dist/entity-attributes-constants.d.ts.map +1 -0
  21. package/dist/entity-attributes-constants.js +11 -0
  22. package/dist/errors/argument-error.d.ts +4 -0
  23. package/dist/errors/argument-error.d.ts.map +1 -0
  24. package/dist/errors/argument-error.js +11 -0
  25. package/dist/esm/authorization-attributes-ms-service.d.ts +88 -0
  26. package/dist/esm/authorization-attributes-ms-service.d.ts.map +1 -0
  27. package/dist/esm/authorization-attributes-ms-service.mjs +288 -0
  28. package/dist/esm/authorization-attributes-service.d.ts +25 -47
  29. package/dist/esm/authorization-attributes-service.d.ts.map +1 -1
  30. package/dist/esm/authorization-attributes-service.mjs +32 -167
  31. package/dist/esm/authorization-attributes-sns-service.d.ts +91 -0
  32. package/dist/esm/authorization-attributes-sns-service.d.ts.map +1 -0
  33. package/dist/esm/authorization-attributes-sns-service.mjs +211 -0
  34. package/dist/esm/base-attribute-assignment.d.ts +20 -0
  35. package/dist/esm/base-attribute-assignment.d.ts.map +1 -0
  36. package/dist/esm/base-attribute-assignment.mjs +30 -0
  37. package/dist/esm/constants/sns.d.ts +12 -2
  38. package/dist/esm/constants/sns.d.ts.map +1 -1
  39. package/dist/esm/constants/sns.mjs +17 -3
  40. package/dist/esm/entity-attribute-assignment.d.ts +20 -0
  41. package/dist/esm/entity-attribute-assignment.d.ts.map +1 -0
  42. package/dist/esm/entity-attribute-assignment.mjs +30 -0
  43. package/dist/esm/entity-attributes-constants.d.ts +7 -0
  44. package/dist/esm/entity-attributes-constants.d.ts.map +1 -0
  45. package/dist/esm/entity-attributes-constants.mjs +9 -0
  46. package/dist/esm/errors/argument-error.d.ts +4 -0
  47. package/dist/esm/errors/argument-error.d.ts.map +1 -0
  48. package/dist/esm/errors/argument-error.mjs +9 -0
  49. package/dist/esm/resource-attribute-assignment.d.ts +20 -0
  50. package/dist/esm/resource-attribute-assignment.d.ts.map +1 -0
  51. package/dist/esm/resource-attribute-assignment.mjs +30 -0
  52. package/dist/esm/resource-attributes-constants.d.ts +25 -0
  53. package/dist/esm/resource-attributes-constants.d.ts.map +1 -0
  54. package/dist/esm/resource-attributes-constants.mjs +28 -0
  55. package/dist/esm/testKit/index.d.ts +4 -4
  56. package/dist/esm/testKit/index.d.ts.map +1 -1
  57. package/dist/esm/types/authorization-attributes-contracts.d.ts +26 -11
  58. package/dist/esm/types/authorization-attributes-contracts.d.ts.map +1 -1
  59. package/dist/esm/types/authorization-attributes-contracts.mjs +6 -6
  60. package/dist/esm/types/authorization-attributes-service.interface.d.ts +57 -0
  61. package/dist/esm/types/authorization-attributes-service.interface.d.ts.map +1 -0
  62. package/dist/esm/types/authorization-attributes-service.interface.mjs +1 -0
  63. package/dist/esm/utils/validation.d.ts +45 -0
  64. package/dist/esm/utils/validation.d.ts.map +1 -0
  65. package/dist/esm/utils/validation.mjs +152 -0
  66. package/dist/resource-attribute-assignment.d.ts +20 -0
  67. package/dist/resource-attribute-assignment.d.ts.map +1 -0
  68. package/dist/resource-attribute-assignment.js +32 -0
  69. package/dist/resource-attributes-constants.d.ts +25 -0
  70. package/dist/resource-attributes-constants.d.ts.map +1 -0
  71. package/dist/resource-attributes-constants.js +31 -0
  72. package/dist/testKit/index.d.ts +4 -4
  73. package/dist/testKit/index.d.ts.map +1 -1
  74. package/dist/types/authorization-attributes-contracts.d.ts +26 -11
  75. package/dist/types/authorization-attributes-contracts.d.ts.map +1 -1
  76. package/dist/types/authorization-attributes-contracts.js +5 -5
  77. package/dist/types/authorization-attributes-service.interface.d.ts +57 -0
  78. package/dist/types/authorization-attributes-service.interface.d.ts.map +1 -0
  79. package/dist/types/authorization-attributes-service.interface.js +1 -0
  80. package/dist/utils/validation.d.ts +45 -0
  81. package/dist/utils/validation.d.ts.map +1 -0
  82. package/dist/utils/validation.js +158 -0
  83. package/package.json +3 -1
  84. package/src/authorization-attributes-ms-service.ts +438 -0
  85. package/src/authorization-attributes-service.ts +34 -222
  86. package/src/authorization-attributes-sns-service.ts +312 -0
  87. package/src/base-attribute-assignment.ts +46 -0
  88. package/src/constants/sns.ts +19 -2
  89. package/src/entity-attribute-assignment.ts +30 -0
  90. package/src/entity-attributes-constants.ts +7 -0
  91. package/src/errors/argument-error.ts +7 -0
  92. package/src/resource-attribute-assignment.ts +38 -0
  93. package/src/resource-attributes-constants.ts +27 -0
  94. package/src/testKit/index.ts +5 -5
  95. package/src/types/authorization-attributes-contracts.ts +34 -11
  96. package/src/types/authorization-attributes-service.interface.ts +101 -0
  97. package/src/utils/validation.ts +171 -0
@@ -0,0 +1,25 @@
1
+ export declare const RESOURCE_ATTRIBUTES_CONSTANTS: {
2
+ readonly ACCOUNT_RESOURCE_ATTRIBUTES: {
3
+ readonly ENABLE_MEMBERS_INVITE_FROM_NON_AUTH_DOMAIN: "enable_members_invite_from_non_auth_domain";
4
+ };
5
+ readonly WORKSPACE_RESOURCE_ATTRIBUTES: {
6
+ readonly IS_DEFAULT_WORKSPACE: "is_default_workspace";
7
+ };
8
+ readonly BOARD_RESOURCE_ATTRIBUTES: {
9
+ readonly IS_SYNCABLE_CHILD_ENTITY: "is_syncable_child_entity";
10
+ readonly SYSTEM_ENTITY_TYPE: "system_entity_type";
11
+ };
12
+ };
13
+ export declare enum ResourceType {
14
+ Account = "account",
15
+ AccountProduct = "account_product",
16
+ Workspace = "workspace",
17
+ Board = "board",
18
+ Item = "item",
19
+ Team = "team",
20
+ Overview = "overview",
21
+ Document = "document",
22
+ Crm = "crm"
23
+ }
24
+ export declare const RESOURCE_TYPES: readonly ResourceType[];
25
+ //# sourceMappingURL=resource-attributes-constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-attributes-constants.d.ts","sourceRoot":"","sources":["../src/resource-attributes-constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,6BAA6B;;;;;;;;;;;CAWhC,CAAC;AAEX,oBAAY,YAAY;IACtB,OAAO,YAAY;IACnB,cAAc,oBAAoB;IAClC,SAAS,cAAc;IACvB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,GAAG,QAAQ;CACZ;AAGD,eAAO,MAAM,cAAc,yBAA6C,CAAC"}
@@ -0,0 +1,31 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+
3
+ const RESOURCE_ATTRIBUTES_CONSTANTS = {
4
+ ACCOUNT_RESOURCE_ATTRIBUTES: {
5
+ ENABLE_MEMBERS_INVITE_FROM_NON_AUTH_DOMAIN: 'enable_members_invite_from_non_auth_domain',
6
+ },
7
+ WORKSPACE_RESOURCE_ATTRIBUTES: {
8
+ IS_DEFAULT_WORKSPACE: 'is_default_workspace',
9
+ },
10
+ BOARD_RESOURCE_ATTRIBUTES: {
11
+ IS_SYNCABLE_CHILD_ENTITY: 'is_syncable_child_entity',
12
+ SYSTEM_ENTITY_TYPE: 'system_entity_type',
13
+ },
14
+ };
15
+ exports.ResourceType = void 0;
16
+ (function (ResourceType) {
17
+ ResourceType["Account"] = "account";
18
+ ResourceType["AccountProduct"] = "account_product";
19
+ ResourceType["Workspace"] = "workspace";
20
+ ResourceType["Board"] = "board";
21
+ ResourceType["Item"] = "item";
22
+ ResourceType["Team"] = "team";
23
+ ResourceType["Overview"] = "overview";
24
+ ResourceType["Document"] = "document";
25
+ ResourceType["Crm"] = "crm";
26
+ })(exports.ResourceType || (exports.ResourceType = {}));
27
+ // Define the array of strings and use 'as const' to make its contents literal types
28
+ const RESOURCE_TYPES = Object.freeze(Object.values(exports.ResourceType));
29
+
30
+ exports.RESOURCE_ATTRIBUTES_CONSTANTS = RESOURCE_ATTRIBUTES_CONSTANTS;
31
+ exports.RESOURCE_TYPES = RESOURCE_TYPES;
@@ -1,12 +1,12 @@
1
- import { Action, BaseRequest, BaseResponse, ContextGetter, Resource, ResourceGetter } from '../types/general';
1
+ import { BaseRequest, BaseResponse, ContextGetter, Resource, ResourceGetter } from '../types/general';
2
2
  import type { NextFunction } from 'express';
3
3
  export type TestPermittedAction = {
4
4
  accountId: number;
5
5
  userId: number;
6
6
  resources: Resource[];
7
- action: Action;
7
+ action: string;
8
8
  };
9
- export declare const addTestPermittedAction: (accountId: number, userId: number, resources: Resource[], action: Action) => void;
9
+ export declare const addTestPermittedAction: (accountId: number, userId: number, resources: Resource[], action: string) => void;
10
10
  export declare const clearTestPermittedActions: () => void;
11
- export declare const getTestAuthorizationMiddleware: (action: Action, resourceGetter: ResourceGetter, contextGetter?: ContextGetter) => (request: BaseRequest, response: BaseResponse, next: NextFunction) => Promise<void>;
11
+ export declare const getTestAuthorizationMiddleware: (action: string, resourceGetter: ResourceGetter, contextGetter?: ContextGetter) => (request: BaseRequest, response: BaseResponse, next: NextFunction) => Promise<void>;
12
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testKit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAG9G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,eAAO,MAAM,sBAAsB,GAAI,WAAW,MAAM,EAAE,QAAQ,MAAM,EAAE,WAAW,QAAQ,EAAE,EAAE,QAAQ,MAAM,SAE9G,CAAC;AAEF,eAAO,MAAM,yBAAyB,YAErC,CAAC;AA4BF,eAAO,MAAM,8BAA8B,GACzC,QAAQ,MAAM,EACd,gBAAgB,cAAc,EAC9B,gBAAgB,aAAa,MAG3B,SAAS,WAAW,EACpB,UAAU,YAAY,EACtB,MAAM,YAAY,KACjB,OAAO,CAAC,IAAI,CAYhB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testKit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGtG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,eAAO,MAAM,sBAAsB,GAAI,WAAW,MAAM,EAAE,QAAQ,MAAM,EAAE,WAAW,QAAQ,EAAE,EAAE,QAAQ,MAAM,SAE9G,CAAC;AAEF,eAAO,MAAM,yBAAyB,YAErC,CAAC;AA4BF,eAAO,MAAM,8BAA8B,GACzC,QAAQ,MAAM,EACd,gBAAgB,cAAc,EAC9B,gBAAgB,aAAa,MAG3B,SAAS,WAAW,EACpB,UAAU,YAAY,EACtB,MAAM,YAAY,KACjB,OAAO,CAAC,IAAI,CAYhB,CAAC"}
@@ -1,28 +1,43 @@
1
1
  import { Resource } from './general';
2
- export interface ResourceAttributeAssignment {
3
- resourceType: Resource['type'];
4
- resourceId: Resource['id'];
2
+ import type { EntityType } from '../entity-attributes-constants';
3
+ import type { ResourceType } from '../resource-attributes-constants';
4
+ interface AttributeAssignment {
5
5
  key: string;
6
6
  value: string;
7
7
  }
8
- export interface ResourceAttributeResponse {
9
- attributes: ResourceAttributeAssignment[];
8
+ export interface ResourceAttributeAssignment extends AttributeAssignment {
9
+ resourceId: number;
10
+ resourceType: ResourceType;
11
+ }
12
+ export interface EntityAttributeAssignment extends AttributeAssignment {
13
+ entityId: number;
14
+ entityType: EntityType;
10
15
  }
11
16
  export interface ResourceAttributeDelete {
12
17
  resourceType: Resource['type'];
13
18
  resourceId: Resource['id'];
14
19
  key: string;
15
20
  }
16
- export declare enum ResourceAttributeOperationEnum {
21
+ export interface EntityAttributeDelete {
22
+ entityType: EntityType;
23
+ entityId: number;
24
+ key: string;
25
+ }
26
+ export declare enum AttributeOperation {
17
27
  UPSERT = "upsert",
18
28
  DELETE = "delete"
19
29
  }
20
- interface UpsertResourceAttributeOperation extends ResourceAttributeAssignment {
21
- operationType: ResourceAttributeOperationEnum.UPSERT;
30
+ export interface ResourceAttributeResponse {
31
+ attributes: ResourceAttributeAssignment[];
32
+ }
33
+ export interface EntityAttributeResponse {
34
+ attributes: EntityAttributeAssignment[];
35
+ }
36
+ export interface ResourceAttributeOperation extends ResourceAttributeAssignment {
37
+ operationType: AttributeOperation;
22
38
  }
23
- interface DeleteResourceAttributeOperation extends ResourceAttributeDelete {
24
- operationType: ResourceAttributeOperationEnum.DELETE;
39
+ export interface EntityAttributeOperation extends EntityAttributeAssignment {
40
+ operationType: AttributeOperation;
25
41
  }
26
- export type ResourceAttributesOperation = UpsertResourceAttributeOperation | DeleteResourceAttributeOperation;
27
42
  export {};
28
43
  //# sourceMappingURL=authorization-attributes-contracts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"authorization-attributes-contracts.d.ts","sourceRoot":"","sources":["../../src/types/authorization-attributes-contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,WAAW,2BAA2B;IAC1C,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,2BAA2B,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,oBAAY,8BAA8B;IACxC,MAAM,WAAW;IACjB,MAAM,WAAW;CAClB;AAED,UAAU,gCAAiC,SAAQ,2BAA2B;IAC5E,aAAa,EAAE,8BAA8B,CAAC,MAAM,CAAC;CACtD;AAED,UAAU,gCAAiC,SAAQ,uBAAuB;IACxE,aAAa,EAAE,8BAA8B,CAAC,MAAM,CAAC;CACtD;AAED,MAAM,MAAM,2BAA2B,GAAG,gCAAgC,GAAG,gCAAgC,CAAC"}
1
+ {"version":3,"file":"authorization-attributes-contracts.d.ts","sourceRoot":"","sources":["../../src/types/authorization-attributes-contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,UAAU,mBAAmB;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB;IACtE,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAID,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;CACxB;AAGD,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,oBAAY,kBAAkB;IAC5B,MAAM,WAAW;IACjB,MAAM,WAAW;CAClB;AAGD,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,2BAA2B,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,yBAAyB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,0BAA2B,SAAQ,2BAA2B;IAC7E,aAAa,EAAE,kBAAkB,CAAC;CACnC;AAED,MAAM,WAAW,wBAAyB,SAAQ,yBAAyB;IACzE,aAAa,EAAE,kBAAkB,CAAC;CACnC"}
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
- exports.ResourceAttributeOperationEnum = void 0;
4
- (function (ResourceAttributeOperationEnum) {
5
- ResourceAttributeOperationEnum["UPSERT"] = "upsert";
6
- ResourceAttributeOperationEnum["DELETE"] = "delete";
7
- })(exports.ResourceAttributeOperationEnum || (exports.ResourceAttributeOperationEnum = {}));
3
+ exports.AttributeOperation = void 0;
4
+ (function (AttributeOperation) {
5
+ AttributeOperation["UPSERT"] = "upsert";
6
+ AttributeOperation["DELETE"] = "delete";
7
+ })(exports.AttributeOperation || (exports.AttributeOperation = {}));
@@ -0,0 +1,57 @@
1
+ import { ResourceAttributeAssignment as ResourceAttributeAssignmentContract, EntityAttributeAssignment as EntityAttributeAssignmentContract, ResourceAttributeOperation, EntityAttributeOperation } from './authorization-attributes-contracts';
2
+ import { ResourceAttributeAssignment } from '../resource-attribute-assignment';
3
+ import { EntityAttributeAssignment } from '../entity-attribute-assignment';
4
+ import { Resource } from './general';
5
+ import { EntityType } from '../entity-attributes-constants';
6
+ /**
7
+ * Resource type compatible with both MS and SNS services
8
+ */
9
+ export interface CompatibleResource {
10
+ resourceType?: string;
11
+ resourceId?: number;
12
+ type?: string;
13
+ id?: number;
14
+ }
15
+ /**
16
+ * Interface for authorization attributes operations.
17
+ * Both MS (direct) and SNS (async) services implement this interface.
18
+ */
19
+ export interface AuthorizationAttributesService {
20
+ /**authorization-attributes-service.ts
21
+ * Upserts resource attributes.
22
+ * For MS service: returns Promise<void>
23
+ * For SNS service: requires appName and callerActionIdentifier, returns Promise<ResourceAttributesOperation[]>
24
+ */
25
+ upsertResourceAttributes(accountId: number, resourceAttributeAssignments: ResourceAttributeAssignment[] | ResourceAttributeAssignmentContract[], appName?: string, callerActionIdentifier?: string): Promise<void | ResourceAttributeOperation[]>;
26
+ /**
27
+ * Deletes resource attributes.
28
+ * For MS service: returns Promise<void>
29
+ * For SNS service: requires appName and callerActionIdentifier, returns Promise<ResourceAttributesOperation[]>
30
+ */
31
+ deleteResourceAttributes(accountId: number, resource: CompatibleResource | Resource, attributeKeys: string[], appName?: string, callerActionIdentifier?: string): Promise<void | ResourceAttributeOperation[]>;
32
+ /**
33
+ * Upserts entity attributes.
34
+ * For MS service: returns Promise<void>
35
+ * For SNS service: requires appName and callerActionIdentifier, returns Promise<EntityAttributesOperation[]>
36
+ */
37
+ upsertEntityAttributes(accountId: number, entityAttributeAssignments: EntityAttributeAssignment[] | EntityAttributeAssignmentContract[], appName?: string, callerActionIdentifier?: string): Promise<void | EntityAttributeOperation[]>;
38
+ /**
39
+ * Deletes entity attributes.
40
+ * For MS service: returns Promise<void>
41
+ * For SNS service: requires appName and callerActionIdentifier, returns Promise<EntityAttributesOperation[]>
42
+ */
43
+ deleteEntityAttributes(accountId: number, entityType: EntityType | string, entityId: number, attributeKeys: string[], appName?: string, callerActionIdentifier?: string): Promise<void | EntityAttributeOperation[]>;
44
+ /**
45
+ * Updates resource attributes (batch operations).
46
+ * For MS service: may throw error or delegate to upsert/delete
47
+ * For SNS service: returns Promise<ResourceAttributesOperation[]>
48
+ */
49
+ updateResourceAttributes(accountId: number, appName: string, callerActionIdentifier: string, resourceAttributeOperations: ResourceAttributeOperation[]): Promise<ResourceAttributeOperation[]>;
50
+ /**
51
+ * Updates entity attributes (batch operations).
52
+ * For MS service: may throw error or delegate to upsert/delete
53
+ * For SNS service: returns Promise<EntityAttributesOperation[]>
54
+ */
55
+ updateEntityAttributes(accountId: number, appName: string, callerActionIdentifier: string, entityAttributeOperations: EntityAttributeOperation[]): Promise<EntityAttributeOperation[]>;
56
+ }
57
+ //# sourceMappingURL=authorization-attributes-service.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorization-attributes-service.interface.d.ts","sourceRoot":"","sources":["../../src/types/authorization-attributes-service.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,IAAI,mCAAmC,EAClE,yBAAyB,IAAI,iCAAiC,EAC9D,0BAA0B,EAC1B,wBAAwB,EACzB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;;;OAIG;IACH,wBAAwB,CACtB,SAAS,EAAE,MAAM,EACjB,4BAA4B,EAAE,2BAA2B,EAAE,GAAG,mCAAmC,EAAE,EACnG,OAAO,CAAC,EAAE,MAAM,EAChB,sBAAsB,CAAC,EAAE,MAAM,GAC9B,OAAO,CAAC,IAAI,GAAG,0BAA0B,EAAE,CAAC,CAAC;IAEhD;;;;OAIG;IACH,wBAAwB,CACtB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,kBAAkB,GAAG,QAAQ,EACvC,aAAa,EAAE,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE,MAAM,EAChB,sBAAsB,CAAC,EAAE,MAAM,GAC9B,OAAO,CAAC,IAAI,GAAG,0BAA0B,EAAE,CAAC,CAAC;IAEhD;;;;OAIG;IACH,sBAAsB,CACpB,SAAS,EAAE,MAAM,EACjB,0BAA0B,EAAE,yBAAyB,EAAE,GAAG,iCAAiC,EAAE,EAC7F,OAAO,CAAC,EAAE,MAAM,EAChB,sBAAsB,CAAC,EAAE,MAAM,GAC9B,OAAO,CAAC,IAAI,GAAG,wBAAwB,EAAE,CAAC,CAAC;IAE9C;;;;OAIG;IACH,sBAAsB,CACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,GAAG,MAAM,EAC/B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE,MAAM,EAChB,sBAAsB,CAAC,EAAE,MAAM,GAC9B,OAAO,CAAC,IAAI,GAAG,wBAAwB,EAAE,CAAC,CAAC;IAE9C;;;;OAIG;IACH,wBAAwB,CACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,sBAAsB,EAAE,MAAM,EAC9B,2BAA2B,EAAE,0BAA0B,EAAE,GACxD,OAAO,CAAC,0BAA0B,EAAE,CAAC,CAAC;IAEzC;;;;OAIG;IACH,sBAAsB,CACpB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,sBAAsB,EAAE,MAAM,EAC9B,yBAAyB,EAAE,wBAAwB,EAAE,GACpD,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC;CACxC"}
@@ -0,0 +1,45 @@
1
+ import { Resource } from '../types/general';
2
+ /**
3
+ * Utility class for common validation operations using AJV
4
+ */
5
+ export declare class ValidationUtils {
6
+ private static ajv;
7
+ /**
8
+ * Validates that a value is an integer. Throws ArgumentError with a descriptive message on failure.
9
+ */
10
+ static validateInteger(value: number): void;
11
+ /**
12
+ * Validates that a value is a non-empty string. Throws ArgumentError on failure.
13
+ */
14
+ static validateString(value: string): void;
15
+ /**
16
+ * Validates that a value is an array of non-empty strings. Throws ArgumentError on failure.
17
+ * Allows empty arrays - caller should handle early return.
18
+ */
19
+ static validateStringArray(value: string[]): void;
20
+ /**
21
+ * Validates an attribute assignment object using a single AJV schema.
22
+ * Preserves legacy error messages for each field.
23
+ */
24
+ static validateAssignment<TType extends string>(data: {
25
+ id: any;
26
+ type: string;
27
+ attributeKey: any;
28
+ attributeValue: any;
29
+ }, validTypes: readonly TType[], fieldNames: {
30
+ id: string;
31
+ type: string;
32
+ }): {
33
+ id: number;
34
+ type: TType;
35
+ attributeKey: string;
36
+ attributeValue: string;
37
+ };
38
+ /**
39
+ * Validates a Resource-like object shape: { id: number; type: string }.
40
+ * Throws ArgumentError with legacy-compatible messages.
41
+ */
42
+ static validateResource(resource: Resource): void;
43
+ static validateArrayTypeOf<T>(attributesMessages: T[], messageClass: abstract new (...args: any[]) => T): void;
44
+ }
45
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,GAAG,CAAgC;IAClD;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAS3C;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAa1C;;;OAGG;IACH,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAkBjD;;;OAGG;IACH,MAAM,CAAC,kBAAkB,CAAC,KAAK,SAAS,MAAM,EAC5C,IAAI,EAAE;QAAE,EAAE,EAAE,GAAG,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,GAAG,CAAC;QAAC,cAAc,EAAE,GAAG,CAAA;KAAE,EACvE,UAAU,EAAE,SAAS,KAAK,EAAE,EAC5B,UAAU,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GACvC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,KAAK,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE;IA0D5E;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAqBjD,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI;CAoB/G"}
@@ -0,0 +1,158 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+
3
+ const Ajv = require('ajv');
4
+ const errors_argumentError = require('../errors/argument-error.js');
5
+
6
+ const _interopDefault = e => e && e.__esModule ? e : { default: e };
7
+
8
+ const Ajv__default = /*#__PURE__*/_interopDefault(Ajv);
9
+
10
+ /**
11
+ * Utility class for common validation operations using AJV
12
+ */
13
+ class ValidationUtils {
14
+ static ajv = new Ajv__default.default({ allErrors: true });
15
+ /**
16
+ * Validates that a value is an integer. Throws ArgumentError with a descriptive message on failure.
17
+ */
18
+ static validateInteger(value) {
19
+ const numberSchema = { type: 'number', multipleOf: 1 };
20
+ const validate = ValidationUtils.ajv.compile(numberSchema);
21
+ const isValid = validate(value);
22
+ if (!isValid) {
23
+ throw new errors_argumentError.ArgumentError(`Value must be an integer, got: ${value}`);
24
+ }
25
+ }
26
+ /**
27
+ * Validates that a value is a non-empty string. Throws ArgumentError on failure.
28
+ */
29
+ static validateString(value) {
30
+ const non_empty_string_schema = {
31
+ type: 'string',
32
+ minLength: 1,
33
+ pattern: '\\S',
34
+ };
35
+ const validate = ValidationUtils.ajv.compile(non_empty_string_schema);
36
+ const isValid = validate(value);
37
+ if (!isValid) {
38
+ throw new errors_argumentError.ArgumentError(`Value must be a non-empty string, got: ${value}`);
39
+ }
40
+ }
41
+ /**
42
+ * Validates that a value is an array of non-empty strings. Throws ArgumentError on failure.
43
+ * Allows empty arrays - caller should handle early return.
44
+ */
45
+ static validateStringArray(value) {
46
+ const string_array_schema = {
47
+ type: 'array',
48
+ items: {
49
+ type: 'string',
50
+ minLength: 1,
51
+ pattern: '\\S',
52
+ },
53
+ };
54
+ const validateStringArray = ValidationUtils.ajv.compile(string_array_schema);
55
+ const isValid = validateStringArray(value);
56
+ if (!isValid) {
57
+ throw new errors_argumentError.ArgumentError(`Value must be an array of non-empty strings, got: ${value}`);
58
+ }
59
+ // Allow empty arrays to pass validation - caller should handle early return
60
+ // Non-empty arrays will be validated for string content above
61
+ }
62
+ /**
63
+ * Validates an attribute assignment object using a single AJV schema.
64
+ * Preserves legacy error messages for each field.
65
+ */
66
+ static validateAssignment(data, validTypes, fieldNames) {
67
+ const schema = {
68
+ type: 'object',
69
+ properties: {
70
+ id: { type: 'number', multipleOf: 1 },
71
+ type: { type: 'string', enum: validTypes },
72
+ attributeKey: { type: 'string', minLength: 1 },
73
+ attributeValue: { type: 'string', minLength: 1 },
74
+ },
75
+ required: ['id', 'type', 'attributeKey', 'attributeValue'],
76
+ additionalProperties: false,
77
+ };
78
+ const validate = this.ajv.compile(schema);
79
+ const valid = validate(data);
80
+ if (!valid) {
81
+ // Map to legacy error messages deterministically
82
+ const { id, type, attributeKey, attributeValue } = data;
83
+ // id must be integer
84
+ const isInteger = typeof id === 'number' && Number.isFinite(id) && Math.floor(id) === id;
85
+ if (!isInteger) {
86
+ throw new errors_argumentError.ArgumentError(`${fieldNames.id} must be an integer, got: ${id}`);
87
+ }
88
+ // type must be within enum
89
+ if (typeof type !== 'string' || !validTypes.includes(type)) {
90
+ throw new errors_argumentError.ArgumentError(`${fieldNames.type} must be one of [${validTypes.join(', ')}], got: ${type}`);
91
+ }
92
+ // attributeKey
93
+ if (typeof attributeKey !== 'string') {
94
+ throw new errors_argumentError.ArgumentError(`attributeKey must be a string, got: ${typeof attributeKey}`);
95
+ }
96
+ if (!attributeKey) {
97
+ throw new errors_argumentError.ArgumentError('attributeKey must be a non-empty string');
98
+ }
99
+ // attributeValue
100
+ if (typeof attributeValue !== 'string') {
101
+ throw new errors_argumentError.ArgumentError(`attributeValue must be a string, got: ${typeof attributeValue}`);
102
+ }
103
+ if (!attributeValue) {
104
+ throw new errors_argumentError.ArgumentError('attributeValue must be a non-empty string');
105
+ }
106
+ // Fallback
107
+ throw new errors_argumentError.ArgumentError('Invalid attribute assignment');
108
+ }
109
+ return {
110
+ id: data.id,
111
+ type: data.type,
112
+ attributeKey: data.attributeKey,
113
+ attributeValue: data.attributeValue,
114
+ };
115
+ }
116
+ /**
117
+ * Validates a Resource-like object shape: { id: number; type: string }.
118
+ * Throws ArgumentError with legacy-compatible messages.
119
+ */
120
+ static validateResource(resource) {
121
+ if (!resource || typeof resource !== 'object') {
122
+ throw new errors_argumentError.ArgumentError('resource must be an object');
123
+ }
124
+ const schema = {
125
+ type: 'object',
126
+ properties: {
127
+ id: { type: 'number', multipleOf: 1 },
128
+ type: { type: 'string', minLength: 1 },
129
+ wrapperData: { type: 'string' },
130
+ },
131
+ required: ['type', 'id'],
132
+ additionalProperties: false,
133
+ };
134
+ const validate = this.ajv.compile(schema);
135
+ const isValid = validate(resource);
136
+ if (!isValid) {
137
+ throw new errors_argumentError.ArgumentError('Invalid resource');
138
+ }
139
+ }
140
+ static validateArrayTypeOf(attributesMessages, messageClass) {
141
+ const arraySchema = {
142
+ type: 'array',
143
+ };
144
+ const validateArray = ValidationUtils.ajv.compile(arraySchema);
145
+ const isArrayValid = validateArray(attributesMessages);
146
+ if (!isArrayValid) {
147
+ throw new errors_argumentError.ArgumentError(`attributesMessages must be an array`);
148
+ }
149
+ for (let i = 0; i < attributesMessages.length; i++) {
150
+ const item = attributesMessages[i];
151
+ if (!(item instanceof messageClass)) {
152
+ throw new errors_argumentError.ArgumentError(`attributesMessages[${i}] must be an instance of ${messageClass.name}, got: ${item?.constructor?.name || typeof item}`);
153
+ }
154
+ }
155
+ }
156
+ }
157
+
158
+ exports.ValidationUtils = ValidationUtils;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mondaydotcomorg/monday-authorization",
3
- "version": "3.5.1",
3
+ "version": "3.5.2-feat-shaime-support-entity-attributes-4-ddec1d3",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "BSD-3-Clause",
@@ -28,6 +28,8 @@
28
28
  "@mondaydotcomorg/monday-observability-kit": "^1.5.3",
29
29
  "@mondaydotcomorg/monday-sns": "^1.2.1",
30
30
  "@mondaydotcomorg/trident-backend-api": "^0.24.3",
31
+ "ajv": "^8.17.1",
32
+ "ajv-keywords": "^5.1.0",
31
33
  "lodash": "^4.17.21",
32
34
  "node-fetch": "^2.6.7",
33
35
  "on-headers": "^1.0.2",