@magda/typescript-common 1.2.0-rc.0 → 2.0.0-alpha.0

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 (73) hide show
  1. package/dist/OpaCompileResponseParser.d.ts +147 -34
  2. package/dist/OpaCompileResponseParser.js +479 -293
  3. package/dist/OpaCompileResponseParser.js.map +1 -1
  4. package/dist/SQLUtils.d.ts +70 -0
  5. package/dist/SQLUtils.js +263 -0
  6. package/dist/SQLUtils.js.map +1 -0
  7. package/dist/ServerError.d.ts +9 -0
  8. package/dist/ServerError.js +17 -0
  9. package/dist/ServerError.js.map +1 -0
  10. package/dist/authorization-api/authMiddleware.d.ts +59 -1
  11. package/dist/authorization-api/authMiddleware.js +146 -3
  12. package/dist/authorization-api/authMiddleware.js.map +1 -1
  13. package/dist/authorization-api/constants.d.ts +5 -0
  14. package/dist/authorization-api/constants.js +13 -0
  15. package/dist/authorization-api/constants.js.map +1 -0
  16. package/dist/authorization-api/model.d.ts +1 -6
  17. package/dist/express/getNoCacheHeaders.d.ts +6 -0
  18. package/dist/express/getNoCacheHeaders.js +9 -0
  19. package/dist/express/getNoCacheHeaders.js.map +1 -0
  20. package/dist/express/setResponseNoCache.d.ts +3 -0
  21. package/dist/express/setResponseNoCache.js +9 -0
  22. package/dist/express/setResponseNoCache.js.map +1 -0
  23. package/dist/generated/registry/api.d.ts +36 -2
  24. package/dist/generated/registry/api.js +140 -2
  25. package/dist/generated/registry/api.js.map +1 -1
  26. package/dist/getAbsoluteUrl.d.ts +3 -2
  27. package/dist/getAbsoluteUrl.js +2 -1
  28. package/dist/getAbsoluteUrl.js.map +1 -1
  29. package/dist/opa/AspectQuery.d.ts +71 -0
  30. package/dist/opa/AspectQuery.js +216 -0
  31. package/dist/opa/AspectQuery.js.map +1 -0
  32. package/dist/opa/AuthDecision.d.ts +51 -0
  33. package/dist/opa/AuthDecision.js +241 -0
  34. package/dist/opa/AuthDecision.js.map +1 -0
  35. package/dist/opa/AuthDecisionQueryClient.d.ts +23 -0
  36. package/dist/opa/AuthDecisionQueryClient.js +110 -0
  37. package/dist/opa/AuthDecisionQueryClient.js.map +1 -0
  38. package/dist/pgTypes.d.ts +1 -0
  39. package/dist/pgTypes.js +18 -0
  40. package/dist/pgTypes.js.map +1 -0
  41. package/dist/registry/AuthorizedRegistryClient.d.ts +1 -0
  42. package/dist/registry/AuthorizedRegistryClient.js +17 -0
  43. package/dist/registry/AuthorizedRegistryClient.js.map +1 -1
  44. package/dist/registry/RegistryClient.d.ts +10 -0
  45. package/dist/registry/RegistryClient.js +32 -0
  46. package/dist/registry/RegistryClient.js.map +1 -1
  47. package/dist/test/getAuthDecision.spec.js +2 -2
  48. package/dist/test/getAuthDecision.spec.js.map +1 -1
  49. package/dist/test/sampleAuthDecisions/content.json +29 -0
  50. package/dist/test/sampleAuthDecisions/datasetPermissionWithOrgUnitConstraint.json +79 -0
  51. package/dist/test/sampleAuthDecisions/simple.json +29 -0
  52. package/dist/test/sampleAuthDecisions/singleTermAspectRef.json +39 -0
  53. package/dist/test/sampleAuthDecisions/unconditionalFalseSimple.json +6 -0
  54. package/dist/test/sampleAuthDecisions/unconditionalNotMacthed.json +6 -0
  55. package/dist/test/sampleAuthDecisions/unconditionalNotMacthedWithExtraRefs.json +6 -0
  56. package/dist/test/sampleAuthDecisions/unconditionalTrue.json +6 -0
  57. package/dist/test/sampleAuthDecisions/unconditionalTrueSimple.json +6 -0
  58. package/dist/test/sampleAuthDecisions/unconditionalTrueWithDefaultRule.json +6 -0
  59. package/dist/test/sampleAuthDecisions/withDefaultRule.json +6 -0
  60. package/dist/test/{sampleOpaResponse.json → sampleOpaResponses/content.json} +0 -0
  61. package/dist/test/sampleOpaResponses/datasetPermissionWithOrgUnitConstraint.json +341 -0
  62. package/dist/test/{sampleOpaResponseSimple.json → sampleOpaResponses/simple.json} +0 -0
  63. package/dist/test/sampleOpaResponses/singleTermAspectRef.json +233 -0
  64. package/dist/test/sampleOpaResponses/unconditionalFalseSimple.json +3 -0
  65. package/dist/test/sampleOpaResponses/unconditionalNotMacthed.json +73 -0
  66. package/dist/test/sampleOpaResponses/unconditionalNotMacthedWithExtraRefs.json +155 -0
  67. package/dist/test/{sampleOpaResponseUnconditionalTrue.json → sampleOpaResponses/unconditionalTrue.json} +0 -0
  68. package/dist/test/sampleOpaResponses/unconditionalTrueSimple.json +48 -0
  69. package/dist/test/{sampleOpaResponseUnconditionalTrueWithDefaultRule.json → sampleOpaResponses/unconditionalTrueWithDefaultRule.json} +0 -0
  70. package/dist/test/{sampleOpaResponseWithDefaultRule.json → sampleOpaResponses/withDefaultRule.json} +0 -0
  71. package/dist/test/testOpaCompileResponseParser.spec.js +195 -20
  72. package/dist/test/testOpaCompileResponseParser.spec.js.map +1 -1
  73. package/package.json +7 -3
