@mondaydotcomorg/monday-authorization 3.6.0-feat-shaime-support-entity-attributes-3-31fcbe3 → 3.6.0-feat-shaime-support-entity-attributes-3-02be333

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 (63) hide show
  1. package/dist/authorization-attributes-ms-service.d.ts +2 -2
  2. package/dist/authorization-attributes-ms-service.d.ts.map +1 -1
  3. package/dist/authorization-attributes-ms-service.js +10 -38
  4. package/dist/authorization-attributes-service.d.ts +12 -10
  5. package/dist/authorization-attributes-service.d.ts.map +1 -1
  6. package/dist/authorization-attributes-service.js +17 -15
  7. package/dist/authorization-attributes-sns-service.d.ts +2 -2
  8. package/dist/authorization-attributes-sns-service.d.ts.map +1 -1
  9. package/dist/authorization-attributes-sns-service.js +7 -23
  10. package/dist/base-authorization-attributes-service.d.ts +32 -0
  11. package/dist/base-authorization-attributes-service.d.ts.map +1 -0
  12. package/dist/base-authorization-attributes-service.js +63 -0
  13. package/dist/esm/authorization-attributes-ms-service.d.ts +2 -2
  14. package/dist/esm/authorization-attributes-ms-service.d.ts.map +1 -1
  15. package/dist/esm/authorization-attributes-ms-service.mjs +10 -38
  16. package/dist/esm/authorization-attributes-service.d.ts +12 -10
  17. package/dist/esm/authorization-attributes-service.d.ts.map +1 -1
  18. package/dist/esm/authorization-attributes-service.mjs +17 -15
  19. package/dist/esm/authorization-attributes-sns-service.d.ts +2 -2
  20. package/dist/esm/authorization-attributes-sns-service.d.ts.map +1 -1
  21. package/dist/esm/authorization-attributes-sns-service.mjs +7 -23
  22. package/dist/esm/base-authorization-attributes-service.d.ts +32 -0
  23. package/dist/esm/base-authorization-attributes-service.d.ts.map +1 -0
  24. package/dist/esm/base-authorization-attributes-service.mjs +61 -0
  25. package/dist/esm/index.d.ts +1 -1
  26. package/dist/esm/index.d.ts.map +1 -1
  27. package/dist/esm/index.mjs +1 -0
  28. package/dist/esm/resource-attribute-assignment.d.ts.map +1 -1
  29. package/dist/esm/resource-attribute-assignment.mjs +7 -0
  30. package/dist/esm/resource-attributes-constants.d.ts +2 -1
  31. package/dist/esm/resource-attributes-constants.d.ts.map +1 -1
  32. package/dist/esm/resource-attributes-constants.mjs +1 -0
  33. package/dist/esm/utils/assignment-schema.d.ts.map +1 -1
  34. package/dist/esm/utils/assignment-schema.mjs +5 -0
  35. package/dist/esm/utils/validation.mjs +2 -2
  36. package/dist/index.d.ts +1 -1
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +2 -0
  39. package/dist/resource-attribute-assignment.d.ts.map +1 -1
  40. package/dist/resource-attribute-assignment.js +7 -0
  41. package/dist/resource-attributes-constants.d.ts +2 -1
  42. package/dist/resource-attributes-constants.d.ts.map +1 -1
  43. package/dist/resource-attributes-constants.js +1 -0
  44. package/dist/utils/assignment-schema.d.ts.map +1 -1
  45. package/dist/utils/assignment-schema.js +5 -0
  46. package/dist/utils/validation.js +2 -2
  47. package/package.json +1 -1
  48. package/src/authorization-attributes-ms-service.ts +19 -41
  49. package/src/authorization-attributes-service.ts +18 -16
  50. package/src/authorization-attributes-sns-service.ts +15 -23
  51. package/src/base-authorization-attributes-service.ts +90 -0
  52. package/src/index.ts +1 -1
  53. package/src/resource-attribute-assignment.ts +7 -0
  54. package/src/resource-attributes-constants.ts +1 -0
  55. package/src/utils/assignment-schema.ts +5 -0
  56. package/src/utils/validation.ts +2 -2
  57. package/dist/esm/types/authorization-attributes-service.interface.d.ts +0 -32
  58. package/dist/esm/types/authorization-attributes-service.interface.d.ts.map +0 -1
  59. package/dist/esm/types/authorization-attributes-service.interface.mjs +0 -1
  60. package/dist/types/authorization-attributes-service.interface.d.ts +0 -32
  61. package/dist/types/authorization-attributes-service.interface.d.ts.map +0 -1
  62. package/dist/types/authorization-attributes-service.interface.js +0 -1
  63. package/src/types/authorization-attributes-service.interface.ts +0 -63
@@ -3,7 +3,6 @@ import { signAuthorizationHeader } from '@mondaydotcomorg/monday-jwt';
3
3
  import { ResourceAttributeAssignment } from './resource-attribute-assignment';
