@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.
Files changed (110) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +7 -8
  3. package/dist/actions/index.cjs +7 -27
  4. package/dist/actions/index.d.cts +9 -7
  5. package/dist/actions/index.d.ts +9 -7
  6. package/dist/actions/index.js +1 -1
  7. package/dist/chunk-4QOA3VU5.js +47 -0
  8. package/dist/chunk-4QOA3VU5.js.map +1 -0
  9. package/dist/{chunk-35SDMFCR.js → chunk-53YJK3LK.js} +93 -99
  10. package/dist/chunk-53YJK3LK.js.map +1 -0
  11. package/dist/{chunk-LAZL2GDT.cjs → chunk-6T6F3TNQ.cjs} +99 -104
  12. package/dist/chunk-6T6F3TNQ.cjs.map +1 -0
  13. package/dist/{chunk-ZZGSS65W.cjs → chunk-A2VTSATF.cjs} +6 -6
  14. package/dist/{chunk-ZZGSS65W.cjs.map → chunk-A2VTSATF.cjs.map} +1 -1
  15. package/dist/{chunk-X7WC4AYC.js → chunk-ATWWZTRC.js} +32 -74
  16. package/dist/chunk-ATWWZTRC.js.map +1 -0
  17. package/dist/chunk-BFQNKQJE.cjs +53 -0
  18. package/dist/{chunk-4RMKUYRX.js.map → chunk-BFQNKQJE.cjs.map} +1 -1
  19. package/dist/{chunk-OC4ZFJKD.cjs → chunk-CBY6GRJP.cjs} +16 -17
  20. package/dist/chunk-CBY6GRJP.cjs.map +1 -0
  21. package/dist/{chunk-HL77HWWP.js → chunk-ETONSTUW.js} +3 -3
  22. package/dist/{chunk-HL77HWWP.js.map → chunk-ETONSTUW.js.map} +1 -1
  23. package/dist/{chunk-FSUYD4F4.js → chunk-J5LS5BSI.js} +19 -17
  24. package/dist/chunk-J5LS5BSI.js.map +1 -0
  25. package/dist/{chunk-6ER62UUN.js → chunk-JFVEPAED.js} +31 -40
  26. package/dist/chunk-JFVEPAED.js.map +1 -0
  27. package/dist/chunk-LDPBQ72C.cjs +40 -0
  28. package/dist/chunk-LDPBQ72C.cjs.map +1 -0
  29. package/dist/{chunk-7SHNYYGI.cjs → chunk-M5FGWXT3.cjs} +19 -20
  30. package/dist/chunk-M5FGWXT3.cjs.map +1 -0
  31. package/dist/{chunk-4MMMXV4Q.js → chunk-NETLRKDS.js} +16 -15
  32. package/dist/chunk-NETLRKDS.js.map +1 -0
  33. package/dist/chunk-NHGBTPPE.js +38 -0
  34. package/dist/chunk-NHGBTPPE.js.map +1 -0
  35. package/dist/chunk-OWSSGFNY.js +45 -0
  36. package/dist/chunk-OWSSGFNY.js.map +1 -0
  37. package/dist/{chunk-NJL3US7H.cjs → chunk-VZ6C4LXC.cjs} +31 -43
  38. package/dist/chunk-VZ6C4LXC.cjs.map +1 -0
  39. package/dist/chunk-WAI4UNWQ.cjs +48 -0
  40. package/dist/chunk-WAI4UNWQ.cjs.map +1 -0
  41. package/dist/{chunk-YQEXO3IQ.cjs → chunk-X3GHYMAJ.cjs} +32 -74
  42. package/dist/chunk-X3GHYMAJ.cjs.map +1 -0
  43. package/dist/events/index.cjs +3 -27
  44. package/dist/events/index.d.cts +20 -13
  45. package/dist/events/index.d.ts +20 -13
  46. package/dist/events/index.js +1 -1
  47. package/dist/index.cjs +88 -193
  48. package/dist/index.d.cts +8 -9
  49. package/dist/index.d.ts +8 -9
  50. package/dist/index.js +10 -11
  51. package/dist/manifest/index.cjs +11 -15
  52. package/dist/manifest/index.d.cts +0 -1
  53. package/dist/manifest/index.d.ts +0 -1
  54. package/dist/manifest/index.js +5 -9
  55. package/dist/modules/index.cjs +15 -15
  56. package/dist/modules/index.d.cts +46 -23
  57. package/dist/modules/index.d.ts +46 -23
  58. package/dist/modules/index.js +4 -8
  59. package/dist/objects/index.cjs +5 -13
  60. package/dist/objects/index.d.cts +7 -4
  61. package/dist/objects/index.d.ts +7 -4
  62. package/dist/objects/index.js +1 -1
  63. package/dist/policies/index.cjs +12 -24
  64. package/dist/policies/index.d.cts +10 -5
  65. package/dist/policies/index.d.ts +10 -5
  66. package/dist/policies/index.js +1 -1
  67. package/dist/privacy/index.cjs +10 -10
  68. package/dist/privacy/index.d.cts +16 -5
  69. package/dist/privacy/index.d.ts +16 -5
  70. package/dist/privacy/index.js +1 -1
  71. package/dist/projections/index.cjs +6 -18
  72. package/dist/projections/index.d.cts +8 -5
  73. package/dist/projections/index.d.ts +8 -5
  74. package/dist/projections/index.js +1 -1
  75. package/dist/state-machines/index.cjs +5 -21
  76. package/dist/state-machines/index.d.cts +17 -31
  77. package/dist/state-machines/index.d.ts +17 -31
  78. package/dist/state-machines/index.js +1 -1
  79. package/package.json +1 -11
  80. package/dist/chunk-35SDMFCR.js.map +0 -1
  81. package/dist/chunk-3O4GMCCE.js +0 -55
  82. package/dist/chunk-3O4GMCCE.js.map +0 -1
  83. package/dist/chunk-4MMMXV4Q.js.map +0 -1
  84. package/dist/chunk-4RMKUYRX.js +0 -59
  85. package/dist/chunk-6ER62UUN.js.map +0 -1
  86. package/dist/chunk-7RV5REPT.cjs +0 -63
  87. package/dist/chunk-7RV5REPT.cjs.map +0 -1
  88. package/dist/chunk-7SHNYYGI.cjs.map +0 -1
  89. package/dist/chunk-EO4VSB2O.cjs +0 -99
  90. package/dist/chunk-EO4VSB2O.cjs.map +0 -1
  91. package/dist/chunk-FSUYD4F4.js.map +0 -1
  92. package/dist/chunk-JOATYJXQ.cjs +0 -70
  93. package/dist/chunk-JOATYJXQ.cjs.map +0 -1
  94. package/dist/chunk-LAZL2GDT.cjs.map +0 -1
  95. package/dist/chunk-NJL3US7H.cjs.map +0 -1
  96. package/dist/chunk-O5WVBQ7P.js +0 -89
  97. package/dist/chunk-O5WVBQ7P.js.map +0 -1
  98. package/dist/chunk-OC4ZFJKD.cjs.map +0 -1
  99. package/dist/chunk-T2JLSZN6.js +0 -67
  100. package/dist/chunk-T2JLSZN6.js.map +0 -1
  101. package/dist/chunk-UV252FLT.cjs +0 -74
  102. package/dist/chunk-UV252FLT.cjs.map +0 -1
  103. package/dist/chunk-X7WC4AYC.js.map +0 -1
  104. package/dist/chunk-YQEXO3IQ.cjs.map +0 -1
  105. package/dist/displays/index.cjs +0 -24
  106. package/dist/displays/index.cjs.map +0 -1
  107. package/dist/displays/index.d.cts +0 -34
  108. package/dist/displays/index.d.ts +0 -34
  109. package/dist/displays/index.js +0 -3
  110. 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 NORMALIZED_FIELD_POLICIES.find((policy) => {
55
+ return policies.find((policy) => {
56
+ const normalizedValue = normalizeKey(policy.value);
107
57
  if (policy.match === "key") {
108
- return policy.value === normalizedKey;
58
+ return normalizedValue === normalizedKey;
109
59
  }
110
- return policy.value === normalizedPath;
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: DEFAULT_PRESERVED_SEMANTICS
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: DEFAULT_PRESERVED_SEMANTICS
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
- var defaultEngine = new AnonymizationEngine();
297
- function anonymizeJsonValue(value, context, dataClass) {
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 defaultEngine.anonymizeAssetEventPayload(event, context);
258
+ function anonymizeAssetEventPayload(event, context, policy) {
259
+ return new AnonymizationEngine(policy).anonymizeAssetEventPayload(event, context);
302
260
  }
303
- function anonymizeEvidencePacket(packet, context) {
304
- return defaultEngine.anonymizeEvidencePacket(packet, context);
261
+ function anonymizeEvidencePacket(packet, context, policy) {
262
+ return new AnonymizationEngine(policy).anonymizeEvidencePacket(packet, context);
305
263
  }
306
- function buildAnonymizationLifecycleEvidence(input) {
307
- return defaultEngine.buildAnonymizationLifecycleEvidence(input);
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-YQEXO3IQ.cjs.map
320
- //# sourceMappingURL=chunk-YQEXO3IQ.cjs.map
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"]}
@@ -1,36 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var chunk7RV5REPT_cjs = require('../chunk-7RV5REPT.cjs');
3
+ var chunkLDPBQ72C_cjs = require('../chunk-LDPBQ72C.cjs');
4
4
 
5
5
 
6
6
 
7
- Object.defineProperty(exports, "createEventTypeRegistry", {
7
+ Object.defineProperty(exports, "createEventContractRegistry", {
8
8
  enumerable: true,
9
- get: function () { return chunk7RV5REPT_cjs.createEventTypeRegistry; }
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
@@ -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: "sdui" | "api" | "agent" | "worker" | "system";
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
- declare function registerSubjectType(type: string): void;
28
- declare function isValidSubjectType(type: string): boolean;
29
- declare function getRegisteredSubjectTypes(): string[];
30
- declare function registerEventType(type: string): void;
31
- declare function isValidEventType(type: string): boolean;
32
- declare function getRegisteredEventTypes(): string[];
33
- interface EventTypeRegistry {
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 createEventTypeRegistry(initialEventTypes?: string[]): EventTypeRegistry;
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 EventProvenance, type EventTypeRegistry, createEventTypeRegistry, getRegisteredEventTypes, getRegisteredSubjectTypes, isValidEventType, isValidSubjectType, registerEventType, registerSubjectType };
47
+ export { type AssetEventActorType, type AssetEventEnvelope, type AssetEventSubjectType, type AssetEventType, type EventContractRegistry, type EventProvenance, createEventContractRegistry };
@@ -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: "sdui" | "api" | "agent" | "worker" | "system";
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
- declare function registerSubjectType(type: string): void;
28
- declare function isValidSubjectType(type: string): boolean;
29
- declare function getRegisteredSubjectTypes(): string[];
30
- declare function registerEventType(type: string): void;
31
- declare function isValidEventType(type: string): boolean;
32
- declare function getRegisteredEventTypes(): string[];
33
- interface EventTypeRegistry {
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 createEventTypeRegistry(initialEventTypes?: string[]): EventTypeRegistry;
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 EventProvenance, type EventTypeRegistry, createEventTypeRegistry, getRegisteredEventTypes, getRegisteredSubjectTypes, isValidEventType, isValidSubjectType, registerEventType, registerSubjectType };
47
+ export { type AssetEventActorType, type AssetEventEnvelope, type AssetEventSubjectType, type AssetEventType, type EventContractRegistry, type EventProvenance, createEventContractRegistry };
@@ -1,3 +1,3 @@
1
- export { createEventTypeRegistry, getRegisteredEventTypes, getRegisteredSubjectTypes, isValidEventType, isValidSubjectType, registerEventType, registerSubjectType } from '../chunk-3O4GMCCE.js';
1
+ export { createEventContractRegistry } from '../chunk-NHGBTPPE.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map