You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
`./control`, `./runtime`, and `./middleware` are tree-shakable. `./stack` sits on top of `./runtime` + `./middleware` and additionally pulls in `@cipherstash/stack`; consumers who implement `CipherstashSdk` against a different KMS skip `./stack` and pay no `@cipherstash/stack` bundle cost.
102
102
103
+
## EQL v3 (experimental)
104
+
105
+
EQL v3 is a **domain-based** encryption model that coexists with v2: v2 columns keep their `eql_v2_encrypted` storage and SQL, and v3 columns are added independently. Milestone 1 supports the **`String`/`text`** scalar only.
106
+
107
+
A v3 column declares **exactly one index capability** (one Postgres domain) via `EncryptedStringV3`:
bio cipherstash.EncryptedStringV3({ index: "freeTextSearch" }) // → eql_v3.text_match
114
+
name cipherstash.EncryptedStringV3({ index: "orderAndRange" }) // → eql_v3.text_ord
115
+
}
116
+
```
117
+
118
+
…or in TypeScript: `encryptedStringV3({ index: 'equality' })`.
119
+
120
+
**Operators per index** (the v3 column carries the cipherstash traits, so the same `cipherstash*` operator surface attaches; the column's single index decides which are valid):
Applying an operator that needs a different index than the column declares (e.g. `cipherstashGt` on an `equality` column) is rejected with a clear `TypeError` at **query-build time** — a runtime guard, not compile-time gating (milestone-1 trade-off; per-index codec ids could restore compile-time gating later). The v3 baseline migration installs the `eql_v3` bundle alongside the v2 bundle; both `bulkEncryptMiddleware` and `bulkEncryptV3Middleware` register over the same SDK and ignore each other's columns.
129
+
103
130
## Authentication
104
131
105
132
There are 2 main ways to authenticate to CipherStash:
0 commit comments