@fabricorg/platform 0.12.1 → 1.1.0
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.
- package/CHANGELOG.md +38 -0
- package/README.md +7 -8
- package/dist/actions/index.cjs +7 -27
- package/dist/actions/index.d.cts +9 -7
- package/dist/actions/index.d.ts +9 -7
- package/dist/actions/index.js +1 -1
- package/dist/chunk-4QOA3VU5.js +47 -0
- package/dist/chunk-4QOA3VU5.js.map +1 -0
- package/dist/{chunk-35SDMFCR.js → chunk-53YJK3LK.js} +93 -99
- package/dist/chunk-53YJK3LK.js.map +1 -0
- package/dist/{chunk-LAZL2GDT.cjs → chunk-6T6F3TNQ.cjs} +99 -104
- package/dist/chunk-6T6F3TNQ.cjs.map +1 -0
- package/dist/{chunk-ZZGSS65W.cjs → chunk-A2VTSATF.cjs} +6 -6
- package/dist/{chunk-ZZGSS65W.cjs.map → chunk-A2VTSATF.cjs.map} +1 -1
- package/dist/{chunk-X7WC4AYC.js → chunk-ATWWZTRC.js} +32 -74
- package/dist/chunk-ATWWZTRC.js.map +1 -0
- package/dist/chunk-BFQNKQJE.cjs +53 -0
- package/dist/{chunk-4RMKUYRX.js.map → chunk-BFQNKQJE.cjs.map} +1 -1
- package/dist/{chunk-OC4ZFJKD.cjs → chunk-CBY6GRJP.cjs} +16 -17
- package/dist/chunk-CBY6GRJP.cjs.map +1 -0
- package/dist/{chunk-HL77HWWP.js → chunk-ETONSTUW.js} +3 -3
- package/dist/{chunk-HL77HWWP.js.map → chunk-ETONSTUW.js.map} +1 -1
- package/dist/{chunk-FSUYD4F4.js → chunk-J5LS5BSI.js} +19 -17
- package/dist/chunk-J5LS5BSI.js.map +1 -0
- package/dist/{chunk-6ER62UUN.js → chunk-JFVEPAED.js} +31 -40
- package/dist/chunk-JFVEPAED.js.map +1 -0
- package/dist/chunk-LDPBQ72C.cjs +40 -0
- package/dist/chunk-LDPBQ72C.cjs.map +1 -0
- package/dist/{chunk-7SHNYYGI.cjs → chunk-M5FGWXT3.cjs} +19 -20
- package/dist/chunk-M5FGWXT3.cjs.map +1 -0
- package/dist/{chunk-4MMMXV4Q.js → chunk-NETLRKDS.js} +16 -15
- package/dist/chunk-NETLRKDS.js.map +1 -0
- package/dist/chunk-NHGBTPPE.js +38 -0
- package/dist/chunk-NHGBTPPE.js.map +1 -0
- package/dist/chunk-OWSSGFNY.js +45 -0
- package/dist/chunk-OWSSGFNY.js.map +1 -0
- package/dist/{chunk-NJL3US7H.cjs → chunk-VZ6C4LXC.cjs} +31 -43
- package/dist/chunk-VZ6C4LXC.cjs.map +1 -0
- package/dist/chunk-WAI4UNWQ.cjs +48 -0
- package/dist/chunk-WAI4UNWQ.cjs.map +1 -0
- package/dist/{chunk-YQEXO3IQ.cjs → chunk-X3GHYMAJ.cjs} +32 -74
- package/dist/chunk-X3GHYMAJ.cjs.map +1 -0
- package/dist/events/index.cjs +3 -27
- package/dist/events/index.d.cts +20 -13
- package/dist/events/index.d.ts +20 -13
- package/dist/events/index.js +1 -1
- package/dist/index.cjs +88 -193
- package/dist/index.d.cts +8 -9
- package/dist/index.d.ts +8 -9
- package/dist/index.js +10 -11
- package/dist/manifest/index.cjs +11 -15
- package/dist/manifest/index.d.cts +0 -1
- package/dist/manifest/index.d.ts +0 -1
- package/dist/manifest/index.js +5 -9
- package/dist/modules/index.cjs +15 -15
- package/dist/modules/index.d.cts +46 -23
- package/dist/modules/index.d.ts +46 -23
- package/dist/modules/index.js +4 -8
- package/dist/objects/index.cjs +5 -13
- package/dist/objects/index.d.cts +7 -4
- package/dist/objects/index.d.ts +7 -4
- package/dist/objects/index.js +1 -1
- package/dist/policies/index.cjs +12 -24
- package/dist/policies/index.d.cts +10 -5
- package/dist/policies/index.d.ts +10 -5
- package/dist/policies/index.js +1 -1
- package/dist/privacy/index.cjs +10 -10
- package/dist/privacy/index.d.cts +16 -5
- package/dist/privacy/index.d.ts +16 -5
- package/dist/privacy/index.js +1 -1
- package/dist/projections/index.cjs +6 -18
- package/dist/projections/index.d.cts +8 -5
- package/dist/projections/index.d.ts +8 -5
- package/dist/projections/index.js +1 -1
- package/dist/state-machines/index.cjs +5 -21
- package/dist/state-machines/index.d.cts +17 -31
- package/dist/state-machines/index.d.ts +17 -31
- package/dist/state-machines/index.js +1 -1
- package/package.json +1 -11
- package/dist/chunk-35SDMFCR.js.map +0 -1
- package/dist/chunk-3O4GMCCE.js +0 -55
- package/dist/chunk-3O4GMCCE.js.map +0 -1
- package/dist/chunk-4MMMXV4Q.js.map +0 -1
- package/dist/chunk-4RMKUYRX.js +0 -59
- package/dist/chunk-6ER62UUN.js.map +0 -1
- package/dist/chunk-7RV5REPT.cjs +0 -63
- package/dist/chunk-7RV5REPT.cjs.map +0 -1
- package/dist/chunk-7SHNYYGI.cjs.map +0 -1
- package/dist/chunk-EO4VSB2O.cjs +0 -99
- package/dist/chunk-EO4VSB2O.cjs.map +0 -1
- package/dist/chunk-FSUYD4F4.js.map +0 -1
- package/dist/chunk-JOATYJXQ.cjs +0 -70
- package/dist/chunk-JOATYJXQ.cjs.map +0 -1
- package/dist/chunk-LAZL2GDT.cjs.map +0 -1
- package/dist/chunk-NJL3US7H.cjs.map +0 -1
- package/dist/chunk-O5WVBQ7P.js +0 -89
- package/dist/chunk-O5WVBQ7P.js.map +0 -1
- package/dist/chunk-OC4ZFJKD.cjs.map +0 -1
- package/dist/chunk-T2JLSZN6.js +0 -67
- package/dist/chunk-T2JLSZN6.js.map +0 -1
- package/dist/chunk-UV252FLT.cjs +0 -74
- package/dist/chunk-UV252FLT.cjs.map +0 -1
- package/dist/chunk-X7WC4AYC.js.map +0 -1
- package/dist/chunk-YQEXO3IQ.cjs.map +0 -1
- package/dist/displays/index.cjs +0 -24
- package/dist/displays/index.cjs.map +0 -1
- package/dist/displays/index.d.cts +0 -34
- package/dist/displays/index.d.ts +0 -34
- package/dist/displays/index.js +0 -3
- package/dist/displays/index.js.map +0 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// state-machines/engine.ts
|
|
4
|
+
function validateStateMachineTransition(sm, entityType, from, to, actionId) {
|
|
5
|
+
if (!sm) return { valid: false, error: `No state machine registered for entity type "${entityType}".` };
|
|
6
|
+
const fromDef = sm.states[from];
|
|
7
|
+
if (!fromDef) return { valid: false, error: `State "${from}" does not exist in state machine for entity type "${entityType}".` };
|
|
8
|
+
const toDef = sm.states[to];
|
|
9
|
+
if (!toDef) return { valid: false, error: `State "${to}" does not exist in state machine for entity type "${entityType}".` };
|
|
10
|
+
const transitionExists = sm.transitions.some((transition) => transition.from === from && transition.to === to && transition.causedByAction === actionId);
|
|
11
|
+
return transitionExists ? { valid: true } : { valid: false, error: `Transition from "${from}" to "${to}" via action "${actionId}" is not defined for entity type "${entityType}".` };
|
|
12
|
+
}
|
|
13
|
+
function createStateMachineRegistry(definitions = []) {
|
|
14
|
+
const machines = /* @__PURE__ */ new Map();
|
|
15
|
+
const register = (definition) => {
|
|
16
|
+
if (machines.has(definition.entityType)) throw new Error(`State machine for entity type "${definition.entityType}" is already registered.`);
|
|
17
|
+
machines.set(definition.entityType, definition);
|
|
18
|
+
};
|
|
19
|
+
const validateTransition = (entityType, from, to, actionId) => validateStateMachineTransition(machines.get(entityType), entityType, from, to, actionId);
|
|
20
|
+
for (const definition of definitions) register(definition);
|
|
21
|
+
return {
|
|
22
|
+
register,
|
|
23
|
+
registerIfMissing(definition) {
|
|
24
|
+
if (!machines.has(definition.entityType)) register(definition);
|
|
25
|
+
},
|
|
26
|
+
resolve: (entityType) => machines.get(entityType),
|
|
27
|
+
validateTransition,
|
|
28
|
+
allowedTransitions(entityType, from) {
|
|
29
|
+
const sm = machines.get(entityType);
|
|
30
|
+
if (!sm) {
|
|
31
|
+
return [];
|
|
32
|
+
}
|
|
33
|
+
return sm.transitions.filter((t) => t.from === from).map((t) => ({ to: t.to, causedByAction: t.causedByAction }));
|
|
34
|
+
},
|
|
35
|
+
stateClass(entityType, state) {
|
|
36
|
+
const sm = machines.get(entityType);
|
|
37
|
+
if (!sm) {
|
|
38
|
+
return void 0;
|
|
39
|
+
}
|
|
40
|
+
return sm.states[state]?.stateClass;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
exports.createStateMachineRegistry = createStateMachineRegistry;
|
|
46
|
+
exports.validateStateMachineTransition = validateStateMachineTransition;
|
|
47
|
+
//# sourceMappingURL=chunk-WAI4UNWQ.cjs.map
|
|
48
|
+
//# sourceMappingURL=chunk-WAI4UNWQ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../state-machines/engine.ts"],"names":[],"mappings":"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","file":"chunk-WAI4UNWQ.cjs","sourcesContent":["import type { StateClass, StateDefinition } from \"./index\";\n\nexport interface StateMachineDefinition {\n\tentityType: string;\n\tstates: Record<string, StateDefinition>;\n\ttransitions: Array<{\n\t\tfrom: string;\n\t\tto: string;\n\t\tcausedByAction: string;\n\t\tguard?: (ctx: TransitionContext) => boolean | Promise<boolean>;\n\t}>;\n}\n\nexport type StateMachineDatabaseClient = unknown;\n\nexport interface TransitionContext<TDb = StateMachineDatabaseClient> {\n\tentity: Record<string, unknown>;\n\tactionInvocationId: string;\n\tactorId: string;\n\tparameters: unknown;\n\tdb: TDb;\n}\n\nexport interface StateMachineRegistry {\n\tregister(definition: StateMachineDefinition): void;\n\tregisterIfMissing(definition: StateMachineDefinition): void;\n\tresolve(entityType: string): StateMachineDefinition | undefined;\n\tvalidateTransition(entityType: string, from: string, to: string, actionId: string): { valid: boolean; error?: string };\n\tallowedTransitions(entityType: string, from: string): Array<{ to: string; causedByAction: string }>;\n\tstateClass(entityType: string, state: string): StateClass | undefined;\n}\n\nexport function validateStateMachineTransition(\n\tsm: StateMachineDefinition | undefined,\n\tentityType: string,\n\tfrom: string,\n\tto: string,\n\tactionId: string,\n): { valid: boolean; error?: string } {\n\tif (!sm) return { valid: false, error: `No state machine registered for entity type \"${entityType}\".` };\n\tconst fromDef = sm.states[from];\n\tif (!fromDef) return { valid: false, error: `State \"${from}\" does not exist in state machine for entity type \"${entityType}\".` };\n\tconst toDef = sm.states[to];\n\tif (!toDef) return { valid: false, error: `State \"${to}\" does not exist in state machine for entity type \"${entityType}\".` };\n\tconst transitionExists = sm.transitions.some((transition) => transition.from === from && transition.to === to && transition.causedByAction === actionId);\n\treturn transitionExists\n\t\t? { valid: true }\n\t\t: { valid: false, error: `Transition from \"${from}\" to \"${to}\" via action \"${actionId}\" is not defined for entity type \"${entityType}\".` };\n}\n\nexport function createStateMachineRegistry(definitions: readonly StateMachineDefinition[] = []): StateMachineRegistry {\n\tconst machines = new Map<string, StateMachineDefinition>();\n\tconst register = (definition: StateMachineDefinition): void => {\n\t\tif (machines.has(definition.entityType)) throw new Error(`State machine for entity type \"${definition.entityType}\" is already registered.`);\n\t\tmachines.set(definition.entityType, definition);\n\t};\n\tconst validateTransition = (entityType: string, from: string, to: string, actionId: string) =>\n\t\tvalidateStateMachineTransition(machines.get(entityType), entityType, from, to, actionId);\n\tfor (const definition of definitions) register(definition);\n\treturn {\n\t\tregister,\n\t\tregisterIfMissing(definition) {\n\t\t\tif (!machines.has(definition.entityType)) register(definition);\n\t\t},\n\t\tresolve: (entityType) => machines.get(entityType),\n\t\tvalidateTransition,\n\t\tallowedTransitions(entityType, from) {\n\tconst sm = machines.get(entityType);\n\tif (!sm) {\n\t\treturn [];\n\t}\n\treturn sm.transitions\n\t\t.filter((t) => t.from === from)\n\t\t.map((t) => ({ to: t.to, causedByAction: t.causedByAction }));\n\t\t},\n\t\tstateClass(entityType, state) {\n\tconst sm = machines.get(entityType);\n\tif (!sm) {\n\t\treturn undefined;\n\t}\n\treturn sm.states[state]?.stateClass;\n\t\t},\n\t};\n}\n"]}
|
|
@@ -4,57 +4,6 @@ var crypto = require('crypto');
|
|
|
4
4
|
|
|
5
5
|
// privacy/engine.ts
|
|
6
6
|
var ANONYMIZATION_POLICY_VERSION = "adr-026-platform-anonymization-v1";
|
|
7
|
-
var DEFAULT_PRESERVED_SEMANTICS = [
|
|
8
|
-
"tenantId",
|
|
9
|
-
"spaceId",
|
|
10
|
-
"subjectType",
|
|
11
|
-
"subjectId",
|
|
12
|
-
"eventType",
|
|
13
|
-
"sequence",
|
|
14
|
-
"occurredAt",
|
|
15
|
-
"recordedAt",
|
|
16
|
-
"actionInvocationId",
|
|
17
|
-
"correlationId",
|
|
18
|
-
"causationId",
|
|
19
|
-
"financialDecisionFacts"
|
|
20
|
-
];
|
|
21
|
-
var FIELD_POLICIES = [
|
|
22
|
-
{ match: "key", value: "password", method: "drop" },
|
|
23
|
-
{ match: "key", value: "token", method: "drop" },
|
|
24
|
-
{ match: "key", value: "apiKey", method: "drop" },
|
|
25
|
-
{ match: "key", value: "authorization", method: "drop" },
|
|
26
|
-
{ match: "key", value: "ssn", method: "nullify" },
|
|
27
|
-
{ match: "key", value: "ssnLast4", method: "nullify" },
|
|
28
|
-
{ match: "key", value: "socialSecurityNumber", method: "nullify" },
|
|
29
|
-
{ match: "key", value: "dateOfBirth", method: "nullify" },
|
|
30
|
-
{ match: "key", value: "dob", method: "nullify" },
|
|
31
|
-
{ match: "key", value: "driverLicense", method: "nullify" },
|
|
32
|
-
{ match: "key", value: "firstName", method: "tokenize" },
|
|
33
|
-
{ match: "key", value: "middleName", method: "tokenize" },
|
|
34
|
-
{ match: "key", value: "lastName", method: "tokenize" },
|
|
35
|
-
{ match: "key", value: "fullName", method: "tokenize" },
|
|
36
|
-
{ match: "key", value: "name", method: "tokenize" },
|
|
37
|
-
{ match: "key", value: "email", method: "tokenize" },
|
|
38
|
-
{ match: "key", value: "emailAddress", method: "tokenize" },
|
|
39
|
-
{ match: "key", value: "phone", method: "tokenize" },
|
|
40
|
-
{ match: "key", value: "phoneNumber", method: "tokenize" },
|
|
41
|
-
{ match: "key", value: "mobilePhone", method: "tokenize" },
|
|
42
|
-
{ match: "key", value: "homePhone", method: "tokenize" },
|
|
43
|
-
{ match: "key", value: "workPhone", method: "tokenize" },
|
|
44
|
-
{ match: "key", value: "street", method: "nullify" },
|
|
45
|
-
{ match: "key", value: "streetAddress", method: "nullify" },
|
|
46
|
-
{ match: "key", value: "address", method: "nullify" },
|
|
47
|
-
{ match: "key", value: "mailingAddress", method: "nullify" },
|
|
48
|
-
{ match: "key", value: "partnerLeadId", method: "tokenize" },
|
|
49
|
-
{ match: "key", value: "externalLeadId", method: "tokenize" },
|
|
50
|
-
{ match: "key", value: "loanApplicationId", method: "tokenize" },
|
|
51
|
-
{ match: "key", value: "vin", method: "tokenize" },
|
|
52
|
-
{ match: "key", value: "rawVin", method: "tokenize" }
|
|
53
|
-
];
|
|
54
|
-
var NORMALIZED_FIELD_POLICIES = FIELD_POLICIES.map((policy) => ({
|
|
55
|
-
...policy,
|
|
56
|
-
value: normalizeKey(policy.value)
|
|
57
|
-
}));
|
|
58
7
|
function normalizeKey(key) {
|
|
59
8
|
return key.replace(/[^a-zA-Z0-9]/g, "").toLowerCase();
|
|
60
9
|
}
|
|
@@ -100,21 +49,22 @@ function applyMethod(value, method, context, path) {
|
|
|
100
49
|
return generalizeValue(value);
|
|
101
50
|
}
|
|
102
51
|
}
|
|
103
|
-
function policyForPath(path, key) {
|
|
52
|
+
function policyForPath(policies, path, key) {
|
|
104
53
|
const normalizedPath = normalizeKey(path);
|
|
105
54
|
const normalizedKey = key ? normalizeKey(key) : void 0;
|
|
106
|
-
return
|
|
55
|
+
return policies.find((policy) => {
|
|
56
|
+
const normalizedValue = normalizeKey(policy.value);
|
|
107
57
|
if (policy.match === "key") {
|
|
108
|
-
return
|
|
58
|
+
return normalizedValue === normalizedKey;
|
|
109
59
|
}
|
|
110
|
-
return
|
|
60
|
+
return normalizedValue === normalizedPath;
|
|
111
61
|
});
|
|
112
62
|
}
|
|
113
63
|
function isPlainObject(value) {
|
|
114
64
|
return Boolean(value) && typeof value === "object" && !Array.isArray(value) && !(value instanceof Date);
|
|
115
65
|
}
|
|
116
|
-
function anonymizeRecursive(value, context, dataClass, path, redactedFields, key) {
|
|
117
|
-
const fieldPolicy = policyForPath(path, key);
|
|
66
|
+
function anonymizeRecursive(value, context, dataClass, path, redactedFields, policies, key) {
|
|
67
|
+
const fieldPolicy = policyForPath(policies, path, key);
|
|
118
68
|
if (fieldPolicy && value !== null && value !== void 0) {
|
|
119
69
|
redactedFields.push({
|
|
120
70
|
fieldPath: path,
|
|
@@ -130,7 +80,7 @@ function anonymizeRecursive(value, context, dataClass, path, redactedFields, key
|
|
|
130
80
|
}
|
|
131
81
|
if (Array.isArray(value)) {
|
|
132
82
|
return value.map(
|
|
133
|
-
(item, index) => anonymizeRecursive(item, context, dataClass, `${path}[${index}]`, redactedFields)
|
|
83
|
+
(item, index) => anonymizeRecursive(item, context, dataClass, `${path}[${index}]`, redactedFields, policies)
|
|
134
84
|
);
|
|
135
85
|
}
|
|
136
86
|
if (!isPlainObject(value)) {
|
|
@@ -148,6 +98,7 @@ function anonymizeRecursive(value, context, dataClass, path, redactedFields, key
|
|
|
148
98
|
dataClass,
|
|
149
99
|
`${path}.${childKey}`,
|
|
150
100
|
redactedFields,
|
|
101
|
+
policies,
|
|
151
102
|
childKey
|
|
152
103
|
);
|
|
153
104
|
if (anonymized !== void 0) {
|
|
@@ -156,7 +107,7 @@ function anonymizeRecursive(value, context, dataClass, path, redactedFields, key
|
|
|
156
107
|
}
|
|
157
108
|
return result;
|
|
158
109
|
}
|
|
159
|
-
function buildMetadata(context, dataClass, redactedFields) {
|
|
110
|
+
function buildMetadata(context, dataClass, redactedFields, preservedSemantics) {
|
|
160
111
|
return {
|
|
161
112
|
redactionState: "anonymized",
|
|
162
113
|
policyVersion: context.policyVersion ?? ANONYMIZATION_POLICY_VERSION,
|
|
@@ -165,7 +116,7 @@ function buildMetadata(context, dataClass, redactedFields) {
|
|
|
165
116
|
reason: context.reason,
|
|
166
117
|
dataClass,
|
|
167
118
|
redactedFields,
|
|
168
|
-
preservedSemantics:
|
|
119
|
+
preservedSemantics: [...preservedSemantics]
|
|
169
120
|
};
|
|
170
121
|
}
|
|
171
122
|
var FieldRedactor = class {
|
|
@@ -186,6 +137,13 @@ var FieldRedactor = class {
|
|
|
186
137
|
}
|
|
187
138
|
};
|
|
188
139
|
var AnonymizationEngine = class {
|
|
140
|
+
#policy;
|
|
141
|
+
constructor(policy) {
|
|
142
|
+
this.#policy = {
|
|
143
|
+
fields: policy.fields.map((field) => ({ ...field })),
|
|
144
|
+
preservedSemantics: [...policy.preservedSemantics ?? []]
|
|
145
|
+
};
|
|
146
|
+
}
|
|
189
147
|
anonymizeJsonValue(value, context, dataClass) {
|
|
190
148
|
return this.anonymizeJsonValueAtPath(value, context, dataClass, "$");
|
|
191
149
|
}
|
|
@@ -196,11 +154,12 @@ var AnonymizationEngine = class {
|
|
|
196
154
|
context,
|
|
197
155
|
dataClass,
|
|
198
156
|
basePath,
|
|
199
|
-
redactedFields
|
|
157
|
+
redactedFields,
|
|
158
|
+
this.#policy.fields
|
|
200
159
|
);
|
|
201
160
|
return {
|
|
202
161
|
value: anonymizedValue,
|
|
203
|
-
metadata: buildMetadata(context, dataClass, redactedFields)
|
|
162
|
+
metadata: buildMetadata(context, dataClass, redactedFields, this.#policy.preservedSemantics ?? [])
|
|
204
163
|
};
|
|
205
164
|
}
|
|
206
165
|
anonymizeAssetEventPayload(event, context) {
|
|
@@ -286,25 +245,24 @@ var AnonymizationEngine = class {
|
|
|
286
245
|
)
|
|
287
246
|
}))
|
|
288
247
|
],
|
|
289
|
-
preservedSemantics:
|
|
248
|
+
preservedSemantics: [...this.#policy.preservedSemantics ?? []]
|
|
290
249
|
};
|
|
291
250
|
}
|
|
292
251
|
};
|
|
293
252
|
|
|
294
253
|
// privacy/index.ts
|
|
295
254
|
var PLATFORM_PRIVACY_POLICY_VERSION = "fabric-platform-privacy-v1";
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
return defaultEngine.anonymizeJsonValue(value, context, dataClass);
|
|
255
|
+
function anonymizeJsonValue(value, context, dataClass, policy) {
|
|
256
|
+
return new AnonymizationEngine(policy).anonymizeJsonValue(value, context, dataClass);
|
|
299
257
|
}
|
|
300
|
-
function anonymizeAssetEventPayload(event, context) {
|
|
301
|
-
return
|
|
258
|
+
function anonymizeAssetEventPayload(event, context, policy) {
|
|
259
|
+
return new AnonymizationEngine(policy).anonymizeAssetEventPayload(event, context);
|
|
302
260
|
}
|
|
303
|
-
function anonymizeEvidencePacket(packet, context) {
|
|
304
|
-
return
|
|
261
|
+
function anonymizeEvidencePacket(packet, context, policy) {
|
|
262
|
+
return new AnonymizationEngine(policy).anonymizeEvidencePacket(packet, context);
|
|
305
263
|
}
|
|
306
|
-
function buildAnonymizationLifecycleEvidence(input) {
|
|
307
|
-
return
|
|
264
|
+
function buildAnonymizationLifecycleEvidence(input, policy) {
|
|
265
|
+
return new AnonymizationEngine(policy).buildAnonymizationLifecycleEvidence(input);
|
|
308
266
|
}
|
|
309
267
|
|
|
310
268
|
exports.ANONYMIZATION_POLICY_VERSION = ANONYMIZATION_POLICY_VERSION;
|
|
@@ -316,5 +274,5 @@ exports.anonymizeEvidencePacket = anonymizeEvidencePacket;
|
|
|
316
274
|
exports.anonymizeJsonValue = anonymizeJsonValue;
|
|
317
275
|
exports.buildAnonymizationLifecycleEvidence = buildAnonymizationLifecycleEvidence;
|
|
318
276
|
exports.stableChecksum = stableChecksum;
|
|
319
|
-
//# sourceMappingURL=chunk-
|
|
320
|
-
//# sourceMappingURL=chunk-
|
|
277
|
+
//# sourceMappingURL=chunk-X3GHYMAJ.cjs.map
|
|
278
|
+
//# sourceMappingURL=chunk-X3GHYMAJ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../privacy/engine.ts","../privacy/index.ts"],"names":["createHash"],"mappings":";;;;;AAWO,IAAM,4BAAA,GAA+B;AAgE5C,SAAS,aAAa,GAAA,EAAqB;AAC1C,EAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,eAAA,EAAiB,EAAE,EAAE,WAAA,EAAY;AACrD;AAEO,SAAS,eAAe,KAAA,EAAwB;AACtD,EAAA,OAAOA,iBAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,IAAA,CAAK,UAAU,KAAK,CAAC,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AACvE;AAEA,SAAS,iBAAA,CACR,KAAA,EACA,OAAA,EACA,SAAA,EACS;AACT,EAAA,MAAM,KAAA,GAAQ,GAAG,OAAA,CAAQ,QAAQ,IAAI,OAAA,CAAQ,OAAA,IAAW,QAAQ,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAC7E,EAAA,OAAO,CAAA,IAAA,EAAOA,kBAAW,QAAQ,CAAA,CAC/B,OAAO,CAAA,EAAG,OAAA,CAAQ,aAAA,IAAiB,4BAA4B,CAAA,CAAA,EAAI,KAAK,IAAI,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA,CAC3F,MAAA,CAAO,KAAK,CAAA,CACZ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AACf;AAEA,SAAS,UAAU,KAAA,EAA+B;AACjD,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AAC1C,IAAA,OAAO,IAAA;AAAA,EACR;AAEA,EAAA,MAAM,WAAA,GAAc,OAAO,KAAK,CAAA;AAChC,EAAA,IAAI,WAAA,CAAY,UAAU,CAAA,EAAG;AAC5B,IAAA,OAAO,MAAA;AAAA,EACR;AAEA,EAAA,OAAO,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,IAAI,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA,EAAG,WAAA,CAAY,KAAA,CAAM,EAAE,CAAC,CAAA,CAAA;AAClF;AAEA,SAAS,gBAAgB,KAAA,EAAyB;AACjD,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC9B,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,GAAI,CAAA,GAAI,GAAA;AAAA,EACnC;AAEA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,oBAAA,CAAqB,IAAA,CAAK,KAAK,CAAA,EAAG;AAClE,IAAA,OAAO,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,EAAA,CAAA;AAAA,EAC5B;AAEA,EAAA,OAAO,IAAA;AACR;AAEA,SAAS,WAAA,CACR,KAAA,EACA,MAAA,EACA,OAAA,EACA,IAAA,EACU;AACV,EAAA,QAAQ,MAAA;AAAQ,IACf,KAAK,MAAA;AACJ,MAAA,OAAO,MAAA;AAAA,IACR,KAAK,SAAA;AACJ,MAAA,OAAO,IAAA;AAAA,IACR,KAAK,MAAA;AACJ,MAAA,OAAO,UAAU,KAAK,CAAA;AAAA,IACvB,KAAK,MAAA;AACJ,MAAA,OAAO,CAAA,OAAA,EAAU,cAAA,CAAe,KAAK,CAAC,CAAA,CAAA;AAAA,IACvC,KAAK,UAAA;AACJ,MAAA,OAAO,iBAAA,CAAkB,KAAA,EAAO,OAAA,EAAS,IAAI,CAAA;AAAA,IAC9C,KAAK,YAAA;AACJ,MAAA,OAAO,gBAAgB,KAAK,CAAA;AAAA;AAE/B;AAEA,SAAS,aAAA,CAAc,QAAA,EAA+C,IAAA,EAAc,GAAA,EAAoD;AACvI,EAAA,MAAM,cAAA,GAAiB,aAAa,IAAI,CAAA;AACxC,EAAA,MAAM,aAAA,GAAgB,GAAA,GAAM,YAAA,CAAa,GAAG,CAAA,GAAI,MAAA;AAEhD,EAAA,OAAO,QAAA,CAAS,IAAA,CAAK,CAAC,MAAA,KAAW;AAChC,IAAA,MAAM,eAAA,GAAkB,YAAA,CAAa,MAAA,CAAO,KAAK,CAAA;AACjD,IAAA,IAAI,MAAA,CAAO,UAAU,KAAA,EAAO;AAC3B,MAAA,OAAO,eAAA,KAAoB,aAAA;AAAA,IAC5B;AAEA,IAAA,OAAO,eAAA,KAAoB,cAAA;AAAA,EAC5B,CAAC,CAAA;AACF;AAEA,SAAS,cAAc,KAAA,EAAqC;AAC3D,EAAA,OACC,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,EAAE,KAAA,YAAiB,IAAA,CAAA;AAE7F;AAEA,SAAS,mBACR,KAAA,EACA,OAAA,EACA,WACA,IAAA,EACA,cAAA,EACA,UACA,GAAA,EACU;AACV,EAAA,MAAM,WAAA,GAAc,aAAA,CAAc,QAAA,EAAU,IAAA,EAAM,GAAG,CAAA;AACrD,EAAA,IAAI,WAAA,IAAe,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzD,IAAA,cAAA,CAAe,IAAA,CAAK;AAAA,MACnB,SAAA,EAAW,IAAA;AAAA,MACX,QAAQ,WAAA,CAAY,MAAA;AAAA,MACpB,aAAA,EAAe,QAAQ,aAAA,IAAiB,4BAAA;AAAA,MACxC,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,aAAa,OAAA,CAAQ,UAAA,oBAAc,IAAI,IAAA,IAAQ,WAAA,EAAY;AAAA,MAC3D,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,SAAA;AAAA,MACA,cAAA,EAAgB,eAAe,KAAK;AAAA,KACpC,CAAA;AAED,IAAA,OAAO,WAAA,CAAY,KAAA,EAAO,WAAA,CAAY,MAAA,EAAQ,SAAS,IAAI,CAAA;AAAA,EAC5D;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,IAAA,OAAO,KAAA,CAAM,GAAA;AAAA,MAAI,CAAC,IAAA,EAAM,KAAA,KACvB,kBAAA,CAAmB,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAA,EAAK,gBAAgB,QAAQ;AAAA,KAC3F;AAAA,EACD;AAEA,EAAA,IAAI,CAAC,aAAA,CAAc,KAAK,CAAA,EAAG;AAC1B,IAAA,OAAO,KAAA;AAAA,EACR;AAEA,EAAA,MAAM,SAAqB,EAAC;AAC5B,EAAA,KAAA,MAAW,CAAC,QAAA,EAAU,UAAU,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC3D,IAAA,IAAI,aAAa,UAAA,EAAY;AAC5B,MAAA,MAAA,CAAO,QAAQ,CAAA,GAAI,UAAA;AACnB,MAAA;AAAA,IACD;AAEA,IAAA,MAAM,UAAA,GAAa,kBAAA;AAAA,MAClB,UAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA;AAAA,MACnB,cAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACD;AAEA,IAAA,IAAI,eAAe,MAAA,EAAW;AAC7B,MAAA,MAAA,CAAO,QAAQ,CAAA,GAAI,UAAA;AAAA,IACpB;AAAA,EACD;AAEA,EAAA,OAAO,MAAA;AACR;AAEA,SAAS,aAAA,CACR,OAAA,EACA,SAAA,EACA,cAAA,EACA,kBAAA,EACwB;AACxB,EAAA,OAAO;AAAA,IACN,cAAA,EAAgB,YAAA;AAAA,IAChB,aAAA,EAAe,QAAQ,aAAA,IAAiB,4BAAA;AAAA,IACxC,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,aAAa,OAAA,CAAQ,UAAA,oBAAc,IAAI,IAAA,IAAQ,WAAA,EAAY;AAAA,IAC3D,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,SAAA;AAAA,IACA,cAAA;AAAA,IACA,kBAAA,EAAoB,CAAC,GAAG,kBAAkB;AAAA,GAC3C;AACD;AAEO,IAAM,gBAAN,MAAoB;AAAA,EAC1B,WAAA,CAAY,KAAA,EAAgB,MAAA,EAAyB,OAAA,EAA+B,IAAA,EAAuB;AAC1G,IAAA,OAAO,WAAA,CAAY,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,IAAI,CAAA;AAAA,EAChD;AAAA,EAEA,KAAK,KAAA,EAA+B;AACnC,IAAA,OAAO,UAAU,KAAK,CAAA;AAAA,EACvB;AAAA,EAEA,KAAK,KAAA,EAAwB;AAC5B,IAAA,OAAO,CAAA,OAAA,EAAU,cAAA,CAAe,KAAK,CAAC,CAAA,CAAA;AAAA,EACvC;AAAA,EAEA,QAAA,CAAS,KAAA,EAAgB,OAAA,EAA+B,IAAA,EAAsB;AAC7E,IAAA,OAAO,iBAAA,CAAkB,KAAA,EAAO,OAAA,EAAS,IAAI,CAAA;AAAA,EAC9C;AAAA,EAEA,WAAW,KAAA,EAAyB;AACnC,IAAA,OAAO,gBAAgB,KAAK,CAAA;AAAA,EAC7B;AACD;AAEO,IAAM,sBAAN,MAA0B;AAAA,EACvB,OAAA;AAAA,EAET,YAAY,MAAA,EAA6B;AACxC,IAAA,IAAA,CAAK,OAAA,GAAU;AAAA,MACd,MAAA,EAAQ,OAAO,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAW,EAAE,GAAG,KAAA,EAAM,CAAE,CAAA;AAAA,MACnD,oBAAoB,CAAC,GAAI,MAAA,CAAO,kBAAA,IAAsB,EAAG;AAAA,KAC1D;AAAA,EACD;AAAA,EAEA,kBAAA,CACC,KAAA,EACA,OAAA,EACA,SAAA,EAC8B;AAC9B,IAAA,OAAO,IAAA,CAAK,wBAAA,CAAyB,KAAA,EAAO,OAAA,EAAS,WAAW,GAAG,CAAA;AAAA,EACpE;AAAA,EAEA,wBAAA,CACC,KAAA,EACA,OAAA,EACA,SAAA,EACA,QAAA,EAC8B;AAC9B,IAAA,MAAM,iBAA+C,EAAC;AACtD,IAAA,MAAM,eAAA,GAAkB,kBAAA;AAAA,MACvB,KAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,cAAA;AAAA,MACA,KAAK,OAAA,CAAQ;AAAA,KACd;AAEA,IAAA,OAAO;AAAA,MACN,KAAA,EAAO,eAAA;AAAA,MACP,QAAA,EAAU,cAAc,OAAA,EAAS,SAAA,EAAW,gBAAgB,IAAA,CAAK,OAAA,CAAQ,kBAAA,IAAsB,EAAE;AAAA,KAClG;AAAA,EACD;AAAA,EAEA,0BAAA,CACC,OACA,OAAA,EAC+B;AAC/B,IAAA,MAAM,SAAS,IAAA,CAAK,kBAAA,CAAmB,KAAA,CAAM,OAAA,EAAS,SAAS,aAAa,CAAA;AAC5E,IAAA,MAAM,UAAU,aAAA,CAAc,MAAA,CAAO,KAAK,CAAA,GACvC,EAAE,GAAG,MAAA,CAAO,KAAA,EAAO,UAAU,MAAA,CAAO,QAAA,KACpC,EAAE,KAAA,EAAO,OAAO,KAAA,EAAO,QAAA,EAAU,OAAO,QAAA,EAAS;AAEpD,IAAA,OAAO,EAAE,KAAA,EAAO,OAAA,EAAS,QAAA,EAAU,OAAO,QAAA,EAAS;AAAA,EACpD;AAAA,EAEA,uBAAA,CACC,QACA,OAAA,EAC6F;AAC7F,IAAA,MAAM,SAAS,IAAA,CAAK,kBAAA,CAAmB,MAAA,CAAO,MAAA,EAAQ,SAAS,iBAAiB,CAAA;AAChF,IAAA,MAAM,iBAAA,GAAoB;AAAA,MACzB,GAAI,aAAA,CAAc,MAAA,CAAO,iBAAiB,CAAA,GAAI,MAAA,CAAO,oBAAoB,EAAC;AAAA,MAC1E,wBAAwB,MAAA,CAAO;AAAA,KAChC;AACA,IAAA,MAAM,mBAAmB,aAAA,CAAc,MAAA,CAAO,KAAK,CAAA,GAChD,EAAE,GAAG,MAAA,CAAO,KAAA,EAAO,UAAU,MAAA,CAAO,QAAA,KACpC,EAAE,KAAA,EAAO,OAAO,KAAA,EAAO,QAAA,EAAU,OAAO,QAAA,EAAS;AAEpD,IAAA,OAAO;AAAA,MACN,KAAA,EAAO;AAAA,QACN,MAAA,EAAQ,gBAAA;AAAA,QACR,iBAAA;AAAA,QACA,UAAU,cAAA,CAAe,EAAE,MAAA,EAAQ,gBAAA,EAAkB,mBAAmB;AAAA,OACzE;AAAA,MACA,UAAU,MAAA,CAAO;AAAA,KAClB;AAAA,EACD;AAAA,EAEA,oCAAoC,KAAA,EASD;AAClC,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,WAAA,IAAe,EAAC;AAC1C,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,UAAA,IAAc,EAAC;AACxC,IAAA,MAAM,eAAA,GAAkB,KAAA,CAAM,eAAA,IAAmB,EAAC;AAClD,IAAA,MAAM,cAAA,GAAiB;AAAA,MACtB,GAAG,WAAA,CAAY,OAAA,CAAQ,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,cAAc,CAAA;AAAA,MAC7D,GAAG,UAAA,CAAW,OAAA,CAAQ,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,cAAc,CAAA;AAAA,MAC5D,GAAG,eAAA,CAAgB,OAAA,CAAQ,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,cAAc;AAAA,KAClE;AAEA,IAAA,OAAO;AAAA,MACN,SAAA,EAAW,sBAAA;AAAA,MACX,aAAA,EAAe,KAAA,CAAM,OAAA,CAAQ,aAAA,IAAiB,4BAAA;AAAA,MAC9C,KAAA,EAAO,MAAM,OAAA,CAAQ,KAAA;AAAA,MACrB,MAAA,EAAQ,MAAM,OAAA,CAAQ,MAAA;AAAA,MACtB,YAAY,KAAA,CAAM,OAAA,CAAQ,8BAAc,IAAI,IAAA,IAAQ,WAAA,EAAY;AAAA,MAChE,QAAA,EAAU,MAAM,OAAA,CAAQ,QAAA;AAAA,MACxB,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,OAAA,IAAW,IAAA;AAAA,MAClC,MAAA,EAAQ;AAAA,QACP,aAAa,WAAA,CAAY,MAAA;AAAA,QACzB,YAAY,UAAA,CAAW,MAAA;AAAA,QACvB,iBAAiB,eAAA,CAAgB,MAAA;AAAA,QACjC,gBAAgB,cAAA,CAAe;AAAA,OAChC;AAAA,MACA,OAAA,EAAS;AAAA,QACR,GAAG,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,UAC7B,WAAA,EAAa,aAAA;AAAA,UACb,QAAA,EAAU,KAAK,KAAA,CAAM,EAAA;AAAA,UACrB,WAAA,EAAa,KAAK,KAAA,CAAM,WAAA;AAAA,UACxB,SAAA,EAAW,KAAK,KAAA,CAAM,SAAA;AAAA,UACtB,aAAA,EAAe,IAAA,CAAK,QAAA,CAAS,cAAA,CAAe,GAAA;AAAA,YAC3C,CAAC,EAAE,SAAA,EAAW,MAAA,EAAQ,gBAAe,MAAO;AAAA,cAC3C,SAAA;AAAA,cACA,MAAA;AAAA,cACA;AAAA,aACD;AAAA;AACD,SACD,CAAE,CAAA;AAAA,QACF,GAAG,UAAA,CAAW,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,UAC5B,WAAA,EAAa,YAAA;AAAA,UACb,QAAA,EAAU,KAAK,MAAA,CAAO,EAAA;AAAA,UACtB,aAAa,IAAA,CAAK,SAAA;AAAA,UAClB,SAAA,EAAW,KAAK,MAAA,CAAO,EAAA;AAAA,UACvB,aAAA,EAAe,IAAA,CAAK,QAAA,CAAS,cAAA,CAAe,GAAA;AAAA,YAC3C,CAAC,EAAE,SAAA,EAAW,MAAA,EAAQ,gBAAe,MAAO;AAAA,cAC3C,SAAA;AAAA,cACA,MAAA;AAAA,cACA;AAAA,aACD;AAAA;AACD,SACD,CAAE,CAAA;AAAA,QACF,GAAG,eAAA,CAAgB,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,UACjC,WAAA,EAAa,iBAAA;AAAA,UACb,QAAA,EAAU,KAAK,MAAA,CAAO,EAAA;AAAA,UACtB,aAAA,EAAe,IAAA,CAAK,QAAA,CAAS,cAAA,CAAe,GAAA;AAAA,YAC3C,CAAC,EAAE,SAAA,EAAW,MAAA,EAAQ,gBAAe,MAAO;AAAA,cAC3C,SAAA;AAAA,cACA,MAAA;AAAA,cACA;AAAA,aACD;AAAA;AACD,SACD,CAAE;AAAA,OACH;AAAA,MACA,oBAAoB,CAAC,GAAI,KAAK,OAAA,CAAQ,kBAAA,IAAsB,EAAG;AAAA,KAChE;AAAA,EACD;AACD;;;AC5ZO,IAAM,+BAAA,GAAkC;AAuBxC,SAAS,kBAAA,CACf,KAAA,EACA,OAAA,EACA,SAAA,EACA,MAAA,EACgD;AAChD,EAAA,OAAO,IAAI,mBAAA,CAAoB,MAAM,EAAE,kBAAA,CAAmB,KAAA,EAAO,SAAS,SAAS,CAAA;AACpF;AAEO,SAAS,0BAAA,CACf,KAAA,EACA,OAAA,EACA,MAAA,EACiD;AACjD,EAAA,OAAO,IAAI,mBAAA,CAAoB,MAAM,CAAA,CAAE,0BAAA,CAA2B,OAAO,OAAO,CAAA;AACjF;AAEO,SAAS,uBAAA,CACf,MAAA,EACA,OAAA,EACA,MAAA,EAC+G;AAC/G,EAAA,OAAO,IAAI,mBAAA,CAAoB,MAAM,CAAA,CAAE,uBAAA,CAAwB,QAAQ,OAAO,CAAA;AAC/E;AAEO,SAAS,mCAAA,CAAoC,OASjD,MAAA,EAAgF;AAClF,EAAA,OAAO,IAAI,mBAAA,CAAoB,MAAM,CAAA,CAAE,oCAAoC,KAAK,CAAA;AACjF","file":"chunk-X3GHYMAJ.cjs","sourcesContent":["import { createHash } from \"node:crypto\";\n\nimport type {\n\tAnonymizationContext,\n\tAnonymizationFieldMetadata,\n\tAnonymizationMetadata,\n\tAnonymizationResult,\n\tPlatformDataClass,\n\tRedactionMethod,\n} from \"./index\";\n\nexport const ANONYMIZATION_POLICY_VERSION = \"adr-026-platform-anonymization-v1\";\n\ntype JsonObject = Record<string, unknown>;\n\nexport interface AnonymizationFieldPolicy {\n\tmethod: RedactionMethod;\n\tmatch: \"key\" | \"path\";\n\tvalue: string;\n}\n\nexport interface AnonymizationPolicy {\n\tfields: readonly AnonymizationFieldPolicy[];\n\tpreservedSemantics?: readonly string[];\n}\n\nexport interface AssetEventLike {\n\tid: string;\n\ttenantId: string;\n\tspaceId: string;\n\teventType: string;\n\tsubjectType: string;\n\tsubjectId: string;\n\tactionInvocationId: string;\n\tpayload: unknown;\n\tsequence: number;\n\toccurredAt: Date;\n\trecordedAt: Date;\n\tcorrelationId: string;\n\tcausationId?: string | null;\n}\n\nexport interface EvidencePacketLike {\n\tid: string;\n\tpacket: unknown;\n\tredactionMetadata: unknown;\n\tchecksum: string;\n}\n\nexport interface AnonymizationLifecycleEvidence {\n\teventType: \"AnonymizationApplied\";\n\tpolicyVersion: string;\n\tjobId: string;\n\treason: string;\n\tappliedAt: string;\n\ttenantId: string;\n\tspaceId: string | null;\n\tcounts: {\n\t\tassetEvents: number;\n\t\treadModels: number;\n\t\tevidencePackets: number;\n\t\tredactedFields: number;\n\t};\n\trecords: Array<{\n\t\trecordClass: PlatformDataClass;\n\t\trecordId: string;\n\t\tsubjectType?: string;\n\t\tsubjectId?: string;\n\t\tfieldManifest: Array<\n\t\t\tPick<AnonymizationFieldMetadata, \"fieldPath\" | \"method\" | \"beforeChecksum\">\n\t\t>;\n\t}>;\n\tpreservedSemantics: string[];\n}\n\nfunction normalizeKey(key: string): string {\n\treturn key.replace(/[^a-zA-Z0-9]/g, \"\").toLowerCase();\n}\n\nexport function stableChecksum(value: unknown): string {\n\treturn createHash(\"sha256\").update(JSON.stringify(value)).digest(\"hex\");\n}\n\nfunction stableScopedToken(\n\tvalue: unknown,\n\tcontext: AnonymizationContext,\n\tfieldPath: string,\n): string {\n\tconst scope = `${context.tenantId}:${context.spaceId ?? \"global\"}:${fieldPath}`;\n\treturn `tok_${createHash(\"sha256\")\n\t\t.update(`${context.policyVersion ?? ANONYMIZATION_POLICY_VERSION}:${scope}:${String(value)}`)\n\t\t.digest(\"hex\")\n\t\t.slice(0, 24)}`;\n}\n\nfunction maskValue(value: unknown): string | null {\n\tif (value === null || value === undefined) {\n\t\treturn null;\n\t}\n\n\tconst stringValue = String(value);\n\tif (stringValue.length <= 4) {\n\t\treturn \"****\";\n\t}\n\n\treturn `${\"*\".repeat(Math.max(stringValue.length - 4, 4))}${stringValue.slice(-4)}`;\n}\n\nfunction generalizeValue(value: unknown): unknown {\n\tif (typeof value === \"number\") {\n\t\treturn Math.round(value / 1000) * 1000;\n\t}\n\n\tif (typeof value === \"string\" && /^\\d{5}(?:-\\d{4})?$/.test(value)) {\n\t\treturn `${value.slice(0, 3)}**`;\n\t}\n\n\treturn null;\n}\n\nfunction applyMethod(\n\tvalue: unknown,\n\tmethod: RedactionMethod,\n\tcontext: AnonymizationContext,\n\tpath: string,\n): unknown {\n\tswitch (method) {\n\t\tcase \"drop\":\n\t\t\treturn undefined;\n\t\tcase \"nullify\":\n\t\t\treturn null;\n\t\tcase \"mask\":\n\t\t\treturn maskValue(value);\n\t\tcase \"hash\":\n\t\t\treturn `sha256_${stableChecksum(value)}`;\n\t\tcase \"tokenize\":\n\t\t\treturn stableScopedToken(value, context, path);\n\t\tcase \"generalize\":\n\t\t\treturn generalizeValue(value);\n\t}\n}\n\nfunction policyForPath(policies: readonly AnonymizationFieldPolicy[], path: string, key?: string): AnonymizationFieldPolicy | undefined {\n\tconst normalizedPath = normalizeKey(path);\n\tconst normalizedKey = key ? normalizeKey(key) : undefined;\n\n\treturn policies.find((policy) => {\n\t\tconst normalizedValue = normalizeKey(policy.value);\n\t\tif (policy.match === \"key\") {\n\t\t\treturn normalizedValue === normalizedKey;\n\t\t}\n\n\t\treturn normalizedValue === normalizedPath;\n\t});\n}\n\nfunction isPlainObject(value: unknown): value is JsonObject {\n\treturn (\n\t\tBoolean(value) && typeof value === \"object\" && !Array.isArray(value) && !(value instanceof Date)\n\t);\n}\n\nfunction anonymizeRecursive(\n\tvalue: unknown,\n\tcontext: AnonymizationContext,\n\tdataClass: PlatformDataClass,\n\tpath: string,\n\tredactedFields: AnonymizationFieldMetadata[],\n\tpolicies: readonly AnonymizationFieldPolicy[],\n\tkey?: string,\n): unknown {\n\tconst fieldPolicy = policyForPath(policies, path, key);\n\tif (fieldPolicy && value !== null && value !== undefined) {\n\t\tredactedFields.push({\n\t\t\tfieldPath: path,\n\t\t\tmethod: fieldPolicy.method,\n\t\t\tpolicyVersion: context.policyVersion ?? ANONYMIZATION_POLICY_VERSION,\n\t\t\tjobId: context.jobId,\n\t\t\tredactedAt: (context.redactedAt ?? new Date()).toISOString(),\n\t\t\treason: context.reason,\n\t\t\tdataClass,\n\t\t\tbeforeChecksum: stableChecksum(value),\n\t\t});\n\n\t\treturn applyMethod(value, fieldPolicy.method, context, path);\n\t}\n\n\tif (Array.isArray(value)) {\n\t\treturn value.map((item, index) =>\n\t\t\tanonymizeRecursive(item, context, dataClass, `${path}[${index}]`, redactedFields, policies),\n\t\t);\n\t}\n\n\tif (!isPlainObject(value)) {\n\t\treturn value;\n\t}\n\n\tconst result: JsonObject = {};\n\tfor (const [childKey, childValue] of Object.entries(value)) {\n\t\tif (childKey === \"_privacy\") {\n\t\t\tresult[childKey] = childValue;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst anonymized = anonymizeRecursive(\n\t\t\tchildValue,\n\t\t\tcontext,\n\t\t\tdataClass,\n\t\t\t`${path}.${childKey}`,\n\t\t\tredactedFields,\n\t\t\tpolicies,\n\t\t\tchildKey,\n\t\t);\n\n\t\tif (anonymized !== undefined) {\n\t\t\tresult[childKey] = anonymized;\n\t\t}\n\t}\n\n\treturn result;\n}\n\nfunction buildMetadata(\n\tcontext: AnonymizationContext,\n\tdataClass: PlatformDataClass,\n\tredactedFields: AnonymizationFieldMetadata[],\n\tpreservedSemantics: readonly string[],\n): AnonymizationMetadata {\n\treturn {\n\t\tredactionState: \"anonymized\",\n\t\tpolicyVersion: context.policyVersion ?? ANONYMIZATION_POLICY_VERSION,\n\t\tjobId: context.jobId,\n\t\tredactedAt: (context.redactedAt ?? new Date()).toISOString(),\n\t\treason: context.reason,\n\t\tdataClass,\n\t\tredactedFields,\n\t\tpreservedSemantics: [...preservedSemantics],\n\t};\n}\n\nexport class FieldRedactor {\n\tredactField(value: unknown, method: RedactionMethod, context: AnonymizationContext, path: string): unknown {\n\t\treturn applyMethod(value, method, context, path);\n\t}\n\n\tmask(value: unknown): string | null {\n\t\treturn maskValue(value);\n\t}\n\n\thash(value: unknown): string {\n\t\treturn `sha256_${stableChecksum(value)}`;\n\t}\n\n\ttokenize(value: unknown, context: AnonymizationContext, path: string): string {\n\t\treturn stableScopedToken(value, context, path);\n\t}\n\n\tgeneralize(value: unknown): unknown {\n\t\treturn generalizeValue(value);\n\t}\n}\n\nexport class AnonymizationEngine {\n\treadonly #policy: AnonymizationPolicy;\n\n\tconstructor(policy: AnonymizationPolicy) {\n\t\tthis.#policy = {\n\t\t\tfields: policy.fields.map((field) => ({ ...field })),\n\t\t\tpreservedSemantics: [...(policy.preservedSemantics ?? [])],\n\t\t};\n\t}\n\n\tanonymizeJsonValue<TValue>(\n\t\tvalue: TValue,\n\t\tcontext: AnonymizationContext,\n\t\tdataClass: PlatformDataClass,\n\t): AnonymizationResult<TValue> {\n\t\treturn this.anonymizeJsonValueAtPath(value, context, dataClass, \"$\");\n\t}\n\n\tanonymizeJsonValueAtPath<TValue>(\n\t\tvalue: TValue,\n\t\tcontext: AnonymizationContext,\n\t\tdataClass: PlatformDataClass,\n\t\tbasePath: string,\n\t): AnonymizationResult<TValue> {\n\t\tconst redactedFields: AnonymizationFieldMetadata[] = [];\n\t\tconst anonymizedValue = anonymizeRecursive(\n\t\t\tvalue,\n\t\t\tcontext,\n\t\t\tdataClass,\n\t\t\tbasePath,\n\t\t\tredactedFields,\n\t\t\tthis.#policy.fields,\n\t\t) as TValue;\n\n\t\treturn {\n\t\t\tvalue: anonymizedValue,\n\t\t\tmetadata: buildMetadata(context, dataClass, redactedFields, this.#policy.preservedSemantics ?? []),\n\t\t};\n\t}\n\n\tanonymizeAssetEventPayload(\n\t\tevent: AssetEventLike,\n\t\tcontext: AnonymizationContext,\n\t): AnonymizationResult<unknown> {\n\t\tconst result = this.anonymizeJsonValue(event.payload, context, \"asset_event\");\n\t\tconst payload = isPlainObject(result.value)\n\t\t\t? { ...result.value, _privacy: result.metadata }\n\t\t\t: { value: result.value, _privacy: result.metadata };\n\n\t\treturn { value: payload, metadata: result.metadata };\n\t}\n\n\tanonymizeEvidencePacket(\n\t\tpacket: EvidencePacketLike,\n\t\tcontext: AnonymizationContext,\n\t): AnonymizationResult<Pick<EvidencePacketLike, \"packet\" | \"redactionMetadata\" | \"checksum\">> {\n\t\tconst result = this.anonymizeJsonValue(packet.packet, context, \"evidence_packet\");\n\t\tconst redactionMetadata = {\n\t\t\t...(isPlainObject(packet.redactionMetadata) ? packet.redactionMetadata : {}),\n\t\t\tlifecycleAnonymization: result.metadata,\n\t\t};\n\t\tconst anonymizedPacket = isPlainObject(result.value)\n\t\t\t? { ...result.value, _privacy: result.metadata }\n\t\t\t: { value: result.value, _privacy: result.metadata };\n\n\t\treturn {\n\t\t\tvalue: {\n\t\t\t\tpacket: anonymizedPacket,\n\t\t\t\tredactionMetadata,\n\t\t\t\tchecksum: stableChecksum({ packet: anonymizedPacket, redactionMetadata }),\n\t\t\t},\n\t\t\tmetadata: result.metadata,\n\t\t};\n\t}\n\n\tbuildAnonymizationLifecycleEvidence(input: {\n\t\tcontext: AnonymizationContext;\n\t\tassetEvents?: Array<{ event: AssetEventLike; metadata: AnonymizationMetadata }>;\n\t\treadModels?: Array<{\n\t\t\tmodelKind: string;\n\t\t\trecord: JsonObject & { id: string };\n\t\t\tmetadata: AnonymizationMetadata;\n\t\t}>;\n\t\tevidencePackets?: Array<{ packet: EvidencePacketLike; metadata: AnonymizationMetadata }>;\n\t}): AnonymizationLifecycleEvidence {\n\t\tconst assetEvents = input.assetEvents ?? [];\n\t\tconst readModels = input.readModels ?? [];\n\t\tconst evidencePackets = input.evidencePackets ?? [];\n\t\tconst redactedFields = [\n\t\t\t...assetEvents.flatMap((item) => item.metadata.redactedFields),\n\t\t\t...readModels.flatMap((item) => item.metadata.redactedFields),\n\t\t\t...evidencePackets.flatMap((item) => item.metadata.redactedFields),\n\t\t];\n\n\t\treturn {\n\t\t\teventType: \"AnonymizationApplied\",\n\t\t\tpolicyVersion: input.context.policyVersion ?? ANONYMIZATION_POLICY_VERSION,\n\t\t\tjobId: input.context.jobId,\n\t\t\treason: input.context.reason,\n\t\t\tappliedAt: (input.context.redactedAt ?? new Date()).toISOString(),\n\t\t\ttenantId: input.context.tenantId,\n\t\t\tspaceId: input.context.spaceId ?? null,\n\t\t\tcounts: {\n\t\t\t\tassetEvents: assetEvents.length,\n\t\t\t\treadModels: readModels.length,\n\t\t\t\tevidencePackets: evidencePackets.length,\n\t\t\t\tredactedFields: redactedFields.length,\n\t\t\t},\n\t\t\trecords: [\n\t\t\t\t...assetEvents.map((item) => ({\n\t\t\t\t\trecordClass: \"asset_event\" as PlatformDataClass,\n\t\t\t\t\trecordId: item.event.id,\n\t\t\t\t\tsubjectType: item.event.subjectType,\n\t\t\t\t\tsubjectId: item.event.subjectId,\n\t\t\t\t\tfieldManifest: item.metadata.redactedFields.map(\n\t\t\t\t\t\t({ fieldPath, method, beforeChecksum }) => ({\n\t\t\t\t\t\t\tfieldPath,\n\t\t\t\t\t\t\tmethod,\n\t\t\t\t\t\t\tbeforeChecksum,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t})),\n\t\t\t\t...readModels.map((item) => ({\n\t\t\t\t\trecordClass: \"read_model\" as PlatformDataClass,\n\t\t\t\t\trecordId: item.record.id,\n\t\t\t\t\tsubjectType: item.modelKind,\n\t\t\t\t\tsubjectId: item.record.id,\n\t\t\t\t\tfieldManifest: item.metadata.redactedFields.map(\n\t\t\t\t\t\t({ fieldPath, method, beforeChecksum }) => ({\n\t\t\t\t\t\t\tfieldPath,\n\t\t\t\t\t\t\tmethod,\n\t\t\t\t\t\t\tbeforeChecksum,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t})),\n\t\t\t\t...evidencePackets.map((item) => ({\n\t\t\t\t\trecordClass: \"evidence_packet\" as PlatformDataClass,\n\t\t\t\t\trecordId: item.packet.id,\n\t\t\t\t\tfieldManifest: item.metadata.redactedFields.map(\n\t\t\t\t\t\t({ fieldPath, method, beforeChecksum }) => ({\n\t\t\t\t\t\t\tfieldPath,\n\t\t\t\t\t\t\tmethod,\n\t\t\t\t\t\t\tbeforeChecksum,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t})),\n\t\t\t],\n\t\t\tpreservedSemantics: [...(this.#policy.preservedSemantics ?? [])],\n\t\t};\n\t}\n}\n","export const PLATFORM_PRIVACY_POLICY_VERSION = \"fabric-platform-privacy-v1\";\n\nexport type RedactionMethod = \"nullify\" | \"mask\" | \"hash\" | \"tokenize\" | \"generalize\" | \"drop\";\n\nexport { ANONYMIZATION_POLICY_VERSION } from \"./engine\";\nexport {\n\tAnonymizationEngine,\n\tFieldRedactor,\n\tstableChecksum,\n\ttype AssetEventLike,\n\ttype EvidencePacketLike,\n\ttype AnonymizationLifecycleEvidence,\n\ttype AnonymizationFieldPolicy,\n\ttype AnonymizationPolicy,\n} from \"./engine\";\n\nimport {\n\tAnonymizationEngine,\n\ttype AssetEventLike,\n\ttype EvidencePacketLike,\n\ttype AnonymizationLifecycleEvidence,\n} from \"./engine\";\n\nexport function anonymizeJsonValue<TValue>(\n\tvalue: TValue,\n\tcontext: import(\"./index\").AnonymizationContext,\n\tdataClass: import(\"./index\").PlatformDataClass,\n\tpolicy: import(\"./engine\").AnonymizationPolicy,\n): import(\"./index\").AnonymizationResult<TValue> {\n\treturn new AnonymizationEngine(policy).anonymizeJsonValue(value, context, dataClass);\n}\n\nexport function anonymizeAssetEventPayload(\n\tevent: AssetEventLike,\n\tcontext: import(\"./index\").AnonymizationContext,\n\tpolicy: import(\"./engine\").AnonymizationPolicy,\n): import(\"./index\").AnonymizationResult<unknown> {\n\treturn new AnonymizationEngine(policy).anonymizeAssetEventPayload(event, context);\n}\n\nexport function anonymizeEvidencePacket(\n\tpacket: EvidencePacketLike,\n\tcontext: import(\"./index\").AnonymizationContext,\n\tpolicy: import(\"./engine\").AnonymizationPolicy,\n): import(\"./index\").AnonymizationResult<Pick<EvidencePacketLike, \"packet\" | \"redactionMetadata\" | \"checksum\">> {\n\treturn new AnonymizationEngine(policy).anonymizeEvidencePacket(packet, context);\n}\n\nexport function buildAnonymizationLifecycleEvidence(input: {\n\tcontext: import(\"./index\").AnonymizationContext;\n\tassetEvents?: Array<{ event: AssetEventLike; metadata: import(\"./index\").AnonymizationMetadata }>;\n\treadModels?: Array<{\n\t\tmodelKind: string;\n\t\trecord: Record<string, unknown> & { id: string };\n\t\tmetadata: import(\"./index\").AnonymizationMetadata;\n\t}>;\n\tevidencePackets?: Array<{ packet: EvidencePacketLike; metadata: import(\"./index\").AnonymizationMetadata }>;\n}, policy: import(\"./engine\").AnonymizationPolicy): AnonymizationLifecycleEvidence {\n\treturn new AnonymizationEngine(policy).buildAnonymizationLifecycleEvidence(input);\n}\n\nexport type PlatformDataClass =\n\t| \"asset_event\"\n\t| \"read_model\"\n\t| \"raw_payload\"\n\t| \"evidence_packet\"\n\t| \"action_evidence\"\n\t| \"access_event\";\n\nexport interface RedactionRule {\n\tfieldPath: string;\n\tmethod: RedactionMethod;\n\treason: string;\n\tdataClass?: PlatformDataClass;\n}\n\nexport interface DataClassificationRule {\n\tfieldPath: string;\n\tclassification: string;\n\tcontainsDirectIdentifier?: boolean;\n\tcontainsSensitiveData?: boolean;\n}\n\nexport interface AnonymizationContext {\n\ttenantId: string;\n\tspaceId?: string | null;\n\tjobId: string;\n\treason: string;\n\tredactedAt?: Date;\n\tpolicyVersion?: string;\n}\n\nexport interface AnonymizationFieldMetadata {\n\tfieldPath: string;\n\tmethod: RedactionMethod;\n\tpolicyVersion: string;\n\tjobId: string;\n\tredactedAt: string;\n\treason: string;\n\tdataClass: PlatformDataClass;\n\tbeforeChecksum: string;\n}\n\nexport interface AnonymizationMetadata {\n\tredactionState: \"anonymized\";\n\tpolicyVersion: string;\n\tjobId: string;\n\tredactedAt: string;\n\treason: string;\n\tdataClass: PlatformDataClass;\n\tredactedFields: AnonymizationFieldMetadata[];\n\tpreservedSemantics: string[];\n}\n\nexport interface AnonymizationResult<TValue> {\n\tvalue: TValue;\n\tmetadata: AnonymizationMetadata;\n}\n\nexport interface AnalyticsDataContractSource {\n\tname: string;\n\tprivacyClass:\n\t\t| \"raw\"\n\t\t| \"operational_pii\"\n\t\t| \"tenant_scoped_tokenized\"\n\t\t| \"anonymized\"\n\t\t| \"aggregated\"\n\t\t| \"differentially_minimized\";\n\tcontainsDirectIdentifiers?: boolean;\n\tcontainsGloballyStablePersonTokens?: boolean;\n\tanonymizationPolicyVersion?: string;\n\tminimumGroupSize?: number;\n}\n\nexport interface AnalyticsDataContract {\n\tcontractId: string;\n\tstatus: \"draft\" | \"accepted\" | \"deprecated\";\n\tcrossTenant: boolean;\n\tacceptedBy?: string;\n\tacceptedAt?: string;\n\tadrReference?: string;\n\tsources: AnalyticsDataContractSource[];\n}\n\nexport interface AnalyticsEligibilityDecision {\n\teligible: boolean;\n\tpolicyVersion: string;\n\treasons: string[];\n}\n\nexport interface RetentionRule {\n\tdataClass: PlatformDataClass;\n\tretainForDays: number;\n\tafterRetention: \"delete\" | \"anonymize\" | \"archive\";\n\tlegalHoldExempt?: boolean;\n}\n"]}
|
package/dist/events/index.cjs
CHANGED
|
@@ -1,36 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkLDPBQ72C_cjs = require('../chunk-LDPBQ72C.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
Object.defineProperty(exports, "
|
|
7
|
+
Object.defineProperty(exports, "createEventContractRegistry", {
|
|
8
8
|
enumerable: true,
|
|
9
|
-
get: function () { return
|
|
10
|
-
});
|
|
11
|
-
Object.defineProperty(exports, "getRegisteredEventTypes", {
|
|
12
|
-
enumerable: true,
|
|
13
|
-
get: function () { return chunk7RV5REPT_cjs.getRegisteredEventTypes; }
|
|
14
|
-
});
|
|
15
|
-
Object.defineProperty(exports, "getRegisteredSubjectTypes", {
|
|
16
|
-
enumerable: true,
|
|
17
|
-
get: function () { return chunk7RV5REPT_cjs.getRegisteredSubjectTypes; }
|
|
18
|
-
});
|
|
19
|
-
Object.defineProperty(exports, "isValidEventType", {
|
|
20
|
-
enumerable: true,
|
|
21
|
-
get: function () { return chunk7RV5REPT_cjs.isValidEventType; }
|
|
22
|
-
});
|
|
23
|
-
Object.defineProperty(exports, "isValidSubjectType", {
|
|
24
|
-
enumerable: true,
|
|
25
|
-
get: function () { return chunk7RV5REPT_cjs.isValidSubjectType; }
|
|
26
|
-
});
|
|
27
|
-
Object.defineProperty(exports, "registerEventType", {
|
|
28
|
-
enumerable: true,
|
|
29
|
-
get: function () { return chunk7RV5REPT_cjs.registerEventType; }
|
|
30
|
-
});
|
|
31
|
-
Object.defineProperty(exports, "registerSubjectType", {
|
|
32
|
-
enumerable: true,
|
|
33
|
-
get: function () { return chunk7RV5REPT_cjs.registerSubjectType; }
|
|
9
|
+
get: function () { return chunkLDPBQ72C_cjs.createEventContractRegistry; }
|
|
34
10
|
});
|
|
35
11
|
//# sourceMappingURL=index.cjs.map
|
|
36
12
|
//# sourceMappingURL=index.cjs.map
|
package/dist/events/index.d.cts
CHANGED
|
@@ -16,25 +16,32 @@ interface AssetEventEnvelope<TPayload = unknown> {
|
|
|
16
16
|
correlationId: string;
|
|
17
17
|
causationId?: string;
|
|
18
18
|
provenance?: EventProvenance;
|
|
19
|
+
/**
|
|
20
|
+
* Mirrors the emitting action's declared consistency. Present only when the
|
|
21
|
+
* action declares `provisional-until-reconciled`, so a consumer can tell a
|
|
22
|
+
* settled fact from one still awaiting reconciliation without a lookup.
|
|
23
|
+
* Additive and optional: tolerant consumers that ignore it stay correct.
|
|
24
|
+
*/
|
|
25
|
+
consistency?: "authoritative-now" | "provisional-until-reconciled";
|
|
19
26
|
}
|
|
20
27
|
interface EventProvenance {
|
|
21
|
-
source: "
|
|
28
|
+
source: "ui" | "api" | "agent" | "worker" | "system" | (string & {});
|
|
22
29
|
auditAttributes?: Record<string, string>;
|
|
23
30
|
}
|
|
24
31
|
type AssetEventSubjectType = string;
|
|
25
32
|
type AssetEventType = string;
|
|
26
33
|
type AssetEventActorType = "natural_person" | "agent" | "adapter" | "system" | "service_account" | "external_system" | "integration";
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
register(eventType: string): void;
|
|
35
|
-
has(eventType: string): boolean;
|
|
36
|
-
list(): string[];
|
|
34
|
+
interface EventContractRegistry {
|
|
35
|
+
registerEventType(eventType: string): void;
|
|
36
|
+
registerSubjectType(subjectType: string): void;
|
|
37
|
+
hasEventType(eventType: string): boolean;
|
|
38
|
+
hasSubjectType(subjectType: string): boolean;
|
|
39
|
+
eventTypes(): string[];
|
|
40
|
+
subjectTypes(): string[];
|
|
37
41
|
}
|
|
38
|
-
declare function
|
|
42
|
+
declare function createEventContractRegistry(input?: {
|
|
43
|
+
eventTypes?: readonly string[];
|
|
44
|
+
subjectTypes?: readonly string[];
|
|
45
|
+
}): EventContractRegistry;
|
|
39
46
|
|
|
40
|
-
export { type AssetEventActorType, type AssetEventEnvelope, type AssetEventSubjectType, type AssetEventType, type
|
|
47
|
+
export { type AssetEventActorType, type AssetEventEnvelope, type AssetEventSubjectType, type AssetEventType, type EventContractRegistry, type EventProvenance, createEventContractRegistry };
|
package/dist/events/index.d.ts
CHANGED
|
@@ -16,25 +16,32 @@ interface AssetEventEnvelope<TPayload = unknown> {
|
|
|
16
16
|
correlationId: string;
|
|
17
17
|
causationId?: string;
|
|
18
18
|
provenance?: EventProvenance;
|
|
19
|
+
/**
|
|
20
|
+
* Mirrors the emitting action's declared consistency. Present only when the
|
|
21
|
+
* action declares `provisional-until-reconciled`, so a consumer can tell a
|
|
22
|
+
* settled fact from one still awaiting reconciliation without a lookup.
|
|
23
|
+
* Additive and optional: tolerant consumers that ignore it stay correct.
|
|
24
|
+
*/
|
|
25
|
+
consistency?: "authoritative-now" | "provisional-until-reconciled";
|
|
19
26
|
}
|
|
20
27
|
interface EventProvenance {
|
|
21
|
-
source: "
|
|
28
|
+
source: "ui" | "api" | "agent" | "worker" | "system" | (string & {});
|
|
22
29
|
auditAttributes?: Record<string, string>;
|
|
23
30
|
}
|
|
24
31
|
type AssetEventSubjectType = string;
|
|
25
32
|
type AssetEventType = string;
|
|
26
33
|
type AssetEventActorType = "natural_person" | "agent" | "adapter" | "system" | "service_account" | "external_system" | "integration";
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
register(eventType: string): void;
|
|
35
|
-
has(eventType: string): boolean;
|
|
36
|
-
list(): string[];
|
|
34
|
+
interface EventContractRegistry {
|
|
35
|
+
registerEventType(eventType: string): void;
|
|
36
|
+
registerSubjectType(subjectType: string): void;
|
|
37
|
+
hasEventType(eventType: string): boolean;
|
|
38
|
+
hasSubjectType(subjectType: string): boolean;
|
|
39
|
+
eventTypes(): string[];
|
|
40
|
+
subjectTypes(): string[];
|
|
37
41
|
}
|
|
38
|
-
declare function
|
|
42
|
+
declare function createEventContractRegistry(input?: {
|
|
43
|
+
eventTypes?: readonly string[];
|
|
44
|
+
subjectTypes?: readonly string[];
|
|
45
|
+
}): EventContractRegistry;
|
|
39
46
|
|
|
40
|
-
export { type AssetEventActorType, type AssetEventEnvelope, type AssetEventSubjectType, type AssetEventType, type
|
|
47
|
+
export { type AssetEventActorType, type AssetEventEnvelope, type AssetEventSubjectType, type AssetEventType, type EventContractRegistry, type EventProvenance, createEventContractRegistry };
|
package/dist/events/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { createEventContractRegistry } from '../chunk-NHGBTPPE.js';
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|