@evolu/common 6.0.1-preview.15 → 6.0.1-preview.16
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/dist/src/Crypto.d.ts +0 -1
- package/dist/src/Crypto.d.ts.map +1 -1
- package/dist/src/Crypto.js +2 -1
- package/dist/src/Evolu/Config.d.ts +7 -7
- package/dist/src/Evolu/Config.d.ts.map +1 -1
- package/dist/src/Evolu/Db.d.ts +4 -8
- package/dist/src/Evolu/Db.d.ts.map +1 -1
- package/dist/src/Evolu/Db.js +136 -112
- package/dist/src/Evolu/Evolu.d.ts.map +1 -1
- package/dist/src/Evolu/Evolu.js +5 -4
- package/dist/src/Evolu/Owner.d.ts +84 -105
- package/dist/src/Evolu/Owner.d.ts.map +1 -1
- package/dist/src/Evolu/Owner.js +78 -89
- package/dist/src/Evolu/Protocol.d.ts +2 -2
- package/dist/src/Evolu/Protocol.d.ts.map +1 -1
- package/dist/src/Evolu/Protocol.js +1 -1
- package/dist/src/Evolu/Schema.d.ts +0 -7
- package/dist/src/Evolu/Schema.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/Crypto.ts +6 -4
- package/src/Evolu/Config.ts +7 -7
- package/src/Evolu/Db.ts +204 -159
- package/src/Evolu/Evolu.ts +6 -4
- package/src/Evolu/Owner.ts +128 -203
- package/src/Evolu/Protocol.ts +2 -8
- package/src/Evolu/Schema.ts +6 -7
|
@@ -1,40 +1,45 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Evolu Owner - Data Ownership and Collaboration
|
|
3
|
+
*
|
|
4
|
+
* An {@link Owner} is an entity that represents ownership of data in Evolu. It
|
|
5
|
+
* consists of cryptographic keys derived from a {@link Mnemonic} via SLIP-21:
|
|
6
|
+
*
|
|
7
|
+
* - **{@link OwnerId}**: Globally unique public identifier
|
|
8
|
+
* - **{@link EncryptionKey}**: Symmetric encryption key for data protection
|
|
9
|
+
* - **{@link WriteKey}**: Authentication token for write operations
|
|
10
|
+
*
|
|
11
|
+
* Every Evolu app has at least one owner, the {@link AppOwner}. There are
|
|
12
|
+
* several owner variants for different use cases:
|
|
13
|
+
*
|
|
14
|
+
* **{@link ShardOwner}**: Derived from {@link AppOwner} for partitioning data and
|
|
15
|
+
* selective synchronization using {@link createShardOwner}
|
|
16
|
+
*
|
|
17
|
+
* **{@link SharedOwner}**: Created for collaboration with write access, not
|
|
18
|
+
* meant to be shared directly
|
|
19
|
+
*
|
|
20
|
+
* **{@link SharedReadonlyOwner}**: Read-only version for safe data sharing,
|
|
21
|
+
* created from {@link SharedOwner} using {@link createSharedReadonlyOwner}
|
|
22
|
+
*
|
|
23
|
+
* Owners are designed for data synchronization and backup. Authentication
|
|
24
|
+
* systems built on public/private key cryptography use these primitives. This
|
|
25
|
+
* design ensures Evolu Relay knows as little as possible - it only sees
|
|
26
|
+
* Timestamp, OwnerId, and EncryptedDbChange.
|
|
3
27
|
*
|
|
4
28
|
* @module
|
|
5
29
|
*/
|
|
30
|
+
import { NonEmptyReadonlyArray } from "../Array.js";
|
|
6
31
|
import { CreateMnemonicDep, CreateRandomBytesDep, EncryptionKey, MnemonicSeed } from "../Crypto.js";
|
|
7
|
-
import {
|
|
8
|
-
import { TimeDep } from "../Time.js";
|
|
9
|
-
import { DateIsoString, Mnemonic, NonNegativeInt } from "../Type.js";
|
|
10
|
-
import { TimestampString } from "./Timestamp.js";
|
|
32
|
+
import { Mnemonic, NonNegativeInt } from "../Type.js";
|
|
11
33
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* An owner has a {@link Mnemonic} from which {@link OwnerId} and
|
|
17
|
-
* {@link EncryptionKey} are deterministically derived using SLIP-21, and an
|
|
18
|
-
* optional {@link WriteKey} that, when present, enables writing to the Evolu
|
|
19
|
-
* Relay or peers. The {@link WriteKey} can be rotated.
|
|
34
|
+
* Represents ownership of data in Evolu. Created from a {@link Mnemonic} via
|
|
35
|
+
* SLIP-21 key derivation using {@link createOwner}, providing cryptographic keys
|
|
36
|
+
* for data access and authentication.
|
|
20
37
|
*
|
|
21
|
-
*
|
|
22
|
-
* {@link
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* Public-key cryptography isn’t included here as it belongs to app and varies
|
|
26
|
-
* by use case. An Evolu app without collaboration doesn’t need it, while a
|
|
27
|
-
* Nostr-like app can leverage Nostr NIPs, or a super-safe app can use
|
|
28
|
-
* post-quantum cryptography.
|
|
38
|
+
* - {@link OwnerId}: Globally unique public identifier
|
|
39
|
+
* - {@link EncryptionKey}: Symmetric encryption key for data protection
|
|
40
|
+
* - {@link WriteKey}: Authentication token for write operations (rotatable)
|
|
29
41
|
*/
|
|
30
42
|
export interface Owner {
|
|
31
|
-
readonly mnemonic: Mnemonic;
|
|
32
|
-
readonly createdAt: DateIsoString;
|
|
33
|
-
readonly id: OwnerId;
|
|
34
|
-
readonly encryptionKey: EncryptionKey;
|
|
35
|
-
readonly writeKey: WriteKey;
|
|
36
|
-
}
|
|
37
|
-
export interface OwnerWithWriteAccess {
|
|
38
43
|
readonly id: OwnerId;
|
|
39
44
|
readonly encryptionKey: EncryptionKey;
|
|
40
45
|
readonly writeKey: WriteKey;
|
|
@@ -51,107 +56,81 @@ export declare const OwnerId: import("../Type.js").BrandType<import("../Type.js"
|
|
|
51
56
|
export type OwnerId = typeof OwnerId.Type;
|
|
52
57
|
export declare const writeKeyLength: NonNegativeInt;
|
|
53
58
|
/**
|
|
54
|
-
* A secure token proving the initiator can write changes. Derived from a
|
|
55
|
-
* mnemonic or randomly generated. It
|
|
59
|
+
* A secure token proving that the initiator can write changes. Derived from a
|
|
60
|
+
* mnemonic or randomly generated via {@link createWriteKey}. It is rotatable.
|
|
56
61
|
*/
|
|
57
62
|
export declare const WriteKey: import("../Type.js").BrandType<import("../Type.js").BrandType<import("../Type.js").Type<"Uint8Array", Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>, import("../Type.js").Uint8ArrayError, Uint8Array<ArrayBufferLike>, import("../Type.js").Uint8ArrayError>, `Length${number & import("../Types.js").Brand<"Int"> & import("../Types.js").Brand<"NonNegative">}`, import("../Type.js").LengthError<number & import("../Types.js").Brand<"Int"> & import("../Types.js").Brand<"NonNegative">>, import("../Type.js").Uint8ArrayError>, "WriteKey", import("../Type.js").BrandWithoutRefineError<"WriteKey", import("../Type.js").Uint8ArrayError | import("../Type.js").LengthError<number & import("../Types.js").Brand<"Int"> & import("../Types.js").Brand<"NonNegative">>>, never>;
|
|
58
63
|
export type WriteKey = typeof WriteKey.Type;
|
|
64
|
+
/** Creates a randomly generated {@link WriteKey}. */
|
|
65
|
+
export declare const createWriteKey: (deps: CreateRandomBytesDep) => WriteKey;
|
|
66
|
+
/** Creates an {@link Owner} from a {@link Mnemonic} using SLIP-21 key derivation. */
|
|
67
|
+
export declare const createOwner: (mnemonic: Mnemonic) => Owner;
|
|
59
68
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
69
|
+
* Creates an {@link Owner} from a {@link MnemonicSeed} using SLIP-21 key
|
|
70
|
+
* derivation.
|
|
71
|
+
*/
|
|
72
|
+
export declare const createOwnerFromMnemonicSeed: (seed: MnemonicSeed) => Owner;
|
|
73
|
+
/**
|
|
74
|
+
* The owner representing app data. Can be created from a {@link Mnemonic} or
|
|
75
|
+
* from external keys when the mnemonic should not be shared with the Evolu
|
|
76
|
+
* app.
|
|
65
77
|
*/
|
|
66
78
|
export interface AppOwner extends Owner {
|
|
67
79
|
readonly type: "AppOwner";
|
|
80
|
+
/**
|
|
81
|
+
* The mnemonic that was used to derive the AppOwner keys. Optional when the
|
|
82
|
+
* AppOwner is created from external keys to avoid sharing the mnemonic with
|
|
83
|
+
* the Evolu app.
|
|
84
|
+
*/
|
|
85
|
+
readonly mnemonic?: Mnemonic | null;
|
|
68
86
|
}
|
|
87
|
+
export declare const createAppOwner: (mnemonic: Mnemonic) => AppOwner;
|
|
69
88
|
/**
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
* in an app table (encrypted by `AppOwner`) and synced between devices. Its
|
|
73
|
-
* `writeKey` is deterministic and rotatable, enabling selective syncing of data
|
|
74
|
-
* subsets. Not intended for sharing outside the app.
|
|
75
|
-
*
|
|
76
|
-
* This type omits `id`, `encryptionKey`, and `createdAt` as they are derived by
|
|
77
|
-
* Evolu from the `mnemonic`, reducing storage overhead.
|
|
89
|
+
* Owner for sharding app data. Allows partitioning of database changes for
|
|
90
|
+
* selective synchronization.
|
|
78
91
|
*/
|
|
79
|
-
export interface ShardOwner {
|
|
92
|
+
export interface ShardOwner extends Owner {
|
|
80
93
|
readonly type: "ShardOwner";
|
|
81
|
-
readonly mnemonic: Mnemonic;
|
|
82
|
-
readonly writeKey: WriteKey;
|
|
83
94
|
}
|
|
84
95
|
/**
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
* stored alongside it in the app table) and rotatable, ensuring it cannot be
|
|
88
|
-
* regenerated by others if shared. Share the `mnemonic` alone for read-only
|
|
89
|
-
* access (as `SharedReadonlyOwner`) or share SharedOwner itself for write
|
|
90
|
-
* access.
|
|
96
|
+
* Creates a {@link ShardOwner} derived from an {@link AppOwner} using the
|
|
97
|
+
* specified path.
|
|
91
98
|
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
99
|
+
* ### Example
|
|
100
|
+
*
|
|
101
|
+
* ```ts
|
|
102
|
+
* const contactsShard = createShardOwner(appOwner, ["contacts"]);
|
|
103
|
+
* const projectShard = createShardOwner(appOwner, [
|
|
104
|
+
* "projects",
|
|
105
|
+
* "project-1",
|
|
106
|
+
* ]);
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
export declare const createShardOwner: (appOwner: AppOwner, path: NonEmptyReadonlyArray<string>) => ShardOwner;
|
|
110
|
+
/**
|
|
111
|
+
* Owner for collaborative data with write access. Created by a user for their
|
|
112
|
+
* own use, not meant to be shared directly. To share data, use
|
|
113
|
+
* {@link createSharedReadonlyOwner} to create a {@link SharedReadonlyOwner} for
|
|
114
|
+
* read-only access.
|
|
94
115
|
*/
|
|
95
|
-
export interface SharedOwner {
|
|
116
|
+
export interface SharedOwner extends Owner {
|
|
96
117
|
readonly type: "SharedOwner";
|
|
97
118
|
readonly mnemonic: Mnemonic;
|
|
98
|
-
readonly writeKey: WriteKey;
|
|
99
119
|
}
|
|
120
|
+
/** Creates a {@link SharedOwner} with a freshly generated {@link Mnemonic}. */
|
|
121
|
+
export declare const createSharedOwner: (deps: CreateMnemonicDep) => SharedOwner;
|
|
100
122
|
/**
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
* Typically derived from a `SharedOwner` by sharing its `mnemonic` without the
|
|
105
|
-
* `writeKey`.
|
|
123
|
+
* Read-only version of a {@link SharedOwner} for data sharing. Contains only the
|
|
124
|
+
* {@link OwnerId} and {@link EncryptionKey} needed for others to read the shared
|
|
125
|
+
* data without write access.
|
|
106
126
|
*/
|
|
107
127
|
export interface SharedReadonlyOwner {
|
|
108
128
|
readonly type: "SharedReadonlyOwner";
|
|
109
|
-
readonly
|
|
129
|
+
readonly id: OwnerId;
|
|
130
|
+
readonly encryptionKey: EncryptionKey;
|
|
110
131
|
}
|
|
111
|
-
/**
|
|
112
|
-
* Creates an {@link AppOwner}, optionally from an existing mnemonic to restore
|
|
113
|
-
* it on another device; otherwise, generates a new mnemonic.
|
|
114
|
-
*/
|
|
115
|
-
export declare const createAppOwner: (deps: TimeDep & CreateRandomBytesDep & CreateMnemonicDep) => (mnemonic?: string & import("../Types.js").Brand<"Trimmed"> & import("../Types.js").Brand<"MinLength1"> & import("../Types.js").Brand<"Mnemonic">) => AppOwner;
|
|
116
|
-
/**
|
|
117
|
-
* Creates a {@link ShardOwner} for sharding app data with a freshly generated
|
|
118
|
-
* mnemonic. Unlike {@link createAppOwner}, it doesn’t accept an existing
|
|
119
|
-
* mnemonic because ShardOwner mnemonics are always generated and restored
|
|
120
|
-
* automatically via database sync.
|
|
121
|
-
*/
|
|
122
|
-
export declare const createShardOwner: (deps: TimeDep & CreateRandomBytesDep & CreateMnemonicDep) => ShardOwner;
|
|
123
|
-
/**
|
|
124
|
-
* Creates a fresh {@link SharedOwner} for sharing data with write access. Takes
|
|
125
|
-
* no arguments as both `mnemonic` and rotatable `writeKey` are newly generated;
|
|
126
|
-
* when shared, recipients use the provided `mnemonic` and `writeKey` directly
|
|
127
|
-
* as a {@link SharedOwner} without needing to recreate it.
|
|
128
|
-
*/
|
|
129
|
-
export declare const createSharedOwner: (deps: CreateRandomBytesDep & CreateMnemonicDep) => SharedOwner;
|
|
130
|
-
/**
|
|
131
|
-
* Creates a {@link SharedReadonlyOwner} from a {@link SharedOwner} for read-only
|
|
132
|
-
* data sharing. Extracts the `mnemonic` from the provided {@link SharedOwner},
|
|
133
|
-
* omitting its `writeKey` to ensure read-only access.
|
|
134
|
-
*/
|
|
132
|
+
/** Creates a {@link SharedReadonlyOwner} from a {@link SharedOwner}. */
|
|
135
133
|
export declare const createSharedReadonlyOwner: (sharedOwner: SharedOwner) => SharedReadonlyOwner;
|
|
136
|
-
/** Creates an {@link Owner} with optional `mnemonic` and `writeKey`. */
|
|
137
|
-
export declare const createOwner: (deps: TimeDep & CreateRandomBytesDep & CreateMnemonicDep) => (mnemonic?: string & import("../Types.js").Brand<"Trimmed"> & import("../Types.js").Brand<"MinLength1"> & import("../Types.js").Brand<"Mnemonic">, writeKey?: WriteKey) => Owner;
|
|
138
|
-
export declare const createWriteKey: (deps: CreateRandomBytesDep) => (seed?: MnemonicSeed) => WriteKey;
|
|
139
|
-
/**
|
|
140
|
-
* An `OwnerRow` represents a row in the `evolu_owner` table, based on an
|
|
141
|
-
* {@link Owner} with an added `timestamp` ({@link TimestampString}) for CRDT
|
|
142
|
-
* sync. It supports all {@link Owner} variants with an optional `writeKey`; use
|
|
143
|
-
* {@link createOwnerRow} to align it with a specific {@link Owner}.
|
|
144
|
-
*/
|
|
145
|
-
export type OwnerRow = Omit<Owner, "writeKey"> & {
|
|
146
|
-
readonly writeKey: WriteKey | null;
|
|
147
|
-
readonly timestamp: TimestampString;
|
|
148
|
-
};
|
|
149
|
-
/**
|
|
150
|
-
* Creates an {@link OwnerRow} from any {@link Owner} variant for the
|
|
151
|
-
* `evolu_owner` table, adding a `timestamp` ({@link TimestampString}) for CRDT
|
|
152
|
-
* sync.
|
|
153
|
-
*/
|
|
154
|
-
export declare const createOwnerRow: (deps: TimeDep & CreateRandomBytesDep & CreateMnemonicDep & NanoIdLibDep) => (owner: AppOwner | ShardOwner | SharedOwner | SharedReadonlyOwner) => OwnerRow;
|
|
155
134
|
/**
|
|
156
135
|
* Rotates the {@link WriteKey} for an {@link AppOwner}, {@link ShardOwner}, or
|
|
157
136
|
* {@link SharedOwner}, returning a new instance with the updated key.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Owner.d.ts","sourceRoot":"","sources":["../../../src/Evolu/Owner.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"Owner.d.ts","sourceRoot":"","sources":["../../../src/Evolu/Owner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EAGpB,aAAa,EACb,YAAY,EAEb,MAAM,cAAc,CAAC;AACtB,OAAO,EAKL,QAAQ,EACR,cAAc,EAEf,MAAM,YAAY,CAAC;AAEpB;;;;;;;;GAQG;AACH,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,qaAAuB,CAAC;AAC5C,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAC;AAE1C,eAAO,MAAM,cAAc,EAAS,cAAc,CAAC;AAEnD;;;GAGG;AACH,eAAO,MAAM,QAAQ,mwBAAwD,CAAC;AAC9E,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAC;AAE5C,qDAAqD;AACrD,eAAO,MAAM,cAAc,GAAI,MAAM,oBAAoB,KAAG,QACT,CAAC;AAEpD,qFAAqF;AACrF,eAAO,MAAM,WAAW,GAAI,UAAU,QAAQ,KAAG,KAGhD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,2BAA2B,GAAI,MAAM,YAAY,KAAG,KAS/D,CAAC;AAEH;;;;GAIG;AACH,MAAM,WAAW,QAAS,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;CACrC;AAED,eAAO,MAAM,cAAc,GAAI,UAAU,QAAQ,KAAG,QAIlD,CAAC;AAEH;;;GAGG;AACH,MAAM,WAAW,UAAW,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC7B;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB,GAC3B,UAAU,QAAQ,EAClB,MAAM,qBAAqB,CAAC,MAAM,CAAC,KAClC,UAcF,CAAC;AAEF;;;;;GAKG;AACH,MAAM,WAAW,WAAY,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAED,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB,GAAI,MAAM,iBAAiB,KAAG,WAO3D,CAAC;AAEF;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;CACvC;AAED,wEAAwE;AACxE,eAAO,MAAM,yBAAyB,GACpC,aAAa,WAAW,KACvB,mBAID,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,QAAQ,GAAG,UAAU,GAAG,WAAW,EAC1E,OAAO,CAAC,EACR,aAAa,QAAQ,KACpB,CAKF,CAAC"}
|
package/dist/src/Evolu/Owner.js
CHANGED
|
@@ -1,12 +1,34 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Evolu Owner - Data Ownership and Collaboration
|
|
3
|
+
*
|
|
4
|
+
* An {@link Owner} is an entity that represents ownership of data in Evolu. It
|
|
5
|
+
* consists of cryptographic keys derived from a {@link Mnemonic} via SLIP-21:
|
|
6
|
+
*
|
|
7
|
+
* - **{@link OwnerId}**: Globally unique public identifier
|
|
8
|
+
* - **{@link EncryptionKey}**: Symmetric encryption key for data protection
|
|
9
|
+
* - **{@link WriteKey}**: Authentication token for write operations
|
|
10
|
+
*
|
|
11
|
+
* Every Evolu app has at least one owner, the {@link AppOwner}. There are
|
|
12
|
+
* several owner variants for different use cases:
|
|
13
|
+
*
|
|
14
|
+
* **{@link ShardOwner}**: Derived from {@link AppOwner} for partitioning data and
|
|
15
|
+
* selective synchronization using {@link createShardOwner}
|
|
16
|
+
*
|
|
17
|
+
* **{@link SharedOwner}**: Created for collaboration with write access, not
|
|
18
|
+
* meant to be shared directly
|
|
19
|
+
*
|
|
20
|
+
* **{@link SharedReadonlyOwner}**: Read-only version for safe data sharing,
|
|
21
|
+
* created from {@link SharedOwner} using {@link createSharedReadonlyOwner}
|
|
22
|
+
*
|
|
23
|
+
* Owners are designed for data synchronization and backup. Authentication
|
|
24
|
+
* systems built on public/private key cryptography use these primitives. This
|
|
25
|
+
* design ensures Evolu Relay knows as little as possible - it only sees
|
|
26
|
+
* Timestamp, OwnerId, and EncryptedDbChange.
|
|
3
27
|
*
|
|
4
28
|
* @module
|
|
5
29
|
*/
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { brand, DateIso, Id, length, Uint8Array, } from "../Type.js";
|
|
9
|
-
import { createInitialTimestamp, timestampToTimestampString, } from "./Timestamp.js";
|
|
30
|
+
import { createSlip21, createSlip21Id, mnemonicToMnemonicSeed, } from "../Crypto.js";
|
|
31
|
+
import { brand, Id, length, Uint8Array, } from "../Type.js";
|
|
10
32
|
/**
|
|
11
33
|
* The unique identifier of {@link Owner} derived from the {@link Mnemonic}.
|
|
12
34
|
*
|
|
@@ -18,107 +40,74 @@ import { createInitialTimestamp, timestampToTimestampString, } from "./Timestamp
|
|
|
18
40
|
export const OwnerId = brand("OwnerId", Id);
|
|
19
41
|
export const writeKeyLength = 16;
|
|
20
42
|
/**
|
|
21
|
-
* A secure token proving the initiator can write changes. Derived from a
|
|
22
|
-
* mnemonic or randomly generated. It
|
|
43
|
+
* A secure token proving that the initiator can write changes. Derived from a
|
|
44
|
+
* mnemonic or randomly generated via {@link createWriteKey}. It is rotatable.
|
|
23
45
|
*/
|
|
24
46
|
export const WriteKey = brand("WriteKey", length(writeKeyLength)(Uint8Array));
|
|
47
|
+
/** Creates a randomly generated {@link WriteKey}. */
|
|
48
|
+
export const createWriteKey = (deps) => deps.createRandomBytes(16);
|
|
49
|
+
/** Creates an {@link Owner} from a {@link Mnemonic} using SLIP-21 key derivation. */
|
|
50
|
+
export const createOwner = (mnemonic) => {
|
|
51
|
+
const seed = mnemonicToMnemonicSeed(mnemonic);
|
|
52
|
+
return createOwnerFromMnemonicSeed(seed);
|
|
53
|
+
};
|
|
25
54
|
/**
|
|
26
|
-
* Creates an {@link
|
|
27
|
-
*
|
|
55
|
+
* Creates an {@link Owner} from a {@link MnemonicSeed} using SLIP-21 key
|
|
56
|
+
* derivation.
|
|
28
57
|
*/
|
|
29
|
-
export const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
58
|
+
export const createOwnerFromMnemonicSeed = (seed) => ({
|
|
59
|
+
id: createSlip21Id(seed, ["Evolu", "Owner Id"]),
|
|
60
|
+
encryptionKey: createSlip21(seed, [
|
|
61
|
+
"Evolu",
|
|
62
|
+
"Encryption Key",
|
|
63
|
+
]),
|
|
64
|
+
writeKey: createSlip21(seed, ["Evolu", "Write Key"]).slice(0, 16),
|
|
65
|
+
});
|
|
66
|
+
export const createAppOwner = (mnemonic) => ({
|
|
67
|
+
type: "AppOwner",
|
|
68
|
+
mnemonic,
|
|
69
|
+
...createOwner(mnemonic),
|
|
70
|
+
});
|
|
33
71
|
/**
|
|
34
|
-
* Creates a {@link ShardOwner}
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
72
|
+
* Creates a {@link ShardOwner} derived from an {@link AppOwner} using the
|
|
73
|
+
* specified path.
|
|
74
|
+
*
|
|
75
|
+
* ### Example
|
|
76
|
+
*
|
|
77
|
+
* ```ts
|
|
78
|
+
* const contactsShard = createShardOwner(appOwner, ["contacts"]);
|
|
79
|
+
* const projectShard = createShardOwner(appOwner, [
|
|
80
|
+
* "projects",
|
|
81
|
+
* "project-1",
|
|
82
|
+
* ]);
|
|
83
|
+
* ```
|
|
38
84
|
*/
|
|
39
|
-
export const createShardOwner = (
|
|
40
|
-
|
|
85
|
+
export const createShardOwner = (appOwner, path) => {
|
|
86
|
+
/**
|
|
87
|
+
* The shardSeed is never shared or persisted, only used for SLIP-21
|
|
88
|
+
* derivation to create shard-specific keys.
|
|
89
|
+
*/
|
|
90
|
+
const shardSeed = createSlip21(appOwner.encryptionKey, path);
|
|
41
91
|
return {
|
|
42
92
|
type: "ShardOwner",
|
|
43
|
-
|
|
44
|
-
writeKey: owner.writeKey,
|
|
93
|
+
...createOwnerFromMnemonicSeed(shardSeed),
|
|
45
94
|
};
|
|
46
95
|
};
|
|
47
|
-
/**
|
|
48
|
-
* Creates a fresh {@link SharedOwner} for sharing data with write access. Takes
|
|
49
|
-
* no arguments as both `mnemonic` and rotatable `writeKey` are newly generated;
|
|
50
|
-
* when shared, recipients use the provided `mnemonic` and `writeKey` directly
|
|
51
|
-
* as a {@link SharedOwner} without needing to recreate it.
|
|
52
|
-
*/
|
|
96
|
+
/** Creates a {@link SharedOwner} with a freshly generated {@link Mnemonic}. */
|
|
53
97
|
export const createSharedOwner = (deps) => {
|
|
54
98
|
const mnemonic = deps.createMnemonic();
|
|
55
|
-
const writeKey = createWriteKey(deps)(); // Random, no seed
|
|
56
99
|
return {
|
|
57
100
|
type: "SharedOwner",
|
|
58
101
|
mnemonic,
|
|
59
|
-
|
|
102
|
+
...createOwner(mnemonic),
|
|
60
103
|
};
|
|
61
104
|
};
|
|
62
|
-
/**
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
return {
|
|
69
|
-
type: "SharedReadonlyOwner",
|
|
70
|
-
mnemonic: sharedOwner.mnemonic,
|
|
71
|
-
};
|
|
72
|
-
};
|
|
73
|
-
/** Creates an {@link Owner} with optional `mnemonic` and `writeKey`. */
|
|
74
|
-
export const createOwner = (deps) => (mnemonic = deps.createMnemonic(), writeKey) => {
|
|
75
|
-
const seed = mnemonicToMnemonicSeed(mnemonic);
|
|
76
|
-
const id = createSlip21Id(seed, ["Evolu", "Owner Id"]);
|
|
77
|
-
const encryptionKey = createEncryptionKey(seed);
|
|
78
|
-
const createdAt = DateIso.fromParent(new Date(deps.time.now()));
|
|
79
|
-
assert(createdAt.ok, "Invalid DateIso: bad system clock");
|
|
80
|
-
return {
|
|
81
|
-
mnemonic,
|
|
82
|
-
createdAt: createdAt.value,
|
|
83
|
-
id,
|
|
84
|
-
encryptionKey,
|
|
85
|
-
writeKey: writeKey ?? createWriteKey(deps)(seed),
|
|
86
|
-
};
|
|
87
|
-
};
|
|
88
|
-
export const createWriteKey = (deps) => (seed) => {
|
|
89
|
-
const key = seed
|
|
90
|
-
? createSlip21(seed, ["Evolu", "Write Key"]).slice(0, 16)
|
|
91
|
-
: deps.createRandomBytes(16);
|
|
92
|
-
const writeKey = WriteKey.from(key);
|
|
93
|
-
assert(writeKey.ok, "Ensure valid WriteKey");
|
|
94
|
-
return writeKey.value;
|
|
95
|
-
};
|
|
96
|
-
/**
|
|
97
|
-
* Creates an {@link OwnerRow} from any {@link Owner} variant for the
|
|
98
|
-
* `evolu_owner` table, adding a `timestamp` ({@link TimestampString}) for CRDT
|
|
99
|
-
* sync.
|
|
100
|
-
*/
|
|
101
|
-
export const createOwnerRow = (deps) => (owner) => {
|
|
102
|
-
const timestamp = timestampToTimestampString(createInitialTimestamp(deps));
|
|
103
|
-
switch (owner.type) {
|
|
104
|
-
case "AppOwner": {
|
|
105
|
-
const { type, ...rest } = owner;
|
|
106
|
-
return { ...rest, timestamp };
|
|
107
|
-
}
|
|
108
|
-
case "ShardOwner":
|
|
109
|
-
case "SharedOwner":
|
|
110
|
-
return {
|
|
111
|
-
...createOwner(deps)(owner.mnemonic, owner.writeKey),
|
|
112
|
-
timestamp,
|
|
113
|
-
};
|
|
114
|
-
case "SharedReadonlyOwner":
|
|
115
|
-
return {
|
|
116
|
-
...createOwner(deps)(owner.mnemonic),
|
|
117
|
-
writeKey: null,
|
|
118
|
-
timestamp,
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
};
|
|
105
|
+
/** Creates a {@link SharedReadonlyOwner} from a {@link SharedOwner}. */
|
|
106
|
+
export const createSharedReadonlyOwner = (sharedOwner) => ({
|
|
107
|
+
type: "SharedReadonlyOwner",
|
|
108
|
+
id: sharedOwner.id,
|
|
109
|
+
encryptionKey: sharedOwner.encryptionKey,
|
|
110
|
+
});
|
|
122
111
|
/**
|
|
123
112
|
* Rotates the {@link WriteKey} for an {@link AppOwner}, {@link ShardOwner}, or
|
|
124
113
|
* {@link SharedOwner}, returning a new instance with the updated key.
|
|
@@ -149,7 +149,7 @@ import { Result } from "../Result.js";
|
|
|
149
149
|
import { SqliteValue } from "../Sqlite.js";
|
|
150
150
|
import { Id, NanoId, NonNegativeInt, PositiveInt } from "../Type.js";
|
|
151
151
|
import { Brand } from "../Types.js";
|
|
152
|
-
import {
|
|
152
|
+
import { Owner, OwnerId, WriteKey } from "./Owner.js";
|
|
153
153
|
import { BinaryTimestamp, NodeId, Timestamp } from "./Timestamp.js";
|
|
154
154
|
/** Maximum size of the entire protocol message in bytes. */
|
|
155
155
|
export declare const maxProtocolMessageSize: PositiveInt;
|
|
@@ -339,7 +339,7 @@ export interface ProtocolTimestampMismatchError {
|
|
|
339
339
|
* ensures all messages will be sent in the next round(s) even over
|
|
340
340
|
* unidirectional and stateless transports.
|
|
341
341
|
*/
|
|
342
|
-
export declare const createProtocolMessageFromCrdtMessages: (deps: SymmetricCryptoDep & CreateRandomBytesDep) => (owner:
|
|
342
|
+
export declare const createProtocolMessageFromCrdtMessages: (deps: SymmetricCryptoDep & CreateRandomBytesDep) => (owner: Owner, messages: NonEmptyReadonlyArray<CrdtMessage>, maxSize?: PositiveInt) => ProtocolMessage;
|
|
343
343
|
/** Creates a {@link ProtocolMessage} for sync. */
|
|
344
344
|
export declare const createProtocolMessageForSync: (deps: StorageDep) => (ownerId: OwnerId) => ProtocolMessage | null;
|
|
345
345
|
/** Creates a ProtocolMessage for {@link WriteKey} rotation. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Protocol.d.ts","sourceRoot":"","sources":["../../../src/Evolu/Protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+IG;AAIH,OAAO,EAA2B,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE7E,OAAO,EACL,MAAM,EAMP,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EACpB,aAAa,EAEb,2BAA2B,EAC3B,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAItB,OAAO,EAAW,MAAM,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAIL,EAAE,EAIF,MAAM,EACN,cAAc,EAGd,WAAW,EAEZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,EAAa,MAAM,aAAa,CAAC;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"Protocol.d.ts","sourceRoot":"","sources":["../../../src/Evolu/Protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -154,7 +154,7 @@ import { objectToEntries } from "../Object.js";
|
|
|
154
154
|
import { err, ok } from "../Result.js";
|
|
155
155
|
import { SqliteValue } from "../Sqlite.js";
|
|
156
156
|
import { Base64Url, base64UrlAlphabet, DateIsoString, Id, idTypeValueLength, JsonValueFromString, maxLength, NonNegativeInt, Number, object, record, } from "../Type.js";
|
|
157
|
-
import { writeKeyLength
|
|
157
|
+
import { writeKeyLength } from "./Owner.js";
|
|
158
158
|
import { binaryTimestampLength, binaryTimestampToTimestamp, Counter, eqTimestamp, Millis, timestampToBinaryTimestamp, } from "./Timestamp.js";
|
|
159
159
|
/** Maximum size of the entire protocol message in bytes. */
|
|
160
160
|
export const maxProtocolMessageSize = 1_000_000;
|
|
@@ -6,7 +6,6 @@ import { AnyType, BrandType, DateIso, IdType, InferErrors, InferInput, InferType
|
|
|
6
6
|
import { Simplify } from "../Types.js";
|
|
7
7
|
import { DbSchema } from "./Db.js";
|
|
8
8
|
import { DbIndexesBuilder } from "./Kysely.js";
|
|
9
|
-
import { ShardOwner, SharedOwner } from "./Owner.js";
|
|
10
9
|
import { BinaryId } from "./Protocol.js";
|
|
11
10
|
import { Query, Row } from "./Query.js";
|
|
12
11
|
import { BinaryTimestamp } from "./Timestamp.js";
|
|
@@ -109,12 +108,6 @@ export interface MutationOptions {
|
|
|
109
108
|
* `onlyValidate: true`.
|
|
110
109
|
*/
|
|
111
110
|
readonly onlyValidate?: boolean;
|
|
112
|
-
/**
|
|
113
|
-
* The owner to use for this mutation. Can be a {@link ShardOwner} for sharding
|
|
114
|
-
* app data or a {@link SharedOwner} for collaborative write access. If
|
|
115
|
-
* omitted, defaults to the app's {@link AppOwner}.
|
|
116
|
-
*/
|
|
117
|
-
readonly owner?: ShardOwner | SharedOwner;
|
|
118
111
|
}
|
|
119
112
|
/**
|
|
120
113
|
* Evolu has to limit the maximum mutation size. Otherwise, sync couldn't use
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../../../src/Evolu/Schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAGpD,OAAO,EAA8B,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAW,MAAM,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EACL,OAAO,EAEP,SAAS,EAET,OAAO,EAEP,MAAM,EACN,WAAW,EACX,UAAU,EACV,SAAS,EACT,qBAAqB,EAErB,uBAAuB,EAGvB,UAAU,EAGV,YAAY,EACZ,IAAI,EACJ,SAAS,EACV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAiB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,
|
|
1
|
+
{"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../../../src/Evolu/Schema.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/Crypto.ts
CHANGED
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
Uint8Array,
|
|
22
22
|
} from "./Type.js";
|
|
23
23
|
import { Brand } from "./Types.js";
|
|
24
|
+
import { assert } from "./Assert.js";
|
|
24
25
|
|
|
25
26
|
/** `Uint8Array` created by {@link createRandomBytes}. */
|
|
26
27
|
export type RandomBytes = Uint8Array & Brand<"RandomBytes">;
|
|
@@ -58,6 +59,11 @@ export const createSlip21 = (
|
|
|
58
59
|
seed: MnemonicSeed,
|
|
59
60
|
path: ReadonlyArray<string>,
|
|
60
61
|
): Uint8Array => {
|
|
62
|
+
assert(
|
|
63
|
+
seed.length >= 16 && seed.length <= 64,
|
|
64
|
+
`Unusual SLIP-0021 seed length: ${seed.length} bytes`,
|
|
65
|
+
);
|
|
66
|
+
|
|
61
67
|
let m = hmac(sha512, "Symmetric key seed", seed);
|
|
62
68
|
for (const component of path) {
|
|
63
69
|
const p = new TextEncoder().encode(component);
|
|
@@ -100,9 +106,6 @@ export const createSlip21Id = (
|
|
|
100
106
|
export const EncryptionKey = brand("EncryptionKey", length(32)(Uint8Array));
|
|
101
107
|
export type EncryptionKey = typeof EncryptionKey.Type;
|
|
102
108
|
|
|
103
|
-
export const createEncryptionKey = (seed: MnemonicSeed): EncryptionKey =>
|
|
104
|
-
createSlip21(seed, ["Evolu", "Encryption Key"]) as EncryptionKey;
|
|
105
|
-
|
|
106
109
|
/** Symmetric cryptography. */
|
|
107
110
|
export interface SymmetricCrypto {
|
|
108
111
|
readonly nonceLength: NonNegativeInt;
|
|
@@ -185,7 +188,6 @@ export const padmePaddedLength = (length: NonNegativeInt): NonNegativeInt => {
|
|
|
185
188
|
* Returns the PADMÉ padding length for a given input length. Uses
|
|
186
189
|
* {@link padmePaddedLength}.
|
|
187
190
|
*/
|
|
188
|
-
|
|
189
191
|
export const padmePaddingLength = (length: NonNegativeInt): NonNegativeInt => {
|
|
190
192
|
return (padmePaddedLength(length) - length) as NonNegativeInt;
|
|
191
193
|
};
|