@futdevpro/nts-dynamo 1.15.316 → 1.15.323

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 (48) hide show
  1. package/build/_collections/database-unavailable.util.d.ts +27 -0
  2. package/build/_collections/database-unavailable.util.d.ts.map +1 -0
  3. package/build/_collections/database-unavailable.util.js +55 -0
  4. package/build/_collections/database-unavailable.util.js.map +1 -0
  5. package/build/_modules/privacy-lifecycle/index.d.ts +2 -0
  6. package/build/_modules/privacy-lifecycle/index.d.ts.map +1 -1
  7. package/build/_modules/privacy-lifecycle/index.js +5 -1
  8. package/build/_modules/privacy-lifecycle/index.js.map +1 -1
  9. package/build/_modules/privacy-lifecycle/privacy-ledger.mongo-store.d.ts +92 -0
  10. package/build/_modules/privacy-lifecycle/privacy-ledger.mongo-store.d.ts.map +1 -0
  11. package/build/_modules/privacy-lifecycle/privacy-ledger.mongo-store.js +295 -0
  12. package/build/_modules/privacy-lifecycle/privacy-ledger.mongo-store.js.map +1 -0
  13. package/build/_modules/privacy-lifecycle/privacy-lifecycle.mongo-store.d.ts +136 -0
  14. package/build/_modules/privacy-lifecycle/privacy-lifecycle.mongo-store.d.ts.map +1 -0
  15. package/build/_modules/privacy-lifecycle/privacy-lifecycle.mongo-store.js +316 -0
  16. package/build/_modules/privacy-lifecycle/privacy-lifecycle.mongo-store.js.map +1 -0
  17. package/build/_modules/usage/index.d.ts +2 -0
  18. package/build/_modules/usage/index.d.ts.map +1 -1
  19. package/build/_modules/usage/index.js +2 -0
  20. package/build/_modules/usage/index.js.map +1 -1
  21. package/build/_modules/usage/usage-session-account-query.interface.d.ts +13 -0
  22. package/build/_modules/usage/usage-session-account-query.interface.d.ts.map +1 -0
  23. package/build/_modules/usage/usage-session-account-query.interface.js +3 -0
  24. package/build/_modules/usage/usage-session-account-query.interface.js.map +1 -0
  25. package/build/_modules/usage/usage-session-owner.interface.d.ts +15 -0
  26. package/build/_modules/usage/usage-session-owner.interface.d.ts.map +1 -0
  27. package/build/_modules/usage/usage-session-owner.interface.js +3 -0
  28. package/build/_modules/usage/usage-session-owner.interface.js.map +1 -0
  29. package/build/_modules/usage/usage.controller.d.ts +16 -0
  30. package/build/_modules/usage/usage.controller.d.ts.map +1 -1
  31. package/build/_modules/usage/usage.controller.js +42 -9
  32. package/build/_modules/usage/usage.controller.js.map +1 -1
  33. package/build/_modules/usage/usage.data-service.d.ts +41 -1
  34. package/build/_modules/usage/usage.data-service.d.ts.map +1 -1
  35. package/build/_modules/usage/usage.data-service.js +112 -0
  36. package/build/_modules/usage/usage.data-service.js.map +1 -1
  37. package/build/_services/base/data.service.d.ts +14 -2
  38. package/build/_services/base/data.service.d.ts.map +1 -1
  39. package/build/_services/base/data.service.js +26 -11
  40. package/build/_services/base/data.service.js.map +1 -1
  41. package/build/_services/base/db.service.d.ts.map +1 -1
  42. package/build/_services/base/db.service.js +7 -2
  43. package/build/_services/base/db.service.js.map +1 -1
  44. package/build/index.d.ts +1 -0
  45. package/build/index.d.ts.map +1 -1
  46. package/build/index.js +1 -0
  47. package/build/index.js.map +1 -1
  48. package/package.json +2 -2