@@ -95,6 +95,13 @@ export declare class RegoRule {
95
95
  * @memberof RegoRule
96
96
  */
97
97
  evaluate(): this;
98
+ /**
99
+ * Whether or not the rule is resolvable (i.e. we can tell whether it's matched or not) now.
100
+ *
101
+ * @return {*} {boolean}
102
+ * @memberof RegoRule
103
+ */
104
+ isResolvable(): boolean;
98
105
  /**
99
106
  * Generate Human Readable string of this rule
100
107
  * If it's fully evaluated, the output will be true or false (or actual rule value)
@@ -104,6 +111,43 @@ export declare class RegoRule {
104
111
  * @memberof RegoRule
105
112
  */
106
113
  toHumanReadableString(): string;
114
+ toData(): {
115
+ default: boolean;
116
+ value: RegoValue;
117
+ fullName: string;
118
+ name: string;
119
+ expressions: ({
120
+ negated: boolean;
121
+ index: number;
122
+ terms: {
123
+ type: string;
124
+ value: RegoTermValue;
125
+ }[];
126
+ } | {
127
+ index: number;
128
+ terms: {
129
+ type: string;
130
+ value: RegoTermValue;
131
+ }[];
132
+ negated?: undefined;
133
+ })[];
134
+ };
135
+ toJson(): string;
136
+ toConciseData(): {
137
+ default: boolean;
138
+ value: RegoValue;
139
+ fullName: string;
140
+ name: string;
141
+ expressions: {
142
+ negated: boolean;
143
+ operator: string;
144
+ operands: {
145
+ isRef: boolean;
146
+ value: RegoTermValue;
147
+ }[];
148
+ }[];
149
+ };
150
+ toConciseJSON(): string;
107
151
  /**
108
152
  * Create RegoRule from Opa response data
109
153
  *
@@ -124,8 +168,16 @@ export interface RegoRefPart {
124
168
  value: string;
125
169
  }
126
170
  export declare const RegoOperators: {
127
- [k: string]: string;
171
+ readonly eq: "=";
172
+ readonly equal: "=";
173
+ readonly neq: "!=";
174
+ readonly lt: "<";
175
+ readonly gt: ">";
176
+ readonly lte: "<=";
177
+ readonly gte: ">=";
128
178
  };
179
+ export declare type RegoOperatorAstString = keyof typeof RegoOperators;
180
+ export declare type RegoOperatorString = typeof RegoOperators[RegoOperatorAstString];
129
181
  export declare type RegoTermValue = RegoRef | RegoValue;
130
182
  /**
131
183
  * RegoTerm represent the basic elements that creates an expressions.
@@ -217,7 +269,7 @@ export declare class RegoTerm {
217
269
  * @returns {string}
218
270
  * @memberof RegoTerm
219
271
  */
220
- asOperator(): string;
272
+ asOperator(): "=" | "!=" | "<" | ">" | "<=" | ">=";
221
273
  /**
222
274
  * If it's a operator term
223
275
  *
@@ -232,6 +284,23 @@ export declare class RegoTerm {
232
284
  * @memberof RegoTerm
233
285
  */
234
286
  getValue(): RegoValue;
287
+ /**
288
+ * Whether or not the RegoTerm is resolvable
289
+ *
290
+ * @return {*} {boolean}
291
+ * @memberof RegoTerm
292
+ */
293
+ isValueResolvable(): boolean;
294
+ toData(): {
295
+ type: string;
296
+ value: RegoTermValue;
297
+ };
298
+ toJson(): string;
299
+ toConciseData(): {
300
+ isRef: boolean;
301
+ value: RegoTermValue;
302
+ };
303
+ toConciseJSON(): string;
235
304
  static parseFromData(data: any, parser: OpaCompileResponseParser): RegoTerm;
236
305
  }
