@api-client/core 0.20.8 → 0.20.10

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.
@@ -10,6 +10,7 @@ import { DataCatalog } from './lib/DataCatalog.js';
10
10
  import { Permission } from './lib/Permission.js';
11
11
  import { Ai } from './lib/Ai.js';
12
12
  import { Deployment } from './lib/Deployment.js';
13
+ import type { MockListResult } from '../sdk/SdkMock.js';
13
14
  export declare class ModelingMock {
14
15
  faker: Faker;
15
16
  organization: Organization;
@@ -23,5 +24,30 @@ export declare class ModelingMock {
23
24
  permission: Permission;
24
25
  ai: Ai;
25
26
  deployments: Deployment;
27
+ /**
28
+ * Wraps a single resource in a standard API resource response structure and serializes it to a JSON string.
29
+ *
30
+ * @param resource - The resource object to wrap.
31
+ * @returns A JSON string representation of the wrapped resource.
32
+ */
33
+ wrapResource<T extends object>(resource: T): string;
34
+ /**
35
+ * Wraps a list of items in a standard API list response structure, including an optional pagination cursor,
36
+ * and serializes it to a JSON string.
37
+ *
38
+ * @param items - The array of items to wrap.
39
+ * @param init - Optional configuration for the mock list result, such as cursor settings.
40
+ * @returns A JSON string representation of the wrapped list.
41
+ */
42
+ wrapList<T extends object>(items: (T | undefined)[], init?: MockListResult): string;
43
+ /**
44
+ * Generates or determines the pagination cursor based on the provided mock initialization options.
45
+ * If a cursor is explicitly provided, it is returned. If explicitly disabled, it returns undefined.
46
+ * Otherwise, it randomly generates a mock JWT string to simulate a cursor.
47
+ *
48
+ * @param init - Configuration object detailing cursor behavior.
49
+ * @returns The cursor string or undefined if no cursor should be present.
50
+ */
51
+ protected createCursorOption(init?: MockListResult): string | undefined;
26
52
  }
27
53
  //# sourceMappingURL=ModelingMock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ModelingMock.d.ts","sourceRoot":"","sources":["../../../src/mocking/ModelingMock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEhD,qBAAa,YAAY;IACvB,KAAK,EAAE,KAAK,CAAQ;IACpB,YAAY,eAAqB;IACjC,KAAK,QAAc;IACnB,KAAK,OAAa;IAClB,KAAK,OAAa;IAClB,UAAU,aAAmB;IAC7B,KAAK,QAAc;IACnB,KAAK,QAAc;IACnB,WAAW,cAAoB;IAC/B,UAAU,aAAmB;IAC7B,EAAE,KAAW;IACb,WAAW,aAAmB;CAC/B"}
1
+ {"version":3,"file":"ModelingMock.d.ts","sourceRoot":"","sources":["../../../src/mocking/ModelingMock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAIvD,qBAAa,YAAY;IACvB,KAAK,EAAE,KAAK,CAAQ;IACpB,YAAY,eAAqB;IACjC,KAAK,QAAc;IACnB,KAAK,OAAa;IAClB,KAAK,OAAa;IAClB,UAAU,aAAmB;IAC7B,KAAK,QAAc;IACnB,KAAK,QAAc;IACnB,WAAW,cAAoB;IAC/B,UAAU,aAAmB;IAC7B,EAAE,KAAW;IACb,WAAW,aAAmB;IAE9B;;;;;OAKG;IACI,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM;IAO1D;;;;;;;OAOG;IACI,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,MAAM;IAQ1F;;;;;;;OAOG;IACH,SAAS,CAAC,kBAAkB,CAAC,IAAI,GAAE,cAAmB,GAAG,MAAM,GAAG,SAAS;CAa5E"}
@@ -23,5 +23,53 @@ export class ModelingMock {
23
23
  permission = new Permission();
24
24
  ai = new Ai();
25
25
  deployments = new Deployment();
26
+ /**
27
+ * Wraps a single resource in a standard API resource response structure and serializes it to a JSON string.
28
+ *
29
+ * @param resource - The resource object to wrap.
30
+ * @returns A JSON string representation of the wrapped resource.
31
+ */
32
+ wrapResource(resource) {
33
+ const wrapper = {
34
+ data: resource,
35
+ };
36
+ return JSON.stringify(wrapper);
37
+ }
38
+ /**
39
+ * Wraps a list of items in a standard API list response structure, including an optional pagination cursor,
40
+ * and serializes it to a JSON string.
41
+ *
42
+ * @param items - The array of items to wrap.
43
+ * @param init - Optional configuration for the mock list result, such as cursor settings.
44
+ * @returns A JSON string representation of the wrapped list.
45
+ */
46
+ wrapList(items, init) {
47
+ const obj = {
48
+ data: items,
49
+ cursor: this.createCursorOption(init),
50
+ };
51
+ return JSON.stringify(obj);
52
+ }
53
+ /**
54
+ * Generates or determines the pagination cursor based on the provided mock initialization options.
55
+ * If a cursor is explicitly provided, it is returned. If explicitly disabled, it returns undefined.
56
+ * Otherwise, it randomly generates a mock JWT string to simulate a cursor.
57
+ *
58
+ * @param init - Configuration object detailing cursor behavior.
59
+ * @returns The cursor string or undefined if no cursor should be present.
60
+ */
61
+ createCursorOption(init = {}) {
62
+ if (init.cursor === false) {
63
+ return undefined;
64
+ }
65
+ if (typeof init.cursor === 'string') {
66
+ return init.cursor;
67
+ }
68
+ const hasCursor = init.cursor === true ? true : this.faker.datatype.boolean();
69
+ if (!hasCursor) {
70
+ return undefined;
71
+ }
72
+ return this.faker.internet.jwt();
73
+ }
26
74
  }
27
75
  //# sourceMappingURL=ModelingMock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ModelingMock.js","sourceRoot":"","sources":["../../../src/mocking/ModelingMock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAc,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEhD,MAAM,OAAO,YAAY;IACvB,KAAK,GAAU,KAAK,CAAA;IACpB,YAAY,GAAG,IAAI,YAAY,EAAE,CAAA;IACjC,KAAK,GAAG,IAAI,KAAK,EAAE,CAAA;IACnB,KAAK,GAAG,IAAI,IAAI,EAAE,CAAA;IAClB,KAAK,GAAG,IAAI,IAAI,EAAE,CAAA;IAClB,UAAU,GAAG,IAAI,UAAU,EAAE,CAAA;IAC7B,KAAK,GAAG,IAAI,KAAK,EAAE,CAAA;IACnB,KAAK,GAAG,IAAI,KAAK,EAAE,CAAA;IACnB,WAAW,GAAG,IAAI,WAAW,EAAE,CAAA;IAC/B,UAAU,GAAG,IAAI,UAAU,EAAE,CAAA;IAC7B,EAAE,GAAG,IAAI,EAAE,EAAE,CAAA;IACb,WAAW,GAAG,IAAI,UAAU,EAAE,CAAA;CAC/B","sourcesContent":["import { faker, type Faker } from '@faker-js/faker'\nimport { Organization } from './lib/Organization.js'\nimport { Group } from './lib/Group.js'\nimport { User } from './lib/User.js'\nimport { File } from './lib/File.js'\nimport { Invitation } from './lib/Invitation.js'\nimport { Trash } from './lib/Trash.js'\nimport { Patch } from './lib/Patch.js'\nimport { DataCatalog } from './lib/DataCatalog.js'\nimport { Permission } from './lib/Permission.js'\nimport { Ai } from './lib/Ai.js'\nimport { Deployment } from './lib/Deployment.js'\n\nexport class ModelingMock {\n faker: Faker = faker\n organization = new Organization()\n group = new Group()\n users = new User()\n files = new File()\n invitation = new Invitation()\n trash = new Trash()\n patch = new Patch()\n dataCatalog = new DataCatalog()\n permission = new Permission()\n ai = new Ai()\n deployments = new Deployment()\n}\n"]}
1
+ {"version":3,"file":"ModelingMock.js","sourceRoot":"","sources":["../../../src/mocking/ModelingMock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAc,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAKhD,MAAM,OAAO,YAAY;IACvB,KAAK,GAAU,KAAK,CAAA;IACpB,YAAY,GAAG,IAAI,YAAY,EAAE,CAAA;IACjC,KAAK,GAAG,IAAI,KAAK,EAAE,CAAA;IACnB,KAAK,GAAG,IAAI,IAAI,EAAE,CAAA;IAClB,KAAK,GAAG,IAAI,IAAI,EAAE,CAAA;IAClB,UAAU,GAAG,IAAI,UAAU,EAAE,CAAA;IAC7B,KAAK,GAAG,IAAI,KAAK,EAAE,CAAA;IACnB,KAAK,GAAG,IAAI,KAAK,EAAE,CAAA;IACnB,WAAW,GAAG,IAAI,WAAW,EAAE,CAAA;IAC/B,UAAU,GAAG,IAAI,UAAU,EAAE,CAAA;IAC7B,EAAE,GAAG,IAAI,EAAE,EAAE,CAAA;IACb,WAAW,GAAG,IAAI,UAAU,EAAE,CAAA;IAE9B;;;;;OAKG;IACI,YAAY,CAAmB,QAAW;QAC/C,MAAM,OAAO,GAAwB;YACnC,IAAI,EAAE,QAAQ;SACf,CAAA;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC;IAED;;;;;;;OAOG;IACI,QAAQ,CAAmB,KAAwB,EAAE,IAAqB;QAC/E,MAAM,GAAG,GAAqC;YAC5C,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;SACtC,CAAA;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IAED;;;;;;;OAOG;IACO,kBAAkB,CAAC,OAAuB,EAAE;QACpD,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,MAAM,CAAA;QACpB,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;QAC7E,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAA;IAClC,CAAC;CACF","sourcesContent":["import { faker, type Faker } from '@faker-js/faker'\nimport { Organization } from './lib/Organization.js'\nimport { Group } from './lib/Group.js'\nimport { User } from './lib/User.js'\nimport { File } from './lib/File.js'\nimport { Invitation } from './lib/Invitation.js'\nimport { Trash } from './lib/Trash.js'\nimport { Patch } from './lib/Patch.js'\nimport { DataCatalog } from './lib/DataCatalog.js'\nimport { Permission } from './lib/Permission.js'\nimport { Ai } from './lib/Ai.js'\nimport { Deployment } from './lib/Deployment.js'\nimport type { MockListResult } from '../sdk/SdkMock.js'\nimport { ResourceResponse } from '../sdk/SdkBase.js'\nimport { ContextListResult } from '../events/BaseEvents.js'\n\nexport class ModelingMock {\n faker: Faker = faker\n organization = new Organization()\n group = new Group()\n users = new User()\n files = new File()\n invitation = new Invitation()\n trash = new Trash()\n patch = new Patch()\n dataCatalog = new DataCatalog()\n permission = new Permission()\n ai = new Ai()\n deployments = new Deployment()\n\n /**\n * Wraps a single resource in a standard API resource response structure and serializes it to a JSON string.\n *\n * @param resource - The resource object to wrap.\n * @returns A JSON string representation of the wrapped resource.\n */\n public wrapResource<T extends object>(resource: T): string {\n const wrapper: ResourceResponse<T> = {\n data: resource,\n }\n return JSON.stringify(wrapper)\n }\n\n /**\n * Wraps a list of items in a standard API list response structure, including an optional pagination cursor,\n * and serializes it to a JSON string.\n *\n * @param items - The array of items to wrap.\n * @param init - Optional configuration for the mock list result, such as cursor settings.\n * @returns A JSON string representation of the wrapped list.\n */\n public wrapList<T extends object>(items: (T | undefined)[], init?: MockListResult): string {\n const obj: ContextListResult<T | undefined> = {\n data: items,\n cursor: this.createCursorOption(init),\n }\n return JSON.stringify(obj)\n }\n\n /**\n * Generates or determines the pagination cursor based on the provided mock initialization options.\n * If a cursor is explicitly provided, it is returned. If explicitly disabled, it returns undefined.\n * Otherwise, it randomly generates a mock JWT string to simulate a cursor.\n *\n * @param init - Configuration object detailing cursor behavior.\n * @returns The cursor string or undefined if no cursor should be present.\n */\n protected createCursorOption(init: MockListResult = {}): string | undefined {\n if (init.cursor === false) {\n return undefined\n }\n if (typeof init.cursor === 'string') {\n return init.cursor\n }\n const hasCursor = init.cursor === true ? true : this.faker.datatype.boolean()\n if (!hasCursor) {\n return undefined\n }\n return this.faker.internet.jwt()\n }\n}\n"]}
@@ -8,12 +8,54 @@ import type { DomainProperty } from './DomainProperty.js';
8
8
  import type { DomainAssociation } from './DomainAssociation.js';
9
9
  import { SemanticType } from './Semantics.js';
10
10
  import { AccessRule } from './rules/AccessRule.js';
11
+ /**
12
+ * Describes a mapped parameter for a route.
13
+ */
14
+ export interface RouteParam {
15
+ /**
16
+ * The name of the parameter in the path (e.g. "userId")
17
+ * This can be anything as the user can freely change the param names.
18
+ */
19
+ paramName: string;
20
+ /**
21
+ * The "key" of the exposed entity this parameter belongs to.
22
+ */
23
+ exposedEntityKey: string;
24
+ /**
25
+ * The "name" of the exposed entity this parameter belongs to.
26
+ */
27
+ exposedEntityName: string;
28
+ /**
29
+ * The primary key's property name of the exposed entity (e.g., "id").
30
+ */
31
+ propertyName: string;
32
+ /**
33
+ * The name of the association that connects the parent entity to its child (e.g., "comments")
34
+ * If its missing it means that there's no association, so there's no sub-endpoint in the path
35
+ * (e.g., `/users/123` - It's a single root endpoint - it doesn't have any sub-endpoints.)
36
+ */
37
+ associationName?: string;
38
+ }
11
39
  /**
12
40
  * Identifies a specific exposed entity and its action kind.
13
41
  */
14
42
  export interface RouteLookup {
43
+ /**
44
+ * The "key" of the exposed entity that is being accessed.
45
+ */
15
46
  exposedEntityKey: string;
47
+ /**
48
+ * The "name" of the exposed entity that is being accessed.
49
+ */
50
+ exposedEntityName: string;
51
+ /**
52
+ * The "kind" of the action that is being performed.
53
+ */
16
54
  actionKind: ActionKind;
55
+ /**
56
+ * Information about each path parameter in this route.
57
+ */
58
+ params: RouteParam[];
17
59
  }
18
60
  /**
19
61
  * A routing definition mapping a path to an action lookup.
@@ -37,6 +79,7 @@ export interface RuntimeResolvedAction {
37
79
  entity: DomainEntity;
38
80
  action: Action;
39
81
  params: Record<string, string>;
82
+ lookup: RouteLookup;
40
83
  }
41
84
  export type RuleEvaluator = (rule: AccessRule) => Promise<boolean | undefined> | boolean | undefined;
42
85
  export interface PhaseRules {
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeApiModel.d.ts","sourceRoot":"","sources":["../../../src/modeling/RuntimeApiModel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RuntimeApiModel.d.ts","sourceRoot":"","sources":["../../../src/modeling/RuntimeApiModel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAA4B,MAAM,uBAAuB,CAAA;AAG5E;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IACpB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,UAAU,EAAE,UAAU,CAAA;IACtB;;OAEG;IACH,MAAM,EAAE,UAAU,EAAE,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,WAAW,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAA;AAE1D;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,cAAc;IAC3D,UAAU,EAAE,UAAU,CAAA;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,aAAa,CAAA;IACvB,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,MAAM,EAAE,WAAW,CAAA;CACpB;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,OAAO,GAAG,SAAS,CAAA;AAEpG,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,UAAU,EAAE,CAAA;IAC7B,cAAc,EAAE,UAAU,EAAE,CAAA;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,UAAU,CAAA;IACpB,KAAK,EAAE,UAAU,CAAA;IACjB,SAAS,EAAE,UAAU,CAAA;CACtB;AAED;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;;IAY3C;;OAEG;IACH,cAAc,EAAE;QACd,IAAI,CAAC,EAAE,YAAY,CAAA;KACpB,CAAK;IAEN;;OAEG;IACH,gBAAgB,EAAE;QAChB,QAAQ,CAAC,EAAE,cAAc,CAAA;QACzB,QAAQ,CAAC,EAAE,cAAc,CAAA;QACzB,IAAI,CAAC,EAAE,cAAc,CAAA;KACtB,CAAK;IAYN;;;OAGG;IACH,IAAW,iBAAiB,IAAI,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAElE;IAsBD;;;OAGG;IACH,IAAW,uBAAuB,IAAI,WAAW,CAAC,YAAY,EAAE,cAAc,EAAE,CAAC,CAEhF;IAED;;;OAGG;IACI,uBAAuB,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,GAAG,cAAc,EAAE;IAKlG;;;OAGG;IACH,IAAW,yBAAyB,IAAI,WAAW,CAAC,YAAY,EAAE,iBAAiB,EAAE,CAAC,CAErF;IAED;;;OAGG;IACI,yBAAyB,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,GAAG,iBAAiB,EAAE;gBAK3F,MAAM,EAAE,qBAAqB,EAAE,YAAY,EAAE,gBAAgB;IA4NzE;;;;;;OAMG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IA2C7E;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,qBAAqB,GAAG,gBAAgB;IASzD,MAAM,IAAI,qBAAqB;CAazC"}
@@ -313,6 +313,7 @@ export class RuntimeApiModel extends ApiModel {
313
313
  entity,
314
314
  action,
315
315
  params,
316
+ lookup: def.lookup,
316
317
  };
317
318
  }
318
319
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeApiModel.js","sourceRoot":"","sources":["../../../src/modeling/RuntimeApiModel.ts"],"names":[],"mappings":"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","sourcesContent":["import { match, parse, exec, type RouteToken } from '@poppinss/matchit'\nimport { ApiModel, type ApiModelSchema } from './ApiModel.js'\nimport type { DataDomainSchema } from './DataDomain.js'\nimport type { ActionKind } from './actions/index.js'\nimport type { ExposedEntity } from './ExposedEntity.js'\nimport type { Action } from './actions/Action.js'\nimport type { DomainEntity } from './DomainEntity.js'\nimport type { DomainProperty } from './DomainProperty.js'\nimport type { DomainAssociation } from './DomainAssociation.js'\nimport { SemanticType } from './Semantics.js'\nimport { AccessRule, AccessRuleExecutionPhase } from './rules/AccessRule.js'\nimport { Exception } from '../exceptions/exception.js'\n\n/**\n * Identifies a specific exposed entity and its action kind.\n */\nexport interface RouteLookup {\n exposedEntityKey: string\n actionKind: ActionKind\n}\n\n/**\n * A routing definition mapping a path to an action lookup.\n */\nexport interface RouteDefinition {\n path: string\n lookup: RouteLookup\n}\n\n/**\n * A map of HTTP methods to their route definitions.\n */\nexport type RoutingMap = Record<string, RouteDefinition[]>\n\n/**\n * Schema for an API Model optimized for runtime routing.\n */\nexport interface RuntimeApiModelSchema extends ApiModelSchema {\n routingMap: RoutingMap\n}\n\nexport interface RuntimeResolvedAction {\n exposure: ExposedEntity\n entity: DomainEntity\n action: Action\n params: Record<string, string>\n}\n\nexport type RuleEvaluator = (rule: AccessRule) => Promise<boolean | undefined> | boolean | undefined\n\nexport interface PhaseRules {\n permissionRules: AccessRule[]\n mandatoryRules: AccessRule[]\n}\n\nexport interface ActionRulesCache {\n preFetch: PhaseRules\n fetch: PhaseRules\n postFetch: PhaseRules\n}\n\n/**\n * An optimized API Model subclass designed for fast runtime lookups.\n * It pre-compiles the RoutingMap into a radix tree for O(log N) or faster endpoint resolution.\n */\nexport class RuntimeApiModel extends ApiModel {\n /**\n * The parsed radix tree for fast routing.\n * Method -> ParsedRoutes\n */\n #routes = new Map<string, RouteToken[][]>()\n\n /**\n * Quick map from matchit parsed route format to our RouteDefinition for returning results\n */\n #definitions = new WeakMap<RouteToken[], RouteDefinition>()\n\n /**\n * Cached references to commonly used entities for fast runtime lookup.\n */\n cachedEntities: {\n user?: DomainEntity\n } = {}\n\n /**\n * Cached references to commonly used properties for fast runtime lookup.\n */\n cachedProperties: {\n username?: DomainProperty\n password?: DomainProperty\n role?: DomainProperty\n } = {}\n\n /**\n * Cached access rules for each action to avoid runtime computation overhead.\n */\n #actionRulesCache = new WeakMap<Action, ActionRulesCache>()\n\n /**\n * Cached session properties for fast runtime lookup.\n */\n readonly #sessionProperties = new Map<string, DomainProperty>()\n\n /**\n * Returns a readonly map of session properties.\n * Note, it creates a copy of the cached map to prevent modification of the internal state.\n */\n public get sessionProperties(): ReadonlyMap<string, DomainProperty> {\n return new Map(this.#sessionProperties)\n }\n\n /**\n * Cached properties that have at least one semantic, grouped by their entity.\n */\n readonly #semanticPropertiesCache = new Map<DomainEntity, DomainProperty[]>()\n\n /**\n * Cached properties that have at least one semantic, grouped by their entity and then by SemanticType.\n */\n readonly #propertiesBySemanticCache = new Map<DomainEntity, Map<SemanticType, DomainProperty[]>>()\n\n /**\n * Cached associations that have at least one semantic, grouped by their entity.\n */\n readonly #semanticAssociationsCache = new Map<DomainEntity, DomainAssociation[]>()\n\n /**\n * Cached associations that have at least one semantic, grouped by their entity and then by SemanticType.\n */\n readonly #associationsBySemanticCache = new Map<DomainEntity, Map<SemanticType, DomainAssociation[]>>()\n\n /**\n * Returns a readonly map of properties with semantics.\n * Note, it creates a copy of the cached map to prevent modification of the internal state.\n */\n public get semanticPropertiesCache(): ReadonlyMap<DomainEntity, DomainProperty[]> {\n return new Map(this.#semanticPropertiesCache)\n }\n\n /**\n * Returns properties for a specific entity that have a specific semantic type.\n * Provides O(1) lookup using the precomputed cache.\n */\n public getPropertiesBySemantic(entity: DomainEntity, semanticType: SemanticType): DomainProperty[] {\n const semanticMap = this.#propertiesBySemanticCache.get(entity)\n return semanticMap?.get(semanticType) || []\n }\n\n /**\n * Returns a readonly map of associations with semantics.\n * Note, it creates a copy of the cached map to prevent modification of the internal state.\n */\n public get semanticAssociationsCache(): ReadonlyMap<DomainEntity, DomainAssociation[]> {\n return new Map(this.#semanticAssociationsCache)\n }\n\n /**\n * Returns associations for a specific entity that have a specific semantic type.\n * Provides O(1) lookup using the precomputed cache.\n */\n public getAssociationsBySemantic(entity: DomainEntity, semanticType: SemanticType): DomainAssociation[] {\n const semanticMap = this.#associationsBySemanticCache.get(entity)\n return semanticMap?.get(semanticType) || []\n }\n\n constructor(schema: RuntimeApiModelSchema, domainSchema: DataDomainSchema) {\n super(schema, domainSchema)\n\n if (!schema.routingMap) {\n throw new Exception('The runtime API model must have a routing map.', {\n code: 'E_MISSING_ROUTING_MAP',\n help: 'Ensure that the routingMap property is defined when creating a RuntimeApiModel.',\n })\n }\n\n this.#initializeRouter(schema.routingMap)\n\n this.#cacheEntitiesAndProperties()\n this.#precomputeAccessRules()\n this.#precomputeSessionProperties()\n this.#precomputeSemanticProperties()\n }\n\n #precomputeSessionProperties(): void {\n if (!this.session || !this.domain) {\n return\n }\n for (const prop of this.session.properties) {\n const domainProperty = this.domain.findProperty(prop.key, prop.domain)\n if (!domainProperty) {\n throw new Exception(`Session property ${prop.key} not found in domain`)\n }\n this.#sessionProperties.set(prop.key, domainProperty)\n }\n }\n\n #precomputeSemanticProperties(): void {\n if (!this.domain) {\n return\n }\n\n const processEntity = (entity: DomainEntity) => {\n if (this.#semanticPropertiesCache.has(entity)) {\n return\n }\n\n const propertiesWithSemantics: DomainProperty[] = []\n const semanticPropsMap = new Map<SemanticType, DomainProperty[]>()\n\n for (const prop of entity.withInheritedProperties()) {\n if (Array.isArray(prop.semantics) && prop.semantics.length > 0) {\n propertiesWithSemantics.push(prop)\n\n for (const semantic of prop.semantics) {\n let propsForSemantic = semanticPropsMap.get(semantic.id)\n if (!propsForSemantic) {\n propsForSemantic = []\n semanticPropsMap.set(semantic.id, propsForSemantic)\n }\n propsForSemantic.push(prop)\n }\n }\n }\n\n if (propertiesWithSemantics.length > 0) {\n this.#semanticPropertiesCache.set(entity, propertiesWithSemantics)\n this.#propertiesBySemanticCache.set(entity, semanticPropsMap)\n }\n\n const associationsWithSemantics: DomainAssociation[] = []\n const semanticAssocMap = new Map<SemanticType, DomainAssociation[]>()\n\n for (const assoc of entity.withInheritedAssociations()) {\n if (Array.isArray(assoc.semantics) && assoc.semantics.length > 0) {\n associationsWithSemantics.push(assoc)\n\n for (const semantic of assoc.semantics) {\n let assocForSemantic = semanticAssocMap.get(semantic.id)\n if (!assocForSemantic) {\n assocForSemantic = []\n semanticAssocMap.set(semantic.id, assocForSemantic)\n }\n assocForSemantic.push(assoc)\n }\n }\n }\n\n if (associationsWithSemantics.length > 0) {\n this.#semanticAssociationsCache.set(entity, associationsWithSemantics)\n this.#associationsBySemanticCache.set(entity, semanticAssocMap)\n }\n }\n\n for (const entity of this.domain.listEntities()) {\n processEntity(entity)\n }\n\n for (const entity of this.domain.listAllForeignEntities()) {\n processEntity(entity)\n }\n }\n\n #precomputeAccessRules(): void {\n for (const entity of this.exposes.values()) {\n for (const action of entity.actions) {\n this.#actionRulesCache.set(action, this.#computeEffectiveRules(action, entity))\n }\n }\n }\n\n #computeEffectiveRules(action: Action, entity: ExposedEntity): ActionRulesCache {\n const hierarchy: AccessRule[][] = []\n\n if (action.accessRule && action.accessRule.length > 0) {\n hierarchy.push(action.accessRule)\n }\n\n let currentEntity: ExposedEntity | undefined = entity\n while (currentEntity) {\n if (currentEntity.accessRule && currentEntity.accessRule.length > 0) {\n hierarchy.push(currentEntity.accessRule)\n }\n currentEntity = currentEntity.parent ? this.exposes.get(currentEntity.parent.key) : undefined\n }\n\n if (this.accessRule && this.accessRule.length > 0) {\n hierarchy.push(this.accessRule)\n }\n\n const result: ActionRulesCache = {\n preFetch: {\n permissionRules: [],\n mandatoryRules: [],\n },\n fetch: {\n permissionRules: [],\n mandatoryRules: [],\n },\n postFetch: {\n permissionRules: [],\n mandatoryRules: [],\n },\n }\n\n const seenTypes = new Set<string>()\n\n for (const rulesLevel of hierarchy) {\n const typesInThisLevel = new Set<string>()\n for (const rule of rulesLevel) {\n const phase = rule.metadata[action.kind as keyof typeof rule.metadata]\n\n // If the rule does not specify an execution phase for this action kind, it is not evaluated\n if (!phase) {\n continue\n }\n\n // Shadowing: If a rule of the same type was defined closer to the action, ignore this one.\n if (seenTypes.has(rule.type)) {\n continue\n }\n typesInThisLevel.add(rule.type)\n\n let bucket\n if (phase === AccessRuleExecutionPhase.POST_FETCH) {\n bucket = result.postFetch\n } else if (phase === AccessRuleExecutionPhase.FETCH) {\n bucket = result.fetch\n } else {\n bucket = result.preFetch\n }\n\n if (rule.mandatory) {\n bucket.mandatoryRules.push(rule)\n } else {\n bucket.permissionRules.push(rule)\n }\n }\n for (const type of typesInThisLevel) {\n seenTypes.add(type)\n }\n }\n\n return result\n }\n\n #cacheEntitiesAndProperties(): void {\n if (!this.user || !this.domain) {\n return\n }\n\n const userEntity = this.domain.findEntity(this.user.key, this.user.domain)\n if (!userEntity) {\n return\n }\n\n this.cachedEntities.user = userEntity\n\n for (const prop of userEntity.withInheritedProperties()) {\n if (prop.hasSemantic(SemanticType.Username)) {\n this.cachedProperties.username = prop\n }\n if (prop.hasSemantic(SemanticType.Password)) {\n this.cachedProperties.password = prop\n }\n if (prop.hasSemantic(SemanticType.UserRole)) {\n this.cachedProperties.role = prop\n }\n }\n }\n\n #initializeRouter(routingMap: RoutingMap): void {\n for (const [method, definitions] of Object.entries(routingMap)) {\n const parsedRoutes = []\n for (const def of definitions) {\n // matchit's parse() transforms a route string into an object representation.\n // It expects `:param` syntax, while our API models use OpenAPI `{param}` syntax.\n const matchitPath = def.path.replace(/\\{([^}]+)\\}/g, ':$1')\n const parsed = parse(matchitPath)\n this.#definitions.set(parsed, def)\n parsedRoutes.push(parsed)\n }\n this.#routes.set(method.toUpperCase(), parsedRoutes)\n }\n }\n\n /**\n * Looks up the corresponding exposed entity and action for a given request.\n *\n * @param method The HTTP method (e.g., 'GET', 'POST').\n * @param path The request path (e.g., '/users/123').\n * @returns An object with the entity, action, and extracted path parameters if a match is found.\n */\n lookupAction(method: string, path: string): RuntimeResolvedAction | undefined {\n const parsedRoutes = this.#routes.get(method.toUpperCase())\n if (!parsedRoutes) {\n return undefined\n }\n\n // `match` returns the matching parsed route (which is an array of segments), or empty array if no match\n const matchedRoute = match(path, parsedRoutes)\n if (!matchedRoute || matchedRoute.length === 0) {\n return undefined\n }\n\n const def = this.#definitions.get(matchedRoute)\n if (!def) {\n return undefined\n }\n\n const params = exec(path, matchedRoute)\n\n const exposure = this.exposes.get(def.lookup.exposedEntityKey)\n if (!exposure) {\n throw new Exception('Missing exposure ' + def.lookup.exposedEntityKey, { code: 'API_MODEL_ERROR', status: 500 })\n }\n\n const action = exposure.actions.find((a) => a.kind === def.lookup.actionKind)\n if (!action) {\n throw new Exception('Missing action ' + def.lookup.actionKind, { code: 'API_MODEL_ERROR', status: 500 })\n }\n\n const entity = this.domain?.findEntity(exposure.entity.key, exposure.entity.domain)\n if (!entity) {\n throw new Exception('Missing entity ' + exposure.entity.key, { code: 'API_MODEL_ERROR', status: 500 })\n }\n\n return {\n exposure,\n entity,\n action,\n params,\n }\n }\n\n /**\n * Retrieves the precomputed and shadowed effective rules for a given action.\n */\n getEffectiveRules(action: RuntimeResolvedAction): ActionRulesCache {\n let cachedRules = this.#actionRulesCache.get(action.action)\n if (!cachedRules) {\n cachedRules = this.#computeEffectiveRules(action.action, action.exposure)\n this.#actionRulesCache.set(action.action, cachedRules)\n }\n return cachedRules\n }\n\n override toJSON(): RuntimeApiModelSchema {\n const base = super.toJSON() as RuntimeApiModelSchema\n\n const routingMap: RoutingMap = {}\n for (const [method, parsedRoutes] of this.#routes.entries()) {\n routingMap[method] = parsedRoutes.map((pr) => this.#definitions.get(pr) as RouteDefinition)\n }\n\n return {\n ...base,\n routingMap,\n }\n }\n}\n"]}
1
+ {"version":3,"file":"RuntimeApiModel.js","sourceRoot":"","sources":["../../../src/modeling/RuntimeApiModel.ts"],"names":[],"mappings":"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","sourcesContent":["import { match, parse, exec, type RouteToken } from '@poppinss/matchit'\nimport { ApiModel, type ApiModelSchema } from './ApiModel.js'\nimport type { DataDomainSchema } from './DataDomain.js'\nimport type { ActionKind } from './actions/index.js'\nimport type { ExposedEntity } from './ExposedEntity.js'\nimport type { Action } from './actions/Action.js'\nimport type { DomainEntity } from './DomainEntity.js'\nimport type { DomainProperty } from './DomainProperty.js'\nimport type { DomainAssociation } from './DomainAssociation.js'\nimport { SemanticType } from './Semantics.js'\nimport { AccessRule, AccessRuleExecutionPhase } from './rules/AccessRule.js'\nimport { Exception } from '../exceptions/exception.js'\n\n/**\n * Describes a mapped parameter for a route.\n */\nexport interface RouteParam {\n /**\n * The name of the parameter in the path (e.g. \"userId\")\n * This can be anything as the user can freely change the param names.\n */\n paramName: string\n /**\n * The \"key\" of the exposed entity this parameter belongs to.\n */\n exposedEntityKey: string\n /**\n * The \"name\" of the exposed entity this parameter belongs to.\n */\n exposedEntityName: string\n /**\n * The primary key's property name of the exposed entity (e.g., \"id\").\n */\n propertyName: string\n /**\n * The name of the association that connects the parent entity to its child (e.g., \"comments\")\n * If its missing it means that there's no association, so there's no sub-endpoint in the path\n * (e.g., `/users/123` - It's a single root endpoint - it doesn't have any sub-endpoints.)\n */\n associationName?: string\n}\n\n/**\n * Identifies a specific exposed entity and its action kind.\n */\nexport interface RouteLookup {\n /**\n * The \"key\" of the exposed entity that is being accessed.\n */\n exposedEntityKey: string\n /**\n * The \"name\" of the exposed entity that is being accessed.\n */\n exposedEntityName: string\n /**\n * The \"kind\" of the action that is being performed.\n */\n actionKind: ActionKind\n /**\n * Information about each path parameter in this route.\n */\n params: RouteParam[]\n}\n\n/**\n * A routing definition mapping a path to an action lookup.\n */\nexport interface RouteDefinition {\n path: string\n lookup: RouteLookup\n}\n\n/**\n * A map of HTTP methods to their route definitions.\n */\nexport type RoutingMap = Record<string, RouteDefinition[]>\n\n/**\n * Schema for an API Model optimized for runtime routing.\n */\nexport interface RuntimeApiModelSchema extends ApiModelSchema {\n routingMap: RoutingMap\n}\n\nexport interface RuntimeResolvedAction {\n exposure: ExposedEntity\n entity: DomainEntity\n action: Action\n params: Record<string, string>\n lookup: RouteLookup\n}\n\nexport type RuleEvaluator = (rule: AccessRule) => Promise<boolean | undefined> | boolean | undefined\n\nexport interface PhaseRules {\n permissionRules: AccessRule[]\n mandatoryRules: AccessRule[]\n}\n\nexport interface ActionRulesCache {\n preFetch: PhaseRules\n fetch: PhaseRules\n postFetch: PhaseRules\n}\n\n/**\n * An optimized API Model subclass designed for fast runtime lookups.\n * It pre-compiles the RoutingMap into a radix tree for O(log N) or faster endpoint resolution.\n */\nexport class RuntimeApiModel extends ApiModel {\n /**\n * The parsed radix tree for fast routing.\n * Method -> ParsedRoutes\n */\n #routes = new Map<string, RouteToken[][]>()\n\n /**\n * Quick map from matchit parsed route format to our RouteDefinition for returning results\n */\n #definitions = new WeakMap<RouteToken[], RouteDefinition>()\n\n /**\n * Cached references to commonly used entities for fast runtime lookup.\n */\n cachedEntities: {\n user?: DomainEntity\n } = {}\n\n /**\n * Cached references to commonly used properties for fast runtime lookup.\n */\n cachedProperties: {\n username?: DomainProperty\n password?: DomainProperty\n role?: DomainProperty\n } = {}\n\n /**\n * Cached access rules for each action to avoid runtime computation overhead.\n */\n #actionRulesCache = new WeakMap<Action, ActionRulesCache>()\n\n /**\n * Cached session properties for fast runtime lookup.\n */\n readonly #sessionProperties = new Map<string, DomainProperty>()\n\n /**\n * Returns a readonly map of session properties.\n * Note, it creates a copy of the cached map to prevent modification of the internal state.\n */\n public get sessionProperties(): ReadonlyMap<string, DomainProperty> {\n return new Map(this.#sessionProperties)\n }\n\n /**\n * Cached properties that have at least one semantic, grouped by their entity.\n */\n readonly #semanticPropertiesCache = new Map<DomainEntity, DomainProperty[]>()\n\n /**\n * Cached properties that have at least one semantic, grouped by their entity and then by SemanticType.\n */\n readonly #propertiesBySemanticCache = new Map<DomainEntity, Map<SemanticType, DomainProperty[]>>()\n\n /**\n * Cached associations that have at least one semantic, grouped by their entity.\n */\n readonly #semanticAssociationsCache = new Map<DomainEntity, DomainAssociation[]>()\n\n /**\n * Cached associations that have at least one semantic, grouped by their entity and then by SemanticType.\n */\n readonly #associationsBySemanticCache = new Map<DomainEntity, Map<SemanticType, DomainAssociation[]>>()\n\n /**\n * Returns a readonly map of properties with semantics.\n * Note, it creates a copy of the cached map to prevent modification of the internal state.\n */\n public get semanticPropertiesCache(): ReadonlyMap<DomainEntity, DomainProperty[]> {\n return new Map(this.#semanticPropertiesCache)\n }\n\n /**\n * Returns properties for a specific entity that have a specific semantic type.\n * Provides O(1) lookup using the precomputed cache.\n */\n public getPropertiesBySemantic(entity: DomainEntity, semanticType: SemanticType): DomainProperty[] {\n const semanticMap = this.#propertiesBySemanticCache.get(entity)\n return semanticMap?.get(semanticType) || []\n }\n\n /**\n * Returns a readonly map of associations with semantics.\n * Note, it creates a copy of the cached map to prevent modification of the internal state.\n */\n public get semanticAssociationsCache(): ReadonlyMap<DomainEntity, DomainAssociation[]> {\n return new Map(this.#semanticAssociationsCache)\n }\n\n /**\n * Returns associations for a specific entity that have a specific semantic type.\n * Provides O(1) lookup using the precomputed cache.\n */\n public getAssociationsBySemantic(entity: DomainEntity, semanticType: SemanticType): DomainAssociation[] {\n const semanticMap = this.#associationsBySemanticCache.get(entity)\n return semanticMap?.get(semanticType) || []\n }\n\n constructor(schema: RuntimeApiModelSchema, domainSchema: DataDomainSchema) {\n super(schema, domainSchema)\n\n if (!schema.routingMap) {\n throw new Exception('The runtime API model must have a routing map.', {\n code: 'E_MISSING_ROUTING_MAP',\n help: 'Ensure that the routingMap property is defined when creating a RuntimeApiModel.',\n })\n }\n\n this.#initializeRouter(schema.routingMap)\n\n this.#cacheEntitiesAndProperties()\n this.#precomputeAccessRules()\n this.#precomputeSessionProperties()\n this.#precomputeSemanticProperties()\n }\n\n #precomputeSessionProperties(): void {\n if (!this.session || !this.domain) {\n return\n }\n for (const prop of this.session.properties) {\n const domainProperty = this.domain.findProperty(prop.key, prop.domain)\n if (!domainProperty) {\n throw new Exception(`Session property ${prop.key} not found in domain`)\n }\n this.#sessionProperties.set(prop.key, domainProperty)\n }\n }\n\n #precomputeSemanticProperties(): void {\n if (!this.domain) {\n return\n }\n\n const processEntity = (entity: DomainEntity) => {\n if (this.#semanticPropertiesCache.has(entity)) {\n return\n }\n\n const propertiesWithSemantics: DomainProperty[] = []\n const semanticPropsMap = new Map<SemanticType, DomainProperty[]>()\n\n for (const prop of entity.withInheritedProperties()) {\n if (Array.isArray(prop.semantics) && prop.semantics.length > 0) {\n propertiesWithSemantics.push(prop)\n\n for (const semantic of prop.semantics) {\n let propsForSemantic = semanticPropsMap.get(semantic.id)\n if (!propsForSemantic) {\n propsForSemantic = []\n semanticPropsMap.set(semantic.id, propsForSemantic)\n }\n propsForSemantic.push(prop)\n }\n }\n }\n\n if (propertiesWithSemantics.length > 0) {\n this.#semanticPropertiesCache.set(entity, propertiesWithSemantics)\n this.#propertiesBySemanticCache.set(entity, semanticPropsMap)\n }\n\n const associationsWithSemantics: DomainAssociation[] = []\n const semanticAssocMap = new Map<SemanticType, DomainAssociation[]>()\n\n for (const assoc of entity.withInheritedAssociations()) {\n if (Array.isArray(assoc.semantics) && assoc.semantics.length > 0) {\n associationsWithSemantics.push(assoc)\n\n for (const semantic of assoc.semantics) {\n let assocForSemantic = semanticAssocMap.get(semantic.id)\n if (!assocForSemantic) {\n assocForSemantic = []\n semanticAssocMap.set(semantic.id, assocForSemantic)\n }\n assocForSemantic.push(assoc)\n }\n }\n }\n\n if (associationsWithSemantics.length > 0) {\n this.#semanticAssociationsCache.set(entity, associationsWithSemantics)\n this.#associationsBySemanticCache.set(entity, semanticAssocMap)\n }\n }\n\n for (const entity of this.domain.listEntities()) {\n processEntity(entity)\n }\n\n for (const entity of this.domain.listAllForeignEntities()) {\n processEntity(entity)\n }\n }\n\n #precomputeAccessRules(): void {\n for (const entity of this.exposes.values()) {\n for (const action of entity.actions) {\n this.#actionRulesCache.set(action, this.#computeEffectiveRules(action, entity))\n }\n }\n }\n\n #computeEffectiveRules(action: Action, entity: ExposedEntity): ActionRulesCache {\n const hierarchy: AccessRule[][] = []\n\n if (action.accessRule && action.accessRule.length > 0) {\n hierarchy.push(action.accessRule)\n }\n\n let currentEntity: ExposedEntity | undefined = entity\n while (currentEntity) {\n if (currentEntity.accessRule && currentEntity.accessRule.length > 0) {\n hierarchy.push(currentEntity.accessRule)\n }\n currentEntity = currentEntity.parent ? this.exposes.get(currentEntity.parent.key) : undefined\n }\n\n if (this.accessRule && this.accessRule.length > 0) {\n hierarchy.push(this.accessRule)\n }\n\n const result: ActionRulesCache = {\n preFetch: {\n permissionRules: [],\n mandatoryRules: [],\n },\n fetch: {\n permissionRules: [],\n mandatoryRules: [],\n },\n postFetch: {\n permissionRules: [],\n mandatoryRules: [],\n },\n }\n\n const seenTypes = new Set<string>()\n\n for (const rulesLevel of hierarchy) {\n const typesInThisLevel = new Set<string>()\n for (const rule of rulesLevel) {\n const phase = rule.metadata[action.kind as keyof typeof rule.metadata]\n\n // If the rule does not specify an execution phase for this action kind, it is not evaluated\n if (!phase) {\n continue\n }\n\n // Shadowing: If a rule of the same type was defined closer to the action, ignore this one.\n if (seenTypes.has(rule.type)) {\n continue\n }\n typesInThisLevel.add(rule.type)\n\n let bucket\n if (phase === AccessRuleExecutionPhase.POST_FETCH) {\n bucket = result.postFetch\n } else if (phase === AccessRuleExecutionPhase.FETCH) {\n bucket = result.fetch\n } else {\n bucket = result.preFetch\n }\n\n if (rule.mandatory) {\n bucket.mandatoryRules.push(rule)\n } else {\n bucket.permissionRules.push(rule)\n }\n }\n for (const type of typesInThisLevel) {\n seenTypes.add(type)\n }\n }\n\n return result\n }\n\n #cacheEntitiesAndProperties(): void {\n if (!this.user || !this.domain) {\n return\n }\n\n const userEntity = this.domain.findEntity(this.user.key, this.user.domain)\n if (!userEntity) {\n return\n }\n\n this.cachedEntities.user = userEntity\n\n for (const prop of userEntity.withInheritedProperties()) {\n if (prop.hasSemantic(SemanticType.Username)) {\n this.cachedProperties.username = prop\n }\n if (prop.hasSemantic(SemanticType.Password)) {\n this.cachedProperties.password = prop\n }\n if (prop.hasSemantic(SemanticType.UserRole)) {\n this.cachedProperties.role = prop\n }\n }\n }\n\n #initializeRouter(routingMap: RoutingMap): void {\n for (const [method, definitions] of Object.entries(routingMap)) {\n const parsedRoutes = []\n for (const def of definitions) {\n // matchit's parse() transforms a route string into an object representation.\n // It expects `:param` syntax, while our API models use OpenAPI `{param}` syntax.\n const matchitPath = def.path.replace(/\\{([^}]+)\\}/g, ':$1')\n const parsed = parse(matchitPath)\n this.#definitions.set(parsed, def)\n parsedRoutes.push(parsed)\n }\n this.#routes.set(method.toUpperCase(), parsedRoutes)\n }\n }\n\n /**\n * Looks up the corresponding exposed entity and action for a given request.\n *\n * @param method The HTTP method (e.g., 'GET', 'POST').\n * @param path The request path (e.g., '/users/123').\n * @returns An object with the entity, action, and extracted path parameters if a match is found.\n */\n lookupAction(method: string, path: string): RuntimeResolvedAction | undefined {\n const parsedRoutes = this.#routes.get(method.toUpperCase())\n if (!parsedRoutes) {\n return undefined\n }\n\n // `match` returns the matching parsed route (which is an array of segments), or empty array if no match\n const matchedRoute = match(path, parsedRoutes)\n if (!matchedRoute || matchedRoute.length === 0) {\n return undefined\n }\n\n const def = this.#definitions.get(matchedRoute)\n if (!def) {\n return undefined\n }\n\n const params = exec(path, matchedRoute)\n\n const exposure = this.exposes.get(def.lookup.exposedEntityKey)\n if (!exposure) {\n throw new Exception('Missing exposure ' + def.lookup.exposedEntityKey, { code: 'API_MODEL_ERROR', status: 500 })\n }\n\n const action = exposure.actions.find((a) => a.kind === def.lookup.actionKind)\n if (!action) {\n throw new Exception('Missing action ' + def.lookup.actionKind, { code: 'API_MODEL_ERROR', status: 500 })\n }\n\n const entity = this.domain?.findEntity(exposure.entity.key, exposure.entity.domain)\n if (!entity) {\n throw new Exception('Missing entity ' + exposure.entity.key, { code: 'API_MODEL_ERROR', status: 500 })\n }\n\n return {\n exposure,\n entity,\n action,\n params,\n lookup: def.lookup,\n }\n }\n\n /**\n * Retrieves the precomputed and shadowed effective rules for a given action.\n */\n getEffectiveRules(action: RuntimeResolvedAction): ActionRulesCache {\n let cachedRules = this.#actionRulesCache.get(action.action)\n if (!cachedRules) {\n cachedRules = this.#computeEffectiveRules(action.action, action.exposure)\n this.#actionRulesCache.set(action.action, cachedRules)\n }\n return cachedRules\n }\n\n override toJSON(): RuntimeApiModelSchema {\n const base = super.toJSON() as RuntimeApiModelSchema\n\n const routingMap: RoutingMap = {}\n for (const [method, parsedRoutes] of this.#routes.entries()) {\n routingMap[method] = parsedRoutes.map((pr) => this.#definitions.get(pr) as RouteDefinition)\n }\n\n return {\n ...base,\n routingMap,\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeModelGenerator.d.ts","sourceRoot":"","sources":["../../../../src/modeling/generators/RuntimeModelGenerator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC9D,OAAO,EAAwB,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAExF;;;;;GAKG;AACH,qBAAa,qBAAqB;;gBAKpB,KAAK,EAAE,QAAQ,GAAG,cAAc;IAU/B,QAAQ,IAAI,OAAO,CAAC,qBAAqB,CAAC;IA2CvD,OAAO,CAAC,QAAQ;CAUjB"}
1
+ {"version":3,"file":"RuntimeModelGenerator.d.ts","sourceRoot":"","sources":["../../../../src/modeling/generators/RuntimeModelGenerator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE9D,OAAO,EAAoC,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAEpG;;;;;GAKG;AACH,qBAAa,qBAAqB;;gBAKpB,KAAK,EAAE,QAAQ,GAAG,cAAc;IAU/B,QAAQ,IAAI,OAAO,CAAC,qBAAqB,CAAC;IA2CvD,OAAO,CAAC,QAAQ;CA6DjB"}
@@ -30,31 +30,31 @@ export class RuntimeModelGenerator {
30
30
  switch (action.kind) {
31
31
  case 'list':
32
32
  if (colPath)
33
- this.addRoute('GET', colPath, expose.key, action.kind);
33
+ this.addRoute('GET', colPath, expose, action.kind);
34
34
  break;
35
35
  case 'create':
36
36
  if (colPath)
37
- this.addRoute('POST', colPath, expose.key, action.kind);
37
+ this.addRoute('POST', colPath, expose, action.kind);
38
38
  break;
39
39
  case 'search':
40
40
  if (colPath)
41
- this.addRoute('POST', `${colPath}/search`, expose.key, action.kind);
41
+ this.addRoute('POST', `${colPath}/search`, expose, action.kind);
42
42
  break;
43
43
  case 'read':
44
44
  if (resPath)
45
- this.addRoute('GET', resPath, expose.key, action.kind);
45
+ this.addRoute('GET', resPath, expose, action.kind);
46
46
  break;
47
47
  case 'update':
48
48
  if (resPath) {
49
49
  const updateAction = action;
50
50
  for (const method of updateAction.allowedMethods) {
51
- this.addRoute(method, resPath, expose.key, action.kind);
51
+ this.addRoute(method, resPath, expose, action.kind);
52
52
  }
53
53
  }
54
54
  break;
55
55
  case 'delete':
56
56
  if (resPath)
57
- this.addRoute('DELETE', resPath, expose.key, action.kind);
57
+ this.addRoute('DELETE', resPath, expose, action.kind);
58
58
  break;
59
59
  }
60
60
  }
@@ -64,14 +64,64 @@ export class RuntimeModelGenerator {
64
64
  routingMap: this.#routingMap,
65
65
  };
66
66
  }
67
- addRoute(method, path, exposedEntityKey, actionKind) {
67
+ addRoute(method, path, expose, actionKind) {
68
68
  const upperMethod = method.toUpperCase();
69
69
  if (!this.#routingMap[upperMethod]) {
70
70
  this.#routingMap[upperMethod] = [];
71
71
  }
72
+ const domainEntity = this.#apiModel.domain?.findEntity(expose.entity.key, expose.entity.domain);
73
+ if (!domainEntity)
74
+ throw new Error(`Entity ${expose.key} not found, this should never happen`);
75
+ const params = [];
76
+ let current;
77
+ let previous = undefined;
78
+ if (['list', 'create', 'search'].includes(actionKind)) {
79
+ // when starting with a collection, ignore self and start with parent (if any).
80
+ // A collection won't have any path params anyway, so we can skip it.
81
+ current = expose.parent ? this.#apiModel.exposes.get(expose.parent.key) : undefined;
82
+ // setting the previous to the current so the associations are captured.
83
+ previous = expose;
84
+ }
85
+ else {
86
+ current = expose;
87
+ }
88
+ while (current) {
89
+ const match = current.resourcePath.match(/\{([^}]+)\}/);
90
+ if (match) {
91
+ const entity = this.#apiModel.domain?.findEntity(current.entity.key, current.entity.domain);
92
+ if (!entity)
93
+ throw new Error(`Entity ${current.entity.key} not found, this should never happen`);
94
+ const pkName = entity.primaryKey()?.info.name;
95
+ if (!pkName)
96
+ throw new Error(`Entity ${current.entity.key} has no primary key, this should never happen`);
97
+ let associationName;
98
+ if (previous && previous.parent && previous.parent.key === current.key) {
99
+ for (const assoc of entity.withInheritedAssociations()) {
100
+ if (previous.parent?.association.key === assoc.key) {
101
+ associationName = assoc.info.name;
102
+ break;
103
+ }
104
+ }
105
+ }
106
+ params.push({
107
+ paramName: match[1],
108
+ exposedEntityKey: current.key,
109
+ exposedEntityName: entity.info.name,
110
+ propertyName: pkName,
111
+ ...(associationName ? { associationName } : {}),
112
+ });
113
+ }
114
+ previous = current;
115
+ current = current.parent ? this.#apiModel.exposes.get(current.parent.key) : undefined;
116
+ }
72
117
  this.#routingMap[upperMethod].push({
73
118
  path,
74
- lookup: { exposedEntityKey, actionKind },
119
+ lookup: {
120
+ exposedEntityKey: expose.key,
121
+ exposedEntityName: domainEntity.info.name,
122
+ actionKind,
123
+ params,
124
+ },
75
125
  });
76
126
  }
77
127
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeModelGenerator.js","sourceRoot":"","sources":["../../../../src/modeling/generators/RuntimeModelGenerator.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ActionKind, type UpdateAction } from '../actions/index.js'\nimport { ApiModel, type ApiModelSchema } from '../ApiModel.js'\nimport { type RouteDefinition, type RuntimeApiModelSchema } from '../RuntimeApiModel.js'\n\n/**\n * A class that takes the API model and generates a runtime-optimized API model.\n *\n * Note, the API model must be already validated before passing it to this generator.\n * This class doesn't perform any validation, but it will throw an exception if the API model is invalid.\n */\nexport class RuntimeModelGenerator {\n #apiModel: ApiModel\n #apiSchema: ApiModelSchema\n #routingMap: Record<string, RouteDefinition[]> = {}\n\n constructor(input: ApiModel | ApiModelSchema) {\n if (input instanceof ApiModel) {\n this.#apiModel = input\n this.#apiSchema = input.toJSON()\n } else {\n this.#apiModel = new ApiModel(input)\n this.#apiSchema = input\n }\n }\n\n public async generate(): Promise<RuntimeApiModelSchema> {\n if (!this.#apiModel) {\n throw new Error('API model is not defined')\n }\n\n for (const expose of this.#apiModel.exposes.values()) {\n const colPath = expose.getAbsoluteCollectionPath()\n const resPath = expose.getAbsoluteResourcePath()\n for (const action of expose.actions) {\n switch (action.kind) {\n case 'list':\n if (colPath) this.addRoute('GET', colPath, expose.key, action.kind)\n break\n case 'create':\n if (colPath) this.addRoute('POST', colPath, expose.key, action.kind)\n break\n case 'search':\n if (colPath) this.addRoute('POST', `${colPath}/search`, expose.key, action.kind)\n break\n case 'read':\n if (resPath) this.addRoute('GET', resPath, expose.key, action.kind)\n break\n case 'update':\n if (resPath) {\n const updateAction = action as UpdateAction\n for (const method of updateAction.allowedMethods) {\n this.addRoute(method, resPath, expose.key, action.kind)\n }\n }\n break\n case 'delete':\n if (resPath) this.addRoute('DELETE', resPath, expose.key, action.kind)\n break\n }\n }\n }\n\n return {\n ...this.#apiSchema,\n routingMap: this.#routingMap,\n }\n }\n\n private addRoute(method: string, path: string, exposedEntityKey: string, actionKind: ActionKind): void {\n const upperMethod = method.toUpperCase()\n if (!this.#routingMap[upperMethod]) {\n this.#routingMap[upperMethod] = []\n }\n this.#routingMap[upperMethod].push({\n path,\n lookup: { exposedEntityKey, actionKind },\n })\n }\n}\n"]}
1
+ {"version":3,"file":"RuntimeModelGenerator.js","sourceRoot":"","sources":["../../../../src/modeling/generators/RuntimeModelGenerator.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ActionKind, type UpdateAction } from '../actions/index.js'\nimport { ApiModel, type ApiModelSchema } from '../ApiModel.js'\nimport { ExposedEntity } from '../ExposedEntity.js'\nimport { RouteParam, type RouteDefinition, type RuntimeApiModelSchema } from '../RuntimeApiModel.js'\n\n/**\n * A class that takes the API model and generates a runtime-optimized API model.\n *\n * Note, the API model must be already validated before passing it to this generator.\n * This class doesn't perform any validation, but it will throw an exception if the API model is invalid.\n */\nexport class RuntimeModelGenerator {\n #apiModel: ApiModel\n #apiSchema: ApiModelSchema\n #routingMap: Record<string, RouteDefinition[]> = {}\n\n constructor(input: ApiModel | ApiModelSchema) {\n if (input instanceof ApiModel) {\n this.#apiModel = input\n this.#apiSchema = input.toJSON()\n } else {\n this.#apiModel = new ApiModel(input)\n this.#apiSchema = input\n }\n }\n\n public async generate(): Promise<RuntimeApiModelSchema> {\n if (!this.#apiModel) {\n throw new Error('API model is not defined')\n }\n\n for (const expose of this.#apiModel.exposes.values()) {\n const colPath = expose.getAbsoluteCollectionPath()\n const resPath = expose.getAbsoluteResourcePath()\n for (const action of expose.actions) {\n switch (action.kind) {\n case 'list':\n if (colPath) this.addRoute('GET', colPath, expose, action.kind)\n break\n case 'create':\n if (colPath) this.addRoute('POST', colPath, expose, action.kind)\n break\n case 'search':\n if (colPath) this.addRoute('POST', `${colPath}/search`, expose, action.kind)\n break\n case 'read':\n if (resPath) this.addRoute('GET', resPath, expose, action.kind)\n break\n case 'update':\n if (resPath) {\n const updateAction = action as UpdateAction\n for (const method of updateAction.allowedMethods) {\n this.addRoute(method, resPath, expose, action.kind)\n }\n }\n break\n case 'delete':\n if (resPath) this.addRoute('DELETE', resPath, expose, action.kind)\n break\n }\n }\n }\n\n return {\n ...this.#apiSchema,\n routingMap: this.#routingMap,\n }\n }\n\n private addRoute(method: string, path: string, expose: ExposedEntity, actionKind: ActionKind): void {\n const upperMethod = method.toUpperCase()\n if (!this.#routingMap[upperMethod]) {\n this.#routingMap[upperMethod] = []\n }\n\n const domainEntity = this.#apiModel.domain?.findEntity(expose.entity.key, expose.entity.domain)\n if (!domainEntity) throw new Error(`Entity ${expose.key} not found, this should never happen`)\n\n const params: RouteParam[] = []\n let current: ExposedEntity | undefined\n let previous: ExposedEntity | undefined = undefined\n if (['list', 'create', 'search'].includes(actionKind)) {\n // when starting with a collection, ignore self and start with parent (if any).\n // A collection won't have any path params anyway, so we can skip it.\n current = expose.parent ? this.#apiModel.exposes.get(expose.parent.key) : undefined\n // setting the previous to the current so the associations are captured.\n previous = expose\n } else {\n current = expose\n }\n\n while (current) {\n const match = current.resourcePath.match(/\\{([^}]+)\\}/)\n if (match) {\n const entity = this.#apiModel.domain?.findEntity(current.entity.key, current.entity.domain)\n if (!entity) throw new Error(`Entity ${current.entity.key} not found, this should never happen`)\n const pkName = entity.primaryKey()?.info.name\n if (!pkName) throw new Error(`Entity ${current.entity.key} has no primary key, this should never happen`)\n\n let associationName: string | undefined\n if (previous && previous.parent && previous.parent.key === current.key) {\n for (const assoc of entity.withInheritedAssociations()) {\n if (previous.parent?.association.key === assoc.key) {\n associationName = assoc.info.name\n break\n }\n }\n }\n\n params.push({\n paramName: match[1],\n exposedEntityKey: current.key,\n exposedEntityName: entity.info.name as string,\n propertyName: pkName,\n ...(associationName ? { associationName } : {}),\n })\n }\n previous = current\n current = current.parent ? this.#apiModel.exposes.get(current.parent.key) : undefined\n }\n this.#routingMap[upperMethod].push({\n path,\n lookup: {\n exposedEntityKey: expose.key,\n exposedEntityName: domainEntity.info.name as string,\n actionKind,\n params,\n },\n })\n }\n}\n"]}
@@ -410,9 +410,6 @@ export declare class SdkMock {
410
410
  */
411
411
  decodeFilter(filter?: string | string[]): QueryFilter | undefined;
412
412
  readQueryLimit(req: SerializedRequest, init?: MockListResult): number;
413
- protected createCursorOption(init?: MockListResult): string | undefined;
414
413
  protected createDefaultResponse(status: number, headers?: Record<string, string>, body?: (req: SerializedRequest) => string, userConfig?: MockResult): ResponseGenerator;
415
- wrapResource<T extends object>(resource: T): string;
416
- wrapList<T extends object>(items: (T | undefined)[], init?: MockListResult): string;
417
414
  }
418
415
  //# sourceMappingURL=SdkMock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SdkMock.d.ts","sourceRoot":"","sources":["../../../src/sdk/SdkMock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SdkMock.d.ts","sourceRoot":"","sources":["../../../src/sdk/SdkMock.ts"],"names":[],"mappings":"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"}