@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,475 @@
|
|
|
1
|
+
import { systemRandom, verifyDevice } from '../crypto/primitives.js';
|
|
2
|
+
import { ProtocolError, StateConflictError } from '../errors.js';
|
|
3
|
+
import { createIdentifier, deriveResourceId, validateIdentifier } from '../identity/identifiers.js';
|
|
4
|
+
import { validateAccountId, validateRelayId } from '../identity/neo.js';
|
|
5
|
+
import { channelCloseRequestCodec, channelDescriptorCodec, channelPayloadCodec, channelPayloadInput, channelPostCodec, channelPostEditCodec, channelReadPageCodec, channelReadQueryCodec, channelReportRequestCodec, channelResolveQueryCodec, channelResolveResultCodec, channelSubscriptionRequestCodec, channelTimelineChangedCodec, validateChannelPayload, validateChannelPostRef, validateChannelReadQuery, validateChannelRef, validateChannelReportRequest, validateChannelTimelineChanged, verifyChannelDescriptor, } from '../models/channels.js';
|
|
6
|
+
import { certificateId } from '../models/identity.js';
|
|
7
|
+
import { ChannelRepository } from '../channels/repository.js';
|
|
8
|
+
import { snapshotReader } from '../messages/repository.js';
|
|
9
|
+
import { nextRevision } from '../protocol/context.js';
|
|
10
|
+
import { canonicalJson, requireObject, requireSafeInteger } from '../protocol/json.js';
|
|
11
|
+
import { AsyncGate } from '../runtime/async-gate.js';
|
|
12
|
+
import { AsyncPulse } from '../runtime/async-pulse.js';
|
|
13
|
+
import { throwIfAborted } from '../runtime/clock.js';
|
|
14
|
+
import { EventHub } from '../runtime/events.js';
|
|
15
|
+
import { RelayError } from '../transport/relay-error.js';
|
|
16
|
+
import { ClientComponent } from './component.js';
|
|
17
|
+
/** Public channels with verified historical permissions, durable exact requests and explicit runtime ownership. */
|
|
18
|
+
export class ChannelManager extends ClientComponent {
|
|
19
|
+
#store;
|
|
20
|
+
#pool;
|
|
21
|
+
#device;
|
|
22
|
+
#random;
|
|
23
|
+
#repository;
|
|
24
|
+
#writes = new AsyncGate();
|
|
25
|
+
#events = new EventHub();
|
|
26
|
+
#subscriptions = new Map();
|
|
27
|
+
#pulse;
|
|
28
|
+
#jobs = [];
|
|
29
|
+
constructor(options) {
|
|
30
|
+
super(options);
|
|
31
|
+
for (const dependency of [options.relayClients, options.deviceManager])
|
|
32
|
+
if (dependency.accountId !== this.accountId || dependency.context.toString() !== this.context.toString())
|
|
33
|
+
throw new ProtocolError('invalid_context', 'Channel dependencies belong to another network or account.');
|
|
34
|
+
this.#store = options.store;
|
|
35
|
+
this.#pool = options.relayClients;
|
|
36
|
+
this.#device = options.deviceManager;
|
|
37
|
+
this.#random = options.random ?? systemRandom;
|
|
38
|
+
this.#repository = new ChannelRepository(this.#store, this.context, this.accountId);
|
|
39
|
+
}
|
|
40
|
+
on(event, listener) { return this.#events.on(event, listener); }
|
|
41
|
+
#notify(event, value) { this.#events.notify(event, value, error => this.notifyBackgroundError({ operation: 'observer', resource: event, error })); }
|
|
42
|
+
#changed(channel, changes) { if (changes.channel)
|
|
43
|
+
this.#notify('channelChanged', changes.channel); if (changes.posts.length)
|
|
44
|
+
this.#notify('timelineChanged', { channel, changes: changes.posts }); }
|
|
45
|
+
async onInitialize(signal) { this.#device.ensureInitialized(); await this.#store.initialize({ context: this.context.toString(), accountId: this.accountId }, signal); }
|
|
46
|
+
async #hosting(relayId, signal) {
|
|
47
|
+
validateRelayId(relayId);
|
|
48
|
+
const relay = await this.#pool.get(relayId, { mode: 'device', signer: this.#device }, signal);
|
|
49
|
+
if (!(await relay.getDescriptor(signal)).capabilities?.includes('channel.host.v1'))
|
|
50
|
+
throw new ProtocolError('unsupported_capability', 'Relay does not support channel hosting.');
|
|
51
|
+
return relay;
|
|
52
|
+
}
|
|
53
|
+
async #resolve(relay, channel, revision, signal) {
|
|
54
|
+
const result = channelResolveResultCodec.decode((await relay.requestHttp('GET', 'channel.resolve', channelResolveQueryCodec.encode({ channelId: channel.channelId, ...(revision === undefined ? {} : { revision }) }), { signal })));
|
|
55
|
+
verifyChannelDescriptor(result, this.context, channel);
|
|
56
|
+
if (revision !== undefined && result.descriptor.revision !== revision)
|
|
57
|
+
throw new ProtocolError('invalid_revision', 'Relay returned another descriptor revision.');
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
#reader(relay, channel, signal) {
|
|
61
|
+
return {
|
|
62
|
+
read: async (query) => channelReadPageCodec.decode((await relay.requestHttp('GET', 'channel.read', channelReadQueryCodec.encode(query), { signal }))),
|
|
63
|
+
resolve: revision => this.#resolve(relay, channel, revision, signal),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
async #sign(payload, signal) {
|
|
67
|
+
const copy = channelPayloadCodec.decode(channelPayloadCodec.encode(payload));
|
|
68
|
+
validateChannelPayload(copy, this.context);
|
|
69
|
+
const certificate = this.#device.certificate;
|
|
70
|
+
const id = certificateId(certificate, this.context);
|
|
71
|
+
const input = channelPayloadInput(copy, this.context);
|
|
72
|
+
const signature = await this.#device.sign(input, signal);
|
|
73
|
+
if (id !== certificateId(this.#device.certificate, this.context) || !verifyDevice(input, signature, certificate.signingPublicKey))
|
|
74
|
+
throw new StateConflictError('Local channel signing identity changed or returned an invalid signature.');
|
|
75
|
+
return { ...copy, value: { ...copy.value, deviceSignature: signature } };
|
|
76
|
+
}
|
|
77
|
+
#canWrite(descriptor, ownerOnly = false) {
|
|
78
|
+
if (descriptor.status !== 'active')
|
|
79
|
+
throw new ProtocolError('closed_channel', 'Channel is closed.');
|
|
80
|
+
if (descriptor.creator !== this.accountId && (ownerOnly || !descriptor.moderators?.includes(this.accountId)))
|
|
81
|
+
throw new ProtocolError('forbidden', 'Account is not permitted to modify this channel.');
|
|
82
|
+
}
|
|
83
|
+
async #saveOperation(operation, signal) { try {
|
|
84
|
+
await this.#repository.saveOperation(operation, signal);
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
this.#pulse?.pulse();
|
|
88
|
+
} }
|
|
89
|
+
async #send(relay, operation, recovering, signal) {
|
|
90
|
+
const methods = { 'channel.create': 'POST', 'channel.update': 'PUT', 'channel.close': 'DELETE', 'channel.post': 'PUT', 'channel.post.edit': 'PATCH', 'channel.post.delete': 'DELETE' };
|
|
91
|
+
const value = operation.payload;
|
|
92
|
+
const request = operation.method === 'channel.close' && value.kind === 'descriptor'
|
|
93
|
+
? channelCloseRequestCodec.encode({ channelId: value.value.channelId, revision: value.value.revision, updatedAt: value.value.updatedAt, deviceSignature: value.value.deviceSignature }) : requireObject(channelPayloadCodec.encode(value));
|
|
94
|
+
try {
|
|
95
|
+
const result = await relay.requestHttp(methods[operation.method], operation.method, request, { signal });
|
|
96
|
+
if (operation.method === 'channel.post') {
|
|
97
|
+
const sequence = requireObject(result).sequence;
|
|
98
|
+
requireSafeInteger(sequence, 1);
|
|
99
|
+
return sequence;
|
|
100
|
+
}
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
if (!recovering && error instanceof RelayError && error.isDefinitiveRejection)
|
|
105
|
+
await this.#repository.completeOperation(operation);
|
|
106
|
+
throw error;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
async #publishDescriptor(relay, operation, recovering, signal) {
|
|
110
|
+
if (operation.payload.kind !== 'descriptor')
|
|
111
|
+
throw new ProtocolError('invalid_operation', 'Expected a descriptor operation.');
|
|
112
|
+
const descriptor = operation.payload.value;
|
|
113
|
+
let accepted;
|
|
114
|
+
try {
|
|
115
|
+
accepted = await this.#resolve(relay, operation.channel, descriptor.revision, signal);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
if (!(error instanceof RelayError && error.code === 'not_found'))
|
|
119
|
+
throw error;
|
|
120
|
+
}
|
|
121
|
+
if (accepted && channelDescriptorCodec.stringify(accepted.descriptor) !== channelDescriptorCodec.stringify(descriptor)) {
|
|
122
|
+
const changed = await this.#repository.saveDescriptor(operation.channel, accepted, operation);
|
|
123
|
+
if (changed)
|
|
124
|
+
this.#notify('channelChanged', changed);
|
|
125
|
+
throw new StateConflictError('Channel revision is occupied by a different descriptor.');
|
|
126
|
+
}
|
|
127
|
+
if (!accepted) {
|
|
128
|
+
await this.#send(relay, operation, recovering, signal);
|
|
129
|
+
accepted = { descriptor, signerCertificate: this.#device.certificate };
|
|
130
|
+
}
|
|
131
|
+
const changed = await this.#repository.saveDescriptor(operation.channel, accepted, operation);
|
|
132
|
+
if (changed)
|
|
133
|
+
this.#notify('channelChanged', changed);
|
|
134
|
+
this.#pulse?.pulse();
|
|
135
|
+
}
|
|
136
|
+
async #synchronize(relay, channel, after, advance, signal) {
|
|
137
|
+
for (;;) {
|
|
138
|
+
const result = await this.#repository.readPage(channel, { channelId: channel.channelId, after }, this.#reader(relay, channel, signal), advance, signal);
|
|
139
|
+
this.#changed(channel, result.changes);
|
|
140
|
+
if (!result.page.hasMore)
|
|
141
|
+
return;
|
|
142
|
+
after = result.page.events.at(-1).sequence;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
async #publishPost(relay, operation, recovering, signal) {
|
|
146
|
+
if (operation.payload.kind !== 'post')
|
|
147
|
+
throw new ProtocolError('invalid_operation', 'Expected a post publication.');
|
|
148
|
+
const request = operation.payload.value;
|
|
149
|
+
let sequence = operation.acceptedSequence ?? await this.#repository.publication(operation.channel, request, signal);
|
|
150
|
+
if (sequence === undefined) {
|
|
151
|
+
sequence = (await this.#send(relay, operation, recovering, signal));
|
|
152
|
+
operation = await this.#repository.acknowledgePublication(operation, sequence);
|
|
153
|
+
}
|
|
154
|
+
await this.#synchronize(relay, operation.channel, sequence - 1, false, signal);
|
|
155
|
+
await this.#repository.confirmPublication(operation.channel, sequence, request, signal);
|
|
156
|
+
await this.#repository.completeOperation(operation);
|
|
157
|
+
this.#pulse?.pulse();
|
|
158
|
+
return { channel: operation.channel, sequence };
|
|
159
|
+
}
|
|
160
|
+
async #mutate(relay, operation, recovering, signal) {
|
|
161
|
+
if (operation.payload.kind !== 'edit' && operation.payload.kind !== 'delete')
|
|
162
|
+
throw new ProtocolError('invalid_operation', 'Expected a post edit or deletion.');
|
|
163
|
+
await this.#send(relay, operation, recovering, signal);
|
|
164
|
+
const change = await this.#repository.completeOperation(operation, operation.payload.kind === 'delete');
|
|
165
|
+
if (change)
|
|
166
|
+
this.#changed(operation.channel, { posts: [change] });
|
|
167
|
+
this.#pulse?.pulse();
|
|
168
|
+
if (!recovering)
|
|
169
|
+
await this.#synchronize(relay, operation.channel, operation.payload.value.targetSequence - 1, false, signal);
|
|
170
|
+
}
|
|
171
|
+
createChannel(relayId, name, options = {}) {
|
|
172
|
+
validateRelayId(relayId);
|
|
173
|
+
const description = options.description;
|
|
174
|
+
const moderators = options.moderators && [...options.moderators];
|
|
175
|
+
return this.runOperation(scope => this.#writes.run(async () => {
|
|
176
|
+
const relay = await this.#hosting(relayId, scope);
|
|
177
|
+
const nonce = this.#random.bytes(16);
|
|
178
|
+
const now = this.clock.nowSeconds();
|
|
179
|
+
const payload = await this.#sign({ kind: 'descriptor', value: { channelId: deriveResourceId('channel', this.accountId, relayId, nonce, this.context), nonce, creator: this.accountId, relayId,
|
|
180
|
+
name, ...(description === undefined ? {} : { description }), ...(moderators === undefined ? {} : { moderators }), revision: 0, status: 'active', createdAt: now, updatedAt: now, deviceSignature: new Uint8Array(64) } }, scope);
|
|
181
|
+
const channel = { channelId: payload.value.channelId, relayId };
|
|
182
|
+
const operation = { channel, method: 'channel.create', payload };
|
|
183
|
+
await this.#saveOperation(operation, scope);
|
|
184
|
+
await this.#publishDescriptor(relay, operation, false, scope);
|
|
185
|
+
return this.#info(channel, scope);
|
|
186
|
+
}, scope), options.signal);
|
|
187
|
+
}
|
|
188
|
+
async #info(channel, signal) { const record = await this.#repository.get(channel, signal); return { ref: channel, isFollowed: record.isFollowed, ...(record.descriptor ? { descriptor: record.descriptor } : {}) }; }
|
|
189
|
+
getChannel(channel, signal) {
|
|
190
|
+
channel = { ...channel };
|
|
191
|
+
validateChannelRef(channel);
|
|
192
|
+
return this.runOperation(async (scope) => {
|
|
193
|
+
const relay = await this.#hosting(channel.relayId, scope);
|
|
194
|
+
const changed = await this.#repository.saveDescriptor(channel, await this.#resolve(relay, channel, undefined, scope), undefined, scope);
|
|
195
|
+
if (changed)
|
|
196
|
+
this.#notify('channelChanged', changed);
|
|
197
|
+
return this.#info(channel, scope);
|
|
198
|
+
}, signal);
|
|
199
|
+
}
|
|
200
|
+
updateChannel(channel, update, signal) {
|
|
201
|
+
channel = { ...channel };
|
|
202
|
+
validateChannelRef(channel);
|
|
203
|
+
const copy = { ...update, ...(Array.isArray(update.moderators) ? { moderators: [...update.moderators] } : {}) };
|
|
204
|
+
if (copy.name === null)
|
|
205
|
+
throw new TypeError('Channel name cannot be deleted.');
|
|
206
|
+
return this.runOperation(scope => this.#writes.run(async () => {
|
|
207
|
+
const relay = await this.#hosting(channel.relayId, scope);
|
|
208
|
+
const current = (await this.#resolve(relay, channel, undefined, scope)).descriptor;
|
|
209
|
+
this.#canWrite(current, true);
|
|
210
|
+
const { description, moderators, ...base } = current;
|
|
211
|
+
const nextDescription = copy.description === undefined ? description : copy.description;
|
|
212
|
+
const nextModerators = copy.moderators === undefined ? moderators : copy.moderators;
|
|
213
|
+
const payload = await this.#sign({ kind: 'descriptor', value: { ...base, name: copy.name ?? current.name, ...(nextDescription == null ? {} : { description: nextDescription }), ...(nextModerators == null ? {} : { moderators: nextModerators }), revision: nextRevision(current.revision), updatedAt: this.clock.nowSeconds() } }, scope);
|
|
214
|
+
const operation = { channel, method: 'channel.update', payload };
|
|
215
|
+
await this.#saveOperation(operation, scope);
|
|
216
|
+
await this.#publishDescriptor(relay, operation, false, scope);
|
|
217
|
+
return this.#info(channel, scope);
|
|
218
|
+
}, scope), signal);
|
|
219
|
+
}
|
|
220
|
+
closeChannel(channel, signal) {
|
|
221
|
+
channel = { ...channel };
|
|
222
|
+
validateChannelRef(channel);
|
|
223
|
+
return this.runOperation(scope => this.#writes.run(async () => {
|
|
224
|
+
const relay = await this.#hosting(channel.relayId, scope);
|
|
225
|
+
const current = (await this.#resolve(relay, channel, undefined, scope)).descriptor;
|
|
226
|
+
this.#canWrite(current, true);
|
|
227
|
+
const payload = await this.#sign({ kind: 'descriptor', value: { ...current, status: 'closed', revision: nextRevision(current.revision), updatedAt: this.clock.nowSeconds() } }, scope);
|
|
228
|
+
const operation = { channel, method: 'channel.close', payload };
|
|
229
|
+
await this.#saveOperation(operation, scope);
|
|
230
|
+
await this.#publishDescriptor(relay, operation, false, scope);
|
|
231
|
+
}, scope), signal);
|
|
232
|
+
}
|
|
233
|
+
publishPost(channel, draft, signal) {
|
|
234
|
+
channel = { ...channel };
|
|
235
|
+
validateChannelRef(channel);
|
|
236
|
+
const basis = channelPostCodec.decode(channelPostCodec.encode({ ...draft, channelId: channel.channelId, messageId: createIdentifier('message', this.#random), deviceSignature: new Uint8Array(64) }));
|
|
237
|
+
return this.runOperation(scope => this.#writes.run(async () => {
|
|
238
|
+
const relay = await this.#hosting(channel.relayId, scope);
|
|
239
|
+
this.#canWrite((await this.#resolve(relay, channel, undefined, scope)).descriptor);
|
|
240
|
+
const payload = await this.#sign({ kind: 'post', value: basis }, scope);
|
|
241
|
+
const operation = { channel, method: 'channel.post', payload };
|
|
242
|
+
await this.#saveOperation(operation, scope);
|
|
243
|
+
const reference = await this.#publishPost(relay, operation, false, scope);
|
|
244
|
+
const result = await this.#repository.post(reference, scope);
|
|
245
|
+
if (!result)
|
|
246
|
+
throw new ProtocolError('post_deleted', 'The accepted post was already deleted.');
|
|
247
|
+
return result;
|
|
248
|
+
}, scope), signal);
|
|
249
|
+
}
|
|
250
|
+
editPost(post, update, signal) {
|
|
251
|
+
post = { channel: { ...post.channel }, sequence: post.sequence };
|
|
252
|
+
validateChannelPostRef(post);
|
|
253
|
+
const basis = channelPostEditCodec.decode(channelPostEditCodec.encode({ ...update, channelId: post.channel.channelId, targetSequence: post.sequence, deviceSignature: new Uint8Array(64) }));
|
|
254
|
+
return this.runOperation(scope => this.#writes.run(async () => {
|
|
255
|
+
const relay = await this.#hosting(post.channel.relayId, scope);
|
|
256
|
+
this.#canWrite((await this.#resolve(relay, post.channel, undefined, scope)).descriptor);
|
|
257
|
+
const payload = await this.#sign({ kind: 'edit', value: basis }, scope);
|
|
258
|
+
const operation = { channel: post.channel, method: 'channel.post.edit', payload };
|
|
259
|
+
await this.#saveOperation(operation, scope);
|
|
260
|
+
await this.#mutate(relay, operation, false, scope);
|
|
261
|
+
const result = await this.#repository.post(post, scope);
|
|
262
|
+
if (!result)
|
|
263
|
+
throw new ProtocolError('post_unavailable', 'The edited post is no longer available.');
|
|
264
|
+
return result;
|
|
265
|
+
}, scope), signal);
|
|
266
|
+
}
|
|
267
|
+
deletePost(post, signal) {
|
|
268
|
+
post = { channel: { ...post.channel }, sequence: post.sequence };
|
|
269
|
+
validateChannelPostRef(post);
|
|
270
|
+
return this.runOperation(scope => this.#writes.run(async () => {
|
|
271
|
+
const relay = await this.#hosting(post.channel.relayId, scope);
|
|
272
|
+
this.#canWrite((await this.#resolve(relay, post.channel, undefined, scope)).descriptor);
|
|
273
|
+
const payload = await this.#sign({ kind: 'delete', value: { channelId: post.channel.channelId, targetSequence: post.sequence, deviceSignature: new Uint8Array(64) } }, scope);
|
|
274
|
+
const operation = { channel: post.channel, method: 'channel.post.delete', payload };
|
|
275
|
+
await this.#saveOperation(operation, scope);
|
|
276
|
+
await this.#mutate(relay, operation, false, scope);
|
|
277
|
+
}, scope), signal);
|
|
278
|
+
}
|
|
279
|
+
reportPost(post, reason, signal) {
|
|
280
|
+
post = { channel: { ...post.channel }, sequence: post.sequence };
|
|
281
|
+
validateChannelPostRef(post);
|
|
282
|
+
const request = { channelId: post.channel.channelId, targetSequence: post.sequence, reason };
|
|
283
|
+
validateChannelReportRequest(request);
|
|
284
|
+
return this.runOperation(async (scope) => { const relay = await this.#hosting(post.channel.relayId, scope); await relay.requestHttp('PUT', 'channel.post.report', channelReportRequestCodec.encode(request), { signal: scope }); }, signal);
|
|
285
|
+
}
|
|
286
|
+
loadChannelHistory(channel, page = {}, signal) {
|
|
287
|
+
channel = { ...channel };
|
|
288
|
+
validateChannelRef(channel);
|
|
289
|
+
let before;
|
|
290
|
+
if (page.cursor !== undefined) {
|
|
291
|
+
if (!/^(0|[1-9][0-9]*)$/.test(page.cursor))
|
|
292
|
+
throw new TypeError('History cursor must be a nonnegative safe integer.');
|
|
293
|
+
before = Number(page.cursor);
|
|
294
|
+
requireSafeInteger(before, 0);
|
|
295
|
+
}
|
|
296
|
+
const query = { channelId: channel.channelId, ...(before === undefined ? {} : { before }), ...(page.limit === undefined ? {} : { limit: page.limit }) };
|
|
297
|
+
validateChannelReadQuery(query);
|
|
298
|
+
return this.runOperation(scope => this.#writes.run(async () => {
|
|
299
|
+
const relay = await this.#hosting(channel.relayId, scope);
|
|
300
|
+
const result = await this.#repository.readPage(channel, query, this.#reader(relay, channel, scope), false, scope);
|
|
301
|
+
this.#changed(channel, result.changes);
|
|
302
|
+
const items = [];
|
|
303
|
+
for (const event of result.page.events)
|
|
304
|
+
if (event.payload.kind === 'post') {
|
|
305
|
+
const post = await this.#repository.post({ channel, sequence: event.sequence }, scope);
|
|
306
|
+
if (post)
|
|
307
|
+
items.push(post);
|
|
308
|
+
}
|
|
309
|
+
return { items, ...(result.page.hasMore ? { nextCursor: String(result.page.events[0].sequence) } : {}) };
|
|
310
|
+
}, scope), signal);
|
|
311
|
+
}
|
|
312
|
+
getPosts(query = {}, signal) {
|
|
313
|
+
const { channelId, author } = query;
|
|
314
|
+
if (channelId !== undefined)
|
|
315
|
+
validateIdentifier('channel', channelId);
|
|
316
|
+
if (author !== undefined)
|
|
317
|
+
validateAccountId(author);
|
|
318
|
+
return this.runOperation(scope => this.#repository.posts(channelId, author, scope), signal);
|
|
319
|
+
}
|
|
320
|
+
async follow(channel, signal) {
|
|
321
|
+
channel = { ...channel };
|
|
322
|
+
validateChannelRef(channel);
|
|
323
|
+
await this.getChannel(channel, signal);
|
|
324
|
+
const changed = await this.runOperation(scope => this.#repository.follow(channel, true, scope), signal);
|
|
325
|
+
if (changed)
|
|
326
|
+
this.#notify('followChanged', { channel, isFollowed: true });
|
|
327
|
+
this.#pulse?.pulse();
|
|
328
|
+
}
|
|
329
|
+
async unfollow(channel, signal) {
|
|
330
|
+
channel = { ...channel };
|
|
331
|
+
validateChannelRef(channel);
|
|
332
|
+
const changed = await this.runOperation(scope => this.#repository.follow(channel, false, scope), signal);
|
|
333
|
+
if (changed)
|
|
334
|
+
this.#notify('followChanged', { channel, isFollowed: false });
|
|
335
|
+
this.#pulse?.pulse();
|
|
336
|
+
}
|
|
337
|
+
getFollowed(relayId, signal) { if (relayId !== undefined)
|
|
338
|
+
validateRelayId(relayId); return this.runOperation(async (scope) => snapshotReader((await this.#repository.followed(relayId, scope)).map(record => ({ ref: record.channel, isFollowed: record.isFollowed, ...(record.descriptor ? { descriptor: record.descriptor } : {}) }))), signal); }
|
|
339
|
+
async onStart() { void this.#device.certificate; this.#pulse = new AsyncPulse(); this.#jobs = [this.#refresh(this.runtimeSignal), this.#poll(this.runtimeSignal)]; this.#pulse.pulse(); }
|
|
340
|
+
async #poll(signal) { try {
|
|
341
|
+
for (;;) {
|
|
342
|
+
await this.clock.delay(30000, signal);
|
|
343
|
+
this.#pulse?.pulse();
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
catch (error) {
|
|
347
|
+
if (!signal.aborted)
|
|
348
|
+
throw error;
|
|
349
|
+
} }
|
|
350
|
+
async #recover(signal) {
|
|
351
|
+
await this.#writes.run(async () => {
|
|
352
|
+
for (const operation of await this.#repository.operations(signal)) {
|
|
353
|
+
try {
|
|
354
|
+
const relay = await this.#hosting(operation.channel.relayId, signal);
|
|
355
|
+
if (operation.payload.kind === 'descriptor')
|
|
356
|
+
await this.#publishDescriptor(relay, operation, true, signal);
|
|
357
|
+
else if (operation.payload.kind === 'post') {
|
|
358
|
+
if (operation.acceptedSequence === undefined)
|
|
359
|
+
await this.#synchronize(relay, operation.channel, (await this.#repository.get(operation.channel, signal)).syncSequence, false, signal);
|
|
360
|
+
await this.#publishPost(relay, operation, true, signal);
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
await this.#synchronize(relay, operation.channel, operation.payload.value.targetSequence - 1, false, signal);
|
|
364
|
+
if (await this.#repository.hasOperation(operation, signal))
|
|
365
|
+
await this.#mutate(relay, operation, true, signal);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
catch (error) {
|
|
369
|
+
throwIfAborted(signal);
|
|
370
|
+
this.notifyBackgroundError({ operation: 'recover_channel', resource: operation.channel.channelId, error });
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}, signal);
|
|
374
|
+
}
|
|
375
|
+
async #subscribe(client, channelIds, signal) {
|
|
376
|
+
if (!(await client.getDescriptor(signal)).endpoints.some(endpoint => endpoint.startsWith('wss://')))
|
|
377
|
+
return;
|
|
378
|
+
const limit = (await client.getInfo(signal)).limits.maxChannelSubscriptions ?? 0;
|
|
379
|
+
const selected = channelIds.slice(0, limit);
|
|
380
|
+
let observed = this.#subscriptions.get(client.relayId);
|
|
381
|
+
if (observed?.client !== client) {
|
|
382
|
+
if (observed) {
|
|
383
|
+
for (const detach of observed.detach)
|
|
384
|
+
detach();
|
|
385
|
+
await observed.subscription.dispose();
|
|
386
|
+
}
|
|
387
|
+
const subscription = client.createSubscription('channel.subscribe', { channel_ids: [] }, { signal, onSubscribed: () => { this.#pulse?.pulse(); }, onError: error => this.notifyBackgroundError({ operation: 'subscribe_channel', resource: client.relayId, error }) });
|
|
388
|
+
observed = { client, subscription, selected: new Set(), detach: [] };
|
|
389
|
+
this.#subscriptions.set(client.relayId, observed);
|
|
390
|
+
const owner = observed;
|
|
391
|
+
owner.detach.push(client.on('notificationReceived', notification => {
|
|
392
|
+
if (notification.method !== 'channel.timeline.changed' || !owner.selected.size)
|
|
393
|
+
return;
|
|
394
|
+
const value = channelTimelineChangedCodec.decode(notification.params);
|
|
395
|
+
validateChannelTimelineChanged(value);
|
|
396
|
+
if (owner.selected.has(value.channelId))
|
|
397
|
+
this.#pulse?.pulse();
|
|
398
|
+
}), client.on('socketConnected', () => { this.#pulse?.pulse(); }), client.on('errorOccurred', error => this.notifyBackgroundError({ operation: 'connect_channel', resource: client.relayId, error })));
|
|
399
|
+
}
|
|
400
|
+
observed.selected = new Set(selected);
|
|
401
|
+
observed.subscription.update(channelSubscriptionRequestCodec.encode({ channelIds: selected }));
|
|
402
|
+
}
|
|
403
|
+
async #refresh(signal) {
|
|
404
|
+
try {
|
|
405
|
+
for (;;) {
|
|
406
|
+
await this.#pulse.wait(signal);
|
|
407
|
+
try {
|
|
408
|
+
await this.#recover(signal);
|
|
409
|
+
const records = await this.#repository.followed(undefined, signal);
|
|
410
|
+
const relays = new Set(records.map(record => record.channel.relayId));
|
|
411
|
+
for (const [id, observed] of this.#subscriptions)
|
|
412
|
+
if (!relays.has(id)) {
|
|
413
|
+
observed.selected.clear();
|
|
414
|
+
observed.subscription.update({ channel_ids: [] });
|
|
415
|
+
}
|
|
416
|
+
for (const id of relays) {
|
|
417
|
+
try {
|
|
418
|
+
const client = await this.#hosting(id, signal);
|
|
419
|
+
const channels = records.filter(record => record.channel.relayId === id);
|
|
420
|
+
try {
|
|
421
|
+
await this.#subscribe(client, channels.map(record => record.channel.channelId), signal);
|
|
422
|
+
}
|
|
423
|
+
catch (error) {
|
|
424
|
+
throwIfAborted(signal);
|
|
425
|
+
this.notifyBackgroundError({ operation: 'subscribe_channel', resource: id, error });
|
|
426
|
+
}
|
|
427
|
+
for (const record of channels) {
|
|
428
|
+
try {
|
|
429
|
+
await this.#writes.run(async () => {
|
|
430
|
+
const changed = await this.#repository.saveDescriptor(record.channel, await this.#resolve(client, record.channel, undefined, signal), undefined, signal);
|
|
431
|
+
if (changed)
|
|
432
|
+
this.#notify('channelChanged', changed);
|
|
433
|
+
await this.#synchronize(client, record.channel, (await this.#repository.get(record.channel, signal)).syncSequence, true, signal);
|
|
434
|
+
}, signal);
|
|
435
|
+
}
|
|
436
|
+
catch (error) {
|
|
437
|
+
throwIfAborted(signal);
|
|
438
|
+
this.notifyBackgroundError({ operation: 'synchronize_channel', resource: record.channel.channelId, error });
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
catch (error) {
|
|
443
|
+
throwIfAborted(signal);
|
|
444
|
+
this.notifyBackgroundError({ operation: 'connect_channel', resource: id, error });
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
catch (error) {
|
|
449
|
+
throwIfAborted(signal);
|
|
450
|
+
this.notifyBackgroundError({ operation: 'synchronize_channels', error });
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
catch (error) {
|
|
455
|
+
if (!signal.aborted)
|
|
456
|
+
throw error;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
async onStop() {
|
|
460
|
+
try {
|
|
461
|
+
await Promise.all(this.#jobs);
|
|
462
|
+
}
|
|
463
|
+
finally {
|
|
464
|
+
for (const observed of this.#subscriptions.values())
|
|
465
|
+
for (const detach of observed.detach)
|
|
466
|
+
detach();
|
|
467
|
+
await Promise.all([...this.#subscriptions.values()].map(observed => observed.subscription.dispose()));
|
|
468
|
+
this.#subscriptions.clear();
|
|
469
|
+
this.#jobs = [];
|
|
470
|
+
this.#pulse = undefined;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
async onDispose() { this.#events.clear(); }
|
|
474
|
+
}
|
|
475
|
+
//# sourceMappingURL=channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/components/channel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { NetworkContext } from '../protocol/context.js';
|
|
2
|
+
import { type RuntimeClock } from '../runtime/clock.js';
|
|
3
|
+
import { type EventListener } from '../runtime/events.js';
|
|
4
|
+
export type ComponentState = 'uninitialized' | 'stopped' | 'running' | 'stopping' | 'disposed';
|
|
5
|
+
export interface ClientOptions {
|
|
6
|
+
readonly context: NetworkContext;
|
|
7
|
+
readonly accountId: string;
|
|
8
|
+
readonly clock?: RuntimeClock;
|
|
9
|
+
}
|
|
10
|
+
export interface BackgroundFailure {
|
|
11
|
+
readonly operation: string;
|
|
12
|
+
readonly resource?: string;
|
|
13
|
+
readonly error: unknown;
|
|
14
|
+
}
|
|
15
|
+
export interface ComponentEvents {
|
|
16
|
+
readonly stateChanged: {
|
|
17
|
+
readonly previous: ComponentState;
|
|
18
|
+
readonly current: ComponentState;
|
|
19
|
+
};
|
|
20
|
+
readonly backgroundError: BackgroundFailure;
|
|
21
|
+
}
|
|
22
|
+
/** Constructors do no I/O. The application owns shared stores, signers and relay pools. */
|
|
23
|
+
export declare abstract class ClientComponent {
|
|
24
|
+
#private;
|
|
25
|
+
readonly context: NetworkContext;
|
|
26
|
+
readonly accountId: string;
|
|
27
|
+
protected readonly clock: RuntimeClock;
|
|
28
|
+
protected constructor(options: ClientOptions);
|
|
29
|
+
get lifecycleState(): ComponentState;
|
|
30
|
+
get lastBackgroundError(): BackgroundFailure | undefined;
|
|
31
|
+
onLifecycle<K extends keyof ComponentEvents>(event: K, listener: EventListener<ComponentEvents[K]>): () => void;
|
|
32
|
+
protected get runtimeSignal(): AbortSignal;
|
|
33
|
+
ensureInitialized(): void;
|
|
34
|
+
initialize(signal?: AbortSignal): Promise<void>;
|
|
35
|
+
start(signal?: AbortSignal): Promise<void>;
|
|
36
|
+
stop(signal?: AbortSignal): Promise<void>;
|
|
37
|
+
/** Derived public operations use this scope; emit observer events after it releases. */
|
|
38
|
+
protected runOperation<T>(action: (signal: AbortSignal) => Promise<T>, signal?: AbortSignal): Promise<T>;
|
|
39
|
+
protected reportBackgroundError(failure: BackgroundFailure): Promise<void>;
|
|
40
|
+
/** Runtime jobs must not wait for application handlers that can stop or dispose that same runtime. */
|
|
41
|
+
protected notifyBackgroundError(failure: BackgroundFailure): void;
|
|
42
|
+
dispose(): Promise<void>;
|
|
43
|
+
protected onInitialize(_signal: AbortSignal): Promise<void>;
|
|
44
|
+
/** Use runtimeSignal for background jobs; signal only controls startup. */
|
|
45
|
+
protected onStart(_signal: AbortSignal): Promise<void>;
|
|
46
|
+
protected onStop(): Promise<void>;
|
|
47
|
+
protected onDispose(): Promise<void>;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/components/component.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAA2C,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEpE,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAC/F,MAAM,WAAW,aAAa;IAAG,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAA;CAAE;AAC9H,MAAM,WAAW,iBAAiB;IAAG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE;AACtH,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,YAAY,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAA;KAAE,CAAC;IAC/F,QAAQ,CAAC,eAAe,EAAE,iBAAiB,CAAC;CAC/C;AAED,2FAA2F;AAC3F,8BAAsB,eAAe;;IAUjC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAEvC,SAAS,aAAa,OAAO,EAAE,aAAa,EAG3C;IACD,IAAI,cAAc,IAAI,cAAc,CAAwB;IAC5D,IAAI,mBAAmB,IAAI,iBAAiB,GAAG,SAAS,CAAoC;IAC5F,WAAW,CAAC,CAAC,SAAS,MAAM,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAA6C;IAI5J,SAAS,KAAK,aAAa,IAAI,WAAW,CAGzC;IAED,iBAAiB,IAAI,IAAI,CAGxB;IACK,UAAU,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAapD;IACK,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB/C;IACK,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAc9C;IAMD,wFAAwF;IACxF,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAQvG;IACD,SAAS,CAAC,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzE;IACD,sGAAsG;IACtG,SAAS,CAAC,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAEhE;IACD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAmBvB;IACD,UAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAG;IACpE,2EAA2E;IAC3E,UAAgB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAG;IAC/D,UAAgB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAG;IAC1C,UAAgB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAG;CAChD"}
|