237
306
  /**
@@ -301,7 +370,25 @@ export declare class RegoExp {
301
370
  * @memberof RegoExp
302
371
  */
303
372
  getValue(): number | Object;
304
- isMatch(): boolean;
373
+ /**
374
+ * Whether or not a expression should be considered as "matched".
375
+ * If all expressions of a rule are "matched", the rule will be considered as "matched".
376
+ * Thus, the rule has a value.
377
+ *
378
+ * Please note: if an expression's value is `0`, empty string "", null etc, the expression is considered as "matched".
379
+ * We only consider an expression as "Not Matched" when the expression has value `false` or is undefined.
380
+ *
381
+ * @return {boolean}
382
+ * @memberof RegoExp
383
+ */
384
+ isMatched(): boolean;
385
+ /**
386
+ * Whether or not the expression is resolvable now.
387
+ *
388
+ * @return {boolean}
389
+ * @memberof RegoExp
390
+ */
391
+ isResolvable(): boolean;
305
392
  /**
306
393
  * Convert operator term to string and put rest operands into an array.
307
394
  * And then return a [Operator, Operands] structure
@@ -309,7 +396,7 @@ export declare class RegoExp {
309
396
  * @returns {[string, RegoTerm[]]}
310
397
  * @memberof RegoExp
311
398
  */
312
- toOperatorOperandsArray(): [string, RegoTerm[]];
399
+ toOperatorOperandsArray(): [RegoOperatorString, RegoTerm[]];
313
400
  /**
314
401
  * Try to evaluate the expression
315
402
  *
@@ -317,6 +404,31 @@ export declare class RegoExp {
317
404
  * @memberof RegoExp
318
405
  */
319
406
  evaluate(): this;
407
+ toData(index?: number): {
408
+ negated: boolean;
409
+ index: number;
410
+ terms: {
411
+ type: string;
412
+ value: RegoTermValue;
413
+ }[];
414
+ } | {
415
+ index: number;
416
+ terms: {
417
+ type: string;
418
+ value: RegoTermValue;
419
+ }[];
420
+ negated?: undefined;
421
+ };
422
+ toJSON(index?: number): string;
423
+ toConciseData(): {
424
+ negated: boolean;
425
+ operator: string;
426
+ operands: {
427
+ isRef: boolean;
428
+ value: RegoTermValue;
429
+ }[];
430
+ };
431
+ toConciseJSON(): string;
320
432
  static parseFromData(expData: any, parser: OpaCompileResponseParser): RegoExp;
321
433
  }