@@ -22,18 +22,14 @@ class DyNTS_Usage_Controller extends controller_service_1.DyNTS_Controller {
22
22
  endpoint: usage_1.DyFM_usageModule_settings.endPoints.newSession,
23
23
  tasks: [
24
24
  async (req, res, issuer) => {
25
- let username;
26
- try {
27
- // BFR-FDPPAL-001: optional-auth módban nincs auth service — a session issuer ilyenkor 'unknown'
28
- username = this.authService?.getUsernameFromRequest(req) ?? 'unknown';
29
- }
30
- catch {
31
- username = 'unknown';
32
- }
25
+ // BFR-FUTDEVPRO-015 / `fdp-issuer-is-account-id`: the session owner is the ACCOUNT ID —
26
+ // the session stores the IP address, so account erasure must be able to find it by accountId.
27
+ const owner = this.getSessionOwnerFromRequest(req);
33
28
  const usageService = new usage_data_service_1.DyNTS_Usage_DataService({
34
29
  usageSession: new usage_1.DyFM_UsageSession({
35
30
  sessionStart: new Date(),
36
- issuer: username,
31
+ issuer: owner.accountId,
32
+ loggedInAs: owner.username,
37
33
  }),
38
34
  issuer,
39
35
  });
@@ -101,6 +97,43 @@ class DyNTS_Usage_Controller extends controller_service_1.DyNTS_Controller {
101
97
  'the protected "getUsageData" endpoint is SKIPPED; session endpoints remain available.');
102
98
  }
103
99
  }
100
+ /**
101
+ * Resolves the owner of a new usage session (BFR-FUTDEVPRO-015).
102
+ *
103
+ * The `issuer` of a session is ALWAYS the account id (`fdp-issuer-is-account-id`) — before this fix it was
104
+ * the username, so account erasure could not find the sessions (which carry the visitor's IP address).
105
+ * The username is kept in `loggedInAs` only for logged-in sessions, as a bridge to legacy records.
106
+ *
107
+ * Never throws: the endpoint is public, so an absent/invalid token or a missing auth service
108
+ * (optional-auth mode, BFR-FDPPAL-001) yields an anonymous `'unknown'` owner.
109
+ *
110
+ * @param req the incoming request
111
+ * @returns the resolved owner
112
+ */
113
+ getSessionOwnerFromRequest(req) {
114
+ let accountId;
115
+ try {
116
+ accountId = this.authService?.getIssuerFromRequest(req);
117
+ }
118
+ catch {
119
+ accountId = undefined;
120
+ }
121
+ if (!accountId) {
122
+ return { accountId: 'unknown' };
123
+ }
124
+ let username;
125
+ try {
126
+ username = this.authService?.getUsernameFromRequest(req);
127
+ }
128
+ catch {
129
+ username = undefined;
130
+ }
131
+ // the default auth service answers 'anonymous' when there is no username — that is not a username
132
+ if (!username || username === 'anonymous' || username === 'unknown') {
133
+ username = undefined;
134
+ }
135
+ return { accountId: accountId, username: username };
136
+ }
104
137
  }
105
138
  exports.DyNTS_Usage_Controller = DyNTS_Usage_Controller;
106
139
  //# sourceMappingURL=usage.controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"usage.controller.js","sourceRoot":"","sources":["../../../src/_modules/usage/usage.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usage.controller.js","sourceRoot":"","sources":["../../../src/_modules/usage/usage.controller.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { Request } from 'express';
2
- import { DyFM_RelativeDate } from '@futdevpro/fsm-dynamo';
2
+ import { DyFM_DBFilter, DyFM_RelativeDate } from '@futdevpro/fsm-dynamo';
3
3
  import { DyFM_DailyUsageData, DyFM_UsageData, DyFM_UsageSession } from '@futdevpro/fsm-dynamo/usage';
4
4
  import { DyNTS_DataService } from '../../_services/base/data.service';
5
+ import { DyNTS_UsageSession_AccountQuery } from './usage-session-account-query.interface';
5
6
  export declare class DyNTS_Usage_DataService extends DyNTS_DataService<DyFM_UsageSession> {
6
7
  usageData: DyFM_UsageData[];
7
8
  simplifiedDailyUsage: DyFM_DailyUsageData[];
@@ -11,6 +12,45 @@ export declare class DyNTS_Usage_DataService extends DyNTS_DataService<DyFM_Usag
11
12
  issuer: string;
12
13
  });
13
14
  getLocationDataFromRequest(req: Request): void;
