@futdevpro/nts-dynamo 1.15.185 → 1.15.187

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 (29) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +802 -789
  3. package/build/_modules/privacy-lifecycle/_models/privacy-export-artifact.interface.d.ts +8 -0
  4. package/build/_modules/privacy-lifecycle/_models/privacy-export-artifact.interface.d.ts.map +1 -1
  5. package/build/_modules/privacy-lifecycle/_models/privacy-export-bundle.interface.d.ts +30 -0
  6. package/build/_modules/privacy-lifecycle/_models/privacy-export-bundle.interface.d.ts.map +1 -0
  7. package/build/_modules/privacy-lifecycle/_models/privacy-export-bundle.interface.js +3 -0
  8. package/build/_modules/privacy-lifecycle/_models/privacy-export-bundle.interface.js.map +1 -0
  9. package/build/_modules/privacy-lifecycle/index.d.ts +4 -1
  10. package/build/_modules/privacy-lifecycle/index.d.ts.map +1 -1
  11. package/build/_modules/privacy-lifecycle/index.js +6 -1
  12. package/build/_modules/privacy-lifecycle/index.js.map +1 -1
  13. package/build/_modules/privacy-lifecycle/privacy-export-artifact-privacy-contributor.control-service.d.ts +30 -0
  14. package/build/_modules/privacy-lifecycle/privacy-export-artifact-privacy-contributor.control-service.d.ts.map +1 -0
  15. package/build/_modules/privacy-lifecycle/privacy-export-artifact-privacy-contributor.control-service.js +95 -0
  16. package/build/_modules/privacy-lifecycle/privacy-export-artifact-privacy-contributor.control-service.js.map +1 -0
  17. package/build/_modules/privacy-lifecycle/privacy-export-artifact.control-service.d.ts +6 -1
  18. package/build/_modules/privacy-lifecycle/privacy-export-artifact.control-service.d.ts.map +1 -1
  19. package/build/_modules/privacy-lifecycle/privacy-export-artifact.control-service.js +44 -0
  20. package/build/_modules/privacy-lifecycle/privacy-export-artifact.control-service.js.map +1 -1
  21. package/build/_modules/privacy-lifecycle/privacy-export-artifact.mongo-store.d.ts +5 -1
  22. package/build/_modules/privacy-lifecycle/privacy-export-artifact.mongo-store.d.ts.map +1 -1
  23. package/build/_modules/privacy-lifecycle/privacy-export-artifact.mongo-store.js +14 -0
  24. package/build/_modules/privacy-lifecycle/privacy-export-artifact.mongo-store.js.map +1 -1
  25. package/build/_modules/privacy-lifecycle/privacy-export-bundle.control-service.d.ts +37 -0
  26. package/build/_modules/privacy-lifecycle/privacy-export-bundle.control-service.d.ts.map +1 -0
  27. package/build/_modules/privacy-lifecycle/privacy-export-bundle.control-service.js +241 -0
  28. package/build/_modules/privacy-lifecycle/privacy-export-bundle.control-service.js.map +1 -0
  29. package/package.json +1 -1
