@marcoappio/marco-config 4.0.18 → 4.0.20
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/appwrite/appwrite.d.ts +240 -240
- package/dist/appwrite/appwrite.d.ts.map +1 -1
- package/dist/appwrite/appwrite.js +1 -1
- package/dist/appwrite/appwrite.test.js +54 -288
- package/dist/appwrite/commands.d.ts +1 -1
- package/dist/appwrite/commands.d.ts.map +1 -1
- package/dist/appwrite/commands.js +1 -1
- package/dist/appwrite/commands.test.js +11 -114
- package/dist/appwrite/decodedSchemas.d.ts +1 -1
- package/dist/appwrite/decodedSchemas.d.ts.map +1 -1
- package/dist/appwrite/decodedSchemas.js +1 -1
- package/dist/appwrite/functions.d.ts +1 -1
- package/dist/appwrite/functions.d.ts.map +1 -1
- package/dist/appwrite/functions.js +1 -1
- package/dist/appwrite/functions.test.js +1 -1
- package/dist/appwrite/index.d.ts +3 -1
- package/dist/appwrite/index.d.ts.map +1 -1
- package/dist/appwrite/index.js +1 -0
- package/dist/appwrite/queryContracts/queryContracts.d.ts +392 -0
- package/dist/appwrite/queryContracts/queryContracts.d.ts.map +1 -0
- package/dist/appwrite/queryContracts/queryContracts.js +299 -0
- package/dist/appwrite/queryContracts/queryContracts.test.d.ts +2 -0
- package/dist/appwrite/queryContracts/queryContracts.test.d.ts.map +1 -0
- package/dist/appwrite/queryContracts/queryContracts.test.js +39 -0
- package/dist/appwrite/tableContract/identity.d.ts +35 -35
- package/dist/appwrite/tableContract/identity.d.ts.map +1 -1
- package/dist/appwrite/tableContract/identity.js +71 -36
- package/dist/appwrite/tableContract/index.d.ts +1186 -440
- package/dist/appwrite/tableContract/index.d.ts.map +1 -1
- package/dist/appwrite/tableContract/index.js +1 -1
- package/dist/appwrite/tableContract/index.test.js +1 -1
- package/dist/appwrite/tableContract/mailbox.d.ts +64 -64
- package/dist/appwrite/tableContract/mailbox.d.ts.map +1 -1
- package/dist/appwrite/tableContract/mailbox.js +155 -68
- package/dist/appwrite/tableContract/operational.d.ts +1 -1
- package/dist/appwrite/tableContract/operational.d.ts.map +1 -1
- package/dist/appwrite/tableContract/operational.js +1 -1
- package/dist/appwrite/tableContract/shared.d.ts +1 -1
- package/dist/appwrite/tableContract/shared.d.ts.map +1 -1
- package/dist/appwrite/tableContract/shared.js +2 -2
- package/dist/index.test.js +5 -11
- package/dist/schemas/app.d.ts +1 -1
- package/dist/schemas/app.d.ts.map +1 -1
- package/dist/schemas/app.js +1 -1
- package/dist/schemas/auth.d.ts +1 -1
- package/dist/schemas/auth.d.ts.map +1 -1
- package/dist/schemas/auth.js +1 -1
- package/dist/schemas/emailAccount.d.ts +1 -1
- package/dist/schemas/emailAccount.d.ts.map +1 -1
- package/dist/schemas/emailAccount.js +1 -1
- package/dist/schemas/id.d.ts +1 -1
- package/dist/schemas/id.d.ts.map +1 -1
- package/dist/schemas/id.js +1 -1
- package/dist/schemas/models/account.d.ts +1 -1
- package/dist/schemas/models/account.d.ts.map +1 -1
- package/dist/schemas/models/account.js +1 -1
- package/dist/schemas/models/contact.d.ts +1 -1
- package/dist/schemas/models/contact.d.ts.map +1 -1
- package/dist/schemas/models/contact.js +1 -1
- package/dist/schemas/models/draft.d.ts +1 -1
- package/dist/schemas/models/draft.d.ts.map +1 -1
- package/dist/schemas/models/draft.js +1 -1
- package/dist/schemas/models/mailboxAddress.test.js +1 -1
- package/dist/schemas/models/numericSemantics.test.js +1 -1
- package/dist/schemas/models/thread.d.ts +1 -1
- package/dist/schemas/models/thread.d.ts.map +1 -1
- package/dist/schemas/models/thread.js +1 -1
- package/dist/schemas/models/user.d.ts +1 -1
- package/dist/schemas/models/user.d.ts.map +1 -1
- package/dist/schemas/models/user.js +1 -1
- package/dist/schemas/models/user.test.js +1 -1
- package/dist/schemas/number.d.ts +1 -1
- package/dist/schemas/number.d.ts.map +1 -1
- package/dist/schemas/number.js +1 -1
- package/dist/schemas/oauth.d.ts +1 -1
- package/dist/schemas/oauth.d.ts.map +1 -1
- package/dist/schemas/oauth.js +1 -1
- package/dist/schemas/pushNotifications.d.ts +1 -1
- package/dist/schemas/pushNotifications.d.ts.map +1 -1
- package/dist/schemas/pushNotifications.js +1 -1
- package/dist/schemas/scalars.d.ts +1 -1
- package/dist/schemas/scalars.d.ts.map +1 -1
- package/dist/schemas/scalars.js +1 -1
- package/dist/schemas/scalars.test.js +1 -1
- package/dist/schemas/schemaValues.test.js +1 -1
- package/dist/schemas/string.d.ts +1 -1
- package/dist/schemas/string.d.ts.map +1 -1
- package/dist/schemas/string.js +1 -1
- package/dist/utils/accounts/generateAccountColor.d.ts.map +1 -1
- package/dist/utils/accounts/generateAccountColor.js +10 -15
- package/dist/utils/valibot/index.d.ts +3 -0
- package/dist/utils/valibot/index.d.ts.map +1 -0
- package/dist/utils/valibot/index.js +2 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appwrite.d.ts","sourceRoot":"","sources":["../../src/appwrite/appwrite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,
|
|
1
|
+
{"version":3,"file":"appwrite.d.ts","sourceRoot":"","sources":["../../src/appwrite/appwrite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAE,CAAC,EAAE,MAAM,6BAA6B,CAAA;AAyB/C,QAAA,MAAM,uBAAuB;;;;;;;aAO3B,CAAA;AAEF,QAAA,MAAM,sBAAsB;;;;aAI1B,CAAA;AAGF,MAAM,MAAM,yBAAyB,GAAG,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAA;AACnG,MAAM,MAAM,wBAAwB,GAAG,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,sBAAsB,CAAC,CAAC,CAAA;AAEjG,QAAA,MAAM,oBAAoB,EAAE,SAAS,CAAC,aAAa,EAAE,YAAY,EAAE,SAAS,CAA4C,CAAA;AACxH,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA;AAmCvE,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAhCH,MAAM;kBACZ,MAAM;wBACA;YACd,MAAM,EAAE,MAAM,CAAA;YACd,SAAS,EAAE,MAAM,CAAA;SAClB;mBACU,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4CT,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { v } from '../utils/valibot/index.js';
|
|
2
2
|
import { string } from '../schemas/string.js';
|
|
3
3
|
import { MESSAGE_RECIPIENT_TYPES } from '../types/index.js';
|
|
4
4
|
import { persistedDraftAttachmentsSchema, persistedDraftEnvelopeSchema } from './decodedSchemas.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, expect, it } from 'bun:test';
|
|
2
|
-
import
|
|
2
|
+
import { v } from '../utils/valibot/index.js';
|
|
3
3
|
import { appwrite } from './appwrite.js';
|
|
4
4
|
import { appwriteTableIds } from './tableContract/index.js';
|
|
5
5
|
const metadata = {
|
|
@@ -10,10 +10,14 @@ const metadata = {
|
|
|
10
10
|
$sequence: '1',
|
|
11
11
|
$updatedAt: '2026-07-15T00:00:00.000Z',
|
|
12
12
|
};
|
|
13
|
+
const rowFixture = (table, data, permissions = metadata.$permissions) => ({
|
|
14
|
+
...metadata,
|
|
15
|
+
$permissions: permissions,
|
|
16
|
+
$tableId: appwrite.ids.tables[table],
|
|
17
|
+
...data,
|
|
18
|
+
});
|
|
13
19
|
const validRows = {
|
|
14
|
-
accounts: {
|
|
15
|
-
...metadata,
|
|
16
|
-
$tableId: 'accounts',
|
|
20
|
+
accounts: rowFixture('accounts', {
|
|
17
21
|
colour: '#000000',
|
|
18
22
|
credential: null,
|
|
19
23
|
displayName: null,
|
|
@@ -31,10 +35,8 @@ const validRows = {
|
|
|
31
35
|
profileAssignmentKey: 'user-1',
|
|
32
36
|
provider: 'GMAIL',
|
|
33
37
|
state: 'CONNECTED',
|
|
34
|
-
},
|
|
35
|
-
aliases: {
|
|
36
|
-
...metadata,
|
|
37
|
-
$tableId: 'aliases',
|
|
38
|
+
}),
|
|
39
|
+
aliases: rowFixture('aliases', {
|
|
38
40
|
account: 'account-1',
|
|
39
41
|
accountAssignmentKey: 'account-1',
|
|
40
42
|
email: 'marco@example.com',
|
|
@@ -42,10 +44,8 @@ const validRows = {
|
|
|
42
44
|
name: 'Marco',
|
|
43
45
|
providerId: 'provider-1',
|
|
44
46
|
signature: '<p>Test signature</p>',
|
|
45
|
-
},
|
|
46
|
-
commands: {
|
|
47
|
-
...metadata,
|
|
48
|
-
$tableId: 'commands_v2',
|
|
47
|
+
}),
|
|
48
|
+
commands: rowFixture('commands', {
|
|
49
49
|
account: null,
|
|
50
50
|
accountId: null,
|
|
51
51
|
attempts: 0,
|
|
@@ -59,10 +59,8 @@ const validRows = {
|
|
|
59
59
|
state: 'ACCEPTED',
|
|
60
60
|
submittedAt: '2026-07-15T00:00:00.000Z',
|
|
61
61
|
userId: 'user-1',
|
|
62
|
-
},
|
|
63
|
-
contacts: {
|
|
64
|
-
...metadata,
|
|
65
|
-
$tableId: 'contacts',
|
|
62
|
+
}),
|
|
63
|
+
contacts: rowFixture('contacts', {
|
|
66
64
|
displayName: 'Marco',
|
|
67
65
|
lastContactedAt: '2026-07-15T00:00:00.000Z',
|
|
68
66
|
messageCount: 0,
|
|
@@ -70,10 +68,8 @@ const validRows = {
|
|
|
70
68
|
profile: 'user-1',
|
|
71
69
|
profileAssignmentKey: 'user-1',
|
|
72
70
|
searchText: 'marco',
|
|
73
|
-
},
|
|
74
|
-
credentials: {
|
|
75
|
-
...metadata,
|
|
76
|
-
$tableId: 'credentials',
|
|
71
|
+
}),
|
|
72
|
+
credentials: rowFixture('credentials', {
|
|
77
73
|
accountId: 'account-1',
|
|
78
74
|
encryptedPayload: 'encrypted-payload',
|
|
79
75
|
expiresAt: null,
|
|
@@ -81,10 +77,8 @@ const validRows = {
|
|
|
81
77
|
refreshLeaseExpiresAt: null,
|
|
82
78
|
refreshLeaseId: null,
|
|
83
79
|
userId: 'user-1',
|
|
84
|
-
},
|
|
85
|
-
drafts: {
|
|
86
|
-
...metadata,
|
|
87
|
-
$tableId: 'drafts',
|
|
80
|
+
}),
|
|
81
|
+
drafts: rowFixture('drafts', {
|
|
88
82
|
account: 'account-1',
|
|
89
83
|
accountAssignmentKey: 'account-1',
|
|
90
84
|
attachmentMetadata: '[]',
|
|
@@ -101,10 +95,8 @@ const validRows = {
|
|
|
101
95
|
sequence: 0,
|
|
102
96
|
status: 'DRAFT',
|
|
103
97
|
type: 'COMPOSE',
|
|
104
|
-
},
|
|
105
|
-
jobs: {
|
|
106
|
-
...metadata,
|
|
107
|
-
$tableId: 'jobs_v2',
|
|
98
|
+
}),
|
|
99
|
+
jobs: rowFixture('jobs', {
|
|
108
100
|
accountId: null,
|
|
109
101
|
attempts: 0,
|
|
110
102
|
commandId: 'command-1',
|
|
@@ -118,10 +110,8 @@ const validRows = {
|
|
|
118
110
|
payload: '{"threadId":"thread-1"}',
|
|
119
111
|
state: 'PENDING',
|
|
120
112
|
userId: 'user-1',
|
|
121
|
-
},
|
|
122
|
-
labels: {
|
|
123
|
-
...metadata,
|
|
124
|
-
$tableId: 'labels',
|
|
113
|
+
}),
|
|
114
|
+
labels: rowFixture('labels', {
|
|
125
115
|
account: 'account-1',
|
|
126
116
|
accountAssignmentKey: 'account-1',
|
|
127
117
|
name: null,
|
|
@@ -130,10 +120,8 @@ const validRows = {
|
|
|
130
120
|
specialUse: 'INBOX',
|
|
131
121
|
totalCount: 0,
|
|
132
122
|
unreadCount: 0,
|
|
133
|
-
},
|
|
134
|
-
mailboxSyncCandidates: {
|
|
135
|
-
...metadata,
|
|
136
|
-
$tableId: 'mailbox_sync_candidates_v2',
|
|
123
|
+
}),
|
|
124
|
+
mailboxSyncCandidates: rowFixture('mailboxSyncCandidates', {
|
|
137
125
|
account: 'account-1',
|
|
138
126
|
accountId: 'account-1',
|
|
139
127
|
generation: 1,
|
|
@@ -149,11 +137,8 @@ const validRows = {
|
|
|
149
137
|
uid: 1,
|
|
150
138
|
uidValidity: 1,
|
|
151
139
|
userId: 'user-1',
|
|
152
|
-
},
|
|
153
|
-
mailboxSyncLanes: {
|
|
154
|
-
...metadata,
|
|
155
|
-
$permissions: [],
|
|
156
|
-
$tableId: 'mailbox_sync_lanes',
|
|
140
|
+
}),
|
|
141
|
+
mailboxSyncLanes: rowFixture('mailboxSyncLanes', {
|
|
157
142
|
account: 'test-account-id-1',
|
|
158
143
|
accountId: 'test-account-id-1',
|
|
159
144
|
commandId: 'sync_test-command-id-1',
|
|
@@ -163,10 +148,8 @@ const validRows = {
|
|
|
163
148
|
lane: 'HEAD',
|
|
164
149
|
state: 'RUNNING',
|
|
165
150
|
userId: 'test-user-id-1',
|
|
166
|
-
},
|
|
167
|
-
mailboxSyncStates: {
|
|
168
|
-
...metadata,
|
|
169
|
-
$tableId: 'mailbox_sync_states',
|
|
151
|
+
}, []),
|
|
152
|
+
mailboxSyncStates: rowFixture('mailboxSyncStates', {
|
|
170
153
|
accountId: 'account-1',
|
|
171
154
|
errorCode: null,
|
|
172
155
|
lastEventAt: null,
|
|
@@ -179,10 +162,8 @@ const validRows = {
|
|
|
179
162
|
state: 'CURRENT',
|
|
180
163
|
uidValidity: null,
|
|
181
164
|
userId: 'user-1',
|
|
182
|
-
},
|
|
183
|
-
messageLocations: {
|
|
184
|
-
...metadata,
|
|
185
|
-
$tableId: 'message_locations',
|
|
165
|
+
}),
|
|
166
|
+
messageLocations: rowFixture('messageLocations', {
|
|
186
167
|
account: 'account-1',
|
|
187
168
|
accountAssignmentKey: 'account-1',
|
|
188
169
|
flagged: false,
|
|
@@ -195,10 +176,8 @@ const validRows = {
|
|
|
195
176
|
threadAssignmentKey: 'thread-1',
|
|
196
177
|
uid: 1,
|
|
197
178
|
uidValidity: 1,
|
|
198
|
-
},
|
|
199
|
-
messages: {
|
|
200
|
-
...metadata,
|
|
201
|
-
$tableId: 'messages',
|
|
179
|
+
}),
|
|
180
|
+
messages: rowFixture('messages', {
|
|
202
181
|
account: 'account-1',
|
|
203
182
|
accountAssignmentKey: 'account-1',
|
|
204
183
|
attachmentMetadata: '[]',
|
|
@@ -217,10 +196,8 @@ const validRows = {
|
|
|
217
196
|
subject: 'Test subject',
|
|
218
197
|
thread: 'thread-1',
|
|
219
198
|
threadAssignmentKey: 'thread-1',
|
|
220
|
-
},
|
|
221
|
-
oauthStates: {
|
|
222
|
-
...metadata,
|
|
223
|
-
$tableId: 'oauth_states',
|
|
199
|
+
}),
|
|
200
|
+
oauthStates: rowFixture('oauthStates', {
|
|
224
201
|
accountId: 'account-1',
|
|
225
202
|
email: 'marco@example.com',
|
|
226
203
|
expiresAt: '2026-07-15T00:10:00.000Z',
|
|
@@ -230,17 +207,11 @@ const validRows = {
|
|
|
230
207
|
provider: 'GMAIL',
|
|
231
208
|
returnUri: 'https://app.marcoapp.io/onboarding/loading',
|
|
232
209
|
userId: 'user-1',
|
|
233
|
-
},
|
|
234
|
-
pollShardCoordinators: {
|
|
235
|
-
...metadata,
|
|
236
|
-
$permissions: [],
|
|
237
|
-
$tableId: 'poll_shard_coordinators',
|
|
210
|
+
}),
|
|
211
|
+
pollShardCoordinators: rowFixture('pollShardCoordinators', {
|
|
238
212
|
accountCursor: null,
|
|
239
|
-
},
|
|
240
|
-
pollShards: {
|
|
241
|
-
...metadata,
|
|
242
|
-
$permissions: [],
|
|
243
|
-
$tableId: 'poll_shards',
|
|
213
|
+
}, []),
|
|
214
|
+
pollShards: rowFixture('pollShards', {
|
|
244
215
|
accountIds: ['test-account-id-1'],
|
|
245
216
|
errorCode: null,
|
|
246
217
|
generation: 1,
|
|
@@ -251,63 +222,48 @@ const validRows = {
|
|
|
251
222
|
pollingSnapshot: '{"members":[],"version":1}',
|
|
252
223
|
scheduledExecutionId: null,
|
|
253
224
|
state: 'ACTIVE',
|
|
254
|
-
},
|
|
255
|
-
profileAvatarCleanups: {
|
|
256
|
-
...metadata,
|
|
257
|
-
$permissions: [],
|
|
258
|
-
$tableId: 'profile_avatar_cleanups',
|
|
225
|
+
}, []),
|
|
226
|
+
profileAvatarCleanups: rowFixture('profileAvatarCleanups', {
|
|
259
227
|
claimedAt: null,
|
|
260
228
|
claimId: null,
|
|
261
229
|
fileId: 'test-file-id-1',
|
|
262
230
|
profile: 'user-1',
|
|
263
|
-
},
|
|
264
|
-
profiles: {
|
|
265
|
-
...metadata,
|
|
266
|
-
$tableId: 'profiles',
|
|
231
|
+
}, []),
|
|
232
|
+
profiles: rowFixture('profiles', {
|
|
267
233
|
avatarFileId: null,
|
|
268
234
|
deletionRequestedAt: null,
|
|
269
235
|
email: 'marco@example.com',
|
|
270
236
|
name: null,
|
|
271
237
|
onboardingState: null,
|
|
272
238
|
timezone: null,
|
|
273
|
-
},
|
|
274
|
-
pushNotificationTokens: {
|
|
275
|
-
...metadata,
|
|
276
|
-
$tableId: 'push_notification_tokens',
|
|
239
|
+
}),
|
|
240
|
+
pushNotificationTokens: rowFixture('pushNotificationTokens', {
|
|
277
241
|
profile: 'user-1',
|
|
278
242
|
token: 'ExponentPushToken[token]',
|
|
279
243
|
userId: 'user-1',
|
|
280
|
-
},
|
|
281
|
-
savedViews: {
|
|
282
|
-
...metadata,
|
|
283
|
-
$tableId: 'saved_views',
|
|
244
|
+
}),
|
|
245
|
+
savedViews: rowFixture('savedViews', {
|
|
284
246
|
aliasIds: ['alias-1'],
|
|
285
247
|
icon: 'mail',
|
|
286
248
|
name: 'Unread',
|
|
287
249
|
profile: 'user-1',
|
|
288
|
-
},
|
|
289
|
-
threadAliases: {
|
|
290
|
-
...metadata,
|
|
291
|
-
$tableId: 'thread_aliases',
|
|
250
|
+
}),
|
|
251
|
+
threadAliases: rowFixture('threadAliases', {
|
|
292
252
|
alias: 'alias-1',
|
|
293
253
|
aliasAssignmentKey: 'alias-1',
|
|
294
254
|
latestMessageAt: '2026-07-15T00:00:00.000Z',
|
|
295
255
|
thread: 'thread-1',
|
|
296
256
|
threadAssignmentKey: 'thread-1',
|
|
297
|
-
},
|
|
298
|
-
threadLabels: {
|
|
299
|
-
...metadata,
|
|
300
|
-
$tableId: 'thread_labels',
|
|
257
|
+
}),
|
|
258
|
+
threadLabels: rowFixture('threadLabels', {
|
|
301
259
|
label: 'label-1',
|
|
302
260
|
labelAssignmentKey: 'label-1',
|
|
303
261
|
latestMessageAt: '2026-07-15T00:00:00.000Z',
|
|
304
262
|
locationCount: 1,
|
|
305
263
|
thread: 'thread-1',
|
|
306
264
|
threadAssignmentKey: 'thread-1',
|
|
307
|
-
},
|
|
308
|
-
threads: {
|
|
309
|
-
...metadata,
|
|
310
|
-
$tableId: 'threads',
|
|
265
|
+
}),
|
|
266
|
+
threads: rowFixture('threads', {
|
|
311
267
|
account: 'account-1',
|
|
312
268
|
accountAssignmentKey: 'account-1',
|
|
313
269
|
archived: false,
|
|
@@ -332,14 +288,9 @@ const validRows = {
|
|
|
332
288
|
subject: null,
|
|
333
289
|
trashed: false,
|
|
334
290
|
unseenLocationCount: 0,
|
|
335
|
-
},
|
|
336
|
-
};
|
|
337
|
-
const validPollShardCoordinatorRow = {
|
|
338
|
-
...metadata,
|
|
339
|
-
$permissions: [],
|
|
340
|
-
$tableId: 'poll_shard_coordinators',
|
|
341
|
-
accountCursor: null,
|
|
291
|
+
}),
|
|
342
292
|
};
|
|
293
|
+
const validPollShardCoordinatorRow = validRows.pollShardCoordinators;
|
|
343
294
|
const pollShardCoordinatorSchema = Object.entries(appwrite.rowSchemas).find(([table]) => table === 'pollShardCoordinators')?.[1];
|
|
344
295
|
describe('appwrite', () => {
|
|
345
296
|
it('publishes the production browser and OAuth configuration', () => {
|
|
@@ -573,160 +524,7 @@ describe('appwrite', () => {
|
|
|
573
524
|
});
|
|
574
525
|
}
|
|
575
526
|
const rowTestCases = Object.keys(validRows);
|
|
576
|
-
const metadataKeys = ['$createdAt', '$databaseId', '$id', '$permissions', '$sequence', '$tableId', '$updatedAt'];
|
|
577
|
-
const expectedRowDataKeys = {
|
|
578
|
-
accounts: [
|
|
579
|
-
'colour',
|
|
580
|
-
'credential',
|
|
581
|
-
'displayName',
|
|
582
|
-
'initialSyncCompletedAt',
|
|
583
|
-
'lastErrorCode',
|
|
584
|
-
'lastSuccessfulSyncAt',
|
|
585
|
-
'mailboxSyncState',
|
|
586
|
-
'mailProcessedCount',
|
|
587
|
-
'mailTotalCount',
|
|
588
|
-
'pollShardAssignmentId',
|
|
589
|
-
'pollShardId',
|
|
590
|
-
'primaryAlias',
|
|
591
|
-
'primaryEmail',
|
|
592
|
-
'profile',
|
|
593
|
-
'profileAssignmentKey',
|
|
594
|
-
'provider',
|
|
595
|
-
'state',
|
|
596
|
-
],
|
|
597
|
-
aliases: ['account', 'accountAssignmentKey', 'email', 'isPrimary', 'name', 'providerId', 'signature'],
|
|
598
|
-
commands: ['account', 'accountId', 'attempts', 'canonicalRevision', 'draftId', 'errorCode', 'kind', 'payload', 'payloadHash', 'profile', 'state', 'submittedAt', 'userId'],
|
|
599
|
-
contacts: ['displayName', 'lastContactedAt', 'messageCount', 'normalisedAddress', 'profile', 'profileAssignmentKey', 'searchText'],
|
|
600
|
-
credentials: ['accountId', 'encryptedPayload', 'expiresAt', 'provider', 'refreshLeaseExpiresAt', 'refreshLeaseId', 'userId'],
|
|
601
|
-
drafts: [
|
|
602
|
-
'account',
|
|
603
|
-
'accountAssignmentKey',
|
|
604
|
-
'attachmentMetadata',
|
|
605
|
-
'contentHash',
|
|
606
|
-
'envelope',
|
|
607
|
-
'errorCode',
|
|
608
|
-
'executionLeaseExpiresAt',
|
|
609
|
-
'executionLeaseId',
|
|
610
|
-
'fromAlias',
|
|
611
|
-
'html',
|
|
612
|
-
'referencedMessage',
|
|
613
|
-
'revision',
|
|
614
|
-
'scheduledAt',
|
|
615
|
-
'sequence',
|
|
616
|
-
'status',
|
|
617
|
-
'type',
|
|
618
|
-
],
|
|
619
|
-
jobs: ['accountId', 'attempts', 'commandId', 'dedupeKey', 'errorCode', 'kind', 'leaseExpiresAt', 'leaseId', 'maxAttempts', 'nextRunAt', 'payload', 'state', 'userId'],
|
|
620
|
-
labels: ['account', 'accountAssignmentKey', 'name', 'path', 'providerId', 'specialUse', 'totalCount', 'unreadCount'],
|
|
621
|
-
mailboxSyncCandidates: [
|
|
622
|
-
'account',
|
|
623
|
-
'accountId',
|
|
624
|
-
'generation',
|
|
625
|
-
'label',
|
|
626
|
-
'labelId',
|
|
627
|
-
'lane',
|
|
628
|
-
'mailboxPath',
|
|
629
|
-
'mailboxPriority',
|
|
630
|
-
'mailboxSortKey',
|
|
631
|
-
'providerId',
|
|
632
|
-
'receivedAt',
|
|
633
|
-
'specialUse',
|
|
634
|
-
'uid',
|
|
635
|
-
'uidValidity',
|
|
636
|
-
'userId',
|
|
637
|
-
],
|
|
638
|
-
mailboxSyncLanes: ['account', 'accountId', 'commandId', 'cursor', 'errorCode', 'generation', 'lane', 'state', 'userId'],
|
|
639
|
-
mailboxSyncStates: [
|
|
640
|
-
'accountId',
|
|
641
|
-
'errorCode',
|
|
642
|
-
'lastEventAt',
|
|
643
|
-
'lastSyncAt',
|
|
644
|
-
'materialisationLeaseExpiresAt',
|
|
645
|
-
'materialisationLeaseId',
|
|
646
|
-
'nextPollAt',
|
|
647
|
-
'provider',
|
|
648
|
-
'providerCursor',
|
|
649
|
-
'state',
|
|
650
|
-
'uidValidity',
|
|
651
|
-
'userId',
|
|
652
|
-
],
|
|
653
|
-
messageLocations: [
|
|
654
|
-
'account',
|
|
655
|
-
'accountAssignmentKey',
|
|
656
|
-
'flagged',
|
|
657
|
-
'label',
|
|
658
|
-
'labelAssignmentKey',
|
|
659
|
-
'message',
|
|
660
|
-
'messageAt',
|
|
661
|
-
'seen',
|
|
662
|
-
'thread',
|
|
663
|
-
'threadAssignmentKey',
|
|
664
|
-
'uid',
|
|
665
|
-
'uidValidity',
|
|
666
|
-
],
|
|
667
|
-
messages: [
|
|
668
|
-
'account',
|
|
669
|
-
'accountAssignmentKey',
|
|
670
|
-
'attachmentMetadata',
|
|
671
|
-
'htmlFileId',
|
|
672
|
-
'preview',
|
|
673
|
-
'providerId',
|
|
674
|
-
'rawFileId',
|
|
675
|
-
'receivedAt',
|
|
676
|
-
'recipients',
|
|
677
|
-
'revision',
|
|
678
|
-
'rfcMessageId',
|
|
679
|
-
'sender',
|
|
680
|
-
'senderName',
|
|
681
|
-
'sentAt',
|
|
682
|
-
'size',
|
|
683
|
-
'subject',
|
|
684
|
-
'thread',
|
|
685
|
-
'threadAssignmentKey',
|
|
686
|
-
],
|
|
687
|
-
oauthStates: ['accountId', 'email', 'expiresAt', 'nonceHash', 'operation', 'profile', 'provider', 'returnUri', 'userId'],
|
|
688
|
-
pollShardCoordinators: ['accountCursor'],
|
|
689
|
-
pollShards: ['accountIds', 'errorCode', 'generation', 'lastStartedAt', 'leaseExpiresAt', 'leaseId', 'nextStartAt', 'pollingSnapshot', 'scheduledExecutionId', 'state'],
|
|
690
|
-
profileAvatarCleanups: ['claimedAt', 'claimId', 'fileId', 'profile'],
|
|
691
|
-
profiles: ['avatarFileId', 'deletionRequestedAt', 'email', 'name', 'onboardingState', 'timezone'],
|
|
692
|
-
pushNotificationTokens: ['profile', 'token', 'userId'],
|
|
693
|
-
savedViews: ['aliasIds', 'icon', 'name', 'profile'],
|
|
694
|
-
threadAliases: ['alias', 'aliasAssignmentKey', 'latestMessageAt', 'thread', 'threadAssignmentKey'],
|
|
695
|
-
threadLabels: ['label', 'labelAssignmentKey', 'latestMessageAt', 'locationCount', 'thread', 'threadAssignmentKey'],
|
|
696
|
-
threads: [
|
|
697
|
-
'account',
|
|
698
|
-
'accountAssignmentKey',
|
|
699
|
-
'archived',
|
|
700
|
-
'firstMessageAt',
|
|
701
|
-
'flagged',
|
|
702
|
-
'flaggedLocationCount',
|
|
703
|
-
'hasAttachments',
|
|
704
|
-
'labelIds',
|
|
705
|
-
'latestMessageAt',
|
|
706
|
-
'latestMessageId',
|
|
707
|
-
'messageCount',
|
|
708
|
-
'participants',
|
|
709
|
-
'preview',
|
|
710
|
-
'providerId',
|
|
711
|
-
'revision',
|
|
712
|
-
'searchText',
|
|
713
|
-
'seen',
|
|
714
|
-
'senderEmail',
|
|
715
|
-
'senderName',
|
|
716
|
-
'snoozedUntil',
|
|
717
|
-
'spam',
|
|
718
|
-
'subject',
|
|
719
|
-
'trashed',
|
|
720
|
-
'unseenLocationCount',
|
|
721
|
-
],
|
|
722
|
-
};
|
|
723
527
|
for (const table of rowTestCases) {
|
|
724
|
-
it(`exposes backend-aligned ${table} row keys`, () => {
|
|
725
|
-
const dataKeys = Object.keys(appwrite.rowSchemas[table].entries)
|
|
726
|
-
.filter(key => !metadataKeys.includes(key))
|
|
727
|
-
.sort();
|
|
728
|
-
expect(dataKeys).toEqual([...expectedRowDataKeys[table]].sort());
|
|
729
|
-
});
|
|
730
528
|
it(`accepts the ${table} wire row`, () => {
|
|
731
529
|
expect(v.safeParse(appwrite.rowSchemas[table], validRows[table]).success).toBe(true);
|
|
732
530
|
});
|
|
@@ -838,38 +636,6 @@ describe('appwrite', () => {
|
|
|
838
636
|
expect(v.safeParse(schema, row).success).toBe(false);
|
|
839
637
|
});
|
|
840
638
|
}
|
|
841
|
-
const obsoleteRelationshipFieldTestCases = [
|
|
842
|
-
{ field: 'pollShard', row: { ...validRows.accounts, pollShard: null }, schema: appwrite.rowSchemas.accounts, table: 'accounts' },
|
|
843
|
-
{ field: 'primaryAliasId', row: { ...validRows.accounts, primaryAliasId: 'alias-1' }, schema: appwrite.rowSchemas.accounts, table: 'accounts' },
|
|
844
|
-
{ field: 'userId', row: { ...validRows.accounts, userId: 'user-1' }, schema: appwrite.rowSchemas.accounts, table: 'accounts' },
|
|
845
|
-
{ field: 'accountId', row: { ...validRows.aliases, accountId: 'account-1' }, schema: appwrite.rowSchemas.aliases, table: 'aliases' },
|
|
846
|
-
{ field: 'userId', row: { ...validRows.aliases, userId: 'user-1' }, schema: appwrite.rowSchemas.aliases, table: 'aliases' },
|
|
847
|
-
{ field: 'userId', row: { ...validRows.contacts, userId: 'user-1' }, schema: appwrite.rowSchemas.contacts, table: 'contacts' },
|
|
848
|
-
{ field: 'accountId', row: { ...validRows.drafts, accountId: 'account-1' }, schema: appwrite.rowSchemas.drafts, table: 'drafts' },
|
|
849
|
-
{ field: 'fromAliasId', row: { ...validRows.drafts, fromAliasId: 'alias-1' }, schema: appwrite.rowSchemas.drafts, table: 'drafts' },
|
|
850
|
-
{ field: 'referencedMessageId', row: { ...validRows.drafts, referencedMessageId: 'message-1' }, schema: appwrite.rowSchemas.drafts, table: 'drafts' },
|
|
851
|
-
{ field: 'userId', row: { ...validRows.drafts, userId: 'user-1' }, schema: appwrite.rowSchemas.drafts, table: 'drafts' },
|
|
852
|
-
{ field: 'accountId', row: { ...validRows.labels, accountId: 'account-1' }, schema: appwrite.rowSchemas.labels, table: 'labels' },
|
|
853
|
-
{ field: 'userId', row: { ...validRows.labels, userId: 'user-1' }, schema: appwrite.rowSchemas.labels, table: 'labels' },
|
|
854
|
-
{ field: 'accountId', row: { ...validRows.messages, accountId: 'account-1' }, schema: appwrite.rowSchemas.messages, table: 'messages' },
|
|
855
|
-
{ field: 'threadId', row: { ...validRows.messages, threadId: 'thread-1' }, schema: appwrite.rowSchemas.messages, table: 'messages' },
|
|
856
|
-
{ field: 'userId', row: { ...validRows.messages, userId: 'user-1' }, schema: appwrite.rowSchemas.messages, table: 'messages' },
|
|
857
|
-
{ field: 'accountId', row: { ...validRows.threads, accountId: 'account-1' }, schema: appwrite.rowSchemas.threads, table: 'threads' },
|
|
858
|
-
{ field: 'userId', row: { ...validRows.threads, userId: 'user-1' }, schema: appwrite.rowSchemas.threads, table: 'threads' },
|
|
859
|
-
{ field: 'accountId', row: { ...validRows.threadAliases, accountId: 'account-1' }, schema: appwrite.rowSchemas.threadAliases, table: 'threadAliases' },
|
|
860
|
-
{ field: 'aliasId', row: { ...validRows.threadAliases, aliasId: 'alias-1' }, schema: appwrite.rowSchemas.threadAliases, table: 'threadAliases' },
|
|
861
|
-
{ field: 'threadId', row: { ...validRows.threadAliases, threadId: 'thread-1' }, schema: appwrite.rowSchemas.threadAliases, table: 'threadAliases' },
|
|
862
|
-
{ field: 'userId', row: { ...validRows.threadAliases, userId: 'user-1' }, schema: appwrite.rowSchemas.threadAliases, table: 'threadAliases' },
|
|
863
|
-
{ field: 'accountId', row: { ...validRows.threadLabels, accountId: 'account-1' }, schema: appwrite.rowSchemas.threadLabels, table: 'threadLabels' },
|
|
864
|
-
{ field: 'labelId', row: { ...validRows.threadLabels, labelId: 'label-1' }, schema: appwrite.rowSchemas.threadLabels, table: 'threadLabels' },
|
|
865
|
-
{ field: 'threadId', row: { ...validRows.threadLabels, threadId: 'thread-1' }, schema: appwrite.rowSchemas.threadLabels, table: 'threadLabels' },
|
|
866
|
-
{ field: 'userId', row: { ...validRows.threadLabels, userId: 'user-1' }, schema: appwrite.rowSchemas.threadLabels, table: 'threadLabels' },
|
|
867
|
-
];
|
|
868
|
-
for (const { field, row, schema, table } of obsoleteRelationshipFieldTestCases) {
|
|
869
|
-
it(`rejects obsolete ${field} on ${table}`, () => {
|
|
870
|
-
expect(v.safeParse(schema, row).success).toBe(false);
|
|
871
|
-
});
|
|
872
|
-
}
|
|
873
639
|
const nullableColumnTestCases = [
|
|
874
640
|
{
|
|
875
641
|
description: 'alias name',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/appwrite/commands.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/appwrite/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,6BAA6B,CAAA;AAc/C,eAAO,MAAM,cAAc;8BACC,MAAM,KAAG,MAAM;CAC1C,CAAA;AAED,KAAK,wBAAwB,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,OAAO,GAAG,eAAe,GAAG,iBAAiB,GAAG,QAAQ,CAAA;AAqH5H,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDvB,CAAA;AAED,KAAK,yBAAyB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAA;AAC9F,MAAM,MAAM,mBAAmB,GAAG,yBAAyB,CAAC,aAAa,CAAC,CAAA;AAE1E,eAAO,MAAM,qBAAqB;;;;;;;;CAQ6D,CAAA;AAqC/F,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAUnB,CAAA;AAEV,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,gBAAgB,CAAC,WAAW,CAAC,CAAA;AACrF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,gBAAgB,CAAC,aAAa,CAAC,CAAA;AACzF,MAAM,MAAM,sBAAsB,CAAC,KAAK,SAAS,mBAAmB,IAAI,OAAO,CAAC,sBAAsB,EAAE;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC,CAAC,SAAS,CAAC,CAAA;AACnI,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,gBAAgB,CAAC,cAAc,CAAC,CAAA;AAC3F,MAAM,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAA"}
|