@meshline/sdk 0.0.0-stage → 0.1.0-alpha.1
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/LICENSE +21 -0
- package/README.md +43 -2
- package/dist/channels/repository.d.ts +73 -0
- package/dist/channels/repository.d.ts.map +1 -0
- package/dist/channels/repository.js +367 -0
- package/dist/channels/repository.js.map +1 -0
- package/dist/client/account-operations.d.ts +41 -0
- package/dist/client/account-operations.d.ts.map +1 -0
- package/dist/client/account-operations.js +304 -0
- package/dist/client/account-operations.js.map +1 -0
- package/dist/client/conversations.d.ts +36 -0
- package/dist/client/conversations.d.ts.map +1 -0
- package/dist/client/conversations.js +144 -0
- package/dist/client/conversations.js.map +1 -0
- package/dist/client.d.ts +53 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +162 -0
- package/dist/client.js.map +1 -0
- package/dist/components/account.d.ts +38 -0
- package/dist/components/account.d.ts.map +1 -0
- package/dist/components/account.js +243 -0
- package/dist/components/account.js.map +1 -0
- package/dist/components/channel.d.ts +78 -0
- package/dist/components/channel.d.ts.map +1 -0
- package/dist/components/channel.js +475 -0
- package/dist/components/channel.js.map +1 -0
- package/dist/components/component.d.ts +49 -0
- package/dist/components/component.d.ts.map +1 -0
- package/dist/components/component.js +194 -0
- package/dist/components/component.js.map +1 -0
- package/dist/components/device.d.ts +60 -0
- package/dist/components/device.d.ts.map +1 -0
- package/dist/components/device.js +648 -0
- package/dist/components/device.js.map +1 -0
- package/dist/components/group.d.ts +141 -0
- package/dist/components/group.d.ts.map +1 -0
- package/dist/components/group.js +933 -0
- package/dist/components/group.js.map +1 -0
- package/dist/components/message.d.ts +63 -0
- package/dist/components/message.d.ts.map +1 -0
- package/dist/components/message.js +439 -0
- package/dist/components/message.js.map +1 -0
- package/dist/components/profile.d.ts +37 -0
- package/dist/components/profile.d.ts.map +1 -0
- package/dist/components/profile.js +232 -0
- package/dist/components/profile.js.map +1 -0
- package/dist/crypto/groups.d.ts +56 -0
- package/dist/crypto/groups.d.ts.map +1 -0
- package/dist/crypto/groups.js +163 -0
- package/dist/crypto/groups.js.map +1 -0
- package/dist/crypto/messages.d.ts +52 -0
- package/dist/crypto/messages.d.ts.map +1 -0
- package/dist/crypto/messages.js +180 -0
- package/dist/crypto/messages.js.map +1 -0
- package/dist/crypto/primitives.d.ts +30 -0
- package/dist/crypto/primitives.d.ts.map +1 -0
- package/dist/crypto/primitives.js +102 -0
- package/dist/crypto/primitives.js.map +1 -0
- package/dist/errors.d.ts +11 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +14 -0
- package/dist/errors.js.map +1 -0
- package/dist/groups/account-sync.d.ts +28 -0
- package/dist/groups/account-sync.d.ts.map +1 -0
- package/dist/groups/account-sync.js +235 -0
- package/dist/groups/account-sync.js.map +1 -0
- package/dist/groups/messages.d.ts +39 -0
- package/dist/groups/messages.d.ts.map +1 -0
- package/dist/groups/messages.js +141 -0
- package/dist/groups/messages.js.map +1 -0
- package/dist/groups/operations.d.ts +57 -0
- package/dist/groups/operations.d.ts.map +1 -0
- package/dist/groups/operations.js +225 -0
- package/dist/groups/operations.js.map +1 -0
- package/dist/groups/repository.d.ts +56 -0
- package/dist/groups/repository.d.ts.map +1 -0
- package/dist/groups/repository.js +254 -0
- package/dist/groups/repository.js.map +1 -0
- package/dist/groups/secrets.d.ts +67 -0
- package/dist/groups/secrets.d.ts.map +1 -0
- package/dist/groups/secrets.js +452 -0
- package/dist/groups/secrets.js.map +1 -0
- package/dist/groups/state.d.ts +39 -0
- package/dist/groups/state.d.ts.map +1 -0
- package/dist/groups/state.js +201 -0
- package/dist/groups/state.js.map +1 -0
- package/dist/identity/identifiers.d.ts +9 -0
- package/dist/identity/identifiers.d.ts.map +1 -0
- package/dist/identity/identifiers.js +37 -0
- package/dist/identity/identifiers.js.map +1 -0
- package/dist/identity/neo.d.ts +11 -0
- package/dist/identity/neo.d.ts.map +1 -0
- package/dist/identity/neo.js +77 -0
- package/dist/identity/neo.js.map +1 -0
- package/dist/index.d.ts +53 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -0
- package/dist/interactions.d.ts +31 -0
- package/dist/interactions.d.ts.map +1 -0
- package/dist/interactions.js +2 -0
- package/dist/interactions.js.map +1 -0
- package/dist/messages/account-sender.d.ts +9 -0
- package/dist/messages/account-sender.d.ts.map +1 -0
- package/dist/messages/account-sender.js +46 -0
- package/dist/messages/account-sender.js.map +1 -0
- package/dist/messages/contacts.d.ts +103 -0
- package/dist/messages/contacts.d.ts.map +1 -0
- package/dist/messages/contacts.js +525 -0
- package/dist/messages/contacts.js.map +1 -0
- package/dist/messages/outbox.d.ts +66 -0
- package/dist/messages/outbox.d.ts.map +1 -0
- package/dist/messages/outbox.js +167 -0
- package/dist/messages/outbox.js.map +1 -0
- package/dist/messages/receiver.d.ts +35 -0
- package/dist/messages/receiver.d.ts.map +1 -0
- package/dist/messages/receiver.js +113 -0
- package/dist/messages/receiver.js.map +1 -0
- package/dist/messages/repository.d.ts +89 -0
- package/dist/messages/repository.d.ts.map +1 -0
- package/dist/messages/repository.js +295 -0
- package/dist/messages/repository.js.map +1 -0
- package/dist/models/authentication.d.ts +37 -0
- package/dist/models/authentication.d.ts.map +1 -0
- package/dist/models/authentication.js +53 -0
- package/dist/models/authentication.js.map +1 -0
- package/dist/models/channels.d.ts +141 -0
- package/dist/models/channels.d.ts.map +1 -0
- package/dist/models/channels.js +258 -0
- package/dist/models/channels.js.map +1 -0
- package/dist/models/contacts.d.ts +68 -0
- package/dist/models/contacts.d.ts.map +1 -0
- package/dist/models/contacts.js +186 -0
- package/dist/models/contacts.js.map +1 -0
- package/dist/models/content.d.ts +37 -0
- package/dist/models/content.d.ts.map +1 -0
- package/dist/models/content.js +137 -0
- package/dist/models/content.js.map +1 -0
- package/dist/models/device-state.d.ts +8 -0
- package/dist/models/device-state.d.ts.map +1 -0
- package/dist/models/device-state.js +22 -0
- package/dist/models/device-state.js.map +1 -0
- package/dist/models/group-admission.d.ts +111 -0
- package/dist/models/group-admission.d.ts.map +1 -0
- package/dist/models/group-admission.js +153 -0
- package/dist/models/group-admission.js.map +1 -0
- package/dist/models/group-keys.d.ts +30 -0
- package/dist/models/group-keys.d.ts.map +1 -0
- package/dist/models/group-keys.js +52 -0
- package/dist/models/group-keys.js.map +1 -0
- package/dist/models/group-management.d.ts +190 -0
- package/dist/models/group-management.d.ts.map +1 -0
- package/dist/models/group-management.js +263 -0
- package/dist/models/group-management.js.map +1 -0
- package/dist/models/groups.d.ts +81 -0
- package/dist/models/groups.d.ts.map +1 -0
- package/dist/models/groups.js +127 -0
- package/dist/models/groups.js.map +1 -0
- package/dist/models/identity.d.ts +47 -0
- package/dist/models/identity.d.ts.map +1 -0
- package/dist/models/identity.js +136 -0
- package/dist/models/identity.js.map +1 -0
- package/dist/models/messages.d.ts +104 -0
- package/dist/models/messages.d.ts.map +1 -0
- package/dist/models/messages.js +168 -0
- package/dist/models/messages.js.map +1 -0
- package/dist/models/profile.d.ts +24 -0
- package/dist/models/profile.d.ts.map +1 -0
- package/dist/models/profile.js +47 -0
- package/dist/models/profile.js.map +1 -0
- package/dist/models/relay.d.ts +39 -0
- package/dist/models/relay.d.ts.map +1 -0
- package/dist/models/relay.js +160 -0
- package/dist/models/relay.js.map +1 -0
- package/dist/protocol/codec.d.ts +36 -0
- package/dist/protocol/codec.d.ts.map +1 -0
- package/dist/protocol/codec.js +144 -0
- package/dist/protocol/codec.js.map +1 -0
- package/dist/protocol/context.d.ts +14 -0
- package/dist/protocol/context.d.ts.map +1 -0
- package/dist/protocol/context.js +43 -0
- package/dist/protocol/context.js.map +1 -0
- package/dist/protocol/encoding.d.ts +15 -0
- package/dist/protocol/encoding.d.ts.map +1 -0
- package/dist/protocol/encoding.js +133 -0
- package/dist/protocol/encoding.js.map +1 -0
- package/dist/protocol/json.d.ts +16 -0
- package/dist/protocol/json.d.ts.map +1 -0
- package/dist/protocol/json.js +172 -0
- package/dist/protocol/json.js.map +1 -0
- package/dist/protocol/validation.d.ts +4 -0
- package/dist/protocol/validation.d.ts.map +1 -0
- package/dist/protocol/validation.js +18 -0
- package/dist/protocol/validation.js.map +1 -0
- package/dist/runtime/abort.d.ts +6 -0
- package/dist/runtime/abort.d.ts.map +1 -0
- package/dist/runtime/abort.js +32 -0
- package/dist/runtime/abort.js.map +1 -0
- package/dist/runtime/async-gate.d.ts +6 -0
- package/dist/runtime/async-gate.d.ts.map +1 -0
- package/dist/runtime/async-gate.js +15 -0
- package/dist/runtime/async-gate.js.map +1 -0
- package/dist/runtime/async-pulse.d.ts +7 -0
- package/dist/runtime/async-pulse.d.ts.map +1 -0
- package/dist/runtime/async-pulse.js +23 -0
- package/dist/runtime/async-pulse.js.map +1 -0
- package/dist/runtime/clock.d.ts +16 -0
- package/dist/runtime/clock.d.ts.map +1 -0
- package/dist/runtime/clock.js +62 -0
- package/dist/runtime/clock.js.map +1 -0
- package/dist/runtime/events.d.ts +11 -0
- package/dist/runtime/events.d.ts.map +1 -0
- package/dist/runtime/events.js +45 -0
- package/dist/runtime/events.js.map +1 -0
- package/dist/runtime/url.d.ts +3 -0
- package/dist/runtime/url.d.ts.map +1 -0
- package/dist/runtime/url.js +23 -0
- package/dist/runtime/url.js.map +1 -0
- package/dist/storage/signed-request.d.ts +14 -0
- package/dist/storage/signed-request.d.ts.map +1 -0
- package/dist/storage/signed-request.js +26 -0
- package/dist/storage/signed-request.js.map +1 -0
- package/dist/storage/store.d.ts +58 -0
- package/dist/storage/store.d.ts.map +1 -0
- package/dist/storage/store.js +52 -0
- package/dist/storage/store.js.map +1 -0
- package/dist/storage/transaction.d.ts +7 -0
- package/dist/storage/transaction.d.ts.map +1 -0
- package/dist/storage/transaction.js +22 -0
- package/dist/storage/transaction.js.map +1 -0
- package/dist/transport/client.d.ts +61 -0
- package/dist/transport/client.d.ts.map +1 -0
- package/dist/transport/client.js +392 -0
- package/dist/transport/client.js.map +1 -0
- package/dist/transport/discovery.d.ts +19 -0
- package/dist/transport/discovery.d.ts.map +1 -0
- package/dist/transport/discovery.js +75 -0
- package/dist/transport/discovery.js.map +1 -0
- package/dist/transport/endpoint.d.ts +6 -0
- package/dist/transport/endpoint.d.ts.map +1 -0
- package/dist/transport/endpoint.js +35 -0
- package/dist/transport/endpoint.js.map +1 -0
- package/dist/transport/http.d.ts +52 -0
- package/dist/transport/http.d.ts.map +1 -0
- package/dist/transport/http.js +128 -0
- package/dist/transport/http.js.map +1 -0
- package/dist/transport/pool.d.ts +31 -0
- package/dist/transport/pool.d.ts.map +1 -0
- package/dist/transport/pool.js +137 -0
- package/dist/transport/pool.js.map +1 -0
- package/dist/transport/relay-error.d.ts +23 -0
- package/dist/transport/relay-error.d.ts.map +1 -0
- package/dist/transport/relay-error.js +47 -0
- package/dist/transport/relay-error.js.map +1 -0
- package/dist/transport/rpc.d.ts +31 -0
- package/dist/transport/rpc.d.ts.map +1 -0
- package/dist/transport/rpc.js +56 -0
- package/dist/transport/rpc.js.map +1 -0
- package/dist/transport/session.d.ts +49 -0
- package/dist/transport/session.d.ts.map +1 -0
- package/dist/transport/session.js +169 -0
- package/dist/transport/session.js.map +1 -0
- package/dist/transport/socket.d.ts +55 -0
- package/dist/transport/socket.d.ts.map +1 -0
- package/dist/transport/socket.js +266 -0
- package/dist/transport/socket.js.map +1 -0
- package/dist/transport/subscription.d.ts +36 -0
- package/dist/transport/subscription.d.ts.map +1 -0
- package/dist/transport/subscription.js +169 -0
- package/dist/transport/subscription.js.map +1 -0
- package/package.json +35 -4
- package/src/channels/repository.ts +244 -0
- package/src/client/account-operations.ts +183 -0
- package/src/client/conversations.ts +95 -0
- package/src/client.ts +108 -0
- package/src/components/account.ts +206 -0
- package/src/components/channel.ts +253 -0
- package/src/components/component.ts +151 -0
- package/src/components/device.ts +455 -0
- package/src/components/group.ts +546 -0
- package/src/components/message.ts +253 -0
- package/src/components/profile.ts +179 -0
- package/src/crypto/groups.ts +107 -0
- package/src/crypto/messages.ts +129 -0
- package/src/crypto/primitives.ts +103 -0
- package/src/errors.ts +13 -0
- package/src/groups/account-sync.ts +144 -0
- package/src/groups/messages.ts +89 -0
- package/src/groups/operations.ts +145 -0
- package/src/groups/repository.ts +161 -0
- package/src/groups/secrets.ts +256 -0
- package/src/groups/state.ts +138 -0
- package/src/identity/identifiers.ts +41 -0
- package/src/identity/neo.ts +72 -0
- package/src/index.ts +52 -0
- package/src/interactions.ts +35 -0
- package/src/messages/account-sender.ts +33 -0
- package/src/messages/contacts.ts +379 -0
- package/src/messages/outbox.ts +152 -0
- package/src/messages/receiver.ts +86 -0
- package/src/messages/repository.ts +230 -0
- package/src/models/authentication.ts +63 -0
- package/src/models/channels.ts +155 -0
- package/src/models/contacts.ts +141 -0
- package/src/models/content.ts +105 -0
- package/src/models/device-state.ts +18 -0
- package/src/models/group-admission.ts +110 -0
- package/src/models/group-keys.ts +34 -0
- package/src/models/group-management.ts +182 -0
- package/src/models/groups.ts +100 -0
- package/src/models/identity.ts +164 -0
- package/src/models/messages.ts +139 -0
- package/src/models/profile.ts +46 -0
- package/src/models/relay.ts +151 -0
- package/src/protocol/codec.ts +144 -0
- package/src/protocol/context.ts +39 -0
- package/src/protocol/encoding.ts +106 -0
- package/src/protocol/json.ts +140 -0
- package/src/protocol/validation.ts +13 -0
- package/src/runtime/abort.ts +27 -0
- package/src/runtime/async-gate.ts +16 -0
- package/src/runtime/async-pulse.ts +20 -0
- package/src/runtime/clock.ts +63 -0
- package/src/runtime/events.ts +31 -0
- package/src/runtime/url.ts +17 -0
- package/src/storage/signed-request.ts +26 -0
- package/src/storage/store.ts +90 -0
- package/src/storage/transaction.ts +17 -0
- package/src/transport/client.ts +328 -0
- package/src/transport/discovery.ts +64 -0
- package/src/transport/endpoint.ts +32 -0
- package/src/transport/http.ts +129 -0
- package/src/transport/pool.ts +115 -0
- package/src/transport/relay-error.ts +46 -0
- package/src/transport/rpc.ts +56 -0
- package/src/transport/session.ts +154 -0
- package/src/transport/socket.ts +248 -0
- package/src/transport/subscription.ts +117 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { ProtocolError } from '../errors.js';
|
|
2
|
+
import { validateIdentifier } from '../identity/identifiers.js';
|
|
3
|
+
import { validateAccountId } from '../identity/neo.js';
|
|
4
|
+
import { array, boolean, defineCodec, dictionary, integer, text } from '../protocol/codec.js';
|
|
5
|
+
import { requireSafeInteger } from '../protocol/json.js';
|
|
6
|
+
import { validateCompleteObject } from '../protocol/validation.js';
|
|
7
|
+
import { contentHashBytes } from './content.js';
|
|
8
|
+
import { groupSecretBoxCodec, validateGroupSecretBox } from './groups.js';
|
|
9
|
+
export const groupKeyEntryCodec = defineCodec({ epoch: { wire: 'epoch', codec: integer }, clientSecretBox: { wire: 'client_secret_box', codec: groupSecretBoxCodec, optional: true }, relaySecretBox: { wire: 'relay_secret_box', codec: groupSecretBoxCodec } });
|
|
10
|
+
export function validateGroupKeyEntry(value) { validateCompleteObject(groupKeyEntryCodec.encode(value)); requireSafeInteger(value.epoch, 0); if (value.clientSecretBox)
|
|
11
|
+
validateGroupSecretBox(value.clientSecretBox); validateGroupSecretBox(value.relaySecretBox); }
|
|
12
|
+
export const groupKeyPageCodec = defineCodec({ keys: { wire: 'keys', codec: array(groupKeyEntryCodec) }, hasMore: { wire: 'has_more', codec: boolean } });
|
|
13
|
+
export function validateGroupKeyPage(value, after = -1) {
|
|
14
|
+
validateCompleteObject(groupKeyPageCodec.encode(value));
|
|
15
|
+
requireSafeInteger(after, -1);
|
|
16
|
+
if (value.hasMore && !value.keys.length)
|
|
17
|
+
throw new ProtocolError('invalid_pagination', 'An empty group key page cannot have more entries.');
|
|
18
|
+
if (value.keys.length && !value.keys[0].clientSecretBox)
|
|
19
|
+
throw new ProtocolError('missing_secret_box', 'The first group key entry in each page requires a client secret box.');
|
|
20
|
+
for (const entry of value.keys) {
|
|
21
|
+
validateGroupKeyEntry(entry);
|
|
22
|
+
if (entry.epoch <= after)
|
|
23
|
+
throw new ProtocolError('invalid_epoch', 'Group key epochs must increase after the requested cursor.');
|
|
24
|
+
after = entry.epoch;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export const groupRotationPrepareRequestCodec = defineCodec({ groupId: { wire: 'group_id', codec: text }, baseCommitment: { wire: 'base_commitment', codec: text }, clientSecretCommitment: { wire: 'client_secret_commitment', codec: text }, clientSecretBoxes: { wire: 'client_secret_boxes', codec: dictionary(groupSecretBoxCodec) } });
|
|
28
|
+
export function validateGroupRotationPrepareRequest(value) {
|
|
29
|
+
validateCompleteObject(groupRotationPrepareRequestCodec.encode(value));
|
|
30
|
+
validateIdentifier('group', value.groupId);
|
|
31
|
+
contentHashBytes(value.baseCommitment);
|
|
32
|
+
contentHashBytes(value.clientSecretCommitment);
|
|
33
|
+
if (value.baseCommitment === value.clientSecretCommitment)
|
|
34
|
+
throw new ProtocolError('unchanged_secret', 'Prepared client secret commitment must change.');
|
|
35
|
+
const boxes = Object.entries(value.clientSecretBoxes);
|
|
36
|
+
if (!boxes.length)
|
|
37
|
+
throw new ProtocolError('invalid_size', 'Rotation preparation requires at least one client secret box.');
|
|
38
|
+
for (const [account, box] of boxes) {
|
|
39
|
+
validateAccountId(account);
|
|
40
|
+
validateGroupSecretBox(box);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export const groupRotationPrepareResultCodec = defineCodec({ prepared: { wire: 'prepared', codec: integer }, expiresAt: { wire: 'expires_at', codec: integer } });
|
|
44
|
+
export function validateGroupRotationPrepareResult(value, now) {
|
|
45
|
+
validateCompleteObject(groupRotationPrepareResultCodec.encode(value));
|
|
46
|
+
requireSafeInteger(value.prepared, 0);
|
|
47
|
+
requireSafeInteger(value.expiresAt, 0);
|
|
48
|
+
requireSafeInteger(now, 0);
|
|
49
|
+
if (value.expiresAt <= now)
|
|
50
|
+
throw new ProtocolError('expired_preparation', 'Group rotation preparation has expired.');
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=group-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group-keys.js","sourceRoot":"","sources":["../../src/models/group-keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { type ExtensibleModel, type ProtocolCodec, type ValueCodec } from '../protocol/codec.js';
|
|
2
|
+
import { type NetworkContext } from '../protocol/context.js';
|
|
3
|
+
import { type JsonObject } from '../protocol/json.js';
|
|
4
|
+
import { type DeviceCertificate } from './identity.js';
|
|
5
|
+
import { type GroupMemberKey, type GroupSecretBox } from './groups.js';
|
|
6
|
+
export type GroupStatus = 'active' | 'closed';
|
|
7
|
+
export type GroupRole = 'owner' | 'administrator' | 'member';
|
|
8
|
+
export type GroupInvitePolicy = 'administrators' | 'members_targeted' | 'members_shareable';
|
|
9
|
+
export interface GroupCreate extends ExtensibleModel {
|
|
10
|
+
readonly groupId: string;
|
|
11
|
+
readonly nonce: Uint8Array;
|
|
12
|
+
readonly name: string;
|
|
13
|
+
readonly description?: string;
|
|
14
|
+
readonly memberCapacity: number;
|
|
15
|
+
readonly invitePolicy: GroupInvitePolicy;
|
|
16
|
+
readonly owner: GroupMemberKey;
|
|
17
|
+
readonly clientSecretCommitment: string;
|
|
18
|
+
readonly deviceSignature: Uint8Array;
|
|
19
|
+
}
|
|
20
|
+
export declare const groupCreateCodec: ProtocolCodec<GroupCreate>;
|
|
21
|
+
export declare const groupCreateInput: (value: GroupCreate, context: NetworkContext) => Uint8Array;
|
|
22
|
+
export declare function validateGroupCreate(value: GroupCreate): void;
|
|
23
|
+
export interface GroupCreateRequest extends ExtensibleModel {
|
|
24
|
+
readonly create: GroupCreate;
|
|
25
|
+
readonly clientSecretBox: GroupSecretBox;
|
|
26
|
+
}
|
|
27
|
+
export declare const groupCreateRequestCodec: ProtocolCodec<GroupCreateRequest>;
|
|
28
|
+
export declare function validateGroupCreateRequest(value: GroupCreateRequest): void;
|
|
29
|
+
export interface GroupManagementOperation extends ExtensibleModel {
|
|
30
|
+
readonly groupId: string;
|
|
31
|
+
readonly prevHash: string;
|
|
32
|
+
readonly deviceSignature: Uint8Array;
|
|
33
|
+
}
|
|
34
|
+
export interface GroupUpdate extends GroupManagementOperation {
|
|
35
|
+
readonly name?: string;
|
|
36
|
+
readonly description?: string | null;
|
|
37
|
+
readonly memberCapacity?: number;
|
|
38
|
+
readonly invitePolicy?: GroupInvitePolicy;
|
|
39
|
+
}
|
|
40
|
+
export declare const groupUpdateCodec: ProtocolCodec<GroupUpdate>;
|
|
41
|
+
export declare function validateGroupUpdate(value: GroupUpdate): void;
|
|
42
|
+
export interface GroupApplicationApproval extends GroupManagementOperation {
|
|
43
|
+
readonly members: readonly GroupMemberKey[];
|
|
44
|
+
}
|
|
45
|
+
export declare const groupApplicationApprovalCodec: ProtocolCodec<GroupApplicationApproval>;
|
|
46
|
+
export interface GroupMemberRecoveryApproval extends GroupManagementOperation {
|
|
47
|
+
readonly members: readonly GroupMemberKey[];
|
|
48
|
+
}
|
|
49
|
+
export declare const groupMemberRecoveryApprovalCodec: ProtocolCodec<GroupMemberRecoveryApproval>;
|
|
50
|
+
export interface GroupRoleUpdate extends GroupManagementOperation {
|
|
51
|
+
readonly account: string;
|
|
52
|
+
readonly role: 'administrator' | 'member';
|
|
53
|
+
}
|
|
54
|
+
export declare const groupRoleUpdateCodec: ProtocolCodec<GroupRoleUpdate>;
|
|
55
|
+
export interface GroupOwnerTransfer extends GroupManagementOperation {
|
|
56
|
+
readonly newOwnerAccount: string;
|
|
57
|
+
}
|
|
58
|
+
export declare const groupOwnerTransferCodec: ProtocolCodec<GroupOwnerTransfer>;
|
|
59
|
+
export interface GroupMemberLeave extends GroupManagementOperation {
|
|
60
|
+
readonly account: string;
|
|
61
|
+
}
|
|
62
|
+
export declare const groupMemberLeaveCodec: ProtocolCodec<GroupMemberLeave>;
|
|
63
|
+
export interface GroupMemberRemoval extends GroupManagementOperation {
|
|
64
|
+
readonly accounts: readonly string[];
|
|
65
|
+
}
|
|
66
|
+
export declare const groupMemberRemovalCodec: ProtocolCodec<GroupMemberRemoval>;
|
|
67
|
+
export interface GroupMemberBan extends GroupManagementOperation {
|
|
68
|
+
readonly accounts: readonly string[];
|
|
69
|
+
}
|
|
70
|
+
export declare const groupMemberBanCodec: ProtocolCodec<GroupMemberBan>;
|
|
71
|
+
export interface GroupMemberUnban extends GroupManagementOperation {
|
|
72
|
+
readonly accounts: readonly string[];
|
|
73
|
+
}
|
|
74
|
+
export declare const groupMemberUnbanCodec: ProtocolCodec<GroupMemberUnban>;
|
|
75
|
+
export interface GroupSecretRotation extends GroupManagementOperation {
|
|
76
|
+
readonly clientSecretCommitment: string;
|
|
77
|
+
readonly ownerEncryptionPublicKey?: Uint8Array;
|
|
78
|
+
}
|
|
79
|
+
export declare const groupSecretRotationCodec: ProtocolCodec<GroupSecretRotation>;
|
|
80
|
+
export interface GroupClose extends GroupManagementOperation {
|
|
81
|
+
}
|
|
82
|
+
export declare const groupCloseCodec: ProtocolCodec<GroupClose>;
|
|
83
|
+
export interface GroupKeyRotated extends ExtensibleModel {
|
|
84
|
+
}
|
|
85
|
+
export declare const groupKeyRotatedCodec: ProtocolCodec<GroupKeyRotated>;
|
|
86
|
+
declare const managementCodecs: {
|
|
87
|
+
readonly create: ProtocolCodec<GroupCreate>;
|
|
88
|
+
readonly update: ProtocolCodec<GroupUpdate>;
|
|
89
|
+
readonly applicationApproval: ProtocolCodec<GroupApplicationApproval>;
|
|
90
|
+
readonly roleUpdate: ProtocolCodec<GroupRoleUpdate>;
|
|
91
|
+
readonly ownerTransfer: ProtocolCodec<GroupOwnerTransfer>;
|
|
92
|
+
readonly memberLeave: ProtocolCodec<GroupMemberLeave>;
|
|
93
|
+
readonly memberRemoval: ProtocolCodec<GroupMemberRemoval>;
|
|
94
|
+
readonly memberBan: ProtocolCodec<GroupMemberBan>;
|
|
95
|
+
readonly memberUnban: ProtocolCodec<GroupMemberUnban>;
|
|
96
|
+
readonly memberRecoveryApproval: ProtocolCodec<GroupMemberRecoveryApproval>;
|
|
97
|
+
readonly secretRotation: ProtocolCodec<GroupSecretRotation>;
|
|
98
|
+
readonly close: ProtocolCodec<GroupClose>;
|
|
99
|
+
};
|
|
100
|
+
type ManagementModels = {
|
|
101
|
+
[K in keyof typeof managementCodecs]: ReturnType<(typeof managementCodecs)[K]['decode']>;
|
|
102
|
+
};
|
|
103
|
+
export type GroupManagementPayload = {
|
|
104
|
+
[K in keyof ManagementModels]: {
|
|
105
|
+
readonly kind: K;
|
|
106
|
+
readonly value: ManagementModels[K];
|
|
107
|
+
};
|
|
108
|
+
}[keyof ManagementModels];
|
|
109
|
+
export declare const groupManagementPayloadCodec: ValueCodec<GroupManagementPayload>;
|
|
110
|
+
export declare const groupManagementInput: (value: GroupManagementPayload, context: NetworkContext) => Uint8Array;
|
|
111
|
+
export declare function validateGroupManagementPayload(value: GroupManagementPayload): void;
|
|
112
|
+
export declare function verifyGroupManagementPayload(value: GroupManagementPayload, certificate: DeviceCertificate, context: NetworkContext): void;
|
|
113
|
+
export interface GroupInvite extends ExtensibleModel {
|
|
114
|
+
readonly inviteId: string;
|
|
115
|
+
readonly groupId: string;
|
|
116
|
+
readonly inviter: string;
|
|
117
|
+
readonly invitee?: string;
|
|
118
|
+
readonly maxUses?: number;
|
|
119
|
+
readonly createdAt: number;
|
|
120
|
+
readonly expiresAt: number;
|
|
121
|
+
readonly deviceSignature: Uint8Array;
|
|
122
|
+
}
|
|
123
|
+
export declare const groupInviteCodec: ProtocolCodec<GroupInvite>;
|
|
124
|
+
export declare const groupInviteInput: (value: GroupInvite, context: NetworkContext) => Uint8Array;
|
|
125
|
+
export declare function validateGroupInvite(value: GroupInvite, now: number): void;
|
|
126
|
+
export declare function verifyGroupInvite(value: GroupInvite, certificate: DeviceCertificate, context: NetworkContext, now: number): void;
|
|
127
|
+
export interface GroupApplication extends ExtensibleModel {
|
|
128
|
+
readonly groupId: string;
|
|
129
|
+
readonly inviteId: string;
|
|
130
|
+
readonly account: string;
|
|
131
|
+
readonly memberEncryptionPublicKey: Uint8Array;
|
|
132
|
+
readonly deviceSignature: Uint8Array;
|
|
133
|
+
}
|
|
134
|
+
export declare const groupApplicationCodec: ProtocolCodec<GroupApplication>;
|
|
135
|
+
export declare const groupApplicationInput: (value: GroupApplication, context: NetworkContext) => Uint8Array;
|
|
136
|
+
export declare function validateGroupApplication(value: GroupApplication): void;
|
|
137
|
+
export interface GroupMemberRecoveryRequest extends ExtensibleModel {
|
|
138
|
+
readonly groupId: string;
|
|
139
|
+
readonly account: string;
|
|
140
|
+
readonly memberEncryptionPublicKey: Uint8Array;
|
|
141
|
+
readonly deviceSignature: Uint8Array;
|
|
142
|
+
}
|
|
143
|
+
export declare const groupMemberRecoveryRequestCodec: ProtocolCodec<GroupMemberRecoveryRequest>;
|
|
144
|
+
export declare const groupMemberRecoveryRequestInput: (value: GroupMemberRecoveryRequest, context: NetworkContext) => Uint8Array;
|
|
145
|
+
export declare function validateGroupMemberRecoveryRequest(value: GroupMemberRecoveryRequest): void;
|
|
146
|
+
export declare function verifyGroupApplication(value: GroupApplication, certificate: DeviceCertificate, context: NetworkContext): void;
|
|
147
|
+
export declare function verifyGroupMemberRecoveryRequest(value: GroupMemberRecoveryRequest, certificate: DeviceCertificate, context: NetworkContext): void;
|
|
148
|
+
export interface GroupState extends ExtensibleModel {
|
|
149
|
+
readonly groupId: string;
|
|
150
|
+
readonly name: string;
|
|
151
|
+
readonly description?: string;
|
|
152
|
+
readonly status: GroupStatus;
|
|
153
|
+
readonly owner: string;
|
|
154
|
+
readonly memberCapacity: number;
|
|
155
|
+
readonly memberCount: number;
|
|
156
|
+
readonly invitePolicy: GroupInvitePolicy;
|
|
157
|
+
}
|
|
158
|
+
export declare const groupStateCodec: ProtocolCodec<GroupState>;
|
|
159
|
+
/** A relay preview is structurally validated, but cannot establish membership or replace verified chain state. */
|
|
160
|
+
export declare function validateGroupState(value: GroupState): void;
|
|
161
|
+
export interface GroupMember extends GroupMemberKey {
|
|
162
|
+
readonly role: GroupRole;
|
|
163
|
+
}
|
|
164
|
+
export declare const groupMemberCodec: ProtocolCodec<GroupMember>;
|
|
165
|
+
export interface GroupSequenceQuery extends ExtensibleModel {
|
|
166
|
+
readonly groupId: string;
|
|
167
|
+
readonly after?: number;
|
|
168
|
+
readonly limit?: number;
|
|
169
|
+
}
|
|
170
|
+
export declare const groupSequenceQueryCodec: ProtocolCodec<GroupSequenceQuery>;
|
|
171
|
+
export declare function validateGroupSequenceQuery(value: GroupSequenceQuery): void;
|
|
172
|
+
/** Raw typed payload lets the receiver quarantine invalid ordinary messages without skipping unknown administration events. */
|
|
173
|
+
export interface GroupEvent extends ExtensibleModel {
|
|
174
|
+
readonly sequence: number;
|
|
175
|
+
readonly epoch: number;
|
|
176
|
+
readonly payload: JsonObject;
|
|
177
|
+
readonly acceptedAt: number;
|
|
178
|
+
readonly signerDeviceId?: string;
|
|
179
|
+
}
|
|
180
|
+
export declare const groupEventCodec: ProtocolCodec<GroupEvent>;
|
|
181
|
+
export declare function validateGroupEvent(value: GroupEvent): void;
|
|
182
|
+
export interface GroupSyncPage extends ExtensibleModel {
|
|
183
|
+
readonly events: readonly GroupEvent[];
|
|
184
|
+
readonly certificates: readonly DeviceCertificate[];
|
|
185
|
+
readonly hasMore: boolean;
|
|
186
|
+
}
|
|
187
|
+
export declare const groupSyncPageCodec: ProtocolCodec<GroupSyncPage>;
|
|
188
|
+
export declare function validateGroupSyncPage(value: GroupSyncPage, query: GroupSequenceQuery, context: NetworkContext): void;
|
|
189
|
+
export {};
|
|
190
|
+
//# sourceMappingURL=group-management.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group-management.d.ts","sourceRoot":"","sources":["../../src/models/group-management.ts"],"names":[],"mappings":"AAIA,OAAO,EAAkE,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACjK,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE3E,OAAO,EAA+D,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGnH,OAAO,EAA8D,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACnH,OAAO,EAA4F,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAEjK,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC9C,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,eAAe,GAAG,QAAQ,CAAC;AAC7D,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAO5F,MAAM,WAAW,WAAY,SAAQ,eAAe;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAC5I,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAC;CAC3J;AACD,eAAO,MAAM,gBAAgB,4BACuP,CAAC;AACrR,eAAO,MAAM,gBAAgB,UAAW,WAAW,WAAW,cAAc,KAAG,UAAyF,CAAC;AACzK,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAG5D;AACD,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IAAG,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,cAAc,CAAA;CAAE;AACtI,eAAO,MAAM,uBAAuB,mCAAuK,CAAC;AAC5M,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAqJ;AAChO,MAAM,WAAW,wBAAyB,SAAQ,eAAe;IAAG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAA;CAAE;AAE/J,MAAM,WAAW,WAAY,SAAQ,wBAAwB;IAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAA;CAAE;AAC3M,eAAO,MAAM,gBAAgB,4BACsJ,CAAC;AACpL,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAI5D;AACD,MAAM,WAAW,wBAAyB,SAAQ,wBAAwB;IAAG,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE;AAC1H,eAAO,MAAM,6BAA6B,yCAAmK,CAAC;AAC9M,MAAM,WAAW,2BAA4B,SAAQ,wBAAwB;IAAG,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE;AAC7H,eAAO,MAAM,gCAAgC,4CAA0K,CAAC;AAKxN,MAAM,WAAW,eAAgB,SAAQ,wBAAwB;IAAG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,QAAQ,CAAA;CAAE;AACzI,eAAO,MAAM,oBAAoB,gCAAkM,CAAC;AACpO,MAAM,WAAW,kBAAmB,SAAQ,wBAAwB;IAAG,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;CAAE;AACzG,eAAO,MAAM,uBAAuB,mCAAmJ,CAAC;AACxL,MAAM,WAAW,gBAAiB,SAAQ,wBAAwB;IAAG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AAC/F,eAAO,MAAM,qBAAqB,iCAA6H,CAAC;AAChK,MAAM,WAAW,kBAAmB,SAAQ,wBAAwB;IAAG,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE;AAC7G,eAAO,MAAM,uBAAuB,mCAA0I,CAAC;AAC/K,MAAM,WAAW,cAAe,SAAQ,wBAAwB;IAAG,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE;AACzG,eAAO,MAAM,mBAAmB,+BAAkI,CAAC;AACnK,MAAM,WAAW,gBAAiB,SAAQ,wBAAwB;IAAG,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE;AAC3G,eAAO,MAAM,qBAAqB,iCAAsI,CAAC;AAKzK,MAAM,WAAW,mBAAoB,SAAQ,wBAAwB;IAAG,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,UAAU,CAAA;CAAE;AACjK,eAAO,MAAM,wBAAwB,oCAAoQ,CAAC;AAC1S,MAAM,WAAW,UAAW,SAAQ,wBAAwB;CAAG;AAC/D,eAAO,MAAM,eAAe,2BAA8D,CAAC;AAC3F,MAAM,WAAW,eAAgB,SAAQ,eAAe;CAAG;AAC3D,eAAO,MAAM,oBAAoB,gCAAiE,CAAC;AAEnG,QAAA,MAAM,gBAAgB;aAAK,MAAM;aAAoB,MAAM;aAAoB,mBAAmB;aAAiC,UAAU;aACzI,aAAa;aAA2B,WAAW;aAAyB,aAAa;aAA2B,SAAS;aAC7H,WAAW;aAAyB,sBAAsB;aAAoC,cAAc;aAA4B,KAAK;CAA4B,CAAC;AAC9K,KAAK,gBAAgB,GAAG;KAAG,CAAC,IAAI,MAAM,OAAO,gBAAgB,GAAG,UAAU,CAAC,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;CAAE,CAAC;AACrH,MAAM,MAAM,sBAAsB,GAAG;KAAG,CAAC,IAAI,MAAM,gBAAgB,GAAG;QAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;KAAE;CAAE,CAAC,MAAM,gBAAgB,CAAC,CAAC;AAI1J,eAAO,MAAM,2BAA2B,EAAE,UAAU,CAAC,sBAAsB,CAU1E,CAAC;AACF,eAAO,MAAM,oBAAoB,UAAW,sBAAsB,WAAW,cAAc,KAAG,UAAmH,CAAC;AAClN,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAYlF;AACD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAGzI;AAED,MAAM,WAAW,WAAY,SAAQ,eAAe;IAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAA;CAAE;AAC1R,eAAO,MAAM,gBAAgB,4BACuG,CAAC;AACrI,eAAO,MAAM,gBAAgB,UAAW,WAAW,WAAW,cAAc,KAAG,UAAyF,CAAC;AACzK,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAMzE;AACD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAIhI;AACD,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IAAG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,yBAAyB,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAA;CAAE;AAEjO,eAAO,MAAM,qBAAqB,iCAAkI,CAAC;AACrK,eAAO,MAAM,qBAAqB,UAAW,gBAAgB,WAAW,cAAc,KAAG,UAA8F,CAAC;AACxL,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAoV;AAC3Z,MAAM,WAAW,0BAA2B,SAAQ,eAAe;IAAG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,yBAAyB,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAA;CAAE;AAChN,eAAO,MAAM,+BAA+B,2CAA2F,CAAC;AACxI,eAAO,MAAM,+BAA+B,UAAW,0BAA0B,WAAW,cAAc,KAAG,UAAwG,CAAC;AACtN,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,0BAA0B,GAAG,IAAI,CAAqT;AAChZ,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAG7H;AACD,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,0BAA0B,EAAE,WAAW,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAGjJ;AAED,MAAM,WAAW,UAAW,SAAQ,eAAe;IAAG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAA;CAAE;AACrS,eAAO,MAAM,eAAe,2BAC4L,CAAC;AACzN,kHAAkH;AAClH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAgR;AAC3U,MAAM,WAAW,WAAY,SAAQ,cAAc;IAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE;AAChF,eAAO,MAAM,gBAAgB,4BAAkM,CAAC;AAChO,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IAAG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;AAC1I,eAAO,MAAM,uBAAuB,mCAAsM,CAAC;AAC3O,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAsP;AAKjU,+HAA+H;AAC/H,MAAM,WAAW,UAAW,SAAQ,eAAe;IAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE;AACtM,eAAO,MAAM,eAAe,2BAA8S,CAAC;AAC3U,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAK1D;AACD,MAAM,WAAW,aAAc,SAAQ,eAAe;IAAG,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE;AACjL,eAAO,MAAM,kBAAkB,8BAAyN,CAAC;AACzP,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAOpH"}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { requireLength, verifyDevice } from '../crypto/primitives.js';
|
|
2
|
+
import { ProtocolError } from '../errors.js';
|
|
3
|
+
import { validateIdentifier } from '../identity/identifiers.js';
|
|
4
|
+
import { validateAccountId } from '../identity/neo.js';
|
|
5
|
+
import { array, boolean, bytes, defineCodec, enumeration, integer, text } from '../protocol/codec.js';
|
|
6
|
+
import { signingInput } from '../protocol/context.js';
|
|
7
|
+
import { encodeUtf8 } from '../protocol/encoding.js';
|
|
8
|
+
import { canonicalJson, parseJson, requireObject, requireSafeInteger } from '../protocol/json.js';
|
|
9
|
+
import { validateCompleteObject } from '../protocol/validation.js';
|
|
10
|
+
import { containsNonWhitespace, contentHashBytes } from './content.js';
|
|
11
|
+
import { certificateId, deviceCertificateCodec, validateCertificate } from './identity.js';
|
|
12
|
+
import { groupMemberKeyCodec, groupSecretBoxCodec, validateGroupMemberKey, validateGroupSecretBox } from './groups.js';
|
|
13
|
+
const policy = enumeration('administrators', 'members_targeted', 'members_shareable');
|
|
14
|
+
const role = enumeration('owner', 'administrator', 'member');
|
|
15
|
+
function name(value) { if (!containsNonWhitespace(value) || encodeUtf8(value).length > 256)
|
|
16
|
+
throw new ProtocolError('invalid_name', 'Group name requires text and at most 256 UTF-8 bytes.'); }
|
|
17
|
+
function description(value) { if (value !== undefined && value !== '' && (!containsNonWhitespace(value) || encodeUtf8(value).length > 4096))
|
|
18
|
+
throw new ProtocolError('invalid_description', 'Nonempty group description requires text and at most 4096 UTF-8 bytes.'); }
|
|
19
|
+
const signed = { groupId: { wire: 'group_id', codec: text }, deviceSignature: { wire: 'device_signature', codec: bytes } };
|
|
20
|
+
const management = { ...signed, prevHash: { wire: 'prev_hash', codec: text } };
|
|
21
|
+
export const groupCreateCodec = defineCodec({ ...signed, nonce: { wire: 'nonce', codec: bytes }, name: { wire: 'name', codec: text }, description: { wire: 'description', codec: text, optional: true },
|
|
22
|
+
memberCapacity: { wire: 'member_capacity', codec: integer }, invitePolicy: { wire: 'invite_policy', codec: policy }, owner: { wire: 'owner', codec: groupMemberKeyCodec }, clientSecretCommitment: { wire: 'client_secret_commitment', codec: text } }, 'meshline.group.create');
|
|
23
|
+
export const groupCreateInput = (value, context) => signingInput(groupCreateCodec.encode(value), context, ['device_signature']);
|
|
24
|
+
export function validateGroupCreate(value) {
|
|
25
|
+
validateCompleteObject(groupCreateCodec.encode(value));
|
|
26
|
+
validateIdentifier('group', value.groupId);
|
|
27
|
+
requireLength(value.nonce, 16, 'Group nonce');
|
|
28
|
+
name(value.name);
|
|
29
|
+
description(value.description);
|
|
30
|
+
requireSafeInteger(value.memberCapacity, 1);
|
|
31
|
+
validateGroupMemberKey(value.owner);
|
|
32
|
+
contentHashBytes(value.clientSecretCommitment);
|
|
33
|
+
requireLength(value.deviceSignature, 64, 'Group signature');
|
|
34
|
+
}
|
|
35
|
+
export const groupCreateRequestCodec = defineCodec({ create: { wire: 'create', codec: groupCreateCodec }, clientSecretBox: { wire: 'client_secret_box', codec: groupSecretBoxCodec } });
|
|
36
|
+
export function validateGroupCreateRequest(value) { validateCompleteObject(groupCreateRequestCodec.encode(value)); validateGroupCreate(value.create); validateGroupSecretBox(value.clientSecretBox); }
|
|
37
|
+
function validateOperation(value) { validateIdentifier('group', value.groupId); contentHashBytes(value.prevHash); requireLength(value.deviceSignature, 64, 'Group management signature'); }
|
|
38
|
+
export const groupUpdateCodec = defineCodec({ ...management, name: { wire: 'name', codec: text, optional: true }, description: { wire: 'description', codec: text, optional: true, nullable: true },
|
|
39
|
+
memberCapacity: { wire: 'member_capacity', codec: integer, optional: true }, invitePolicy: { wire: 'invite_policy', codec: policy, optional: true } }, 'meshline.group.update');
|
|
40
|
+
export function validateGroupUpdate(value) {
|
|
41
|
+
const wire = groupUpdateCodec.encode(value);
|
|
42
|
+
if (wire.description === null)
|
|
43
|
+
delete wire.description;
|
|
44
|
+
validateCompleteObject(wire);
|
|
45
|
+
validateOperation(value);
|
|
46
|
+
if (value.name === undefined && value.description === undefined && value.memberCapacity === undefined && value.invitePolicy === undefined)
|
|
47
|
+
throw new ProtocolError('empty_update', 'A group update requires a known modifiable field.');
|
|
48
|
+
if (value.name !== undefined)
|
|
49
|
+
name(value.name);
|
|
50
|
+
if (value.description !== null)
|
|
51
|
+
description(value.description);
|
|
52
|
+
if (value.memberCapacity !== undefined)
|
|
53
|
+
requireSafeInteger(value.memberCapacity, 1);
|
|
54
|
+
}
|
|
55
|
+
export const groupApplicationApprovalCodec = defineCodec({ ...management, members: { wire: 'members', codec: array(groupMemberKeyCodec) } }, 'meshline.group.application.approval');
|
|
56
|
+
export const groupMemberRecoveryApprovalCodec = defineCodec({ ...management, members: { wire: 'members', codec: array(groupMemberKeyCodec) } }, 'meshline.group.member.recovery.approval');
|
|
57
|
+
function validateMembers(members) {
|
|
58
|
+
if (!members.length)
|
|
59
|
+
throw new ProtocolError('invalid_size', 'A member list cannot be empty.');
|
|
60
|
+
const seen = new Set();
|
|
61
|
+
for (const member of members) {
|
|
62
|
+
validateGroupMemberKey(member);
|
|
63
|
+
if (seen.has(member.account))
|
|
64
|
+
throw new ProtocolError('duplicate_member', 'A member list repeats an account.');
|
|
65
|
+
seen.add(member.account);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export const groupRoleUpdateCodec = defineCodec({ ...management, account: { wire: 'account', codec: text }, role: { wire: 'role', codec: enumeration('administrator', 'member') } }, 'meshline.group.role.update');
|
|
69
|
+
export const groupOwnerTransferCodec = defineCodec({ ...management, newOwnerAccount: { wire: 'new_owner_account', codec: text } }, 'meshline.group.owner.transfer');
|
|
70
|
+
export const groupMemberLeaveCodec = defineCodec({ ...management, account: { wire: 'account', codec: text } }, 'meshline.group.member.leave');
|
|
71
|
+
export const groupMemberRemovalCodec = defineCodec({ ...management, accounts: { wire: 'accounts', codec: array(text) } }, 'meshline.group.member.removal');
|
|
72
|
+
export const groupMemberBanCodec = defineCodec({ ...management, accounts: { wire: 'accounts', codec: array(text) } }, 'meshline.group.member.ban');
|
|
73
|
+
export const groupMemberUnbanCodec = defineCodec({ ...management, accounts: { wire: 'accounts', codec: array(text) } }, 'meshline.group.member.unban');
|
|
74
|
+
function validateAccounts(accounts) {
|
|
75
|
+
if (!accounts.length)
|
|
76
|
+
throw new ProtocolError('invalid_size', 'An account list cannot be empty.');
|
|
77
|
+
const seen = new Set();
|
|
78
|
+
for (const account of accounts) {
|
|
79
|
+
validateAccountId(account);
|
|
80
|
+
if (seen.has(account))
|
|
81
|
+
throw new ProtocolError('duplicate_account', 'An account list repeats an account.');
|
|
82
|
+
seen.add(account);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export const groupSecretRotationCodec = defineCodec({ ...management, clientSecretCommitment: { wire: 'client_secret_commitment', codec: text }, ownerEncryptionPublicKey: { wire: 'owner_encryption_public_key', codec: bytes, optional: true } }, 'meshline.group.secret.rotation');
|
|
86
|
+
export const groupCloseCodec = defineCodec(management, 'meshline.group.close');
|
|
87
|
+
export const groupKeyRotatedCodec = defineCodec({}, 'meshline.group.key.rotated');
|
|
88
|
+
const managementCodecs = { create: groupCreateCodec, update: groupUpdateCodec, applicationApproval: groupApplicationApprovalCodec, roleUpdate: groupRoleUpdateCodec,
|
|
89
|
+
ownerTransfer: groupOwnerTransferCodec, memberLeave: groupMemberLeaveCodec, memberRemoval: groupMemberRemovalCodec, memberBan: groupMemberBanCodec,
|
|
90
|
+
memberUnban: groupMemberUnbanCodec, memberRecoveryApproval: groupMemberRecoveryApprovalCodec, secretRotation: groupSecretRotationCodec, close: groupCloseCodec };
|
|
91
|
+
const managementKinds = { 'meshline.group.create': 'create', 'meshline.group.update': 'update', 'meshline.group.application.approval': 'applicationApproval',
|
|
92
|
+
'meshline.group.role.update': 'roleUpdate', 'meshline.group.owner.transfer': 'ownerTransfer', 'meshline.group.member.leave': 'memberLeave', 'meshline.group.member.removal': 'memberRemoval',
|
|
93
|
+
'meshline.group.member.ban': 'memberBan', 'meshline.group.member.unban': 'memberUnban', 'meshline.group.member.recovery.approval': 'memberRecoveryApproval', 'meshline.group.secret.rotation': 'secretRotation', 'meshline.group.close': 'close' };
|
|
94
|
+
export const groupManagementPayloadCodec = {
|
|
95
|
+
decode(value) {
|
|
96
|
+
const wire = requireObject(value);
|
|
97
|
+
const kind = typeof wire.$type === 'string' && Object.hasOwn(managementKinds, wire.$type) ? managementKinds[wire.$type] : undefined;
|
|
98
|
+
if (!kind)
|
|
99
|
+
throw new ProtocolError('unsupported_group_operation', 'Unknown group administration type; state verification must pause.');
|
|
100
|
+
return { kind, value: managementCodecs[kind].decode(wire) };
|
|
101
|
+
},
|
|
102
|
+
encode(value) {
|
|
103
|
+
const codec = managementCodecs[value.kind];
|
|
104
|
+
if (!codec)
|
|
105
|
+
throw new ProtocolError('unsupported_group_operation', 'Unknown group administration kind.');
|
|
106
|
+
return codec.encode(value.value);
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
export const groupManagementInput = (value, context) => signingInput(requireObject(groupManagementPayloadCodec.encode(value)), context, ['device_signature']);
|
|
110
|
+
export function validateGroupManagementPayload(value) {
|
|
111
|
+
if (value.kind === 'create') {
|
|
112
|
+
validateGroupCreate(value.value);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (value.kind === 'update') {
|
|
116
|
+
validateGroupUpdate(value.value);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
validateCompleteObject(requireObject(groupManagementPayloadCodec.encode(value)));
|
|
120
|
+
validateOperation(value.value);
|
|
121
|
+
switch (value.kind) {
|
|
122
|
+
case 'applicationApproval':
|
|
123
|
+
case 'memberRecoveryApproval':
|
|
124
|
+
validateMembers(value.value.members);
|
|
125
|
+
break;
|
|
126
|
+
case 'memberRemoval':
|
|
127
|
+
case 'memberBan':
|
|
128
|
+
case 'memberUnban':
|
|
129
|
+
validateAccounts(value.value.accounts);
|
|
130
|
+
break;
|
|
131
|
+
case 'roleUpdate':
|
|
132
|
+
case 'memberLeave':
|
|
133
|
+
validateAccountId(value.value.account);
|
|
134
|
+
break;
|
|
135
|
+
case 'ownerTransfer':
|
|
136
|
+
validateAccountId(value.value.newOwnerAccount);
|
|
137
|
+
break;
|
|
138
|
+
case 'secretRotation':
|
|
139
|
+
contentHashBytes(value.value.clientSecretCommitment);
|
|
140
|
+
if (value.value.ownerEncryptionPublicKey)
|
|
141
|
+
requireLength(value.value.ownerEncryptionPublicKey, 32, 'Owner encryption public key');
|
|
142
|
+
break;
|
|
143
|
+
case 'close': break;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
export function verifyGroupManagementPayload(value, certificate, context) {
|
|
147
|
+
validateGroupManagementPayload(value);
|
|
148
|
+
validateCertificate(certificate, context);
|
|
149
|
+
if (!verifyDevice(groupManagementInput(value, context), value.value.deviceSignature, certificate.signingPublicKey))
|
|
150
|
+
throw new ProtocolError('invalid_signature', 'Invalid group administration signature.');
|
|
151
|
+
}
|
|
152
|
+
export const groupInviteCodec = defineCodec({ ...signed, inviteId: { wire: 'invite_id', codec: text }, inviter: { wire: 'inviter', codec: text }, invitee: { wire: 'invitee', codec: text, optional: true }, maxUses: { wire: 'max_uses', codec: integer, optional: true },
|
|
153
|
+
createdAt: { wire: 'created_at', codec: integer }, expiresAt: { wire: 'expires_at', codec: integer } }, 'meshline.group.invite');
|
|
154
|
+
export const groupInviteInput = (value, context) => signingInput(groupInviteCodec.encode(value), context, ['device_signature']);
|
|
155
|
+
export function validateGroupInvite(value, now) {
|
|
156
|
+
validateCompleteObject(groupInviteCodec.encode(value));
|
|
157
|
+
validateIdentifier('invite', value.inviteId);
|
|
158
|
+
validateIdentifier('group', value.groupId);
|
|
159
|
+
validateAccountId(value.inviter);
|
|
160
|
+
if (value.invitee !== undefined)
|
|
161
|
+
validateAccountId(value.invitee);
|
|
162
|
+
if (value.maxUses !== undefined)
|
|
163
|
+
requireSafeInteger(value.maxUses, 1);
|
|
164
|
+
if (value.invitee !== undefined && value.maxUses !== undefined)
|
|
165
|
+
throw new ProtocolError('invalid_invite', 'Only shareable invitations may specify a use limit.');
|
|
166
|
+
requireSafeInteger(value.createdAt, 0);
|
|
167
|
+
requireSafeInteger(value.expiresAt, 0);
|
|
168
|
+
requireSafeInteger(now, 0);
|
|
169
|
+
requireLength(value.deviceSignature, 64, 'Group invitation signature');
|
|
170
|
+
if (value.expiresAt <= value.createdAt || value.expiresAt <= now)
|
|
171
|
+
throw new ProtocolError('expired_invite', 'Group invitation must expire after its creation and the current time.');
|
|
172
|
+
}
|
|
173
|
+
export function verifyGroupInvite(value, certificate, context, now) {
|
|
174
|
+
validateGroupInvite(value, now);
|
|
175
|
+
validateCertificate(certificate, context);
|
|
176
|
+
if (certificate.account !== value.inviter)
|
|
177
|
+
throw new ProtocolError('invalid_identity', 'Group invitation certificate belongs to another account.');
|
|
178
|
+
if (!verifyDevice(groupInviteInput(value, context), value.deviceSignature, certificate.signingPublicKey))
|
|
179
|
+
throw new ProtocolError('invalid_signature', 'Invalid group invitation signature.');
|
|
180
|
+
}
|
|
181
|
+
const memberRequest = { ...signed, account: { wire: 'account', codec: text }, memberEncryptionPublicKey: { wire: 'member_encryption_public_key', codec: bytes } };
|
|
182
|
+
export const groupApplicationCodec = defineCodec({ ...memberRequest, inviteId: { wire: 'invite_id', codec: text } }, 'meshline.group.application');
|
|
183
|
+
export const groupApplicationInput = (value, context) => signingInput(groupApplicationCodec.encode(value), context, ['device_signature']);
|
|
184
|
+
export function validateGroupApplication(value) { validateCompleteObject(groupApplicationCodec.encode(value)); validateIdentifier('group', value.groupId); validateIdentifier('invite', value.inviteId); validateAccountId(value.account); requireLength(value.memberEncryptionPublicKey, 32, 'Member encryption public key'); requireLength(value.deviceSignature, 64, 'Application signature'); }
|
|
185
|
+
export const groupMemberRecoveryRequestCodec = defineCodec(memberRequest, 'meshline.group.member.recovery');
|
|
186
|
+
export const groupMemberRecoveryRequestInput = (value, context) => signingInput(groupMemberRecoveryRequestCodec.encode(value), context, ['device_signature']);
|
|
187
|
+
export function validateGroupMemberRecoveryRequest(value) { validateCompleteObject(groupMemberRecoveryRequestCodec.encode(value)); validateIdentifier('group', value.groupId); validateAccountId(value.account); requireLength(value.memberEncryptionPublicKey, 32, 'Member encryption public key'); requireLength(value.deviceSignature, 64, 'Recovery request signature'); }
|
|
188
|
+
export function verifyGroupApplication(value, certificate, context) {
|
|
189
|
+
validateGroupApplication(value);
|
|
190
|
+
validateCertificate(certificate, context);
|
|
191
|
+
if (certificate.account !== value.account)
|
|
192
|
+
throw new ProtocolError('invalid_identity', 'Application certificate belongs to another account.');
|
|
193
|
+
if (!verifyDevice(groupApplicationInput(value, context), value.deviceSignature, certificate.signingPublicKey))
|
|
194
|
+
throw new ProtocolError('invalid_signature', 'Invalid group application signature.');
|
|
195
|
+
}
|
|
196
|
+
export function verifyGroupMemberRecoveryRequest(value, certificate, context) {
|
|
197
|
+
validateGroupMemberRecoveryRequest(value);
|
|
198
|
+
validateCertificate(certificate, context);
|
|
199
|
+
if (certificate.account !== value.account)
|
|
200
|
+
throw new ProtocolError('invalid_identity', 'Recovery request certificate belongs to another account.');
|
|
201
|
+
if (!verifyDevice(groupMemberRecoveryRequestInput(value, context), value.deviceSignature, certificate.signingPublicKey))
|
|
202
|
+
throw new ProtocolError('invalid_signature', 'Invalid member recovery signature.');
|
|
203
|
+
}
|
|
204
|
+
export const groupStateCodec = defineCodec({ groupId: { wire: 'group_id', codec: text }, name: { wire: 'name', codec: text }, description: { wire: 'description', codec: text, optional: true }, status: { wire: 'status', codec: enumeration('active', 'closed') },
|
|
205
|
+
owner: { wire: 'owner', codec: text }, memberCapacity: { wire: 'member_capacity', codec: integer }, memberCount: { wire: 'member_count', codec: integer }, invitePolicy: { wire: 'invite_policy', codec: policy } });
|
|
206
|
+
/** A relay preview is structurally validated, but cannot establish membership or replace verified chain state. */
|
|
207
|
+
export function validateGroupState(value) { validateCompleteObject(groupStateCodec.encode(value)); validateIdentifier('group', value.groupId); name(value.name); description(value.description); validateAccountId(value.owner); requireSafeInteger(value.memberCapacity, 1); requireSafeInteger(value.memberCount, 1); }
|
|
208
|
+
export const groupMemberCodec = defineCodec({ account: { wire: 'account', codec: text }, memberEncryptionPublicKey: { wire: 'member_encryption_public_key', codec: bytes }, role: { wire: 'role', codec: role } });
|
|
209
|
+
export const groupSequenceQueryCodec = defineCodec({ groupId: { wire: 'group_id', codec: text }, after: { wire: 'after', codec: integer, optional: true }, limit: { wire: 'limit', codec: integer, optional: true } });
|
|
210
|
+
export function validateGroupSequenceQuery(value) { validateCompleteObject(groupSequenceQueryCodec.encode(value)); validateIdentifier('group', value.groupId); if (value.after !== undefined)
|
|
211
|
+
requireSafeInteger(value.after, -1); if (value.limit !== undefined)
|
|
212
|
+
requireSafeInteger(value.limit, 1); }
|
|
213
|
+
const timelinePayload = {
|
|
214
|
+
decode(value) { const wire = requireObject(parseJson(canonicalJson(requireObject(value)))); if (typeof wire.$type !== 'string')
|
|
215
|
+
throw new ProtocolError('invalid_type', 'A group event payload requires a string $type.'); return wire; },
|
|
216
|
+
encode(value) { return this.decode(value); },
|
|
217
|
+
};
|
|
218
|
+
export const groupEventCodec = defineCodec({ sequence: { wire: 'sequence', codec: integer }, epoch: { wire: 'epoch', codec: integer }, payload: { wire: 'payload', codec: timelinePayload }, acceptedAt: { wire: 'accepted_at', codec: integer }, signerDeviceId: { wire: 'signer_device_id', codec: text, optional: true } });
|
|
219
|
+
export function validateGroupEvent(value) {
|
|
220
|
+
const wire = groupEventCodec.encode(value);
|
|
221
|
+
delete wire.payload;
|
|
222
|
+
validateCompleteObject(wire);
|
|
223
|
+
requireSafeInteger(value.sequence, 0);
|
|
224
|
+
requireSafeInteger(value.epoch, 0);
|
|
225
|
+
requireSafeInteger(value.acceptedAt, 0);
|
|
226
|
+
if (value.payload.$type === 'meshline.group.key.rotated') {
|
|
227
|
+
validateCompleteObject(value.payload);
|
|
228
|
+
if (value.signerDeviceId !== undefined || Object.hasOwn(value.payload, 'device_signature'))
|
|
229
|
+
throw new ProtocolError('invalid_rotation', 'Relay rotation cannot carry a device signer or signature.');
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
if (value.signerDeviceId === undefined)
|
|
233
|
+
throw new ProtocolError('missing_signer', 'A client group event requires a signing device.');
|
|
234
|
+
validateIdentifier('device', value.signerDeviceId);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
export const groupSyncPageCodec = defineCodec({ events: { wire: 'events', codec: array(groupEventCodec) }, certificates: { wire: 'certificates', codec: array(deviceCertificateCodec) }, hasMore: { wire: 'has_more', codec: boolean } });
|
|
238
|
+
export function validateGroupSyncPage(value, query, context) {
|
|
239
|
+
validateGroupSequenceQuery(query);
|
|
240
|
+
const wire = groupSyncPageCodec.encode(value);
|
|
241
|
+
delete wire.events;
|
|
242
|
+
validateCompleteObject(wire);
|
|
243
|
+
if (value.hasMore && !value.events.length || query.limit !== undefined && value.events.length > query.limit)
|
|
244
|
+
throw new ProtocolError('invalid_pagination', 'Invalid group synchronization page length.');
|
|
245
|
+
const ids = new Set();
|
|
246
|
+
for (const certificate of value.certificates) {
|
|
247
|
+
validateCertificate(certificate, context);
|
|
248
|
+
const id = certificateId(certificate, context);
|
|
249
|
+
if (ids.has(id))
|
|
250
|
+
throw new ProtocolError('duplicate_device', 'Group page repeats a signing certificate.');
|
|
251
|
+
ids.add(id);
|
|
252
|
+
}
|
|
253
|
+
let previous = query.after ?? -1;
|
|
254
|
+
for (const entry of value.events) {
|
|
255
|
+
validateGroupEvent(entry);
|
|
256
|
+
if (entry.sequence <= previous)
|
|
257
|
+
throw new ProtocolError('invalid_sequence', 'Group events must be in increasing order after the requested cursor.');
|
|
258
|
+
previous = entry.sequence;
|
|
259
|
+
if (entry.signerDeviceId !== undefined && !ids.has(entry.signerDeviceId))
|
|
260
|
+
throw new ProtocolError('missing_certificate', 'Group event signing certificate is missing.');
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=group-management.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group-management.js","sourceRoot":"","sources":["../../src/models/group-management.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAA6D,MAAM,sBAAsB,CAAC;AACjK,OAAO,EAAE,YAAY,EAAuB,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAmB,MAAM,qBAAqB,CAAC;AACnH,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,mBAAmB,EAA0B,MAAM,eAAe,CAAC;AACnH,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,sBAAsB,EAA4C,MAAM,aAAa,CAAC;AAKjK,MAAM,MAAM,GAAG,WAAW,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;AACtF,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;AAC7D,SAAS,IAAI,CAAC,KAAa,IAAU,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,GAAG;IAAE,MAAM,IAAI,aAAa,CAAC,cAAc,EAAE,uDAAuD,CAAC,CAAC,CAAC,CAAC;AAC7M,SAAS,WAAW,CAAC,KAAyB,IAAU,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,IAAI,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;IAAE,MAAM,IAAI,aAAa,CAAC,qBAAqB,EAAE,wEAAwE,CAAC,CAAC,CAAC,CAAC;AAClS,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAW,CAAC;AACpI,MAAM,UAAU,GAAG,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,EAAW,CAAC;AAKxF,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAc,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;IAChN,cAAc,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,sBAAsB,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,uBAAuB,CAAC,CAAC;AACrR,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAkB,EAAE,OAAuB,EAAc,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACzK,MAAM,UAAU,mBAAmB,CAAC,KAAkB;IAClD,sBAAsB,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC;IAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACpM,kBAAkB,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IAAC,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAAC,gBAAgB,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAAC,aAAa,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAC;AAClM,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,WAAW,CAAqB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;AAC5M,MAAM,UAAU,0BAA0B,CAAC,KAAyB,IAAU,sBAAsB,CAAC,uBAAuB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAEhO,SAAS,iBAAiB,CAAC,KAA+B,IAAU,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,EAAE,4BAA4B,CAAC,CAAC,CAAC,CAAC;AAE3N,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAc,EAAE,GAAG,UAAU,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC5M,cAAc,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,uBAAuB,CAAC,CAAC;AACpL,MAAM,UAAU,mBAAmB,CAAC,KAAkB;IAClD,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAAC,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC,WAAW,CAAC;IAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC5J,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;QAAE,MAAM,IAAI,aAAa,CAAC,cAAc,EAAE,mDAAmD,CAAC,CAAC;IACxO,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAAC,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI;QAAE,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAAC,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS;QAAE,kBAAkB,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;AACxM,CAAC;AAED,MAAM,CAAC,MAAM,6BAA6B,GAAG,WAAW,CAA2B,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,mBAAmB,CAAC,EAAE,EAAE,EAAE,qCAAqC,CAAC,CAAC;AAE9M,MAAM,CAAC,MAAM,gCAAgC,GAAG,WAAW,CAA8B,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,mBAAmB,CAAC,EAAE,EAAE,EAAE,yCAAyC,CAAC,CAAC;AACxN,SAAS,eAAe,CAAC,OAAkC;IACvD,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,MAAM,IAAI,aAAa,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAC;IAAC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/H,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,mCAAmC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;AAC/M,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAAkB,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,eAAe,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,4BAA4B,CAAC,CAAC;AAEpO,MAAM,CAAC,MAAM,uBAAuB,GAAG,WAAW,CAAqB,EAAE,GAAG,UAAU,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,+BAA+B,CAAC,CAAC;AAExL,MAAM,CAAC,MAAM,qBAAqB,GAAG,WAAW,CAAmB,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,6BAA6B,CAAC,CAAC;AAEhK,MAAM,CAAC,MAAM,uBAAuB,GAAG,WAAW,CAAqB,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,+BAA+B,CAAC,CAAC;AAE/K,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAiB,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,2BAA2B,CAAC,CAAC;AAEnK,MAAM,CAAC,MAAM,qBAAqB,GAAG,WAAW,CAAmB,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,6BAA6B,CAAC,CAAC;AACzK,SAAS,gBAAgB,CAAC,QAA2B;IACjD,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAE,MAAM,IAAI,aAAa,CAAC,cAAc,EAAE,kCAAkC,CAAC,CAAC;IAAC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAClI,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,aAAa,CAAC,mBAAmB,EAAE,qCAAqC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;AAClM,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG,WAAW,CAAsB,EAAE,GAAG,UAAU,EAAE,sBAAsB,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,wBAAwB,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,gCAAgC,CAAC,CAAC;AAE1S,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAa,UAAU,EAAE,sBAAsB,CAAC,CAAC;AAE3F,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAAkB,EAAE,EAAE,4BAA4B,CAAC,CAAC;AAEnG,MAAM,gBAAgB,GAAG,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,UAAU,EAAE,oBAAoB;IAC/J,aAAa,EAAE,uBAAuB,EAAE,WAAW,EAAE,qBAAqB,EAAE,aAAa,EAAE,uBAAuB,EAAE,SAAS,EAAE,mBAAmB;IAClJ,WAAW,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,gCAAgC,EAAE,cAAc,EAAE,wBAAwB,EAAE,KAAK,EAAE,eAAe,EAAW,CAAC;AAG9K,MAAM,eAAe,GAAqD,EAAE,uBAAuB,EAAE,QAAQ,EAAE,uBAAuB,EAAE,QAAQ,EAAE,qCAAqC,EAAE,qBAAqB;IAC1M,4BAA4B,EAAE,YAAY,EAAE,+BAA+B,EAAE,eAAe,EAAE,6BAA6B,EAAE,aAAa,EAAE,+BAA+B,EAAE,eAAe;IAC5L,2BAA2B,EAAE,WAAW,EAAE,6BAA6B,EAAE,aAAa,EAAE,yCAAyC,EAAE,wBAAwB,EAAE,gCAAgC,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,OAAO,EAAE,CAAC;AACvP,MAAM,CAAC,MAAM,2BAA2B,GAAuC;IAC3E,MAAM,CAAC,KAAK;QACR,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QAAC,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvK,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,aAAa,CAAC,6BAA6B,EAAE,mEAAmE,CAAC,CAAC;QACvI,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAA4B,CAAC;IAC1F,CAAC;IACD,MAAM,CAAC,KAAK;QACR,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAA+D,CAAC;QACzG,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,aAAa,CAAC,6BAA6B,EAAE,oCAAoC,CAAC,CAAC;QAAC,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/I,CAAC;CACJ,CAAC;AACF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAA6B,EAAE,OAAuB,EAAc,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,2BAA2B,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAClN,MAAM,UAAU,8BAA8B,CAAC,KAA6B;IACxE,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAC1E,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAC1E,sBAAsB,CAAC,aAAa,CAAC,2BAA2B,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjH,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,qBAAqB,CAAC;QAAC,KAAK,wBAAwB;YAAE,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAAC,MAAM;QACvG,KAAK,eAAe,CAAC;QAAC,KAAK,WAAW,CAAC;QAAC,KAAK,aAAa;YAAE,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAAC,MAAM;QAC1G,KAAK,YAAY,CAAC;QAAC,KAAK,aAAa;YAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAAC,MAAM;QACrF,KAAK,eAAe;YAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAAC,MAAM;QAC5E,KAAK,gBAAgB;YAAE,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAAC,IAAI,KAAK,CAAC,KAAK,CAAC,wBAAwB;gBAAE,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,EAAE,6BAA6B,CAAC,CAAC;YAAC,MAAM;QACrN,KAAK,OAAO,EAAE,MAAM;IACxB,CAAC;AACL,CAAC;AACD,MAAM,UAAU,4BAA4B,CAAC,KAA6B,EAAE,WAA8B,EAAE,OAAuB;IAC/H,8BAA8B,CAAC,KAAK,CAAC,CAAC;IAAC,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACjF,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE,WAAW,CAAC,gBAAgB,CAAC;QAAE,MAAM,IAAI,aAAa,CAAC,mBAAmB,EAAE,yCAAyC,CAAC,CAAC;AAChN,CAAC;AAGD,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAc,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;IACnR,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,uBAAuB,CAAC,CAAC;AACrI,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAkB,EAAE,OAAuB,EAAc,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACzK,MAAM,UAAU,mBAAmB,CAAC,KAAkB,EAAE,GAAW;IAC/D,sBAAsB,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnL,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAAE,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAAC,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAAE,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACzI,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAAE,MAAM,IAAI,aAAa,CAAC,gBAAgB,EAAE,qDAAqD,CAAC,CAAC;IACjK,kBAAkB,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAAC,kBAAkB,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAAC,aAAa,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,EAAE,4BAA4B,CAAC,CAAC;IACnL,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,IAAI,GAAG;QAAE,MAAM,IAAI,aAAa,CAAC,gBAAgB,EAAE,uEAAuE,CAAC,CAAC;AACzL,CAAC;AACD,MAAM,UAAU,iBAAiB,CAAC,KAAkB,EAAE,WAA8B,EAAE,OAAuB,EAAE,GAAW;IACtH,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAAC,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC3E,IAAI,WAAW,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;QAAE,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,0DAA0D,CAAC,CAAC;IACnJ,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,eAAe,EAAE,WAAW,CAAC,gBAAgB,CAAC;QAAE,MAAM,IAAI,aAAa,CAAC,mBAAmB,EAAE,qCAAqC,CAAC,CAAC;AAClM,CAAC;AAED,MAAM,aAAa,GAAG,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,yBAAyB,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,KAAK,EAAE,EAAW,CAAC;AAC3K,MAAM,CAAC,MAAM,qBAAqB,GAAG,WAAW,CAAmB,EAAE,GAAG,aAAa,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,4BAA4B,CAAC,CAAC;AACrK,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAuB,EAAE,OAAuB,EAAc,EAAE,CAAC,YAAY,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACxL,MAAM,UAAU,wBAAwB,CAAC,KAAuB,IAAU,sBAAsB,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,EAAE,8BAA8B,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;AAE3Z,MAAM,CAAC,MAAM,+BAA+B,GAAG,WAAW,CAA6B,aAAa,EAAE,gCAAgC,CAAC,CAAC;AACxI,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,KAAiC,EAAE,OAAuB,EAAc,EAAE,CAAC,YAAY,CAAC,+BAA+B,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACtN,MAAM,UAAU,kCAAkC,CAAC,KAAiC,IAAU,sBAAsB,CAAC,+BAA+B,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,EAAE,8BAA8B,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,EAAE,4BAA4B,CAAC,CAAC,CAAC,CAAC;AAChZ,MAAM,UAAU,sBAAsB,CAAC,KAAuB,EAAE,WAA8B,EAAE,OAAuB;IACnH,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAAC,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAAC,IAAI,WAAW,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;QAAE,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,qDAAqD,CAAC,CAAC;IAC1N,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,eAAe,EAAE,WAAW,CAAC,gBAAgB,CAAC;QAAE,MAAM,IAAI,aAAa,CAAC,mBAAmB,EAAE,sCAAsC,CAAC,CAAC;AACxM,CAAC;AACD,MAAM,UAAU,gCAAgC,CAAC,KAAiC,EAAE,WAA8B,EAAE,OAAuB;IACvI,kCAAkC,CAAC,KAAK,CAAC,CAAC;IAAC,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAAC,IAAI,WAAW,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;QAAE,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,0DAA0D,CAAC,CAAC;IACzO,IAAI,CAAC,YAAY,CAAC,+BAA+B,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,eAAe,EAAE,WAAW,CAAC,gBAAgB,CAAC;QAAE,MAAM,IAAI,aAAa,CAAC,mBAAmB,EAAE,oCAAoC,CAAC,CAAC;AAChN,CAAC;AAGD,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAa,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;IAC3Q,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AACzN,kHAAkH;AAClH,MAAM,UAAU,kBAAkB,CAAC,KAAiB,IAAU,sBAAsB,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3U,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAc,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,yBAAyB,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAEhO,MAAM,CAAC,MAAM,uBAAuB,GAAG,WAAW,CAAqB,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAC3O,MAAM,UAAU,0BAA0B,CAAC,KAAyB,IAAU,sBAAsB,CAAC,uBAAuB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;IAAE,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;IAAE,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACjU,MAAM,eAAe,GAA2B;IAC5C,MAAM,CAAC,KAAK,IAAI,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;QAAE,MAAM,IAAI,aAAa,CAAC,cAAc,EAAE,gDAAgD,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;IACzO,MAAM,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;CAC/C,CAAC;AAGF,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAa,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAC3U,MAAM,UAAU,kBAAkB,CAAC,KAAiB;IAChD,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAAC,OAAO,IAAI,CAAC,OAAO,CAAC;IAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAAC,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAAC,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAClN,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,KAAK,4BAA4B,EAAE,CAAC;QACvD,sBAAsB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAAC,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,kBAAkB,CAAC;YAAE,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,2DAA2D,CAAC,CAAC;IAChP,CAAC;SAAM,CAAC;QAAC,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS;YAAE,MAAM,IAAI,aAAa,CAAC,gBAAgB,EAAE,iDAAiD,CAAC,CAAC;QAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAAC,CAAC;AACxM,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAAgB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,eAAe,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC,sBAAsB,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;AACzP,MAAM,UAAU,qBAAqB,CAAC,KAAoB,EAAE,KAAyB,EAAE,OAAuB;IAC1G,0BAA0B,CAAC,KAAK,CAAC,CAAC;IAAC,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAAC,OAAO,IAAI,CAAC,MAAM,CAAC;IAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACnI,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK;QAAE,MAAM,IAAI,aAAa,CAAC,oBAAoB,EAAE,4CAA4C,CAAC,CAAC;IACzM,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAAC,KAAK,MAAM,WAAW,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QAAC,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAAC,MAAM,EAAE,GAAG,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,2CAA2C,CAAC,CAAC;QAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC;IACnS,IAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,QAAQ;YAAE,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,sEAAsE,CAAC,CAAC;QAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC1O,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC;YAAE,MAAM,IAAI,aAAa,CAAC,qBAAqB,EAAE,6CAA6C,CAAC,CAAC;IAAC,CAAC;AAClL,CAAC"}
|