@slopus/happy-agent-client 0.0.43 → 0.0.45

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.
@@ -0,0 +1,310 @@
1
+ /** Local-first Loro documents that may synchronize through Murmur. */
2
+ import { type Static } from "@sinclair/typebox";
3
+ /** The stable Murmur service identifier for every Happy CRDT service. */
4
+ export declare const CRDT_MURMUR_SERVICE: "crdt.loro";
5
+ /** An immutable application-owned discriminator such as `todo` or `com.example.board`. */
6
+ export declare const crdtServiceKindSchema: import("@sinclair/typebox").TString;
7
+ export type CrdtServiceKind = Static<typeof crdtServiceKindSchema>;
8
+ /** Human-readable display text, never an identifier. */
9
+ export declare const crdtServiceNameSchema: import("@sinclair/typebox").TString;
10
+ export type CrdtServiceName = Static<typeof crdtServiceNameSchema>;
11
+ /** Up to 512 KiB of decoded Loro bytes, encoded as unpadded base64url. */
12
+ export declare const crdtEncodedBytesSchema: import("@sinclair/typebox").TString;
13
+ export type CrdtEncodedBytes = Static<typeof crdtEncodedBytesSchema>;
14
+ /** A 32-byte Murmur account or session identity encoded as unpadded base64url. */
15
+ export declare const crdtMurmurIdentitySchema: import("@sinclair/typebox").TString;
16
+ export type CrdtMurmurIdentity = Static<typeof crdtMurmurIdentitySchema>;
17
+ /** An opaque Happy Cloud user ID used to select a sharing participant. */
18
+ export declare const crdtCloudIdSchema: import("@sinclair/typebox").TString;
19
+ export type CrdtCloudId = Static<typeof crdtCloudIdSchema>;
20
+ /** One structurally valid JSON value produced by Loro's document projection. */
21
+ export declare const crdtJsonValueSchema: import("@sinclair/typebox").TRecursive<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNumber, import("@sinclair/typebox").TBoolean, import("@sinclair/typebox").TNull, import("@sinclair/typebox").TArray<import("@sinclair/typebox").TThis>, import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TThis>]>>;
22
+ export type CrdtJsonValue = Static<typeof crdtJsonValueSchema>;
23
+ export declare const crdtTreeLimitViolationSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"depth">, import("@sinclair/typebox").TLiteral<"entries">, import("@sinclair/typebox").TLiteral<"invalid_value">, import("@sinclair/typebox").TLiteral<"serialized_size">, import("@sinclair/typebox").TLiteral<"string_size">, import("@sinclair/typebox").TLiteral<"total_values">]>;
24
+ export type CrdtTreeLimitViolation = Static<typeof crdtTreeLimitViolationSchema>;
25
+ /** Returns the first operational limit violated by a structurally valid CRDT tree. */
26
+ export declare function getCrdtTreeLimitViolation(root: CrdtTree): CrdtTreeLimitViolation | null;
27
+ /** The top-level JSON object produced by a Loro document. */
28
+ export declare const crdtTreeSchema: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TRecursive<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNumber, import("@sinclair/typebox").TBoolean, import("@sinclair/typebox").TNull, import("@sinclair/typebox").TArray<import("@sinclair/typebox").TThis>, import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TThis>]>>>;
29
+ export type CrdtTree = Static<typeof crdtTreeSchema>;
30
+ /** An account-level participant; devices are not participants. */
31
+ export declare const crdtParticipantSchema: import("@sinclair/typebox").TObject<{
32
+ identityKey: import("@sinclair/typebox").TString;
33
+ role: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"owner">, import("@sinclair/typebox").TLiteral<"admin">, import("@sinclair/typebox").TLiteral<"member">]>;
34
+ }>;
35
+ export type CrdtParticipant = Static<typeof crdtParticipantSchema>;
36
+ /** The complete confirmed Murmur policy snapshot. */
37
+ export declare const crdtPoliciesSchema: import("@sinclair/typebox").TObject<{
38
+ adminsAssignAdmins: import("@sinclair/typebox").TBoolean;
39
+ anyoneCanAddMembers: import("@sinclair/typebox").TBoolean;
40
+ sendPolicy: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"everyone">, import("@sinclair/typebox").TLiteral<"admins">]>;
41
+ }>;
42
+ export type CrdtPolicies = Static<typeof crdtPoliciesSchema>;
43
+ /** This service remains entirely local even when Murmur is online. */
44
+ export declare const crdtLocalSharingSchema: import("@sinclair/typebox").TObject<{
45
+ status: import("@sinclair/typebox").TLiteral<"local">;
46
+ }>;
47
+ export type CrdtLocalSharing = Static<typeof crdtLocalSharingSchema>;
48
+ /** This service has one encrypted Murmur sharing relationship. */
49
+ export declare const crdtSharedSharingSchema: import("@sinclair/typebox").TObject<{
50
+ owner: import("@sinclair/typebox").TString;
51
+ participants: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
52
+ identityKey: import("@sinclair/typebox").TString;
53
+ role: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"owner">, import("@sinclair/typebox").TLiteral<"admin">, import("@sinclair/typebox").TLiteral<"member">]>;
54
+ }>>;
55
+ policies: import("@sinclair/typebox").TObject<{
56
+ adminsAssignAdmins: import("@sinclair/typebox").TBoolean;
57
+ anyoneCanAddMembers: import("@sinclair/typebox").TBoolean;
58
+ sendPolicy: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"everyone">, import("@sinclair/typebox").TLiteral<"admins">]>;
59
+ }>;
60
+ recovery: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"ready">, import("@sinclair/typebox").TLiteral<"required">]>;
61
+ sessionId: import("@sinclair/typebox").TString;
62
+ status: import("@sinclair/typebox").TLiteral<"shared">;
63
+ }>;
64
+ export type CrdtSharedSharing = Static<typeof crdtSharedSharingSchema>;
65
+ export declare const crdtSharedSharingViolationSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"owner">, import("@sinclair/typebox").TLiteral<"participants">]>;
66
+ export type CrdtSharedSharingViolation = Static<typeof crdtSharedSharingViolationSchema>;
67
+ /** Checks participant ordering and the cross-field owner invariant. */
68
+ export declare function getCrdtSharedSharingViolation(value: CrdtSharedSharing): CrdtSharedSharingViolation | null;
69
+ export declare const crdtSharingSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
70
+ status: import("@sinclair/typebox").TLiteral<"local">;
71
+ }>, import("@sinclair/typebox").TObject<{
72
+ owner: import("@sinclair/typebox").TString;
73
+ participants: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
74
+ identityKey: import("@sinclair/typebox").TString;
75
+ role: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"owner">, import("@sinclair/typebox").TLiteral<"admin">, import("@sinclair/typebox").TLiteral<"member">]>;
76
+ }>>;
77
+ policies: import("@sinclair/typebox").TObject<{
78
+ adminsAssignAdmins: import("@sinclair/typebox").TBoolean;
79
+ anyoneCanAddMembers: import("@sinclair/typebox").TBoolean;
80
+ sendPolicy: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"everyone">, import("@sinclair/typebox").TLiteral<"admins">]>;
81
+ }>;
82
+ recovery: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"ready">, import("@sinclair/typebox").TLiteral<"required">]>;
83
+ sessionId: import("@sinclair/typebox").TString;
84
+ status: import("@sinclair/typebox").TLiteral<"shared">;
85
+ }>]>;
86
+ export type CrdtSharing = Static<typeof crdtSharingSchema>;
87
+ /** The bounded metadata used by catalogs and creation events. */
88
+ export declare const crdtServiceSummarySchema: import("@sinclair/typebox").TObject<{
89
+ createdAt: import("@sinclair/typebox").TInteger;
90
+ id: import("@sinclair/typebox").TString;
91
+ kind: import("@sinclair/typebox").TString;
92
+ name: import("@sinclair/typebox").TString;
93
+ service: import("@sinclair/typebox").TLiteral<"crdt.loro">;
94
+ sharing: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
95
+ status: import("@sinclair/typebox").TLiteral<"local">;
96
+ }>, import("@sinclair/typebox").TObject<{
97
+ owner: import("@sinclair/typebox").TString;
98
+ participants: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
99
+ identityKey: import("@sinclair/typebox").TString;
100
+ role: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"owner">, import("@sinclair/typebox").TLiteral<"admin">, import("@sinclair/typebox").TLiteral<"member">]>;
101
+ }>>;
102
+ policies: import("@sinclair/typebox").TObject<{
103
+ adminsAssignAdmins: import("@sinclair/typebox").TBoolean;
104
+ anyoneCanAddMembers: import("@sinclair/typebox").TBoolean;
105
+ sendPolicy: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"everyone">, import("@sinclair/typebox").TLiteral<"admins">]>;
106
+ }>;
107
+ recovery: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"ready">, import("@sinclair/typebox").TLiteral<"required">]>;
108
+ sessionId: import("@sinclair/typebox").TString;
109
+ status: import("@sinclair/typebox").TLiteral<"shared">;
110
+ }>]>;
111
+ updatedAt: import("@sinclair/typebox").TInteger;
112
+ version: import("@sinclair/typebox").TString;
113
+ }>;
114
+ export type CrdtServiceSummary = Static<typeof crdtServiceSummarySchema>;
115
+ /** A complete focused service, including its canonical Loro snapshot and JSON projection. */
116
+ export declare const crdtServiceSchema: import("@sinclair/typebox").TObject<{
117
+ createdAt: import("@sinclair/typebox").TInteger;
118
+ id: import("@sinclair/typebox").TString;
119
+ kind: import("@sinclair/typebox").TString;
120
+ name: import("@sinclair/typebox").TString;
121
+ service: import("@sinclair/typebox").TLiteral<"crdt.loro">;
122
+ sharing: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
123
+ status: import("@sinclair/typebox").TLiteral<"local">;
124
+ }>, import("@sinclair/typebox").TObject<{
125
+ owner: import("@sinclair/typebox").TString;
126
+ participants: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
127
+ identityKey: import("@sinclair/typebox").TString;
128
+ role: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"owner">, import("@sinclair/typebox").TLiteral<"admin">, import("@sinclair/typebox").TLiteral<"member">]>;
129
+ }>>;
130
+ policies: import("@sinclair/typebox").TObject<{
131
+ adminsAssignAdmins: import("@sinclair/typebox").TBoolean;
132
+ anyoneCanAddMembers: import("@sinclair/typebox").TBoolean;
133
+ sendPolicy: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"everyone">, import("@sinclair/typebox").TLiteral<"admins">]>;
134
+ }>;
135
+ recovery: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"ready">, import("@sinclair/typebox").TLiteral<"required">]>;
136
+ sessionId: import("@sinclair/typebox").TString;
137
+ status: import("@sinclair/typebox").TLiteral<"shared">;
138
+ }>]>;
139
+ state: import("@sinclair/typebox").TString;
140
+ tree: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TRecursive<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNumber, import("@sinclair/typebox").TBoolean, import("@sinclair/typebox").TNull, import("@sinclair/typebox").TArray<import("@sinclair/typebox").TThis>, import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TThis>]>>>;
141
+ updatedAt: import("@sinclair/typebox").TInteger;
142
+ version: import("@sinclair/typebox").TString;
143
+ }>;
144
+ export type CrdtService = Static<typeof crdtServiceSchema>;
145
+ /** `GET /v0/services/crdt` query parameters. */
146
+ export declare const crdtServiceListQuerySchema: import("@sinclair/typebox").TObject<{
147
+ after: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
148
+ kind: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
149
+ limit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
150
+ }>;
151
+ export type CrdtServiceListQuery = Static<typeof crdtServiceListQuerySchema>;
152
+ /** `GET /v0/services/crdt` */
153
+ export declare const crdtServiceListResponseSchema: import("@sinclair/typebox").TObject<{
154
+ connection: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"offline">, import("@sinclair/typebox").TLiteral<"online">]>;
155
+ cursor: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>;
156
+ hasMore: import("@sinclair/typebox").TBoolean;
157
+ services: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
158
+ createdAt: import("@sinclair/typebox").TInteger;
159
+ id: import("@sinclair/typebox").TString;
160
+ kind: import("@sinclair/typebox").TString;
161
+ name: import("@sinclair/typebox").TString;
162
+ service: import("@sinclair/typebox").TLiteral<"crdt.loro">;
163
+ sharing: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
164
+ status: import("@sinclair/typebox").TLiteral<"local">;
165
+ }>, import("@sinclair/typebox").TObject<{
166
+ owner: import("@sinclair/typebox").TString;
167
+ participants: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
168
+ identityKey: import("@sinclair/typebox").TString;
169
+ role: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"owner">, import("@sinclair/typebox").TLiteral<"admin">, import("@sinclair/typebox").TLiteral<"member">]>;
170
+ }>>;
171
+ policies: import("@sinclair/typebox").TObject<{
172
+ adminsAssignAdmins: import("@sinclair/typebox").TBoolean;
173
+ anyoneCanAddMembers: import("@sinclair/typebox").TBoolean;
174
+ sendPolicy: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"everyone">, import("@sinclair/typebox").TLiteral<"admins">]>;
175
+ }>;
176
+ recovery: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"ready">, import("@sinclair/typebox").TLiteral<"required">]>;
177
+ sessionId: import("@sinclair/typebox").TString;
178
+ status: import("@sinclair/typebox").TLiteral<"shared">;
179
+ }>]>;
180
+ updatedAt: import("@sinclair/typebox").TInteger;
181
+ version: import("@sinclair/typebox").TString;
182
+ }>>;
183
+ updatedAt: import("@sinclair/typebox").TInteger;
184
+ version: import("@sinclair/typebox").TString;
185
+ }>;
186
+ export type CrdtServiceListResponse = Static<typeof crdtServiceListResponseSchema>;
187
+ /** The response shared by focused CRDT service reads and mutations. */
188
+ export declare const crdtServiceResponseSchema: import("@sinclair/typebox").TObject<{
189
+ service: import("@sinclair/typebox").TObject<{
190
+ createdAt: import("@sinclair/typebox").TInteger;
191
+ id: import("@sinclair/typebox").TString;
192
+ kind: import("@sinclair/typebox").TString;
193
+ name: import("@sinclair/typebox").TString;
194
+ service: import("@sinclair/typebox").TLiteral<"crdt.loro">;
195
+ sharing: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
196
+ status: import("@sinclair/typebox").TLiteral<"local">;
197
+ }>, import("@sinclair/typebox").TObject<{
198
+ owner: import("@sinclair/typebox").TString;
199
+ participants: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
200
+ identityKey: import("@sinclair/typebox").TString;
201
+ role: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"owner">, import("@sinclair/typebox").TLiteral<"admin">, import("@sinclair/typebox").TLiteral<"member">]>;
202
+ }>>;
203
+ policies: import("@sinclair/typebox").TObject<{
204
+ adminsAssignAdmins: import("@sinclair/typebox").TBoolean;
205
+ anyoneCanAddMembers: import("@sinclair/typebox").TBoolean;
206
+ sendPolicy: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"everyone">, import("@sinclair/typebox").TLiteral<"admins">]>;
207
+ }>;
208
+ recovery: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"ready">, import("@sinclair/typebox").TLiteral<"required">]>;
209
+ sessionId: import("@sinclair/typebox").TString;
210
+ status: import("@sinclair/typebox").TLiteral<"shared">;
211
+ }>]>;
212
+ state: import("@sinclair/typebox").TString;
213
+ tree: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TRecursive<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNumber, import("@sinclair/typebox").TBoolean, import("@sinclair/typebox").TNull, import("@sinclair/typebox").TArray<import("@sinclair/typebox").TThis>, import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TThis>]>>>;
214
+ updatedAt: import("@sinclair/typebox").TInteger;
215
+ version: import("@sinclair/typebox").TString;
216
+ }>;
217
+ }>;
218
+ export type CrdtServiceResponse = Static<typeof crdtServiceResponseSchema>;
219
+ /** Client result for creation, including the meaningful new-versus-retry status. */
220
+ export declare const createCrdtServiceResultSchema: import("@sinclair/typebox").TObject<{
221
+ httpStatus: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<200>, import("@sinclair/typebox").TLiteral<201>]>;
222
+ service: import("@sinclair/typebox").TObject<{
223
+ createdAt: import("@sinclair/typebox").TInteger;
224
+ id: import("@sinclair/typebox").TString;
225
+ kind: import("@sinclair/typebox").TString;
226
+ name: import("@sinclair/typebox").TString;
227
+ service: import("@sinclair/typebox").TLiteral<"crdt.loro">;
228
+ sharing: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
229
+ status: import("@sinclair/typebox").TLiteral<"local">;
230
+ }>, import("@sinclair/typebox").TObject<{
231
+ owner: import("@sinclair/typebox").TString;
232
+ participants: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
233
+ identityKey: import("@sinclair/typebox").TString;
234
+ role: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"owner">, import("@sinclair/typebox").TLiteral<"admin">, import("@sinclair/typebox").TLiteral<"member">]>;
235
+ }>>;
236
+ policies: import("@sinclair/typebox").TObject<{
237
+ adminsAssignAdmins: import("@sinclair/typebox").TBoolean;
238
+ anyoneCanAddMembers: import("@sinclair/typebox").TBoolean;
239
+ sendPolicy: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"everyone">, import("@sinclair/typebox").TLiteral<"admins">]>;
240
+ }>;
241
+ recovery: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"ready">, import("@sinclair/typebox").TLiteral<"required">]>;
242
+ sessionId: import("@sinclair/typebox").TString;
243
+ status: import("@sinclair/typebox").TLiteral<"shared">;
244
+ }>]>;
245
+ state: import("@sinclair/typebox").TString;
246
+ tree: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TRecursive<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNumber, import("@sinclair/typebox").TBoolean, import("@sinclair/typebox").TNull, import("@sinclair/typebox").TArray<import("@sinclair/typebox").TThis>, import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TThis>]>>>;
247
+ updatedAt: import("@sinclair/typebox").TInteger;
248
+ version: import("@sinclair/typebox").TString;
249
+ }>;
250
+ }>;
251
+ export type CreateCrdtServiceResult = Static<typeof createCrdtServiceResultSchema>;
252
+ /** Client result for membership mutations, including accepted-versus-no-op status. */
253
+ export declare const crdtServiceMemberMutationResultSchema: import("@sinclair/typebox").TObject<{
254
+ httpStatus: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<200>, import("@sinclair/typebox").TLiteral<202>]>;
255
+ service: import("@sinclair/typebox").TObject<{
256
+ createdAt: import("@sinclair/typebox").TInteger;
257
+ id: import("@sinclair/typebox").TString;
258
+ kind: import("@sinclair/typebox").TString;
259
+ name: import("@sinclair/typebox").TString;
260
+ service: import("@sinclair/typebox").TLiteral<"crdt.loro">;
261
+ sharing: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
262
+ status: import("@sinclair/typebox").TLiteral<"local">;
263
+ }>, import("@sinclair/typebox").TObject<{
264
+ owner: import("@sinclair/typebox").TString;
265
+ participants: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
266
+ identityKey: import("@sinclair/typebox").TString;
267
+ role: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"owner">, import("@sinclair/typebox").TLiteral<"admin">, import("@sinclair/typebox").TLiteral<"member">]>;
268
+ }>>;
269
+ policies: import("@sinclair/typebox").TObject<{
270
+ adminsAssignAdmins: import("@sinclair/typebox").TBoolean;
271
+ anyoneCanAddMembers: import("@sinclair/typebox").TBoolean;
272
+ sendPolicy: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"everyone">, import("@sinclair/typebox").TLiteral<"admins">]>;
273
+ }>;
274
+ recovery: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"ready">, import("@sinclair/typebox").TLiteral<"required">]>;
275
+ sessionId: import("@sinclair/typebox").TString;
276
+ status: import("@sinclair/typebox").TLiteral<"shared">;
277
+ }>]>;
278
+ state: import("@sinclair/typebox").TString;
279
+ tree: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TRecursive<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNumber, import("@sinclair/typebox").TBoolean, import("@sinclair/typebox").TNull, import("@sinclair/typebox").TArray<import("@sinclair/typebox").TThis>, import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TThis>]>>>;
280
+ updatedAt: import("@sinclair/typebox").TInteger;
281
+ version: import("@sinclair/typebox").TString;
282
+ }>;
283
+ }>;
284
+ export type CrdtServiceMemberMutationResult = Static<typeof crdtServiceMemberMutationResultSchema>;
285
+ /** `POST /v0/services/crdt` */
286
+ export declare const createCrdtServiceRequestSchema: import("@sinclair/typebox").TObject<{
287
+ id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
288
+ kind: import("@sinclair/typebox").TString;
289
+ mutationId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
290
+ name: import("@sinclair/typebox").TString;
291
+ state: import("@sinclair/typebox").TString;
292
+ }>;
293
+ export type CreateCrdtServiceRequest = Static<typeof createCrdtServiceRequestSchema>;
294
+ /** `POST /v0/services/crdt/:serviceId/updates` */
295
+ export declare const updateCrdtServiceRequestSchema: import("@sinclair/typebox").TObject<{
296
+ mutationId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
297
+ update: import("@sinclair/typebox").TString;
298
+ }>;
299
+ export type UpdateCrdtServiceRequest = Static<typeof updateCrdtServiceRequestSchema>;
300
+ /** `PUT /v0/services/crdt/:serviceId/members/:cloudId` */
301
+ export declare const addCrdtServiceMemberRequestSchema: import("@sinclair/typebox").TObject<{
302
+ mutationId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
303
+ }>;
304
+ export type AddCrdtServiceMemberRequest = Static<typeof addCrdtServiceMemberRequestSchema>;
305
+ /** `DELETE /v0/services/crdt/:serviceId/members/:identityKey` */
306
+ export declare const removeCrdtServiceMemberRequestSchema: import("@sinclair/typebox").TObject<{
307
+ mutationId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
308
+ }>;
309
+ export type RemoveCrdtServiceMemberRequest = Static<typeof removeCrdtServiceMemberRequestSchema>;
310
+ //# sourceMappingURL=crdt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crdt.d.ts","sourceRoot":"","sources":["../../sources/protocol/crdt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,255 @@
1
+ /** Local-first Loro documents that may synchronize through Murmur. */
2
+ import { Type } from "@sinclair/typebox";
3
+ import { cuid2Schema, mutationIdSchema, resourceVersionSchema, timestampSchema } from "./common.js";
4
+ /** The stable Murmur service identifier for every Happy CRDT service. */
5
+ export const CRDT_MURMUR_SERVICE = "crdt.loro";
6
+ /** An immutable application-owned discriminator such as `todo` or `com.example.board`. */
7
+ export const crdtServiceKindSchema = Type.String({
8
+ maxLength: 128,
9
+ minLength: 1,
10
+ pattern: "^[a-z](?:[a-z0-9._/-]{0,126}[a-z0-9])?$",
11
+ });
12
+ /** Human-readable display text, never an identifier. */
13
+ export const crdtServiceNameSchema = Type.String({
14
+ minLength: 1,
15
+ // One valid surrogate pair counts as one character, and lone surrogates are rejected.
16
+ pattern: "^(?=[\\s\\S]*\\S)(?:(?:[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])|[^\\uD800-\\uDFFF\\x00-\\x1f\\x7f]){1,256}$",
17
+ });
18
+ const UNPADDED_BASE64URL_PATTERN = "^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-][AQgw]|[A-Za-z0-9_-]{2}[AEIMQUYcgkosw048])?$";
19
+ /** Up to 512 KiB of decoded Loro bytes, encoded as unpadded base64url. */
20
+ export const crdtEncodedBytesSchema = Type.String({
21
+ maxLength: 699_051,
22
+ minLength: 2,
23
+ pattern: UNPADDED_BASE64URL_PATTERN,
24
+ });
25
+ /** A 32-byte Murmur account or session identity encoded as unpadded base64url. */
26
+ export const crdtMurmurIdentitySchema = Type.String({
27
+ maxLength: 43,
28
+ minLength: 43,
29
+ pattern: "^[A-Za-z0-9_-]{42}[AEIMQUYcgkosw048]$",
30
+ });
31
+ /** An opaque Happy Cloud user ID used to select a sharing participant. */
32
+ export const crdtCloudIdSchema = Type.String({
33
+ maxLength: 256,
34
+ minLength: 1,
35
+ pattern: "^[A-Za-z0-9_-]+$",
36
+ });
37
+ /** One structurally valid JSON value produced by Loro's document projection. */
38
+ export const crdtJsonValueSchema = Type.Recursive((value) => Type.Union([
39
+ Type.String(),
40
+ Type.Number(),
41
+ Type.Boolean(),
42
+ Type.Null(),
43
+ Type.Array(value),
44
+ Type.Record(Type.String(), value),
45
+ ]), { $id: "HappyAgentCrdtJsonValueV1" });
46
+ const CRDT_TREE_MAX_BYTES = 4 * 1024 * 1024;
47
+ const CRDT_TREE_MAX_DEPTH = 64;
48
+ const CRDT_TREE_MAX_VALUES = 100_000;
49
+ const CRDT_TREE_MAX_ENTRIES = 100_000;
50
+ const CRDT_TREE_MAX_STRING_BYTES = 1024 * 1024;
51
+ const utf8Encoder = new TextEncoder();
52
+ function utf8Length(value) {
53
+ return utf8Encoder.encode(value).byteLength;
54
+ }
55
+ function jsonStringLength(value) {
56
+ return utf8Length(JSON.stringify(value));
57
+ }
58
+ export const crdtTreeLimitViolationSchema = Type.Union([
59
+ Type.Literal("depth"),
60
+ Type.Literal("entries"),
61
+ Type.Literal("invalid_value"),
62
+ Type.Literal("serialized_size"),
63
+ Type.Literal("string_size"),
64
+ Type.Literal("total_values"),
65
+ ]);
66
+ /** Returns the first operational limit violated by a structurally valid CRDT tree. */
67
+ export function getCrdtTreeLimitViolation(root) {
68
+ const stack = [{ depth: 1, type: "value", value: root }];
69
+ const activeContainers = new WeakSet();
70
+ let serializedBytes = 0;
71
+ let totalValues = 0;
72
+ while (stack.length > 0) {
73
+ const current = stack.pop();
74
+ if (current.type === "leave") {
75
+ activeContainers.delete(current.value);
76
+ continue;
77
+ }
78
+ totalValues += 1;
79
+ if (totalValues > CRDT_TREE_MAX_VALUES)
80
+ return "total_values";
81
+ const value = current.value;
82
+ if (value === null) {
83
+ serializedBytes += 4;
84
+ }
85
+ else if (typeof value === "string") {
86
+ if (utf8Length(value) > CRDT_TREE_MAX_STRING_BYTES)
87
+ return "string_size";
88
+ serializedBytes += jsonStringLength(value);
89
+ }
90
+ else if (typeof value === "number") {
91
+ if (!Number.isFinite(value))
92
+ return "invalid_value";
93
+ serializedBytes += utf8Length(JSON.stringify(value));
94
+ }
95
+ else if (typeof value === "boolean") {
96
+ serializedBytes += value ? 4 : 5;
97
+ }
98
+ else if (Array.isArray(value)) {
99
+ if (current.depth > CRDT_TREE_MAX_DEPTH)
100
+ return "depth";
101
+ if (value.length > CRDT_TREE_MAX_ENTRIES)
102
+ return "entries";
103
+ if (Object.keys(value).length !== value.length)
104
+ return "invalid_value";
105
+ if (activeContainers.has(value))
106
+ return "invalid_value";
107
+ activeContainers.add(value);
108
+ stack.push({ type: "leave", value });
109
+ serializedBytes += 2 + Math.max(0, value.length - 1);
110
+ for (let index = value.length - 1; index >= 0; index -= 1) {
111
+ if (!Object.hasOwn(value, index))
112
+ return "invalid_value";
113
+ stack.push({ depth: current.depth + 1, type: "value", value: value[index] });
114
+ }
115
+ }
116
+ else if (typeof value === "object") {
117
+ const record = value;
118
+ const keys = Object.keys(record);
119
+ const prototype = Object.getPrototypeOf(record);
120
+ if (current.depth > CRDT_TREE_MAX_DEPTH)
121
+ return "depth";
122
+ if (keys.length > CRDT_TREE_MAX_ENTRIES)
123
+ return "entries";
124
+ if (prototype !== Object.prototype && prototype !== null)
125
+ return "invalid_value";
126
+ if (Object.getOwnPropertySymbols(record).some((symbol) => Object.prototype.propertyIsEnumerable.call(record, symbol)))
127
+ return "invalid_value";
128
+ if (activeContainers.has(record))
129
+ return "invalid_value";
130
+ activeContainers.add(record);
131
+ stack.push({ type: "leave", value: record });
132
+ serializedBytes += 2 + Math.max(0, keys.length - 1);
133
+ for (let index = keys.length - 1; index >= 0; index -= 1) {
134
+ const key = keys[index];
135
+ if (utf8Length(key) > CRDT_TREE_MAX_STRING_BYTES)
136
+ return "string_size";
137
+ serializedBytes += jsonStringLength(key) + 1;
138
+ stack.push({ depth: current.depth + 1, type: "value", value: record[key] });
139
+ }
140
+ }
141
+ else {
142
+ return "invalid_value";
143
+ }
144
+ if (serializedBytes > CRDT_TREE_MAX_BYTES)
145
+ return "serialized_size";
146
+ }
147
+ return null;
148
+ }
149
+ /** The top-level JSON object produced by a Loro document. */
150
+ export const crdtTreeSchema = Type.Record(Type.String(), crdtJsonValueSchema);
151
+ /** An account-level participant; devices are not participants. */
152
+ export const crdtParticipantSchema = Type.Object({
153
+ identityKey: crdtMurmurIdentitySchema,
154
+ role: Type.Union([Type.Literal("owner"), Type.Literal("admin"), Type.Literal("member")]),
155
+ });
156
+ /** The complete confirmed Murmur policy snapshot. */
157
+ export const crdtPoliciesSchema = Type.Object({
158
+ adminsAssignAdmins: Type.Boolean(),
159
+ anyoneCanAddMembers: Type.Boolean(),
160
+ sendPolicy: Type.Union([Type.Literal("everyone"), Type.Literal("admins")]),
161
+ });
162
+ /** This service remains entirely local even when Murmur is online. */
163
+ export const crdtLocalSharingSchema = Type.Object({ status: Type.Literal("local") });
164
+ /** This service has one encrypted Murmur sharing relationship. */
165
+ export const crdtSharedSharingSchema = Type.Object({
166
+ owner: crdtMurmurIdentitySchema,
167
+ participants: Type.Array(crdtParticipantSchema, { maxItems: 256, minItems: 1 }),
168
+ policies: crdtPoliciesSchema,
169
+ recovery: Type.Union([Type.Literal("ready"), Type.Literal("required")]),
170
+ sessionId: crdtMurmurIdentitySchema,
171
+ status: Type.Literal("shared"),
172
+ });
173
+ export const crdtSharedSharingViolationSchema = Type.Union([
174
+ Type.Literal("owner"),
175
+ Type.Literal("participants"),
176
+ ]);
177
+ /** Checks participant ordering and the cross-field owner invariant. */
178
+ export function getCrdtSharedSharingViolation(value) {
179
+ let previousIdentity;
180
+ let ownerCount = 0;
181
+ for (const participant of value.participants) {
182
+ if (previousIdentity !== undefined && previousIdentity >= participant.identityKey) {
183
+ return "participants";
184
+ }
185
+ previousIdentity = participant.identityKey;
186
+ const isOwner = participant.identityKey === value.owner;
187
+ if (isOwner)
188
+ ownerCount += 1;
189
+ if (isOwner !== (participant.role === "owner"))
190
+ return "owner";
191
+ }
192
+ return ownerCount === 1 ? null : "owner";
193
+ }
194
+ export const crdtSharingSchema = Type.Union([crdtLocalSharingSchema, crdtSharedSharingSchema]);
195
+ /** The bounded metadata used by catalogs and creation events. */
196
+ export const crdtServiceSummarySchema = Type.Object({
197
+ createdAt: timestampSchema,
198
+ id: cuid2Schema,
199
+ kind: crdtServiceKindSchema,
200
+ name: crdtServiceNameSchema,
201
+ service: Type.Literal(CRDT_MURMUR_SERVICE),
202
+ sharing: crdtSharingSchema,
203
+ updatedAt: timestampSchema,
204
+ version: resourceVersionSchema,
205
+ });
206
+ /** A complete focused service, including its canonical Loro snapshot and JSON projection. */
207
+ export const crdtServiceSchema = Type.Composite([
208
+ crdtServiceSummarySchema,
209
+ Type.Object({ state: crdtEncodedBytesSchema, tree: crdtTreeSchema }),
210
+ ]);
211
+ /** `GET /v0/services/crdt` query parameters. */
212
+ export const crdtServiceListQuerySchema = Type.Object({
213
+ after: Type.Optional(cuid2Schema),
214
+ kind: Type.Optional(crdtServiceKindSchema),
215
+ limit: Type.Optional(Type.Integer({ maximum: 500, minimum: 1 })),
216
+ }, { additionalProperties: false });
217
+ /** `GET /v0/services/crdt` */
218
+ export const crdtServiceListResponseSchema = Type.Object({
219
+ connection: Type.Union([Type.Literal("offline"), Type.Literal("online")]),
220
+ cursor: Type.Union([cuid2Schema, Type.Null()]),
221
+ hasMore: Type.Boolean(),
222
+ services: Type.Array(crdtServiceSummarySchema, { maxItems: 500 }),
223
+ updatedAt: timestampSchema,
224
+ version: resourceVersionSchema,
225
+ });
226
+ /** The response shared by focused CRDT service reads and mutations. */
227
+ export const crdtServiceResponseSchema = Type.Object({ service: crdtServiceSchema });
228
+ /** Client result for creation, including the meaningful new-versus-retry status. */
229
+ export const createCrdtServiceResultSchema = Type.Composite([
230
+ crdtServiceResponseSchema,
231
+ Type.Object({ httpStatus: Type.Union([Type.Literal(200), Type.Literal(201)]) }),
232
+ ]);
233
+ /** Client result for membership mutations, including accepted-versus-no-op status. */
234
+ export const crdtServiceMemberMutationResultSchema = Type.Composite([
235
+ crdtServiceResponseSchema,
236
+ Type.Object({ httpStatus: Type.Union([Type.Literal(200), Type.Literal(202)]) }),
237
+ ]);
238
+ /** `POST /v0/services/crdt` */
239
+ export const createCrdtServiceRequestSchema = Type.Object({
240
+ id: Type.Optional(cuid2Schema),
241
+ kind: crdtServiceKindSchema,
242
+ mutationId: Type.Optional(mutationIdSchema),
243
+ name: crdtServiceNameSchema,
244
+ state: crdtEncodedBytesSchema,
245
+ }, { additionalProperties: false });
246
+ /** `POST /v0/services/crdt/:serviceId/updates` */
247
+ export const updateCrdtServiceRequestSchema = Type.Object({
248
+ mutationId: Type.Optional(mutationIdSchema),
249
+ update: crdtEncodedBytesSchema,
250
+ }, { additionalProperties: false });
251
+ /** `PUT /v0/services/crdt/:serviceId/members/:cloudId` */
252
+ export const addCrdtServiceMemberRequestSchema = Type.Object({ mutationId: Type.Optional(mutationIdSchema) }, { additionalProperties: false });
253
+ /** `DELETE /v0/services/crdt/:serviceId/members/:identityKey` */
254
+ export const removeCrdtServiceMemberRequestSchema = Type.Object({ mutationId: Type.Optional(mutationIdSchema) }, { additionalProperties: false });
255
+ //# sourceMappingURL=crdt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crdt.js","sourceRoot":"","sources":["../../sources/protocol/crdt.ts"],"names":[],"mappings":"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"}