322
434
  /**
@@ -330,6 +442,11 @@ export declare class RegoRef {
330
442
  parts: RegoRefPart[];
331
443
  constructor(parts: RegoRefPart[]);
332
444
  clone(): RegoRef;
445
+ toData(): {
446
+ type: string;
447
+ value: RegoRefPart[];
448
+ };
449
+ toJson(): string;
333
450
  static parseFromData(data: any): RegoRef;
334
451
  static convertToFullRefString(parts: RegoRefPart[]): string;
335
452
  removeAllPrefixs(str: string, removalPrefixs?: string[]): string;
@@ -340,7 +457,7 @@ export declare class RegoRef {
340
457
  hasCollectionLookup(): boolean;
341
458
  isSimpleCollectionLookup(): boolean;
342
459
  isResolveAsCollectionValue(): boolean;
343
- asOperator(): string;
460
+ asOperator(): RegoOperatorString | null;
344
461
  }
345
462
  export interface CompleteRuleResult {
346
463
  fullName: string;
@@ -350,6 +467,19 @@ export interface CompleteRuleResult {
350
467
  residualRules?: RegoRule[];
351
468
  }
352
469
  export declare function value2String(value: RegoValue): string;
470
+ export declare class RegoRuleSet {
471
+ fullName: string;
472
+ name: string;
473
+ rules: RegoRule[];
474
+ defaultRule: RegoRule | null;
475
+ value?: any;
476
+ isCompleteEvaluated: boolean;
477
+ parser: OpaCompileResponseParser;
478
+ constructor(parser: OpaCompileResponseParser, rules: RegoRule[], fullName?: string, name?: string);
479
+ evaluate(): RegoRuleSet;
480
+ isResolvable(): boolean;
481
+ getResidualRules(): RegoRule[];
482
+ }
353
483
  /**
354
484
  * OPA result Parser
355
485
  *
@@ -387,6 +517,15 @@ export default class OpaCompileResponseParser {
387
517
  * @memberof OpaCompileResponseParser
388
518
  */
389
519
  rules: RegoRule[];
520
+ /**
521
+ * Parsed, compressed & evaluated rule sets
522
+ *
523
+ * @type {RegoRuleSet[]}
524
+ * @memberof OpaCompileResponseParser
525
+ */
526
+ ruleSets: {
527
+ [fullName: string]: RegoRuleSet;
528
+ };
390
529
  queries: RegoExp[];
391
530
  /**
392
531
  * A cache of all resolved rule result
@@ -416,26 +555,9 @@ export default class OpaCompileResponseParser {
416
555
  * @memberof OpaCompileResponseParser
417
556
  */
418
557
  parse(json: any): RegoRule[];
419
- /**
420
- * Tried to merge rules outcome so that the ref value can be established easier
421
- * After this step, any rules doesn't involve unknown should be merged to one value
422
- * This will help to generate more concise query later.
423
- * `CompleteRule` rule involves no `unknowns`
424
- *
425
- * Only for internal usage
426
- *
427
- * @private
428
- * @memberof OpaCompileResponseParser
429
- */
430
- private calculateCompleteRuleResult;
431
- /**
432
- * Only for internal usage
433
- *
434
- * @returns
435
- * @private
436
- * @memberof OpaCompileResponseParser
437
- */
438
- private reduceDependencies;
558
+ isRefResolvable(fullName: string): boolean;
559
+ getRefValue(fullName: string): any;
560
+ private resolveAllRuleSets;
439
561
  /**
440
562
  * Call to evaluate a rule
441
563
  *
@@ -466,15 +588,6 @@ export default class OpaCompileResponseParser {
466
588
  * @memberof OpaCompileResponseParser
467
589
  */
468
590
  evaluateAsHumanReadableString(): string;
469
- /**
470
- * Only for internal usage
471
- *
472
- * @param {RegoRule} rule
473
- * @returns {CompleteRuleResult}
474
- * @private
475
- * @memberof OpaCompileResponseParser
476
- */
477
- private createCompleteRuleResult;
478
591
  reportWarns(msg: string): void;
479
592
  }
480
593
  export declare function unknown2Ref(unknown: string): string;