@uptime.app/contracts 3.0.45 → 3.0.46

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.
@@ -16,13 +16,11 @@ export interface BuildAclOptions {
16
16
  }
17
17
  export declare function parseAclEntry(entry: string): ParsedAclEntry | null;
18
18
  export declare function getAclValuesByNamespace(acl: string[], namespace: string, options?: GetAclValuesOptions): string[];
19
- /**
20
- * Backward-compatible helper:
21
- * - default returns only included catalogue ids
22
- * - pass { mode: 'all' } to include both includes and excludes
23
- * - pass { mode: 'excluded' } to get only excluded catalogue ids
24
- */
25
- export declare function getCatalogueIdsFromAcl(acl: string[], options?: GetAclValuesOptions): string[];
19
+ export declare function aclFor({ userId, organisationIds, catalogueIds }: {
20
+ userId: string;
21
+ organisationIds: string[];
22
+ catalogueIds: string[];
23
+ }): string[];
26
24
  export declare class AclBuilder {
27
25
  private included;
28
26
  private excluded;
@@ -1 +1 @@
1
- {"version":3,"file":"acl-utils.d.ts","sourceRoot":"","sources":["../../../src/acl/acl-utils.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,CAAC;AAE3D,MAAM,WAAW,cAAc;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAChC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAMD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAgClE;AAED,wBAAgB,uBAAuB,CACnC,GAAG,EAAE,MAAM,EAAE,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,mBAAwB,GAClC,MAAM,EAAE,CAqBV;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAClC,GAAG,EAAE,MAAM,EAAE,EACb,OAAO,GAAE,mBAAwB,GAClC,MAAM,EAAE,CAEV;AAED,qBAAa,UAAU;IACnB,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,QAAQ,CAAqB;gBAEzB,OAAO,GAAE,eAAoB;IAgBzC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAe3B,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAKhC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAO9C,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAO7C,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIzC,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIxC,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAI/C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIlC,KAAK,IAAI,MAAM,EAAE;CAMpB"}
1
+ {"version":3,"file":"acl-utils.d.ts","sourceRoot":"","sources":["../../../src/acl/acl-utils.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,CAAC;AAE3D,MAAM,WAAW,cAAc;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAChC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAMD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAgClE;AAED,wBAAgB,uBAAuB,CACnC,GAAG,EAAE,MAAM,EAAE,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,mBAAwB,GAClC,MAAM,EAAE,CAqBV;AAED,wBAAgB,MAAM,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,YAetI;AAED,qBAAa,UAAU;IACnB,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,QAAQ,CAAqB;gBAEzB,OAAO,GAAE,eAAoB;IAgBzC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAe3B,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAKhC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAO9C,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAO7C,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIzC,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIxC,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAI/C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIlC,KAAK,IAAI,MAAM,EAAE;CAMpB"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AclBuilder = exports.getCatalogueIdsFromAcl = exports.getAclValuesByNamespace = exports.parseAclEntry = void 0;
3
+ exports.AclBuilder = exports.aclFor = exports.getAclValuesByNamespace = exports.parseAclEntry = void 0;
4
4
  function normalizeAclEntry(entry) {
5
5
  return entry.trim();
6
6
  }
@@ -54,16 +54,18 @@ function getAclValuesByNamespace(acl, namespace, options = {}) {
54
54
  return dedupe ? Array.from(new Set(values)) : values;
55
55
  }
56
56
  exports.getAclValuesByNamespace = getAclValuesByNamespace;
57
- /**
58
- * Backward-compatible helper:
59
- * - default returns only included catalogue ids
60
- * - pass { mode: 'all' } to include both includes and excludes
61
- * - pass { mode: 'excluded' } to get only excluded catalogue ids
62
- */
63
- function getCatalogueIdsFromAcl(acl, options = {}) {
64
- return getAclValuesByNamespace(acl, 'catalogue', options);
57
+ function aclFor({ userId, organisationIds, catalogueIds }) {
58
+ const builder = new AclBuilder({ includeUser: userId });
59
+ // everyone has access to the uptime catalogue
60
+ builder.allowCatalogue('uptime');
61
+ catalogueIds.forEach(catalogueId => builder.allowCatalogue(catalogueId));
62
+ // each b2b has a catalogue called b2b:<organisationId> so permit access to this
63
+ organisationIds.forEach(organisationId => builder.allowCatalogue(`b2b:${organisationId}`));
64
+ // previously we also had acl of b2b:<organisationId> that is still being used for collections
65
+ organisationIds.forEach(organisationId => builder.allowOrganisation(organisationId));
66
+ return builder.build();
65
67
  }
66
- exports.getCatalogueIdsFromAcl = getCatalogueIdsFromAcl;
68
+ exports.aclFor = aclFor;
67
69
  class AclBuilder {
68
70
  constructor(options = {}) {
69
71
  this.included = new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"acl-utils.js","sourceRoot":"","sources":["../../../src/acl/acl-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acl-utils.js","sourceRoot":"","sources":["../../../src/acl/acl-utils.ts"],"names":[],"mappings":"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"}
@@ -16,13 +16,11 @@ export interface BuildAclOptions {
16
16
  }
17
17
  export declare function parseAclEntry(entry: string): ParsedAclEntry | null;
18
18
  export declare function getAclValuesByNamespace(acl: string[], namespace: string, options?: GetAclValuesOptions): string[];
19
- /**
20
- * Backward-compatible helper:
21
- * - default returns only included catalogue ids
22
- * - pass { mode: 'all' } to include both includes and excludes
23
- * - pass { mode: 'excluded' } to get only excluded catalogue ids
24
- */
25
- export declare function getCatalogueIdsFromAcl(acl: string[], options?: GetAclValuesOptions): string[];
19
+ export declare function aclFor({ userId, organisationIds, catalogueIds }: {
20
+ userId: string;
21
+ organisationIds: string[];
22
+ catalogueIds: string[];
23
+ }): string[];
26
24
  export declare class AclBuilder {
27
25
  private included;
28
26
  private excluded;
@@ -1 +1 @@
1
- {"version":3,"file":"acl-utils.d.ts","sourceRoot":"","sources":["../../../src/acl/acl-utils.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,CAAC;AAE3D,MAAM,WAAW,cAAc;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAChC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAMD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAgClE;AAED,wBAAgB,uBAAuB,CACnC,GAAG,EAAE,MAAM,EAAE,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,mBAAwB,GAClC,MAAM,EAAE,CAqBV;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAClC,GAAG,EAAE,MAAM,EAAE,EACb,OAAO,GAAE,mBAAwB,GAClC,MAAM,EAAE,CAEV;AAED,qBAAa,UAAU;IACnB,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,QAAQ,CAAqB;gBAEzB,OAAO,GAAE,eAAoB;IAgBzC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAe3B,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAKhC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAO9C,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAO7C,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIzC,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIxC,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAI/C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIlC,KAAK,IAAI,MAAM,EAAE;CAMpB"}
1
+ {"version":3,"file":"acl-utils.d.ts","sourceRoot":"","sources":["../../../src/acl/acl-utils.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,CAAC;AAE3D,MAAM,WAAW,cAAc;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAChC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAMD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAgClE;AAED,wBAAgB,uBAAuB,CACnC,GAAG,EAAE,MAAM,EAAE,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,mBAAwB,GAClC,MAAM,EAAE,CAqBV;AAED,wBAAgB,MAAM,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,YAetI;AAED,qBAAa,UAAU;IACnB,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,QAAQ,CAAqB;gBAEzB,OAAO,GAAE,eAAoB;IAgBzC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAe3B,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAKhC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAO9C,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAO7C,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIzC,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIxC,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAI/C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIlC,KAAK,IAAI,MAAM,EAAE;CAMpB"}
@@ -49,14 +49,16 @@ export function getAclValuesByNamespace(acl, namespace, options = {}) {
49
49
  .map(entry => entry.value);
50
50
  return dedupe ? Array.from(new Set(values)) : values;
51
51
  }
52
- /**
53
- * Backward-compatible helper:
54
- * - default returns only included catalogue ids
55
- * - pass { mode: 'all' } to include both includes and excludes
56
- * - pass { mode: 'excluded' } to get only excluded catalogue ids
57
- */
58
- export function getCatalogueIdsFromAcl(acl, options = {}) {
59
- return getAclValuesByNamespace(acl, 'catalogue', options);
52
+ export function aclFor({ userId, organisationIds, catalogueIds }) {
53
+ const builder = new AclBuilder({ includeUser: userId });
54
+ // everyone has access to the uptime catalogue
55
+ builder.allowCatalogue('uptime');
56
+ catalogueIds.forEach(catalogueId => builder.allowCatalogue(catalogueId));
57
+ // each b2b has a catalogue called b2b:<organisationId> so permit access to this
58
+ organisationIds.forEach(organisationId => builder.allowCatalogue(`b2b:${organisationId}`));
59
+ // previously we also had acl of b2b:<organisationId> that is still being used for collections
60
+ organisationIds.forEach(organisationId => builder.allowOrganisation(organisationId));
61
+ return builder.build();
60
62
  }
61
63
  export class AclBuilder {
62
64
  constructor(options = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"acl-utils.js","sourceRoot":"","sources":["../../../src/acl/acl-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acl-utils.js","sourceRoot":"","sources":["../../../src/acl/acl-utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uptime.app/contracts",
3
- "version": "3.0.45",
3
+ "version": "3.0.46",
4
4
  "license": "MIT",
5
5
  "types": "./dist/esm/index.d.ts",
6
6
  "main": "./dist/cjs/index.js",
@@ -14,5 +14,5 @@
14
14
  "devDependencies": {
15
15
  "typescript": "^5.4.3"
16
16
  },
17
- "gitHead": "8e8bf6e266cc2ed3f33da892db49db9158f6d3f6"
17
+ "gitHead": "3583e6948f32e425cbc0f82d5f13994d22aabe85"
18
18
  }
@@ -0,0 +1,272 @@
1
+ import { parseAclEntry, getAclValuesByNamespace, aclFor, AclBuilder } from './acl-utils';
2
+
3
+ describe('parseAclEntry', () => {
4
+
5
+ test('returns null for empty string', () => {
6
+ expect(parseAclEntry('')).toBeNull();
7
+ });
8
+
9
+ test('returns null for whitespace-only string', () => {
10
+ expect(parseAclEntry(' ')).toBeNull();
11
+ });
12
+
13
+ test('parses a simple namespace-only entry', () => {
14
+ expect(parseAclEntry('public')).toEqual({
15
+ raw: 'public',
16
+ excluded: false,
17
+ namespace: 'public',
18
+ value: null
19
+ });
20
+ });
21
+
22
+ test('parses a namespace:value entry', () => {
23
+ expect(parseAclEntry('catalogue:uptime')).toEqual({
24
+ raw: 'catalogue:uptime',
25
+ excluded: false,
26
+ namespace: 'catalogue',
27
+ value: 'uptime'
28
+ });
29
+ });
30
+
31
+ test('parses an excluded namespace-only entry', () => {
32
+ expect(parseAclEntry('!public')).toEqual({
33
+ raw: '!public',
34
+ excluded: true,
35
+ namespace: 'public',
36
+ value: null
37
+ });
38
+ });
39
+
40
+ test('parses an excluded namespace:value entry', () => {
41
+ expect(parseAclEntry('!catalogue:uptime')).toEqual({
42
+ raw: '!catalogue:uptime',
43
+ excluded: true,
44
+ namespace: 'catalogue',
45
+ value: 'uptime'
46
+ });
47
+ });
48
+
49
+ test('trims leading and trailing whitespace', () => {
50
+ expect(parseAclEntry(' catalogue:uptime ')).toEqual({
51
+ raw: 'catalogue:uptime',
52
+ excluded: false,
53
+ namespace: 'catalogue',
54
+ value: 'uptime'
55
+ });
56
+ });
57
+
58
+ test('returns null when namespace is empty (entry starts with colon)', () => {
59
+ expect(parseAclEntry(':value')).toBeNull();
60
+ });
61
+
62
+ test('preserves colons in value', () => {
63
+ expect(parseAclEntry('catalogue:b2b:org-123')).toEqual({
64
+ raw: 'catalogue:b2b:org-123',
65
+ excluded: false,
66
+ namespace: 'catalogue',
67
+ value: 'b2b:org-123'
68
+ });
69
+ });
70
+ });
71
+
72
+ describe('getAclValuesByNamespace', () => {
73
+ const acl = [
74
+ 'public',
75
+ 'catalogue:uptime',
76
+ 'catalogue:premium',
77
+ '!catalogue:restricted',
78
+ 'b2b:org-1',
79
+ '!b2b:org-2',
80
+ 'user:user-123'
81
+ ];
82
+
83
+ test('returns included values for a namespace by default', () => {
84
+ expect(getAclValuesByNamespace(acl, 'catalogue')).toEqual(['uptime', 'premium']);
85
+ });
86
+
87
+ test('returns excluded values when mode is "excluded"', () => {
88
+ expect(getAclValuesByNamespace(acl, 'catalogue', { mode: 'excluded' })).toEqual(['restricted']);
89
+ });
90
+
91
+ test('returns all values when mode is "all"', () => {
92
+ expect(getAclValuesByNamespace(acl, 'catalogue', { mode: 'all' })).toEqual(['uptime', 'premium', 'restricted']);
93
+ });
94
+
95
+ test('returns empty array when namespace has no matches', () => {
96
+ expect(getAclValuesByNamespace(acl, 'subject')).toEqual([]);
97
+ });
98
+
99
+ test('deduplicates values by default', () => {
100
+ const aclWithDupes = ['catalogue:uptime', 'catalogue:uptime', 'catalogue:premium'];
101
+ expect(getAclValuesByNamespace(aclWithDupes, 'catalogue')).toEqual(['uptime', 'premium']);
102
+ });
103
+
104
+ test('preserves duplicates when dedupe is false', () => {
105
+ const aclWithDupes = ['catalogue:uptime', 'catalogue:uptime', 'catalogue:premium'];
106
+ expect(getAclValuesByNamespace(aclWithDupes, 'catalogue', { dedupe: false })).toEqual(['uptime', 'uptime', 'premium']);
107
+ });
108
+
109
+ test('excludes namespace-only entries (no value)', () => {
110
+ expect(getAclValuesByNamespace(acl, 'public')).toEqual([]);
111
+ });
112
+
113
+ test('returns empty array for empty acl', () => {
114
+ expect(getAclValuesByNamespace([], 'catalogue')).toEqual([]);
115
+ });
116
+
117
+ test('skips invalid entries', () => {
118
+ const aclWithInvalid = ['', ' ', 'catalogue:uptime'];
119
+ expect(getAclValuesByNamespace(aclWithInvalid, 'catalogue')).toEqual(['uptime']);
120
+ });
121
+ });
122
+
123
+ describe('AclBuilder', () => {
124
+ test('includes "public" by default', () => {
125
+ const acl = new AclBuilder().build();
126
+ expect(acl).toContain('public');
127
+ });
128
+
129
+ test('excludes "public" when includePublic is false', () => {
130
+ const acl = new AclBuilder({ includePublic: false }).build();
131
+ expect(acl).not.toContain('public');
132
+ });
133
+
134
+ test('includes user entry when includeUser is specified', () => {
135
+ const acl = new AclBuilder({ includeUser: 'user-123' }).build();
136
+ expect(acl).toContain('user:user-123');
137
+ });
138
+
139
+ test('merges baseAcl entries', () => {
140
+ const acl = new AclBuilder({ baseAcl: ['catalogue:uptime', '!catalogue:restricted'] }).build();
141
+ expect(acl).toContain('catalogue:uptime');
142
+ expect(acl).toContain('!catalogue:restricted');
143
+ });
144
+
145
+ describe('allow', () => {
146
+ test('adds namespace:value entry', () => {
147
+ const acl = new AclBuilder({ includePublic: false }).allow('catalogue', 'uptime').build();
148
+ expect(acl).toContain('catalogue:uptime');
149
+ });
150
+
151
+ test('adds namespace-only entry when no value provided', () => {
152
+ const acl = new AclBuilder({ includePublic: false }).allow('public').build();
153
+ expect(acl).toContain('public');
154
+ });
155
+
156
+ test('removes entry from excluded when allowed', () => {
157
+ const acl = new AclBuilder({ includePublic: false })
158
+ .deny('catalogue', 'uptime')
159
+ .allow('catalogue', 'uptime')
160
+ .build();
161
+ expect(acl).toContain('catalogue:uptime');
162
+ expect(acl).not.toContain('!catalogue:uptime');
163
+ });
164
+ });
165
+
166
+ describe('deny', () => {
167
+ test('adds excluded namespace:value entry', () => {
168
+ const acl = new AclBuilder().deny('catalogue', 'restricted').build();
169
+ expect(acl).toContain('!catalogue:restricted');
170
+ });
171
+
172
+ test('removes entry from included when denied', () => {
173
+ const acl = new AclBuilder({ includePublic: false })
174
+ .allow('catalogue', 'uptime')
175
+ .deny('catalogue', 'uptime')
176
+ .build();
177
+ expect(acl).not.toContain('catalogue:uptime');
178
+ expect(acl).toContain('!catalogue:uptime');
179
+ });
180
+ });
181
+
182
+ describe('allowCatalogue', () => {
183
+ test('adds catalogue:<id> entry', () => {
184
+ const acl = new AclBuilder().allowCatalogue('premium').build();
185
+ expect(acl).toContain('catalogue:premium');
186
+ });
187
+ });
188
+
189
+ describe('denyCatalogue', () => {
190
+ test('adds !catalogue:<id> entry', () => {
191
+ const acl = new AclBuilder().denyCatalogue('restricted').build();
192
+ expect(acl).toContain('!catalogue:restricted');
193
+ });
194
+ });
195
+
196
+ describe('allowOrganisation', () => {
197
+ test('adds b2b:<id> entry', () => {
198
+ const acl = new AclBuilder().allowOrganisation('org-1').build();
199
+ expect(acl).toContain('b2b:org-1');
200
+ });
201
+ });
202
+
203
+ describe('denySubject', () => {
204
+ test('adds !subject:<value> entry', () => {
205
+ const acl = new AclBuilder().denySubject('some-topic').build();
206
+ expect(acl).toContain('!subject:some-topic');
207
+ });
208
+ });
209
+
210
+ describe('addRaw', () => {
211
+ test('adds an included raw entry', () => {
212
+ const acl = new AclBuilder({ includePublic: false }).addRaw('catalogue:uptime').build();
213
+ expect(acl).toContain('catalogue:uptime');
214
+ });
215
+
216
+ test('adds an excluded raw entry', () => {
217
+ const acl = new AclBuilder({ includePublic: false }).addRaw('!catalogue:restricted').build();
218
+ expect(acl).toContain('!catalogue:restricted');
219
+ });
220
+
221
+ test('ignores invalid raw entries', () => {
222
+ const acl = new AclBuilder({ includePublic: false }).addRaw('').build();
223
+ expect(acl).toEqual([]);
224
+ });
225
+ });
226
+
227
+ describe('addMany', () => {
228
+ test('adds multiple entries at once', () => {
229
+ const acl = new AclBuilder({ includePublic: false })
230
+ .addMany(['catalogue:uptime', 'b2b:org-1', '!catalogue:restricted'])
231
+ .build();
232
+ expect(acl).toContain('catalogue:uptime');
233
+ expect(acl).toContain('b2b:org-1');
234
+ expect(acl).toContain('!catalogue:restricted');
235
+ });
236
+ });
237
+ });
238
+
239
+ describe('aclFor', () => {
240
+ test('includes user entry', () => {
241
+ const acl = aclFor({ userId: 'user-abc', organisationIds: [], catalogueIds: [] });
242
+ expect(acl).toContain('user:user-abc');
243
+ });
244
+
245
+ test('always includes catalogue:uptime', () => {
246
+ const acl = aclFor({ userId: 'user-abc', organisationIds: [], catalogueIds: [] });
247
+ expect(acl).toContain('catalogue:uptime');
248
+ });
249
+
250
+ test('includes provided catalogue ids', () => {
251
+ const acl = aclFor({ userId: 'user-abc', organisationIds: [], catalogueIds: ['premium', 'free'] });
252
+ expect(acl).toContain('catalogue:premium');
253
+ expect(acl).toContain('catalogue:free');
254
+ });
255
+
256
+ test('includes b2b catalogue entry for each organisation', () => {
257
+ const acl = aclFor({ userId: 'user-abc', organisationIds: ['org-1', 'org-2'], catalogueIds: [] });
258
+ expect(acl).toContain('catalogue:b2b:org-1');
259
+ expect(acl).toContain('catalogue:b2b:org-2');
260
+ });
261
+
262
+ test('includes b2b namespace entry for each organisation', () => {
263
+ const acl = aclFor({ userId: 'user-abc', organisationIds: ['org-1', 'org-2'], catalogueIds: [] });
264
+ expect(acl).toContain('b2b:org-1');
265
+ expect(acl).toContain('b2b:org-2');
266
+ });
267
+
268
+ test('includes public by default', () => {
269
+ const acl = aclFor({ userId: 'user-abc', organisationIds: [], catalogueIds: [] });
270
+ expect(acl).toContain('public');
271
+ });
272
+ });
@@ -83,17 +83,21 @@ export function getAclValuesByNamespace(
83
83
  return dedupe ? Array.from(new Set(values)) : values;
84
84
  }
85
85
 
86
- /**
87
- * Backward-compatible helper:
88
- * - default returns only included catalogue ids
89
- * - pass { mode: 'all' } to include both includes and excludes
90
- * - pass { mode: 'excluded' } to get only excluded catalogue ids
91
- */
92
- export function getCatalogueIdsFromAcl(
93
- acl: string[],
94
- options: GetAclValuesOptions = {}
95
- ): string[] {
96
- return getAclValuesByNamespace(acl, 'catalogue', options);
86
+ export function aclFor({ userId, organisationIds, catalogueIds }: { userId: string; organisationIds: string[]; catalogueIds: string[] }) {
87
+ const builder = new AclBuilder({ includeUser: userId });
88
+
89
+ // everyone has access to the uptime catalogue
90
+ builder.allowCatalogue('uptime');
91
+
92
+ catalogueIds.forEach(catalogueId => builder.allowCatalogue(catalogueId));
93
+
94
+ // each b2b has a catalogue called b2b:<organisationId> so permit access to this
95
+ organisationIds.forEach(organisationId => builder.allowCatalogue(`b2b:${organisationId}`));
96
+
97
+ // previously we also had acl of b2b:<organisationId> that is still being used for collections
98
+ organisationIds.forEach(organisationId => builder.allowOrganisation(organisationId));
99
+
100
+ return builder.build();
97
101
  }
98
102
 
99
103
  export class AclBuilder {
@@ -4,6 +4,7 @@ import EXPECTED_APP_FULL_HACK from './test-data/expected-app-full-hack.json';
4
4
  import { mapToAppFullHack } from './app-full-hack';
5
5
 
6
6
  describe('converting an EnrichedHack to an AppFullHack', () => {
7
+
7
8
  test('it returns the expected fields', () => {
8
9
  const fullHackData = ENRICHED_HACK as any as EnrichedHack;
9
10
  const fullHack = mapToAppFullHack(fullHackData);
@@ -3,6 +3,7 @@ import ENRICHED_HACK from './test-data/enriched-hack.json';
3
3
  import EXPECTED_APP_RESTRICTED_HACK from './test-data/expected-app-restricted-hack.json';
4
4
  import { mapToAppRestrictedHack } from './app-restricted-hack';
5
5
  describe('converting an EnrichedHack to an AppRestrictedHack', () => {
6
+
6
7
  test('it returns the expected fields', () => {
7
8
  const enrichedHackData = ENRICHED_HACK as any as EnrichedHack;
8
9
  const restrictedHack = mapToAppRestrictedHack(enrichedHackData);