@nvisy/sdk 0.25.0 → 0.27.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 +42 -1
- package/dist/auth/index.d.ts +1 -1
- package/dist/{client-JKhRcvSu.d.ts → client-Dhdf1wiy.d.ts} +2 -2
- package/dist/{client-JKhRcvSu.d.ts.map → client-Dhdf1wiy.d.ts.map} +1 -1
- package/dist/datatypes/index.d.ts +2 -2
- package/dist/{errors-BXs-KAXs.d.ts → errors-CU_tuovi.d.ts} +2 -2
- package/dist/{errors-BXs-KAXs.d.ts.map → errors-CU_tuovi.d.ts.map} +1 -1
- package/dist/{index-Cijg5CMy.d.ts → index-D7O7ZJNs.d.ts} +1257 -772
- package/dist/index-D7O7ZJNs.d.ts.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/services/index.d.ts +1 -1
- package/dist/webhooks/index.d.ts +2 -2
- package/package.json +1 -1
- package/dist/index-Cijg5CMy.d.ts.map +0 -1
|
@@ -4578,7 +4578,7 @@ interface paths {
|
|
|
4578
4578
|
* here; labels are re-derived from the policy set on each
|
|
4579
4579
|
* anonymize call.
|
|
4580
4580
|
*
|
|
4581
|
-
* No [`Default`]
|
|
4581
|
+
* No [`Default`]: a well-formed audit must carry a real
|
|
4582
4582
|
* [`AuditContext`] with a real correlation id. Callers building
|
|
4583
4583
|
* an audit outside the analyze path construct it explicitly.
|
|
4584
4584
|
*/
|
|
@@ -5226,7 +5226,9 @@ interface paths {
|
|
|
5226
5226
|
/**
|
|
5227
5227
|
* @description Request payload for updating an existing workspace policy.
|
|
5228
5228
|
*
|
|
5229
|
-
* Replacing the `definition` replaces the whole policy body.
|
|
5229
|
+
* Replacing the `definition` replaces the whole policy body. The policy's
|
|
5230
|
+
* template origin is server-owned and preserved across updates — it is not
|
|
5231
|
+
* settable here.
|
|
5230
5232
|
*/
|
|
5231
5233
|
requestBody: {
|
|
5232
5234
|
content: {
|
|
@@ -8113,195 +8115,137 @@ interface components {
|
|
|
8113
8115
|
token: string;
|
|
8114
8116
|
};
|
|
8115
8117
|
/**
|
|
8116
|
-
* @description Author-supplied rationale for a redaction:
|
|
8117
|
-
* description.
|
|
8118
|
+
* @description Author-supplied rationale for a redaction: *under what authority* it was made.
|
|
8118
8119
|
*
|
|
8119
8120
|
* Where the matched selection rule answers *which rule fired*, an
|
|
8120
|
-
* `Attribution` answers *
|
|
8121
|
+
* `Attribution` answers *why the policy demanded it* — a compliance clause, an
|
|
8121
8122
|
* internal policy, a data-handling rule. A policy author attaches it to a
|
|
8122
|
-
* selection rule (`Rule::because` in `elide-redaction`); the anonymizer
|
|
8123
|
-
*
|
|
8124
|
-
*
|
|
8123
|
+
* selection rule (`Rule::because` in `elide-redaction`); the anonymizer records
|
|
8124
|
+
* it on the entity's [`Redaction`] event so an audit can trace a change back to
|
|
8125
|
+
* the policy that demanded it.
|
|
8125
8126
|
*
|
|
8126
|
-
* The
|
|
8127
|
-
*
|
|
8128
|
-
*
|
|
8129
|
-
*
|
|
8130
|
-
*
|
|
8127
|
+
* The rationale takes one of two [`kind`](Attribution::kind)s, by how much
|
|
8128
|
+
* structure the author has ([`AttributionKind::Freeform`] /
|
|
8129
|
+
* [`AttributionKind::Cited`]). Orthogonal to that, an attribution may carry a
|
|
8130
|
+
* [`source_id`](Attribution::source_id): an opaque, caller-owned [`Uuid`] the
|
|
8131
|
+
* policy layer uses to link back to a source record (a rule, a request, a
|
|
8132
|
+
* document). elide-core stores and hashes it verbatim; it never resolves or
|
|
8133
|
+
* validates it.
|
|
8131
8134
|
*
|
|
8132
|
-
* [`Redaction`]: crate::entity::
|
|
8135
|
+
* [`Redaction`]: crate::entity::audit::AuditKind::Redaction
|
|
8133
8136
|
*/
|
|
8134
8137
|
Attribution: {
|
|
8138
|
+
/** @description The shape of the rationale: a freeform label or a formal citation. */
|
|
8139
|
+
kind: components["schemas"]["AttributionKind"];
|
|
8140
|
+
/**
|
|
8141
|
+
* Format: uuid
|
|
8142
|
+
* @description Opaque, caller-owned link to a source record, when given.
|
|
8143
|
+
*/
|
|
8144
|
+
source_id?: string;
|
|
8145
|
+
};
|
|
8146
|
+
/** @description The shape of an [`Attribution`]'s rationale. */
|
|
8147
|
+
AttributionKind: {
|
|
8135
8148
|
/** @description Human-readable description (e.g. `"right to erasure"`), when given. */
|
|
8136
8149
|
description?: string;
|
|
8150
|
+
/** @constant */
|
|
8151
|
+
kind: "freeform";
|
|
8137
8152
|
/** @description The policy's name (e.g. `"gdpr-art-17"`, `"hipaa-safe-harbor"`). */
|
|
8138
8153
|
name: string;
|
|
8139
|
-
}
|
|
8140
|
-
|
|
8141
|
-
|
|
8142
|
-
|
|
8143
|
-
|
|
8144
|
-
|
|
8145
|
-
|
|
8146
|
-
|
|
8147
|
-
|
|
8148
|
-
|
|
8149
|
-
|
|
8150
|
-
*
|
|
8151
|
-
*
|
|
8152
|
-
*
|
|
8153
|
-
|
|
8154
|
-
|
|
8155
|
-
|
|
8156
|
-
|
|
8157
|
-
|
|
8158
|
-
|
|
8159
|
-
*
|
|
8160
|
-
*
|
|
8161
|
-
*
|
|
8162
|
-
*
|
|
8163
|
-
* `
|
|
8164
|
-
*
|
|
8165
|
-
*
|
|
8166
|
-
*
|
|
8167
|
-
*
|
|
8168
|
-
*
|
|
8169
|
-
*
|
|
8170
|
-
*
|
|
8171
|
-
*
|
|
8172
|
-
* [`
|
|
8173
|
-
*
|
|
8174
|
-
*
|
|
8175
|
-
*
|
|
8176
|
-
*
|
|
8177
|
-
* [`
|
|
8178
|
-
* [`
|
|
8179
|
-
|
|
8180
|
-
|
|
8181
|
-
|
|
8182
|
-
|
|
8183
|
-
|
|
8184
|
-
/** @description Effective confidence in `0.0..=1.0` (fused, if applicable). */
|
|
8185
|
-
confidence: components["schemas"]["Confidence"];
|
|
8186
|
-
/**
|
|
8187
|
-
* @description Coreference identifier, if a recognizer resolved this entity as one
|
|
8188
|
-
* mention of a cluster. Entities sharing an [`EntityCoRef`] denote the
|
|
8189
|
-
* same real-world thing.
|
|
8190
|
-
*/
|
|
8191
|
-
coref?: components["schemas"]["EntityCoRef"];
|
|
8192
|
-
/**
|
|
8193
|
-
* Format: uuid
|
|
8194
|
-
* @description Stable unique identity for this entity (time-ordered UUIDv7), minted
|
|
8195
|
-
* when the entity is assembled.
|
|
8196
|
-
*/
|
|
8197
|
-
id: string;
|
|
8198
|
-
/**
|
|
8199
|
-
* @description What kind of sensitive information this is (resolved via a
|
|
8200
|
-
* [`LabelCatalog`]).
|
|
8201
|
-
*/
|
|
8202
|
-
label: components["schemas"]["LabelRef"];
|
|
8203
|
-
/**
|
|
8204
|
-
* @description The language of this entity's surrounding text, when a recognizer
|
|
8205
|
-
* resolved one. `None` when unknown or language-agnostic.
|
|
8206
|
-
*/
|
|
8207
|
-
language?: string;
|
|
8208
|
-
/**
|
|
8209
|
-
* @description Location of the entity within the medium (fused, if it came from more
|
|
8210
|
-
* than one detection).
|
|
8211
|
-
*/
|
|
8212
|
-
location: components["schemas"]["AudioLocation"];
|
|
8213
|
-
/**
|
|
8214
|
-
* @description Detection audit trail: every contributing detection and the fusion
|
|
8215
|
-
* event, if any.
|
|
8154
|
+
} | {
|
|
8155
|
+
/** @description The authority cited (e.g. `"GDPR"`, `"HIPAA"`, `"internal-policy"`). */
|
|
8156
|
+
authority: string;
|
|
8157
|
+
/** @description The citation within that authority (e.g. `"Art. 17(1)"`, `"§164.514"`). */
|
|
8158
|
+
citation: string;
|
|
8159
|
+
/** @constant */
|
|
8160
|
+
kind: "cited";
|
|
8161
|
+
/** @description Why the citation applies here (e.g. `"data subject requested erasure"`). */
|
|
8162
|
+
rationale: string;
|
|
8163
|
+
};
|
|
8164
|
+
/**
|
|
8165
|
+
* @description One node in an entity's audit DAG: a thing that happened, with its
|
|
8166
|
+
* effect on confidence and its tamper-evident links.
|
|
8167
|
+
*
|
|
8168
|
+
* Events are recorded on an entity's [`AuditLog`], forming the full audit
|
|
8169
|
+
* trail of its life: each recognizer that found it, the deduplication that
|
|
8170
|
+
* fused them, any score calibration, and the redaction that hid it. The
|
|
8171
|
+
* uniform spine (who, resulting score, when) is the same for every event; the
|
|
8172
|
+
* [`kind`] carries the event-specific detail *and* the explanation of why the
|
|
8173
|
+
* event happened.
|
|
8174
|
+
*
|
|
8175
|
+
* Each event links to its [`parents`] by their [`hash`]: a birth event (a
|
|
8176
|
+
* recognizer's first detection) has no parents, a normal step has one, and a
|
|
8177
|
+
* [fusion](crate::entity::audit::AuditLog::record_fusion) has several. Its own
|
|
8178
|
+
* [`hash`] folds the
|
|
8179
|
+
* payload together with the parents' hashes, so altering any event breaks
|
|
8180
|
+
* every event downstream of it: [`AuditLog::verify`] walks the DAG and
|
|
8181
|
+
* reports the first break.
|
|
8182
|
+
*
|
|
8183
|
+
* `entity.confidence` always equals the [`confidence`] of the most recent
|
|
8184
|
+
* event. The confidence *flowing in* is not stored: it is the parents'
|
|
8185
|
+
* [`confidence`], recovered from the DAG.
|
|
8186
|
+
*
|
|
8187
|
+
* [`AuditLog`]: crate::entity::audit::AuditLog
|
|
8188
|
+
* [`AuditLog::record_fusion`]: crate::entity::audit::AuditLog::record_fusion
|
|
8189
|
+
* [`AuditLog::verify`]: crate::entity::audit::AuditLog::verify
|
|
8190
|
+
* [`kind`]: AuditEvent::kind
|
|
8191
|
+
* [`parents`]: AuditEvent::parents
|
|
8192
|
+
* [`hash`]: AuditEvent::hash
|
|
8193
|
+
* [`confidence`]: AuditEvent::confidence
|
|
8194
|
+
*/
|
|
8195
|
+
AudioAuditEvent: {
|
|
8196
|
+
/**
|
|
8197
|
+
* @description Confidence after this event: the entity's effective confidence once it
|
|
8198
|
+
* has happened.
|
|
8216
8199
|
*/
|
|
8217
|
-
|
|
8200
|
+
confidence: components["schemas"]["Confidence"];
|
|
8218
8201
|
/**
|
|
8219
|
-
* @description
|
|
8220
|
-
*
|
|
8221
|
-
*
|
|
8222
|
-
* context lives (which OCR block, which speaker) that the geometric
|
|
8223
|
-
* [`location`] cannot hold. `None` for entities not found via text
|
|
8224
|
-
* recognition (e.g. a VLM box). Provenance, not a coordinate: redaction
|
|
8225
|
-
* uses [`location`]; an audit uses this with the artifact.
|
|
8202
|
+
* @description This event's hash, over its payload and its parents' hashes. Assigned by
|
|
8203
|
+
* [`AuditLog`] when the event is recorded; read it through
|
|
8204
|
+
* [`hash`](Self::hash). Recomputing it is how the DAG is verified.
|
|
8226
8205
|
*
|
|
8227
|
-
* [`
|
|
8228
|
-
|
|
8229
|
-
recognized_range?: components["schemas"]["Range_of_uint"];
|
|
8230
|
-
};
|
|
8231
|
-
/**
|
|
8232
|
-
* @description One recognized entity plus the optional reviewer override.
|
|
8233
|
-
*
|
|
8234
|
-
* The bound mirrors elide's [`Entity<M>`]: serialization needs
|
|
8235
|
-
* `M::Location` and `M::Data` (de)serializable, and JsonSchema
|
|
8236
|
-
* derivation needs them schema-able. All four modalities elide
|
|
8237
|
-
* ships satisfy these under the `serde` + `schema` features.
|
|
8238
|
-
*/
|
|
8239
|
-
AudioEntityRecord: {
|
|
8240
|
-
/** @description The elide entity, as recognition produced it. */
|
|
8241
|
-
entity: components["schemas"]["AudioEntity"];
|
|
8242
|
-
/**
|
|
8243
|
-
* @description Reviewer-supplied redaction override.
|
|
8206
|
+
* Not publicly settable: only [`AuditLog`] assigns it, so a caller cannot
|
|
8207
|
+
* forge a self-consistent event outside the recording path.
|
|
8244
8208
|
*
|
|
8245
|
-
* `
|
|
8246
|
-
* `Some(...)` overrides that rule for this specific entity
|
|
8247
|
-
* at apply time. Reviewer overrides take precedence over
|
|
8248
|
-
* every policy rule and inherit the authority of the
|
|
8249
|
-
* [`Review::policy_id`] they name — the audit event's
|
|
8250
|
-
* attribution stamps that policy so the trail names the
|
|
8251
|
-
* authority under which the override fired.
|
|
8209
|
+
* [`AuditLog`]: crate::entity::audit::AuditLog
|
|
8252
8210
|
*/
|
|
8253
|
-
|
|
8254
|
-
|
|
8255
|
-
|
|
8256
|
-
* @description One thing that happened to an entity, with its effect on confidence.
|
|
8257
|
-
*
|
|
8258
|
-
* Events are recorded in order on an entity's [`Provenance`], forming
|
|
8259
|
-
* the full audit trail of its life: each recognizer that found it, the
|
|
8260
|
-
* deduplication that fused them, any score calibration, and the
|
|
8261
|
-
* redaction that hid it. The uniform spine (who, before/after score,
|
|
8262
|
-
* when, why) is the same for every event; the [`kind`] carries the
|
|
8263
|
-
* event-specific detail.
|
|
8264
|
-
*
|
|
8265
|
-
* `entity.confidence` always equals the [`after`] of the most recent
|
|
8266
|
-
* event.
|
|
8267
|
-
*
|
|
8268
|
-
* [`Provenance`]: crate::entity::provenance::Provenance
|
|
8269
|
-
* [`kind`]: Event::kind
|
|
8270
|
-
* [`after`]: Event::after
|
|
8271
|
-
*/
|
|
8272
|
-
AudioEvent: {
|
|
8273
|
-
/** @description Confidence after this event. */
|
|
8274
|
-
after: components["schemas"]["Confidence"];
|
|
8275
|
-
/** @description When the event happened (UTC). */
|
|
8276
|
-
at: string;
|
|
8211
|
+
hash: components["schemas"]["AuditHash"];
|
|
8212
|
+
/** @description Kind of event, with its event-specific detail and its rationale. */
|
|
8213
|
+
kind: components["schemas"]["AudioAuditKind"];
|
|
8277
8214
|
/**
|
|
8278
|
-
* @description
|
|
8279
|
-
*
|
|
8215
|
+
* @description The events this one follows, by their hash. Empty for a birth event, one
|
|
8216
|
+
* entry for a normal step, several for a fusion. Assigned by [`AuditLog`]
|
|
8217
|
+
* when the event is recorded; read it through [`parents`](Self::parents).
|
|
8218
|
+
*
|
|
8219
|
+
* Not publicly settable: the links are the tamper-evident structure, so
|
|
8220
|
+
* only [`AuditLog::record`] / [`AuditLog::record_fusion`] assign them.
|
|
8221
|
+
*
|
|
8222
|
+
* [`AuditLog`]: crate::entity::audit::AuditLog
|
|
8223
|
+
* [`AuditLog::record`]: crate::entity::audit::AuditLog::record
|
|
8224
|
+
* [`AuditLog::record_fusion`]: crate::entity::audit::AuditLog::record_fusion
|
|
8280
8225
|
*/
|
|
8281
|
-
|
|
8282
|
-
/** @description Kind of event, with its event-specific detail. */
|
|
8283
|
-
kind: components["schemas"]["AudioEventKind"];
|
|
8284
|
-
/** @description Free-text explanation of what the event did and why. */
|
|
8285
|
-
reason: string;
|
|
8226
|
+
parents: components["schemas"]["AuditHash"][];
|
|
8286
8227
|
/**
|
|
8287
8228
|
* @description Who produced this event: a recognizer name, a deduplication strategy,
|
|
8288
8229
|
* an operator, or whatever acted.
|
|
8289
8230
|
*/
|
|
8290
8231
|
source: string;
|
|
8232
|
+
/** @description When the event happened (UTC). */
|
|
8233
|
+
timestamp: string;
|
|
8291
8234
|
};
|
|
8292
8235
|
/**
|
|
8293
|
-
* @description Kind of an [`
|
|
8236
|
+
* @description Kind of an [`AuditEvent`], carrying its event-specific detail and the
|
|
8237
|
+
* rationale for why it happened.
|
|
8294
8238
|
*
|
|
8295
8239
|
* `#[non_exhaustive]`: new event kinds (verification, annotation, …)
|
|
8296
8240
|
* can be added compatibly. The recognition kinds ([`Pattern`],
|
|
8297
8241
|
* [`Model`]) carry the matched [`Location`]; the rest carry their own
|
|
8298
8242
|
* data.
|
|
8299
8243
|
*
|
|
8300
|
-
* [`Pattern`]:
|
|
8301
|
-
* [`Model`]:
|
|
8244
|
+
* [`Pattern`]: AuditKind::Pattern
|
|
8245
|
+
* [`Model`]: AuditKind::Model
|
|
8302
8246
|
* [`Location`]: Modality::Location
|
|
8303
8247
|
*/
|
|
8304
|
-
|
|
8248
|
+
AudioAuditKind: {
|
|
8305
8249
|
/** @constant */
|
|
8306
8250
|
kind: "pattern";
|
|
8307
8251
|
/** @description Where the recognizer matched. */
|
|
@@ -8365,7 +8309,7 @@ interface components {
|
|
|
8365
8309
|
* it is the keyword resolved through the modality's [`locate`] (a
|
|
8366
8310
|
* pixel box for image, a time span for audio, the byte range for
|
|
8367
8311
|
* text/tabular). `None` when the keyword's stream range could not be
|
|
8368
|
-
* placed
|
|
8312
|
+
* placed, symmetric with a match the recognizer itself drops.
|
|
8369
8313
|
*
|
|
8370
8314
|
* [`locate`]: crate::modality::TextRecognizable::locate
|
|
8371
8315
|
*/
|
|
@@ -8383,12 +8327,176 @@ interface components {
|
|
|
8383
8327
|
/** @description How much the output leaks about the original. */
|
|
8384
8328
|
leak_profile: components["schemas"]["LeakProfile"];
|
|
8385
8329
|
/**
|
|
8386
|
-
* @description Which selection rule chose this operator
|
|
8330
|
+
* @description Which selection rule chose this operator: the automatic "why"
|
|
8387
8331
|
* (matched a label, a tag, a predicate, or the fallback).
|
|
8388
8332
|
*/
|
|
8389
8333
|
matched_by: components["schemas"]["RuleMatch"];
|
|
8390
8334
|
/** @description Which operator (name + version) ran. */
|
|
8391
8335
|
operator: components["schemas"]["OperatorId"];
|
|
8336
|
+
/**
|
|
8337
|
+
* @description BLAKE3 digest of the original text the operator hid, when the
|
|
8338
|
+
* redaction layer recorded it. Proves *what* was redacted without
|
|
8339
|
+
* storing the plaintext; `None` when the operator did not capture it.
|
|
8340
|
+
*/
|
|
8341
|
+
span_hash?: components["schemas"]["AuditHash"];
|
|
8342
|
+
/**
|
|
8343
|
+
* Format: uint32
|
|
8344
|
+
* @description Byte length of the original text the operator hid, paired with
|
|
8345
|
+
* [`span_hash`](Self::Redaction::span_hash). `None` when not captured.
|
|
8346
|
+
*/
|
|
8347
|
+
span_length?: number;
|
|
8348
|
+
};
|
|
8349
|
+
/**
|
|
8350
|
+
* @description Full audit trail of an [`Entity`]: every [`AuditEvent`] in its life, as a
|
|
8351
|
+
* tamper-evident DAG.
|
|
8352
|
+
*
|
|
8353
|
+
* Where Presidio keeps a shallow, optional, per-stage explanation that is
|
|
8354
|
+
* stripped by default, an `AuditLog` is always present and records the
|
|
8355
|
+
* entity's *entire* life: each recognizer that found it, the deduplication
|
|
8356
|
+
* that fused them, any confidence calibration, and the redaction that hid it.
|
|
8357
|
+
* Nothing is collapsed: every recognizer keeps its own recognition event with
|
|
8358
|
+
* its location and score.
|
|
8359
|
+
*
|
|
8360
|
+
* The events form a **directed acyclic graph**, not a flat list. A recognizer
|
|
8361
|
+
* records a birth event (no parents); each later step links to the event it
|
|
8362
|
+
* follows; and a [fusion](Self::record_fusion) links to *several* parents at
|
|
8363
|
+
* once: the heads of the trails it combines. This is the true shape of a
|
|
8364
|
+
* deduplicated entity: two recognizers are siblings, then a fusion joins them.
|
|
8365
|
+
* The events are stored in the order they were recorded, which is a
|
|
8366
|
+
* topological order of the DAG (a parent is always recorded before its
|
|
8367
|
+
* children).
|
|
8368
|
+
*
|
|
8369
|
+
* Two chains ride the DAG's edges:
|
|
8370
|
+
*
|
|
8371
|
+
* - a **confidence chain**, where each event's [`confidence`] is the entity's
|
|
8372
|
+
* effective score after it; the score flowing *in* is its parents'
|
|
8373
|
+
* confidence, so [`final_confidence`] and the full history are recoverable;
|
|
8374
|
+
* - a **hash chain**, where each event's [`hash`] folds its payload together
|
|
8375
|
+
* with its parents' hashes, so any edit, reorder, insertion, or deletion of
|
|
8376
|
+
* an earlier event breaks every event downstream. [`verify`] walks the DAG
|
|
8377
|
+
* and reports the first break.
|
|
8378
|
+
*
|
|
8379
|
+
* [`Entity`]: crate::entity::Entity
|
|
8380
|
+
* [`confidence`]: AuditEvent::confidence
|
|
8381
|
+
* [`hash`]: AuditEvent::hash
|
|
8382
|
+
* [`final_confidence`]: Self::final_confidence
|
|
8383
|
+
* [`verify`]: Self::verify
|
|
8384
|
+
*/
|
|
8385
|
+
AudioAuditLog: components["schemas"]["AudioAuditEvent"][];
|
|
8386
|
+
/**
|
|
8387
|
+
* @description Per-call payload a recognizer inspects for the [`Audio`] modality.
|
|
8388
|
+
*
|
|
8389
|
+
* Carries the encoded audio bytes; an optional filename aids diagnostics
|
|
8390
|
+
* and encoding inference (the container format a decoder should expect).
|
|
8391
|
+
* The recognizable text — a timestamped transcript — is *not* held here;
|
|
8392
|
+
* a speech-to-text [`Enricher`] stamps it onto the call's
|
|
8393
|
+
* [`artifacts`], keeping
|
|
8394
|
+
* `AudioData` the codec's payload alone.
|
|
8395
|
+
*
|
|
8396
|
+
* [`Audio`]: super::Audio
|
|
8397
|
+
* [`Enricher`]: crate::recognition::Enricher
|
|
8398
|
+
* [`artifacts`]: crate::recognition::RecognizerContext::artifacts
|
|
8399
|
+
*/
|
|
8400
|
+
AudioData: {
|
|
8401
|
+
/** @description Original filename, when known. */
|
|
8402
|
+
filename?: string;
|
|
8403
|
+
};
|
|
8404
|
+
/**
|
|
8405
|
+
* @description Detected piece of sensitive information within some medium.
|
|
8406
|
+
*
|
|
8407
|
+
* Generic over the [`Modality`] `M`, which is what makes the model
|
|
8408
|
+
* multimodal: a text pipeline yields `Entity<Text>`, an audio pipeline
|
|
8409
|
+
* `Entity<Audio>`, and so on. The entity's location is the modality's
|
|
8410
|
+
* [`Location`] type, `M::Location`.
|
|
8411
|
+
*
|
|
8412
|
+
* # Birth and fusion
|
|
8413
|
+
*
|
|
8414
|
+
* A recognizer emits an entity directly, carrying a single recognition
|
|
8415
|
+
* [`AuditEvent`] (its own finding) in the entity's [`audit`] trail. When
|
|
8416
|
+
* several recognizers find the same thing, a fusion step (in
|
|
8417
|
+
* `elide`) combines their entities into one: the survivor's
|
|
8418
|
+
* [`location`] and [`confidence`] are the *fused* values, and every
|
|
8419
|
+
* contributing recognition event, plus a deduplication event, is
|
|
8420
|
+
* retained in its audit trail. The entity therefore carries its full
|
|
8421
|
+
* audit trail with it.
|
|
8422
|
+
*
|
|
8423
|
+
* [`Location`]: Modality::Location
|
|
8424
|
+
* [`AuditEvent`]: crate::entity::audit::AuditEvent
|
|
8425
|
+
* [`audit`]: Entity::audit
|
|
8426
|
+
* [`location`]: Entity::location
|
|
8427
|
+
* [`confidence`]: Entity::confidence
|
|
8428
|
+
*/
|
|
8429
|
+
AudioEntity: {
|
|
8430
|
+
/**
|
|
8431
|
+
* @description Tamper-evident audit trail: every contributing detection, the fusion
|
|
8432
|
+
* event if any, and the redaction that hid it, as a hash-linked DAG.
|
|
8433
|
+
*/
|
|
8434
|
+
audit: components["schemas"]["AudioAuditLog"];
|
|
8435
|
+
/** @description Effective confidence in `0.0..=1.0` (fused, if applicable). */
|
|
8436
|
+
confidence: components["schemas"]["Confidence"];
|
|
8437
|
+
/**
|
|
8438
|
+
* @description Coreference identifier, if a recognizer resolved this entity as one
|
|
8439
|
+
* mention of a cluster. Entities sharing an [`EntityCoRef`] denote the
|
|
8440
|
+
* same real-world thing.
|
|
8441
|
+
*/
|
|
8442
|
+
coref?: components["schemas"]["EntityCoRef"];
|
|
8443
|
+
/**
|
|
8444
|
+
* Format: uuid
|
|
8445
|
+
* @description Stable unique identity for this entity (time-ordered UUIDv7), minted
|
|
8446
|
+
* when the entity is assembled.
|
|
8447
|
+
*/
|
|
8448
|
+
id: string;
|
|
8449
|
+
/**
|
|
8450
|
+
* @description What kind of sensitive information this is (resolved via a
|
|
8451
|
+
* [`LabelCatalog`]).
|
|
8452
|
+
*/
|
|
8453
|
+
label: components["schemas"]["LabelRef"];
|
|
8454
|
+
/**
|
|
8455
|
+
* @description The language of this entity's surrounding text, when a recognizer
|
|
8456
|
+
* resolved one. `None` when unknown or language-agnostic.
|
|
8457
|
+
*/
|
|
8458
|
+
language?: string;
|
|
8459
|
+
/**
|
|
8460
|
+
* @description Location of the entity within the medium (fused, if it came from more
|
|
8461
|
+
* than one detection).
|
|
8462
|
+
*/
|
|
8463
|
+
location: components["schemas"]["AudioLocation"];
|
|
8464
|
+
/**
|
|
8465
|
+
* @description Byte range of the match in the *recognized text* it was found in (the
|
|
8466
|
+
* OCR layout text, the audio transcript, or the text payload itself) —
|
|
8467
|
+
* the stable key back into that enrichment artifact, where the rich
|
|
8468
|
+
* context lives (which OCR block, which speaker) that the geometric
|
|
8469
|
+
* [`location`] cannot hold. `None` for entities not found via text
|
|
8470
|
+
* recognition (e.g. a VLM box). An audit key, not a coordinate: redaction
|
|
8471
|
+
* uses [`location`]; an audit uses this with the artifact.
|
|
8472
|
+
*
|
|
8473
|
+
* [`location`]: Entity::location
|
|
8474
|
+
*/
|
|
8475
|
+
recognized_range?: components["schemas"]["Range_of_uint"];
|
|
8476
|
+
};
|
|
8477
|
+
/**
|
|
8478
|
+
* @description One recognized entity plus the optional reviewer override.
|
|
8479
|
+
*
|
|
8480
|
+
* The bound mirrors elide's [`Entity<M>`]: serialization needs
|
|
8481
|
+
* `M::Location` and `M::Data` (de)serializable, and JsonSchema
|
|
8482
|
+
* derivation needs them schema-able. All four modalities elide
|
|
8483
|
+
* ships satisfy these under the `serde` + `schema` features.
|
|
8484
|
+
*/
|
|
8485
|
+
AudioEntityRecord: {
|
|
8486
|
+
/** @description The elide entity, as recognition produced it. */
|
|
8487
|
+
entity: components["schemas"]["AudioEntity"];
|
|
8488
|
+
/**
|
|
8489
|
+
* @description Reviewer-supplied redaction override.
|
|
8490
|
+
*
|
|
8491
|
+
* `None` means "use the matching policy rule's decision";
|
|
8492
|
+
* `Some(...)` overrides that rule for this specific entity
|
|
8493
|
+
* at apply time. Reviewer overrides take precedence over
|
|
8494
|
+
* every policy rule and inherit the authority of the
|
|
8495
|
+
* [`Review::policy_id`] they name: the audit event's
|
|
8496
|
+
* attribution stamps that policy so the trail names the
|
|
8497
|
+
* authority under which the override fired.
|
|
8498
|
+
*/
|
|
8499
|
+
review?: components["schemas"]["Review"];
|
|
8392
8500
|
};
|
|
8393
8501
|
/**
|
|
8394
8502
|
* @description Located, typed piece of context a recognizer may treat as in-context
|
|
@@ -8430,31 +8538,6 @@ interface components {
|
|
|
8430
8538
|
/** @description Diarization label of the speaker, when a diarizer assigned one. */
|
|
8431
8539
|
speaker_id?: string;
|
|
8432
8540
|
};
|
|
8433
|
-
/**
|
|
8434
|
-
* @description Full audit trail of an [`Entity`]: every [`Event`] in its life, in
|
|
8435
|
-
* order.
|
|
8436
|
-
*
|
|
8437
|
-
* This is the model's answer to "full provenance": where Presidio keeps
|
|
8438
|
-
* a shallow, optional, per-stage explanation that is stripped by
|
|
8439
|
-
* default, a `Provenance` is always present and records the entity's
|
|
8440
|
-
* *entire* life as an ordered list of events: each recognizer that
|
|
8441
|
-
* found it, the deduplication that fused them, any confidence
|
|
8442
|
-
* calibration, and the redaction that hid it. Nothing is collapsed:
|
|
8443
|
-
* every recognizer keeps its own recognition event with its location
|
|
8444
|
-
* and score.
|
|
8445
|
-
*
|
|
8446
|
-
* The events form a confidence chain (each event's [`after`] is the
|
|
8447
|
-
* next's [`before`]) so the final confidence and its full history are
|
|
8448
|
-
* always recoverable.
|
|
8449
|
-
*
|
|
8450
|
-
* [`Entity`]: crate::entity::Entity
|
|
8451
|
-
* [`after`]: Event::after
|
|
8452
|
-
* [`before`]: Event::before
|
|
8453
|
-
*/
|
|
8454
|
-
AudioProvenance: {
|
|
8455
|
-
/** @description Events, in the order they happened. */
|
|
8456
|
-
events: components["schemas"]["AudioEvent"][];
|
|
8457
|
-
};
|
|
8458
8541
|
/** @description Operator spec a `redact` audio rule carries. */
|
|
8459
8542
|
AudioRedaction: {
|
|
8460
8543
|
/** @constant */
|
|
@@ -8502,7 +8585,7 @@ interface components {
|
|
|
8502
8585
|
* here; labels are re-derived from the policy set on each
|
|
8503
8586
|
* anonymize call.
|
|
8504
8587
|
*
|
|
8505
|
-
* No [`Default`]
|
|
8588
|
+
* No [`Default`]: a well-formed audit must carry a real
|
|
8506
8589
|
* [`AuditContext`] with a real correlation id. Callers building
|
|
8507
8590
|
* an audit outside the analyze path construct it explicitly.
|
|
8508
8591
|
*/
|
|
@@ -8524,7 +8607,7 @@ interface components {
|
|
|
8524
8607
|
* vocabulary analyze used without the caller re-passing an
|
|
8525
8608
|
* `AnalyzerParams`.
|
|
8526
8609
|
*
|
|
8527
|
-
* Required on the wire
|
|
8610
|
+
* Required on the wire: a missing context on an incoming
|
|
8528
8611
|
* [`Audit`] rejects at deserialize time so the shape
|
|
8529
8612
|
* mismatch surfaces at load, not at apply.
|
|
8530
8613
|
*
|
|
@@ -8549,11 +8632,11 @@ interface components {
|
|
|
8549
8632
|
* for `languages` and `countries` (typed, elide-native), a
|
|
8550
8633
|
* [`metadata`] sub-struct for free-form classification strings
|
|
8551
8634
|
* (`tags`, `purpose`, `audience`), and the analyze-time
|
|
8552
|
-
* [`correlation_id`]. The label catalog is not on here
|
|
8635
|
+
* [`correlation_id`]. The label catalog is not on here -
|
|
8553
8636
|
* labels are policy-owned, and anonymize re-derives them from
|
|
8554
8637
|
* the policy set it was handed.
|
|
8555
8638
|
*
|
|
8556
|
-
* No [`Default`]
|
|
8639
|
+
* No [`Default`]: `correlation_id` has no meaningful default
|
|
8557
8640
|
* (a nil UUID would silently collapse unrelated audits under
|
|
8558
8641
|
* one bucket in downstream trace aggregators), so callers
|
|
8559
8642
|
* supply one explicitly. Everything else defaults to empty.
|
|
@@ -8571,12 +8654,12 @@ interface components {
|
|
|
8571
8654
|
* carried over so the anonymize path can link its own spans
|
|
8572
8655
|
* to the same request. The anonymize call supplies a fresh
|
|
8573
8656
|
* id from the passed [`Document`] as the anonymize-side
|
|
8574
|
-
* correlation id
|
|
8657
|
+
* correlation id: this one stays as the analyze-side
|
|
8575
8658
|
* pointer.
|
|
8576
8659
|
*
|
|
8577
8660
|
* Required on the wire.
|
|
8578
8661
|
*
|
|
8579
|
-
* [`Document`]:
|
|
8662
|
+
* [`Document`]: elide_wire::file::Document
|
|
8580
8663
|
*/
|
|
8581
8664
|
correlationId: string;
|
|
8582
8665
|
/**
|
|
@@ -8601,16 +8684,31 @@ interface components {
|
|
|
8601
8684
|
/**
|
|
8602
8685
|
* @description OCR mode the analyze call decoded with. Recorded so the
|
|
8603
8686
|
* anonymize call re-decodes the same document under the same
|
|
8604
|
-
* codec configuration
|
|
8687
|
+
* codec configuration: otherwise entity offsets stored in
|
|
8605
8688
|
* the audit wouldn't line up against a differently-rendered
|
|
8606
|
-
* second decode. Defaults to [`
|
|
8689
|
+
* second decode. Defaults to [`RasterMode::Auto`] (the codec's
|
|
8607
8690
|
* built-in behaviour) when omitted.
|
|
8608
8691
|
* @default {
|
|
8609
8692
|
* "kind": "auto"
|
|
8610
8693
|
* }
|
|
8611
8694
|
*/
|
|
8612
|
-
|
|
8695
|
+
rasterMode: components["schemas"]["RasterMode"];
|
|
8613
8696
|
};
|
|
8697
|
+
/**
|
|
8698
|
+
* @description A 32-byte BLAKE3 digest.
|
|
8699
|
+
*
|
|
8700
|
+
* The tamper-evident link in an [`AuditLog`] DAG: each [`AuditEvent`] hashes
|
|
8701
|
+
* its payload together with its parents' hashes, so altering any event breaks
|
|
8702
|
+
* every event downstream of it. Displays and (with the `serde` feature)
|
|
8703
|
+
* (de)serializes as lowercase hex.
|
|
8704
|
+
*
|
|
8705
|
+
* The all-zero hash is [`GENESIS`](AuditHash::GENESIS), the link a birth event
|
|
8706
|
+
* (one with no parents) chains from.
|
|
8707
|
+
*
|
|
8708
|
+
* [`AuditLog`]: crate::entity::audit::AuditLog
|
|
8709
|
+
* [`AuditEvent`]: crate::entity::audit::AuditEvent
|
|
8710
|
+
*/
|
|
8711
|
+
AuditHash: string;
|
|
8614
8712
|
/** @description Response returned after successful authentication (login/signup). */
|
|
8615
8713
|
AuthToken: {
|
|
8616
8714
|
/** @description The JWT API token for authentication. */
|
|
@@ -8690,17 +8788,35 @@ interface components {
|
|
|
8690
8788
|
/** @description Minimum corner (top-left, conventionally). */
|
|
8691
8789
|
min: components["schemas"]["Point"];
|
|
8692
8790
|
};
|
|
8791
|
+
/**
|
|
8792
|
+
* @description The coarse group a [`Label`] belongs to, for organizing detected entities
|
|
8793
|
+
* by kind (`financial`, `health`, `identity`, …).
|
|
8794
|
+
*
|
|
8795
|
+
* A category answers "what *sort* of information is this" at a display level:
|
|
8796
|
+
* a consumer groups a redaction audit into sections by category. It is
|
|
8797
|
+
* distinct from a label's [`tags`], which are cross-cutting sensitivity
|
|
8798
|
+
* markers (`pii`, `phi`, `pci`) a label may carry several of; a label has at
|
|
8799
|
+
* most **one** category. Built-in labels ship with a category; a custom
|
|
8800
|
+
* [`Label`] has none unless one is set.
|
|
8801
|
+
*
|
|
8802
|
+
* The value is an open, lowercase `snake_case` identifier, so a custom label
|
|
8803
|
+
* can define its own category rather than being confined to the shipped set.
|
|
8804
|
+
*
|
|
8805
|
+
* [`Label`]: super::Label
|
|
8806
|
+
* [`tags`]: super::Label::tags
|
|
8807
|
+
*/
|
|
8808
|
+
Category: string;
|
|
8693
8809
|
/**
|
|
8694
8810
|
* @description Text a [`TextRedaction::Clamp`] emits for out-of-range values.
|
|
8695
8811
|
*
|
|
8696
8812
|
* Three forms, deserialized untagged so callers can pick the
|
|
8697
8813
|
* terser one for the case at hand:
|
|
8698
8814
|
*
|
|
8699
|
-
* - **Plain string** (`"90 or older"`)
|
|
8700
|
-
* - **Localized map** (`{"en": "90 or older", "fr": "90 ou plus"}`)
|
|
8701
|
-
*
|
|
8702
|
-
*
|
|
8703
|
-
* - **Format template** (`{"format": "{n} or older"}`)
|
|
8815
|
+
* - **Plain string** (`"90 or older"`): English-only shorthand.
|
|
8816
|
+
* - **Localized map** (`{"en": "90 or older", "fr": "90 ou plus"}`):
|
|
8817
|
+
* one entry per language the deployment ships; missing locales
|
|
8818
|
+
* fall back to English at render time.
|
|
8819
|
+
* - **Format template** (`{"format": "{n} or older"}`): the
|
|
8704
8820
|
* engine substitutes `{n}` for the threshold, so a ceiling of
|
|
8705
8821
|
* `90` renders `"90 or older"` without the caller repeating the
|
|
8706
8822
|
* number. Same rendering in every language.
|
|
@@ -8750,7 +8866,7 @@ interface components {
|
|
|
8750
8866
|
* Format: float
|
|
8751
8867
|
* @description Confidence score in the closed range `0.0..=1.0`.
|
|
8752
8868
|
*
|
|
8753
|
-
* Carried by every provenance [`
|
|
8869
|
+
* Carried by every provenance [`AuditEvent`] (the `before`/`after` of a
|
|
8754
8870
|
* recognition, fusion, or calibration) and by the effective confidence
|
|
8755
8871
|
* of an [`Entity`]. The newtype enforces the range at construction so
|
|
8756
8872
|
* no downstream code has to defend against values outside `[0, 1]`.
|
|
@@ -8760,7 +8876,7 @@ interface components {
|
|
|
8760
8876
|
* *cutoff* configured to filter scores. Compare the two with
|
|
8761
8877
|
* [`ConfidenceThreshold::passes`].
|
|
8762
8878
|
*
|
|
8763
|
-
* [`
|
|
8879
|
+
* [`AuditEvent`]: crate::entity::audit::AuditEvent
|
|
8764
8880
|
* [`Entity`]: crate::entity::Entity
|
|
8765
8881
|
*/
|
|
8766
8882
|
Confidence: number;
|
|
@@ -9085,12 +9201,12 @@ interface components {
|
|
|
9085
9201
|
template: components["schemas"]["PolicyTemplate"];
|
|
9086
9202
|
} | {
|
|
9087
9203
|
/**
|
|
9088
|
-
* @description The
|
|
9204
|
+
* @description The client-authored policy body.
|
|
9089
9205
|
*
|
|
9090
9206
|
* Boxed to keep the enum small: an inline body is much larger than a
|
|
9091
9207
|
* template id, and most requests use a template.
|
|
9092
9208
|
*/
|
|
9093
|
-
definition: components["schemas"]["
|
|
9209
|
+
definition: components["schemas"]["PolicyDraft"];
|
|
9094
9210
|
/** @constant */
|
|
9095
9211
|
source: "inline";
|
|
9096
9212
|
});
|
|
@@ -9230,7 +9346,7 @@ interface components {
|
|
|
9230
9346
|
*
|
|
9231
9347
|
* Tagged by `modality` (snake_case) so deserialization picks the
|
|
9232
9348
|
* right variant and the entity vec inside is statically typed
|
|
9233
|
-
* per modality
|
|
9349
|
+
* per modality: apply-time we hand each variant back to elide
|
|
9234
9350
|
* as a `Vec<Entity<M>>` for the appropriate `M`.
|
|
9235
9351
|
*
|
|
9236
9352
|
* [`Audit`]: crate::Audit
|
|
@@ -9387,9 +9503,9 @@ interface components {
|
|
|
9387
9503
|
/**
|
|
9388
9504
|
* @description Which operator to apply to Article 9 special-category entities.
|
|
9389
9505
|
*
|
|
9390
|
-
* - [`Erase`](Self::Erase)
|
|
9506
|
+
* - [`Erase`](Self::Erase): the default no-lawful-basis posture.
|
|
9391
9507
|
* Every match is removed.
|
|
9392
|
-
* - [`Pseudonymize`](Self::Pseudonymize)
|
|
9508
|
+
* - [`Pseudonymize`](Self::Pseudonymize): identity-preserving
|
|
9393
9509
|
* surrogate. Suitable when an Article 9(2) carve-out
|
|
9394
9510
|
* (explicit consent, employment law, public-health public
|
|
9395
9511
|
* interest, ...) authorizes retention and downstream
|
|
@@ -9398,6 +9514,38 @@ interface components {
|
|
|
9398
9514
|
* obligation to establish and document.
|
|
9399
9515
|
*/
|
|
9400
9516
|
GdprArticle9Treatment: "erase" | "pseudonymize";
|
|
9517
|
+
/**
|
|
9518
|
+
* @description Which sensitive-data labels the template's group covers.
|
|
9519
|
+
*
|
|
9520
|
+
* Three tiers, each strictly widening the previous one so a
|
|
9521
|
+
* caller upgrading through the tiers never loses coverage:
|
|
9522
|
+
*
|
|
9523
|
+
* - [`Article9`](Self::Article9): the nine Article 9(1)
|
|
9524
|
+
* special categories only. The default.
|
|
9525
|
+
* - [`Article9WithReidHardening`](Self::Article9WithReidHardening) -
|
|
9526
|
+
* Article 9 plus the quasi-identifiers that carry the most join
|
|
9527
|
+
* risk against public datasets: `date_of_birth`, `postal_code`,
|
|
9528
|
+
* and `gender` (the combination that re-identifies most of a
|
|
9529
|
+
* population on its own), widened with `age`, `city`,
|
|
9530
|
+
* `nationality`, `citizenship`, and `occupation`.
|
|
9531
|
+
*
|
|
9532
|
+
* A product-defined tier, not a complete answer to Recital 26:
|
|
9533
|
+
* the Recital sets a reasonableness test over "all the means
|
|
9534
|
+
* reasonably likely to be used" to re-identify, judged against
|
|
9535
|
+
* the caller's own data and adversary, so no fixed label list
|
|
9536
|
+
* can satisfy it. Callers whose threat model reaches wider
|
|
9537
|
+
* extend the policy after building it.
|
|
9538
|
+
* - [`Article9And10`](Self::Article9And10): Article 9 + Recital
|
|
9539
|
+
* 26 hardening + Article 10's criminal-justice labels
|
|
9540
|
+
* (`criminal_record`, `criminal_charge`, `judicial_narrative`).
|
|
9541
|
+
* Article 10 governs "personal data relating to criminal
|
|
9542
|
+
* convictions and offences", processed only under authorized
|
|
9543
|
+
* official-authority control or specific Union/Member-State
|
|
9544
|
+
* law. Callers with criminal-justice adjacency (background-
|
|
9545
|
+
* check services, court-records handling, HR compliance) pick
|
|
9546
|
+
* this tier.
|
|
9547
|
+
*/
|
|
9548
|
+
GdprSensitiveScope: "article9" | "article9_with_reid_hardening" | "article9_and10";
|
|
9401
9549
|
/** @description Request to generate a shareable invite code for a workspace. */
|
|
9402
9550
|
GenerateInviteCode: {
|
|
9403
9551
|
/** @description When the invite code expires. */
|
|
@@ -9418,193 +9566,138 @@ interface components {
|
|
|
9418
9566
|
};
|
|
9419
9567
|
/** @description Operational status of a service component. */
|
|
9420
9568
|
HealthStatus: "healthy" | "degraded" | "unhealthy";
|
|
9569
|
+
/**
|
|
9570
|
+
* @description Which account-identifier labels §164.514(b)(2)(i)(J) covers.
|
|
9571
|
+
*
|
|
9572
|
+
* The regulation names "account numbers" without enumerating
|
|
9573
|
+
* them; HHS OCR's 2012 guidance doesn't narrow it either. In
|
|
9574
|
+
* practice, covered entities and de-ID vendors treat bank
|
|
9575
|
+
* accounts, IBANs, and payment cards as the core §(J) set -
|
|
9576
|
+
* [`Standard`](Self::Standard). Cryptocurrency wallet addresses
|
|
9577
|
+
* are the newer case: they identify a specific holder's account
|
|
9578
|
+
* by function, and the §(R) catch-all pulls in "any other unique
|
|
9579
|
+
* identifying number, characteristic, or code" tied to an
|
|
9580
|
+
* individual, which arguably captures them. Deployments where
|
|
9581
|
+
* crypto addresses can appear in patient-facing artifacts pick
|
|
9582
|
+
* [`Extended`](Self::Extended); deployments where they can't
|
|
9583
|
+
* stay on `Standard`.
|
|
9584
|
+
*
|
|
9585
|
+
* The compliant posture for anything account-shaped is
|
|
9586
|
+
* "remove"; the split is only about how broadly this template
|
|
9587
|
+
* pre-declares the account label scope. A caller who wants
|
|
9588
|
+
* broader coverage combines this template's policy with a
|
|
9589
|
+
* separate PII scope on the same request.
|
|
9590
|
+
*/
|
|
9591
|
+
HipaaAccountNumbers: "standard" | "extended";
|
|
9421
9592
|
/**
|
|
9422
9593
|
* @description Which HIPAA §164.514 de-identification method to apply.
|
|
9423
9594
|
*
|
|
9424
9595
|
* The tradeoff is analytic yield vs. downstream constraint:
|
|
9425
9596
|
*
|
|
9426
|
-
* - [`SafeHarbor`](Self::SafeHarbor)
|
|
9597
|
+
* - [`SafeHarbor`](Self::SafeHarbor): strips all eighteen
|
|
9427
9598
|
* identifier categories. No Data Use Agreement or statistician
|
|
9428
9599
|
* required, but dates, coarse geography, and ages ≥ 90 all
|
|
9429
9600
|
* disappear or collapse.
|
|
9430
|
-
* - [`LimitedDataSet`](Self::LimitedDataSet)
|
|
9601
|
+
* - [`LimitedDataSet`](Self::LimitedDataSet): narrower
|
|
9431
9602
|
* subtraction (§164.514(e)(2)) that keeps dates, town/city,
|
|
9432
9603
|
* state, ZIP, and ages verbatim. Suitable for research and
|
|
9433
9604
|
* public-health handoffs *only when* a Data Use Agreement
|
|
9434
9605
|
* governs the recipient's use.
|
|
9435
|
-
* - [`ExpertDetermination`](Self::ExpertDetermination)
|
|
9606
|
+
* - [`ExpertDetermination`](Self::ExpertDetermination) -
|
|
9436
9607
|
* starting scaffold for §164.514(b)(1). Same label set as
|
|
9437
9608
|
* Safe Harbor with pseudonymization as the default terminal
|
|
9438
9609
|
* (identity-preserving across mentions). **Does not certify
|
|
9439
|
-
* de-identification
|
|
9610
|
+
* de-identification**: a qualified statistician must
|
|
9440
9611
|
* document that re-identification risk is "very small" under
|
|
9441
9612
|
* the applicable methodology before the output can be treated
|
|
9442
9613
|
* as de-identified.
|
|
9443
9614
|
*/
|
|
9444
9615
|
HipaaDeidMethod: "safe_harbor" | "limited_data_set" | "expert_determination";
|
|
9445
9616
|
/**
|
|
9446
|
-
* @description
|
|
9447
|
-
*
|
|
9448
|
-
*
|
|
9449
|
-
*
|
|
9450
|
-
*
|
|
9451
|
-
*
|
|
9452
|
-
*
|
|
9453
|
-
* [`
|
|
9454
|
-
|
|
9455
|
-
|
|
9456
|
-
|
|
9457
|
-
|
|
9458
|
-
|
|
9459
|
-
|
|
9460
|
-
|
|
9461
|
-
|
|
9462
|
-
*
|
|
9463
|
-
*
|
|
9464
|
-
*
|
|
9465
|
-
*
|
|
9466
|
-
* `
|
|
9467
|
-
*
|
|
9468
|
-
*
|
|
9469
|
-
*
|
|
9470
|
-
*
|
|
9471
|
-
*
|
|
9472
|
-
* [`
|
|
9473
|
-
*
|
|
9474
|
-
* `
|
|
9475
|
-
|
|
9476
|
-
|
|
9477
|
-
|
|
9478
|
-
|
|
9479
|
-
|
|
9480
|
-
* [`Location`]: Modality::Location
|
|
9481
|
-
* [`Event`]: crate::entity::provenance::Event
|
|
9482
|
-
* [`provenance`]: Entity::provenance
|
|
9483
|
-
* [`location`]: Entity::location
|
|
9484
|
-
* [`confidence`]: Entity::confidence
|
|
9485
|
-
*/
|
|
9486
|
-
ImageEntity: {
|
|
9487
|
-
/** @description Effective confidence in `0.0..=1.0` (fused, if applicable). */
|
|
9488
|
-
confidence: components["schemas"]["Confidence"];
|
|
9489
|
-
/**
|
|
9490
|
-
* @description Coreference identifier, if a recognizer resolved this entity as one
|
|
9491
|
-
* mention of a cluster. Entities sharing an [`EntityCoRef`] denote the
|
|
9492
|
-
* same real-world thing.
|
|
9493
|
-
*/
|
|
9494
|
-
coref?: components["schemas"]["EntityCoRef"];
|
|
9495
|
-
/**
|
|
9496
|
-
* Format: uuid
|
|
9497
|
-
* @description Stable unique identity for this entity (time-ordered UUIDv7), minted
|
|
9498
|
-
* when the entity is assembled.
|
|
9499
|
-
*/
|
|
9500
|
-
id: string;
|
|
9501
|
-
/**
|
|
9502
|
-
* @description What kind of sensitive information this is (resolved via a
|
|
9503
|
-
* [`LabelCatalog`]).
|
|
9504
|
-
*/
|
|
9505
|
-
label: components["schemas"]["LabelRef"];
|
|
9506
|
-
/**
|
|
9507
|
-
* @description The language of this entity's surrounding text, when a recognizer
|
|
9508
|
-
* resolved one. `None` when unknown or language-agnostic.
|
|
9509
|
-
*/
|
|
9510
|
-
language?: string;
|
|
9511
|
-
/**
|
|
9512
|
-
* @description Location of the entity within the medium (fused, if it came from more
|
|
9513
|
-
* than one detection).
|
|
9514
|
-
*/
|
|
9515
|
-
location: components["schemas"]["ImageLocation"];
|
|
9516
|
-
/**
|
|
9517
|
-
* @description Detection audit trail: every contributing detection and the fusion
|
|
9518
|
-
* event, if any.
|
|
9617
|
+
* @description One node in an entity's audit DAG: a thing that happened, with its
|
|
9618
|
+
* effect on confidence and its tamper-evident links.
|
|
9619
|
+
*
|
|
9620
|
+
* Events are recorded on an entity's [`AuditLog`], forming the full audit
|
|
9621
|
+
* trail of its life: each recognizer that found it, the deduplication that
|
|
9622
|
+
* fused them, any score calibration, and the redaction that hid it. The
|
|
9623
|
+
* uniform spine (who, resulting score, when) is the same for every event; the
|
|
9624
|
+
* [`kind`] carries the event-specific detail *and* the explanation of why the
|
|
9625
|
+
* event happened.
|
|
9626
|
+
*
|
|
9627
|
+
* Each event links to its [`parents`] by their [`hash`]: a birth event (a
|
|
9628
|
+
* recognizer's first detection) has no parents, a normal step has one, and a
|
|
9629
|
+
* [fusion](crate::entity::audit::AuditLog::record_fusion) has several. Its own
|
|
9630
|
+
* [`hash`] folds the
|
|
9631
|
+
* payload together with the parents' hashes, so altering any event breaks
|
|
9632
|
+
* every event downstream of it: [`AuditLog::verify`] walks the DAG and
|
|
9633
|
+
* reports the first break.
|
|
9634
|
+
*
|
|
9635
|
+
* `entity.confidence` always equals the [`confidence`] of the most recent
|
|
9636
|
+
* event. The confidence *flowing in* is not stored: it is the parents'
|
|
9637
|
+
* [`confidence`], recovered from the DAG.
|
|
9638
|
+
*
|
|
9639
|
+
* [`AuditLog`]: crate::entity::audit::AuditLog
|
|
9640
|
+
* [`AuditLog::record_fusion`]: crate::entity::audit::AuditLog::record_fusion
|
|
9641
|
+
* [`AuditLog::verify`]: crate::entity::audit::AuditLog::verify
|
|
9642
|
+
* [`kind`]: AuditEvent::kind
|
|
9643
|
+
* [`parents`]: AuditEvent::parents
|
|
9644
|
+
* [`hash`]: AuditEvent::hash
|
|
9645
|
+
* [`confidence`]: AuditEvent::confidence
|
|
9646
|
+
*/
|
|
9647
|
+
ImageAuditEvent: {
|
|
9648
|
+
/**
|
|
9649
|
+
* @description Confidence after this event: the entity's effective confidence once it
|
|
9650
|
+
* has happened.
|
|
9519
9651
|
*/
|
|
9520
|
-
|
|
9652
|
+
confidence: components["schemas"]["Confidence"];
|
|
9521
9653
|
/**
|
|
9522
|
-
* @description
|
|
9523
|
-
*
|
|
9524
|
-
*
|
|
9525
|
-
* context lives (which OCR block, which speaker) that the geometric
|
|
9526
|
-
* [`location`] cannot hold. `None` for entities not found via text
|
|
9527
|
-
* recognition (e.g. a VLM box). Provenance, not a coordinate: redaction
|
|
9528
|
-
* uses [`location`]; an audit uses this with the artifact.
|
|
9654
|
+
* @description This event's hash, over its payload and its parents' hashes. Assigned by
|
|
9655
|
+
* [`AuditLog`] when the event is recorded; read it through
|
|
9656
|
+
* [`hash`](Self::hash). Recomputing it is how the DAG is verified.
|
|
9529
9657
|
*
|
|
9530
|
-
* [`
|
|
9531
|
-
|
|
9532
|
-
recognized_range?: components["schemas"]["Range_of_uint"];
|
|
9533
|
-
};
|
|
9534
|
-
/**
|
|
9535
|
-
* @description One recognized entity plus the optional reviewer override.
|
|
9536
|
-
*
|
|
9537
|
-
* The bound mirrors elide's [`Entity<M>`]: serialization needs
|
|
9538
|
-
* `M::Location` and `M::Data` (de)serializable, and JsonSchema
|
|
9539
|
-
* derivation needs them schema-able. All four modalities elide
|
|
9540
|
-
* ships satisfy these under the `serde` + `schema` features.
|
|
9541
|
-
*/
|
|
9542
|
-
ImageEntityRecord: {
|
|
9543
|
-
/** @description The elide entity, as recognition produced it. */
|
|
9544
|
-
entity: components["schemas"]["ImageEntity"];
|
|
9545
|
-
/**
|
|
9546
|
-
* @description Reviewer-supplied redaction override.
|
|
9658
|
+
* Not publicly settable: only [`AuditLog`] assigns it, so a caller cannot
|
|
9659
|
+
* forge a self-consistent event outside the recording path.
|
|
9547
9660
|
*
|
|
9548
|
-
* `
|
|
9549
|
-
* `Some(...)` overrides that rule for this specific entity
|
|
9550
|
-
* at apply time. Reviewer overrides take precedence over
|
|
9551
|
-
* every policy rule and inherit the authority of the
|
|
9552
|
-
* [`Review::policy_id`] they name — the audit event's
|
|
9553
|
-
* attribution stamps that policy so the trail names the
|
|
9554
|
-
* authority under which the override fired.
|
|
9661
|
+
* [`AuditLog`]: crate::entity::audit::AuditLog
|
|
9555
9662
|
*/
|
|
9556
|
-
|
|
9557
|
-
|
|
9558
|
-
|
|
9559
|
-
* @description One thing that happened to an entity, with its effect on confidence.
|
|
9560
|
-
*
|
|
9561
|
-
* Events are recorded in order on an entity's [`Provenance`], forming
|
|
9562
|
-
* the full audit trail of its life: each recognizer that found it, the
|
|
9563
|
-
* deduplication that fused them, any score calibration, and the
|
|
9564
|
-
* redaction that hid it. The uniform spine (who, before/after score,
|
|
9565
|
-
* when, why) is the same for every event; the [`kind`] carries the
|
|
9566
|
-
* event-specific detail.
|
|
9567
|
-
*
|
|
9568
|
-
* `entity.confidence` always equals the [`after`] of the most recent
|
|
9569
|
-
* event.
|
|
9570
|
-
*
|
|
9571
|
-
* [`Provenance`]: crate::entity::provenance::Provenance
|
|
9572
|
-
* [`kind`]: Event::kind
|
|
9573
|
-
* [`after`]: Event::after
|
|
9574
|
-
*/
|
|
9575
|
-
ImageEvent: {
|
|
9576
|
-
/** @description Confidence after this event. */
|
|
9577
|
-
after: components["schemas"]["Confidence"];
|
|
9578
|
-
/** @description When the event happened (UTC). */
|
|
9579
|
-
at: string;
|
|
9663
|
+
hash: components["schemas"]["AuditHash"];
|
|
9664
|
+
/** @description Kind of event, with its event-specific detail and its rationale. */
|
|
9665
|
+
kind: components["schemas"]["ImageAuditKind"];
|
|
9580
9666
|
/**
|
|
9581
|
-
* @description
|
|
9582
|
-
*
|
|
9667
|
+
* @description The events this one follows, by their hash. Empty for a birth event, one
|
|
9668
|
+
* entry for a normal step, several for a fusion. Assigned by [`AuditLog`]
|
|
9669
|
+
* when the event is recorded; read it through [`parents`](Self::parents).
|
|
9670
|
+
*
|
|
9671
|
+
* Not publicly settable: the links are the tamper-evident structure, so
|
|
9672
|
+
* only [`AuditLog::record`] / [`AuditLog::record_fusion`] assign them.
|
|
9673
|
+
*
|
|
9674
|
+
* [`AuditLog`]: crate::entity::audit::AuditLog
|
|
9675
|
+
* [`AuditLog::record`]: crate::entity::audit::AuditLog::record
|
|
9676
|
+
* [`AuditLog::record_fusion`]: crate::entity::audit::AuditLog::record_fusion
|
|
9583
9677
|
*/
|
|
9584
|
-
|
|
9585
|
-
/** @description Kind of event, with its event-specific detail. */
|
|
9586
|
-
kind: components["schemas"]["ImageEventKind"];
|
|
9587
|
-
/** @description Free-text explanation of what the event did and why. */
|
|
9588
|
-
reason: string;
|
|
9678
|
+
parents: components["schemas"]["AuditHash"][];
|
|
9589
9679
|
/**
|
|
9590
9680
|
* @description Who produced this event: a recognizer name, a deduplication strategy,
|
|
9591
9681
|
* an operator, or whatever acted.
|
|
9592
9682
|
*/
|
|
9593
9683
|
source: string;
|
|
9684
|
+
/** @description When the event happened (UTC). */
|
|
9685
|
+
timestamp: string;
|
|
9594
9686
|
};
|
|
9595
9687
|
/**
|
|
9596
|
-
* @description Kind of an [`
|
|
9688
|
+
* @description Kind of an [`AuditEvent`], carrying its event-specific detail and the
|
|
9689
|
+
* rationale for why it happened.
|
|
9597
9690
|
*
|
|
9598
9691
|
* `#[non_exhaustive]`: new event kinds (verification, annotation, …)
|
|
9599
9692
|
* can be added compatibly. The recognition kinds ([`Pattern`],
|
|
9600
9693
|
* [`Model`]) carry the matched [`Location`]; the rest carry their own
|
|
9601
9694
|
* data.
|
|
9602
9695
|
*
|
|
9603
|
-
* [`Pattern`]:
|
|
9604
|
-
* [`Model`]:
|
|
9696
|
+
* [`Pattern`]: AuditKind::Pattern
|
|
9697
|
+
* [`Model`]: AuditKind::Model
|
|
9605
9698
|
* [`Location`]: Modality::Location
|
|
9606
9699
|
*/
|
|
9607
|
-
|
|
9700
|
+
ImageAuditKind: {
|
|
9608
9701
|
/** @constant */
|
|
9609
9702
|
kind: "pattern";
|
|
9610
9703
|
/** @description Where the recognizer matched. */
|
|
@@ -9668,7 +9761,7 @@ interface components {
|
|
|
9668
9761
|
* it is the keyword resolved through the modality's [`locate`] (a
|
|
9669
9762
|
* pixel box for image, a time span for audio, the byte range for
|
|
9670
9763
|
* text/tabular). `None` when the keyword's stream range could not be
|
|
9671
|
-
* placed
|
|
9764
|
+
* placed, symmetric with a match the recognizer itself drops.
|
|
9672
9765
|
*
|
|
9673
9766
|
* [`locate`]: crate::modality::TextRecognizable::locate
|
|
9674
9767
|
*/
|
|
@@ -9686,12 +9779,174 @@ interface components {
|
|
|
9686
9779
|
/** @description How much the output leaks about the original. */
|
|
9687
9780
|
leak_profile: components["schemas"]["LeakProfile"];
|
|
9688
9781
|
/**
|
|
9689
|
-
* @description Which selection rule chose this operator
|
|
9782
|
+
* @description Which selection rule chose this operator: the automatic "why"
|
|
9690
9783
|
* (matched a label, a tag, a predicate, or the fallback).
|
|
9691
9784
|
*/
|
|
9692
9785
|
matched_by: components["schemas"]["RuleMatch"];
|
|
9693
9786
|
/** @description Which operator (name + version) ran. */
|
|
9694
9787
|
operator: components["schemas"]["OperatorId"];
|
|
9788
|
+
/**
|
|
9789
|
+
* @description BLAKE3 digest of the original text the operator hid, when the
|
|
9790
|
+
* redaction layer recorded it. Proves *what* was redacted without
|
|
9791
|
+
* storing the plaintext; `None` when the operator did not capture it.
|
|
9792
|
+
*/
|
|
9793
|
+
span_hash?: components["schemas"]["AuditHash"];
|
|
9794
|
+
/**
|
|
9795
|
+
* Format: uint32
|
|
9796
|
+
* @description Byte length of the original text the operator hid, paired with
|
|
9797
|
+
* [`span_hash`](Self::Redaction::span_hash). `None` when not captured.
|
|
9798
|
+
*/
|
|
9799
|
+
span_length?: number;
|
|
9800
|
+
};
|
|
9801
|
+
/**
|
|
9802
|
+
* @description Full audit trail of an [`Entity`]: every [`AuditEvent`] in its life, as a
|
|
9803
|
+
* tamper-evident DAG.
|
|
9804
|
+
*
|
|
9805
|
+
* Where Presidio keeps a shallow, optional, per-stage explanation that is
|
|
9806
|
+
* stripped by default, an `AuditLog` is always present and records the
|
|
9807
|
+
* entity's *entire* life: each recognizer that found it, the deduplication
|
|
9808
|
+
* that fused them, any confidence calibration, and the redaction that hid it.
|
|
9809
|
+
* Nothing is collapsed: every recognizer keeps its own recognition event with
|
|
9810
|
+
* its location and score.
|
|
9811
|
+
*
|
|
9812
|
+
* The events form a **directed acyclic graph**, not a flat list. A recognizer
|
|
9813
|
+
* records a birth event (no parents); each later step links to the event it
|
|
9814
|
+
* follows; and a [fusion](Self::record_fusion) links to *several* parents at
|
|
9815
|
+
* once: the heads of the trails it combines. This is the true shape of a
|
|
9816
|
+
* deduplicated entity: two recognizers are siblings, then a fusion joins them.
|
|
9817
|
+
* The events are stored in the order they were recorded, which is a
|
|
9818
|
+
* topological order of the DAG (a parent is always recorded before its
|
|
9819
|
+
* children).
|
|
9820
|
+
*
|
|
9821
|
+
* Two chains ride the DAG's edges:
|
|
9822
|
+
*
|
|
9823
|
+
* - a **confidence chain**, where each event's [`confidence`] is the entity's
|
|
9824
|
+
* effective score after it; the score flowing *in* is its parents'
|
|
9825
|
+
* confidence, so [`final_confidence`] and the full history are recoverable;
|
|
9826
|
+
* - a **hash chain**, where each event's [`hash`] folds its payload together
|
|
9827
|
+
* with its parents' hashes, so any edit, reorder, insertion, or deletion of
|
|
9828
|
+
* an earlier event breaks every event downstream. [`verify`] walks the DAG
|
|
9829
|
+
* and reports the first break.
|
|
9830
|
+
*
|
|
9831
|
+
* [`Entity`]: crate::entity::Entity
|
|
9832
|
+
* [`confidence`]: AuditEvent::confidence
|
|
9833
|
+
* [`hash`]: AuditEvent::hash
|
|
9834
|
+
* [`final_confidence`]: Self::final_confidence
|
|
9835
|
+
* [`verify`]: Self::verify
|
|
9836
|
+
*/
|
|
9837
|
+
ImageAuditLog: components["schemas"]["ImageAuditEvent"][];
|
|
9838
|
+
/**
|
|
9839
|
+
* @description Per-call payload a recognizer inspects for the [`Image`] modality.
|
|
9840
|
+
*
|
|
9841
|
+
* Carries the encoded bytes plus the pixel [`Dimensions`], which a
|
|
9842
|
+
* recognizer that emits unit-square boxes needs to scale them into pixel
|
|
9843
|
+
* coordinates. An optional filename aids diagnostics and encoding
|
|
9844
|
+
* inference.
|
|
9845
|
+
*
|
|
9846
|
+
* [`Image`]: super::Image
|
|
9847
|
+
*/
|
|
9848
|
+
ImageData: {
|
|
9849
|
+
/** @description Pixel dimensions of the encoded image. */
|
|
9850
|
+
dimensions: components["schemas"]["Dimensions"];
|
|
9851
|
+
/** @description Original filename, when known. */
|
|
9852
|
+
filename?: string;
|
|
9853
|
+
};
|
|
9854
|
+
/**
|
|
9855
|
+
* @description Detected piece of sensitive information within some medium.
|
|
9856
|
+
*
|
|
9857
|
+
* Generic over the [`Modality`] `M`, which is what makes the model
|
|
9858
|
+
* multimodal: a text pipeline yields `Entity<Text>`, an audio pipeline
|
|
9859
|
+
* `Entity<Audio>`, and so on. The entity's location is the modality's
|
|
9860
|
+
* [`Location`] type, `M::Location`.
|
|
9861
|
+
*
|
|
9862
|
+
* # Birth and fusion
|
|
9863
|
+
*
|
|
9864
|
+
* A recognizer emits an entity directly, carrying a single recognition
|
|
9865
|
+
* [`AuditEvent`] (its own finding) in the entity's [`audit`] trail. When
|
|
9866
|
+
* several recognizers find the same thing, a fusion step (in
|
|
9867
|
+
* `elide`) combines their entities into one: the survivor's
|
|
9868
|
+
* [`location`] and [`confidence`] are the *fused* values, and every
|
|
9869
|
+
* contributing recognition event, plus a deduplication event, is
|
|
9870
|
+
* retained in its audit trail. The entity therefore carries its full
|
|
9871
|
+
* audit trail with it.
|
|
9872
|
+
*
|
|
9873
|
+
* [`Location`]: Modality::Location
|
|
9874
|
+
* [`AuditEvent`]: crate::entity::audit::AuditEvent
|
|
9875
|
+
* [`audit`]: Entity::audit
|
|
9876
|
+
* [`location`]: Entity::location
|
|
9877
|
+
* [`confidence`]: Entity::confidence
|
|
9878
|
+
*/
|
|
9879
|
+
ImageEntity: {
|
|
9880
|
+
/**
|
|
9881
|
+
* @description Tamper-evident audit trail: every contributing detection, the fusion
|
|
9882
|
+
* event if any, and the redaction that hid it, as a hash-linked DAG.
|
|
9883
|
+
*/
|
|
9884
|
+
audit: components["schemas"]["ImageAuditLog"];
|
|
9885
|
+
/** @description Effective confidence in `0.0..=1.0` (fused, if applicable). */
|
|
9886
|
+
confidence: components["schemas"]["Confidence"];
|
|
9887
|
+
/**
|
|
9888
|
+
* @description Coreference identifier, if a recognizer resolved this entity as one
|
|
9889
|
+
* mention of a cluster. Entities sharing an [`EntityCoRef`] denote the
|
|
9890
|
+
* same real-world thing.
|
|
9891
|
+
*/
|
|
9892
|
+
coref?: components["schemas"]["EntityCoRef"];
|
|
9893
|
+
/**
|
|
9894
|
+
* Format: uuid
|
|
9895
|
+
* @description Stable unique identity for this entity (time-ordered UUIDv7), minted
|
|
9896
|
+
* when the entity is assembled.
|
|
9897
|
+
*/
|
|
9898
|
+
id: string;
|
|
9899
|
+
/**
|
|
9900
|
+
* @description What kind of sensitive information this is (resolved via a
|
|
9901
|
+
* [`LabelCatalog`]).
|
|
9902
|
+
*/
|
|
9903
|
+
label: components["schemas"]["LabelRef"];
|
|
9904
|
+
/**
|
|
9905
|
+
* @description The language of this entity's surrounding text, when a recognizer
|
|
9906
|
+
* resolved one. `None` when unknown or language-agnostic.
|
|
9907
|
+
*/
|
|
9908
|
+
language?: string;
|
|
9909
|
+
/**
|
|
9910
|
+
* @description Location of the entity within the medium (fused, if it came from more
|
|
9911
|
+
* than one detection).
|
|
9912
|
+
*/
|
|
9913
|
+
location: components["schemas"]["ImageLocation"];
|
|
9914
|
+
/**
|
|
9915
|
+
* @description Byte range of the match in the *recognized text* it was found in (the
|
|
9916
|
+
* OCR layout text, the audio transcript, or the text payload itself) —
|
|
9917
|
+
* the stable key back into that enrichment artifact, where the rich
|
|
9918
|
+
* context lives (which OCR block, which speaker) that the geometric
|
|
9919
|
+
* [`location`] cannot hold. `None` for entities not found via text
|
|
9920
|
+
* recognition (e.g. a VLM box). An audit key, not a coordinate: redaction
|
|
9921
|
+
* uses [`location`]; an audit uses this with the artifact.
|
|
9922
|
+
*
|
|
9923
|
+
* [`location`]: Entity::location
|
|
9924
|
+
*/
|
|
9925
|
+
recognized_range?: components["schemas"]["Range_of_uint"];
|
|
9926
|
+
};
|
|
9927
|
+
/**
|
|
9928
|
+
* @description One recognized entity plus the optional reviewer override.
|
|
9929
|
+
*
|
|
9930
|
+
* The bound mirrors elide's [`Entity<M>`]: serialization needs
|
|
9931
|
+
* `M::Location` and `M::Data` (de)serializable, and JsonSchema
|
|
9932
|
+
* derivation needs them schema-able. All four modalities elide
|
|
9933
|
+
* ships satisfy these under the `serde` + `schema` features.
|
|
9934
|
+
*/
|
|
9935
|
+
ImageEntityRecord: {
|
|
9936
|
+
/** @description The elide entity, as recognition produced it. */
|
|
9937
|
+
entity: components["schemas"]["ImageEntity"];
|
|
9938
|
+
/**
|
|
9939
|
+
* @description Reviewer-supplied redaction override.
|
|
9940
|
+
*
|
|
9941
|
+
* `None` means "use the matching policy rule's decision";
|
|
9942
|
+
* `Some(...)` overrides that rule for this specific entity
|
|
9943
|
+
* at apply time. Reviewer overrides take precedence over
|
|
9944
|
+
* every policy rule and inherit the authority of the
|
|
9945
|
+
* [`Review::policy_id`] they name: the audit event's
|
|
9946
|
+
* attribution stamps that policy so the trail names the
|
|
9947
|
+
* authority under which the override fired.
|
|
9948
|
+
*/
|
|
9949
|
+
review?: components["schemas"]["Review"];
|
|
9695
9950
|
};
|
|
9696
9951
|
/**
|
|
9697
9952
|
* @description Located, typed piece of context a recognizer may treat as in-context
|
|
@@ -9738,31 +9993,6 @@ interface components {
|
|
|
9738
9993
|
*/
|
|
9739
9994
|
polygon?: components["schemas"]["Polygon"];
|
|
9740
9995
|
};
|
|
9741
|
-
/**
|
|
9742
|
-
* @description Full audit trail of an [`Entity`]: every [`Event`] in its life, in
|
|
9743
|
-
* order.
|
|
9744
|
-
*
|
|
9745
|
-
* This is the model's answer to "full provenance": where Presidio keeps
|
|
9746
|
-
* a shallow, optional, per-stage explanation that is stripped by
|
|
9747
|
-
* default, a `Provenance` is always present and records the entity's
|
|
9748
|
-
* *entire* life as an ordered list of events: each recognizer that
|
|
9749
|
-
* found it, the deduplication that fused them, any confidence
|
|
9750
|
-
* calibration, and the redaction that hid it. Nothing is collapsed:
|
|
9751
|
-
* every recognizer keeps its own recognition event with its location
|
|
9752
|
-
* and score.
|
|
9753
|
-
*
|
|
9754
|
-
* The events form a confidence chain (each event's [`after`] is the
|
|
9755
|
-
* next's [`before`]) so the final confidence and its full history are
|
|
9756
|
-
* always recoverable.
|
|
9757
|
-
*
|
|
9758
|
-
* [`Entity`]: crate::entity::Entity
|
|
9759
|
-
* [`after`]: Event::after
|
|
9760
|
-
* [`before`]: Event::before
|
|
9761
|
-
*/
|
|
9762
|
-
ImageProvenance: {
|
|
9763
|
-
/** @description Events, in the order they happened. */
|
|
9764
|
-
events: components["schemas"]["ImageEvent"][];
|
|
9765
|
-
};
|
|
9766
9996
|
/** @description Operator spec a `redact` image rule carries. */
|
|
9767
9997
|
ImageRedaction: {
|
|
9768
9998
|
/** @constant */
|
|
@@ -9947,7 +10177,7 @@ interface components {
|
|
|
9947
10177
|
InviteStatus: "pending" | "accepted" | "declined" | "canceled" | "expired" | "revoked";
|
|
9948
10178
|
/**
|
|
9949
10179
|
* @description Kind of sensitive information: a stable [`id`], per-language
|
|
9950
|
-
* [`LabelLocale`]s, and zero or more tags.
|
|
10180
|
+
* [`LabelLocale`]s, an optional [`category`], and zero or more tags.
|
|
9951
10181
|
*
|
|
9952
10182
|
* # Identity
|
|
9953
10183
|
*
|
|
@@ -9965,18 +10195,25 @@ interface components {
|
|
|
9965
10195
|
* text — NER and LLM read the analysis language's name and description to
|
|
9966
10196
|
* prompt the model, keyed by the stable id.
|
|
9967
10197
|
*
|
|
9968
|
-
* #
|
|
10198
|
+
* # Category and tags
|
|
10199
|
+
*
|
|
10200
|
+
* [`category`] is the single coarse group a label belongs to (`financial`,
|
|
10201
|
+
* `health`, `identity`, …), for organizing detected entities by kind. Built-in
|
|
10202
|
+
* labels ship with one; a custom label has none unless set.
|
|
9969
10203
|
*
|
|
9970
|
-
* [`tags`] is a free-form list of
|
|
9971
|
-
*
|
|
9972
|
-
* `
|
|
9973
|
-
*
|
|
10204
|
+
* [`tags`] is a free-form list of *cross-cutting* markers a policy selector
|
|
10205
|
+
* matches against — sensitivity flags a label may carry several of (`pii`,
|
|
10206
|
+
* `phi`, `pci`, `sad`, `secret`). Distinct from the category: a label has at
|
|
10207
|
+
* most one category but any number of tags. Custom labels can ship with zero
|
|
10208
|
+
* of either.
|
|
9974
10209
|
*
|
|
9975
10210
|
* [`id`]: Label::id
|
|
9976
10211
|
* [`localization`]: Label::localization
|
|
10212
|
+
* [`category`]: Label::category
|
|
9977
10213
|
* [`tags`]: Label::tags
|
|
9978
10214
|
*/
|
|
9979
10215
|
Label: {
|
|
10216
|
+
category?: components["schemas"]["Category"];
|
|
9980
10217
|
id: string;
|
|
9981
10218
|
localizations: components["schemas"]["LocalizedText"];
|
|
9982
10219
|
tags: string[];
|
|
@@ -10019,27 +10256,32 @@ interface components {
|
|
|
10019
10256
|
* rule that targets that list references the group by name
|
|
10020
10257
|
* instead of respelling the labels. When elide adds a new label
|
|
10021
10258
|
* to a category, extending the group covers every rule that
|
|
10022
|
-
* referenced it
|
|
10023
|
-
*
|
|
10024
|
-
* **Compilation**:
|
|
10025
|
-
* `group
|
|
10026
|
-
* group
|
|
10027
|
-
*
|
|
10028
|
-
*
|
|
10029
|
-
*
|
|
10030
|
-
* per-request walk over group membership. Scoping the tag by
|
|
10031
|
-
* `policy_id` keeps two policies that both declare `hipaa_18`
|
|
10032
|
-
* with different labelsets from stepping on each other.
|
|
10259
|
+
* referenced it: no rule edit.
|
|
10260
|
+
*
|
|
10261
|
+
* **Compilation**: groups stay on the policy. Evaluating a
|
|
10262
|
+
* [`Predicate::LabelInGroup { group }`] looks the name up in
|
|
10263
|
+
* the policy's own group table and tests the entity's label for
|
|
10264
|
+
* membership. Nothing is stamped onto the label catalog, so two
|
|
10265
|
+
* policies that both declare `hipaa_18` with different labelsets
|
|
10266
|
+
* cannot step on each other.
|
|
10033
10267
|
*
|
|
10034
10268
|
* **Unknown group names error at request validation**, not at
|
|
10035
10269
|
* apply time. A typo doesn't silently underfire.
|
|
10036
10270
|
*
|
|
10037
10271
|
* [`PolicyDefinition`]: super::PolicyDefinition
|
|
10038
|
-
* [`Predicate::LabelInGroup`]:
|
|
10039
|
-
* [`Predicate::LabelInGroup { group }`]:
|
|
10040
|
-
* [`Predicate::TagOneOf { tags: ["group:<policy_id>:<name>"] }`]: super::predicate::Predicate::TagOneOf
|
|
10272
|
+
* [`Predicate::LabelInGroup`]: crate::Predicate::LabelInGroup
|
|
10273
|
+
* [`Predicate::LabelInGroup { group }`]: crate::Predicate::LabelInGroup
|
|
10041
10274
|
*/
|
|
10042
10275
|
LabelGroup: {
|
|
10276
|
+
/**
|
|
10277
|
+
* @description Why this cluster exists: the authority that defines it.
|
|
10278
|
+
*
|
|
10279
|
+
* A group usually maps to one regulatory category (HIPAA's
|
|
10280
|
+
* eighteen identifiers, GDPR Article 9(1)'s nine special
|
|
10281
|
+
* categories), so this is where that mapping is recorded as
|
|
10282
|
+
* data rather than prose.
|
|
10283
|
+
*/
|
|
10284
|
+
attribution?: components["schemas"]["AttributionKind"];
|
|
10043
10285
|
/** @description Optional description for reviewers. */
|
|
10044
10286
|
description?: string;
|
|
10045
10287
|
/**
|
|
@@ -10047,7 +10289,7 @@ interface components {
|
|
|
10047
10289
|
*
|
|
10048
10290
|
* A label that doesn't appear in the request's compiled
|
|
10049
10291
|
* [`LabelCatalog`] is silently skipped at tag-synthesis time
|
|
10050
|
-
*
|
|
10292
|
+
* : a group can safely list labels the current build
|
|
10051
10293
|
* doesn't emit (e.g. modality-gated ones); rules keyed off
|
|
10052
10294
|
* the group still fire on whatever labels *are* present.
|
|
10053
10295
|
*
|
|
@@ -10058,11 +10300,10 @@ interface components {
|
|
|
10058
10300
|
* @description Stable name a [`Predicate::LabelInGroup`] references.
|
|
10059
10301
|
*
|
|
10060
10302
|
* Free-form; a policy layer picks the vocabulary. Recommend
|
|
10061
|
-
* snake_case identifiers (`hipaa_18`, `gdpr_article_9`)
|
|
10062
|
-
* they
|
|
10063
|
-
* read cleanly in audit provenance.
|
|
10303
|
+
* snake_case identifiers (`hipaa_18`, `gdpr_article_9`) -
|
|
10304
|
+
* they read cleanly in audit provenance.
|
|
10064
10305
|
*
|
|
10065
|
-
* [`Predicate::LabelInGroup`]:
|
|
10306
|
+
* [`Predicate::LabelInGroup`]: crate::Predicate::LabelInGroup
|
|
10066
10307
|
*/
|
|
10067
10308
|
name: string;
|
|
10068
10309
|
};
|
|
@@ -10109,8 +10350,9 @@ interface components {
|
|
|
10109
10350
|
/**
|
|
10110
10351
|
* @description Builtin label names to enable.
|
|
10111
10352
|
*
|
|
10112
|
-
* E.g. `"email_address"`, `"phone_number"`.
|
|
10113
|
-
*
|
|
10353
|
+
* E.g. `"email_address"`, `"phone_number"`. An unknown name
|
|
10354
|
+
* is rejected at request compile time: a typo fails loudly
|
|
10355
|
+
* rather than quietly dropping the label from the policy.
|
|
10114
10356
|
*/
|
|
10115
10357
|
builtins?: components["schemas"]["LabelRef"][];
|
|
10116
10358
|
/** @description Custom labels defined inline by the caller. */
|
|
@@ -10527,33 +10769,6 @@ interface components {
|
|
|
10527
10769
|
/** @description Whether to send email notifications. */
|
|
10528
10770
|
notifyViaEmail: boolean;
|
|
10529
10771
|
};
|
|
10530
|
-
/**
|
|
10531
|
-
* @description Policy for turning a document's pages into images for OCR.
|
|
10532
|
-
*
|
|
10533
|
-
* A born-digital PDF has a selectable text layer and needs no OCR; a
|
|
10534
|
-
* scanned one is image-only and must be rendered to images first. [`Auto`]
|
|
10535
|
-
* is the right default — extract text, render only what lacks it — but the
|
|
10536
|
-
* text-layer parser that drives that decision is not in place yet, so today
|
|
10537
|
-
* only [`Force`] actually renders.
|
|
10538
|
-
*
|
|
10539
|
-
* Serializes with an internal `kind` tag (`{"kind": "auto"}`,
|
|
10540
|
-
* `{"kind": "force", "dpi": 300}`, `{"kind": "never"}`).
|
|
10541
|
-
*
|
|
10542
|
-
* [`Auto`]: OcrMode::Auto
|
|
10543
|
-
* [`Force`]: OcrMode::Force
|
|
10544
|
-
*/
|
|
10545
|
-
OcrMode: {
|
|
10546
|
-
/** @constant */
|
|
10547
|
-
kind: "auto";
|
|
10548
|
-
} | {
|
|
10549
|
-
/** @description Resolution to render pages at; [`Dpi::OCR`] (300) is typical. */
|
|
10550
|
-
dpi: components["schemas"]["Dpi"];
|
|
10551
|
-
/** @constant */
|
|
10552
|
-
kind: "force";
|
|
10553
|
-
} | {
|
|
10554
|
-
/** @constant */
|
|
10555
|
-
kind: "never";
|
|
10556
|
-
};
|
|
10557
10772
|
/**
|
|
10558
10773
|
* @description How a workspace's documents are turned into images for OCR during detection.
|
|
10559
10774
|
*
|
|
@@ -10601,12 +10816,12 @@ interface components {
|
|
|
10601
10816
|
/**
|
|
10602
10817
|
* @description Which PCI DSS subsection this template addresses.
|
|
10603
10818
|
*
|
|
10604
|
-
* - [`PanRender`](Self::PanRender)
|
|
10819
|
+
* - [`PanRender`](Self::PanRender): §3.5.1 render posture for
|
|
10605
10820
|
* stored Primary Account Numbers. Carries a [`PciPanRender`]
|
|
10606
10821
|
* picking between the shipped render approaches.
|
|
10607
|
-
* - [`SavErase`](Self::SavErase)
|
|
10822
|
+
* - [`SavErase`](Self::SavErase): §3.3.1 prohibition on
|
|
10608
10823
|
* storing Sensitive Authentication Data (CVV/CVC, track data,
|
|
10609
|
-
* PIN blocks) after authorization. No options
|
|
10824
|
+
* PIN blocks) after authorization. No options: SAV has one
|
|
10610
10825
|
* posture: erase.
|
|
10611
10826
|
*/
|
|
10612
10827
|
PciDssPart: {
|
|
@@ -10643,7 +10858,7 @@ interface components {
|
|
|
10643
10858
|
* Callers wanting more than one dispatched from one policy
|
|
10644
10859
|
* compose multiple templates.
|
|
10645
10860
|
*
|
|
10646
|
-
* [`Engine::with_key_provider`]: https://docs.rs/
|
|
10861
|
+
* [`Engine::with_key_provider`]: https://docs.rs/elide-pipeline/latest/elide_pipeline/struct.Engine.html
|
|
10647
10862
|
*/
|
|
10648
10863
|
PciPanRender: "truncate" | "truncate_last_four" | "hmac_sha256" | "hmac_sha512";
|
|
10649
10864
|
/** @description Pipeline response. */
|
|
@@ -11015,24 +11230,19 @@ interface components {
|
|
|
11015
11230
|
/**
|
|
11016
11231
|
* @description Named clusters of [`LabelRef`]s this policy's rules may
|
|
11017
11232
|
* reference by name via [`Predicate::LabelInGroup`]. Scoped
|
|
11018
|
-
* to this policy
|
|
11233
|
+
* to this policy: a rule can only name a group its own
|
|
11019
11234
|
* policy declared; unknown references error at request
|
|
11020
11235
|
* validation. Two policies that both declare `hipaa_18` with
|
|
11021
11236
|
* different labelsets stay independent.
|
|
11022
11237
|
*
|
|
11023
11238
|
* [`LabelRef`]: elide_core::entity::LabelRef
|
|
11024
|
-
* [`Predicate::LabelInGroup`]:
|
|
11239
|
+
* [`Predicate::LabelInGroup`]: crate::Predicate::LabelInGroup
|
|
11025
11240
|
*/
|
|
11026
11241
|
groups?: components["schemas"]["LabelGroup"][];
|
|
11027
11242
|
/**
|
|
11028
11243
|
* Format: uuid
|
|
11029
11244
|
* @description Stable identifier. UUIDv7 recommended (time-ordered);
|
|
11030
11245
|
* customer-supplied so re-submissions carry the same id.
|
|
11031
|
-
* Engine stamps this into the redaction event's
|
|
11032
|
-
* [`Attribution::name`] so reviewers can find this policy
|
|
11033
|
-
* from any redaction it drove.
|
|
11034
|
-
*
|
|
11035
|
-
* [`Attribution::name`]: elide_core::entity::provenance::Attribution::name
|
|
11036
11246
|
*/
|
|
11037
11247
|
id: string;
|
|
11038
11248
|
/**
|
|
@@ -11043,10 +11253,56 @@ interface components {
|
|
|
11043
11253
|
* tag-based [`Predicate::TagOneOf`] matching.
|
|
11044
11254
|
*
|
|
11045
11255
|
* [`LabelCatalog`]: elide_core::entity::LabelCatalog
|
|
11046
|
-
* [`Predicate::TagOneOf`]:
|
|
11256
|
+
* [`Predicate::TagOneOf`]: crate::Predicate::TagOneOf
|
|
11257
|
+
*/
|
|
11258
|
+
labels?: components["schemas"]["Labels"];
|
|
11259
|
+
/**
|
|
11260
|
+
* @description Human-readable name. Display-only. Does not key anything.
|
|
11261
|
+
*
|
|
11262
|
+
* Names the policy in a redaction event's [`Attribution`]
|
|
11263
|
+
* when a rule that fired carried no [`AttributionKind::Cited`]
|
|
11264
|
+
* attribution to render.
|
|
11265
|
+
*
|
|
11266
|
+
* [`Attribution`]: elide_core::entity::audit::Attribution
|
|
11267
|
+
* [`AttributionKind::Cited`]: elide_core::entity::audit::AttributionKind::Cited
|
|
11268
|
+
*/
|
|
11269
|
+
name: string;
|
|
11270
|
+
/** @description Ordered rules. First match wins within this policy. */
|
|
11271
|
+
rules?: components["schemas"]["PolicyRule"][];
|
|
11272
|
+
/**
|
|
11273
|
+
* @description The shipped template this policy was built from, when it
|
|
11274
|
+
* was.
|
|
11275
|
+
*
|
|
11276
|
+
* Provenance, not fidelity: callers are expected to mutate a
|
|
11277
|
+
* template's policy before submitting, so this records where
|
|
11278
|
+
* the policy came from and says nothing about whether it
|
|
11279
|
+
* still matches. `None` means hand-authored.
|
|
11280
|
+
*/
|
|
11281
|
+
template?: components["schemas"]["TemplateOrigin"];
|
|
11282
|
+
};
|
|
11283
|
+
/**
|
|
11284
|
+
* @description A client-authored policy body: the parts of a policy definition a caller may
|
|
11285
|
+
* set, without the fields the server owns.
|
|
11286
|
+
*
|
|
11287
|
+
* The engine's `PolicyDefinition` also carries an `id` and a `template` origin.
|
|
11288
|
+
* Both are server-owned — the `id` is minted at creation and the `template`
|
|
11289
|
+
* records which built-in a policy was seeded from (provenance). Neither is
|
|
11290
|
+
* representable here, so a client cannot mint ids or forge provenance; the
|
|
11291
|
+
* server stamps them in [`into_definition`](PolicyDraft::into_definition).
|
|
11292
|
+
*/
|
|
11293
|
+
PolicyDraft: {
|
|
11294
|
+
/** @description Optional description for reviewers. */
|
|
11295
|
+
description?: string;
|
|
11296
|
+
/** @description Per-policy catch-all, fired when no rule matched. */
|
|
11297
|
+
fallback?: components["schemas"]["ModalityRedactions"];
|
|
11298
|
+
/** @description Named clusters of labels this policy's rules may reference by name. */
|
|
11299
|
+
groups?: components["schemas"]["LabelGroup"][];
|
|
11300
|
+
/**
|
|
11301
|
+
* @description Vocabulary the policy operates over: builtins picked by name plus
|
|
11302
|
+
* caller-authored custom label schemas.
|
|
11047
11303
|
*/
|
|
11048
11304
|
labels?: components["schemas"]["Labels"];
|
|
11049
|
-
/** @description Human-readable name. Display-only.
|
|
11305
|
+
/** @description Human-readable name. Display-only. */
|
|
11050
11306
|
name: string;
|
|
11051
11307
|
/** @description Ordered rules. First match wins within this policy. */
|
|
11052
11308
|
rules?: components["schemas"]["PolicyRule"][];
|
|
@@ -11071,16 +11327,30 @@ interface components {
|
|
|
11071
11327
|
* [`PolicyDefinition`]: super::PolicyDefinition
|
|
11072
11328
|
*/
|
|
11073
11329
|
PolicyRule: {
|
|
11330
|
+
/**
|
|
11331
|
+
* @description Why this rule exists: the authority it answers to.
|
|
11332
|
+
*
|
|
11333
|
+
* The engine renders it into the redaction event's
|
|
11334
|
+
* [`Attribution`], so a reviewer sees the provision rather
|
|
11335
|
+
* than a bare UUID. `None` falls back to recording the
|
|
11336
|
+
* policy and rule ids alone.
|
|
11337
|
+
*
|
|
11338
|
+
* Optional so ad-hoc and hand-authored rules stay cheap to
|
|
11339
|
+
* write; the shipped templates set it on every rule.
|
|
11340
|
+
*
|
|
11341
|
+
* [`Attribution`]: elide_core::entity::audit::Attribution
|
|
11342
|
+
*/
|
|
11343
|
+
attribution?: components["schemas"]["AttributionKind"];
|
|
11074
11344
|
/** @description Optional description for reviewers. */
|
|
11075
11345
|
description?: string;
|
|
11076
11346
|
/**
|
|
11077
11347
|
* Format: uuid
|
|
11078
11348
|
* @description Stable identifier. UUIDv7 recommended. Engine stamps it
|
|
11079
|
-
* into the redaction event's [`Attribution::
|
|
11349
|
+
* into the redaction event's [`Attribution::source_id`] so
|
|
11080
11350
|
* reviewers can trace which rule fired. Every attachment a
|
|
11081
11351
|
* [`RuleDispatch::Table`] expands into shares this UUID.
|
|
11082
11352
|
*
|
|
11083
|
-
* [`Attribution::
|
|
11353
|
+
* [`Attribution::source_id`]: elide_core::entity::audit::Attribution::source_id
|
|
11084
11354
|
*/
|
|
11085
11355
|
id: string;
|
|
11086
11356
|
/** @description Human-readable name. Display-only. */
|
|
@@ -11093,7 +11363,7 @@ interface components {
|
|
|
11093
11363
|
* policy in the chain).
|
|
11094
11364
|
*
|
|
11095
11365
|
* Boxed to keep [`RuleDispatch`]'s stack footprint
|
|
11096
|
-
* small
|
|
11366
|
+
* small: [`ModalityRedactions`] carries four optional
|
|
11097
11367
|
* per-modality operator enums and dominates the variant
|
|
11098
11368
|
* size. `Table`'s `Vec<LabelEntry>` already heap-allocates
|
|
11099
11369
|
* its entries, so boxing here keeps the two variants
|
|
@@ -11173,6 +11443,15 @@ interface components {
|
|
|
11173
11443
|
* `{"kind": "pci_dss_pan", "render": "hmac_sha256"}`.
|
|
11174
11444
|
*/
|
|
11175
11445
|
PolicyTemplate: {
|
|
11446
|
+
/**
|
|
11447
|
+
* @description Which §(J) account-identifier labels to remove. Defaults
|
|
11448
|
+
* to [`HipaaAccountNumbers::Standard`] (bank account +
|
|
11449
|
+
* IBAN + payment card). Pick
|
|
11450
|
+
* [`HipaaAccountNumbers::Extended`] to add crypto wallet
|
|
11451
|
+
* addresses under the §(R) catch-all reading.
|
|
11452
|
+
* @default standard
|
|
11453
|
+
*/
|
|
11454
|
+
accounts: components["schemas"]["HipaaAccountNumbers"];
|
|
11176
11455
|
/** @constant */
|
|
11177
11456
|
kind: "hipaa_deidentification";
|
|
11178
11457
|
/**
|
|
@@ -11184,7 +11463,18 @@ interface components {
|
|
|
11184
11463
|
/** @constant */
|
|
11185
11464
|
kind: "gdpr_article9";
|
|
11186
11465
|
/**
|
|
11187
|
-
* @description Which
|
|
11466
|
+
* @description Which sensitive-data labels to cover. Defaults to
|
|
11467
|
+
* [`GdprSensitiveScope::Article9`] (nine Article 9(1)
|
|
11468
|
+
* categories only). Pick
|
|
11469
|
+
* [`GdprSensitiveScope::Article9WithReidHardening`] to add
|
|
11470
|
+
* the quasi-identifier set, or
|
|
11471
|
+
* [`GdprSensitiveScope::Article9And10`] to also cover
|
|
11472
|
+
* Article 10 criminal-justice data.
|
|
11473
|
+
* @default article9
|
|
11474
|
+
*/
|
|
11475
|
+
scope: components["schemas"]["GdprSensitiveScope"];
|
|
11476
|
+
/**
|
|
11477
|
+
* @description Which operator to apply to matches. See
|
|
11188
11478
|
* [`GdprArticle9Treatment`] for the tradeoff.
|
|
11189
11479
|
*/
|
|
11190
11480
|
treatment: components["schemas"]["GdprArticle9Treatment"];
|
|
@@ -11286,6 +11576,33 @@ interface components {
|
|
|
11286
11576
|
/** Format: uint */
|
|
11287
11577
|
start: number;
|
|
11288
11578
|
};
|
|
11579
|
+
/**
|
|
11580
|
+
* @description Policy for rendering a document's pages to images.
|
|
11581
|
+
*
|
|
11582
|
+
* [`Auto`] is the default: use the text layer where it exists (redact by
|
|
11583
|
+
* deleting glyphs) and render only where it is absent. [`Always`] renders
|
|
11584
|
+
* every page regardless of the text layer, for documents whose text is
|
|
11585
|
+
* missing, garbled, or a watermark. [`Never`] relies on the text layer only.
|
|
11586
|
+
*
|
|
11587
|
+
* Serializes with an internal `kind` tag (`{"kind": "auto"}`,
|
|
11588
|
+
* `{"kind": "always", "dpi": 300}`, `{"kind": "never"}`).
|
|
11589
|
+
*
|
|
11590
|
+
* [`Auto`]: RasterMode::Auto
|
|
11591
|
+
* [`Always`]: RasterMode::Always
|
|
11592
|
+
* [`Never`]: RasterMode::Never
|
|
11593
|
+
*/
|
|
11594
|
+
RasterMode: {
|
|
11595
|
+
/** @constant */
|
|
11596
|
+
kind: "auto";
|
|
11597
|
+
} | {
|
|
11598
|
+
/** @description Resolution to render pages at; [`Dpi::OCR`] (300) is typical. */
|
|
11599
|
+
dpi: components["schemas"]["Dpi"];
|
|
11600
|
+
/** @constant */
|
|
11601
|
+
kind: "always";
|
|
11602
|
+
} | {
|
|
11603
|
+
/** @constant */
|
|
11604
|
+
kind: "never";
|
|
11605
|
+
};
|
|
11289
11606
|
/** @description The engine's registered recognizers, grouped by kind. */
|
|
11290
11607
|
RecognizerCatalog: {
|
|
11291
11608
|
/** @description LLM recognizers. */
|
|
@@ -11304,20 +11621,28 @@ interface components {
|
|
|
11304
11621
|
*
|
|
11305
11622
|
* Owned rather than borrowing from the engine so callers can
|
|
11306
11623
|
* carry the value past the borrow that produced it. Cloning is
|
|
11307
|
-
* cheap
|
|
11624
|
+
* cheap: [`HipStr`] shares the backing string via an `Arc`
|
|
11308
11625
|
* header.
|
|
11309
11626
|
*/
|
|
11310
11627
|
RegisteredRecognizer: {
|
|
11311
11628
|
/** @description Optional human-readable description. */
|
|
11312
11629
|
description?: string;
|
|
11313
11630
|
/**
|
|
11314
|
-
* @description Recognizer name
|
|
11631
|
+
* @description Recognizer name: the identifier a request's allowlist
|
|
11315
11632
|
* picks by.
|
|
11316
11633
|
*/
|
|
11317
11634
|
name: string;
|
|
11318
11635
|
/**
|
|
11319
11636
|
* @description Provider slug. NER: `"bento"`, `"mock"`. LLM: `"openai"`,
|
|
11320
11637
|
* `"anthropic"`, `"gemini"`, `"ollama"`, `"mock"`.
|
|
11638
|
+
*
|
|
11639
|
+
* Owned so the type deserializes from a runtime buffer: a
|
|
11640
|
+
* `&'static str` field would make the derive emit
|
|
11641
|
+
* `Deserialize<'static>` only, which compiles against string
|
|
11642
|
+
* literals but not against an owned `String` or a reader -
|
|
11643
|
+
* the shapes a host actually decodes from. Borrowing a
|
|
11644
|
+
* `&'static str` into a [`HipStr`] does not allocate, so
|
|
11645
|
+
* engine-side construction stays free.
|
|
11321
11646
|
*/
|
|
11322
11647
|
provider: string;
|
|
11323
11648
|
};
|
|
@@ -11398,7 +11723,7 @@ interface components {
|
|
|
11398
11723
|
* @description A reviewer-supplied redaction override with the policy
|
|
11399
11724
|
* authority it draws from.
|
|
11400
11725
|
*
|
|
11401
|
-
* The `policy_id` isn't just for audit
|
|
11726
|
+
* The `policy_id` isn't just for audit: it also picks which
|
|
11402
11727
|
* per-policy pseudonym vault and per-policy [`KeyProvider`] the
|
|
11403
11728
|
* override's operator resolves against, so an override using
|
|
11404
11729
|
* [`Pseudonymize`] or [`HmacHash`] stays consistent with the
|
|
@@ -11422,7 +11747,7 @@ interface components {
|
|
|
11422
11747
|
* the anonymize request. The audit event stamps this UUID
|
|
11423
11748
|
* as the attribution `name`.
|
|
11424
11749
|
*
|
|
11425
|
-
* [`PolicyDefinition`]:
|
|
11750
|
+
* [`PolicyDefinition`]: elide_governance::PolicyDefinition
|
|
11426
11751
|
*/
|
|
11427
11752
|
policyId: string;
|
|
11428
11753
|
};
|
|
@@ -11439,7 +11764,7 @@ interface components {
|
|
|
11439
11764
|
* closure into provenance, so [`Predicate`] records only that a predicate
|
|
11440
11765
|
* matched, not which one.
|
|
11441
11766
|
*
|
|
11442
|
-
* [`Redaction`]: crate::entity::
|
|
11767
|
+
* [`Redaction`]: crate::entity::audit::AuditKind::Redaction
|
|
11443
11768
|
* [`Predicate`]: RuleMatch::Predicate
|
|
11444
11769
|
*/
|
|
11445
11770
|
RuleMatch: {
|
|
@@ -11781,152 +12106,90 @@ interface components {
|
|
|
11781
12106
|
reportId?: string;
|
|
11782
12107
|
};
|
|
11783
12108
|
/**
|
|
11784
|
-
* @description
|
|
12109
|
+
* @description One node in an entity's audit DAG: a thing that happened, with its
|
|
12110
|
+
* effect on confidence and its tamper-evident links.
|
|
11785
12111
|
*
|
|
11786
|
-
*
|
|
11787
|
-
*
|
|
11788
|
-
*
|
|
11789
|
-
*
|
|
12112
|
+
* Events are recorded on an entity's [`AuditLog`], forming the full audit
|
|
12113
|
+
* trail of its life: each recognizer that found it, the deduplication that
|
|
12114
|
+
* fused them, any score calibration, and the redaction that hid it. The
|
|
12115
|
+
* uniform spine (who, resulting score, when) is the same for every event; the
|
|
12116
|
+
* [`kind`] carries the event-specific detail *and* the explanation of why the
|
|
12117
|
+
* event happened.
|
|
11790
12118
|
*
|
|
11791
|
-
*
|
|
12119
|
+
* Each event links to its [`parents`] by their [`hash`]: a birth event (a
|
|
12120
|
+
* recognizer's first detection) has no parents, a normal step has one, and a
|
|
12121
|
+
* [fusion](crate::entity::audit::AuditLog::record_fusion) has several. Its own
|
|
12122
|
+
* [`hash`] folds the
|
|
12123
|
+
* payload together with the parents' hashes, so altering any event breaks
|
|
12124
|
+
* every event downstream of it: [`AuditLog::verify`] walks the DAG and
|
|
12125
|
+
* reports the first break.
|
|
11792
12126
|
*
|
|
11793
|
-
*
|
|
11794
|
-
*
|
|
11795
|
-
*
|
|
11796
|
-
* `elide`) combines their entities into one: the survivor's
|
|
11797
|
-
* [`location`] and [`confidence`] are the *fused* values, and every
|
|
11798
|
-
* contributing recognition event, plus a deduplication event, is
|
|
11799
|
-
* retained in its provenance. The entity therefore carries its full
|
|
11800
|
-
* audit trail with it.
|
|
12127
|
+
* `entity.confidence` always equals the [`confidence`] of the most recent
|
|
12128
|
+
* event. The confidence *flowing in* is not stored: it is the parents'
|
|
12129
|
+
* [`confidence`], recovered from the DAG.
|
|
11801
12130
|
*
|
|
11802
|
-
* [`
|
|
11803
|
-
* [`
|
|
11804
|
-
* [`
|
|
11805
|
-
* [`
|
|
11806
|
-
* [`
|
|
12131
|
+
* [`AuditLog`]: crate::entity::audit::AuditLog
|
|
12132
|
+
* [`AuditLog::record_fusion`]: crate::entity::audit::AuditLog::record_fusion
|
|
12133
|
+
* [`AuditLog::verify`]: crate::entity::audit::AuditLog::verify
|
|
12134
|
+
* [`kind`]: AuditEvent::kind
|
|
12135
|
+
* [`parents`]: AuditEvent::parents
|
|
12136
|
+
* [`hash`]: AuditEvent::hash
|
|
12137
|
+
* [`confidence`]: AuditEvent::confidence
|
|
11807
12138
|
*/
|
|
11808
|
-
|
|
11809
|
-
/** @description Effective confidence in `0.0..=1.0` (fused, if applicable). */
|
|
11810
|
-
confidence: components["schemas"]["Confidence"];
|
|
11811
|
-
/**
|
|
11812
|
-
* @description Coreference identifier, if a recognizer resolved this entity as one
|
|
11813
|
-
* mention of a cluster. Entities sharing an [`EntityCoRef`] denote the
|
|
11814
|
-
* same real-world thing.
|
|
11815
|
-
*/
|
|
11816
|
-
coref?: components["schemas"]["EntityCoRef"];
|
|
11817
|
-
/**
|
|
11818
|
-
* Format: uuid
|
|
11819
|
-
* @description Stable unique identity for this entity (time-ordered UUIDv7), minted
|
|
11820
|
-
* when the entity is assembled.
|
|
11821
|
-
*/
|
|
11822
|
-
id: string;
|
|
12139
|
+
TabularAuditEvent: {
|
|
11823
12140
|
/**
|
|
11824
|
-
* @description
|
|
11825
|
-
*
|
|
12141
|
+
* @description Confidence after this event: the entity's effective confidence once it
|
|
12142
|
+
* has happened.
|
|
11826
12143
|
*/
|
|
11827
|
-
|
|
11828
|
-
/**
|
|
11829
|
-
* @description The language of this entity's surrounding text, when a recognizer
|
|
11830
|
-
* resolved one. `None` when unknown or language-agnostic.
|
|
11831
|
-
*/
|
|
11832
|
-
language?: string;
|
|
11833
|
-
/**
|
|
11834
|
-
* @description Location of the entity within the medium (fused, if it came from more
|
|
11835
|
-
* than one detection).
|
|
11836
|
-
*/
|
|
11837
|
-
location: components["schemas"]["TabularLocation"];
|
|
11838
|
-
/**
|
|
11839
|
-
* @description Detection audit trail: every contributing detection and the fusion
|
|
11840
|
-
* event, if any.
|
|
11841
|
-
*/
|
|
11842
|
-
provenance: components["schemas"]["TabularProvenance"];
|
|
12144
|
+
confidence: components["schemas"]["Confidence"];
|
|
11843
12145
|
/**
|
|
11844
|
-
* @description
|
|
11845
|
-
*
|
|
11846
|
-
*
|
|
11847
|
-
* context lives (which OCR block, which speaker) that the geometric
|
|
11848
|
-
* [`location`] cannot hold. `None` for entities not found via text
|
|
11849
|
-
* recognition (e.g. a VLM box). Provenance, not a coordinate: redaction
|
|
11850
|
-
* uses [`location`]; an audit uses this with the artifact.
|
|
12146
|
+
* @description This event's hash, over its payload and its parents' hashes. Assigned by
|
|
12147
|
+
* [`AuditLog`] when the event is recorded; read it through
|
|
12148
|
+
* [`hash`](Self::hash). Recomputing it is how the DAG is verified.
|
|
11851
12149
|
*
|
|
11852
|
-
* [`
|
|
11853
|
-
|
|
11854
|
-
recognized_range?: components["schemas"]["Range_of_uint"];
|
|
11855
|
-
};
|
|
11856
|
-
/**
|
|
11857
|
-
* @description One recognized entity plus the optional reviewer override.
|
|
11858
|
-
*
|
|
11859
|
-
* The bound mirrors elide's [`Entity<M>`]: serialization needs
|
|
11860
|
-
* `M::Location` and `M::Data` (de)serializable, and JsonSchema
|
|
11861
|
-
* derivation needs them schema-able. All four modalities elide
|
|
11862
|
-
* ships satisfy these under the `serde` + `schema` features.
|
|
11863
|
-
*/
|
|
11864
|
-
TabularEntityRecord: {
|
|
11865
|
-
/** @description The elide entity, as recognition produced it. */
|
|
11866
|
-
entity: components["schemas"]["TabularEntity"];
|
|
11867
|
-
/**
|
|
11868
|
-
* @description Reviewer-supplied redaction override.
|
|
12150
|
+
* Not publicly settable: only [`AuditLog`] assigns it, so a caller cannot
|
|
12151
|
+
* forge a self-consistent event outside the recording path.
|
|
11869
12152
|
*
|
|
11870
|
-
* `
|
|
11871
|
-
* `Some(...)` overrides that rule for this specific entity
|
|
11872
|
-
* at apply time. Reviewer overrides take precedence over
|
|
11873
|
-
* every policy rule and inherit the authority of the
|
|
11874
|
-
* [`Review::policy_id`] they name — the audit event's
|
|
11875
|
-
* attribution stamps that policy so the trail names the
|
|
11876
|
-
* authority under which the override fired.
|
|
12153
|
+
* [`AuditLog`]: crate::entity::audit::AuditLog
|
|
11877
12154
|
*/
|
|
11878
|
-
|
|
11879
|
-
|
|
11880
|
-
|
|
11881
|
-
* @description One thing that happened to an entity, with its effect on confidence.
|
|
11882
|
-
*
|
|
11883
|
-
* Events are recorded in order on an entity's [`Provenance`], forming
|
|
11884
|
-
* the full audit trail of its life: each recognizer that found it, the
|
|
11885
|
-
* deduplication that fused them, any score calibration, and the
|
|
11886
|
-
* redaction that hid it. The uniform spine (who, before/after score,
|
|
11887
|
-
* when, why) is the same for every event; the [`kind`] carries the
|
|
11888
|
-
* event-specific detail.
|
|
11889
|
-
*
|
|
11890
|
-
* `entity.confidence` always equals the [`after`] of the most recent
|
|
11891
|
-
* event.
|
|
11892
|
-
*
|
|
11893
|
-
* [`Provenance`]: crate::entity::provenance::Provenance
|
|
11894
|
-
* [`kind`]: Event::kind
|
|
11895
|
-
* [`after`]: Event::after
|
|
11896
|
-
*/
|
|
11897
|
-
TabularEvent: {
|
|
11898
|
-
/** @description Confidence after this event. */
|
|
11899
|
-
after: components["schemas"]["Confidence"];
|
|
11900
|
-
/** @description When the event happened (UTC). */
|
|
11901
|
-
at: string;
|
|
12155
|
+
hash: components["schemas"]["AuditHash"];
|
|
12156
|
+
/** @description Kind of event, with its event-specific detail and its rationale. */
|
|
12157
|
+
kind: components["schemas"]["TabularAuditKind"];
|
|
11902
12158
|
/**
|
|
11903
|
-
* @description
|
|
11904
|
-
*
|
|
12159
|
+
* @description The events this one follows, by their hash. Empty for a birth event, one
|
|
12160
|
+
* entry for a normal step, several for a fusion. Assigned by [`AuditLog`]
|
|
12161
|
+
* when the event is recorded; read it through [`parents`](Self::parents).
|
|
12162
|
+
*
|
|
12163
|
+
* Not publicly settable: the links are the tamper-evident structure, so
|
|
12164
|
+
* only [`AuditLog::record`] / [`AuditLog::record_fusion`] assign them.
|
|
12165
|
+
*
|
|
12166
|
+
* [`AuditLog`]: crate::entity::audit::AuditLog
|
|
12167
|
+
* [`AuditLog::record`]: crate::entity::audit::AuditLog::record
|
|
12168
|
+
* [`AuditLog::record_fusion`]: crate::entity::audit::AuditLog::record_fusion
|
|
11905
12169
|
*/
|
|
11906
|
-
|
|
11907
|
-
/** @description Kind of event, with its event-specific detail. */
|
|
11908
|
-
kind: components["schemas"]["TabularEventKind"];
|
|
11909
|
-
/** @description Free-text explanation of what the event did and why. */
|
|
11910
|
-
reason: string;
|
|
12170
|
+
parents: components["schemas"]["AuditHash"][];
|
|
11911
12171
|
/**
|
|
11912
12172
|
* @description Who produced this event: a recognizer name, a deduplication strategy,
|
|
11913
12173
|
* an operator, or whatever acted.
|
|
11914
12174
|
*/
|
|
11915
12175
|
source: string;
|
|
12176
|
+
/** @description When the event happened (UTC). */
|
|
12177
|
+
timestamp: string;
|
|
11916
12178
|
};
|
|
11917
12179
|
/**
|
|
11918
|
-
* @description Kind of an [`
|
|
12180
|
+
* @description Kind of an [`AuditEvent`], carrying its event-specific detail and the
|
|
12181
|
+
* rationale for why it happened.
|
|
11919
12182
|
*
|
|
11920
12183
|
* `#[non_exhaustive]`: new event kinds (verification, annotation, …)
|
|
11921
12184
|
* can be added compatibly. The recognition kinds ([`Pattern`],
|
|
11922
12185
|
* [`Model`]) carry the matched [`Location`]; the rest carry their own
|
|
11923
12186
|
* data.
|
|
11924
12187
|
*
|
|
11925
|
-
* [`Pattern`]:
|
|
11926
|
-
* [`Model`]:
|
|
12188
|
+
* [`Pattern`]: AuditKind::Pattern
|
|
12189
|
+
* [`Model`]: AuditKind::Model
|
|
11927
12190
|
* [`Location`]: Modality::Location
|
|
11928
12191
|
*/
|
|
11929
|
-
|
|
12192
|
+
TabularAuditKind: {
|
|
11930
12193
|
/** @constant */
|
|
11931
12194
|
kind: "pattern";
|
|
11932
12195
|
/** @description Where the recognizer matched. */
|
|
@@ -11990,7 +12253,7 @@ interface components {
|
|
|
11990
12253
|
* it is the keyword resolved through the modality's [`locate`] (a
|
|
11991
12254
|
* pixel box for image, a time span for audio, the byte range for
|
|
11992
12255
|
* text/tabular). `None` when the keyword's stream range could not be
|
|
11993
|
-
* placed
|
|
12256
|
+
* placed, symmetric with a match the recognizer itself drops.
|
|
11994
12257
|
*
|
|
11995
12258
|
* [`locate`]: crate::modality::TextRecognizable::locate
|
|
11996
12259
|
*/
|
|
@@ -12008,12 +12271,158 @@ interface components {
|
|
|
12008
12271
|
/** @description How much the output leaks about the original. */
|
|
12009
12272
|
leak_profile: components["schemas"]["LeakProfile"];
|
|
12010
12273
|
/**
|
|
12011
|
-
* @description Which selection rule chose this operator
|
|
12274
|
+
* @description Which selection rule chose this operator: the automatic "why"
|
|
12012
12275
|
* (matched a label, a tag, a predicate, or the fallback).
|
|
12013
12276
|
*/
|
|
12014
12277
|
matched_by: components["schemas"]["RuleMatch"];
|
|
12015
12278
|
/** @description Which operator (name + version) ran. */
|
|
12016
12279
|
operator: components["schemas"]["OperatorId"];
|
|
12280
|
+
/**
|
|
12281
|
+
* @description BLAKE3 digest of the original text the operator hid, when the
|
|
12282
|
+
* redaction layer recorded it. Proves *what* was redacted without
|
|
12283
|
+
* storing the plaintext; `None` when the operator did not capture it.
|
|
12284
|
+
*/
|
|
12285
|
+
span_hash?: components["schemas"]["AuditHash"];
|
|
12286
|
+
/**
|
|
12287
|
+
* Format: uint32
|
|
12288
|
+
* @description Byte length of the original text the operator hid, paired with
|
|
12289
|
+
* [`span_hash`](Self::Redaction::span_hash). `None` when not captured.
|
|
12290
|
+
*/
|
|
12291
|
+
span_length?: number;
|
|
12292
|
+
};
|
|
12293
|
+
/**
|
|
12294
|
+
* @description Full audit trail of an [`Entity`]: every [`AuditEvent`] in its life, as a
|
|
12295
|
+
* tamper-evident DAG.
|
|
12296
|
+
*
|
|
12297
|
+
* Where Presidio keeps a shallow, optional, per-stage explanation that is
|
|
12298
|
+
* stripped by default, an `AuditLog` is always present and records the
|
|
12299
|
+
* entity's *entire* life: each recognizer that found it, the deduplication
|
|
12300
|
+
* that fused them, any confidence calibration, and the redaction that hid it.
|
|
12301
|
+
* Nothing is collapsed: every recognizer keeps its own recognition event with
|
|
12302
|
+
* its location and score.
|
|
12303
|
+
*
|
|
12304
|
+
* The events form a **directed acyclic graph**, not a flat list. A recognizer
|
|
12305
|
+
* records a birth event (no parents); each later step links to the event it
|
|
12306
|
+
* follows; and a [fusion](Self::record_fusion) links to *several* parents at
|
|
12307
|
+
* once: the heads of the trails it combines. This is the true shape of a
|
|
12308
|
+
* deduplicated entity: two recognizers are siblings, then a fusion joins them.
|
|
12309
|
+
* The events are stored in the order they were recorded, which is a
|
|
12310
|
+
* topological order of the DAG (a parent is always recorded before its
|
|
12311
|
+
* children).
|
|
12312
|
+
*
|
|
12313
|
+
* Two chains ride the DAG's edges:
|
|
12314
|
+
*
|
|
12315
|
+
* - a **confidence chain**, where each event's [`confidence`] is the entity's
|
|
12316
|
+
* effective score after it; the score flowing *in* is its parents'
|
|
12317
|
+
* confidence, so [`final_confidence`] and the full history are recoverable;
|
|
12318
|
+
* - a **hash chain**, where each event's [`hash`] folds its payload together
|
|
12319
|
+
* with its parents' hashes, so any edit, reorder, insertion, or deletion of
|
|
12320
|
+
* an earlier event breaks every event downstream. [`verify`] walks the DAG
|
|
12321
|
+
* and reports the first break.
|
|
12322
|
+
*
|
|
12323
|
+
* [`Entity`]: crate::entity::Entity
|
|
12324
|
+
* [`confidence`]: AuditEvent::confidence
|
|
12325
|
+
* [`hash`]: AuditEvent::hash
|
|
12326
|
+
* [`final_confidence`]: Self::final_confidence
|
|
12327
|
+
* [`verify`]: Self::verify
|
|
12328
|
+
*/
|
|
12329
|
+
TabularAuditLog: components["schemas"]["TabularAuditEvent"][];
|
|
12330
|
+
/**
|
|
12331
|
+
* @description Detected piece of sensitive information within some medium.
|
|
12332
|
+
*
|
|
12333
|
+
* Generic over the [`Modality`] `M`, which is what makes the model
|
|
12334
|
+
* multimodal: a text pipeline yields `Entity<Text>`, an audio pipeline
|
|
12335
|
+
* `Entity<Audio>`, and so on. The entity's location is the modality's
|
|
12336
|
+
* [`Location`] type, `M::Location`.
|
|
12337
|
+
*
|
|
12338
|
+
* # Birth and fusion
|
|
12339
|
+
*
|
|
12340
|
+
* A recognizer emits an entity directly, carrying a single recognition
|
|
12341
|
+
* [`AuditEvent`] (its own finding) in the entity's [`audit`] trail. When
|
|
12342
|
+
* several recognizers find the same thing, a fusion step (in
|
|
12343
|
+
* `elide`) combines their entities into one: the survivor's
|
|
12344
|
+
* [`location`] and [`confidence`] are the *fused* values, and every
|
|
12345
|
+
* contributing recognition event, plus a deduplication event, is
|
|
12346
|
+
* retained in its audit trail. The entity therefore carries its full
|
|
12347
|
+
* audit trail with it.
|
|
12348
|
+
*
|
|
12349
|
+
* [`Location`]: Modality::Location
|
|
12350
|
+
* [`AuditEvent`]: crate::entity::audit::AuditEvent
|
|
12351
|
+
* [`audit`]: Entity::audit
|
|
12352
|
+
* [`location`]: Entity::location
|
|
12353
|
+
* [`confidence`]: Entity::confidence
|
|
12354
|
+
*/
|
|
12355
|
+
TabularEntity: {
|
|
12356
|
+
/**
|
|
12357
|
+
* @description Tamper-evident audit trail: every contributing detection, the fusion
|
|
12358
|
+
* event if any, and the redaction that hid it, as a hash-linked DAG.
|
|
12359
|
+
*/
|
|
12360
|
+
audit: components["schemas"]["TabularAuditLog"];
|
|
12361
|
+
/** @description Effective confidence in `0.0..=1.0` (fused, if applicable). */
|
|
12362
|
+
confidence: components["schemas"]["Confidence"];
|
|
12363
|
+
/**
|
|
12364
|
+
* @description Coreference identifier, if a recognizer resolved this entity as one
|
|
12365
|
+
* mention of a cluster. Entities sharing an [`EntityCoRef`] denote the
|
|
12366
|
+
* same real-world thing.
|
|
12367
|
+
*/
|
|
12368
|
+
coref?: components["schemas"]["EntityCoRef"];
|
|
12369
|
+
/**
|
|
12370
|
+
* Format: uuid
|
|
12371
|
+
* @description Stable unique identity for this entity (time-ordered UUIDv7), minted
|
|
12372
|
+
* when the entity is assembled.
|
|
12373
|
+
*/
|
|
12374
|
+
id: string;
|
|
12375
|
+
/**
|
|
12376
|
+
* @description What kind of sensitive information this is (resolved via a
|
|
12377
|
+
* [`LabelCatalog`]).
|
|
12378
|
+
*/
|
|
12379
|
+
label: components["schemas"]["LabelRef"];
|
|
12380
|
+
/**
|
|
12381
|
+
* @description The language of this entity's surrounding text, when a recognizer
|
|
12382
|
+
* resolved one. `None` when unknown or language-agnostic.
|
|
12383
|
+
*/
|
|
12384
|
+
language?: string;
|
|
12385
|
+
/**
|
|
12386
|
+
* @description Location of the entity within the medium (fused, if it came from more
|
|
12387
|
+
* than one detection).
|
|
12388
|
+
*/
|
|
12389
|
+
location: components["schemas"]["TabularLocation"];
|
|
12390
|
+
/**
|
|
12391
|
+
* @description Byte range of the match in the *recognized text* it was found in (the
|
|
12392
|
+
* OCR layout text, the audio transcript, or the text payload itself) —
|
|
12393
|
+
* the stable key back into that enrichment artifact, where the rich
|
|
12394
|
+
* context lives (which OCR block, which speaker) that the geometric
|
|
12395
|
+
* [`location`] cannot hold. `None` for entities not found via text
|
|
12396
|
+
* recognition (e.g. a VLM box). An audit key, not a coordinate: redaction
|
|
12397
|
+
* uses [`location`]; an audit uses this with the artifact.
|
|
12398
|
+
*
|
|
12399
|
+
* [`location`]: Entity::location
|
|
12400
|
+
*/
|
|
12401
|
+
recognized_range?: components["schemas"]["Range_of_uint"];
|
|
12402
|
+
};
|
|
12403
|
+
/**
|
|
12404
|
+
* @description One recognized entity plus the optional reviewer override.
|
|
12405
|
+
*
|
|
12406
|
+
* The bound mirrors elide's [`Entity<M>`]: serialization needs
|
|
12407
|
+
* `M::Location` and `M::Data` (de)serializable, and JsonSchema
|
|
12408
|
+
* derivation needs them schema-able. All four modalities elide
|
|
12409
|
+
* ships satisfy these under the `serde` + `schema` features.
|
|
12410
|
+
*/
|
|
12411
|
+
TabularEntityRecord: {
|
|
12412
|
+
/** @description The elide entity, as recognition produced it. */
|
|
12413
|
+
entity: components["schemas"]["TabularEntity"];
|
|
12414
|
+
/**
|
|
12415
|
+
* @description Reviewer-supplied redaction override.
|
|
12416
|
+
*
|
|
12417
|
+
* `None` means "use the matching policy rule's decision";
|
|
12418
|
+
* `Some(...)` overrides that rule for this specific entity
|
|
12419
|
+
* at apply time. Reviewer overrides take precedence over
|
|
12420
|
+
* every policy rule and inherit the authority of the
|
|
12421
|
+
* [`Review::policy_id`] they name: the audit event's
|
|
12422
|
+
* attribution stamps that policy so the trail names the
|
|
12423
|
+
* authority under which the override fired.
|
|
12424
|
+
*/
|
|
12425
|
+
review?: components["schemas"]["Review"];
|
|
12017
12426
|
};
|
|
12018
12427
|
/**
|
|
12019
12428
|
* @description Located, typed piece of context a recognizer may treat as in-context
|
|
@@ -12085,31 +12494,6 @@ interface components {
|
|
|
12085
12494
|
*/
|
|
12086
12495
|
start_offset?: number;
|
|
12087
12496
|
};
|
|
12088
|
-
/**
|
|
12089
|
-
* @description Full audit trail of an [`Entity`]: every [`Event`] in its life, in
|
|
12090
|
-
* order.
|
|
12091
|
-
*
|
|
12092
|
-
* This is the model's answer to "full provenance": where Presidio keeps
|
|
12093
|
-
* a shallow, optional, per-stage explanation that is stripped by
|
|
12094
|
-
* default, a `Provenance` is always present and records the entity's
|
|
12095
|
-
* *entire* life as an ordered list of events: each recognizer that
|
|
12096
|
-
* found it, the deduplication that fused them, any confidence
|
|
12097
|
-
* calibration, and the redaction that hid it. Nothing is collapsed:
|
|
12098
|
-
* every recognizer keeps its own recognition event with its location
|
|
12099
|
-
* and score.
|
|
12100
|
-
*
|
|
12101
|
-
* The events form a confidence chain (each event's [`after`] is the
|
|
12102
|
-
* next's [`before`]) so the final confidence and its full history are
|
|
12103
|
-
* always recoverable.
|
|
12104
|
-
*
|
|
12105
|
-
* [`Entity`]: crate::entity::Entity
|
|
12106
|
-
* [`after`]: Event::after
|
|
12107
|
-
* [`before`]: Event::before
|
|
12108
|
-
*/
|
|
12109
|
-
TabularProvenance: {
|
|
12110
|
-
/** @description Events, in the order they happened. */
|
|
12111
|
-
events: components["schemas"]["TabularEvent"][];
|
|
12112
|
-
};
|
|
12113
12497
|
/** @description Operator spec a `redact` tabular rule carries. */
|
|
12114
12498
|
TabularRedaction: {
|
|
12115
12499
|
/** @constant */
|
|
@@ -12127,6 +12511,39 @@ interface components {
|
|
|
12127
12511
|
/** @constant */
|
|
12128
12512
|
kind: "drop_column";
|
|
12129
12513
|
};
|
|
12514
|
+
/**
|
|
12515
|
+
* @description The template a [`PolicyDefinition`] was built from.
|
|
12516
|
+
*
|
|
12517
|
+
* Records **provenance, not fidelity**. Templates are plain data
|
|
12518
|
+
* and callers are expected to mutate the returned policy before
|
|
12519
|
+
* submitting it (swapping an operator, widening a group), so this
|
|
12520
|
+
* says "built from `hipaa_deid_safe_harbor` v1.0.0" and nothing
|
|
12521
|
+
* about whether the policy still matches what that template
|
|
12522
|
+
* ships. A reviewer who needs that rebuilds the template and
|
|
12523
|
+
* diffs.
|
|
12524
|
+
*
|
|
12525
|
+
* `None` on a policy means hand-authored, not "unknown template".
|
|
12526
|
+
*
|
|
12527
|
+
* Both fields are needed: a policy built from v1 of a template
|
|
12528
|
+
* can differ materially from one built from v2 (a widened label
|
|
12529
|
+
* set, a changed operator), and an audit that records only the id
|
|
12530
|
+
* cannot tell the two apart.
|
|
12531
|
+
*
|
|
12532
|
+
* [`PolicyDefinition`]: super::PolicyDefinition
|
|
12533
|
+
*/
|
|
12534
|
+
TemplateOrigin: {
|
|
12535
|
+
/**
|
|
12536
|
+
* @description The template's machine key: `"hipaa_deid_safe_harbor"`,
|
|
12537
|
+
* `"pci_dss_pan_hmac_sha256"`. Stable across version bumps.
|
|
12538
|
+
*/
|
|
12539
|
+
id: string;
|
|
12540
|
+
/**
|
|
12541
|
+
* @description The template's own semver version, distinct from the
|
|
12542
|
+
* crate's release version. A shipped template bumps this when
|
|
12543
|
+
* its labelset or operator dispatch changes.
|
|
12544
|
+
*/
|
|
12545
|
+
version: string;
|
|
12546
|
+
};
|
|
12130
12547
|
/**
|
|
12131
12548
|
* @description Fallback operator that runs when a declinable primary
|
|
12132
12549
|
* ([`TextRedaction::Clamp`], [`TextRedaction::GeneralizeDate`])
|
|
@@ -12140,7 +12557,7 @@ interface components {
|
|
|
12140
12557
|
* or `→ Mask` / `→ Keep` on the rare occasion those fit.
|
|
12141
12558
|
*
|
|
12142
12559
|
* Absent from the primary's spec, elide's baked-in default is
|
|
12143
|
-
* [`Erase`]
|
|
12560
|
+
* [`Erase`]: a bare [`TextRedaction::Clamp`] without a `fallback`
|
|
12144
12561
|
* erases values that aren't numeric.
|
|
12145
12562
|
*
|
|
12146
12563
|
* [`Erase`]: TerminalFallback::Erase
|
|
@@ -12187,163 +12604,90 @@ interface components {
|
|
|
12187
12604
|
payload?: unknown;
|
|
12188
12605
|
};
|
|
12189
12606
|
/**
|
|
12190
|
-
* @description
|
|
12191
|
-
*
|
|
12192
|
-
* Either the payload a text recognizer inspects, or the value sliced out
|
|
12193
|
-
* at an entity's location for an operator.
|
|
12194
|
-
*
|
|
12195
|
-
* Held as a [`HipStr`] so short values inline and longer ones share a
|
|
12196
|
-
* refcounted buffer, making cheap clones when one payload is passed to
|
|
12197
|
-
* several recognizers.
|
|
12198
|
-
*/
|
|
12199
|
-
TextData: string;
|
|
12200
|
-
/**
|
|
12201
|
-
* @description Detected piece of sensitive information within some medium.
|
|
12607
|
+
* @description One node in an entity's audit DAG: a thing that happened, with its
|
|
12608
|
+
* effect on confidence and its tamper-evident links.
|
|
12202
12609
|
*
|
|
12203
|
-
*
|
|
12204
|
-
*
|
|
12205
|
-
*
|
|
12206
|
-
*
|
|
12610
|
+
* Events are recorded on an entity's [`AuditLog`], forming the full audit
|
|
12611
|
+
* trail of its life: each recognizer that found it, the deduplication that
|
|
12612
|
+
* fused them, any score calibration, and the redaction that hid it. The
|
|
12613
|
+
* uniform spine (who, resulting score, when) is the same for every event; the
|
|
12614
|
+
* [`kind`] carries the event-specific detail *and* the explanation of why the
|
|
12615
|
+
* event happened.
|
|
12207
12616
|
*
|
|
12208
|
-
*
|
|
12617
|
+
* Each event links to its [`parents`] by their [`hash`]: a birth event (a
|
|
12618
|
+
* recognizer's first detection) has no parents, a normal step has one, and a
|
|
12619
|
+
* [fusion](crate::entity::audit::AuditLog::record_fusion) has several. Its own
|
|
12620
|
+
* [`hash`] folds the
|
|
12621
|
+
* payload together with the parents' hashes, so altering any event breaks
|
|
12622
|
+
* every event downstream of it: [`AuditLog::verify`] walks the DAG and
|
|
12623
|
+
* reports the first break.
|
|
12209
12624
|
*
|
|
12210
|
-
*
|
|
12211
|
-
*
|
|
12212
|
-
*
|
|
12213
|
-
* `elide`) combines their entities into one: the survivor's
|
|
12214
|
-
* [`location`] and [`confidence`] are the *fused* values, and every
|
|
12215
|
-
* contributing recognition event, plus a deduplication event, is
|
|
12216
|
-
* retained in its provenance. The entity therefore carries its full
|
|
12217
|
-
* audit trail with it.
|
|
12625
|
+
* `entity.confidence` always equals the [`confidence`] of the most recent
|
|
12626
|
+
* event. The confidence *flowing in* is not stored: it is the parents'
|
|
12627
|
+
* [`confidence`], recovered from the DAG.
|
|
12218
12628
|
*
|
|
12219
|
-
* [`
|
|
12220
|
-
* [`
|
|
12221
|
-
* [`
|
|
12222
|
-
* [`
|
|
12223
|
-
* [`
|
|
12629
|
+
* [`AuditLog`]: crate::entity::audit::AuditLog
|
|
12630
|
+
* [`AuditLog::record_fusion`]: crate::entity::audit::AuditLog::record_fusion
|
|
12631
|
+
* [`AuditLog::verify`]: crate::entity::audit::AuditLog::verify
|
|
12632
|
+
* [`kind`]: AuditEvent::kind
|
|
12633
|
+
* [`parents`]: AuditEvent::parents
|
|
12634
|
+
* [`hash`]: AuditEvent::hash
|
|
12635
|
+
* [`confidence`]: AuditEvent::confidence
|
|
12224
12636
|
*/
|
|
12225
|
-
|
|
12226
|
-
/** @description Effective confidence in `0.0..=1.0` (fused, if applicable). */
|
|
12227
|
-
confidence: components["schemas"]["Confidence"];
|
|
12637
|
+
TextAuditEvent: {
|
|
12228
12638
|
/**
|
|
12229
|
-
* @description
|
|
12230
|
-
*
|
|
12231
|
-
* same real-world thing.
|
|
12639
|
+
* @description Confidence after this event: the entity's effective confidence once it
|
|
12640
|
+
* has happened.
|
|
12232
12641
|
*/
|
|
12233
|
-
|
|
12234
|
-
/**
|
|
12235
|
-
* Format: uuid
|
|
12236
|
-
* @description Stable unique identity for this entity (time-ordered UUIDv7), minted
|
|
12237
|
-
* when the entity is assembled.
|
|
12238
|
-
*/
|
|
12239
|
-
id: string;
|
|
12240
|
-
/**
|
|
12241
|
-
* @description What kind of sensitive information this is (resolved via a
|
|
12242
|
-
* [`LabelCatalog`]).
|
|
12243
|
-
*/
|
|
12244
|
-
label: components["schemas"]["LabelRef"];
|
|
12245
|
-
/**
|
|
12246
|
-
* @description The language of this entity's surrounding text, when a recognizer
|
|
12247
|
-
* resolved one. `None` when unknown or language-agnostic.
|
|
12248
|
-
*/
|
|
12249
|
-
language?: string;
|
|
12250
|
-
/**
|
|
12251
|
-
* @description Location of the entity within the medium (fused, if it came from more
|
|
12252
|
-
* than one detection).
|
|
12253
|
-
*/
|
|
12254
|
-
location: components["schemas"]["TextLocation"];
|
|
12255
|
-
/**
|
|
12256
|
-
* @description Detection audit trail: every contributing detection and the fusion
|
|
12257
|
-
* event, if any.
|
|
12258
|
-
*/
|
|
12259
|
-
provenance: components["schemas"]["TextProvenance"];
|
|
12642
|
+
confidence: components["schemas"]["Confidence"];
|
|
12260
12643
|
/**
|
|
12261
|
-
* @description
|
|
12262
|
-
*
|
|
12263
|
-
*
|
|
12264
|
-
* context lives (which OCR block, which speaker) that the geometric
|
|
12265
|
-
* [`location`] cannot hold. `None` for entities not found via text
|
|
12266
|
-
* recognition (e.g. a VLM box). Provenance, not a coordinate: redaction
|
|
12267
|
-
* uses [`location`]; an audit uses this with the artifact.
|
|
12644
|
+
* @description This event's hash, over its payload and its parents' hashes. Assigned by
|
|
12645
|
+
* [`AuditLog`] when the event is recorded; read it through
|
|
12646
|
+
* [`hash`](Self::hash). Recomputing it is how the DAG is verified.
|
|
12268
12647
|
*
|
|
12269
|
-
* [`
|
|
12270
|
-
|
|
12271
|
-
recognized_range?: components["schemas"]["Range_of_uint"];
|
|
12272
|
-
};
|
|
12273
|
-
/**
|
|
12274
|
-
* @description One recognized entity plus the optional reviewer override.
|
|
12275
|
-
*
|
|
12276
|
-
* The bound mirrors elide's [`Entity<M>`]: serialization needs
|
|
12277
|
-
* `M::Location` and `M::Data` (de)serializable, and JsonSchema
|
|
12278
|
-
* derivation needs them schema-able. All four modalities elide
|
|
12279
|
-
* ships satisfy these under the `serde` + `schema` features.
|
|
12280
|
-
*/
|
|
12281
|
-
TextEntityRecord: {
|
|
12282
|
-
/** @description The elide entity, as recognition produced it. */
|
|
12283
|
-
entity: components["schemas"]["TextEntity"];
|
|
12284
|
-
/**
|
|
12285
|
-
* @description Reviewer-supplied redaction override.
|
|
12648
|
+
* Not publicly settable: only [`AuditLog`] assigns it, so a caller cannot
|
|
12649
|
+
* forge a self-consistent event outside the recording path.
|
|
12286
12650
|
*
|
|
12287
|
-
* `
|
|
12288
|
-
* `Some(...)` overrides that rule for this specific entity
|
|
12289
|
-
* at apply time. Reviewer overrides take precedence over
|
|
12290
|
-
* every policy rule and inherit the authority of the
|
|
12291
|
-
* [`Review::policy_id`] they name — the audit event's
|
|
12292
|
-
* attribution stamps that policy so the trail names the
|
|
12293
|
-
* authority under which the override fired.
|
|
12651
|
+
* [`AuditLog`]: crate::entity::audit::AuditLog
|
|
12294
12652
|
*/
|
|
12295
|
-
|
|
12296
|
-
|
|
12297
|
-
|
|
12298
|
-
* @description One thing that happened to an entity, with its effect on confidence.
|
|
12299
|
-
*
|
|
12300
|
-
* Events are recorded in order on an entity's [`Provenance`], forming
|
|
12301
|
-
* the full audit trail of its life: each recognizer that found it, the
|
|
12302
|
-
* deduplication that fused them, any score calibration, and the
|
|
12303
|
-
* redaction that hid it. The uniform spine (who, before/after score,
|
|
12304
|
-
* when, why) is the same for every event; the [`kind`] carries the
|
|
12305
|
-
* event-specific detail.
|
|
12306
|
-
*
|
|
12307
|
-
* `entity.confidence` always equals the [`after`] of the most recent
|
|
12308
|
-
* event.
|
|
12309
|
-
*
|
|
12310
|
-
* [`Provenance`]: crate::entity::provenance::Provenance
|
|
12311
|
-
* [`kind`]: Event::kind
|
|
12312
|
-
* [`after`]: Event::after
|
|
12313
|
-
*/
|
|
12314
|
-
TextEvent: {
|
|
12315
|
-
/** @description Confidence after this event. */
|
|
12316
|
-
after: components["schemas"]["Confidence"];
|
|
12317
|
-
/** @description When the event happened (UTC). */
|
|
12318
|
-
at: string;
|
|
12653
|
+
hash: components["schemas"]["AuditHash"];
|
|
12654
|
+
/** @description Kind of event, with its event-specific detail and its rationale. */
|
|
12655
|
+
kind: components["schemas"]["TextAuditKind"];
|
|
12319
12656
|
/**
|
|
12320
|
-
* @description
|
|
12321
|
-
*
|
|
12657
|
+
* @description The events this one follows, by their hash. Empty for a birth event, one
|
|
12658
|
+
* entry for a normal step, several for a fusion. Assigned by [`AuditLog`]
|
|
12659
|
+
* when the event is recorded; read it through [`parents`](Self::parents).
|
|
12660
|
+
*
|
|
12661
|
+
* Not publicly settable: the links are the tamper-evident structure, so
|
|
12662
|
+
* only [`AuditLog::record`] / [`AuditLog::record_fusion`] assign them.
|
|
12663
|
+
*
|
|
12664
|
+
* [`AuditLog`]: crate::entity::audit::AuditLog
|
|
12665
|
+
* [`AuditLog::record`]: crate::entity::audit::AuditLog::record
|
|
12666
|
+
* [`AuditLog::record_fusion`]: crate::entity::audit::AuditLog::record_fusion
|
|
12322
12667
|
*/
|
|
12323
|
-
|
|
12324
|
-
/** @description Kind of event, with its event-specific detail. */
|
|
12325
|
-
kind: components["schemas"]["TextEventKind"];
|
|
12326
|
-
/** @description Free-text explanation of what the event did and why. */
|
|
12327
|
-
reason: string;
|
|
12668
|
+
parents: components["schemas"]["AuditHash"][];
|
|
12328
12669
|
/**
|
|
12329
12670
|
* @description Who produced this event: a recognizer name, a deduplication strategy,
|
|
12330
12671
|
* an operator, or whatever acted.
|
|
12331
12672
|
*/
|
|
12332
12673
|
source: string;
|
|
12674
|
+
/** @description When the event happened (UTC). */
|
|
12675
|
+
timestamp: string;
|
|
12333
12676
|
};
|
|
12334
12677
|
/**
|
|
12335
|
-
* @description Kind of an [`
|
|
12678
|
+
* @description Kind of an [`AuditEvent`], carrying its event-specific detail and the
|
|
12679
|
+
* rationale for why it happened.
|
|
12336
12680
|
*
|
|
12337
12681
|
* `#[non_exhaustive]`: new event kinds (verification, annotation, …)
|
|
12338
12682
|
* can be added compatibly. The recognition kinds ([`Pattern`],
|
|
12339
12683
|
* [`Model`]) carry the matched [`Location`]; the rest carry their own
|
|
12340
12684
|
* data.
|
|
12341
12685
|
*
|
|
12342
|
-
* [`Pattern`]:
|
|
12343
|
-
* [`Model`]:
|
|
12686
|
+
* [`Pattern`]: AuditKind::Pattern
|
|
12687
|
+
* [`Model`]: AuditKind::Model
|
|
12344
12688
|
* [`Location`]: Modality::Location
|
|
12345
12689
|
*/
|
|
12346
|
-
|
|
12690
|
+
TextAuditKind: {
|
|
12347
12691
|
/** @constant */
|
|
12348
12692
|
kind: "pattern";
|
|
12349
12693
|
/** @description Where the recognizer matched. */
|
|
@@ -12407,7 +12751,7 @@ interface components {
|
|
|
12407
12751
|
* it is the keyword resolved through the modality's [`locate`] (a
|
|
12408
12752
|
* pixel box for image, a time span for audio, the byte range for
|
|
12409
12753
|
* text/tabular). `None` when the keyword's stream range could not be
|
|
12410
|
-
* placed
|
|
12754
|
+
* placed, symmetric with a match the recognizer itself drops.
|
|
12411
12755
|
*
|
|
12412
12756
|
* [`locate`]: crate::modality::TextRecognizable::locate
|
|
12413
12757
|
*/
|
|
@@ -12425,12 +12769,169 @@ interface components {
|
|
|
12425
12769
|
/** @description How much the output leaks about the original. */
|
|
12426
12770
|
leak_profile: components["schemas"]["LeakProfile"];
|
|
12427
12771
|
/**
|
|
12428
|
-
* @description Which selection rule chose this operator
|
|
12772
|
+
* @description Which selection rule chose this operator: the automatic "why"
|
|
12429
12773
|
* (matched a label, a tag, a predicate, or the fallback).
|
|
12430
12774
|
*/
|
|
12431
12775
|
matched_by: components["schemas"]["RuleMatch"];
|
|
12432
12776
|
/** @description Which operator (name + version) ran. */
|
|
12433
12777
|
operator: components["schemas"]["OperatorId"];
|
|
12778
|
+
/**
|
|
12779
|
+
* @description BLAKE3 digest of the original text the operator hid, when the
|
|
12780
|
+
* redaction layer recorded it. Proves *what* was redacted without
|
|
12781
|
+
* storing the plaintext; `None` when the operator did not capture it.
|
|
12782
|
+
*/
|
|
12783
|
+
span_hash?: components["schemas"]["AuditHash"];
|
|
12784
|
+
/**
|
|
12785
|
+
* Format: uint32
|
|
12786
|
+
* @description Byte length of the original text the operator hid, paired with
|
|
12787
|
+
* [`span_hash`](Self::Redaction::span_hash). `None` when not captured.
|
|
12788
|
+
*/
|
|
12789
|
+
span_length?: number;
|
|
12790
|
+
};
|
|
12791
|
+
/**
|
|
12792
|
+
* @description Full audit trail of an [`Entity`]: every [`AuditEvent`] in its life, as a
|
|
12793
|
+
* tamper-evident DAG.
|
|
12794
|
+
*
|
|
12795
|
+
* Where Presidio keeps a shallow, optional, per-stage explanation that is
|
|
12796
|
+
* stripped by default, an `AuditLog` is always present and records the
|
|
12797
|
+
* entity's *entire* life: each recognizer that found it, the deduplication
|
|
12798
|
+
* that fused them, any confidence calibration, and the redaction that hid it.
|
|
12799
|
+
* Nothing is collapsed: every recognizer keeps its own recognition event with
|
|
12800
|
+
* its location and score.
|
|
12801
|
+
*
|
|
12802
|
+
* The events form a **directed acyclic graph**, not a flat list. A recognizer
|
|
12803
|
+
* records a birth event (no parents); each later step links to the event it
|
|
12804
|
+
* follows; and a [fusion](Self::record_fusion) links to *several* parents at
|
|
12805
|
+
* once: the heads of the trails it combines. This is the true shape of a
|
|
12806
|
+
* deduplicated entity: two recognizers are siblings, then a fusion joins them.
|
|
12807
|
+
* The events are stored in the order they were recorded, which is a
|
|
12808
|
+
* topological order of the DAG (a parent is always recorded before its
|
|
12809
|
+
* children).
|
|
12810
|
+
*
|
|
12811
|
+
* Two chains ride the DAG's edges:
|
|
12812
|
+
*
|
|
12813
|
+
* - a **confidence chain**, where each event's [`confidence`] is the entity's
|
|
12814
|
+
* effective score after it; the score flowing *in* is its parents'
|
|
12815
|
+
* confidence, so [`final_confidence`] and the full history are recoverable;
|
|
12816
|
+
* - a **hash chain**, where each event's [`hash`] folds its payload together
|
|
12817
|
+
* with its parents' hashes, so any edit, reorder, insertion, or deletion of
|
|
12818
|
+
* an earlier event breaks every event downstream. [`verify`] walks the DAG
|
|
12819
|
+
* and reports the first break.
|
|
12820
|
+
*
|
|
12821
|
+
* [`Entity`]: crate::entity::Entity
|
|
12822
|
+
* [`confidence`]: AuditEvent::confidence
|
|
12823
|
+
* [`hash`]: AuditEvent::hash
|
|
12824
|
+
* [`final_confidence`]: Self::final_confidence
|
|
12825
|
+
* [`verify`]: Self::verify
|
|
12826
|
+
*/
|
|
12827
|
+
TextAuditLog: components["schemas"]["TextAuditEvent"][];
|
|
12828
|
+
/**
|
|
12829
|
+
* @description Run of text.
|
|
12830
|
+
*
|
|
12831
|
+
* Either the payload a text recognizer inspects, or the value sliced out
|
|
12832
|
+
* at an entity's location for an operator.
|
|
12833
|
+
*
|
|
12834
|
+
* Held as a [`HipStr`] so short values inline and longer ones share a
|
|
12835
|
+
* refcounted buffer, making cheap clones when one payload is passed to
|
|
12836
|
+
* several recognizers.
|
|
12837
|
+
*/
|
|
12838
|
+
TextData: string;
|
|
12839
|
+
/**
|
|
12840
|
+
* @description Detected piece of sensitive information within some medium.
|
|
12841
|
+
*
|
|
12842
|
+
* Generic over the [`Modality`] `M`, which is what makes the model
|
|
12843
|
+
* multimodal: a text pipeline yields `Entity<Text>`, an audio pipeline
|
|
12844
|
+
* `Entity<Audio>`, and so on. The entity's location is the modality's
|
|
12845
|
+
* [`Location`] type, `M::Location`.
|
|
12846
|
+
*
|
|
12847
|
+
* # Birth and fusion
|
|
12848
|
+
*
|
|
12849
|
+
* A recognizer emits an entity directly, carrying a single recognition
|
|
12850
|
+
* [`AuditEvent`] (its own finding) in the entity's [`audit`] trail. When
|
|
12851
|
+
* several recognizers find the same thing, a fusion step (in
|
|
12852
|
+
* `elide`) combines their entities into one: the survivor's
|
|
12853
|
+
* [`location`] and [`confidence`] are the *fused* values, and every
|
|
12854
|
+
* contributing recognition event, plus a deduplication event, is
|
|
12855
|
+
* retained in its audit trail. The entity therefore carries its full
|
|
12856
|
+
* audit trail with it.
|
|
12857
|
+
*
|
|
12858
|
+
* [`Location`]: Modality::Location
|
|
12859
|
+
* [`AuditEvent`]: crate::entity::audit::AuditEvent
|
|
12860
|
+
* [`audit`]: Entity::audit
|
|
12861
|
+
* [`location`]: Entity::location
|
|
12862
|
+
* [`confidence`]: Entity::confidence
|
|
12863
|
+
*/
|
|
12864
|
+
TextEntity: {
|
|
12865
|
+
/**
|
|
12866
|
+
* @description Tamper-evident audit trail: every contributing detection, the fusion
|
|
12867
|
+
* event if any, and the redaction that hid it, as a hash-linked DAG.
|
|
12868
|
+
*/
|
|
12869
|
+
audit: components["schemas"]["TextAuditLog"];
|
|
12870
|
+
/** @description Effective confidence in `0.0..=1.0` (fused, if applicable). */
|
|
12871
|
+
confidence: components["schemas"]["Confidence"];
|
|
12872
|
+
/**
|
|
12873
|
+
* @description Coreference identifier, if a recognizer resolved this entity as one
|
|
12874
|
+
* mention of a cluster. Entities sharing an [`EntityCoRef`] denote the
|
|
12875
|
+
* same real-world thing.
|
|
12876
|
+
*/
|
|
12877
|
+
coref?: components["schemas"]["EntityCoRef"];
|
|
12878
|
+
/**
|
|
12879
|
+
* Format: uuid
|
|
12880
|
+
* @description Stable unique identity for this entity (time-ordered UUIDv7), minted
|
|
12881
|
+
* when the entity is assembled.
|
|
12882
|
+
*/
|
|
12883
|
+
id: string;
|
|
12884
|
+
/**
|
|
12885
|
+
* @description What kind of sensitive information this is (resolved via a
|
|
12886
|
+
* [`LabelCatalog`]).
|
|
12887
|
+
*/
|
|
12888
|
+
label: components["schemas"]["LabelRef"];
|
|
12889
|
+
/**
|
|
12890
|
+
* @description The language of this entity's surrounding text, when a recognizer
|
|
12891
|
+
* resolved one. `None` when unknown or language-agnostic.
|
|
12892
|
+
*/
|
|
12893
|
+
language?: string;
|
|
12894
|
+
/**
|
|
12895
|
+
* @description Location of the entity within the medium (fused, if it came from more
|
|
12896
|
+
* than one detection).
|
|
12897
|
+
*/
|
|
12898
|
+
location: components["schemas"]["TextLocation"];
|
|
12899
|
+
/**
|
|
12900
|
+
* @description Byte range of the match in the *recognized text* it was found in (the
|
|
12901
|
+
* OCR layout text, the audio transcript, or the text payload itself) —
|
|
12902
|
+
* the stable key back into that enrichment artifact, where the rich
|
|
12903
|
+
* context lives (which OCR block, which speaker) that the geometric
|
|
12904
|
+
* [`location`] cannot hold. `None` for entities not found via text
|
|
12905
|
+
* recognition (e.g. a VLM box). An audit key, not a coordinate: redaction
|
|
12906
|
+
* uses [`location`]; an audit uses this with the artifact.
|
|
12907
|
+
*
|
|
12908
|
+
* [`location`]: Entity::location
|
|
12909
|
+
*/
|
|
12910
|
+
recognized_range?: components["schemas"]["Range_of_uint"];
|
|
12911
|
+
};
|
|
12912
|
+
/**
|
|
12913
|
+
* @description One recognized entity plus the optional reviewer override.
|
|
12914
|
+
*
|
|
12915
|
+
* The bound mirrors elide's [`Entity<M>`]: serialization needs
|
|
12916
|
+
* `M::Location` and `M::Data` (de)serializable, and JsonSchema
|
|
12917
|
+
* derivation needs them schema-able. All four modalities elide
|
|
12918
|
+
* ships satisfy these under the `serde` + `schema` features.
|
|
12919
|
+
*/
|
|
12920
|
+
TextEntityRecord: {
|
|
12921
|
+
/** @description The elide entity, as recognition produced it. */
|
|
12922
|
+
entity: components["schemas"]["TextEntity"];
|
|
12923
|
+
/**
|
|
12924
|
+
* @description Reviewer-supplied redaction override.
|
|
12925
|
+
*
|
|
12926
|
+
* `None` means "use the matching policy rule's decision";
|
|
12927
|
+
* `Some(...)` overrides that rule for this specific entity
|
|
12928
|
+
* at apply time. Reviewer overrides take precedence over
|
|
12929
|
+
* every policy rule and inherit the authority of the
|
|
12930
|
+
* [`Review::policy_id`] they name: the audit event's
|
|
12931
|
+
* attribution stamps that policy so the trail names the
|
|
12932
|
+
* authority under which the override fired.
|
|
12933
|
+
*/
|
|
12934
|
+
review?: components["schemas"]["Review"];
|
|
12434
12935
|
};
|
|
12435
12936
|
/**
|
|
12436
12937
|
* @description Located, typed piece of context a recognizer may treat as in-context
|
|
@@ -12479,31 +12980,6 @@ interface components {
|
|
|
12479
12980
|
*/
|
|
12480
12981
|
start: number;
|
|
12481
12982
|
};
|
|
12482
|
-
/**
|
|
12483
|
-
* @description Full audit trail of an [`Entity`]: every [`Event`] in its life, in
|
|
12484
|
-
* order.
|
|
12485
|
-
*
|
|
12486
|
-
* This is the model's answer to "full provenance": where Presidio keeps
|
|
12487
|
-
* a shallow, optional, per-stage explanation that is stripped by
|
|
12488
|
-
* default, a `Provenance` is always present and records the entity's
|
|
12489
|
-
* *entire* life as an ordered list of events: each recognizer that
|
|
12490
|
-
* found it, the deduplication that fused them, any confidence
|
|
12491
|
-
* calibration, and the redaction that hid it. Nothing is collapsed:
|
|
12492
|
-
* every recognizer keeps its own recognition event with its location
|
|
12493
|
-
* and score.
|
|
12494
|
-
*
|
|
12495
|
-
* The events form a confidence chain (each event's [`after`] is the
|
|
12496
|
-
* next's [`before`]) so the final confidence and its full history are
|
|
12497
|
-
* always recoverable.
|
|
12498
|
-
*
|
|
12499
|
-
* [`Entity`]: crate::entity::Entity
|
|
12500
|
-
* [`after`]: Event::after
|
|
12501
|
-
* [`before`]: Event::before
|
|
12502
|
-
*/
|
|
12503
|
-
TextProvenance: {
|
|
12504
|
-
/** @description Events, in the order they happened. */
|
|
12505
|
-
events: components["schemas"]["TextEvent"][];
|
|
12506
|
-
};
|
|
12507
12983
|
/** @description Operator spec a `redact` text rule carries. */
|
|
12508
12984
|
TextRedaction: {
|
|
12509
12985
|
/** @constant */
|
|
@@ -12804,11 +13280,13 @@ interface components {
|
|
|
12804
13280
|
/**
|
|
12805
13281
|
* @description Request payload for updating an existing workspace policy.
|
|
12806
13282
|
*
|
|
12807
|
-
* Replacing the `definition` replaces the whole policy body.
|
|
13283
|
+
* Replacing the `definition` replaces the whole policy body. The policy's
|
|
13284
|
+
* template origin is server-owned and preserved across updates — it is not
|
|
13285
|
+
* settable here.
|
|
12808
13286
|
*/
|
|
12809
13287
|
UpdatePolicy: {
|
|
12810
13288
|
/** @description New policy body (replaces the stored definition). */
|
|
12811
|
-
definition?: components["schemas"]["
|
|
13289
|
+
definition?: components["schemas"]["PolicyDraft"];
|
|
12812
13290
|
/** @description Policy description. */
|
|
12813
13291
|
description?: string;
|
|
12814
13292
|
/** @description Human-readable policy display name. */
|
|
@@ -13220,15 +13698,18 @@ type Schemas$16 = components["schemas"];
|
|
|
13220
13698
|
type EntityGroup = Schemas$16["EntityGroup"];
|
|
13221
13699
|
type AuditContext = Schemas$16["AuditContext"];
|
|
13222
13700
|
type EntityCoRef = Schemas$16["EntityCoRef"];
|
|
13223
|
-
type
|
|
13701
|
+
type RasterMode = Schemas$16["RasterMode"];
|
|
13224
13702
|
type Dpi = Schemas$16["Dpi"];
|
|
13225
13703
|
type Review = Schemas$16["Review"];
|
|
13226
13704
|
type Attribution = Schemas$16["Attribution"];
|
|
13705
|
+
type AttributionKind = Schemas$16["AttributionKind"];
|
|
13227
13706
|
type LeakProfile = Schemas$16["LeakProfile"];
|
|
13228
13707
|
type RuleMatch = Schemas$16["RuleMatch"];
|
|
13229
13708
|
type ModelEvent = Schemas$16["ModelEvent"];
|
|
13230
13709
|
type PatternEvent = Schemas$16["PatternEvent"];
|
|
13231
13710
|
type OperatorId = Schemas$16["OperatorId"];
|
|
13711
|
+
type AuditHash = Schemas$16["AuditHash"];
|
|
13712
|
+
type Category = Schemas$16["Category"];
|
|
13232
13713
|
/** Half-open `[start, end)` index range. Generated name; a plain uint range. */
|
|
13233
13714
|
type RangeOfUint = Schemas$16["Range_of_uint"];
|
|
13234
13715
|
type BoundingBox = Schemas$16["BoundingBox"];
|
|
@@ -13238,35 +13719,35 @@ type Dimensions = Schemas$16["Dimensions"];
|
|
|
13238
13719
|
type TimeSpan = Schemas$16["TimeSpan"];
|
|
13239
13720
|
type TextEntity = Schemas$16["TextEntity"];
|
|
13240
13721
|
type TextEntityRecord = Schemas$16["TextEntityRecord"];
|
|
13241
|
-
type
|
|
13242
|
-
type
|
|
13722
|
+
type TextAuditEvent = Schemas$16["TextAuditEvent"];
|
|
13723
|
+
type TextAuditKind = Schemas$16["TextAuditKind"];
|
|
13243
13724
|
type TextHint = Schemas$16["TextHint"];
|
|
13244
13725
|
type TextLocation = Schemas$16["TextLocation"];
|
|
13245
|
-
type
|
|
13726
|
+
type TextAuditLog = Schemas$16["TextAuditLog"];
|
|
13246
13727
|
type TextData = Schemas$16["TextData"];
|
|
13247
13728
|
type ImageEntity = Schemas$16["ImageEntity"];
|
|
13248
13729
|
type ImageEntityRecord = Schemas$16["ImageEntityRecord"];
|
|
13249
|
-
type
|
|
13250
|
-
type
|
|
13730
|
+
type ImageAuditEvent = Schemas$16["ImageAuditEvent"];
|
|
13731
|
+
type ImageAuditKind = Schemas$16["ImageAuditKind"];
|
|
13251
13732
|
type ImageHint = Schemas$16["ImageHint"];
|
|
13252
13733
|
type ImageLocation = Schemas$16["ImageLocation"];
|
|
13253
|
-
type
|
|
13734
|
+
type ImageAuditLog = Schemas$16["ImageAuditLog"];
|
|
13254
13735
|
type ImageData = Schemas$16["ImageData"];
|
|
13255
13736
|
type AudioEntity = Schemas$16["AudioEntity"];
|
|
13256
13737
|
type AudioEntityRecord = Schemas$16["AudioEntityRecord"];
|
|
13257
|
-
type
|
|
13258
|
-
type
|
|
13738
|
+
type AudioAuditEvent = Schemas$16["AudioAuditEvent"];
|
|
13739
|
+
type AudioAuditKind = Schemas$16["AudioAuditKind"];
|
|
13259
13740
|
type AudioHint = Schemas$16["AudioHint"];
|
|
13260
13741
|
type AudioLocation = Schemas$16["AudioLocation"];
|
|
13261
|
-
type
|
|
13742
|
+
type AudioAuditLog = Schemas$16["AudioAuditLog"];
|
|
13262
13743
|
type AudioData = Schemas$16["AudioData"];
|
|
13263
13744
|
type TabularEntity = Schemas$16["TabularEntity"];
|
|
13264
13745
|
type TabularEntityRecord = Schemas$16["TabularEntityRecord"];
|
|
13265
|
-
type
|
|
13266
|
-
type
|
|
13746
|
+
type TabularAuditEvent = Schemas$16["TabularAuditEvent"];
|
|
13747
|
+
type TabularAuditKind = Schemas$16["TabularAuditKind"];
|
|
13267
13748
|
type TabularHint = Schemas$16["TabularHint"];
|
|
13268
13749
|
type TabularLocation = Schemas$16["TabularLocation"];
|
|
13269
|
-
type
|
|
13750
|
+
type TabularAuditLog = Schemas$16["TabularAuditLog"];
|
|
13270
13751
|
//#endregion
|
|
13271
13752
|
//#region src/datatypes/auth.d.ts
|
|
13272
13753
|
type Schemas$15 = components["schemas"];
|
|
@@ -13396,12 +13877,16 @@ type Policy = Schemas$4["Policy"];
|
|
|
13396
13877
|
type PolicySummary = Schemas$4["PolicySummary"];
|
|
13397
13878
|
type PolicySummaryPage = Schemas$4["PolicySummaryPage"];
|
|
13398
13879
|
type PolicyDefinition = Schemas$4["PolicyDefinition"];
|
|
13880
|
+
type PolicyDraft = Schemas$4["PolicyDraft"];
|
|
13399
13881
|
type CreatePolicy = Schemas$4["CreatePolicy"];
|
|
13400
13882
|
type UpdatePolicy = Schemas$4["UpdatePolicy"];
|
|
13401
13883
|
type PolicyRule = Schemas$4["PolicyRule"];
|
|
13402
13884
|
type PolicyTemplate = Schemas$4["PolicyTemplate"];
|
|
13885
|
+
type TemplateOrigin = Schemas$4["TemplateOrigin"];
|
|
13403
13886
|
type HipaaDeidMethod = Schemas$4["HipaaDeidMethod"];
|
|
13887
|
+
type HipaaAccountNumbers = Schemas$4["HipaaAccountNumbers"];
|
|
13404
13888
|
type GdprArticle9Treatment = Schemas$4["GdprArticle9Treatment"];
|
|
13889
|
+
type GdprSensitiveScope = Schemas$4["GdprSensitiveScope"];
|
|
13405
13890
|
type PciDssPart = Schemas$4["PciDssPart"];
|
|
13406
13891
|
type PciPanRender = Schemas$4["PciPanRender"];
|
|
13407
13892
|
type Predicate = Schemas$4["Predicate"];
|
|
@@ -13473,5 +13958,5 @@ type Retention = Schemas["Retention"];
|
|
|
13473
13958
|
type RetentionSettings = Schemas["RetentionSettings"];
|
|
13474
13959
|
type RetentionOverride = Schemas["RetentionOverride"];
|
|
13475
13960
|
//#endregion
|
|
13476
|
-
export {
|
|
13477
|
-
//# sourceMappingURL=index-
|
|
13961
|
+
export { LanguageTag as $, AttributionKind as $n, ApiTokenWithJWT as $r, GenerateInviteCode as $t, PipelineRun as A, ConnectionVerification as An, RangeOfUint as Ar, ConnectionSyncFailedParams as At, CreatePolicy as B, SyncMode as Bn, TabularLocation as Br, PipelineRunCompletedParams as Bt, LanguageProvenance as C, AnthropicCredentials as Cn, ImageLocation as Cr, PipelineStatus as Ct, ScopeParams as D, ConnectionPage as Dn, PatternEvent as Dr, UpdatePipeline as Dt, ScopeMetadata as E, ConnectionConfig as En, OperatorId as Er, PipelineTriggerType as Et, RunStatusEvent as F, OpenAiCredentials as Fn, TabularAuditKind as Fr, NotificationEvent as Ft, HipaaAccountNumbers as G, UpdateConnection as Gn, TextEntity as Gr, UnreadStatus as Gt, DateStyle as H, SyncScheduleInput as Hn, TextAuditKind as Hr, SystemAnnouncementParams as Ht, AudioRedaction as I, S3Credentials as In, TabularAuditLog as Ir, NotificationPage as It, Label as J, RegisteredRecognizer as Jn, TextLocation as Jr, Member as Jt, HipaaDeidMethod as K, LabelCatalog as Kn, TextEntityRecord as Kr, UpdateNotificationSettings as Kt, ClampBucket as L, StorageConfig as Ln, TabularEntity as Lr, NotificationPayload as Lt, PipelineRunStatus as M, CreateConnection as Mn, Review as Mr, MemberInvitedParams as Mt, PipelineRunsQuery as N, GcsCredentials as Nn, RuleMatch as Nr, MemberJoinedParams as Nt, Audit as O, ConnectionSync as On, Point as Or, CursorPagination as Ot, RunMetadata as P, LlmConfig as Pn, TabularAuditEvent as Pr, Notification as Pt, Labels as Q, Attribution as Qn, ApiTokenType as Qr, CreateInvite as Qt, Color as R, SyncConnection as Rn, TabularEntityRecord as Rr, NotificationSettings as Rt, Language as S, ValidationErrorDetail as Sn, ImageHint as Sr, PipelineFilter as St, Languages as T, Connection as Tn, ModelEvent as Tr, PipelineSummaryPage as Tt, GdprArticle9Treatment as U, SyncStatus as Un, TextAuditLog as Ur, SystemReportParams as Ut, DateGranularity as V, SyncSchedule as Vn, TextAuditEvent as Vr, PipelineRunFailedParams as Vt, GdprSensitiveScope as W, SyncTriggerType as Wn, TextData as Wr, UnreadCountEvent as Wt, LabelGroup as X, Login as Xn, ApiToken as Xr, MemberSortField as Xt, LabelEntry as Y, AuthToken as Yn, TimeSpan as Yr, MemberPage as Yt, LabelLocale as Z, Signup as Zn, ApiTokenPage as Zr, UpdateMember as Zt, WebhookPage as _, PublicAccount as _i, FormatToken as _n, ImageAuditKind as _r, UpdatePolicy as _t, RetentionSettings as a, ActivityPayload as ai, InviteSent as an, AudioEntityRecord as ar, PolicyDefinition as at, Confidence as b, UpdateFile as bn, ImageEntity as br, Pipeline as bt, WorkspacePage as c, InviteActivityParams as ci, ListInvites as cn, AuditContext as cr, PolicySummary as ct, CreateWebhook as d, PipelineRunActivityParams as di, ComponentHealth as dn, Category as dr, Predicate as dt, CreateApiToken as ei, Invite as en, AudioAuditEvent as er, LocalizedText as et, TestWebhook as f, PolicyActivityParams as fi, Health as fn, Dimensions as fr, Sha2Algorithm as ft, WebhookEvent as g, AccountRef as gi, FilePage as gn, ImageAuditEvent as gr, TextRedaction as gt, WebhookCreated as h, Account as hi, FileKind as hn, EntityGroup as hr, TerminalFallback as ht, RetentionOverride as i, ActivityPage as ii, InvitePreview as in, AudioEntity as ir, Policy as it, PipelineRunPage as j, ConnectionsQuery as jn, RasterMode as jr, MarkedReadStatus as jt, CreatePipelineRun as k, ConnectionSyncPage as kn, Polygon as kr, ConnectionSyncCompletedParams as kt, WorkspaceRole as l, MemberActivityParams as li, ReplyInvite as ln, AuditHash as lr, PolicySummaryPage as lt, Webhook as m, WorkspaceActivityParams as mi, File as mn, EntityCoRef as mr, TemplateOrigin as mt, OcrPolicy as n, UpdateApiToken as ni, InviteExpiration as nn, AudioAuditLog as nr, PciDssPart as nt, UpdateWorkspace as o, ConnectionActivityParams as oi, InviteSortField as on, AudioHint as or, PolicyDraft as ot, UpdateWebhook as p, WebhookActivityParams as pi, HealthStatus as pn, Dpi as pr, TabularRedaction as pt, ImageRedaction as q, RecognizerCatalog as qn, TextHint as qr, ListMembers as qt, Retention as r, Activity as ri, InvitePage as rn, AudioData as rr, PciPanRender as rt, Workspace as s, FileActivityParams as si, InviteStatus as sn, AudioLocation as sr, PolicyRule as st, CreateWorkspace as t, TokenExpiration as ti, InviteCode as tn, AudioAuditKind as tr, ModalityRedactions as tt, WorkspaceSettings as u, PipelineActivityParams as ui, SortOrder as un, BoundingBox as ur, PolicyTemplate as ut, WebhookResult as v, UpdateAccount as vi, ListFiles as vn, ImageAuditLog as vr, Waveform as vt, LanguageSpan as w, AzureCredentials as wn, LeakProfile as wr, PipelineSummary as wt, CountryCode as x, ErrorResponse as xn, ImageEntityRecord as xr, PipelineDefinition as xt, WebhookStatus as y, paths as yi, ModalityToken as yn, ImageData as yr, CreatePipeline as yt, ConfidenceThreshold as z, SyncDeletionPolicy as zn, TabularHint as zr, PipelineRunAnalyzedParams as zt };
|
|
13962
|
+
//# sourceMappingURL=index-D7O7ZJNs.d.ts.map
|