@futdevpro/nts-dynamo 1.15.407 → 1.15.408

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.
@@ -0,0 +1,73 @@
1
+ import { DyNTS_PrivacyRequestRecord_Interface } from './privacy-request-record.interface';
2
+ /**
3
+ * L-174 B2 (BFR-FUTDEVPRO-048) — the share-grant model: a short-lived, single-use, revocable permission for a third
4
+ * party (the subject's new provider) to download ONE completed export, without an account. The secret exists in clear
5
+ * text only once (in the create response); the store keeps its SHA-256 hash.
6
+ *
7
+ * The exact authority of one completed export request (the subject's own). */
8
+ export interface DyNTS_PrivacyShareGrantScope_Interface {
9
+ requestId: string;
10
+ subjectId: string;
11
+ organizationId: string;
12
+ }
13
+ /** The persisted grant — never contains the secret, only its hash. Empty string = not happened. */
14
+ export interface DyNTS_PrivacyShareGrantRecord_Interface extends DyNTS_PrivacyShareGrantScope_Interface {
15
+ grantId: string;
16
+ secretHash: string;
17
+ createdAt: string;
18
+ expiresAt: string;
19
+ revokedAt: string;
20
+ usedAt: string;
21
+ /** Who/where redeemed it, as the delivery layer describes it (e.g. a hashed client address) — bounded, no raw PII. */
22
+ usedBy: string;
23
+ }
24
+ /** The subject-facing view of a grant (no secret, no hash). */
25
+ export interface DyNTS_PrivacyShareGrantView_Interface {
26
+ grantId: string;
27
+ requestId: string;
28
+ state: 'active' | 'used' | 'revoked' | 'expired';
29
+ createdAt: string;
30
+ expiresAt: string;
31
+ revokedAt: string;
32
+ usedAt: string;
33
+ usedBy: string;
34
+ }
35
+ /** The create response — the ONLY place the clear-text secret ever appears. */
36
+ export interface DyNTS_PrivacyShareGrantCreated_Interface {
37
+ grant: DyNTS_PrivacyShareGrantView_Interface;
38
+ secret: string;
39
+ }
40
+ /** A successful redemption: the exact authority to assemble the SAME bundle the subject downloads. */
41
+ export interface DyNTS_PrivacyShareGrantRedeemed_Interface extends DyNTS_PrivacyShareGrantScope_Interface {
42
+ grantId: string;
43
+ }
44
+ /** One audit event (content-free) — `refused` carries no grant id when the secret matched nothing. */
45
+ export interface DyNTS_PrivacyShareGrantAuditEvent_Interface {
46
+ kind: 'created' | 'revoked' | 'redeemed' | 'refused';
47
+ grantId: string;
48
+ requestId: string;
49
+ at: string;
50
+ usedBy: string;
51
+ }
52
+ /** Persistence boundary. `consume` MUST be atomic (one winner per grant, e.g. a conditional update). */
53
+ export interface DyNTS_PrivacyShareGrantStore_Interface {
54
+ insert(record: DyNTS_PrivacyShareGrantRecord_Interface): Promise<void>;
55
+ listForRequest(scope: DyNTS_PrivacyShareGrantScope_Interface): Promise<DyNTS_PrivacyShareGrantRecord_Interface[]>;
56
+ /** Marks an active grant of exactly this scope revoked; `false` if there was nothing to revoke. */
57
+ revoke(set: {
58
+ grantId: string;
59
+ scope: DyNTS_PrivacyShareGrantScope_Interface;
60
+ at: string;
61
+ }): Promise<boolean>;
62
+ /** Atomically consumes the grant with this hash if it is not revoked, not used and `expiresAt > at`; else `null`. */
63
+ consume(set: {
64
+ secretHash: string;
65
+ at: string;
66
+ usedBy: string;
67
+ }): Promise<DyNTS_PrivacyShareGrantRecord_Interface | null>;
68
+ }
69
+ /** The lifecycle read the grant service needs (the bundle assembler's reader satisfies it). */
70
+ export interface DyNTS_PrivacyShareGrantLifecycleReader_Interface {
71
+ findRequestById(requestId: string): Promise<DyNTS_PrivacyRequestRecord_Interface | null>;
72
+ }
73
+ //# sourceMappingURL=privacy-share-grant.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privacy-share-grant.interface.d.ts","sourceRoot":"","sources":["../../../../src/_modules/privacy-lifecycle/_models/privacy-share-grant.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oCAAoC,EAAE,MAAM,oCAAoC,CAAC;AAE1F;;;;;8EAK8E;AAC9E,MAAM,WAAW,sCAAsC;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,mGAAmG;AACnG,MAAM,WAAW,uCAAwC,SAAQ,sCAAsC;IACrG,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,sHAAsH;IACtH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,+DAA+D;AAC/D,MAAM,WAAW,qCAAqC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,+EAA+E;AAC/E,MAAM,WAAW,wCAAwC;IACvD,KAAK,EAAE,qCAAqC,CAAC;IAC7C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,sGAAsG;AACtG,MAAM,WAAW,yCAA0C,SAAQ,sCAAsC;IACvG,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,sGAAsG;AACtG,MAAM,WAAW,2CAA2C;IAC1D,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wGAAwG;AACxG,MAAM,WAAW,sCAAsC;IACrD,MAAM,CAAC,MAAM,EAAE,uCAAuC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,cAAc,CAAC,KAAK,EAAE,sCAAsC,GAAG,OAAO,CAAC,uCAAuC,EAAE,CAAC,CAAC;IAClH,mGAAmG;IACnG,MAAM,CAAC,GAAG,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,sCAAsC,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9G,qHAAqH;IACrH,OAAO,CAAC,GAAG,EAAE;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,uCAAuC,GAAG,IAAI,CAAC,CAAC;CAC7D;AAED,+FAA+F;AAC/F,MAAM,WAAW,gDAAgD;IAC/D,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,oCAAoC,GAAG,IAAI,CAAC,CAAC;CAC1F"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=privacy-share-grant.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privacy-share-grant.interface.js","sourceRoot":"","sources":["../../../../src/_modules/privacy-lifecycle/_models/privacy-share-grant.interface.ts"],"names":[],"mappings":""}
@@ -24,6 +24,8 @@ export { DyNTS_PrivacyLifecycle_MongoStore, DyNTS_PrivacyLifecycleMongoStore_Set
24
24
  export { DyNTS_PrivacyLedger_MongoStore, DyNTS_PrivacyLedgerMongoStore_Settings, DyNTS_PrivacyStoredConsent_Row, DyNTS_PrivacyStoredLegalAcceptance_Row } from './privacy-ledger.mongo-store';
25
25
  export { DyNTS_PrivacyExportBundle_ControlService } from './privacy-export-bundle.control-service';
26
26
  export { DyNTS_PrivacyExportSchema_Util } from './privacy-export-schema.util';
27
+ export { DyNTS_PrivacyShareGrant_ControlService } from './privacy-share-grant.control-service';
28
+ export { DyNTS_PrivacyShareGrantAuditEvent_Interface, DyNTS_PrivacyShareGrantCreated_Interface, DyNTS_PrivacyShareGrantLifecycleReader_Interface, DyNTS_PrivacyShareGrantRecord_Interface, DyNTS_PrivacyShareGrantRedeemed_Interface, DyNTS_PrivacyShareGrantScope_Interface, DyNTS_PrivacyShareGrantStore_Interface, DyNTS_PrivacyShareGrantView_Interface } from './_models/privacy-share-grant.interface';
27
29
  export { DyNTS_PrivacyExportSchema_Interface } from './_models/privacy-export-schema.interface';
28
30
  export { DyNTS_PrivacyExportSchemaSync_Result } from './_models/privacy-export-schema-sync-result.interface';
29
31
  export { DyNTS_PrivacyExportSchemaPublished_Interface } from './_models/privacy-export-schema-published.interface';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_modules/privacy-lifecycle/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qCAAqC,EAAE,MAAM,qCAAqC,CAAC;AAC5F,OAAO,EACL,oDAAoD,EACrD,MAAM,sDAAsD,CAAC;AAC9D,OAAO,EAAE,uCAAuC,EAAE,MAAM,wCAAwC,CAAC;AACjG,OAAO,EAAE,qCAAqC,EAAE,MAAM,sCAAsC,CAAC;AAC7F,OAAO,EAAE,uCAAuC,EAAE,MAAM,wCAAwC,CAAC;AACjG,OAAO,EAAE,0CAA0C,EAAE,MAAM,2CAA2C,CAAC;AACvG,OAAO,EACL,sCAAsC,EACtC,0CAA0C,EAC1C,mCAAmC,EACnC,0CAA0C,EAC1C,4CAA4C,EAC5C,oCAAoC,EACpC,mCAAmC,EACpC,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,6BAA6B,EAAE,MAAM,yCAAyC,CAAC;AACxF,OAAO,EACL,uCAAuC,EACvC,6CAA6C,EAC9C,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EACL,wCAAwC,EACxC,sCAAsC,EACtC,yCAAyC,EACzC,wCAAwC,EACxC,yCAAyC,EACzC,+CAA+C,EAC/C,wCAAwC,EACzC,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACL,6CAA6C,EAC7C,4CAA4C,EAC5C,8CAA8C,EAC9C,gDAAgD,EAChD,4CAA4C,EAC5C,6CAA6C,EAC7C,gDAAgD,EAChD,kDAAkD,EAClD,mDAAmD,EACnD,sDAAsD,EACvD,MAAM,8CAA8C,CAAC;AACtD,OAAO,EACL,oDAAoD,EACpD,mDAAmD,EACnD,sDAAsD,EACtD,+CAA+C,EAC/C,iDAAiD,EACjD,iDAAiD,EACjD,6CAA6C,EAC9C,MAAM,iDAAiD,CAAC;AACzD,OAAO,EACL,2CAA2C,EAC3C,yCAAyC,EAC1C,MAAM,sDAAsD,CAAC;AAC9D,OAAO,EAAE,oCAAoC,EAAE,MAAM,qCAAqC,CAAC;AAC3F,OAAO,EACL,0CAA0C,EAC1C,2CAA2C,EAC3C,2CAA2C,EAC5C,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,yCAAyC,EAAE,MAAM,0CAA0C,CAAC;AACrG,OAAO,EAAE,kCAAkC,EAAE,MAAM,kCAAkC,CAAC;AACtF,OAAO,EACL,gDAAgD,EACjD,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,0CAA0C,EAAE,MAAM,2CAA2C,CAAC;AACvG,OAAO,EACL,4DAA4D,EAC5D,wCAAwC,EACzC,MAAM,+DAA+D,CAAC;AACvE,OAAO,EAAE,sCAAsC,EAAE,MAAM,uCAAuC,CAAC;AAC/F,OAAO,EACL,iCAAiC,EACjC,yCAAyC,EACzC,8BAA8B,EAC9B,2BAA2B,EAC5B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,8BAA8B,EAC9B,sCAAsC,EACtC,8BAA8B,EAC9B,sCAAsC,EACvC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,wCAAwC,EAAE,MAAM,yCAAyC,CAAC;AACnG,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,mCAAmC,EAAE,MAAM,2CAA2C,CAAC;AAChG,OAAO,EAAE,oCAAoC,EAAE,MAAM,uDAAuD,CAAC;AAC7G,OAAO,EAAE,4CAA4C,EAAE,MAAM,qDAAqD,CAAC;AACnH,OAAO,EAAE,sCAAsC,EAAE,MAAM,mDAAmD,CAAC;AAC3G,OAAO,EAAE,iCAAiC,EAAE,MAAM,6CAA6C,CAAC;AAChG,OAAO,EACL,4CAA4C,EAC7C,MAAM,yDAAyD,CAAC;AACjE,OAAO,EAAE,mCAAmC,EAAE,MAAM,+CAA+C,CAAC;AACpG,OAAO,EACL,0CAA0C,EAC3C,MAAM,uDAAuD,CAAC;AAC/D,OAAO,EAAE,oCAAoC,EAAE,MAAM,gDAAgD,CAAC;AACtG,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,yCAAyC,EAAE,MAAM,iDAAiD,CAAC;AAC5G,OAAO,EAAE,yCAAyC,EAAE,MAAM,iDAAiD,CAAC;AAC5G,OAAO,EAAE,sCAAsC,EAAE,MAAM,8CAA8C,CAAC;AACtG,OAAO,EAAE,kCAAkC,EAAE,MAAM,yCAAyC,CAAC;AAC7F,OAAO,EAAE,uCAAuC,EAAE,MAAM,+CAA+C,CAAC;AACxG,OAAO,EAAE,wCAAwC,EAAE,MAAM,gDAAgD,CAAC;AAC1G,OAAO,EAAE,mCAAmC,EAAE,MAAM,2CAA2C,CAAC;AAChG,OAAO,EACL,kDAAkD,EAClD,iDAAiD,EAClD,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EACL,+CAA+C,EAChD,MAAM,wDAAwD,CAAC;AAChE,OAAO,EAAE,oCAAoC,EAAE,MAAM,4CAA4C,CAAC;AAClG,OAAO,EAAE,oCAAoC,EAAE,MAAM,4CAA4C,CAAC;AAClG,OAAO,EAAE,kCAAkC,EAAE,MAAM,0CAA0C,CAAC;AAC9F,OAAO,EAAE,oCAAoC,EAAE,MAAM,4CAA4C,CAAC;AAClG,OAAO,EAAE,mCAAmC,EAAE,MAAM,2CAA2C,CAAC;AAChG,OAAO,EAAE,qCAAqC,EAAE,MAAM,6CAA6C,CAAC;AACpG,OAAO,EACL,6CAA6C,EAC7C,uCAAuC,EACvC,sCAAsC,EACtC,uCAAuC,EACxC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,wCAAwC,EACxC,gDAAgD,EACjD,MAAM,gDAAgD,CAAC;AACxD,OAAO,EAAE,2CAA2C,EAAE,MAAM,oDAAoD,CAAC;AACjH,OAAO,EACL,uDAAuD,EACxD,MAAM,iEAAiE,CAAC;AACzE,OAAO,EAAE,4CAA4C,EAAE,MAAM,qDAAqD,CAAC;AACnH,OAAO,EACL,0CAA0C,EAC3C,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EAAE,sCAAsC,EAAE,MAAM,8CAA8C,CAAC;AACtG,OAAO,EAAE,0CAA0C,EAAE,MAAM,mDAAmD,CAAC;AAC/G,OAAO,EAAE,kCAAkC,EAAE,MAAM,0CAA0C,CAAC;AAC9F,OAAO,EACL,qDAAqD,EACtD,MAAM,+DAA+D,CAAC;AACvE,OAAO,EAAE,oCAAoC,EAAE,MAAM,4CAA4C,CAAC;AAClG,OAAO,EACL,yCAAyC,EAC1C,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EACL,kCAAkC,EAClC,uCAAuC,EACxC,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACL,wCAAwC,EACxC,mDAAmD,EACpD,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,oCAAoC,EAAE,MAAM,4CAA4C,CAAC;AAClG,OAAO,EAAE,kCAAkC,EAAE,MAAM,0CAA0C,CAAC;AAC9F,OAAO,EACL,8CAA8C,EAC9C,2CAA2C,EAC3C,4CAA4C,EAC5C,iDAAiD,EACjD,2CAA2C,EAC3C,+CAA+C,EAC/C,2CAA2C,EAC3C,2CAA2C,EAC3C,0CAA0C,EAC1C,iDAAiD,EACjD,yCAAyC,EACzC,0CAA0C,EAC3C,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACL,iDAAiD,EACjD,kDAAkD,EAClD,0CAA0C,EAC1C,yCAAyC,EAC1C,MAAM,2CAA2C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_modules/privacy-lifecycle/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DyNTS_PrivacyRequest_Type = exports.DyNTS_PrivacyRequestState_Type = exports.DyNTS_PrivacyContributorOutcome_Type = exports.DyNTS_PrivacyContributorExecutionMode_Type = exports.DyNTS_PrivacyContributorAction_Type = exports.DyNTS_PrivacyConsentAuthorizationReason_Type = exports.DyNTS_PrivacyConsentDecision_Type = exports.DyNTS_PrivacyExportSchema_Util = exports.DyNTS_PrivacyExportBundle_ControlService = exports.DyNTS_PrivacyLedger_MongoStore = exports.DyNTS_PrivacyLifecycle_MongoStore = exports.DyNTS_PrivacyExportArtifact_MongoStore = exports.DyNTS_privacyExportArtifactContributorId = exports.DyNTS_PrivacyExportArtifactPrivacyContributor_ControlService = exports.DyNTS_PrivacyExportArtifact_ControlService = exports.DyNTS_PrivacyConsentAuthorization_ControlService = exports.DyNTS_PrivacyLedger_ControlService = exports.DyNTS_PrivacyRequestCursor_ControlService = exports.DyNTS_PrivacyMutationGate_MongoStore = exports.DyNTS_PrivacyRightsNotificationState_Type = exports.DyNTS_PrivacyRightsNotificationChannel_Type = exports.DyNTS_PrivacyRightsRectificationDecision_Type = exports.DyNTS_PrivacyRightsPurposeDecision_Type = exports.DyNTS_PrivacyRightsValue_Type = exports.DyNTS_PrivacyRightsNotification_MongoStore = exports.DyNTS_PrivacyRightsExecution_MongoStore = exports.DyNTS_PrivacyRightsCustody_MongoStore = exports.DyNTS_PrivacyRightsInput_ControlService = exports.DyNTS_PrivacyContributorRequestRouter_ControlService = exports.DyNTS_PrivacyLifecycle_ControlService = void 0;
3
+ exports.DyNTS_PrivacyRequest_Type = exports.DyNTS_PrivacyRequestState_Type = exports.DyNTS_PrivacyContributorOutcome_Type = exports.DyNTS_PrivacyContributorExecutionMode_Type = exports.DyNTS_PrivacyContributorAction_Type = exports.DyNTS_PrivacyConsentAuthorizationReason_Type = exports.DyNTS_PrivacyConsentDecision_Type = exports.DyNTS_PrivacyShareGrant_ControlService = exports.DyNTS_PrivacyExportSchema_Util = exports.DyNTS_PrivacyExportBundle_ControlService = exports.DyNTS_PrivacyLedger_MongoStore = exports.DyNTS_PrivacyLifecycle_MongoStore = exports.DyNTS_PrivacyExportArtifact_MongoStore = exports.DyNTS_privacyExportArtifactContributorId = exports.DyNTS_PrivacyExportArtifactPrivacyContributor_ControlService = exports.DyNTS_PrivacyExportArtifact_ControlService = exports.DyNTS_PrivacyConsentAuthorization_ControlService = exports.DyNTS_PrivacyLedger_ControlService = exports.DyNTS_PrivacyRequestCursor_ControlService = exports.DyNTS_PrivacyMutationGate_MongoStore = exports.DyNTS_PrivacyRightsNotificationState_Type = exports.DyNTS_PrivacyRightsNotificationChannel_Type = exports.DyNTS_PrivacyRightsRectificationDecision_Type = exports.DyNTS_PrivacyRightsPurposeDecision_Type = exports.DyNTS_PrivacyRightsValue_Type = exports.DyNTS_PrivacyRightsNotification_MongoStore = exports.DyNTS_PrivacyRightsExecution_MongoStore = exports.DyNTS_PrivacyRightsCustody_MongoStore = exports.DyNTS_PrivacyRightsInput_ControlService = exports.DyNTS_PrivacyContributorRequestRouter_ControlService = exports.DyNTS_PrivacyLifecycle_ControlService = void 0;
4
4
  var privacy_lifecycle_control_service_1 = require("./privacy-lifecycle.control-service");
5
5
  Object.defineProperty(exports, "DyNTS_PrivacyLifecycle_ControlService", { enumerable: true, get: function () { return privacy_lifecycle_control_service_1.DyNTS_PrivacyLifecycle_ControlService; } });
6
6
  var privacy_contributor_request_router_control_service_1 = require("./privacy-contributor-request-router.control-service");
@@ -44,6 +44,8 @@ var privacy_export_bundle_control_service_1 = require("./privacy-export-bundle.c
44
44
  Object.defineProperty(exports, "DyNTS_PrivacyExportBundle_ControlService", { enumerable: true, get: function () { return privacy_export_bundle_control_service_1.DyNTS_PrivacyExportBundle_ControlService; } });
45
45
  var privacy_export_schema_util_1 = require("./privacy-export-schema.util");
46
46
  Object.defineProperty(exports, "DyNTS_PrivacyExportSchema_Util", { enumerable: true, get: function () { return privacy_export_schema_util_1.DyNTS_PrivacyExportSchema_Util; } });
47
+ var privacy_share_grant_control_service_1 = require("./privacy-share-grant.control-service");
48
+ Object.defineProperty(exports, "DyNTS_PrivacyShareGrant_ControlService", { enumerable: true, get: function () { return privacy_share_grant_control_service_1.DyNTS_PrivacyShareGrant_ControlService; } });
47
49
  var privacy_consent_decision_type_enum_1 = require("./_enums/privacy-consent-decision.type-enum");
48
50
  Object.defineProperty(exports, "DyNTS_PrivacyConsentDecision_Type", { enumerable: true, get: function () { return privacy_consent_decision_type_enum_1.DyNTS_PrivacyConsentDecision_Type; } });
49
51
  var privacy_consent_authorization_reason_type_enum_1 = require("./_enums/privacy-consent-authorization-reason.type-enum");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/_modules/privacy-lifecycle/index.ts"],"names":[],"mappings":";;;AAAA,yFAA4F;AAAnF,0JAAA,qCAAqC,OAAA;AAC9C,2HAE8D;AAD5D,0LAAA,oDAAoD,OAAA;AAEtD,+FAAiG;AAAxF,+JAAA,uCAAuC,OAAA;AAChD,2FAA6F;AAApF,2JAAA,qCAAqC,OAAA;AAC9C,+FAAiG;AAAxF,+JAAA,uCAAuC,OAAA;AAChD,qGAAuG;AAA9F,qKAAA,0CAA0C,OAAA;AAUnD,0FAAwF;AAA/E,+IAAA,6BAA6B,OAAA;AACtC,gGAGoD;AAFlD,4JAAA,uCAAuC,OAAA;AACvC,kKAAA,6CAA6C,OAAA;AAiC/C,oHAG8D;AAF5D,0KAAA,2CAA2C,OAAA;AAC3C,wKAAA,yCAAyC,OAAA;AAE3C,yFAA2F;AAAlF,yJAAA,oCAAoC,OAAA;AAM7C,mGAAqG;AAA5F,mKAAA,yCAAyC,OAAA;AAClD,mFAAsF;AAA7E,oJAAA,kCAAkC,OAAA;AAC3C,iHAEyD;AADvD,iLAAA,gDAAgD,OAAA;AAElD,qGAAuG;AAA9F,qKAAA,0CAA0C,OAAA;AACnD,6IAGuE;AAFrE,2MAAA,4DAA4D,OAAA;AAC5D,uLAAA,wCAAwC,OAAA;AAE1C,6FAA+F;AAAtF,6JAAA,sCAAsC,OAAA;AAC/C,iFAKyC;AAJvC,kJAAA,iCAAiC,OAAA;AAKnC,2EAKsC;AAJpC,4IAAA,8BAA8B,OAAA;AAKhC,iGAAmG;AAA1F,iKAAA,wCAAwC,OAAA;AACjD,2EAA8E;AAArE,4IAAA,8BAA8B,OAAA;AAKvC,kGAAgG;AAAvF,uJAAA,iCAAiC,OAAA;AAC1C,0HAEiE;AAD/D,8KAAA,4CAA4C,OAAA;AAE9C,sGAAoG;AAA3F,2JAAA,mCAAmC,OAAA;AAC5C,sHAE+D;AAD7D,0KAAA,0CAA0C,OAAA;AAE5C,wGAAsG;AAA7F,6JAAA,oCAAoC,OAAA;AAC7C,4FAA0F;AAAjF,iJAAA,8BAA8B,OAAA;AACvC,gFAA+E;AAAtE,sIAAA,yBAAyB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/_modules/privacy-lifecycle/index.ts"],"names":[],"mappings":";;;AAAA,yFAA4F;AAAnF,0JAAA,qCAAqC,OAAA;AAC9C,2HAE8D;AAD5D,0LAAA,oDAAoD,OAAA;AAEtD,+FAAiG;AAAxF,+JAAA,uCAAuC,OAAA;AAChD,2FAA6F;AAApF,2JAAA,qCAAqC,OAAA;AAC9C,+FAAiG;AAAxF,+JAAA,uCAAuC,OAAA;AAChD,qGAAuG;AAA9F,qKAAA,0CAA0C,OAAA;AAUnD,0FAAwF;AAA/E,+IAAA,6BAA6B,OAAA;AACtC,gGAGoD;AAFlD,4JAAA,uCAAuC,OAAA;AACvC,kKAAA,6CAA6C,OAAA;AAiC/C,oHAG8D;AAF5D,0KAAA,2CAA2C,OAAA;AAC3C,wKAAA,yCAAyC,OAAA;AAE3C,yFAA2F;AAAlF,yJAAA,oCAAoC,OAAA;AAM7C,mGAAqG;AAA5F,mKAAA,yCAAyC,OAAA;AAClD,mFAAsF;AAA7E,oJAAA,kCAAkC,OAAA;AAC3C,iHAEyD;AADvD,iLAAA,gDAAgD,OAAA;AAElD,qGAAuG;AAA9F,qKAAA,0CAA0C,OAAA;AACnD,6IAGuE;AAFrE,2MAAA,4DAA4D,OAAA;AAC5D,uLAAA,wCAAwC,OAAA;AAE1C,6FAA+F;AAAtF,6JAAA,sCAAsC,OAAA;AAC/C,iFAKyC;AAJvC,kJAAA,iCAAiC,OAAA;AAKnC,2EAKsC;AAJpC,4IAAA,8BAA8B,OAAA;AAKhC,iGAAmG;AAA1F,iKAAA,wCAAwC,OAAA;AACjD,2EAA8E;AAArE,4IAAA,8BAA8B,OAAA;AACvC,6FAA+F;AAAtF,6JAAA,sCAAsC,OAAA;AAe/C,kGAAgG;AAAvF,uJAAA,iCAAiC,OAAA;AAC1C,0HAEiE;AAD/D,8KAAA,4CAA4C,OAAA;AAE9C,sGAAoG;AAA3F,2JAAA,mCAAmC,OAAA;AAC5C,sHAE+D;AAD7D,0KAAA,0CAA0C,OAAA;AAE5C,wGAAsG;AAA7F,6JAAA,oCAAoC,OAAA;AAC7C,4FAA0F;AAAjF,iJAAA,8BAA8B,OAAA;AACvC,gFAA+E;AAAtE,sIAAA,yBAAyB,OAAA"}
@@ -0,0 +1,61 @@
1
+ import { DyNTS_PrivacyShareGrantAuditEvent_Interface, DyNTS_PrivacyShareGrantCreated_Interface, DyNTS_PrivacyShareGrantLifecycleReader_Interface, DyNTS_PrivacyShareGrantRedeemed_Interface, DyNTS_PrivacyShareGrantScope_Interface, DyNTS_PrivacyShareGrantStore_Interface, DyNTS_PrivacyShareGrantView_Interface } from './_models/privacy-share-grant.interface';
2
+ /**
3
+ * L-174 B2 (BFR-FUTDEVPRO-048, Data Act art. 26 b) — the share grant: the subject lets their NEW provider download ONE
4
+ * completed export without an account. Short-lived (default 72 h), single-use (atomic consume), revocable; the
5
+ * secret is shown once and stored only as a SHA-256 hash; a redemption notifies the subject (`onRedeemed`) and every
6
+ * step is audited (`onAudit`). A redemption yields the exact authority for
7
+ * `DyNTS_PrivacyExportBundle_ControlService.assemble` — the provider gets the SAME bundle the subject downloads.
8
+ *
9
+ * Owns no HTTP, no persistence, no delivery: the store, the lifecycle reader and the hooks are injected.
10
+ */
11
+ export declare class DyNTS_PrivacyShareGrant_ControlService {
12
+ static readonly defaultTtlMs: number;
13
+ static readonly absoluteMaxTtlMs: number;
14
+ /** The secret is 32 random bytes, base64url ⇒ exactly 43 characters. */
15
+ private static readonly secretPattern;
16
+ private readonly lifecycleReader;
17
+ private readonly store;
18
+ private readonly ttlMs;
19
+ private readonly maxActivePerRequest;
20
+ private readonly clock;
21
+ private readonly onRedeemed?;
22
+ private readonly onAudit?;
23
+ /** Creates the service; `ttlMs` ≤ 7 days, `maxActivePerRequest` 1–10 (the per-request rate limit). */
24
+ constructor(set: {
25
+ lifecycleReader: DyNTS_PrivacyShareGrantLifecycleReader_Interface;
26
+ store: DyNTS_PrivacyShareGrantStore_Interface;
27
+ ttlMs?: number;
28
+ maxActivePerRequest?: number;
29
+ clock?: () => Date;
30
+ onRedeemed?: (event: DyNTS_PrivacyShareGrantRedeemed_Interface) => Promise<void> | void;
31
+ onAudit?: (event: DyNTS_PrivacyShareGrantAuditEvent_Interface) => Promise<void> | void;
32
+ });
33
+ /** Creates a grant for the subject's own COMPLETED export; the returned secret is never retrievable again. */
34
+ create(scope: DyNTS_PrivacyShareGrantScope_Interface): Promise<DyNTS_PrivacyShareGrantCreated_Interface>;
35
+ /** The subject's grants of one export request, newest first (no secret, no hash). */
36
+ list(scope: DyNTS_PrivacyShareGrantScope_Interface): Promise<DyNTS_PrivacyShareGrantView_Interface[]>;
37
+ /** Revokes one active grant of the subject's request (404 when there is no such active grant). */
38
+ revoke(set: {
39
+ grantId: string;
40
+ scope: DyNTS_PrivacyShareGrantScope_Interface;
41
+ }): Promise<void>;
42
+ /**
43
+ * The public redemption (no account): consumes the grant atomically and returns the export authority. Any failure — a
44
+ * malformed, unknown, used, revoked or expired secret — is the SAME 404, so the endpoint gives no oracle.
45
+ */
46
+ redeem(set: {
47
+ secret: string;
48
+ usedBy: string;
49
+ }): Promise<DyNTS_PrivacyShareGrantRedeemed_Interface>;
50
+ /** The grant must be for the subject's own export request, in `completed` state. */
51
+ private requireCompletedExport;
52
+ private stateOf;
53
+ private view;
54
+ private inScope;
55
+ private validateScope;
56
+ private boundedText;
57
+ private hash;
58
+ private audit;
59
+ private error;
60
+ }
61
+ //# sourceMappingURL=privacy-share-grant.control-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privacy-share-grant.control-service.d.ts","sourceRoot":"","sources":["../../../src/_modules/privacy-lifecycle/privacy-share-grant.control-service.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,2CAA2C,EAC3C,wCAAwC,EACxC,gDAAgD,EAEhD,yCAAyC,EACzC,sCAAsC,EACtC,sCAAsC,EACtC,qCAAqC,EACtC,MAAM,yCAAyC,CAAC;AAEjD;;;;;;;;GAQG;AACH,qBAAa,sCAAsC;IACjD,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAuB;IAC3D,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAA2B;IACnE,wEAAwE;IACxE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAkC;IAEvE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmD;IACnF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyC;IAC/D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAA6E;IACzG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAA+E;IAExG,sGAAsG;gBAC1F,GAAG,EAAE;QACf,eAAe,EAAE,gDAAgD,CAAC;QAClE,KAAK,EAAE,sCAAsC,CAAC;QAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;QACnB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,yCAAyC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACxF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,2CAA2C,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KACxF;IAqBD,8GAA8G;IACxG,MAAM,CAAC,KAAK,EAAE,sCAAsC,GAAG,OAAO,CAAC,wCAAwC,CAAC;IA8B9G,qFAAqF;IAC/E,IAAI,CAAC,KAAK,EAAE,sCAAsC,GAAG,OAAO,CAAC,qCAAqC,EAAE,CAAC;IAiB3G,kGAAkG;IAC5F,MAAM,CAAC,GAAG,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,sCAAsC,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAapG;;;OAGG;IACG,MAAM,CAAC,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,yCAAyC,CAAC;IAmCzG,oFAAoF;YACtE,sBAAsB;IAqBpC,OAAO,CAAC,OAAO;IAef,OAAO,CAAC,IAAI;IAaZ,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,IAAI;YAIE,KAAK;IAInB,OAAO,CAAC,KAAK;CAed"}
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DyNTS_PrivacyShareGrant_ControlService = void 0;
4
+ const node_crypto_1 = require("node:crypto");
5
+ const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
6
+ const privacy_request_state_type_enum_1 = require("./_enums/privacy-request-state.type-enum");
7
+ const privacy_request_type_enum_1 = require("./_enums/privacy-request.type-enum");
8
+ /**
9
+ * L-174 B2 (BFR-FUTDEVPRO-048, Data Act art. 26 b) — the share grant: the subject lets their NEW provider download ONE
10
+ * completed export without an account. Short-lived (default 72 h), single-use (atomic consume), revocable; the
11
+ * secret is shown once and stored only as a SHA-256 hash; a redemption notifies the subject (`onRedeemed`) and every
12
+ * step is audited (`onAudit`). A redemption yields the exact authority for
13
+ * `DyNTS_PrivacyExportBundle_ControlService.assemble` — the provider gets the SAME bundle the subject downloads.
14
+ *
15
+ * Owns no HTTP, no persistence, no delivery: the store, the lifecycle reader and the hooks are injected.
16
+ */
17
+ class DyNTS_PrivacyShareGrant_ControlService {
18
+ static defaultTtlMs = 72 * 60 * 60 * 1000;
19
+ static absoluteMaxTtlMs = 7 * 24 * 60 * 60 * 1000;
20
+ /** The secret is 32 random bytes, base64url ⇒ exactly 43 characters. */
21
+ static secretPattern = /^[A-Za-z0-9_-]{43}$/u;
22
+ lifecycleReader;
23
+ store;
24
+ ttlMs;
25
+ maxActivePerRequest;
26
+ clock;
27
+ onRedeemed;
28
+ onAudit;
29
+ /** Creates the service; `ttlMs` ≤ 7 days, `maxActivePerRequest` 1–10 (the per-request rate limit). */
30
+ constructor(set) {
31
+ const ttlMs = set?.ttlMs ?? DyNTS_PrivacyShareGrant_ControlService.defaultTtlMs;
32
+ const maxActive = set?.maxActivePerRequest ?? 3;
33
+ if (!set?.lifecycleReader || !set?.store
34
+ || !Number.isSafeInteger(ttlMs) || ttlMs < 60_000
35
+ || ttlMs > DyNTS_PrivacyShareGrant_ControlService.absoluteMaxTtlMs
36
+ || !Number.isSafeInteger(maxActive) || maxActive < 1 || maxActive > 10) {
37
+ throw this.error('SETTINGS_INVALID', 500);
38
+ }
39
+ this.lifecycleReader = set.lifecycleReader;
40
+ this.store = set.store;
41
+ this.ttlMs = ttlMs;
42
+ this.maxActivePerRequest = maxActive;
43
+ this.clock = set.clock ?? (() => new Date());
44
+ this.onRedeemed = set.onRedeemed;
45
+ this.onAudit = set.onAudit;
46
+ }
47
+ /** Creates a grant for the subject's own COMPLETED export; the returned secret is never retrievable again. */
48
+ async create(scope) {
49
+ await this.requireCompletedExport(scope);
50
+ const now = this.clock();
51
+ const active = (await this.store.listForRequest(scope))
52
+ .filter((record) => this.stateOf(record, now) === 'active')
53
+ .length;
54
+ if (active >= this.maxActivePerRequest) {
55
+ throw this.error('TOO_MANY_ACTIVE_GRANTS', 429);
56
+ }
57
+ const secret = (0, node_crypto_1.randomBytes)(32).toString('base64url');
58
+ const record = {
59
+ requestId: scope.requestId,
60
+ subjectId: scope.subjectId,
61
+ organizationId: scope.organizationId,
62
+ grantId: (0, node_crypto_1.randomUUID)(),
63
+ secretHash: this.hash(secret),
64
+ createdAt: now.toISOString(),
65
+ expiresAt: new Date(now.getTime() + this.ttlMs).toISOString(),
66
+ revokedAt: '',
67
+ usedAt: '',
68
+ usedBy: '',
69
+ };
70
+ await this.store.insert(record);
71
+ await this.audit({ kind: 'created', grantId: record.grantId, requestId: record.requestId, usedBy: '' });
72
+ return { grant: this.view(record, now), secret: secret };
73
+ }
74
+ /** The subject's grants of one export request, newest first (no secret, no hash). */
75
+ async list(scope) {
76
+ this.validateScope(scope);
77
+ const now = this.clock();
78
+ return (await this.store.listForRequest(scope))
79
+ .filter((record) => this.inScope(record, scope))
80
+ .sort((first, second) => (first.createdAt < second.createdAt ? 1 : first.createdAt > second.createdAt ? -1 : 0))
81
+ .map((record) => (this.view(record, now)));
82
+ }
83
+ /** Revokes one active grant of the subject's request (404 when there is no such active grant). */
84
+ async revoke(set) {
85
+ this.validateScope(set?.scope);
86
+ const at = this.clock().toISOString();
87
+ const revoked = this.boundedText(set?.grantId, 64)
88
+ && await this.store.revoke({ grantId: set.grantId, scope: set.scope, at: at });
89
+ if (!revoked) {
90
+ throw this.error('GRANT_NOT_FOUND', 404);
91
+ }
92
+ await this.audit({ kind: 'revoked', grantId: set.grantId, requestId: set.scope.requestId, usedBy: '' });
93
+ }
94
+ /**
95
+ * The public redemption (no account): consumes the grant atomically and returns the export authority. Any failure — a
96
+ * malformed, unknown, used, revoked or expired secret — is the SAME 404, so the endpoint gives no oracle.
97
+ */
98
+ async redeem(set) {
99
+ const at = this.clock().toISOString();
100
+ const usedBy = this.boundedText(set?.usedBy, 256) ? set.usedBy : '';
101
+ const record = DyNTS_PrivacyShareGrant_ControlService.secretPattern.test(set?.secret ?? '')
102
+ ? await this.store.consume({ secretHash: this.hash(set.secret), at: at, usedBy: usedBy })
103
+ : null;
104
+ if (!record) {
105
+ await this.audit({ kind: 'refused', grantId: '', requestId: '', usedBy: usedBy });
106
+ throw this.error('GRANT_NOT_FOUND', 404);
107
+ }
108
+ const redeemed = {
109
+ grantId: record.grantId,
110
+ requestId: record.requestId,
111
+ subjectId: record.subjectId,
112
+ organizationId: record.organizationId,
113
+ };
114
+ await this.audit({ kind: 'redeemed', grantId: record.grantId, requestId: record.requestId, usedBy: usedBy });
115
+ // the grant is already consumed — a failing notification must not cost the provider its download
116
+ try {
117
+ await this.onRedeemed?.(redeemed);
118
+ }
119
+ catch (error) {
120
+ fsm_dynamo_1.DyFM_Log.error(`DyNTS_PrivacyShareGrant_ControlService: the redemption notification failed (${redeemed.grantId})`, error);
121
+ }
122
+ return redeemed;
123
+ }
124
+ /** The grant must be for the subject's own export request, in `completed` state. */
125
+ async requireCompletedExport(scope) {
126
+ this.validateScope(scope);
127
+ let request;
128
+ try {
129
+ request = await this.lifecycleReader.findRequestById(scope.requestId);
130
+ }
131
+ catch {
132
+ throw this.error('LIFECYCLE_UNAVAILABLE', 503);
133
+ }
134
+ if (!request || !this.inScope(request, scope)) {
135
+ throw this.error('REQUEST_NOT_FOUND', 404);
136
+ }
137
+ const ready = request.type === privacy_request_type_enum_1.DyNTS_PrivacyRequest_Type.export
138
+ && request.state === privacy_request_state_type_enum_1.DyNTS_PrivacyRequestState_Type.completed;
139
+ if (!ready) {
140
+ throw this.error('REQUEST_NOT_READY', 409);
141
+ }
142
+ }
143
+ stateOf(record, now) {
144
+ if (record.usedAt) {
145
+ return 'used';
146
+ }
147
+ if (record.revokedAt) {
148
+ return 'revoked';
149
+ }
150
+ return Date.parse(record.expiresAt) <= now.getTime() ? 'expired' : 'active';
151
+ }
152
+ view(record, now) {
153
+ return {
154
+ grantId: record.grantId,
155
+ requestId: record.requestId,
156
+ state: this.stateOf(record, now),
157
+ createdAt: record.createdAt,
158
+ expiresAt: record.expiresAt,
159
+ revokedAt: record.revokedAt,
160
+ usedAt: record.usedAt,
161
+ usedBy: record.usedBy,
162
+ };
163
+ }
164
+ inScope(value, scope) {
165
+ return value.requestId === scope.requestId && value.subjectId === scope.subjectId
166
+ && value.organizationId === scope.organizationId;
167
+ }
168
+ validateScope(scope) {
169
+ if (!this.boundedText(scope?.requestId, 256) || !this.boundedText(scope?.subjectId, 256)
170
+ || !this.boundedText(scope?.organizationId, 256)) {
171
+ throw this.error('REQUEST_INVALID', 400);
172
+ }
173
+ }
174
+ boundedText(value, maximum) {
175
+ return typeof value === 'string' && value.length > 0 && value.length <= maximum;
176
+ }
177
+ hash(secret) {
178
+ return (0, node_crypto_1.createHash)('sha256').update(secret, 'utf8').digest('hex');
179
+ }
180
+ async audit(event) {
181
+ await this.onAudit?.({ ...event, at: this.clock().toISOString() });
182
+ }
183
+ error(code, status) {
184
+ return new fsm_dynamo_1.DyFM_Error({
185
+ status: status,
186
+ errorCode: `DYNTS|PRIVACY_SHARE_GRANT|${code}`,
187
+ message: 'The privacy share grant operation failed.',
188
+ userMessage: status === 404
189
+ ? 'This download link is not valid (it may have expired, been used or been revoked).'
190
+ : status === 409
191
+ ? 'The export is not ready to be shared yet.'
192
+ : status === 429
193
+ ? 'Too many active share links for this export — revoke one first.'
194
+ : 'The share link operation is temporarily unavailable.',
195
+ issuerService: 'DyNTS_PrivacyShareGrant_ControlService',
196
+ });
197
+ }
198
+ }
199
+ exports.DyNTS_PrivacyShareGrant_ControlService = DyNTS_PrivacyShareGrant_ControlService;
200
+ //# sourceMappingURL=privacy-share-grant.control-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privacy-share-grant.control-service.js","sourceRoot":"","sources":["../../../src/_modules/privacy-lifecycle/privacy-share-grant.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.407",
3
+ "version": "01.15.408",
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",