15
+ /**
16
+ * Builds the filter that matches every session of one account (BFR-FUTDEVPRO-015, `L-24`):
17
+ * - `issuer === accountId` — sessions since 1.15.320;
18
+ * - `issuer === <username>` — legacy sessions (before 1.15.320 the username was the issuer);
19
+ * - `loggedInAs === <username>` — sessions carrying the username as bridge.
20
+ *
21
+ * FAIL-CLOSED: throws on a missing / placeholder `accountId`, and silently drops placeholder usernames —
22
+ * `'unknown'` / `'anonymous'` is shared by all anonymous sessions and must never become a match key.
23
+ *
24
+ * @param set the account and its known usernames
25
+ * @returns a DB filter (`$or`)
26
+ */
27
+ static getAccountSessionFilter(set: DyNTS_UsageSession_AccountQuery): DyFM_DBFilter<DyFM_UsageSession>;
28
+ /**
29
+ * Lists every session of one account — including soft-deleted ones (data-subject access / export).
30
+ *
31
+ * @param set the account and its known usernames
32
+ * @returns the sessions (they contain the IP address and location)
33
+ */
34
+ findSessionsOfAccount(set: DyNTS_UsageSession_AccountQuery): Promise<DyFM_UsageSession[]>;
35
+ /**
36
+ * HARD-deletes every session of one account (account erasure, `L-24`) — the sessions hold the IP
37
+ * address, so a soft delete is not enough.
38
+ *
39
+ * @param set the account and its known usernames
40
+ * @returns the number of deleted sessions
41
+ */
42
+ deleteSessionsOfAccount(set: DyNTS_UsageSession_AccountQuery): Promise<number>;
43
+ /**
44
+ * One-off migration of legacy sessions (before 1.15.320) to the account id: every session whose `issuer`
45
+ * is the given username gets `issuer: accountId` and `loggedInAs: username`. Idempotent.
46
+ * Run it per account, from a source that maps username → accountId (e.g. the user collection).
47
+ *
48
+ * @param set the account id and the username it used to be recorded under
49
+ */
50
+ relinkLegacySessions(set: {
51
+ accountId: string;
52
+ username: string;
53
+ }): Promise<void>;
14
54
  getUsage(range?: DyFM_RelativeDate): Promise<void>;
15
55
  updateUsageData(req: Request): Promise<void>;
16
56
  closeSession(req: Request): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"usage.data-service.d.ts","sourceRoot":"","sources":["../../../src/_modules/usage/usage.data-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAc,iBAAiB,EAAa,MAAM,uBAAuB,CAAC;AACjF,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EAClB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAGtE,qBAAa,uBAAwB,SAAQ,iBAAiB,CAAC,iBAAiB,CAAC;IAC/E,SAAS,EAAE,cAAc,EAAE,CAAM;IACjC,oBAAoB,EAAE,mBAAmB,EAAE,CAAM;gBAG/C,GAAG,EAAE;QACH,YAAY,CAAC,EAAE,iBAAiB,CAAC;QACjC,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;QAC7B,MAAM,EAAE,MAAM,CAAC;KAChB;IAUH,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAgBxC,QAAQ,CAAC,KAAK,GAAE,iBAA8C,GAAG,OAAO,CAAC,IAAI,CAAC;IA4D9E,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC5C,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAqChD"}
1
+ {"version":3,"file":"usage.data-service.d.ts","sourceRoot":"","sources":["../../../src/_modules/usage/usage.data-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,aAAa,EAAc,iBAAiB,EAAa,MAAM,uBAAuB,CAAC;AAChG,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EAClB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAAE,+BAA+B,EAAE,MAAM,yCAAyC,CAAC;AAQ1F,qBAAa,uBAAwB,SAAQ,iBAAiB,CAAC,iBAAiB,CAAC;IAC/E,SAAS,EAAE,cAAc,EAAE,CAAM;IACjC,oBAAoB,EAAE,mBAAmB,EAAE,CAAM;gBAG/C,GAAG,EAAE;QACH,YAAY,CAAC,EAAE,iBAAiB,CAAC;QACjC,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;QAC7B,MAAM,EAAE,MAAM,CAAC;KAChB;IAUH,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAgB9C;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,uBAAuB,CAAC,GAAG,EAAE,+BAA+B,GAAG,aAAa,CAAC,iBAAiB,CAAC;IA6BtG;;;;;OAKG;IACG,qBAAqB,CAAC,GAAG,EAAE,+BAA+B,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAe/F;;;;;;OAMG;IACG,uBAAuB,CAAC,GAAG,EAAE,+BAA+B,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBpF;;;;;;OAMG;IACG,oBAAoB,CAAC,GAAG,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCjF,QAAQ,CAAC,KAAK,GAAE,iBAA8C,GAAG,OAAO,CAAC,IAAI,CAAC;IA4D9E,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC5C,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAqChD"}
@@ -6,6 +6,11 @@ const usage_1 = require("@futdevpro/fsm-dynamo/usage");
6
6
  const global_settings_const_1 = require("../../_collections/global-settings.const");
7
7
  const data_service_1 = require("../../_services/base/data.service");
8
8
  const shared_static_service_1 = require("../../_services/shared.static-service");
9
+ /**
10
+ * Placeholder owner values that must NEVER be used as a lookup key: they are shared by every anonymous
11
+ * session, so matching on them would reach (and erase / relink) OTHER visitors' sessions.
12
+ */
13
+ const DyNTS_usageSession_placeholderOwners = ['', 'unknown', 'unknown-issuer', 'anonymous'];
9
14
  class DyNTS_Usage_DataService extends data_service_1.DyNTS_DataService {
10
15
  usageData = [];
11
16
  simplifiedDailyUsage = [];
@@ -27,6 +32,113 @@ class DyNTS_Usage_DataService extends data_service_1.DyNTS_DataService {
27
32
  });
28
33
  }