@@ -0,0 +1,241 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DyNTS_PrivacyExportBundle_ControlService = void 0;
4
+ const node_crypto_1 = require("node:crypto");
5
+ const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
6
+ const privacy_contributor_action_type_enum_1 = require("./_enums/privacy-contributor-action.type-enum");
7
+ const privacy_contributor_outcome_type_enum_1 = require("./_enums/privacy-contributor-outcome.type-enum");
8
+ const privacy_request_state_type_enum_1 = require("./_enums/privacy-request-state.type-enum");
9
+ const privacy_request_type_enum_1 = require("./_enums/privacy-request.type-enum");
10
+ /**
11
+ * Assembles verified contributor artifacts for one completed privacy export.
12
+ * The returned plaintext is sensitive and must never be logged, cached or persisted unencrypted.
13
+ */
14
+ class DyNTS_PrivacyExportBundle_ControlService {
15
+ static absoluteMaxContributors = 256;
16
+ static absoluteMaxBundleBytes = 33_554_432;
17
+ static bundlePrefix = '{"contractVersion":"dynts-privacy-export-bundle/1","contributors":[';
18
+ static bundleSuffix = ']}';
19
+ lifecycleReader;
20
+ artifactReader;
21
+ maxContributors;
22
+ maxBundleBytes;
23
+ /** Creates a bounded assembler without owning authentication, persistence, delivery or retention policy. */
24
+ constructor(set) {
25
+ if (!set.lifecycleReader
26
+ || !set.artifactReader
27
+ || !Number.isSafeInteger(set.maxContributors)
28
+ || set.maxContributors < 1
29
+ || set.maxContributors > DyNTS_PrivacyExportBundle_ControlService.absoluteMaxContributors
30
+ || !Number.isSafeInteger(set.maxBundleBytes)
31
+ || set.maxBundleBytes < 1
32
+ || set.maxBundleBytes > DyNTS_PrivacyExportBundle_ControlService.absoluteMaxBundleBytes) {
33
+ throw this.error('SETTINGS_INVALID', 500);
34
+ }
35
+ this.lifecycleReader = set.lifecycleReader;
36
+ this.artifactReader = set.artifactReader;
37
+ this.maxContributors = set.maxContributors;
38
+ this.maxBundleBytes = set.maxBundleBytes;
39
+ }
40
+ /** Builds a deterministic JSON envelope after exact lifecycle, authority and artifact-integrity validation. */
41
+ async assemble(request) {
42
+ this.validateRequest(request);
43
+ const privacyRequest = await this.requireCompletedRequest(request);
44
+ const outcomes = await this.requireOutcomes(privacyRequest);
45
+ const exportOutcomes = outcomes
46
+ .filter((outcome) => (outcome.action === privacy_contributor_action_type_enum_1.DyNTS_PrivacyContributorAction_Type.export
47
+ && outcome.outcome === privacy_contributor_outcome_type_enum_1.DyNTS_PrivacyContributorOutcome_Type.succeeded))
48
+ .sort((first, second) => first.contributorId < second.contributorId
49
+ ? -1
50
+ : first.contributorId > second.contributorId
51
+ ? 1
52
+ : 0);
53
+ const contributorJson = [];
54
+ const expiries = [];
55
+ let assembledBytes = Buffer.byteLength(DyNTS_PrivacyExportBundle_ControlService.bundlePrefix
56
+ + DyNTS_PrivacyExportBundle_ControlService.bundleSuffix, 'utf8');
57
+ for (const outcome of exportOutcomes) {
58
+ const artifact = await this.readArtifact(request, outcome);
59
+ this.validateArtifact(outcome, artifact);
60
+ const contributor = `{"contributorId":${JSON.stringify(outcome.contributorId)},"payload":${artifact.plaintext}}`;
61
+ assembledBytes += Buffer.byteLength(contributor, 'utf8') + (contributorJson.length ? 1 : 0);
62
+ if (assembledBytes > this.maxBundleBytes) {
63
+ throw this.error('BUNDLE_TOO_LARGE', 413);
64
+ }
65
+ contributorJson.push(contributor);
66
+ expiries.push(new Date(artifact.artifact.expiresAt).getTime());
67
+ }
68
+ const plaintext = DyNTS_PrivacyExportBundle_ControlService.bundlePrefix
69
+ + contributorJson.join(',')
70
+ + DyNTS_PrivacyExportBundle_ControlService.bundleSuffix;
71
+ const plaintextBytes = Buffer.byteLength(plaintext, 'utf8');
72
+ if (plaintextBytes > this.maxBundleBytes) {
73
+ throw this.error('BUNDLE_TOO_LARGE', 413);
74
+ }
75
+ return {
76
+ contractVersion: 'dynts-privacy-export-bundle-result/1',
77
+ contentType: 'application/json',
78
+ plaintext: plaintext,
79
+ bundleChecksum: this.checksum(plaintext),
80
+ plaintextBytes: plaintextBytes,
81
+ contributorCount: exportOutcomes.length,
82
+ earliestArtifactExpiresAt: expiries.length ? new Date(Math.min(...expiries)).toISOString() : '',
83
+ };
84
+ }
85
+ async requireCompletedRequest(request) {
86
+ let privacyRequest;
87
+ try {
88
+ privacyRequest = await this.lifecycleReader.findRequestById(request.requestId);
89
+ }
90
+ catch {
91
+ throw this.error('LIFECYCLE_UNAVAILABLE', 503);
92
+ }
93
+ if (privacyRequest?.requestId !== request.requestId
94
+ || privacyRequest.subjectId !== request.subjectId
95
+ || privacyRequest.organizationId !== request.organizationId) {
96
+ throw this.error('REQUEST_NOT_FOUND', 404);
97
+ }
98
+ if (privacyRequest.type !== privacy_request_type_enum_1.DyNTS_PrivacyRequest_Type.export
99
+ || privacyRequest.state !== privacy_request_state_type_enum_1.DyNTS_PrivacyRequestState_Type.completed
100
+ || !this.validDate(privacyRequest.completedAt)) {
101
+ throw this.error('REQUEST_NOT_READY', 409);
102
+ }
103
+ return privacyRequest;
104
+ }
105
+ async requireOutcomes(request) {
106
+ let outcomes;
107
+ try {
108
+ outcomes = await this.lifecycleReader.listContributorOutcomes(request.requestId);
109
+ }
110
+ catch {
111
+ throw this.error('LIFECYCLE_UNAVAILABLE', 503);
112
+ }
113
+ if (!Array.isArray(outcomes)
114
+ || outcomes.length > this.maxContributors
115
+ || new Set(outcomes.map((outcome) => (outcome?.contributorId))).size !== outcomes.length
116
+ || outcomes.some((outcome) => (!this.validOutcome(outcome)))) {
117
+ throw this.error('OUTCOMES_INVALID', 503);
118
+ }
119
+ if (outcomes.some((outcome) => (outcome.outcome === privacy_contributor_outcome_type_enum_1.DyNTS_PrivacyContributorOutcome_Type.failed))) {
120
+ throw this.error('REQUEST_NOT_READY', 409);
121
+ }
122
+ return outcomes;
123
+ }
124
+ async readArtifact(request, outcome) {
125
+ const lookup = {
126
+ contractVersion: 'dynts-privacy-export-artifact-lookup/1',
127
+ requestId: request.requestId,
128
+ contributorId: outcome.contributorId,
129
+ subjectId: request.subjectId,
130
+ organizationId: request.organizationId,
131
+ };
132
+ try {
133
+ return await this.artifactReader.read(lookup);
134
+ }
135
+ catch {
136
+ throw this.error('ARTIFACT_UNAVAILABLE', 503);
137
+ }
138
+ }
139
+ validateArtifact(outcome, result) {
140
+ const plaintextBytes = typeof result?.plaintext === 'string'
141
+ ? Buffer.byteLength(result.plaintext, 'utf8')
142
+ : 0;
143
+ if (!result?.artifact
144
+ || typeof result.artifact !== 'object'
145
+ || result.artifact.contractVersion !== 'dynts-privacy-export-artifact-view/1'
146
+ || result.artifact.contentType !== 'application/json'
147
+ || typeof result.plaintext !== 'string'
148
+ || result.artifact.artifactChecksum !== outcome.artifactChecksum
149
+ || result.artifact.plaintextBytes !== plaintextBytes
150
+ || this.checksum(result.plaintext) !== outcome.artifactChecksum
151
+ || !this.validDate(result.artifact.expiresAt)
152
+ || !this.validJson(result.plaintext)) {
153
+ throw this.error('ARTIFACT_INVALID', 503);
154
+ }
155
+ }
156
+ validOutcome(outcome) {
157
+ if (!outcome
158
+ || !this.boundedText(outcome.contributorId, 128)
159
+ || !Object.values(privacy_contributor_action_type_enum_1.DyNTS_PrivacyContributorAction_Type).includes(outcome.action)
160
+ || !Object.values(privacy_contributor_outcome_type_enum_1.DyNTS_PrivacyContributorOutcome_Type).includes(outcome.outcome)
161
+ || !Number.isSafeInteger(outcome.processedRecordCount)
162
+ || outcome.processedRecordCount < 0
163
+ || !this.validDate(outcome.completedAt)
164
+ || (outcome.outcome === privacy_contributor_outcome_type_enum_1.DyNTS_PrivacyContributorOutcome_Type.failed && !outcome.errorCode)
165
+ || (outcome.outcome !== privacy_contributor_outcome_type_enum_1.DyNTS_PrivacyContributorOutcome_Type.failed && !!outcome.errorCode)
166
+ || (outcome.outcome === privacy_contributor_outcome_type_enum_1.DyNTS_PrivacyContributorOutcome_Type.retainedWithBasis
167
+ && !this.boundedText(outcome.retentionBasisCode, 128))
168
+ || (outcome.outcome !== privacy_contributor_outcome_type_enum_1.DyNTS_PrivacyContributorOutcome_Type.retainedWithBasis
169
+ && !!outcome.retentionBasisCode)
170
+ || (outcome.action === privacy_contributor_action_type_enum_1.DyNTS_PrivacyContributorAction_Type.retainWithBasis
171
+ && outcome.outcome !== privacy_contributor_outcome_type_enum_1.DyNTS_PrivacyContributorOutcome_Type.retainedWithBasis
172
+ && outcome.outcome !== privacy_contributor_outcome_type_enum_1.DyNTS_PrivacyContributorOutcome_Type.failed)
173
+ || (outcome.action !== privacy_contributor_action_type_enum_1.DyNTS_PrivacyContributorAction_Type.retainWithBasis
174
+ && outcome.outcome === privacy_contributor_outcome_type_enum_1.DyNTS_PrivacyContributorOutcome_Type.retainedWithBasis)) {
175
+ return false;
176
+ }
177
+ if (outcome.action === privacy_contributor_action_type_enum_1.DyNTS_PrivacyContributorAction_Type.export
178
+ && outcome.outcome === privacy_contributor_outcome_type_enum_1.DyNTS_PrivacyContributorOutcome_Type.succeeded) {
179
+ return /^[a-f0-9]{64}$/u.test(outcome.artifactChecksum);
180
+ }
181
+ return outcome.artifactChecksum === '';
182
+ }
183
+ validateRequest(request) {
184
+ if (!this.hasExactKeys(request, ['contractVersion', 'requestId', 'subjectId', 'organizationId'])
185
+ || request.contractVersion !== 'dynts-privacy-export-bundle-request/1'
186
+ || !this.boundedText(request.requestId, 128)
187
+ || !this.boundedText(request.subjectId, 128)
188
+ || !this.boundedText(request.organizationId, 128)) {
189
+ throw this.error('REQUEST_INVALID', 400);
190
+ }
191
+ }
192
+ boundedText(value, maximum) {
193
+ return typeof value === 'string'
194
+ && !!value
195
+ && value.trim() === value
196
+ && value.length <= maximum
197
+ && !/[\u0000-\u001f\u007f]/u.test(value);
198
+ }
199
+ hasExactKeys(value, expected) {
200
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
201
+ return false;
202
+ }
203
+ const actual = Object.keys(value).sort();
204
+ return actual.length === expected.length
205
+ && expected.slice().sort().every((key, index) => key === actual[index]);
206
+ }
207
+ validDate(value) {
208
+ return typeof value === 'string' && !!value && Number.isFinite(new Date(value).getTime());
209
+ }
210
+ validJson(value) {
211
+ try {
212
+ JSON.parse(value);
213
+ return true;
214
+ }
215
+ catch {
216
+ return false;
217
+ }
218
+ }
219
+ checksum(value) {
220
+ return (0, node_crypto_1.createHash)('sha256').update(value, 'utf8').digest('hex');
221
+ }
222
+ error(code, status) {
223
+ return new fsm_dynamo_1.DyFM_Error({
224
+ status: status,
225
+ errorCode: `DYNTS|PRIVACY_EXPORT_BUNDLE|${code}`,
226
+ message: 'The privacy export bundle operation failed.',
227
+ userMessage: status === 400
228
+ ? 'The privacy export bundle request is invalid.'
229
+ : status === 404
230
+ ? 'The privacy export request was not found.'
231
+ : status === 409
232
+ ? 'The privacy export request is not ready for download.'
233
+ : status === 413
234
+ ? 'The privacy export bundle is too large to deliver.'
235
+ : 'The privacy export bundle is temporarily unavailable.',
236
+ issuerService: this.constructor.name,
237
+ });
238
+ }
239
+ }
240
+ exports.DyNTS_PrivacyExportBundle_ControlService = DyNTS_PrivacyExportBundle_ControlService;
241
+ //# sourceMappingURL=privacy-export-bundle.control-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privacy-export-bundle.control-service.js","sourceRoot":"","sources":["../../../src/_modules/privacy-lifecycle/privacy-export-bundle.control-service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@futdevpro/nts-dynamo",
3
- "version": "01.15.185",
3
+ "version": "01.15.187",
4
4
  "description": "Dynamic NodeTS (NodeJS-Typescript), MongoDB Backend System Framework by Future Development Program Ltd.",
5
5
  "DyBu_settings": {
6
6
  "packageType": "server-package",