@doctorus/common 0.0.1 → 0.0.2

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
@@ -1 +1,391 @@
1
- # replace this
1
+ # @doctorus/common
2
+
3
+ Common TypeScript utilities for Doctorus - A shared library for managing operations, SSM parameters, and access control across infrastructure stacks and frontend applications.
4
+
5
+ [![npm version](https://img.shields.io/npm/v/@doctorus/common.svg)](https://www.npmjs.com/package/@doctorus/common)
6
+ [![License](https://img.shields.io/npm/l/@doctorus/common.svg)](https://github.com/DoctorusRepoOwner/common/blob/main/LICENSE)
7
+
8
+ ## Installation
9
+
10
+ ```bash
11
+ npm install @doctorus/common
12
+ # or
13
+ pnpm add @doctorus/common
14
+ # or
15
+ yarn add @doctorus/common
16
+ ```
17
+
18
+ ## Features
19
+
20
+ - 🔐 **Operations Module** - Resource-Action pattern for access control and audit logging
21
+ - 🗄️ **SSM Parameters** - AWS SSM Parameter Store utilities with environment support
22
+ - 📋 **Type Safety** - Full TypeScript support with comprehensive type definitions
23
+ - 🏥 **Medical & Public Resources** - Separate categorization for HIPAA compliance
24
+ - ✅ **100% Test Coverage** - Thoroughly tested and production-ready
25
+
26
+ ## Modules
27
+
28
+ ### 1. Operations Module
29
+
30
+ Manage operations in `RESOURCE:ACTION` format for access control, audit logging, and permission management.
31
+
32
+ #### Basic Usage
33
+
34
+ ```typescript
35
+ import { Operation, Operations, Resource, Action } from '@doctorus/common';
36
+
37
+ // Use predefined operations
38
+ const operation = Operations.PATIENT_READ;
39
+ console.log(operation.toString()); // "PATIENT:READ"
40
+
41
+ // Create custom operations
42
+ const customOp = new Operation(Resource.PRESCRIPTION, Action.PRESCRIBE);
43
+ console.log(customOp.toString()); // "PRESCRIPTION:PRESCRIBE"
44
+
45
+ // Parse from string
46
+ const parsed = Operation.fromString("MEDICAL_SERVICE:SCHEDULE");
47
+ if (parsed) {
48
+ console.log(parsed.resource); // Resource.MEDICAL_SERVICE
49
+ console.log(parsed.action); // Action.SCHEDULE
50
+ }
51
+
52
+ // Compare operations
53
+ const op1 = Operations.PATIENT_READ;
54
+ const op2 = Operations.PATIENT_READ;
55
+ console.log(op1.equals(op2)); // true
56
+
57
+ // Convert to JSON
58
+ const json = operation.toJSON();
59
+ // { resource: "PATIENT", action: "READ", operation: "PATIENT:READ" }
60
+ ```
61
+
62
+ #### Resources
63
+
64
+ Resources are categorized as **Medical** (require special access control) or **Public** (standard access control):
65
+
66
+ **Medical Resources:**
67
+ - Patient: `PATIENT`, `PATIENT_MEDICAL_NOTES`, `PATIENT_MEDICAL_PROPERTIES`, `PATIENT_PAYMENT`
68
+ - Medical Services: `MEDICAL_SERVICE`, `MEDICAL_SERVICE_NOTE`, `MEDICAL_SERVICE_SCHEDULE`, `MEDICAL_SERVICE_FEES`, `MEDICAL_SERVICE_STATUS`
69
+ - Clinical: `MEDICAL_RECORD`, `MEDICAL_HISTORY`, `PRESCRIPTION`, `DIAGNOSIS`, `OBSERVATION`, `MEDICATION`, `ALLERGY`, `IMMUNIZATION`, `PROCEDURE`
70
+ - Measurements: `CLINICAL_NOTE`, `VITAL_SIGNS`, `MEASURE_MODEL`, `CALCULATED_MEASURE_MODEL`
71
+ - Diagnostics: `LAB_RESULT`, `IMAGING`
72
+
73
+ **Public Resources:**
74
+ - Account: `ACCOUNT`, `ACCOUNT_OWNERSHIP`, `ACCOUNT_PREFERENCES`
75
+ - User: `USER`, `CONTACT`
76
+ - Documents: `UPLOADED_DOCUMENT`, `DOCUMENT_LAYOUT`, `GENERATED_DOCUMENT`, `DOCUMENT_MODEL`, `SNIPPET`
77
+ - System: `NOTIFICATION`, `REPORT`, `AUDIT_LOG`, `SYSTEM`, `SETTINGS`, `MEMBERSHIP`, `LOCATION`, `TASK_TYPE`
78
+
79
+ #### Actions
80
+
81
+ ```typescript
82
+ // CRUD operations
83
+ Action.CREATE, Action.READ, Action.UPDATE, Action.DELETE, Action.PUT, Action.LIST
84
+
85
+ // General actions
86
+ Action.MANAGE, Action.VIEW, Action.SEARCH
87
+
88
+ // Medical-specific actions
89
+ Action.PRESCRIBE, Action.DIAGNOSE, Action.SIGN, Action.VERIFY,
90
+ Action.SCHEDULE, Action.CANCEL, Action.APPROVE, Action.REJECT
91
+
92
+ // Medical service actions
93
+ Action.SET_MEDICAL_SERVICE_STATUS, Action.SET_MEDICAL_SERVICE_FEES
94
+
95
+ // Patient-specific actions
96
+ Action.UPDATE_STATUS, Action.VIEW_PATIENTS,
97
+ Action.PUT_PATIENT_PAYMENT, Action.DELETE_PATIENT_PAYMENT
98
+
99
+ // Data operations
100
+ Action.EXPORT, Action.IMPORT, Action.ARCHIVE, Action.RESTORE,
101
+ Action.SHARE, Action.DOWNLOAD, Action.UPLOAD
102
+
103
+ // System operations
104
+ Action.LOGIN, Action.LOGOUT, Action.CONFIGURE, Action.AUDIT
105
+ ```
106
+
107
+ #### Helper Functions
108
+
109
+ ```typescript
110
+ import {
111
+ isMedicalResource,
112
+ isPublicResource,
113
+ getAllOperations,
114
+ getOperationsByResource,
115
+ getOperationsByAction
116
+ } from '@doctorus/common';
117
+
118
+ // Check resource type
119
+ if (isMedicalResource(Resource.PATIENT)) {
120
+ // Apply HIPAA-compliant access controls
121
+ }
122
+
123
+ if (isPublicResource(Resource.USER)) {
124
+ // Apply standard access controls
125
+ }
126
+
127
+ // Get all predefined operations
128
+ const allOps = getAllOperations();
129
+
130
+ // Filter operations by resource
131
+ const patientOps = getOperationsByResource(Resource.PATIENT);
132
+ // [PATIENT_CREATE, PATIENT_READ, PATIENT_UPDATE, ...]
133
+
134
+ // Filter operations by action
135
+ const createOps = getOperationsByAction(Action.CREATE);
136
+ // [PATIENT_CREATE, USER_CREATE, MEDICAL_RECORD_CREATE, ...]
137
+ ```
138
+
139
+ #### Predefined Operations
140
+
141
+ Commonly used operations are predefined for convenience:
142
+
143
+ ```typescript
144
+ // Account operations
145
+ Operations.ACCOUNT_CREATE, Operations.ACCOUNT_READ, Operations.ACCOUNT_UPDATE,
146
+ Operations.ACCOUNT_DELETE, Operations.ACCOUNT_MANAGE
147
+
148
+ // Patient operations
149
+ Operations.PATIENT_CREATE, Operations.PATIENT_READ, Operations.PATIENT_UPDATE,
150
+ Operations.PATIENT_DELETE, Operations.PATIENT_LIST, Operations.PATIENT_VIEW,
151
+ Operations.PATIENT_UPDATE_STATUS
152
+
153
+ // Medical service operations
154
+ Operations.MEDICAL_SERVICE_CREATE, Operations.MEDICAL_SERVICE_READ,
155
+ Operations.MEDICAL_SERVICE_UPDATE, Operations.MEDICAL_SERVICE_DELETE,
156
+ Operations.MEDICAL_SERVICE_MANAGE, Operations.MEDICAL_SERVICE_SCHEDULE,
157
+ Operations.MEDICAL_SERVICE_CANCEL, Operations.MEDICAL_SERVICE_SET_STATUS,
158
+ Operations.MEDICAL_SERVICE_SET_FEES
159
+
160
+ // Prescription operations
161
+ Operations.PRESCRIPTION_CREATE, Operations.PRESCRIPTION_READ,
162
+ Operations.PRESCRIPTION_UPDATE, Operations.PRESCRIPTION_SIGN,
163
+ Operations.PRESCRIPTION_PRESCRIBE
164
+
165
+ // User operations
166
+ Operations.USER_CREATE, Operations.USER_READ, Operations.USER_UPDATE,
167
+ Operations.USER_DELETE, Operations.USER_LOGIN, Operations.USER_LOGOUT
168
+
169
+ // ... and many more
170
+ ```
171
+
172
+ ### 2. SSM Parameters Module
173
+
174
+ Utilities for managing AWS SSM Parameter Store keys with environment support.
175
+
176
+ #### Basic Usage
177
+
178
+ ```typescript
179
+ import {
180
+ SSM_PARAM_KEY,
181
+ buildSSMPath,
182
+ buildSSMPathWithPrefix,
183
+ extractEnvFromPath,
184
+ extractKeyFromPath,
185
+ isEnvAgnostic
186
+ } from '@doctorus/common';
187
+
188
+ // Build environment-specific path
189
+ const path = buildSSMPath('prod', SSM_PARAM_KEY.COGNITO_USER_POOL_ID);
190
+ console.log(path); // "/prod/user-pool-id"
191
+
192
+ // Build environment-agnostic path (for shared/central account parameters)
193
+ const sharedPath = buildSSMPath(null, SSM_PARAM_KEY.DB_USER);
194
+ console.log(sharedPath); // "/db-user"
195
+
196
+ // Build path with custom prefix
197
+ const customPath = buildSSMPathWithPrefix(
198
+ '/myapp/prod',
199
+ SSM_PARAM_KEY.GRAPHQL_API_ID
200
+ );
201
+ console.log(customPath); // "/myapp/prod/graphql-api-id"
202
+
203
+ // Extract environment from path
204
+ const env = extractEnvFromPath('/prod/user-pool-id');
205
+ console.log(env); // "prod"
206
+
207
+ // Extract key from path
208
+ const key = extractKeyFromPath('/prod/user-pool-id');
209
+ console.log(key); // SSM_PARAM_KEY.COGNITO_USER_POOL_ID
210
+
211
+ // Check if path is environment-agnostic
212
+ console.log(isEnvAgnostic('/db-user')); // true
213
+ console.log(isEnvAgnostic('/prod/user-pool-id')); // false
214
+ ```
215
+
216
+ #### Available SSM Parameter Keys
217
+
218
+ ```typescript
219
+ SSM_PARAM_KEY.COGNITO_USER_POOL_ID
220
+ SSM_PARAM_KEY.COGNITO_USER_POOL_WEB_CLIENT_ID
221
+ SSM_PARAM_KEY.COGNITO_OAUTH_DOMAIN
222
+ SSM_PARAM_KEY.RUM_GUEST_ROLE_ARN
223
+ SSM_PARAM_KEY.RUM_IDENTITY_POOL_ID
224
+ SSM_PARAM_KEY.RUM_APP_ID
225
+ SSM_PARAM_KEY.GRAPHQL_HTTP_URL
226
+ SSM_PARAM_KEY.GRAPHQL_WS_URL
227
+ SSM_PARAM_KEY.GRAPHQL_HOST
228
+ SSM_PARAM_KEY.GRAPHQL_API_ID
229
+ SSM_PARAM_KEY.MEDICAL_ASSETS_AWS_CLOUDFRONT_PRIVATE_KEY
230
+ SSM_PARAM_KEY.MEDICAL_ASSETS_AWS_CLOUDFRONT_KEY_ID
231
+ SSM_PARAM_KEY.MEDICAL_ASSETS_BUCKET_NAME
232
+ SSM_PARAM_KEY.PUBLIC_ASSETS_BUCKET_NAME
233
+ SSM_PARAM_KEY.DB_USER
234
+ SSM_PARAM_KEY.DB_PASSWORD
235
+ SSM_PARAM_KEY.MEDICAL_ASSETS_DISTRIBUTION_DOMAIN_NAME
236
+ SSM_PARAM_KEY.BASE_HOST
237
+ SSM_PARAM_KEY.EMAIL_FROM_ADDRESS
238
+ SSM_PARAM_KEY.EVENT_API_REAL_TIME_DNS
239
+ SSM_PARAM_KEY.EVENT_API_HTTP_DNS
240
+ SSM_PARAM_KEY.NOTIFIED_EVENT_ACTIONS
241
+ ```
242
+
243
+ ## Use Cases
244
+
245
+ ### 1. Access Control
246
+
247
+ ```typescript
248
+ import { Operation, isMedicalResource } from '@doctorus/common';
249
+
250
+ function checkPermission(userPermissions: string[], operation: Operation): boolean {
251
+ // Check if user has permission for this operation
252
+ const hasPermission = userPermissions.includes(operation.toString());
253
+
254
+ // Apply additional checks for medical resources
255
+ if (isMedicalResource(operation.resource)) {
256
+ // Enforce HIPAA compliance, additional logging, etc.
257
+ return hasPermission && user.hasHIPAAAccess;
258
+ }
259
+
260
+ return hasPermission;
261
+ }
262
+
263
+ // Usage
264
+ const canRead = checkPermission(
265
+ userPermissions,
266
+ Operations.PATIENT_READ
267
+ );
268
+ ```
269
+
270
+ ### 2. Audit Logging
271
+
272
+ ```typescript
273
+ import { Operation, Operations } from '@doctorus/common';
274
+
275
+ interface AuditLog {
276
+ timestamp: Date;
277
+ userId: string;
278
+ operation: string;
279
+ resourceId: string;
280
+ success: boolean;
281
+ }
282
+
283
+ function logAudit(
284
+ userId: string,
285
+ operation: Operation,
286
+ resourceId: string,
287
+ success: boolean
288
+ ) {
289
+ const log: AuditLog = {
290
+ timestamp: new Date(),
291
+ userId,
292
+ operation: operation.toString(),
293
+ resourceId,
294
+ success
295
+ };
296
+
297
+ // Store in audit log database
298
+ auditLogService.create(log);
299
+ }
300
+
301
+ // Usage
302
+ logAudit('user123', Operations.PRESCRIPTION_PRESCRIBE, 'rx-456', true);
303
+ ```
304
+
305
+ ### 3. Infrastructure Configuration
306
+
307
+ ```typescript
308
+ import { buildSSMPath, SSM_PARAM_KEY } from '@doctorus/common';
309
+ import { StringParameter } from 'aws-cdk-lib/aws-ssm';
310
+
311
+ // In your CDK stack
312
+ const env = 'prod';
313
+
314
+ const userPoolId = StringParameter.valueFromLookup(
315
+ this,
316
+ buildSSMPath(env, SSM_PARAM_KEY.COGNITO_USER_POOL_ID)
317
+ );
318
+
319
+ const graphqlUrl = StringParameter.valueFromLookup(
320
+ this,
321
+ buildSSMPath(env, SSM_PARAM_KEY.GRAPHQL_HTTP_URL)
322
+ );
323
+ ```
324
+
325
+ ### 4. Frontend Configuration
326
+
327
+ ```typescript
328
+ import { buildSSMPath, SSM_PARAM_KEY } from '@doctorus/common';
329
+ import { SSM } from '@aws-sdk/client-ssm';
330
+
331
+ async function loadConfig(environment: string) {
332
+ const ssm = new SSM();
333
+
334
+ const params = [
335
+ SSM_PARAM_KEY.COGNITO_USER_POOL_ID,
336
+ SSM_PARAM_KEY.GRAPHQL_HTTP_URL,
337
+ SSM_PARAM_KEY.RUM_APP_ID
338
+ ];
339
+
340
+ const config: Record<string, string> = {};
341
+
342
+ for (const param of params) {
343
+ const path = buildSSMPath(environment, param);
344
+ const response = await ssm.getParameter({ Name: path });
345
+ config[param] = response.Parameter?.Value || '';
346
+ }
347
+
348
+ return config;
349
+ }
350
+ ```
351
+
352
+ ## Development
353
+
354
+ ```bash
355
+ # Install dependencies
356
+ pnpm install
357
+
358
+ # Run tests
359
+ pnpm test
360
+
361
+ # Build
362
+ pnpm build
363
+
364
+ # Run projen (regenerate configuration)
365
+ pnpm projen
366
+ ```
367
+
368
+ ## Testing
369
+
370
+ The library includes comprehensive tests with 100% coverage:
371
+
372
+ ```bash
373
+ pnpm test
374
+ ```
375
+
376
+ ## Contributing
377
+
378
+ Contributions are welcome! Please feel free to submit a Pull Request.
379
+
380
+ ## License
381
+
382
+ Apache-2.0
383
+
384
+ ## Related
385
+
386
+ - [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)
387
+ - [AWS CDK](https://aws.amazon.com/cdk/)
388
+
389
+ ---
390
+
391
+ Built with ❤️ for Doctorus
package/lib/index.d.ts CHANGED
@@ -1,4 +1,2 @@
1
- export declare class Hello {
2
- sayHello(): string;
3
- }
4
1
  export * from "./ssm";
2
+ export * from "./operations";
package/lib/index.js CHANGED
@@ -14,13 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.Hello = void 0;
18
- class Hello {
19
- sayHello() {
20
- return "hello, world!";
21
- }
22
- }
23
- exports.Hello = Hello;
24
- // Export SSM module
25
17
  __exportStar(require("./ssm"), exports);
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxNQUFhLEtBQUs7SUFDVCxRQUFRO1FBQ2IsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBSkQsc0JBSUM7QUFFRCxvQkFBb0I7QUFDcEIsd0NBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEhlbGxvIHtcbiAgcHVibGljIHNheUhlbGxvKCkge1xuICAgIHJldHVybiBcImhlbGxvLCB3b3JsZCFcIjtcbiAgfVxufVxuXG4vLyBFeHBvcnQgU1NNIG1vZHVsZVxuZXhwb3J0ICogZnJvbSBcIi4vc3NtXCI7XG4iXX0=
18
+ __exportStar(require("./operations"), exports);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdDQUFzQjtBQUN0QiwrQ0FBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9zc21cIjtcbmV4cG9ydCAqIGZyb20gXCIuL29wZXJhdGlvbnNcIjtcbiJdfQ==
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Action types for operations
3
+ */
4
+ export declare enum Action {
5
+ CREATE = "CREATE",
6
+ READ = "READ",
7
+ UPDATE = "UPDATE",
8
+ DELETE = "DELETE",
9
+ PUT = "PUT",
10
+ LIST = "LIST",
11
+ MANAGE = "MANAGE",
12
+ VIEW = "VIEW",
13
+ SEARCH = "SEARCH",
14
+ GRANT = "GRANT",
15
+ REVOKE = "REVOKE",
16
+ PRESCRIBE = "PRESCRIBE",
17
+ DIAGNOSE = "DIAGNOSE",
18
+ SCHEDULE = "SCHEDULE",
19
+ CANCEL = "CANCEL",
20
+ APPROVE = "APPROVE",
21
+ REJECT = "REJECT",
22
+ SIGN = "SIGN",
23
+ VERIFY = "VERIFY",
24
+ SET_MEDICAL_SERVICE_STATUS = "SET_MEDICAL_SERVICE_STATUS",
25
+ SET_MEDICAL_SERVICE_FEES = "SET_MEDICAL_SERVICE_FEES",
26
+ UPDATE_STATUS = "UPDATE_STATUS",
27
+ VIEW_PATIENTS = "VIEW_PATIENTS",
28
+ PUT_PATIENT_PAYMENT = "PUT_PATIENT_PAYMENT",
29
+ DELETE_PATIENT_PAYMENT = "DELETE_PATIENT_PAYMENT",
30
+ EXPORT = "EXPORT",
31
+ IMPORT = "IMPORT",
32
+ ARCHIVE = "ARCHIVE",
33
+ RESTORE = "RESTORE",
34
+ SHARE = "SHARE",
35
+ DOWNLOAD = "DOWNLOAD",
36
+ UPLOAD = "UPLOAD",
37
+ LOGIN = "LOGIN",
38
+ LOGOUT = "LOGOUT",
39
+ CONFIGURE = "CONFIGURE",
40
+ AUDIT = "AUDIT"
41
+ }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Action = void 0;
4
+ /**
5
+ * Action types for operations
6
+ */
7
+ var Action;
8
+ (function (Action) {
9
+ // CRUD operations
10
+ Action["CREATE"] = "CREATE";
11
+ Action["READ"] = "READ";
12
+ Action["UPDATE"] = "UPDATE";
13
+ Action["DELETE"] = "DELETE";
14
+ Action["PUT"] = "PUT";
15
+ Action["LIST"] = "LIST";
16
+ // General actions
17
+ Action["MANAGE"] = "MANAGE";
18
+ Action["VIEW"] = "VIEW";
19
+ Action["SEARCH"] = "SEARCH";
20
+ // Access control
21
+ Action["GRANT"] = "GRANT";
22
+ Action["REVOKE"] = "REVOKE";
23
+ // Medical specific
24
+ Action["PRESCRIBE"] = "PRESCRIBE";
25
+ Action["DIAGNOSE"] = "DIAGNOSE";
26
+ Action["SCHEDULE"] = "SCHEDULE";
27
+ Action["CANCEL"] = "CANCEL";
28
+ Action["APPROVE"] = "APPROVE";
29
+ Action["REJECT"] = "REJECT";
30
+ Action["SIGN"] = "SIGN";
31
+ Action["VERIFY"] = "VERIFY";
32
+ // Medical service specific
33
+ Action["SET_MEDICAL_SERVICE_STATUS"] = "SET_MEDICAL_SERVICE_STATUS";
34
+ Action["SET_MEDICAL_SERVICE_FEES"] = "SET_MEDICAL_SERVICE_FEES";
35
+ // Patient specific
36
+ Action["UPDATE_STATUS"] = "UPDATE_STATUS";
37
+ Action["VIEW_PATIENTS"] = "VIEW_PATIENTS";
38
+ Action["PUT_PATIENT_PAYMENT"] = "PUT_PATIENT_PAYMENT";
39
+ Action["DELETE_PATIENT_PAYMENT"] = "DELETE_PATIENT_PAYMENT";
40
+ // Data operations
41
+ Action["EXPORT"] = "EXPORT";
42
+ Action["IMPORT"] = "IMPORT";
43
+ Action["ARCHIVE"] = "ARCHIVE";
44
+ Action["RESTORE"] = "RESTORE";
45
+ Action["SHARE"] = "SHARE";
46
+ Action["DOWNLOAD"] = "DOWNLOAD";
47
+ Action["UPLOAD"] = "UPLOAD";
48
+ // System operations
49
+ Action["LOGIN"] = "LOGIN";
50
+ Action["LOGOUT"] = "LOGOUT";
51
+ Action["CONFIGURE"] = "CONFIGURE";
52
+ Action["AUDIT"] = "AUDIT";
53
+ })(Action || (exports.Action = Action = {}));
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVyYXRpb25zL2FjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0dBRUc7QUFDSCxJQUFZLE1Bb0RYO0FBcERELFdBQVksTUFBTTtJQUNoQixrQkFBa0I7SUFDbEIsMkJBQWlCLENBQUE7SUFDakIsdUJBQWEsQ0FBQTtJQUNiLDJCQUFpQixDQUFBO0lBQ2pCLDJCQUFpQixDQUFBO0lBQ2pCLHFCQUFXLENBQUE7SUFDWCx1QkFBYSxDQUFBO0lBRWIsa0JBQWtCO0lBQ2xCLDJCQUFpQixDQUFBO0lBQ2pCLHVCQUFhLENBQUE7SUFDYiwyQkFBaUIsQ0FBQTtJQUVqQixpQkFBaUI7SUFDakIseUJBQWUsQ0FBQTtJQUNmLDJCQUFpQixDQUFBO0lBRWpCLG1CQUFtQjtJQUNuQixpQ0FBdUIsQ0FBQTtJQUN2QiwrQkFBcUIsQ0FBQTtJQUNyQiwrQkFBcUIsQ0FBQTtJQUNyQiwyQkFBaUIsQ0FBQTtJQUNqQiw2QkFBbUIsQ0FBQTtJQUNuQiwyQkFBaUIsQ0FBQTtJQUNqQix1QkFBYSxDQUFBO0lBQ2IsMkJBQWlCLENBQUE7SUFFakIsMkJBQTJCO0lBQzNCLG1FQUF5RCxDQUFBO0lBQ3pELCtEQUFxRCxDQUFBO0lBRXJELG1CQUFtQjtJQUNuQix5Q0FBK0IsQ0FBQTtJQUMvQix5Q0FBK0IsQ0FBQTtJQUMvQixxREFBMkMsQ0FBQTtJQUMzQywyREFBaUQsQ0FBQTtJQUVqRCxrQkFBa0I7SUFDbEIsMkJBQWlCLENBQUE7SUFDakIsMkJBQWlCLENBQUE7SUFDakIsNkJBQW1CLENBQUE7SUFDbkIsNkJBQW1CLENBQUE7SUFDbkIseUJBQWUsQ0FBQTtJQUNmLCtCQUFxQixDQUFBO0lBQ3JCLDJCQUFpQixDQUFBO0lBRWpCLG9CQUFvQjtJQUNwQix5QkFBZSxDQUFBO0lBQ2YsMkJBQWlCLENBQUE7SUFDakIsaUNBQXVCLENBQUE7SUFDdkIseUJBQWUsQ0FBQTtBQUNqQixDQUFDLEVBcERXLE1BQU0sc0JBQU4sTUFBTSxRQW9EakIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFjdGlvbiB0eXBlcyBmb3Igb3BlcmF0aW9uc1xuICovXG5leHBvcnQgZW51bSBBY3Rpb24ge1xuICAvLyBDUlVEIG9wZXJhdGlvbnNcbiAgQ1JFQVRFID0gXCJDUkVBVEVcIixcbiAgUkVBRCA9IFwiUkVBRFwiLFxuICBVUERBVEUgPSBcIlVQREFURVwiLFxuICBERUxFVEUgPSBcIkRFTEVURVwiLFxuICBQVVQgPSBcIlBVVFwiLFxuICBMSVNUID0gXCJMSVNUXCIsXG5cbiAgLy8gR2VuZXJhbCBhY3Rpb25zXG4gIE1BTkFHRSA9IFwiTUFOQUdFXCIsXG4gIFZJRVcgPSBcIlZJRVdcIixcbiAgU0VBUkNIID0gXCJTRUFSQ0hcIixcblxuICAvLyBBY2Nlc3MgY29udHJvbFxuICBHUkFOVCA9IFwiR1JBTlRcIixcbiAgUkVWT0tFID0gXCJSRVZPS0VcIixcblxuICAvLyBNZWRpY2FsIHNwZWNpZmljXG4gIFBSRVNDUklCRSA9IFwiUFJFU0NSSUJFXCIsXG4gIERJQUdOT1NFID0gXCJESUFHTk9TRVwiLFxuICBTQ0hFRFVMRSA9IFwiU0NIRURVTEVcIixcbiAgQ0FOQ0VMID0gXCJDQU5DRUxcIixcbiAgQVBQUk9WRSA9IFwiQVBQUk9WRVwiLFxuICBSRUpFQ1QgPSBcIlJFSkVDVFwiLFxuICBTSUdOID0gXCJTSUdOXCIsXG4gIFZFUklGWSA9IFwiVkVSSUZZXCIsXG5cbiAgLy8gTWVkaWNhbCBzZXJ2aWNlIHNwZWNpZmljXG4gIFNFVF9NRURJQ0FMX1NFUlZJQ0VfU1RBVFVTID0gXCJTRVRfTUVESUNBTF9TRVJWSUNFX1NUQVRVU1wiLFxuICBTRVRfTUVESUNBTF9TRVJWSUNFX0ZFRVMgPSBcIlNFVF9NRURJQ0FMX1NFUlZJQ0VfRkVFU1wiLFxuXG4gIC8vIFBhdGllbnQgc3BlY2lmaWNcbiAgVVBEQVRFX1NUQVRVUyA9IFwiVVBEQVRFX1NUQVRVU1wiLFxuICBWSUVXX1BBVElFTlRTID0gXCJWSUVXX1BBVElFTlRTXCIsXG4gIFBVVF9QQVRJRU5UX1BBWU1FTlQgPSBcIlBVVF9QQVRJRU5UX1BBWU1FTlRcIixcbiAgREVMRVRFX1BBVElFTlRfUEFZTUVOVCA9IFwiREVMRVRFX1BBVElFTlRfUEFZTUVOVFwiLFxuXG4gIC8vIERhdGEgb3BlcmF0aW9uc1xuICBFWFBPUlQgPSBcIkVYUE9SVFwiLFxuICBJTVBPUlQgPSBcIklNUE9SVFwiLFxuICBBUkNISVZFID0gXCJBUkNISVZFXCIsXG4gIFJFU1RPUkUgPSBcIlJFU1RPUkVcIixcbiAgU0hBUkUgPSBcIlNIQVJFXCIsXG4gIERPV05MT0FEID0gXCJET1dOTE9BRFwiLFxuICBVUExPQUQgPSBcIlVQTE9BRFwiLFxuXG4gIC8vIFN5c3RlbSBvcGVyYXRpb25zXG4gIExPR0lOID0gXCJMT0dJTlwiLFxuICBMT0dPVVQgPSBcIkxPR09VVFwiLFxuICBDT05GSUdVUkUgPSBcIkNPTkZJR1VSRVwiLFxuICBBVURJVCA9IFwiQVVESVRcIixcbn1cbiJdfQ==
@@ -0,0 +1,4 @@
1
+ export { Resource, MEDICAL_RESOURCES, PUBLIC_RESOURCES, isMedicalResource, isPublicResource, } from "./resources";
2
+ export { Action } from "./actions";
3
+ export { Operation } from "./operation";
4
+ export { Operations, getAllOperations, getOperationsByResource, getOperationsByAction, } from "./predefined";
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getOperationsByAction = exports.getOperationsByResource = exports.getAllOperations = exports.Operations = exports.Operation = exports.Action = exports.isPublicResource = exports.isMedicalResource = exports.PUBLIC_RESOURCES = exports.MEDICAL_RESOURCES = exports.Resource = void 0;
4
+ var resources_1 = require("./resources");
5
+ Object.defineProperty(exports, "Resource", { enumerable: true, get: function () { return resources_1.Resource; } });
6
+ Object.defineProperty(exports, "MEDICAL_RESOURCES", { enumerable: true, get: function () { return resources_1.MEDICAL_RESOURCES; } });
7
+ Object.defineProperty(exports, "PUBLIC_RESOURCES", { enumerable: true, get: function () { return resources_1.PUBLIC_RESOURCES; } });
8
+ Object.defineProperty(exports, "isMedicalResource", { enumerable: true, get: function () { return resources_1.isMedicalResource; } });
9
+ Object.defineProperty(exports, "isPublicResource", { enumerable: true, get: function () { return resources_1.isPublicResource; } });
10
+ var actions_1 = require("./actions");
11
+ Object.defineProperty(exports, "Action", { enumerable: true, get: function () { return actions_1.Action; } });
12
+ var operation_1 = require("./operation");
13
+ Object.defineProperty(exports, "Operation", { enumerable: true, get: function () { return operation_1.Operation; } });
14
+ var predefined_1 = require("./predefined");
15
+ Object.defineProperty(exports, "Operations", { enumerable: true, get: function () { return predefined_1.Operations; } });
16
+ Object.defineProperty(exports, "getAllOperations", { enumerable: true, get: function () { return predefined_1.getAllOperations; } });
17
+ Object.defineProperty(exports, "getOperationsByResource", { enumerable: true, get: function () { return predefined_1.getOperationsByResource; } });
18
+ Object.defineProperty(exports, "getOperationsByAction", { enumerable: true, get: function () { return predefined_1.getOperationsByAction; } });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3BlcmF0aW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FNcUI7QUFMbkIscUdBQUEsUUFBUSxPQUFBO0FBQ1IsOEdBQUEsaUJBQWlCLE9BQUE7QUFDakIsNkdBQUEsZ0JBQWdCLE9BQUE7QUFDaEIsOEdBQUEsaUJBQWlCLE9BQUE7QUFDakIsNkdBQUEsZ0JBQWdCLE9BQUE7QUFFbEIscUNBQW1DO0FBQTFCLGlHQUFBLE1BQU0sT0FBQTtBQUNmLHlDQUF3QztBQUEvQixzR0FBQSxTQUFTLE9BQUE7QUFDbEIsMkNBS3NCO0FBSnBCLHdHQUFBLFVBQVUsT0FBQTtBQUNWLDhHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLHFIQUFBLHVCQUF1QixPQUFBO0FBQ3ZCLG1IQUFBLHFCQUFxQixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgUmVzb3VyY2UsXG4gIE1FRElDQUxfUkVTT1VSQ0VTLFxuICBQVUJMSUNfUkVTT1VSQ0VTLFxuICBpc01lZGljYWxSZXNvdXJjZSxcbiAgaXNQdWJsaWNSZXNvdXJjZSxcbn0gZnJvbSBcIi4vcmVzb3VyY2VzXCI7XG5leHBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25zXCI7XG5leHBvcnQgeyBPcGVyYXRpb24gfSBmcm9tIFwiLi9vcGVyYXRpb25cIjtcbmV4cG9ydCB7XG4gIE9wZXJhdGlvbnMsXG4gIGdldEFsbE9wZXJhdGlvbnMsXG4gIGdldE9wZXJhdGlvbnNCeVJlc291cmNlLFxuICBnZXRPcGVyYXRpb25zQnlBY3Rpb24sXG59IGZyb20gXCIuL3ByZWRlZmluZWRcIjtcbiJdfQ==
@@ -0,0 +1,32 @@
1
+ import { Action } from "./actions";
2
+ import { Resource } from "./resources";
3
+ /**
4
+ * Operation in RESOURCE:ACTION format
5
+ */
6
+ export declare class Operation {
7
+ readonly resource: Resource;
8
+ readonly action: Action;
9
+ /**
10
+ * Create operation from string
11
+ * @param operationString - String in RESOURCE:ACTION format
12
+ * @returns Operation instance or null if invalid
13
+ */
14
+ static fromString(operationString: string): Operation | null;
15
+ constructor(resource: Resource, action: Action);
16
+ /**
17
+ * Get operation string in RESOURCE:ACTION format
18
+ */
19
+ toString(): string;
20
+ /**
21
+ * Check if two operations are equal
22
+ */
23
+ equals(other: Operation): boolean;
24
+ /**
25
+ * Convert to JSON representation
26
+ */
27
+ toJSON(): {
28
+ resource: Resource;
29
+ action: Action;
30
+ operation: string;
31
+ };
32
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Operation = void 0;
4
+ const actions_1 = require("./actions");
5
+ const resources_1 = require("./resources");
6
+ /**
7
+ * Operation in RESOURCE:ACTION format
8
+ */
9
+ class Operation {
10
+ resource;
11
+ action;
12
+ /**
13
+ * Create operation from string
14
+ * @param operationString - String in RESOURCE:ACTION format
15
+ * @returns Operation instance or null if invalid
16
+ */
17
+ static fromString(operationString) {
18
+ const parts = operationString.split(":");
19
+ if (parts.length !== 2) {
20
+ return null;
21
+ }
22
+ const [resourceStr, actionStr] = parts;
23
+ // Validate resource
24
+ if (!Object.values(resources_1.Resource).includes(resourceStr)) {
25
+ return null;
26
+ }
27
+ // Validate action
28
+ if (!Object.values(actions_1.Action).includes(actionStr)) {
29
+ return null;
30
+ }
31
+ return new Operation(resourceStr, actionStr);
32
+ }
33
+ constructor(resource, action) {
34
+ this.resource = resource;
35
+ this.action = action;
36
+ }
37
+ /**
38
+ * Get operation string in RESOURCE:ACTION format
39
+ */
40
+ toString() {
41
+ return `${this.resource}:${this.action}`;
42
+ }
43
+ /**
44
+ * Check if two operations are equal
45
+ */
46
+ equals(other) {
47
+ return this.resource === other.resource && this.action === other.action;
48
+ }
49
+ /**
50
+ * Convert to JSON representation
51
+ */
52
+ toJSON() {
53
+ return {
54
+ resource: this.resource,
55
+ action: this.action,
56
+ operation: this.toString(),
57
+ };
58
+ }
59
+ }
60
+ exports.Operation = Operation;
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29wZXJhdGlvbnMvb3BlcmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVDQUFtQztBQUNuQywyQ0FBdUM7QUFFdkM7O0dBRUc7QUFDSCxNQUFhLFNBQVM7SUE0QkY7SUFDQTtJQTVCbEI7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsZUFBdUI7UUFDdkMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7UUFFdkMsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLG9CQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBdUIsQ0FBQyxFQUFFLENBQUM7WUFDL0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBbUIsQ0FBQyxFQUFFLENBQUM7WUFDekQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxJQUFJLFNBQVMsQ0FBQyxXQUF1QixFQUFFLFNBQW1CLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsWUFDa0IsUUFBa0IsRUFDbEIsTUFBYztRQURkLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUM3QixDQUFDO0lBRUo7O09BRUc7SUFDSCxRQUFRO1FBQ04sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxLQUFnQjtRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDMUUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTTtRQUNKLE9BQU87WUFDTCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO1NBQzNCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF4REQsOEJBd0RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uc1wiO1xuaW1wb3J0IHsgUmVzb3VyY2UgfSBmcm9tIFwiLi9yZXNvdXJjZXNcIjtcblxuLyoqXG4gKiBPcGVyYXRpb24gaW4gUkVTT1VSQ0U6QUNUSU9OIGZvcm1hdFxuICovXG5leHBvcnQgY2xhc3MgT3BlcmF0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBvcGVyYXRpb24gZnJvbSBzdHJpbmdcbiAgICogQHBhcmFtIG9wZXJhdGlvblN0cmluZyAtIFN0cmluZyBpbiBSRVNPVVJDRTpBQ1RJT04gZm9ybWF0XG4gICAqIEByZXR1cm5zIE9wZXJhdGlvbiBpbnN0YW5jZSBvciBudWxsIGlmIGludmFsaWRcbiAgICovXG4gIHN0YXRpYyBmcm9tU3RyaW5nKG9wZXJhdGlvblN0cmluZzogc3RyaW5nKTogT3BlcmF0aW9uIHwgbnVsbCB7XG4gICAgY29uc3QgcGFydHMgPSBvcGVyYXRpb25TdHJpbmcuc3BsaXQoXCI6XCIpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IFtyZXNvdXJjZVN0ciwgYWN0aW9uU3RyXSA9IHBhcnRzO1xuXG4gICAgLy8gVmFsaWRhdGUgcmVzb3VyY2VcbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoUmVzb3VyY2UpLmluY2x1ZGVzKHJlc291cmNlU3RyIGFzIFJlc291cmNlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgYWN0aW9uXG4gICAgaWYgKCFPYmplY3QudmFsdWVzKEFjdGlvbikuaW5jbHVkZXMoYWN0aW9uU3RyIGFzIEFjdGlvbikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgT3BlcmF0aW9uKHJlc291cmNlU3RyIGFzIFJlc291cmNlLCBhY3Rpb25TdHIgYXMgQWN0aW9uKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogUmVzb3VyY2UsXG4gICAgcHVibGljIHJlYWRvbmx5IGFjdGlvbjogQWN0aW9uLFxuICApIHt9XG5cbiAgLyoqXG4gICAqIEdldCBvcGVyYXRpb24gc3RyaW5nIGluIFJFU09VUkNFOkFDVElPTiBmb3JtYXRcbiAgICovXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMucmVzb3VyY2V9OiR7dGhpcy5hY3Rpb259YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0d28gb3BlcmF0aW9ucyBhcmUgZXF1YWxcbiAgICovXG4gIGVxdWFscyhvdGhlcjogT3BlcmF0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2UgPT09IG90aGVyLnJlc291cmNlICYmIHRoaXMuYWN0aW9uID09PSBvdGhlci5hY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0byBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAqL1xuICB0b0pTT04oKTogeyByZXNvdXJjZTogUmVzb3VyY2U7IGFjdGlvbjogQWN0aW9uOyBvcGVyYXRpb246IHN0cmluZyB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzb3VyY2U6IHRoaXMucmVzb3VyY2UsXG4gICAgICBhY3Rpb246IHRoaXMuYWN0aW9uLFxuICAgICAgb3BlcmF0aW9uOiB0aGlzLnRvU3RyaW5nKCksXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,85 @@
1
+ import { Action } from "./actions";
2
+ import { Operation } from "./operation";
3
+ import { Resource } from "./resources";
4
+ /**
5
+ * Predefined common operations for convenience
6
+ */
7
+ export declare const Operations: {
8
+ readonly ACCOUNT_CREATE: Operation;
9
+ readonly ACCOUNT_READ: Operation;
10
+ readonly ACCOUNT_UPDATE: Operation;
11
+ readonly ACCOUNT_DELETE: Operation;
12
+ readonly ACCOUNT_MANAGE: Operation;
13
+ readonly PATIENT_CREATE: Operation;
14
+ readonly PATIENT_READ: Operation;
15
+ readonly PATIENT_UPDATE: Operation;
16
+ readonly PATIENT_DELETE: Operation;
17
+ readonly PATIENT_LIST: Operation;
18
+ readonly PATIENT_VIEW: Operation;
19
+ readonly PATIENT_UPDATE_STATUS: Operation;
20
+ readonly PATIENT_PAYMENT_PUT: Operation;
21
+ readonly PATIENT_PAYMENT_DELETE: Operation;
22
+ readonly MEDICAL_SERVICE_CREATE: Operation;
23
+ readonly MEDICAL_SERVICE_READ: Operation;
24
+ readonly MEDICAL_SERVICE_UPDATE: Operation;
25
+ readonly MEDICAL_SERVICE_DELETE: Operation;
26
+ readonly MEDICAL_SERVICE_MANAGE: Operation;
27
+ readonly MEDICAL_SERVICE_SET_STATUS: Operation;
28
+ readonly MEDICAL_SERVICE_SET_FEES: Operation;
29
+ readonly MEDICAL_RECORD_CREATE: Operation;
30
+ readonly MEDICAL_RECORD_READ: Operation;
31
+ readonly MEDICAL_RECORD_UPDATE: Operation;
32
+ readonly MEDICAL_RECORD_DELETE: Operation;
33
+ readonly MEDICAL_RECORD_SHARE: Operation;
34
+ readonly MEDICAL_RECORD_EXPORT: Operation;
35
+ readonly PRESCRIPTION_CREATE: Operation;
36
+ readonly PRESCRIPTION_READ: Operation;
37
+ readonly PRESCRIPTION_UPDATE: Operation;
38
+ readonly PRESCRIPTION_SIGN: Operation;
39
+ readonly PRESCRIPTION_PRESCRIBE: Operation;
40
+ readonly DIAGNOSIS_CREATE: Operation;
41
+ readonly DIAGNOSIS_READ: Operation;
42
+ readonly DIAGNOSIS_UPDATE: Operation;
43
+ readonly DIAGNOSIS_DIAGNOSE: Operation;
44
+ readonly DIAGNOSIS_VERIFY: Operation;
45
+ readonly MEDICAL_HISTORY_CREATE: Operation;
46
+ readonly MEDICAL_HISTORY_READ: Operation;
47
+ readonly MEDICAL_HISTORY_UPDATE: Operation;
48
+ readonly UPLOADED_DOCUMENT_CREATE: Operation;
49
+ readonly UPLOADED_DOCUMENT_READ: Operation;
50
+ readonly UPLOADED_DOCUMENT_DELETE: Operation;
51
+ readonly GENERATED_DOCUMENT_CREATE: Operation;
52
+ readonly GENERATED_DOCUMENT_READ: Operation;
53
+ readonly MEDICAL_SERVICE_SCHEDULE: Operation;
54
+ readonly MEDICAL_SERVICE_CANCEL: Operation;
55
+ readonly MEDICAL_SERVICE_LIST: Operation;
56
+ readonly USER_CREATE: Operation;
57
+ readonly USER_READ: Operation;
58
+ readonly USER_UPDATE: Operation;
59
+ readonly USER_DELETE: Operation;
60
+ readonly USER_LIST: Operation;
61
+ readonly USER_LOGIN: Operation;
62
+ readonly USER_LOGOUT: Operation;
63
+ readonly MEMBERSHIP_CREATE: Operation;
64
+ readonly MEMBERSHIP_READ: Operation;
65
+ readonly MEMBERSHIP_UPDATE: Operation;
66
+ readonly MEMBERSHIP_DELETE: Operation;
67
+ readonly AUDIT_LOG_CREATE: Operation;
68
+ readonly AUDIT_LOG_READ: Operation;
69
+ readonly AUDIT_LOG_LIST: Operation;
70
+ readonly AUDIT_LOG_AUDIT: Operation;
71
+ readonly SYSTEM_CONFIGURE: Operation;
72
+ readonly SYSTEM_AUDIT: Operation;
73
+ };
74
+ /**
75
+ * Get all predefined operations as an array
76
+ */
77
+ export declare function getAllOperations(): Operation[];
78
+ /**
79
+ * Get all operations for a specific resource
80
+ */
81
+ export declare function getOperationsByResource(resource: Resource): Operation[];
82
+ /**
83
+ * Get all operations for a specific action
84
+ */
85
+ export declare function getOperationsByAction(action: Action): Operation[];
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Operations = void 0;
4
+ exports.getAllOperations = getAllOperations;
5
+ exports.getOperationsByResource = getOperationsByResource;
6
+ exports.getOperationsByAction = getOperationsByAction;
7
+ const actions_1 = require("./actions");
8
+ const operation_1 = require("./operation");
9
+ const resources_1 = require("./resources");
10
+ /**
11
+ * Predefined common operations for convenience
12
+ */
13
+ exports.Operations = {
14
+ // Account operations
15
+ ACCOUNT_CREATE: new operation_1.Operation(resources_1.Resource.ACCOUNT, actions_1.Action.CREATE),
16
+ ACCOUNT_READ: new operation_1.Operation(resources_1.Resource.ACCOUNT, actions_1.Action.READ),
17
+ ACCOUNT_UPDATE: new operation_1.Operation(resources_1.Resource.ACCOUNT, actions_1.Action.UPDATE),
18
+ ACCOUNT_DELETE: new operation_1.Operation(resources_1.Resource.ACCOUNT, actions_1.Action.DELETE),
19
+ ACCOUNT_MANAGE: new operation_1.Operation(resources_1.Resource.ACCOUNT, actions_1.Action.MANAGE),
20
+ // Patient operations
21
+ PATIENT_CREATE: new operation_1.Operation(resources_1.Resource.PATIENT, actions_1.Action.CREATE),
22
+ PATIENT_READ: new operation_1.Operation(resources_1.Resource.PATIENT, actions_1.Action.READ),
23
+ PATIENT_UPDATE: new operation_1.Operation(resources_1.Resource.PATIENT, actions_1.Action.UPDATE),
24
+ PATIENT_DELETE: new operation_1.Operation(resources_1.Resource.PATIENT, actions_1.Action.DELETE),
25
+ PATIENT_LIST: new operation_1.Operation(resources_1.Resource.PATIENT, actions_1.Action.LIST),
26
+ PATIENT_VIEW: new operation_1.Operation(resources_1.Resource.PATIENT, actions_1.Action.VIEW_PATIENTS),
27
+ PATIENT_UPDATE_STATUS: new operation_1.Operation(resources_1.Resource.PATIENT, actions_1.Action.UPDATE_STATUS),
28
+ // Patient payment operations
29
+ PATIENT_PAYMENT_PUT: new operation_1.Operation(resources_1.Resource.PATIENT_PAYMENT, actions_1.Action.PUT_PATIENT_PAYMENT),
30
+ PATIENT_PAYMENT_DELETE: new operation_1.Operation(resources_1.Resource.PATIENT_PAYMENT, actions_1.Action.DELETE_PATIENT_PAYMENT),
31
+ // Medical service operations
32
+ MEDICAL_SERVICE_CREATE: new operation_1.Operation(resources_1.Resource.MEDICAL_SERVICE, actions_1.Action.CREATE),
33
+ MEDICAL_SERVICE_READ: new operation_1.Operation(resources_1.Resource.MEDICAL_SERVICE, actions_1.Action.READ),
34
+ MEDICAL_SERVICE_UPDATE: new operation_1.Operation(resources_1.Resource.MEDICAL_SERVICE, actions_1.Action.UPDATE),
35
+ MEDICAL_SERVICE_DELETE: new operation_1.Operation(resources_1.Resource.MEDICAL_SERVICE, actions_1.Action.DELETE),
36
+ MEDICAL_SERVICE_MANAGE: new operation_1.Operation(resources_1.Resource.MEDICAL_SERVICE, actions_1.Action.MANAGE),
37
+ MEDICAL_SERVICE_SET_STATUS: new operation_1.Operation(resources_1.Resource.MEDICAL_SERVICE_STATUS, actions_1.Action.SET_MEDICAL_SERVICE_STATUS),
38
+ MEDICAL_SERVICE_SET_FEES: new operation_1.Operation(resources_1.Resource.MEDICAL_SERVICE_FEES, actions_1.Action.SET_MEDICAL_SERVICE_FEES),
39
+ // Medical record operations
40
+ MEDICAL_RECORD_CREATE: new operation_1.Operation(resources_1.Resource.MEDICAL_RECORD, actions_1.Action.CREATE),
41
+ MEDICAL_RECORD_READ: new operation_1.Operation(resources_1.Resource.MEDICAL_RECORD, actions_1.Action.READ),
42
+ MEDICAL_RECORD_UPDATE: new operation_1.Operation(resources_1.Resource.MEDICAL_RECORD, actions_1.Action.UPDATE),
43
+ MEDICAL_RECORD_DELETE: new operation_1.Operation(resources_1.Resource.MEDICAL_RECORD, actions_1.Action.DELETE),
44
+ MEDICAL_RECORD_SHARE: new operation_1.Operation(resources_1.Resource.MEDICAL_RECORD, actions_1.Action.SHARE),
45
+ MEDICAL_RECORD_EXPORT: new operation_1.Operation(resources_1.Resource.MEDICAL_RECORD, actions_1.Action.EXPORT),
46
+ // Prescription operations
47
+ PRESCRIPTION_CREATE: new operation_1.Operation(resources_1.Resource.PRESCRIPTION, actions_1.Action.CREATE),
48
+ PRESCRIPTION_READ: new operation_1.Operation(resources_1.Resource.PRESCRIPTION, actions_1.Action.READ),
49
+ PRESCRIPTION_UPDATE: new operation_1.Operation(resources_1.Resource.PRESCRIPTION, actions_1.Action.UPDATE),
50
+ PRESCRIPTION_SIGN: new operation_1.Operation(resources_1.Resource.PRESCRIPTION, actions_1.Action.SIGN),
51
+ PRESCRIPTION_PRESCRIBE: new operation_1.Operation(resources_1.Resource.PRESCRIPTION, actions_1.Action.PRESCRIBE),
52
+ // Diagnosis operations
53
+ DIAGNOSIS_CREATE: new operation_1.Operation(resources_1.Resource.DIAGNOSIS, actions_1.Action.CREATE),
54
+ DIAGNOSIS_READ: new operation_1.Operation(resources_1.Resource.DIAGNOSIS, actions_1.Action.READ),
55
+ DIAGNOSIS_UPDATE: new operation_1.Operation(resources_1.Resource.DIAGNOSIS, actions_1.Action.UPDATE),
56
+ DIAGNOSIS_DIAGNOSE: new operation_1.Operation(resources_1.Resource.DIAGNOSIS, actions_1.Action.DIAGNOSE),
57
+ DIAGNOSIS_VERIFY: new operation_1.Operation(resources_1.Resource.DIAGNOSIS, actions_1.Action.VERIFY),
58
+ // Medical history operations
59
+ MEDICAL_HISTORY_CREATE: new operation_1.Operation(resources_1.Resource.MEDICAL_HISTORY, actions_1.Action.CREATE),
60
+ MEDICAL_HISTORY_READ: new operation_1.Operation(resources_1.Resource.MEDICAL_HISTORY, actions_1.Action.READ),
61
+ MEDICAL_HISTORY_UPDATE: new operation_1.Operation(resources_1.Resource.MEDICAL_HISTORY, actions_1.Action.UPDATE),
62
+ // Document operations
63
+ UPLOADED_DOCUMENT_CREATE: new operation_1.Operation(resources_1.Resource.UPLOADED_DOCUMENT, actions_1.Action.CREATE),
64
+ UPLOADED_DOCUMENT_READ: new operation_1.Operation(resources_1.Resource.UPLOADED_DOCUMENT, actions_1.Action.READ),
65
+ UPLOADED_DOCUMENT_DELETE: new operation_1.Operation(resources_1.Resource.UPLOADED_DOCUMENT, actions_1.Action.DELETE),
66
+ GENERATED_DOCUMENT_CREATE: new operation_1.Operation(resources_1.Resource.GENERATED_DOCUMENT, actions_1.Action.CREATE),
67
+ GENERATED_DOCUMENT_READ: new operation_1.Operation(resources_1.Resource.GENERATED_DOCUMENT, actions_1.Action.READ),
68
+ // Medical service scheduling operations (appointments)
69
+ MEDICAL_SERVICE_SCHEDULE: new operation_1.Operation(resources_1.Resource.MEDICAL_SERVICE, actions_1.Action.SCHEDULE),
70
+ MEDICAL_SERVICE_CANCEL: new operation_1.Operation(resources_1.Resource.MEDICAL_SERVICE, actions_1.Action.CANCEL),
71
+ MEDICAL_SERVICE_LIST: new operation_1.Operation(resources_1.Resource.MEDICAL_SERVICE, actions_1.Action.LIST),
72
+ // User operations
73
+ USER_CREATE: new operation_1.Operation(resources_1.Resource.USER, actions_1.Action.CREATE),
74
+ USER_READ: new operation_1.Operation(resources_1.Resource.USER, actions_1.Action.READ),
75
+ USER_UPDATE: new operation_1.Operation(resources_1.Resource.USER, actions_1.Action.UPDATE),
76
+ USER_DELETE: new operation_1.Operation(resources_1.Resource.USER, actions_1.Action.DELETE),
77
+ USER_LIST: new operation_1.Operation(resources_1.Resource.USER, actions_1.Action.LIST),
78
+ USER_LOGIN: new operation_1.Operation(resources_1.Resource.USER, actions_1.Action.LOGIN),
79
+ USER_LOGOUT: new operation_1.Operation(resources_1.Resource.USER, actions_1.Action.LOGOUT),
80
+ // Membership operations
81
+ MEMBERSHIP_CREATE: new operation_1.Operation(resources_1.Resource.MEMBERSHIP, actions_1.Action.CREATE),
82
+ MEMBERSHIP_READ: new operation_1.Operation(resources_1.Resource.MEMBERSHIP, actions_1.Action.READ),
83
+ MEMBERSHIP_UPDATE: new operation_1.Operation(resources_1.Resource.MEMBERSHIP, actions_1.Action.UPDATE),
84
+ MEMBERSHIP_DELETE: new operation_1.Operation(resources_1.Resource.MEMBERSHIP, actions_1.Action.DELETE),
85
+ // Audit log operations
86
+ AUDIT_LOG_CREATE: new operation_1.Operation(resources_1.Resource.AUDIT_LOG, actions_1.Action.CREATE),
87
+ AUDIT_LOG_READ: new operation_1.Operation(resources_1.Resource.AUDIT_LOG, actions_1.Action.READ),
88
+ AUDIT_LOG_LIST: new operation_1.Operation(resources_1.Resource.AUDIT_LOG, actions_1.Action.LIST),
89
+ AUDIT_LOG_AUDIT: new operation_1.Operation(resources_1.Resource.AUDIT_LOG, actions_1.Action.AUDIT),
90
+ // System operations
91
+ SYSTEM_CONFIGURE: new operation_1.Operation(resources_1.Resource.SYSTEM, actions_1.Action.CONFIGURE),
92
+ SYSTEM_AUDIT: new operation_1.Operation(resources_1.Resource.SYSTEM, actions_1.Action.AUDIT),
93
+ };
94
+ /**
95
+ * Get all predefined operations as an array
96
+ */
97
+ function getAllOperations() {
98
+ return Object.values(exports.Operations);
99
+ }
100
+ /**
101
+ * Get all operations for a specific resource
102
+ */
103
+ function getOperationsByResource(resource) {
104
+ return getAllOperations().filter((op) => op.resource === resource);
105
+ }
106
+ /**
107
+ * Get all operations for a specific action
108
+ */
109
+ function getOperationsByAction(action) {
110
+ return getAllOperations().filter((op) => op.action === action);
111
+ }
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZGVmaW5lZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVyYXRpb25zL3ByZWRlZmluZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBK0pBLDRDQUVDO0FBS0QsMERBRUM7QUFLRCxzREFFQztBQS9LRCx1Q0FBbUM7QUFDbkMsMkNBQXdDO0FBQ3hDLDJDQUF1QztBQUV2Qzs7R0FFRztBQUNVLFFBQUEsVUFBVSxHQUFHO0lBQ3hCLHFCQUFxQjtJQUNyQixjQUFjLEVBQUUsSUFBSSxxQkFBUyxDQUFDLG9CQUFRLENBQUMsT0FBTyxFQUFFLGdCQUFNLENBQUMsTUFBTSxDQUFDO0lBQzlELFlBQVksRUFBRSxJQUFJLHFCQUFTLENBQUMsb0JBQVEsQ0FBQyxPQUFPLEVBQUUsZ0JBQU0sQ0FBQyxJQUFJLENBQUM7SUFDMUQsY0FBYyxFQUFFLElBQUkscUJBQVMsQ0FBQyxvQkFBUSxDQUFDLE9BQU8sRUFBRSxnQkFBTSxDQUFDLE1BQU0sQ0FBQztJQUM5RCxjQUFjLEVBQUUsSUFBSSxxQkFBUyxDQUFDLG9CQUFRLENBQUMsT0FBTyxFQUFFLGdCQUFNLENBQUMsTUFBTSxDQUFDO0lBQzlELGNBQWMsRUFBRSxJQUFJLHFCQUFTLENBQUMsb0JBQVEsQ0FBQyxPQUFPLEVBQUUsZ0JBQU0sQ0FBQyxNQUFNLENBQUM7SUFFOUQscUJBQXFCO0lBQ3JCLGNBQWMsRUFBRSxJQUFJLHFCQUFTLENBQUMsb0JBQVEsQ0FBQyxPQUFPLEVBQUUsZ0JBQU0sQ0FBQyxNQUFNLENBQUM7SUFDOUQsWUFBWSxFQUFFLElBQUkscUJBQVMsQ0FBQyxvQkFBUSxDQUFDLE9BQU8sRUFBRSxnQkFBTSxDQUFDLElBQUksQ0FBQztJQUMxRCxjQUFjLEVBQUUsSUFBSSxxQkFBUyxDQUFDLG9CQUFRLENBQUMsT0FBTyxFQUFFLGdCQUFNLENBQUMsTUFBTSxDQUFDO0lBQzlELGNBQWMsRUFBRSxJQUFJLHFCQUFTLENBQUMsb0JBQVEsQ0FBQyxPQUFPLEVB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QU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxrQkFBVSxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsUUFBa0I7SUFDeEQsT0FBTyxnQkFBZ0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxNQUFjO0lBQ2xELE9BQU8sZ0JBQWdCLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLENBQUM7QUFDakUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuL2FjdGlvbnNcIjtcbmltcG9ydCB7IE9wZXJhdGlvbiB9IGZyb20gXCIuL29wZXJhdGlvblwiO1xuaW1wb3J0IHsgUmVzb3VyY2UgfSBmcm9tIFwiLi9yZXNvdXJjZXNcIjtcblxuLyoqXG4gKiBQcmVkZWZpbmVkIGNvbW1vbiBvcGVyYXRpb25zIGZvciBjb252ZW5pZW5jZVxuICovXG5leHBvcnQgY29uc3QgT3BlcmF0aW9ucyA9IHtcbiAgLy8gQWNjb3VudCBvcGVyYXRpb25zXG4gIEFDQ09VTlRfQ1JFQVRFOiBuZXcgT3BlcmF0aW9uKFJlc291cmNlLkFDQ09VTlQsIEFjdGlvbi5DUkVBVEUpLFxuICBBQ0NPVU5UX1JFQUQ6IG5ldyBPcGVyYXRpb24oUmVzb3VyY2UuQUNDT1VOVCwgQWN0aW9uLlJFQUQpLFxuICBBQ0NPVU5UX1VQREFURTogbmV3IE9wZXJhdGlvbihSZXNvdXJjZS5BQ0NPVU5ULCBBY3Rpb24uVVBEQVRFKSxcbiAgQUNDT1VOVF9ERUxFVEU6IG5ldyBPcGVyYXRpb24oUmVzb3VyY2UuQUNDT1VOVCwgQWN0aW9uLkRFTEVURSksXG4gIEFDQ09VTlRfTUFOQUdFOiBuZXcgT3BlcmF0aW9uKFJlc291cmNlLkFDQ09VTlQsIEFjdGlvbi5NQU5BR0UpLFxuXG4gIC8vIFBhdGllbnQgb3BlcmF0aW9uc1xuICBQQVRJRU5UX0NSRUFURTogbmV3IE9wZXJhdGlvbihSZXNvdXJjZS5QQVRJRU5ULCBBY3Rpb24uQ1JFQVRFKSxcbiAgUEFUSUVOVF9SRUFEOiBuZXcgT3BlcmF0aW9uKFJlc291cmNlLlBBVElFTlQsIEFjdGlvbi5SRUFEKSxcbiAgUEFUSUVOVF9VUERBVEU6IG5ldyBPcGVyYXRpb24oUmVzb3VyY2UuUEFUSUVOVCwgQWN0aW9uLlVQREFURSksXG4gIFBBVElFTlRfREVMRVRFOiBuZXcgT3BlcmF0aW9uKFJlc291cmNlLlBBVElFTlQsIEFjdGlvbi5ERUxFVEUpLFxuICBQQVRJRU5UX0xJU1Q6IG5ldyBPcGVyYXRpb24oUmVzb3VyY2UuUEFUSUVOVCwgQWN0aW9uLkxJU1QpLFxuICBQQVRJRU5UX1ZJRVc6IG5ldyBPcGVyYXRpb24oUmVzb3VyY2UuUEFUSUVOVCwgQWN0aW9uLlZJRVdfUEFUSUVOVFMpLFxuICBQQVRJRU5UX1VQREFURV9TVEFUVVM6IG5ldyBPcGVyYXRpb24oUmVzb3VyY2UuUEFUSUVOVCwgQWN0aW9uLlVQREFURV9TVEFUVVMpLFxuXG4gIC8vIFBhdGllbnQgcGF5bWVudCBvcGVyYXRpb25zXG4gIFBBVElFTlRfUEFZTUVOVF9QVVQ6IG5ldyBPcGVyYXRpb24oXG4gICAgUmVzb3VyY2UuUEFUSUVOVF9QQVlNRU5ULFxuICAgIEFjdGlvbi5QVVRfUEFUSUVOVF9QQVlNRU5ULFxuICApLFxuICBQQVRJRU5UX1BBWU1FTlRfREVMRVRFOiBuZXcgT3BlcmF0aW9uKFxuICAgIFJlc291cmNlLlBBVElFTlRfUEFZTUVOVCxcbiAgICBBY3Rpb24uREVMRVRFX1BBVElFTlRfUEFZTUVOVCxcbiAgKSxcblxuICAvLyBNZWRpY2FsIHNlcnZpY2Ugb3BlcmF0aW9uc1xuICBNRURJQ0FMX1NFUlZJQ0VfQ1JFQVRFOiBuZXcgT3BlcmF0aW9uKFxuICAgIFJlc291cmNlLk1FRElDQUxfU0VSVklDRSxcbiAgICBBY3Rpb24uQ1JFQVRFLFxuICApLFxuICBNRURJQ0FMX1NFUlZJQ0VfUkVBRDogbmV3IE9wZXJhdGlvbihSZXNvdXJjZS5NRURJQ0FMX1NFUlZJQ0UsIEFjdGlvbi5SRUFEKSxcbiAgTUVESUNBTF9TRVJWSUNFX1VQREFURTogbmV3IE9wZXJhdGlvbihcbiAgICBSZXNvdXJjZS5NRURJQ0FMX1NFUlZJQ0UsXG4gICAgQWN0aW9uLlVQREFURSxcbiAgKSxcbiAgTUVESUNBTF9TRVJWSUNFX0RFTEVURTogbmV3IE9wZXJhdGlvbihcbiAgICBSZXNvdXJjZS5NRURJQ0FMX1NFUlZJQ0UsXG4gICAgQWN0aW9uLkRFTEVURSxcbiAgKSxcbiAgTUVESUNBTF9TRVJWSUNFX01BTkFHRTogbmV3IE9wZXJhdGlvbihcbiAgICBSZXNvdXJjZS5NRURJQ0FMX1NFUlZJQ0UsXG4gICAgQWN0aW9uLk1BTkFHRSxcbiAgKSxcbiAgTUVESUNBTF9TRVJWSUNFX1NFVF9TVEFUVVM6IG5ldyBPcGVyYXRpb24oXG4gICAgUmVzb3VyY2UuTUVESUNBTF9TRVJWSUNFX1NUQVRVUyxcbiAgICBBY3Rpb24uU0VUX01FRElDQUxfU0VSVklDRV9TVEFUVVMsXG4gICksXG4gIE1FRElDQUxfU0VSVklDRV9TRVRfRkVFUzogbmV3IE9wZXJhdGlvbihcbiAgICBSZXNvdXJjZS5NRURJQ0FMX1NFUlZJQ0VfRkVFUyxcbiAgICBBY3Rpb24uU0VUX01FRElDQUxfU0VSVklDRV9GRUVTLFxuICApLFxuXG4gIC8vIE1lZGljYWwgcmVjb3JkIG9wZXJhdGlvbnNcbiAgTUVESUNBTF9SRUNPUkRfQ1JFQVRFOiBuZXcgT3BlcmF0aW9uKFJlc291cmNlLk1FRElDQUxfUkVDT1JELCBBY3Rpb24uQ1JFQVRFKSxcbiAgTUVESUNBTF9SRUNPUkRfUkVBRDogbmV3IE9wZXJhdGlvbihSZXNvdXJjZS5NRURJQ0FMX1JFQ09SRCwgQWN0aW9uLlJFQUQpLFxuICBNRURJQ0FMX1JFQ09SRF9VUERBVEU6IG5ldyBPcGVyYXRpb24oUmVzb3VyY2UuTUVESUNBTF9SRUNPUkQsIEFjdGlvbi5VUERBVEUpLFxuICBNRURJQ0FMX1JFQ09SRF9ERUxFVEU6IG5ldyBPcGVyYXRpb24oUmVzb3VyY2UuTUVESUNBTF9SRUNPUkQsIEFjdGlvbi5ERUxFVEUpLFxuICBNRURJQ0FMX1JFQ09SRF9TSEFSRTogbmV3IE9wZXJhdGlvbihSZXNvdXJjZS5NRURJQ0FMX1JFQ09SRCwgQWN0aW9uLlNIQVJFKSxcbiAgTUVESUNBTF9SRUNPUkRfRVhQT1JUOiBuZXcgT3BlcmF0aW9uKFJlc291cmNlLk1FRElDQUxfUkVDT1JELCBBY3Rpb24uRVhQT1JUKSxcblxuICAvLyBQcmVzY3JpcHRpb24gb3BlcmF0aW9uc1xuICBQUkVTQ1JJUFRJT05fQ1JFQVRFOiBuZXcgT3BlcmF0aW9uKFJlc291cmNlLlBSRVNDUklQVElPTiwgQWN0aW9uLkNSRUFURSksXG4gIFBSRVNDUklQVElPTl9SRUFEOiBuZXcgT3BlcmF0aW9uKFJlc291cmNlLlBSRVNDUklQVElPTiwgQWN0aW9uLlJFQUQpLFxuICBQUkVTQ1JJUFRJT05fVVBEQVRFOiBuZXcgT3BlcmF0aW9uKFJlc291cmNlLlBSRVNDUklQVElPTiwgQWN0aW9uLlVQREFURSksXG4gIFBSRVNDUklQVElPTl9TSUdOOiBuZXcgT3BlcmF0aW9uKFJlc291cmNlLlBSRVNDUklQVElPTiwgQWN0aW9uLlNJR04pLFxuICBQUkVTQ1JJUFRJT05fUFJFU0NSSUJFOiBuZXcgT3BlcmF0aW9uKFxuICAgIFJlc291cmNlLlBSRVNDUklQVElPTixcbiAgICBBY3Rpb24uUFJFU0NSSUJFLFxuICApLFxuXG4gIC8vIERpYWdub3NpcyBvcGVyYXRpb25zXG4gIERJQUdOT1NJU19DUkVBVEU6IG5ldyBPcGVyYXRpb24oUmVzb3VyY2UuRElBR05PU0lTLCBBY3Rpb24uQ1JFQVRFKSxcbiAgRElBR05PU0lTX1JFQUQ6IG5ldyBPcGVyYXRpb24oUmVzb3VyY2UuRElBR05PU0lTLCBBY3Rpb24uUkVBRCksXG4gIERJQUdOT1NJU19VUERBVEU6IG5ldyBPcGVyYXRpb24oUmVzb3VyY2UuRElBR05PU0lTLCBBY3Rpb24uVVBEQVRFKSxcbiAgRElBR05PU0lTX0RJQUdOT1NFOiBuZXcgT3BlcmF0aW9uKFJlc291cmNlLkRJQUdOT1NJUywgQWN0aW9uLkRJQUdOT1NFKSxcbiAgRElBR05PU0lTX1ZFUklGWTogbmV3IE9wZXJhdGlvbihSZXNvdXJjZS5ESUFHTk9TSVMsIEFjdGlvbi5WRVJJRlkpLFxuXG4gIC8vIE1lZGljYWwgaGlzdG9yeSBvcGVyYXRpb25zXG4gIE1FRElDQUxfSElTVE9SWV9DUkVBVEU6IG5ldyBPcGVyYXRpb24oXG4gICAgUmVzb3VyY2UuTUVESUNBTF9ISVNUT1JZLFxuICAgIEFjdGlvbi5DUkVBVEUsXG4gICksXG4gIE1FRElDQUxfSElTVE9SWV9SRUFEOiBuZXcgT3BlcmF0aW9uKFJlc291cmNlLk1FRElDQUxfSElTVE9SWSwgQWN0aW9uLlJFQUQpLFxuICBNRURJQ0FMX0hJU1RPUllfVVBEQVRFOiBuZXcgT3BlcmF0aW9uKFxuICAgIFJlc291cmNlLk1FRElDQUxfSElTVE9SWSxcbiAgICBBY3Rpb24uVVBEQVRFLFxuICApLFxuXG4gIC8vIERvY3VtZW50IG9wZXJhdGlvbnNcbiAgVVBMT0FERURfRE9DVU1FTlRfQ1JFQVRFOiBuZXcgT3BlcmF0aW9uKFxuICAgIFJlc291cmNlLlVQTE9BREVEX0RPQ1VNRU5ULFxuICAgIEFjdGlvbi5DUkVBVEUsXG4gICksXG4gIFVQTE9BREVEX0RPQ1VNRU5UX1JFQUQ6IG5ldyBPcGVyYXRpb24oXG4gICAgUmVzb3VyY2UuVVBMT0FERURfRE9DVU1FTlQsXG4gICAgQWN0aW9uLlJFQUQsXG4gICksXG4gIFVQTE9BREVEX0RPQ1VNRU5UX0RFTEVURTogbmV3IE9wZXJhdGlvbihcbiAgICBSZXNvdXJjZS5VUExPQURFRF9ET0NVTUVOVCxcbiAgICBBY3Rpb24uREVMRVRFLFxuICApLFxuICBHRU5FUkFURURfRE9DVU1FTlRfQ1JFQVRFOiBuZXcgT3BlcmF0aW9uKFxuICAgIFJlc291cmNlLkdFTkVSQVRFRF9ET0NVTUVOVCxcbiAgICBBY3Rpb24uQ1JFQVRFLFxuICApLFxuICBHRU5FUkFURURfRE9DVU1FTlRfUkVBRDogbmV3IE9wZXJhdGlvbihcbiAgICBSZXNvdXJjZS5HRU5FUkFURURfRE9DVU1FTlQsXG4gICAgQWN0aW9uLlJFQUQsXG4gICksXG5cbiAgLy8gTWVkaWNhbCBzZXJ2aWNlIHNjaGVkdWxpbmcgb3BlcmF0aW9ucyAoYXBwb2ludG1lbnRzKVxuICBNRURJQ0FMX1NFUlZJQ0VfU0NIRURVTEU6IG5ldyBPcGVyYXRpb24oXG4gICAgUmVzb3VyY2UuTUVESUNBTF9TRVJWSUNFLFxuICAgIEFjdGlvbi5TQ0hFRFVMRSxcbiAgKSxcbiAgTUVESUNBTF9TRVJWSUNFX0NBTkNFTDogbmV3IE9wZXJhdGlvbihcbiAgICBSZXNvdXJjZS5NRURJQ0FMX1NFUlZJQ0UsXG4gICAgQWN0aW9uLkNBTkNFTCxcbiAgKSxcbiAgTUVESUNBTF9TRVJWSUNFX0xJU1Q6IG5ldyBPcGVyYXRpb24oUmVzb3VyY2UuTUVESUNBTF9TRVJWSUNFLCBBY3Rpb24uTElTVCksXG5cbiAgLy8gVXNlciBvcGVyYXRpb25zXG4gIFVTRVJfQ1JFQVRFOiBuZXcgT3BlcmF0aW9uKFJlc291cmNlLlVTRVIsIEFjdGlvbi5DUkVBVEUpLFxuICBVU0VSX1JFQUQ6IG5ldyBPcGVyYXRpb24oUmVzb3VyY2UuVVNFUiwgQWN0aW9uLlJFQUQpLFxuICBVU0VSX1VQREFURTogbmV3IE9wZXJhdGlvbihSZXNvdXJjZS5VU0VSLCBBY3Rpb24uVVBEQVRFKSxcbiAgVVNFUl9ERUxFVEU6IG5ldyBPcGVyYXRpb24oUmVzb3VyY2UuVVNFUiwgQWN0aW9uLkRFTEVURSksXG4gIFVTRVJfTElTVDogbmV3IE9wZXJhdGlvbihSZXNvdXJjZS5VU0VSLCBBY3Rpb24uTElTVCksXG4gIFVTRVJfTE9HSU46IG5ldyBPcGVyYXRpb24oUmVzb3VyY2UuVVNFUiwgQWN0aW9uLkxPR0lOKSxcbiAgVVNFUl9MT0dPVVQ6IG5ldyBPcGVyYXRpb24oUmVzb3VyY2UuVVNFUiwgQWN0aW9uLkxPR09VVCksXG5cbiAgLy8gTWVtYmVyc2hpcCBvcGVyYXRpb25zXG4gIE1FTUJFUlNISVBfQ1JFQVRFOiBuZXcgT3BlcmF0aW9uKFJlc291cmNlLk1FTUJFUlNISVAsIEFjdGlvbi5DUkVBVEUpLFxuICBNRU1CRVJTSElQX1JFQUQ6IG5ldyBPcGVyYXRpb24oUmVzb3VyY2UuTUVNQkVSU0hJUCwgQWN0aW9uLlJFQUQpLFxuICBNRU1CRVJTSElQX1VQREFURTogbmV3IE9wZXJhdGlvbihSZXNvdXJjZS5NRU1CRVJTSElQLCBBY3Rpb24uVVBEQVRFKSxcbiAgTUVNQkVSU0hJUF9ERUxFVEU6IG5ldyBPcGVyYXRpb24oUmVzb3VyY2UuTUVNQkVSU0hJUCwgQWN0aW9uLkRFTEVURSksXG5cbiAgLy8gQXVkaXQgbG9nIG9wZXJhdGlvbnNcbiAgQVVESVRfTE9HX0NSRUFURTogbmV3IE9wZXJhdGlvbihSZXNvdXJjZS5BVURJVF9MT0csIEFjdGlvbi5DUkVBVEUpLFxuICBBVURJVF9MT0dfUkVBRDogbmV3IE9wZXJhdGlvbihSZXNvdXJjZS5BVURJVF9MT0csIEFjdGlvbi5SRUFEKSxcbiAgQVVESVRfTE9HX0xJU1Q6IG5ldyBPcGVyYXRpb24oUmVzb3VyY2UuQVVESVRfTE9HLCBBY3Rpb24uTElTVCksXG4gIEFVRElUX0xPR19BVURJVDogbmV3IE9wZXJhdGlvbihSZXNvdXJjZS5BVURJVF9MT0csIEFjdGlvbi5BVURJVCksXG5cbiAgLy8gU3lzdGVtIG9wZXJhdGlvbnNcbiAgU1lTVEVNX0NPTkZJR1VSRTogbmV3IE9wZXJhdGlvbihSZXNvdXJjZS5TWVNURU0sIEFjdGlvbi5DT05GSUdVUkUpLFxuICBTWVNURU1fQVVESVQ6IG5ldyBPcGVyYXRpb24oUmVzb3VyY2UuU1lTVEVNLCBBY3Rpb24uQVVESVQpLFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBHZXQgYWxsIHByZWRlZmluZWQgb3BlcmF0aW9ucyBhcyBhbiBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsT3BlcmF0aW9ucygpOiBPcGVyYXRpb25bXSB7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKE9wZXJhdGlvbnMpO1xufVxuXG4vKipcbiAqIEdldCBhbGwgb3BlcmF0aW9ucyBmb3IgYSBzcGVjaWZpYyByZXNvdXJjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3BlcmF0aW9uc0J5UmVzb3VyY2UocmVzb3VyY2U6IFJlc291cmNlKTogT3BlcmF0aW9uW10ge1xuICByZXR1cm4gZ2V0QWxsT3BlcmF0aW9ucygpLmZpbHRlcigob3ApID0+IG9wLnJlc291cmNlID09PSByZXNvdXJjZSk7XG59XG5cbi8qKlxuICogR2V0IGFsbCBvcGVyYXRpb25zIGZvciBhIHNwZWNpZmljIGFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3BlcmF0aW9uc0J5QWN0aW9uKGFjdGlvbjogQWN0aW9uKTogT3BlcmF0aW9uW10ge1xuICByZXR1cm4gZ2V0QWxsT3BlcmF0aW9ucygpLmZpbHRlcigob3ApID0+IG9wLmFjdGlvbiA9PT0gYWN0aW9uKTtcbn1cbiJdfQ==
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Resource types for operations
3
+ */
4
+ export declare enum Resource {
5
+ ACCOUNT = "ACCOUNT",
6
+ ACCOUNT_OWNERSHIP = "ACCOUNT_OWNERSHIP",
7
+ ACCOUNT_PREFERENCES = "ACCOUNT_PREFERENCES",
8
+ USER = "USER",
9
+ CONTACT = "CONTACT",
10
+ PATIENT = "PATIENT",
11
+ PATIENT_MEDICAL_NOTES = "PATIENT_MEDICAL_NOTES",
12
+ PATIENT_MEDICAL_PROPERTIES = "PATIENT_MEDICAL_PROPERTIES",
13
+ PATIENT_PUBLIC_PROPERTIES = "PATIENT_PUBLIC_PROPERTIES",
14
+ PATIENT_PAYMENT = "PATIENT_PAYMENT",
15
+ MEDICAL_SERVICE = "MEDICAL_SERVICE",
16
+ MEDICAL_SERVICE_NOTE = "MEDICAL_SERVICE_NOTE",
17
+ MEDICAL_SERVICE_SCHEDULE = "MEDICAL_SERVICE_SCHEDULE",
18
+ MEDICAL_SERVICE_FEES = "MEDICAL_SERVICE_FEES",
19
+ MEDICAL_SERVICE_STATUS = "MEDICAL_SERVICE_STATUS",
20
+ MEDICAL_NOTE = "MEDICAL_NOTE",
21
+ MEDICAL_RECORD = "MEDICAL_RECORD",
22
+ MEDICAL_HISTORY = "MEDICAL_HISTORY",
23
+ MEDICAL_HISTORY_MODEL = "MEDICAL_HISTORY_MODEL",
24
+ PRESCRIPTION = "PRESCRIPTION",
25
+ DIAGNOSIS = "DIAGNOSIS",
26
+ OBSERVATION = "OBSERVATION",
27
+ MEDICATION = "MEDICATION",
28
+ ALLERGY = "ALLERGY",
29
+ IMMUNIZATION = "IMMUNIZATION",
30
+ PROCEDURE = "PROCEDURE",
31
+ CLINICAL_NOTE = "CLINICAL_NOTE",
32
+ VITAL_SIGNS = "VITAL_SIGNS",
33
+ MEASURE_MODEL = "MEASURE_MODEL",
34
+ CALCULATED_MEASURE_MODEL = "CALCULATED_MEASURE_MODEL",
35
+ UPLOADED_DOCUMENT = "UPLOADED_DOCUMENT",
36
+ DOCUMENT_LAYOUT = "DOCUMENT_LAYOUT",
37
+ GENERATED_DOCUMENT = "GENERATED_DOCUMENT",
38
+ DOCUMENT_MODEL = "DOCUMENT_MODEL",
39
+ SNIPPET = "SNIPPET",
40
+ LOCATION = "LOCATION",
41
+ TASK_TYPE = "TASK_TYPE",
42
+ LAB_RESULT = "LAB_RESULT",
43
+ IMAGING = "IMAGING",
44
+ MEMBERSHIP = "MEMBERSHIP",
45
+ SETTINGS = "SETTINGS",
46
+ NOTIFICATION = "NOTIFICATION",
47
+ REPORT = "REPORT",
48
+ AUDIT_LOG = "AUDIT_LOG",
49
+ SYSTEM = "SYSTEM",
50
+ PUBLIC_RESOURCE = "PUBLIC_RESOURCE",
51
+ MEDICAL_RESOURCE = "MEDICAL_RESOURCE"
52
+ }
53
+ /**
54
+ * Medical resources - require special access control
55
+ */
56
+ export declare const MEDICAL_RESOURCES: Resource[];
57
+ /**
58
+ * Public resources - standard access control
59
+ */
60
+ export declare const PUBLIC_RESOURCES: Resource[];
61
+ /**
62
+ * Check if a resource is medical
63
+ */
64
+ export declare function isMedicalResource(resource: Resource): boolean;
65
+ /**
66
+ * Check if a resource is public
67
+ */
68
+ export declare function isPublicResource(resource: Resource): boolean;
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PUBLIC_RESOURCES = exports.MEDICAL_RESOURCES = exports.Resource = void 0;
4
+ exports.isMedicalResource = isMedicalResource;
5
+ exports.isPublicResource = isPublicResource;
6
+ /**
7
+ * Resource types for operations
8
+ */
9
+ var Resource;
10
+ (function (Resource) {
11
+ // Account & Ownership
12
+ Resource["ACCOUNT"] = "ACCOUNT";
13
+ Resource["ACCOUNT_OWNERSHIP"] = "ACCOUNT_OWNERSHIP";
14
+ Resource["ACCOUNT_PREFERENCES"] = "ACCOUNT_PREFERENCES";
15
+ // User & Contact
16
+ Resource["USER"] = "USER";
17
+ Resource["CONTACT"] = "CONTACT";
18
+ // Patient resources
19
+ Resource["PATIENT"] = "PATIENT";
20
+ Resource["PATIENT_MEDICAL_NOTES"] = "PATIENT_MEDICAL_NOTES";
21
+ Resource["PATIENT_MEDICAL_PROPERTIES"] = "PATIENT_MEDICAL_PROPERTIES";
22
+ Resource["PATIENT_PUBLIC_PROPERTIES"] = "PATIENT_PUBLIC_PROPERTIES";
23
+ Resource["PATIENT_PAYMENT"] = "PATIENT_PAYMENT";
24
+ // Medical Service
25
+ Resource["MEDICAL_SERVICE"] = "MEDICAL_SERVICE";
26
+ Resource["MEDICAL_SERVICE_NOTE"] = "MEDICAL_SERVICE_NOTE";
27
+ Resource["MEDICAL_SERVICE_SCHEDULE"] = "MEDICAL_SERVICE_SCHEDULE";
28
+ Resource["MEDICAL_SERVICE_FEES"] = "MEDICAL_SERVICE_FEES";
29
+ Resource["MEDICAL_SERVICE_STATUS"] = "MEDICAL_SERVICE_STATUS";
30
+ // Medical resources
31
+ Resource["MEDICAL_NOTE"] = "MEDICAL_NOTE";
32
+ Resource["MEDICAL_RECORD"] = "MEDICAL_RECORD";
33
+ Resource["MEDICAL_HISTORY"] = "MEDICAL_HISTORY";
34
+ Resource["MEDICAL_HISTORY_MODEL"] = "MEDICAL_HISTORY_MODEL";
35
+ Resource["PRESCRIPTION"] = "PRESCRIPTION";
36
+ Resource["DIAGNOSIS"] = "DIAGNOSIS";
37
+ Resource["OBSERVATION"] = "OBSERVATION";
38
+ Resource["MEDICATION"] = "MEDICATION";
39
+ Resource["ALLERGY"] = "ALLERGY";
40
+ Resource["IMMUNIZATION"] = "IMMUNIZATION";
41
+ Resource["PROCEDURE"] = "PROCEDURE";
42
+ // Clinical & Measurements
43
+ Resource["CLINICAL_NOTE"] = "CLINICAL_NOTE";
44
+ Resource["VITAL_SIGNS"] = "VITAL_SIGNS";
45
+ Resource["MEASURE_MODEL"] = "MEASURE_MODEL";
46
+ Resource["CALCULATED_MEASURE_MODEL"] = "CALCULATED_MEASURE_MODEL";
47
+ // Documents
48
+ Resource["UPLOADED_DOCUMENT"] = "UPLOADED_DOCUMENT";
49
+ Resource["DOCUMENT_LAYOUT"] = "DOCUMENT_LAYOUT";
50
+ Resource["GENERATED_DOCUMENT"] = "GENERATED_DOCUMENT";
51
+ Resource["DOCUMENT_MODEL"] = "DOCUMENT_MODEL";
52
+ Resource["SNIPPET"] = "SNIPPET";
53
+ // Scheduling & Location
54
+ Resource["LOCATION"] = "LOCATION";
55
+ Resource["TASK_TYPE"] = "TASK_TYPE";
56
+ // Diagnostic
57
+ Resource["LAB_RESULT"] = "LAB_RESULT";
58
+ Resource["IMAGING"] = "IMAGING";
59
+ // Membership & Settings
60
+ Resource["MEMBERSHIP"] = "MEMBERSHIP";
61
+ Resource["SETTINGS"] = "SETTINGS";
62
+ // System
63
+ Resource["NOTIFICATION"] = "NOTIFICATION";
64
+ Resource["REPORT"] = "REPORT";
65
+ Resource["AUDIT_LOG"] = "AUDIT_LOG";
66
+ Resource["SYSTEM"] = "SYSTEM";
67
+ // Generic resources
68
+ Resource["PUBLIC_RESOURCE"] = "PUBLIC_RESOURCE";
69
+ Resource["MEDICAL_RESOURCE"] = "MEDICAL_RESOURCE";
70
+ })(Resource || (exports.Resource = Resource = {}));
71
+ /**
72
+ * Medical resources - require special access control
73
+ */
74
+ exports.MEDICAL_RESOURCES = [
75
+ Resource.PATIENT,
76
+ Resource.PATIENT_MEDICAL_NOTES,
77
+ Resource.PATIENT_MEDICAL_PROPERTIES,
78
+ Resource.PATIENT_PAYMENT,
79
+ Resource.MEDICAL_SERVICE,
80
+ Resource.MEDICAL_SERVICE_NOTE,
81
+ Resource.MEDICAL_SERVICE_SCHEDULE,
82
+ Resource.MEDICAL_SERVICE_FEES,
83
+ Resource.MEDICAL_SERVICE_STATUS,
84
+ Resource.MEDICAL_NOTE,
85
+ Resource.MEDICAL_RECORD,
86
+ Resource.MEDICAL_HISTORY,
87
+ Resource.MEDICAL_HISTORY_MODEL,
88
+ Resource.PRESCRIPTION,
89
+ Resource.DIAGNOSIS,
90
+ Resource.OBSERVATION,
91
+ Resource.MEDICATION,
92
+ Resource.ALLERGY,
93
+ Resource.IMMUNIZATION,
94
+ Resource.PROCEDURE,
95
+ Resource.CLINICAL_NOTE,
96
+ Resource.VITAL_SIGNS,
97
+ Resource.MEASURE_MODEL,
98
+ Resource.CALCULATED_MEASURE_MODEL,
99
+ Resource.LAB_RESULT,
100
+ Resource.IMAGING,
101
+ Resource.MEDICAL_RESOURCE,
102
+ ];
103
+ /**
104
+ * Public resources - standard access control
105
+ */
106
+ exports.PUBLIC_RESOURCES = [
107
+ Resource.ACCOUNT,
108
+ Resource.ACCOUNT_OWNERSHIP,
109
+ Resource.ACCOUNT_PREFERENCES,
110
+ Resource.USER,
111
+ Resource.CONTACT,
112
+ Resource.PATIENT_PUBLIC_PROPERTIES,
113
+ Resource.UPLOADED_DOCUMENT,
114
+ Resource.DOCUMENT_LAYOUT,
115
+ Resource.GENERATED_DOCUMENT,
116
+ Resource.DOCUMENT_MODEL,
117
+ Resource.SNIPPET,
118
+ Resource.LOCATION,
119
+ Resource.TASK_TYPE,
120
+ Resource.MEMBERSHIP,
121
+ Resource.SETTINGS,
122
+ Resource.NOTIFICATION,
123
+ Resource.REPORT,
124
+ Resource.AUDIT_LOG,
125
+ Resource.SYSTEM,
126
+ Resource.PUBLIC_RESOURCE,
127
+ ];
128
+ /**
129
+ * Check if a resource is medical
130
+ */
131
+ function isMedicalResource(resource) {
132
+ return exports.MEDICAL_RESOURCES.includes(resource);
133
+ }
134
+ /**
135
+ * Check if a resource is public
136
+ */
137
+ function isPublicResource(resource) {
138
+ return exports.PUBLIC_RESOURCES.includes(resource);
139
+ }
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29wZXJhdGlvbnMvcmVzb3VyY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTBJQSw4Q0FFQztBQUtELDRDQUVDO0FBbkpEOztHQUVHO0FBQ0gsSUFBWSxRQXVFWDtBQXZFRCxXQUFZLFFBQVE7SUFDbEIsc0JBQXNCO0lBQ3RCLCtCQUFtQixDQUFBO0lBQ25CLG1EQUF1QyxDQUFBO0lBQ3ZDLHVEQUEyQyxDQUFBO0lBRTNDLGlCQUFpQjtJQUNqQix5QkFBYSxDQUFBO0lBQ2IsK0JBQW1CLENBQUE7SUFFbkIsb0JBQW9CO0lBQ3BCLCtCQUFtQixDQUFBO0lBQ25CLDJEQUErQyxDQUFBO0lBQy9DLHFFQUF5RCxDQUFBO0lBQ3pELG1FQUF1RCxDQUFBO0lBQ3ZELCtDQUFtQyxDQUFBO0lBRW5DLGtCQUFrQjtJQUNsQiwrQ0FBbUMsQ0FBQTtJQUNuQyx5REFBNkMsQ0FBQTtJQUM3QyxpRUFBcUQsQ0FBQTtJQUNyRCx5REFBNkMsQ0FBQTtJQUM3Qyw2REFBaUQsQ0FBQTtJQUVqRCxvQkFBb0I7SUFDcEIseUNBQTZCLENBQUE7SUFDN0IsNkNBQWlDLENBQUE7SUFDakMsK0NBQW1DLENBQUE7SUFDbkMsMkRBQStDLENBQUE7SUFDL0MseUNBQTZCLENBQUE7SUFDN0IsbUNBQXVCLENBQUE7SUFDdkIsdUNBQTJCLENBQUE7SUFDM0IscUNBQXlCLENBQUE7SUFDekIsK0JBQW1CLENBQUE7SUFDbkIseUNBQTZCLENBQUE7SUFDN0IsbUNBQXVCLENBQUE7SUFFdkIsMEJBQTBCO0lBQzFCLDJDQUErQixDQUFBO0lBQy9CLHVDQUEyQixDQUFBO0lBQzNCLDJDQUErQixDQUFBO0lBQy9CLGlFQUFxRCxDQUFBO0lBRXJELFlBQVk7SUFDWixtREFBdUMsQ0FBQTtJQUN2QywrQ0FBbUMsQ0FBQTtJQUNuQyxxREFBeUMsQ0FBQTtJQUN6Qyw2Q0FBaUMsQ0FBQTtJQUNqQywrQkFBbUIsQ0FBQTtJQUVuQix3QkFBd0I7SUFDeEIsaUNBQXFCLENBQUE7SUFDckIsbUNBQXVCLENBQUE7SUFFdkIsYUFBYTtJQUNiLHFDQUF5QixDQUFBO0lBQ3pCLCtCQUFtQixDQUFBO0lBRW5CLHdCQUF3QjtJQUN4QixxQ0FBeUIsQ0FBQTtJQUN6QixpQ0FBcUIsQ0FBQTtJQUVyQixTQUFTO0lBQ1QseUNBQTZCLENBQUE7SUFDN0IsNkJBQWlCLENBQUE7SUFDakIsbUNBQXVCLENBQUE7SUFDdkIsNkJBQWlCLENBQUE7SUFFakIsb0JBQW9CO0lBQ3BCLCtDQUFtQyxDQUFBO0lBQ25DLGlEQUFxQyxDQUFBO0FBQ3ZDLENBQUMsRUF2RVcsUUFBUSx3QkFBUixRQUFRLFFBdUVuQjtBQUVEOztHQUVHO0FBQ1UsUUFBQSxpQkFBaUIsR0FBZTtJQUMzQyxRQUFRLENBQUMsT0FBTztJQUNoQixRQUFRLENBQUMscUJBQXFCO0lBQzlCLFFBQVEsQ0FBQywwQkFBMEI7SUFDbkMsUUFBUSxDQUFDLGVBQWU7SUFDeEIsUUFBUSxDQUFDLGVBQWU7SUFDeEIsUUFBUSxDQUFDLG9CQUFvQjtJQUM3QixRQUFRLENBQUMsd0JBQXdCO0lBQ2pDLFFBQVEsQ0FBQyxvQkFBb0I7SUFDN0IsUUFBUSxDQUFDLHNCQUFzQjtJQUMvQixRQUFRLENBQUMsWUFBWTtJQUNyQixRQUFRLENBQUMsY0FBYztJQUN2QixRQUFRLENBQUMsZUFBZTtJQUN4QixRQUFRLENBQUMscUJBQXFCO0lBQzlCLFFBQVEsQ0FBQyxZQUFZO0lBQ3JCLFFBQVEsQ0FBQyxTQUFTO0lBQ2xCLFFBQVEsQ0FBQyxXQUFXO0lBQ3BCLFFBQVEsQ0FBQyxVQUFVO0lBQ25CLFFBQVEsQ0FBQyxPQUFPO0lBQ2hCLFFBQVEsQ0FBQyxZQUFZO0lBQ3JCLFFBQVEsQ0FBQyxTQUFTO0lBQ2xCLFFBQVEsQ0FBQyxhQUFhO0lBQ3RCLFFBQVEsQ0FBQyxXQUFXO0lBQ3BCLFFBQVEsQ0FBQyxhQUFhO0lBQ3RCLFFBQVEsQ0FBQyx3QkFBd0I7SUFDakMsUUFBUSxDQUFDLFVBQVU7SUFDbkIsUUFBUSxDQUFDLE9BQU87SUFDaEIsUUFBUSxDQUFDLGdCQUFnQjtDQUMxQixDQUFDO0FBRUY7O0dBRUc7QUFDVSxRQUFBLGdCQUFnQixHQUFlO0lBQzFDLFFBQVEsQ0FBQyxPQUFPO0lBQ2hCLFFBQVEsQ0FBQyxpQkFBaUI7SUFDMUIsUUFBUSxDQUFDLG1CQUFtQjtJQUM1QixRQUFRLENBQUMsSUFBSTtJQUNiLFFBQVEsQ0FBQyxPQUFPO0lBQ2hCLFFBQVEsQ0FBQyx5QkFBeUI7SUFDbEMsUUFBUSxDQUFDLGlCQUFpQjtJQUMxQixRQUFRLENBQUMsZUFBZTtJQUN4QixRQUFRLENBQUMsa0JBQWtCO0lBQzNCLFFBQVEsQ0FBQyxjQUFjO0lBQ3ZCLFFBQVEsQ0FBQyxPQUFPO0lBQ2hCLFFBQVEsQ0FBQyxRQUFRO0lBQ2pCLFFBQVEsQ0FBQyxTQUFTO0lBQ2xCLFFBQVEsQ0FBQyxVQUFVO0lBQ25CLFFBQVEsQ0FBQyxRQUFRO0lBQ2pCLFFBQVEsQ0FBQyxZQUFZO0lBQ3JCLFFBQVEsQ0FBQyxNQUFNO0lBQ2YsUUFBUSxDQUFDLFNBQVM7SUFDbEIsUUFBUSxDQUFDLE1BQU07SUFDZixRQUFRLENBQUMsZUFBZTtDQUN6QixDQUFDO0FBRUY7O0dBRUc7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxRQUFrQjtJQUNsRCxPQUFPLHlCQUFpQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxRQUFrQjtJQUNqRCxPQUFPLHdCQUFnQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXNvdXJjZSB0eXBlcyBmb3Igb3BlcmF0aW9uc1xuICovXG5leHBvcnQgZW51bSBSZXNvdXJjZSB7XG4gIC8vIEFjY291bnQgJiBPd25lcnNoaXBcbiAgQUNDT1VOVCA9IFwiQUNDT1VOVFwiLFxuICBBQ0NPVU5UX09XTkVSU0hJUCA9IFwiQUNDT1VOVF9PV05FUlNISVBcIixcbiAgQUNDT1VOVF9QUkVGRVJFTkNFUyA9IFwiQUNDT1VOVF9QUkVGRVJFTkNFU1wiLFxuXG4gIC8vIFVzZXIgJiBDb250YWN0XG4gIFVTRVIgPSBcIlVTRVJcIixcbiAgQ09OVEFDVCA9IFwiQ09OVEFDVFwiLFxuXG4gIC8vIFBhdGllbnQgcmVzb3VyY2VzXG4gIFBBVElFTlQgPSBcIlBBVElFTlRcIixcbiAgUEFUSUVOVF9NRURJQ0FMX05PVEVTID0gXCJQQVRJRU5UX01FRElDQUxfTk9URVNcIixcbiAgUEFUSUVOVF9NRURJQ0FMX1BST1BFUlRJRVMgPSBcIlBBVElFTlRfTUVESUNBTF9QUk9QRVJUSUVTXCIsXG4gIFBBVElFTlRfUFVCTElDX1BST1BFUlRJRVMgPSBcIlBBVElFTlRfUFVCTElDX1BST1BFUlRJRVNcIixcbiAgUEFUSUVOVF9QQVlNRU5UID0gXCJQQVRJRU5UX1BBWU1FTlRcIixcblxuICAvLyBNZWRpY2FsIFNlcnZpY2VcbiAgTUVESUNBTF9TRVJWSUNFID0gXCJNRURJQ0FMX1NFUlZJQ0VcIixcbiAgTUVESUNBTF9TRVJWSUNFX05PVEUgPSBcIk1FRElDQUxfU0VSVklDRV9OT1RFXCIsXG4gIE1FRElDQUxfU0VSVklDRV9TQ0hFRFVMRSA9IFwiTUVESUNBTF9TRVJWSUNFX1NDSEVEVUxFXCIsXG4gIE1FRElDQUxfU0VSVklDRV9GRUVTID0gXCJNRURJQ0FMX1NFUlZJQ0VfRkVFU1wiLFxuICBNRURJQ0FMX1NFUlZJQ0VfU1RBVFVTID0gXCJNRURJQ0FMX1NFUlZJQ0VfU1RBVFVTXCIsXG5cbiAgLy8gTWVkaWNhbCByZXNvdXJjZXNcbiAgTUVESUNBTF9OT1RFID0gXCJNRURJQ0FMX05PVEVcIixcbiAgTUVESUNBTF9SRUNPUkQgPSBcIk1FRElDQUxfUkVDT1JEXCIsXG4gIE1FRElDQUxfSElTVE9SWSA9IFwiTUVESUNBTF9ISVNUT1JZXCIsXG4gIE1FRElDQUxfSElTVE9SWV9NT0RFTCA9IFwiTUVESUNBTF9ISVNUT1JZX01PREVMXCIsXG4gIFBSRVNDUklQVElPTiA9IFwiUFJFU0NSSVBUSU9OXCIsXG4gIERJQUdOT1NJUyA9IFwiRElBR05PU0lTXCIsXG4gIE9CU0VSVkFUSU9OID0gXCJPQlNFUlZBVElPTlwiLFxuICBNRURJQ0FUSU9OID0gXCJNRURJQ0FUSU9OXCIsXG4gIEFMTEVSR1kgPSBcIkFMTEVSR1lcIixcbiAgSU1NVU5JWkFUSU9OID0gXCJJTU1VTklaQVRJT05cIixcbiAgUFJPQ0VEVVJFID0gXCJQUk9DRURVUkVcIixcblxuICAvLyBDbGluaWNhbCAmIE1lYXN1cmVtZW50c1xuICBDTElOSUNBTF9OT1RFID0gXCJDTElOSUNBTF9OT1RFXCIsXG4gIFZJVEFMX1NJR05TID0gXCJWSVRBTF9TSUdOU1wiLFxuICBNRUFTVVJFX01PREVMID0gXCJNRUFTVVJFX01PREVMXCIsXG4gIENBTENVTEFURURfTUVBU1VSRV9NT0RFTCA9IFwiQ0FMQ1VMQVRFRF9NRUFTVVJFX01PREVMXCIsXG5cbiAgLy8gRG9jdW1lbnRzXG4gIFVQTE9BREVEX0RPQ1VNRU5UID0gXCJVUExPQURFRF9ET0NVTUVOVFwiLFxuICBET0NVTUVOVF9MQVlPVVQgPSBcIkRPQ1VNRU5UX0xBWU9VVFwiLFxuICBHRU5FUkFURURfRE9DVU1FTlQgPSBcIkdFTkVSQVRFRF9ET0NVTUVOVFwiLFxuICBET0NVTUVOVF9NT0RFTCA9IFwiRE9DVU1FTlRfTU9ERUxcIixcbiAgU05JUFBFVCA9IFwiU05JUFBFVFwiLFxuXG4gIC8vIFNjaGVkdWxpbmcgJiBMb2NhdGlvblxuICBMT0NBVElPTiA9IFwiTE9DQVRJT05cIixcbiAgVEFTS19UWVBFID0gXCJUQVNLX1RZUEVcIixcblxuICAvLyBEaWFnbm9zdGljXG4gIExBQl9SRVNVTFQgPSBcIkxBQl9SRVNVTFRcIixcbiAgSU1BR0lORyA9IFwiSU1BR0lOR1wiLFxuXG4gIC8vIE1lbWJlcnNoaXAgJiBTZXR0aW5nc1xuICBNRU1CRVJTSElQID0gXCJNRU1CRVJTSElQXCIsXG4gIFNFVFRJTkdTID0gXCJTRVRUSU5HU1wiLFxuXG4gIC8vIFN5c3RlbVxuICBOT1RJRklDQVRJT04gPSBcIk5PVElGSUNBVElPTlwiLFxuICBSRVBPUlQgPSBcIlJFUE9SVFwiLFxuICBBVURJVF9MT0cgPSBcIkFVRElUX0xPR1wiLFxuICBTWVNURU0gPSBcIlNZU1RFTVwiLFxuXG4gIC8vIEdlbmVyaWMgcmVzb3VyY2VzXG4gIFBVQkxJQ19SRVNPVVJDRSA9IFwiUFVCTElDX1JFU09VUkNFXCIsXG4gIE1FRElDQUxfUkVTT1VSQ0UgPSBcIk1FRElDQUxfUkVTT1VSQ0VcIixcbn1cblxuLyoqXG4gKiBNZWRpY2FsIHJlc291cmNlcyAtIHJlcXVpcmUgc3BlY2lhbCBhY2Nlc3MgY29udHJvbFxuICovXG5leHBvcnQgY29uc3QgTUVESUNBTF9SRVNPVVJDRVM6IFJlc291cmNlW10gPSBbXG4gIFJlc291cmNlLlBBVElFTlQsXG4gIFJlc291cmNlLlBBVElFTlRfTUVESUNBTF9OT1RFUyxcbiAgUmVzb3VyY2UuUEFUSUVOVF9NRURJQ0FMX1BST1BFUlRJRVMsXG4gIFJlc291cmNlLlBBVElFTlRfUEFZTUVOVCxcbiAgUmVzb3VyY2UuTUVESUNBTF9TRVJWSUNFLFxuICBSZXNvdXJjZS5NRURJQ0FMX1NFUlZJQ0VfTk9URSxcbiAgUmVzb3VyY2UuTUVESUNBTF9TRVJWSUNFX1NDSEVEVUxFLFxuICBSZXNvdXJjZS5NRURJQ0FMX1NFUlZJQ0VfRkVFUyxcbiAgUmVzb3VyY2UuTUVESUNBTF9TRVJWSUNFX1NUQVRVUyxcbiAgUmVzb3VyY2UuTUVESUNBTF9OT1RFLFxuICBSZXNvdXJjZS5NRURJQ0FMX1JFQ09SRCxcbiAgUmVzb3VyY2UuTUVESUNBTF9ISVNUT1JZLFxuICBSZXNvdXJjZS5NRURJQ0FMX0hJU1RPUllfTU9ERUwsXG4gIFJlc291cmNlLlBSRVNDUklQVElPTixcbiAgUmVzb3VyY2UuRElBR05PU0lTLFxuICBSZXNvdXJjZS5PQlNFUlZBVElPTixcbiAgUmVzb3VyY2UuTUVESUNBVElPTixcbiAgUmVzb3VyY2UuQUxMRVJHWSxcbiAgUmVzb3VyY2UuSU1NVU5JWkFUSU9OLFxuICBSZXNvdXJjZS5QUk9DRURVUkUsXG4gIFJlc291cmNlLkNMSU5JQ0FMX05PVEUsXG4gIFJlc291cmNlLlZJVEFMX1NJR05TLFxuICBSZXNvdXJjZS5NRUFTVVJFX01PREVMLFxuICBSZXNvdXJjZS5DQUxDVUxBVEVEX01FQVNVUkVfTU9ERUwsXG4gIFJlc291cmNlLkxBQl9SRVNVTFQsXG4gIFJlc291cmNlLklNQUdJTkcsXG4gIFJlc291cmNlLk1FRElDQUxfUkVTT1VSQ0UsXG5dO1xuXG4vKipcbiAqIFB1YmxpYyByZXNvdXJjZXMgLSBzdGFuZGFyZCBhY2Nlc3MgY29udHJvbFxuICovXG5leHBvcnQgY29uc3QgUFVCTElDX1JFU09VUkNFUzogUmVzb3VyY2VbXSA9IFtcbiAgUmVzb3VyY2UuQUNDT1VOVCxcbiAgUmVzb3VyY2UuQUNDT1VOVF9PV05FUlNISVAsXG4gIFJlc291cmNlLkFDQ09VTlRfUFJFRkVSRU5DRVMsXG4gIFJlc291cmNlLlVTRVIsXG4gIFJlc291cmNlLkNPTlRBQ1QsXG4gIFJlc291cmNlLlBBVElFTlRfUFVCTElDX1BST1BFUlRJRVMsXG4gIFJlc291cmNlLlVQTE9BREVEX0RPQ1VNRU5ULFxuICBSZXNvdXJjZS5ET0NVTUVOVF9MQVlPVVQsXG4gIFJlc291cmNlLkdFTkVSQVRFRF9ET0NVTUVOVCxcbiAgUmVzb3VyY2UuRE9DVU1FTlRfTU9ERUwsXG4gIFJlc291cmNlLlNOSVBQRVQsXG4gIFJlc291cmNlLkxPQ0FUSU9OLFxuICBSZXNvdXJjZS5UQVNLX1RZUEUsXG4gIFJlc291cmNlLk1FTUJFUlNISVAsXG4gIFJlc291cmNlLlNFVFRJTkdTLFxuICBSZXNvdXJjZS5OT1RJRklDQVRJT04sXG4gIFJlc291cmNlLlJFUE9SVCxcbiAgUmVzb3VyY2UuQVVESVRfTE9HLFxuICBSZXNvdXJjZS5TWVNURU0sXG4gIFJlc291cmNlLlBVQkxJQ19SRVNPVVJDRSxcbl07XG5cbi8qKlxuICogQ2hlY2sgaWYgYSByZXNvdXJjZSBpcyBtZWRpY2FsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01lZGljYWxSZXNvdXJjZShyZXNvdXJjZTogUmVzb3VyY2UpOiBib29sZWFuIHtcbiAgcmV0dXJuIE1FRElDQUxfUkVTT1VSQ0VTLmluY2x1ZGVzKHJlc291cmNlKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHJlc291cmNlIGlzIHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQdWJsaWNSZXNvdXJjZShyZXNvdXJjZTogUmVzb3VyY2UpOiBib29sZWFuIHtcbiAgcmV0dXJuIFBVQkxJQ19SRVNPVVJDRVMuaW5jbHVkZXMocmVzb3VyY2UpO1xufVxuIl19
package/package.json CHANGED
@@ -30,7 +30,7 @@
30
30
  "publishConfig": {
31
31
  "access": "public"
32
32
  },
33
- "version": "0.0.1",
33
+ "version": "0.0.2",
34
34
  "jest": {
35
35
  "coverageProvider": "v8",
36
36
  "testMatch": [