4
4
  import { EntityAttributeAssignment } from './entity-attribute-assignment';
5
5
  import {
6
- AttributeOperation,
7
6
  ResourceAttributeUpsertOperation,
8
7
  ResourceAttributeDeleteOperation,
9
8
  EntityAttributeUpsertOperation,
@@ -13,8 +12,7 @@ import { EntityType } from './entity-attributes-constants';
13
12
  import { AuthorizationInternalService, logger } from './authorization-internal-service';
14
13
  import { getAttributionsFromApi } from './attributions-service';
15
14
  import { APP_NAME } from './constants';
16
- import { ValidationUtils } from './utils/validation';
17
- import { AuthorizationAttributesService } from './types/authorization-attributes-service.interface';
15
+ import { BaseAuthorizationAttributesService } from './base-authorization-attributes-service';
18
16
  import { Resource } from './types/general';
19
17
 
20
18
  const INTERNAL_APP_NAME = 'internal_ms';
@@ -31,11 +29,12 @@ interface DeleteRequestBody {
31
29
  * Service class for managing resource attributes in the authorization microservice.
32
30
  * Provides synchronous HTTP operations to create/update and delete attributes on resources.
33
31
  */
34
- export class AuthorizationAttributesMsService implements AuthorizationAttributesService {
32
+ export class AuthorizationAttributesMsService extends BaseAuthorizationAttributesService {
35
33
  private static LOG_TAG = 'authorization_attributes_ms';
36
34
  private static httpClient: HttpClient | undefined = Api.getPart('httpClient');
37
35
 
38
36
  constructor() {
37
+ super();
39
38
  if (!AuthorizationAttributesMsService.httpClient) {
40
39
  AuthorizationAttributesMsService.httpClient = Api.getPart('httpClient');
41
40
  if (!AuthorizationAttributesMsService.httpClient) {
@@ -58,12 +57,11 @@ export class AuthorizationAttributesMsService implements AuthorizationAttributes
58
57
  _appName?: string,
59
58
  _callerActionIdentifier?: string
60
59
  ): Promise<ResourceAttributeDeleteOperation> {
61
- ValidationUtils.validateResource(resource);
62
- ValidationUtils.validatDeleteResourceAssignment({
63
- resourceType: resource.type,
64
- resourceId: resource.id,
65
- key: attributeKey,
66
- });
60
+ const operation: ResourceAttributeDeleteOperation = await super.deleteResourceAttributes(
61
+ accountId,
62
+ resource,
63
+ attributeKey
64
+ );
67
65
  await AuthorizationAttributesMsService.executeDeleteRequest(
68
66
  accountId,
69
67
  DELETE_RESOURCE_ATTRIBUTES_PATH,
@@ -75,12 +73,7 @@ export class AuthorizationAttributesMsService implements AuthorizationAttributes
75
73
  'resource',
76
74
  'deleteResourceAttributesSync'
77
75
  );
78
- return {
79
- resourceType: resource.type,
80
- resourceId: resource.id,
81
- key: attributeKey,
82
- operationType: AttributeOperation.DELETE,
83
- };
76
+ return operation;
84
77
  }
85
78
 
86
79
  /**
@@ -99,7 +92,12 @@ export class AuthorizationAttributesMsService implements AuthorizationAttributes
99
92
  _appName?: string,
100
93
  _callerActionIdentifier?: string
101
94
  ): Promise<EntityAttributeDeleteOperation> {
102
- ValidationUtils.validateInteger(accountId);
95
+ const operation: EntityAttributeDeleteOperation = await super.deleteEntityAttributes(
96
+ accountId,
97
+ entityType,
98
+ entityId,
99
+ attributeKey
100
+ );
103
101
  await AuthorizationAttributesMsService.executeDeleteRequest(
104
102
  accountId,
105
103
  DELETE_ENTITY_ATTRIBUTES_PATH,
@@ -111,12 +109,7 @@ export class AuthorizationAttributesMsService implements AuthorizationAttributes
111
109
  'entity',
112
110
  'deleteEntityAttributesSync'
113
111
  );
114
- return {
115
- entityType,
116
- entityId,
117
- key: attributeKey,
118
- operationType: AttributeOperation.DELETE,
119
- };
112
+ return operation;
120
113
  }
121
114
 
122
115
  /**
@@ -133,12 +126,7 @@ export class AuthorizationAttributesMsService implements AuthorizationAttributes
133
126
  _callerActionIdentifier: string,
134
127
  resourceAttributeOperation: ResourceAttributeUpsertOperation
135
128
  ): Promise<ResourceAttributeUpsertOperation> {
136
- ValidationUtils.validatUpsertResourceAssignment({
137
- resourceId: resourceAttributeOperation.resourceId,
138
- resourceType: resourceAttributeOperation.resourceType,
139
- key: resourceAttributeOperation.key,
140
- value: resourceAttributeOperation.value,
141
- });
129
+ await super.updateResourceAttributes(accountId, _appName, _callerActionIdentifier, resourceAttributeOperation);
142
130
  await AuthorizationAttributesMsService.executeUpsertRequest(
143
131
  accountId,
144
132
  [
@@ -146,7 +134,7 @@ export class AuthorizationAttributesMsService implements AuthorizationAttributes
146
134
  resourceAttributeOperation.resourceId,
147
135
  resourceAttributeOperation.resourceType,
148
136
  resourceAttributeOperation.key,
149
- resourceAttributeOperation.value || ''
137
+ resourceAttributeOperation.value
150
138
  ),
151
139
  ],
152
140
  UPSERT_RESOURCE_ATTRIBUTES_PATH,
@@ -173,13 +161,7 @@ export class AuthorizationAttributesMsService implements AuthorizationAttributes
173
161
  entityAttributeOperation: EntityAttributeUpsertOperation
174
162
  ): Promise<EntityAttributeUpsertOperation> {
175
163
  // Validate before processing
176
- ValidationUtils.validatUpsertEntityAssignment({
177
- entityId: entityAttributeOperation.entityId,
178
- entityType: entityAttributeOperation.entityType,
179
- key: entityAttributeOperation.key,
180
- value: entityAttributeOperation.value,
181
- });
182
-
164
+ await super.updateEntityAttributes(accountId, _appName, _callerActionIdentifier, entityAttributeOperation);
183
165
  await AuthorizationAttributesMsService.executeUpsertRequest(
184
166
  accountId,
185
167
  [
@@ -224,10 +206,6 @@ export class AuthorizationAttributesMsService implements AuthorizationAttributes
224
206
  logPrefix: string,
225
207
  methodName: string
226
208
  ): Promise<void> {
227
- // Validate inputs
228
- ValidationUtils.validateInteger(accountId);
229
- ValidationUtils.validateStringArray(keys);
230
-
231
209
  if (!keys.length) {
232
210
  logger.warn({ tag: this.LOG_TAG, accountId, ...pathParams }, `${methodName} called with empty keys array`);
233
211
  return;
@@ -1,46 +1,48 @@
1
1
  import { AuthorizationAttributesMsService } from './authorization-attributes-ms-service';
2
2
  import { AuthorizationAttributesSnsService } from './authorization-attributes-sns-service';
3
- import { AuthorizationAttributesService as IAuthorizationAttributesService } from './types/authorization-attributes-service.interface';
3
+ import { BaseAuthorizationAttributesService as IAuthorizationAttributesService } from './base-authorization-attributes-service';
4
4
 
5
5
  /**
6
6
  * Main service class for managing resource and entity attributes.
7
- * Provides access to both direct (MS) and SNS operations.
7
+ * Provides access to both HTTP (direct microservice) and SNS (async messaging) operations.
8
8
  *
9
9
  * @example
10
10
  * const service = new AuthorizationAttributesService();
11
11
  *
12
- * // Use direct operations
13
- * await service.direct().upsertResourceAttributes(accountId, assignments);
12
+ * // Use HTTP operations (direct calls to microservice)
13
+ * await service.http().updateResourceAttributes(accountId, appName, actionId, operation);
14
14
  *
15
- * // Use SNS operations
16
- * await service.sns().upsertResourceAttributes(accountId, assignments, appName, actionId);
15
+ * // Use SNS operations (async messaging, then to microservice)
16
+ * await service.sns().updateResourceAttributes(accountId, appName, actionId, operation);
17
17
  * ```
18
18
  */
19
19
  export class AuthorizationAttributesService {
20
- private _directService: AuthorizationAttributesMsService | null = null;
21
- private _snsService: AuthorizationAttributesSnsService | null = null;
20
+ private httpService: AuthorizationAttributesMsService | null = null;
21
+ private snsService: AuthorizationAttributesSnsService | null = null;
22
22
 
23
23
  /**
24
- * Gets the direct (MS) service instance.
24
+ * Gets the HTTP service instance.
25
+ * Performs direct HTTP calls to the authorization microservice.
25
26
  * Initializes the service on first access (lazy initialization).
26
27
  * @returns IAuthorizationAttributesService instance
27
28
  */
28
- direct(): IAuthorizationAttributesService {
29
- if (this._directService === null) {
30
- this._directService = new AuthorizationAttributesMsService();
29
+ http(): IAuthorizationAttributesService {
30
+ if (this.httpService === null) {
31
+ this.httpService = new AuthorizationAttributesMsService();
31
32
  }
32
- return this._directService;
33
+ return this.httpService;
33
34
  }
34
35
 
35
36
  /**
36
37
  * Gets the SNS service instance.
38
+ * Sends operations via SNS messaging, which are then processed by the microservice asynchronously.
37
39
  * Initializes the service on first access (lazy initialization).
38
40
  * @returns IAuthorizationAttributesService instance
39
41
  */
40
42
  sns(): IAuthorizationAttributesService {
41
- if (this._snsService === null) {
42
- this._snsService = new AuthorizationAttributesSnsService();
43
+ if (this.snsService === null) {
44
+ this.snsService = new AuthorizationAttributesSnsService();
43
45
  }
44
- return this._snsService;
46
+ return this.snsService;
45
47
  }
46
48
  }
@@ -1,7 +1,6 @@
1
1
  import chunk from 'lodash/chunk.js';
2
2
  import { getTopicAttributes, sendToSns } from '@mondaydotcomorg/monday-sns';
3
3
  import {
4
- AttributeOperation,
5
4
  ResourceAttributeUpsertOperation,
6
5
  EntityAttributeUpsertOperation,
7
6
  EntityAttributeDeleteOperation,
@@ -20,16 +19,15 @@ import {
20
19
  ENTITY_SNS_DEV_TEST_NAME,
21
20
  SnsTopicType,
22
21
  } from './constants/sns';
23
- import { AuthorizationAttributesService } from './types/authorization-attributes-service.interface';
22
+ import { BaseAuthorizationAttributesService } from './base-authorization-attributes-service';
24
23
  import { EntityType } from './entity-attributes-constants';
25
- import { ValidationUtils } from './utils/validation';
26
24
  import type { TopicAttributesMap } from 'aws-sdk/clients/sns';
27
25
 
28
26
  /**
29
27
  * Service class for managing resource attributes asynchronously via SNS.
30
28
  * Provides asynchronous operations to create/update and delete attributes on resources.
31
29
  */
32
- export class AuthorizationAttributesSnsService implements AuthorizationAttributesService {
30
+ export class AuthorizationAttributesSnsService extends BaseAuthorizationAttributesService {
33
31
  private static LOG_TAG = 'authorization_attributes';
34
32
  private resourceSnsArn: string;
35
33
  private entitySnsArn: string;
@@ -38,6 +36,7 @@ export class AuthorizationAttributesSnsService implements AuthorizationAttribute
38
36
  * Public constructor to create the AuthorizationAttributesSnsService instance.
39
37
  */
40
38
  constructor() {
39
+ super();
41
40
  this.resourceSnsArn = AuthorizationAttributesSnsService.getSnsTopicArn(SnsTopicType.RESOURCE);
42
41
  this.entitySnsArn = AuthorizationAttributesSnsService.getSnsTopicArn(SnsTopicType.ENTITY);
43
42
  }
@@ -62,17 +61,11 @@ export class AuthorizationAttributesSnsService implements AuthorizationAttribute
62
61
  if (!appName || !callerActionIdentifier) {
63
62
  throw new Error('appName and callerActionIdentifier are required for SNS service');
64
63
  }
65
- ValidationUtils.validatDeleteResourceAssignment({
66
- resourceType: resource.type,
67
- resourceId: resource.id,
68
- key: attributeKey,
69
- });
70
- const operation: ResourceAttributeDeleteOperation = {
71
- resourceType: resource.type,
72
- resourceId: resource.id,
73
- key: attributeKey,
74
- operationType: AttributeOperation.DELETE,
75
- };
64
+ const operation: ResourceAttributeDeleteOperation = await super.deleteResourceAttributes(
65
+ accountId,
66
+ resource,
67
+ attributeKey
68
+ );
76
69
  const [result] = await this.sendOperationsToSns(
77
70
  this.resourceSnsArn,
78
71
  accountId,
@@ -108,13 +101,12 @@ export class AuthorizationAttributesSnsService implements AuthorizationAttribute
108
101
  if (!appName || !callerActionIdentifier) {
109
102
  throw new Error('appName and callerActionIdentifier are required for SNS service');
110
103
  }
111
- ValidationUtils.validatDeleteEntityAssignment({ entityId, entityType, key: attributeKey });
112
- const operation: EntityAttributeDeleteOperation = {
113
- entityType: entityType,
104
+ const operation: EntityAttributeDeleteOperation = await super.deleteEntityAttributes(
105
+ accountId,
106
+ entityType,
114
107
  entityId,
115
- key: attributeKey,
116
- operationType: AttributeOperation.DELETE,
117
- };
108
+ attributeKey
109
+ );
118
110
  const [result] = await this.sendOperationsToSns(
119
111
  this.entitySnsArn,
120
112
  accountId,
@@ -142,7 +134,7 @@ export class AuthorizationAttributesSnsService implements AuthorizationAttribute
142
134
  callerActionIdentifier: string,
143
135
  resourceAttributeOperation: ResourceAttributeUpsertOperation
144
136
  ): Promise<ResourceAttributeUpsertOperation> {
145
- ValidationUtils.validatUpsertResourceAssignment(resourceAttributeOperation);
137
+ await super.updateResourceAttributes(accountId, appName, callerActionIdentifier, resourceAttributeOperation);
146
138
  const [result] = await this.sendOperationsToSns(
147
139
  this.resourceSnsArn,
148
140
  accountId,
@@ -170,7 +162,7 @@ export class AuthorizationAttributesSnsService implements AuthorizationAttribute
170
162
  callerActionIdentifier: string,
171
163
  entityAttributeOperation: EntityAttributeUpsertOperation
172
164
  ): Promise<EntityAttributeUpsertOperation> {
173
- ValidationUtils.validatUpsertEntityAssignment(entityAttributeOperation);
165
+ await super.updateEntityAttributes(accountId, appName, callerActionIdentifier, entityAttributeOperation);
174
166
  const [result] = await this.sendOperationsToSns(
175
167
  this.entitySnsArn,
176
168
  accountId,
@@ -0,0 +1,90 @@
1
+ import { EntityType } from './entity-attributes-constants';
2
+ import {
3
+ ResourceAttributeDeleteOperation,
4
+ EntityAttributeDeleteOperation,
5
+ ResourceAttributeUpsertOperation,
6
+ EntityAttributeUpsertOperation,
7
+ AttributeOperation,
8
+ } from './types/authorization-attributes-contracts';
9
+ import { Resource } from './types/general';
10
+ import { ValidationUtils } from './utils/validation';
11
+
12
+ /**
13
+ * Abstract base class for authorization attributes operations.
14
+ * Both MS (HTTP) and SNS (async) services extend this class.
15
+ */
16
+ export abstract class BaseAuthorizationAttributesService {
17
+ /**
18
+ * Deletes a resource attribute.
19
+ * Returns Promise<ResourceAttributeDeleteOperation>
20
+ */
21
+ deleteResourceAttributes(
22
+ accountId: number,
23
+ resource: Resource,
24
+ attributeKey: string,
25
+ _appName?: string,
26
+ _callerActionIdentifier?: string
27
+ ): Promise<ResourceAttributeDeleteOperation> {
28
+ const operation: ResourceAttributeDeleteOperation = {
29
+ resourceType: resource.type,
30
+ resourceId: resource.id,
31
+ key: attributeKey,
32
+ operationType: AttributeOperation.DELETE,
33
+ };
34
+ ValidationUtils.validateInteger(accountId);
35
+ ValidationUtils.validatDeleteResourceAssignment(operation);
36
+ return Promise.resolve(operation);
37
+ }
38
+
39
+ /**
40
+ * Deletes an entity attribute.
41
+ * Returns Promise<EntityAttributeDeleteOperation>
42
+ */
43
+ deleteEntityAttributes(
44
+ accountId: number,
45
+ entityType: EntityType,
46
+ entityId: number,
47
+ attributeKey: string
48
+ ): Promise<EntityAttributeDeleteOperation> {
49
+ const operation: EntityAttributeDeleteOperation = {
50
+ entityType: entityType,
51
+ entityId: entityId,
52
+ key: attributeKey,
53
+ operationType: AttributeOperation.DELETE,
54
+ };
55
+ ValidationUtils.validateInteger(accountId);
56
+ ValidationUtils.validatDeleteEntityAssignment(operation);
57
+ return Promise.resolve(operation);
58
+ }
59
+
60
+ /**
61
+ * Updates a resource attribute (single operation - upsert only).
62
+ * For MS service: performs upsert operation
63
+ * For SNS service: returns Promise<ResourceAttributeUpsertOperation>
64
+ */
65
+ updateResourceAttributes(
66
+ accountId: number,
67
+ _appName: string,
68
+ _callerActionIdentifier: string,
69
+ resourceAttributeOperation: ResourceAttributeUpsertOperation
70
+ ): Promise<ResourceAttributeUpsertOperation> {
71
+ ValidationUtils.validateInteger(accountId);
72
+ ValidationUtils.validatUpsertResourceAssignment(resourceAttributeOperation);
73
+ return Promise.resolve(resourceAttributeOperation);
74
+ }
75
+ /**
76
+ * Updates an entity attribute (single operation - upsert only).
77
+ * For MS service: performs upsert operation
78
+ * For SNS service: returns Promise<EntityAttributeUpsertOperation>
79
+ */
80
+ updateEntityAttributes(
81
+ accountId: number,
82
+ _appName: string,
83
+ _callerActionIdentifier: string,
84
+ entityAttributeOperation: EntityAttributeUpsertOperation
85
+ ): Promise<EntityAttributeUpsertOperation> {
86
+ ValidationUtils.validateInteger(accountId);
87
+ ValidationUtils.validatUpsertEntityAssignment(entityAttributeOperation);
88
+ return Promise.resolve(entityAttributeOperation);
89
+ }
90
+ }
package/src/index.ts CHANGED
@@ -84,6 +84,6 @@ export {
84
84
  ResourceAttributeAssignment as ResourceAttributeAssignmentContract,
85
85
  EntityAttributeAssignment as EntityAttributeAssignmentContract,
86
86
  } from './types/authorization-attributes-contracts';
87
- export { AuthorizationAttributesService as IAuthorizationAttributesService } from './types/authorization-attributes-service.interface';
87
+ export { BaseAuthorizationAttributesService as IAuthorizationAttributesService } from './base-authorization-attributes-service';
88
88
 
89
89
  export { TestKit };
@@ -1,6 +1,7 @@
1
1
  import { ResourceType } from './resource-attributes-constants';
2
2
  import { BaseAttributeAssignment } from './base-attribute-assignment';
3
3
  import { ResourceAttributeAssignment as ResourceAttributeAssignmentContract } from './types/authorization-attributes-contracts';
4
+ import { ValidationUtils } from './utils/validation';
4
5
 
5
6
  export class ResourceAttributeAssignment extends BaseAttributeAssignment<
6
7
  ResourceType,
@@ -10,6 +11,12 @@ export class ResourceAttributeAssignment extends BaseAttributeAssignment<
10
11
  public readonly resourceType: ResourceType;
11
12
 
12
13
  constructor(resourceId: number, resourceType: ResourceType, attributeKey: string, attributeValue: string) {
14
+ ValidationUtils.validatUpsertResourceAssignment({
15
+ resourceId,
16
+ resourceType,
17
+ key: attributeKey,
18
+ value: attributeValue,
19
+ });
13
20
  super(resourceId, resourceType, attributeKey, attributeValue);
14
21
  this.resourceId = resourceId;
15
22
  this.resourceType = this.type;
@@ -22,6 +22,7 @@ export enum ResourceType {
22
22
  Document = 'document',
23
23
  Crm = 'crm',
24
24
  Feature = 'feature',
25
+ POST = 'post',
25
26
  }
26
27
 
27
28
  // Define the array of strings and use 'as const' to make its contents literal types
@@ -1,6 +1,7 @@
1
1
  import Ajv from 'ajv';
2
2
  import { EntityType } from '../entity-attributes-constants';
3
3
  import { ResourceType } from '../resource-attributes-constants';
4
+ import { AttributeOperation } from '../types/authorization-attributes-contracts';
4
5
 
5
6
  const ajv = new Ajv({ allErrors: true });
6
7
 
@@ -11,6 +12,7 @@ export const entityUpsertAssignmentSchema = ajv.compile({
11
12
  entityType: { type: 'string', enum: Object.values(EntityType) },
12
13
  key: { type: 'string', minLength: 1 },
13
14
  value: { type: 'string', minLength: 1 },
15
+ operationType: { type: 'string', enum: Object.values(AttributeOperation) },
14
16
  },
15
17
  required: ['entityId', 'entityType', 'key', 'value'],
16
18
  additionalProperties: false,
@@ -22,6 +24,7 @@ export const entityDeleteAssignmentSchema = ajv.compile({
22
24
  entityId: { type: 'number', multipleOf: 1 },
23
25
  entityType: { type: 'string', enum: Object.values(EntityType) },
24
26
  key: { type: 'string', minLength: 1 },
27
+ operationType: { type: 'string', enum: Object.values(AttributeOperation) },
25
28
  },
26
29
  required: ['entityId', 'entityType', 'key'],
27
30
  additionalProperties: false,
@@ -33,6 +36,7 @@ export const resourceDeleteAssignmentSchema = ajv.compile({
33
36
  resourceId: { type: 'number', multipleOf: 1 },
34
37
  resourceType: { type: 'string', enum: Object.values(ResourceType) },
35
38
  key: { type: 'string', minLength: 1 },
39
+ operationType: { type: 'string', enum: Object.values(AttributeOperation) },
36
40
  },
37
41
  required: ['resourceId', 'resourceType', 'key'],
38
42
  additionalProperties: false,
@@ -45,6 +49,7 @@ export const resourceUpsertAssignmentSchema = ajv.compile({
45
49
  resourceType: { type: 'string', enum: Object.values(ResourceType) },
46
50
  key: { type: 'string', minLength: 1 },
47
51
  value: { type: 'string', minLength: 1 },
52
+ operationType: { type: 'string', enum: Object.values(AttributeOperation) },
48
53
  },
49
54
  required: ['resourceId', 'resourceType', 'key', 'value'],
50
55
  additionalProperties: false,
@@ -76,7 +76,7 @@ export class ValidationUtils {
76
76
  static validatDeleteResourceAssignment(resource: ResourceAttributeDeleteAssignment): void {
77
77
  const valid = resourceDeleteAssignmentSchema(resource);
78
78
  if (!valid) {
79
- const errorMessage = this.formatValidationErrors(resourceUpsertAssignmentSchema.errors);
79
+ const errorMessage = this.formatValidationErrors(resourceDeleteAssignmentSchema.errors);
80
80
  throw new ArgumentError(
81
81
  errorMessage
82
82
  ? `Invalid resource attribute assignment: ${errorMessage}`
@@ -108,7 +108,7 @@ export class ValidationUtils {
108
108
  * Formats AJV validation errors into a readable error message
109
109
  */
110
110
  private static formatValidationErrors(errors: ErrorObject[] | null | undefined): string {
111
- if (!errors || errors.length === 0) {
111
+ if (!errors || !errors.length) {
112
112
  return '';
113
113
  }
114
114
 
@@ -1,32 +0,0 @@
1
- import { EntityType } from '../entity-attributes-constants';
2
- import { ResourceAttributeDeleteOperation, EntityAttributeDeleteOperation, ResourceAttributeUpsertOperation, EntityAttributeUpsertOperation } from './authorization-attributes-contracts';
3
- import { Resource } from './general';
4
- /**
5
- * Interface for authorization attributes operations.
6
- * Both MS (direct) and SNS (async) services implement this interface.
7
- */
8
- export interface AuthorizationAttributesService {
9
- /**
10
- * Deletes a resource attribute.
11
- * Returns Promise<ResourceAttributeDeleteOperation>
12
- */
13
- deleteResourceAttributes(accountId: number, resource: Resource, attributeKey: string, appName?: string, callerActionIdentifier?: string): Promise<ResourceAttributeDeleteOperation>;
14
- /**
15
- * Deletes an entity attribute.
16
- * Returns Promise<EntityAttributeDeleteOperation>
17
- */
18
- deleteEntityAttributes(accountId: number, entityType: EntityType | string, entityId: number, attributeKey: string, appName?: string, callerActionIdentifier?: string): Promise<EntityAttributeDeleteOperation>;
19
- /**
20
- * Updates a resource attribute (single operation - upsert only).
21
- * For MS service: performs upsert operation
22
- * For SNS service: returns Promise<ResourceAttributeUpsertOperation>
23
- */
24
- updateResourceAttributes(accountId: number, appName: string, callerActionIdentifier: string, resourceAttributeOperation: ResourceAttributeUpsertOperation): Promise<ResourceAttributeUpsertOperation>;
25
- /**
26
- * Updates an entity attribute (single operation - upsert only).
27
- * For MS service: performs upsert operation
28
- * For SNS service: returns Promise<EntityAttributeUpsertOperation>
29
- */
30
- updateEntityAttributes(accountId: number, appName: string, callerActionIdentifier: string, entityAttributeOperation: EntityAttributeUpsertOperation): Promise<EntityAttributeUpsertOperation>;
31
- }
32
- //# sourceMappingURL=authorization-attributes-service.interface.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"authorization-attributes-service.interface.d.ts","sourceRoot":"","sources":["../../../src/types/authorization-attributes-service.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EACL,gCAAgC,EAChC,8BAA8B,EAC9B,gCAAgC,EAChC,8BAA8B,EAC/B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC;;;GAGG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;;OAGG;IACH,wBAAwB,CACtB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,MAAM,EAChB,sBAAsB,CAAC,EAAE,MAAM,GAC9B,OAAO,CAAC,gCAAgC,CAAC,CAAC;IAE7C;;;OAGG;IACH,sBAAsB,CACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,GAAG,MAAM,EAC/B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,MAAM,EAChB,sBAAsB,CAAC,EAAE,MAAM,GAC9B,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAE3C;;;;OAIG;IACH,wBAAwB,CACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,sBAAsB,EAAE,MAAM,EAC9B,0BAA0B,EAAE,gCAAgC,GAC3D,OAAO,CAAC,gCAAgC,CAAC,CAAC;IAE7C;;;;OAIG;IACH,sBAAsB,CACpB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,sBAAsB,EAAE,MAAM,EAC9B,wBAAwB,EAAE,8BAA8B,GACvD,OAAO,CAAC,8BAA8B,CAAC,CAAC;CAC5C"}
@@ -1,32 +0,0 @@
1
- import { EntityType } from '../entity-attributes-constants';
2
- import { ResourceAttributeDeleteOperation, EntityAttributeDeleteOperation, ResourceAttributeUpsertOperation, EntityAttributeUpsertOperation } from './authorization-attributes-contracts';
3
- import { Resource } from './general';
4
- /**
5
- * Interface for authorization attributes operations.
6
- * Both MS (direct) and SNS (async) services implement this interface.
7
- */
8
- export interface AuthorizationAttributesService {
9
- /**
10
- * Deletes a resource attribute.
11
- * Returns Promise<ResourceAttributeDeleteOperation>
12
- */
13
- deleteResourceAttributes(accountId: number, resource: Resource, attributeKey: string, appName?: string, callerActionIdentifier?: string): Promise<ResourceAttributeDeleteOperation>;
14
- /**
15
- * Deletes an entity attribute.
16
- * Returns Promise<EntityAttributeDeleteOperation>
17
- */
18
- deleteEntityAttributes(accountId: number, entityType: EntityType | string, entityId: number, attributeKey: string, appName?: string, callerActionIdentifier?: string): Promise<EntityAttributeDeleteOperation>;
19
- /**
20
- * Updates a resource attribute (single operation - upsert only).
21
- * For MS service: performs upsert operation
22
- * For SNS service: returns Promise<ResourceAttributeUpsertOperation>
23
- */
24
- updateResourceAttributes(accountId: number, appName: string, callerActionIdentifier: string, resourceAttributeOperation: ResourceAttributeUpsertOperation): Promise<ResourceAttributeUpsertOperation>;
25
- /**
26
- * Updates an entity attribute (single operation - upsert only).
27
- * For MS service: performs upsert operation
28
- * For SNS service: returns Promise<EntityAttributeUpsertOperation>
29
- */
30
- updateEntityAttributes(accountId: number, appName: string, callerActionIdentifier: string, entityAttributeOperation: EntityAttributeUpsertOperation): Promise<EntityAttributeUpsertOperation>;
31
- }
32
- //# sourceMappingURL=authorization-attributes-service.interface.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"authorization-attributes-service.interface.d.ts","sourceRoot":"","sources":["../../src/types/authorization-attributes-service.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EACL,gCAAgC,EAChC,8BAA8B,EAC9B,gCAAgC,EAChC,8BAA8B,EAC/B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC;;;GAGG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;;OAGG;IACH,wBAAwB,CACtB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,MAAM,EAChB,sBAAsB,CAAC,EAAE,MAAM,GAC9B,OAAO,CAAC,gCAAgC,CAAC,CAAC;IAE7C;;;OAGG;IACH,sBAAsB,CACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,GAAG,MAAM,EAC/B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,MAAM,EAChB,sBAAsB,CAAC,EAAE,MAAM,GAC9B,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAE3C;;;;OAIG;IACH,wBAAwB,CACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,sBAAsB,EAAE,MAAM,EAC9B,0BAA0B,EAAE,gCAAgC,GAC3D,OAAO,CAAC,gCAAgC,CAAC,CAAC;IAE7C;;;;OAIG;IACH,sBAAsB,CACpB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,sBAAsB,EAAE,MAAM,EAC9B,wBAAwB,EAAE,8BAA8B,GACvD,OAAO,CAAC,8BAA8B,CAAC,CAAC;CAC5C"}
@@ -1,63 +0,0 @@
1
- import { EntityType } from '../entity-attributes-constants';
2
- import {
3
- ResourceAttributeDeleteOperation,
4
- EntityAttributeDeleteOperation,
5
- ResourceAttributeUpsertOperation,
6
- EntityAttributeUpsertOperation,
7
- } from './authorization-attributes-contracts';
8
- import { Resource } from './general';
9
-
10
- /**
11
- * Interface for authorization attributes operations.
12
- * Both MS (direct) and SNS (async) services implement this interface.
13
- */
14
- export interface AuthorizationAttributesService {
15
- /**
16
- * Deletes a resource attribute.
17
- * Returns Promise<ResourceAttributeDeleteOperation>
18
- */
19
- deleteResourceAttributes(
20
- accountId: number,
21
- resource: Resource,
22
- attributeKey: string,
23
- appName?: string,
24
- callerActionIdentifier?: string
25
- ): Promise<ResourceAttributeDeleteOperation>;
26
-
27
- /**
28
- * Deletes an entity attribute.
29
- * Returns Promise<EntityAttributeDeleteOperation>
30
- */
31
- deleteEntityAttributes(
32
- accountId: number,
33
- entityType: EntityType | string,
34
- entityId: number,
35
- attributeKey: string,
36
- appName?: string,
37
- callerActionIdentifier?: string
38
- ): Promise<EntityAttributeDeleteOperation>;
39
-
40
- /**
41
- * Updates a resource attribute (single operation - upsert only).
42
- * For MS service: performs upsert operation
43
- * For SNS service: returns Promise<ResourceAttributeUpsertOperation>
44
- */
45
- updateResourceAttributes(
46
- accountId: number,
47
- appName: string,
48
- callerActionIdentifier: string,
49
- resourceAttributeOperation: ResourceAttributeUpsertOperation
50
- ): Promise<ResourceAttributeUpsertOperation>;
51
-
52
- /**
53
- * Updates an entity attribute (single operation - upsert only).
54
- * For MS service: performs upsert operation
55
- * For SNS service: returns Promise<EntityAttributeUpsertOperation>
56
- */
57
- updateEntityAttributes(
58
- accountId: number,
59
- appName: string,
60
- callerActionIdentifier: string,
61
- entityAttributeOperation: EntityAttributeUpsertOperation
62
- ): Promise<EntityAttributeUpsertOperation>;
63
- }