29
34
  }
35
+ /**
36
+ * Builds the filter that matches every session of one account (BFR-FUTDEVPRO-015, `L-24`):
37
+ * - `issuer === accountId` — sessions since 1.15.320;
38
+ * - `issuer === <username>` — legacy sessions (before 1.15.320 the username was the issuer);
39
+ * - `loggedInAs === <username>` — sessions carrying the username as bridge.
40
+ *
41
+ * FAIL-CLOSED: throws on a missing / placeholder `accountId`, and silently drops placeholder usernames —
42
+ * `'unknown'` / `'anonymous'` is shared by all anonymous sessions and must never become a match key.
43
+ *
44
+ * @param set the account and its known usernames
45
+ * @returns a DB filter (`$or`)
46
+ */
47
+ static getAccountSessionFilter(set) {
48
+ const accountId = set?.accountId?.trim();
49
+ if (!accountId || DyNTS_usageSession_placeholderOwners.includes(accountId)) {
50
+ throw new fsm_dynamo_1.DyFM_Error({
51
+ errorCode: `${global_settings_const_1.DyNTS_global_settings.systemShortCodeName}|DyNTS-US0-ASF0`,
52
+ message: `DyNTS_Usage_DataService.getAccountSessionFilter: a real accountId is required ` +
53
+ `(got "${set?.accountId}") — a placeholder would match every anonymous session.`,
54
+ userMessage: `The usage sessions of the account could not be identified.`,
55
+ status: 400,
56
+ });
57
+ }
58
+ const usernames = (set.legacyUsernames ?? [])
59
+ .map((username) => username?.trim())
60
+ .filter((username) => !!username && !DyNTS_usageSession_placeholderOwners.includes(username));
61
+ return {
62
+ $or: [
63
+ { issuer: accountId },
64
+ ...usernames.map((username) => ({ issuer: username })),
65
+ ...usernames.map((username) => ({ loggedInAs: username })),
66
+ ],
67
+ };
68
+ }
69
+ /**
70
+ * Lists every session of one account — including soft-deleted ones (data-subject access / export).
71
+ *
72
+ * @param set the account and its known usernames
73
+ * @returns the sessions (they contain the IP address and location)
74
+ */
75
+ async findSessionsOfAccount(set) {
76
+ const filter = DyNTS_Usage_DataService.getAccountSessionFilter(set);
77
+ try {
78
+ return await this.dataDBService.find(filter, true);
79
+ }
80
+ catch (error) {
81
+ throw new fsm_dynamo_1.DyFM_Error({
82
+ ...this.getDefaultErrorSettings('findSessionsOfAccount', error),
83
+ errorCode: `${global_settings_const_1.DyNTS_global_settings.systemShortCodeName}|DyNTS-US0-FSA0`,
84
+ userMessage: `We were unable to collect the usage sessions of the account.`,
85
+ });
86
+ }
87
+ }
88
+ /**
89
+ * HARD-deletes every session of one account (account erasure, `L-24`) — the sessions hold the IP
90
+ * address, so a soft delete is not enough.
91
+ *
92
+ * @param set the account and its known usernames
93
+ * @returns the number of deleted sessions
94
+ */
95
+ async deleteSessionsOfAccount(set) {
96
+ const sessions = await this.findSessionsOfAccount(set);
97
+ try {
98
+ for (const session of sessions) {
99
+ await this.dataDBService.trueDeleteDataById(session._id);
100
+ }
101
+ return sessions.length;
102
+ }
103
+ catch (error) {
104
+ throw new fsm_dynamo_1.DyFM_Error({
105
+ ...this.getDefaultErrorSettings('deleteSessionsOfAccount', error),
106
+ errorCode: `${global_settings_const_1.DyNTS_global_settings.systemShortCodeName}|DyNTS-US0-DSA0`,
107
+ userMessage: `We were unable to delete the usage sessions of the account.`,
108
+ });
109
+ }
110
+ }
111
+ /**
112
+ * One-off migration of legacy sessions (before 1.15.320) to the account id: every session whose `issuer`
113
+ * is the given username gets `issuer: accountId` and `loggedInAs: username`. Idempotent.
114
+ * Run it per account, from a source that maps username → accountId (e.g. the user collection).
115
+ *
116
+ * @param set the account id and the username it used to be recorded under
117
+ */
118
+ async relinkLegacySessions(set) {
119
+ const username = set?.username?.trim();
120
+ // the filter builder validates the accountId (fail-closed) — the username must be real, too
121
+ DyNTS_Usage_DataService.getAccountSessionFilter({ accountId: set?.accountId });
122
+ if (!username || DyNTS_usageSession_placeholderOwners.includes(username)) {
123
+ throw new fsm_dynamo_1.DyFM_Error({
124
+ errorCode: `${global_settings_const_1.DyNTS_global_settings.systemShortCodeName}|DyNTS-US0-RLS0`,
125
+ message: `DyNTS_Usage_DataService.relinkLegacySessions: a real username is required (got "${set?.username}") ` +
126
+ `— a placeholder would move every anonymous session onto this account.`,
127
+ userMessage: `The usage sessions of the account could not be relinked.`,
128
+ status: 400,
129
+ });
130
+ }
131
+ try {
132
+ await this.dataDBService.updateMany({ issuer: username }, { issuer: set.accountId.trim(), loggedInAs: username }, this.issuer);
133
+ }
134
+ catch (error) {
135
+ throw new fsm_dynamo_1.DyFM_Error({
136
+ ...this.getDefaultErrorSettings('relinkLegacySessions', error),
137
+ errorCode: `${global_settings_const_1.DyNTS_global_settings.systemShortCodeName}|DyNTS-US0-RLS1`,
138
+ userMessage: `The usage sessions of the account could not be relinked.`,
139
+ });
140
+ }
141
+ }
30
142
  async getUsage(range = fsm_dynamo_1.DyFM_RelativeDate.lastWeek) {
31
143
  try {
32
144
  await this.dataDBService.find({
@@ -1 +1 @@
1
- {"version":3,"file":"usage.data-service.js","sourceRoot":"","sources":["../../../src/_modules/usage/usage.data-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usage.data-service.js","sourceRoot":"","sources":["../../../src/_modules/usage/usage.data-service.ts"],"names":[],"mappings":"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"}
@@ -62,7 +62,14 @@ export declare class DyNTS_DataService<T extends DyFM_Metadata> {
62
62
  keyIsUnique: boolean;
63
63
  keyIsRequired: boolean;
64
64
  }[];
65
- private depDataDBService;
65
+ /**
66
+ * Dependency DB services, cached PER `dbServiceKey` (the `dependencyDataName`).
67
+ *
68
+ * ⚠️ Previously a single field cached the FIRST resolved service and every later call returned it WHATEVER key it
69
+ * asked for — with two required dependencies, `saveData()` looked up the SECOND dependency's id in the FIRST
70
+ * dependency's collection. The cache key must contain the parameter (same bug class as BFR-FDPAUTHSERVICE-007).
71
+ */
72
+ private readonly depDataDBServices;
66
73
  readonly defaultErrorUserMsg: string;
67
74
  readonly defaultValidationErrorUserMsg: string;
68
75
  constructor(
@@ -336,8 +343,13 @@ export declare class DyNTS_DataService<T extends DyFM_Metadata> {
336
343
  */
337
344
  private lookForDependencyDataSettings;
338
345
  /**
346
+ * Returns the DB service of a dependency collection — cached per `dBServiceKey`.
347
+ *
348
+ * Without a key the model's ONLY dependency is used; with no dependency or with several ones a missing key is
349
+ * ambiguous and throws (`DyNTS-DS0-GDDB0`) instead of silently picking one.
339
350
  *
340
- * @returns
351
+ * @param dBServiceKey the `dependencyDataName` of the dependency collection
352
+ * @returns the DB service of that collection
341
353
  */
342
354
  getDependencyDataDBService(dBServiceKey?: string): DyNTS_DBService<any>;
343
355
  getProvidedData(data: T): T;
@@ -1 +1 @@
1
- {"version":3,"file":"data.service.d.ts","sourceRoot":"","sources":["../../../src/_services/base/data.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data.service.d.ts","sourceRoot":"","sources":["../../../src/_services/base/data.service.ts"],"names":[],"mappings":"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"}
@@ -76,7 +76,14 @@ class DyNTS_DataService {
76
76
  depDBServiceKeys: string[] = [];
77
77
  depKeyIsUnique: boolean[] = [];
78
78
  depKeyIsRequired: boolean[] = []; */
79
- depDataDBService;
79
+ /**
80
+ * Dependency DB services, cached PER `dbServiceKey` (the `dependencyDataName`).
81
+ *
82
+ * ⚠️ Previously a single field cached the FIRST resolved service and every later call returned it WHATEVER key it
83
+ * asked for — with two required dependencies, `saveData()` looked up the SECOND dependency's id in the FIRST
84
+ * dependency's collection. The cache key must contain the parameter (same bug class as BFR-FDPAUTHSERVICE-007).
85
+ */
86
+ depDataDBServices = new Map();
80
87
  /* dataParams: DyFM_DataModel_Params<T>; */
81
88
  defaultErrorUserMsg = `We encountered an unhandled Data Service Error, ` +
82
89
  `\nplease contact the responsible development team.`;
@@ -1929,31 +1936,39 @@ class DyNTS_DataService {
1929
1936
  keyIsUnique: dependencyParams.unique,
1930
1937
  keyIsRequired: dependencyParams.required,
1931
1938
  })));
1939
+ // a single dependency is resolved eagerly (unchanged behaviour: a missing DB service fails at construction)
1932
1940
  if (this.depSettings.length === 1) {
1933
- this.depDataDBService = global_service_1.DyNTS_GlobalService.getDBServiceByKey(this.depSettings[0].dbServiceKey);
1941
+ this.getDependencyDataDBService(this.depSettings[0].dbServiceKey);
1934
1942
  }
1935
1943
  }
1936
1944
  /**
1945
+ * Returns the DB service of a dependency collection — cached per `dBServiceKey`.
1937
1946
  *
1938
- * @returns
1947
+ * Without a key the model's ONLY dependency is used; with no dependency or with several ones a missing key is
1948
+ * ambiguous and throws (`DyNTS-DS0-GDDB0`) instead of silently picking one.
1949
+ *
1950
+ * @param dBServiceKey the `dependencyDataName` of the dependency collection
1951
+ * @returns the DB service of that collection
1939
1952
  */
1940
1953
  getDependencyDataDBService(dBServiceKey) {
1941
- if (!dBServiceKey && !this.depDataDBService) {
1954
+ const key = dBServiceKey
1955
+ || (this.depSettings.length === 1 ? this.depSettings[0].dbServiceKey : undefined);
1956
+ if (!key) {
1942
1957
  throw new fsm_dynamo_1.DyFM_Error({
1943
1958
  ...this._getDefaultErrorSettings('getDependencyDataDBService', new Error(`getDependencyDataDBService was unsuccessful, service key not setted up! ` +
1944
- `(key: ${this.depSettings.map((depSetting) => depSetting.key).join(', ')}, ` +
1959
+ `(${this.depSettings.length} dependencies — with none or several, the dbServiceKey is required; ` +
1960
+ `key: ${this.depSettings.map((depSetting) => depSetting.key).join(', ')}, ` +
1945
1961
  `(${this.dataParams.dataName})`)),
1946
1962
  status: 500,
1947
1963
  errorCode: `${this.ecBase}DyNTS-DS0-GDDB0`,
1948
1964
  });
1949
1965
  }
1950
- if (this.depDataDBService) {
1951
- return this.depDataDBService;
1952
- }
1953
- else {
1954
- this.depDataDBService = global_service_1.DyNTS_GlobalService.getDBServiceByKey(dBServiceKey);
1955
- return this.depDataDBService;
1966
+ let dependencyDBService = this.depDataDBServices.get(key);
1967
+ if (!dependencyDBService) {
1968
+ dependencyDBService = global_service_1.DyNTS_GlobalService.getDBServiceByKey(key);
1969
+ this.depDataDBServices.set(key, dependencyDBService);
1956
1970
  }
1971
+ return dependencyDBService;
1957
1972
  }
1958
1973
  getProvidedData(data) {
1959
1974
  return data;