@sidebandchat/client 0.0.0-stage → 0.2.0
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/COPYRIGHT +8 -0
- package/LICENSE +674 -0
- package/README.md +121 -2
- package/dist/activity/activity-sharing-controller.d.ts +131 -0
- package/dist/activity/activity-sharing-controller.d.ts.map +1 -0
- package/dist/activity/activity-sharing-controller.js +351 -0
- package/dist/activity/activity-sharing-controller.js.map +1 -0
- package/dist/activity/index.d.ts +2 -0
- package/dist/activity/index.d.ts.map +1 -0
- package/dist/activity/index.js +2 -0
- package/dist/activity/index.js.map +1 -0
- package/dist/attachments/attachment-client.d.ts +36 -0
- package/dist/attachments/attachment-client.d.ts.map +1 -0
- package/dist/attachments/attachment-client.js +98 -0
- package/dist/attachments/attachment-client.js.map +1 -0
- package/dist/attachments/draft-attachment.d.ts +17 -0
- package/dist/attachments/draft-attachment.d.ts.map +1 -0
- package/dist/attachments/draft-attachment.js +2 -0
- package/dist/attachments/draft-attachment.js.map +1 -0
- package/dist/auth/identity-client.d.ts +64 -0
- package/dist/auth/identity-client.d.ts.map +1 -0
- package/dist/auth/identity-client.js +65 -0
- package/dist/auth/identity-client.js.map +1 -0
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +2 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/badges/badge-verifier.d.ts +11 -0
- package/dist/badges/badge-verifier.d.ts.map +1 -0
- package/dist/badges/badge-verifier.js +128 -0
- package/dist/badges/badge-verifier.js.map +1 -0
- package/dist/calls/calls-client.d.ts +16 -0
- package/dist/calls/calls-client.d.ts.map +1 -0
- package/dist/calls/calls-client.js +55 -0
- package/dist/calls/calls-client.js.map +1 -0
- package/dist/calls/index.d.ts +3 -0
- package/dist/calls/index.d.ts.map +1 -0
- package/dist/calls/index.js +2 -0
- package/dist/calls/index.js.map +1 -0
- package/dist/calls/media-controls.d.ts +38 -0
- package/dist/calls/media-controls.d.ts.map +1 -0
- package/dist/calls/media-controls.js +134 -0
- package/dist/calls/media-controls.js.map +1 -0
- package/dist/calls/media-presentation-controller.d.ts +39 -0
- package/dist/calls/media-presentation-controller.d.ts.map +1 -0
- package/dist/calls/media-presentation-controller.js +106 -0
- package/dist/calls/media-presentation-controller.js.map +1 -0
- package/dist/calls/media-types.d.ts +37 -0
- package/dist/calls/media-types.d.ts.map +1 -0
- package/dist/calls/media-types.js +2 -0
- package/dist/calls/media-types.js.map +1 -0
- package/dist/calls/media.d.ts +39 -0
- package/dist/calls/media.d.ts.map +1 -0
- package/dist/calls/media.js +501 -0
- package/dist/calls/media.js.map +1 -0
- package/dist/client/ephemeral-state.d.ts +52 -0
- package/dist/client/ephemeral-state.d.ts.map +1 -0
- package/dist/client/ephemeral-state.js +371 -0
- package/dist/client/ephemeral-state.js.map +1 -0
- package/dist/client/index.d.ts +7 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +4 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/live-event-controller.d.ts +14 -0
- package/dist/client/live-event-controller.d.ts.map +1 -0
- package/dist/client/live-event-controller.js +28 -0
- package/dist/client/live-event-controller.js.map +1 -0
- package/dist/client/platform-adapters.d.ts +122 -0
- package/dist/client/platform-adapters.d.ts.map +1 -0
- package/dist/client/platform-adapters.js +2 -0
- package/dist/client/platform-adapters.js.map +1 -0
- package/dist/client/session-runtime.d.ts +115 -0
- package/dist/client/session-runtime.d.ts.map +1 -0
- package/dist/client/session-runtime.js +607 -0
- package/dist/client/session-runtime.js.map +1 -0
- package/dist/client/sideband-client.d.ts +141 -0
- package/dist/client/sideband-client.d.ts.map +1 -0
- package/dist/client/sideband-client.js +575 -0
- package/dist/client/sideband-client.js.map +1 -0
- package/dist/client/snapshot-client.d.ts +9 -0
- package/dist/client/snapshot-client.d.ts.map +1 -0
- package/dist/client/snapshot-client.js +18 -0
- package/dist/client/snapshot-client.js.map +1 -0
- package/dist/client/state.d.ts +112 -0
- package/dist/client/state.d.ts.map +1 -0
- package/dist/client/state.js +992 -0
- package/dist/client/state.js.map +1 -0
- package/dist/communities/community-client.d.ts +40 -0
- package/dist/communities/community-client.d.ts.map +1 -0
- package/dist/communities/community-client.js +166 -0
- package/dist/communities/community-client.js.map +1 -0
- package/dist/conversations/index.d.ts +2 -0
- package/dist/conversations/index.d.ts.map +1 -0
- package/dist/conversations/index.js +2 -0
- package/dist/conversations/index.js.map +1 -0
- package/dist/conversations/mentions.d.ts +18 -0
- package/dist/conversations/mentions.d.ts.map +1 -0
- package/dist/conversations/mentions.js +108 -0
- package/dist/conversations/mentions.js.map +1 -0
- package/dist/conversations/messaging-client.d.ts +56 -0
- package/dist/conversations/messaging-client.d.ts.map +1 -0
- package/dist/conversations/messaging-client.js +333 -0
- package/dist/conversations/messaging-client.js.map +1 -0
- package/dist/conversations/replies-controller.d.ts +50 -0
- package/dist/conversations/replies-controller.d.ts.map +1 -0
- package/dist/conversations/replies-controller.js +206 -0
- package/dist/conversations/replies-controller.js.map +1 -0
- package/dist/devices/device-client.d.ts +11 -0
- package/dist/devices/device-client.d.ts.map +1 -0
- package/dist/devices/device-client.js +27 -0
- package/dist/devices/device-client.js.map +1 -0
- package/dist/domain.d.ts +528 -0
- package/dist/domain.d.ts.map +1 -0
- package/dist/domain.js +13 -0
- package/dist/domain.js.map +1 -0
- package/dist/entity-id.d.ts +32 -0
- package/dist/entity-id.d.ts.map +1 -0
- package/dist/entity-id.js +17 -0
- package/dist/entity-id.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/instance/index.d.ts +5 -0
- package/dist/instance/index.d.ts.map +1 -0
- package/dist/instance/index.js +3 -0
- package/dist/instance/index.js.map +1 -0
- package/dist/instance/instance-policy.d.ts +13 -0
- package/dist/instance/instance-policy.d.ts.map +1 -0
- package/dist/instance/instance-policy.js +2 -0
- package/dist/instance/instance-policy.js.map +1 -0
- package/dist/instance-access.d.ts +66 -0
- package/dist/instance-access.d.ts.map +1 -0
- package/dist/instance-access.js +84 -0
- package/dist/instance-access.js.map +1 -0
- package/dist/instance-capabilities.d.ts +12 -0
- package/dist/instance-capabilities.d.ts.map +1 -0
- package/dist/instance-capabilities.js +2 -0
- package/dist/instance-capabilities.js.map +1 -0
- package/dist/instance-endpoint.d.ts +32 -0
- package/dist/instance-endpoint.d.ts.map +1 -0
- package/dist/instance-endpoint.js +147 -0
- package/dist/instance-endpoint.js.map +1 -0
- package/dist/model/index.d.ts +3 -0
- package/dist/model/index.d.ts.map +1 -0
- package/dist/model/index.js +3 -0
- package/dist/model/index.js.map +1 -0
- package/dist/model/selectors.d.ts +22 -0
- package/dist/model/selectors.d.ts.map +1 -0
- package/dist/model/selectors.js +73 -0
- package/dist/model/selectors.js.map +1 -0
- package/dist/private-conversation/file-hash.d.ts +2 -0
- package/dist/private-conversation/file-hash.d.ts.map +1 -0
- package/dist/private-conversation/file-hash.js +13 -0
- package/dist/private-conversation/file-hash.js.map +1 -0
- package/dist/private-conversation/private-conversation-crypto.d.ts +48 -0
- package/dist/private-conversation/private-conversation-crypto.d.ts.map +1 -0
- package/dist/private-conversation/private-conversation-crypto.js +169 -0
- package/dist/private-conversation/private-conversation-crypto.js.map +1 -0
- package/dist/private-conversation/private-conversations-client.d.ts +23 -0
- package/dist/private-conversation/private-conversations-client.d.ts.map +1 -0
- package/dist/private-conversation/private-conversations-client.js +77 -0
- package/dist/private-conversation/private-conversations-client.js.map +1 -0
- package/dist/private-conversation/private-transfer-limits.d.ts +9 -0
- package/dist/private-conversation/private-transfer-limits.d.ts.map +1 -0
- package/dist/private-conversation/private-transfer-limits.js +9 -0
- package/dist/private-conversation/private-transfer-limits.js.map +1 -0
- package/dist/private-conversation/private-transfer-protocol.d.ts +53 -0
- package/dist/private-conversation/private-transfer-protocol.d.ts.map +1 -0
- package/dist/private-conversation/private-transfer-protocol.js +184 -0
- package/dist/private-conversation/private-transfer-protocol.js.map +1 -0
- package/dist/private-conversation/private-transfer-transport.d.ts +22 -0
- package/dist/private-conversation/private-transfer-transport.d.ts.map +1 -0
- package/dist/private-conversation/private-transfer-transport.js +94 -0
- package/dist/private-conversation/private-transfer-transport.js.map +1 -0
- package/dist/realtime/realtime-client.d.ts +31 -0
- package/dist/realtime/realtime-client.d.ts.map +1 -0
- package/dist/realtime/realtime-client.js +103 -0
- package/dist/realtime/realtime-client.js.map +1 -0
- package/dist/sbp/codec.d.ts +33 -0
- package/dist/sbp/codec.d.ts.map +1 -0
- package/dist/sbp/codec.js +93 -0
- package/dist/sbp/codec.js.map +1 -0
- package/dist/sbp/command-transport.d.ts +9 -0
- package/dist/sbp/command-transport.d.ts.map +1 -0
- package/dist/sbp/command-transport.js +2 -0
- package/dist/sbp/command-transport.js.map +1 -0
- package/dist/sbp/frame.d.ts +34 -0
- package/dist/sbp/frame.d.ts.map +1 -0
- package/dist/sbp/frame.js +95 -0
- package/dist/sbp/frame.js.map +1 -0
- package/dist/sbp/records.d.ts +32 -0
- package/dist/sbp/records.d.ts.map +1 -0
- package/dist/sbp/records.js +527 -0
- package/dist/sbp/records.js.map +1 -0
- package/dist/sbp/session.d.ts +110 -0
- package/dist/sbp/session.d.ts.map +1 -0
- package/dist/sbp/session.js +349 -0
- package/dist/sbp/session.js.map +1 -0
- package/dist/sbp/value.d.ts +13 -0
- package/dist/sbp/value.d.ts.map +1 -0
- package/dist/sbp/value.js +58 -0
- package/dist/sbp/value.js.map +1 -0
- package/dist/social/social-client.d.ts +38 -0
- package/dist/social/social-client.d.ts.map +1 -0
- package/dist/social/social-client.js +110 -0
- package/dist/social/social-client.js.map +1 -0
- package/dist/transports/media-server-identity.d.ts +8 -0
- package/dist/transports/media-server-identity.d.ts.map +1 -0
- package/dist/transports/media-server-identity.js +22 -0
- package/dist/transports/media-server-identity.js.map +1 -0
- package/dist/workspace/index.d.ts +2 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +2 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace/workspace-controller.d.ts +39 -0
- package/dist/workspace/workspace-controller.d.ts.map +1 -0
- package/dist/workspace/workspace-controller.js +188 -0
- package/dist/workspace/workspace-controller.js.map +1 -0
- package/dist/workspace/workspace-selectors.d.ts +49 -0
- package/dist/workspace/workspace-selectors.d.ts.map +1 -0
- package/dist/workspace/workspace-selectors.js +110 -0
- package/dist/workspace/workspace-selectors.js.map +1 -0
- package/package.json +88 -4
package/dist/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from "./model/index.js";
|
|
2
|
+
export * from "./instance/index.js";
|
|
3
|
+
export * from "./client/index.js";
|
|
4
|
+
export * from "./auth/index.js";
|
|
5
|
+
export * from "./workspace/index.js";
|
|
6
|
+
export { PRIVATE_TRANSFER_LIMITS } from "./private-conversation/private-transfer-limits.js";
|
|
7
|
+
export * from "./conversations/index.js";
|
|
8
|
+
export * from "./calls/index.js";
|
|
9
|
+
export * from "./activity/index.js";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AAErC,OAAO,EAAE,uBAAuB,EAAE,MAAM,mDAAmD,CAAC;AAC5F,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { instanceEndpoint, discoverInstanceEndpoint, loadCommunityInvitationPreview, parseInstanceDocument, parseCommunityInvitationPreview, type CommunityInvitationPreview, type InstanceAuthentication, type InstanceEndpoint, type InstanceEndpointInput, } from "../instance-endpoint.js";
|
|
2
|
+
export type { AttachmentCapabilities, InstanceCapabilities, } from "../instance-capabilities.js";
|
|
3
|
+
export type { InstancePolicy } from "./instance-policy.js";
|
|
4
|
+
export { InstanceApiError, InstanceHttpClient, type InstanceAccess, type SidebandClientIdentity, type AuthenticatedInstanceAccess, type InstanceAccessProvider, type InstanceRequestOptions, } from "../instance-access.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/instance/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,8BAA8B,EAC9B,qBAAqB,EACrB,+BAA+B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EAChC,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,GAC5B,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { instanceEndpoint, discoverInstanceEndpoint, loadCommunityInvitationPreview, parseInstanceDocument, parseCommunityInvitationPreview, } from "../instance-endpoint.js";
|
|
2
|
+
export { InstanceApiError, InstanceHttpClient, } from "../instance-access.js";
|
|
3
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/instance/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,8BAA8B,EAC9B,qBAAqB,EACrB,+BAA+B,GAKhC,MAAM,yBAAyB,CAAC;AAQjC,OAAO,EACL,gBAAgB,EAChB,kBAAkB,GAMnB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type InstancePolicy = {
|
|
2
|
+
attachmentsEnabled: boolean;
|
|
3
|
+
maximumAttachmentBytes: number;
|
|
4
|
+
maximumAttachmentsPerMessage: number;
|
|
5
|
+
maximumAttachmentBytesPerMessage: number;
|
|
6
|
+
privateConversationsEnabled: boolean;
|
|
7
|
+
privateFileTransfersEnabled: boolean;
|
|
8
|
+
gifSearchEnabled: boolean;
|
|
9
|
+
callEmptyGraceMs: number;
|
|
10
|
+
privateInviteTimeoutMs: number;
|
|
11
|
+
privateReconnectGraceMs: number;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=instance-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-policy.d.ts","sourceRoot":"","sources":["../../src/instance/instance-policy.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAC3B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,4BAA4B,EAAE,MAAM,CAAC;IACrC,gCAAgC,EAAE,MAAM,CAAC;IACzC,2BAA2B,EAAE,OAAO,CAAC;IACrC,2BAA2B,EAAE,OAAO,CAAC;IACrC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,uBAAuB,EAAE,MAAM,CAAC;CACjC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-policy.js","sourceRoot":"","sources":["../../src/instance/instance-policy.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { InstanceEndpoint } from "./instance-endpoint.js";
|
|
2
|
+
export type InstanceAccess = {
|
|
3
|
+
endpoint: InstanceEndpoint;
|
|
4
|
+
authorization?: string;
|
|
5
|
+
};
|
|
6
|
+
export type SidebandClientIdentity = {
|
|
7
|
+
name: string;
|
|
8
|
+
version: string;
|
|
9
|
+
};
|
|
10
|
+
export type AuthenticatedInstanceAccess = InstanceAccess & {
|
|
11
|
+
authorization: string;
|
|
12
|
+
clientIdentity?: SidebandClientIdentity;
|
|
13
|
+
};
|
|
14
|
+
export type InstanceAccessProvider = () => InstanceAccess | undefined;
|
|
15
|
+
export declare function requireInstanceAccess(provider: InstanceAccessProvider): InstanceAccess & {
|
|
16
|
+
authorization: string;
|
|
17
|
+
};
|
|
18
|
+
export declare function requireInstanceEndpoint(provider: InstanceAccessProvider): {
|
|
19
|
+
baseUrl: string;
|
|
20
|
+
domain: string;
|
|
21
|
+
name?: string;
|
|
22
|
+
authentication?: import("./instance-endpoint.js").InstanceAuthentication;
|
|
23
|
+
registrationEnabled?: boolean;
|
|
24
|
+
capabilities?: import("./instance-capabilities.js").InstanceCapabilities;
|
|
25
|
+
sbp?: {
|
|
26
|
+
websocketPath: string;
|
|
27
|
+
subprotocols: string[];
|
|
28
|
+
authenticationMechanisms: string[];
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
export declare class InstanceApiError extends Error {
|
|
32
|
+
readonly status: number;
|
|
33
|
+
constructor(message: string, status: number);
|
|
34
|
+
}
|
|
35
|
+
export type InstanceRequestOptions = {
|
|
36
|
+
authenticated?: boolean;
|
|
37
|
+
};
|
|
38
|
+
export declare class InstanceHttpClient {
|
|
39
|
+
private readonly getAccess;
|
|
40
|
+
private readonly clientIdentity?;
|
|
41
|
+
private readonly request;
|
|
42
|
+
constructor(getAccess: InstanceAccessProvider, clientIdentity?: SidebandClientIdentity | undefined, request?: typeof fetch);
|
|
43
|
+
get available(): boolean;
|
|
44
|
+
endpoint(): {
|
|
45
|
+
baseUrl: string;
|
|
46
|
+
domain: string;
|
|
47
|
+
name?: string;
|
|
48
|
+
authentication?: import("./instance-endpoint.js").InstanceAuthentication;
|
|
49
|
+
registrationEnabled?: boolean;
|
|
50
|
+
capabilities?: import("./instance-capabilities.js").InstanceCapabilities;
|
|
51
|
+
sbp?: {
|
|
52
|
+
websocketPath: string;
|
|
53
|
+
subprotocols: string[];
|
|
54
|
+
authenticationMechanisms: string[];
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
access(): {
|
|
58
|
+
clientIdentity: SidebandClientIdentity | undefined;
|
|
59
|
+
endpoint: InstanceEndpoint;
|
|
60
|
+
authorization: string;
|
|
61
|
+
};
|
|
62
|
+
fetch(path: string, init?: RequestInit, options?: InstanceRequestOptions): Promise<Response>;
|
|
63
|
+
}
|
|
64
|
+
export declare function addClientIdentityHeaders(headers: Headers, identity?: SidebandClientIdentity): void;
|
|
65
|
+
export declare function instanceApiError(response: Response, fallback: string): Promise<InstanceApiError>;
|
|
66
|
+
//# sourceMappingURL=instance-access.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-access.d.ts","sourceRoot":"","sources":["../src/instance-access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,cAAc,GAAG;IACzD,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,MAAM,cAAc,GAAG,SAAS,CAAC;AAEtE,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,sBAAsB,GAC/B,cAAc,GAAG;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,CAW5C;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,sBAAsB;;;;;;;;;;;;EAOvE;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IAGvC,QAAQ,CAAC,MAAM,EAAE,MAAM;gBADvB,OAAO,EAAE,MAAM,EACN,MAAM,EAAE,MAAM;CAK1B;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAFP,SAAS,EAAE,sBAAsB,EACjC,cAAc,CAAC,EAAE,sBAAsB,YAAA,EACvC,OAAO,GAAE,OAAO,KACb;IAGtB,IAAI,SAAS,YAGZ;IAED,QAAQ;;;;;;;;;;;;;IAIR,MAAM;;kBAvEI,gBAAgB;uBACV,MAAM;;IA6EtB,KAAK,CACH,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,WAAgB,EACtB,OAAO,GAAE,sBAA2B;CAcvC;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,sBAAsB,QAKlC;AASD,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,6BAS1E"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
export function requireInstanceAccess(provider) {
|
|
2
|
+
const access = provider();
|
|
3
|
+
if (!access?.endpoint.baseUrl || !access.authorization)
|
|
4
|
+
throw new Error("No session credential is available. Sign in again.");
|
|
5
|
+
return {
|
|
6
|
+
endpoint: {
|
|
7
|
+
...access.endpoint,
|
|
8
|
+
baseUrl: access.endpoint.baseUrl.replace(/\/$/u, ""),
|
|
9
|
+
},
|
|
10
|
+
authorization: access.authorization,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export function requireInstanceEndpoint(provider) {
|
|
14
|
+
const endpoint = provider()?.endpoint;
|
|
15
|
+
if (!endpoint?.baseUrl)
|
|
16
|
+
throw new Error("The instance is unavailable");
|
|
17
|
+
return {
|
|
18
|
+
...endpoint,
|
|
19
|
+
baseUrl: endpoint.baseUrl.replace(/\/$/u, ""),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export class InstanceApiError extends Error {
|
|
23
|
+
status;
|
|
24
|
+
constructor(message, status) {
|
|
25
|
+
super(message);
|
|
26
|
+
this.status = status;
|
|
27
|
+
this.name = "InstanceApiError";
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export class InstanceHttpClient {
|
|
31
|
+
getAccess;
|
|
32
|
+
clientIdentity;
|
|
33
|
+
request;
|
|
34
|
+
constructor(getAccess, clientIdentity, request = (input, init) => fetch(input, init)) {
|
|
35
|
+
this.getAccess = getAccess;
|
|
36
|
+
this.clientIdentity = clientIdentity;
|
|
37
|
+
this.request = request;
|
|
38
|
+
}
|
|
39
|
+
get available() {
|
|
40
|
+
const access = this.getAccess();
|
|
41
|
+
return Boolean(access?.endpoint.baseUrl && access.authorization);
|
|
42
|
+
}
|
|
43
|
+
endpoint() {
|
|
44
|
+
return requireInstanceEndpoint(this.getAccess);
|
|
45
|
+
}
|
|
46
|
+
access() {
|
|
47
|
+
return {
|
|
48
|
+
...requireInstanceAccess(this.getAccess),
|
|
49
|
+
clientIdentity: this.clientIdentity,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
fetch(path, init = {}, options = {}) {
|
|
53
|
+
const authenticated = options.authenticated !== false;
|
|
54
|
+
const access = authenticated ? this.access() : this.getAccess();
|
|
55
|
+
const endpoint = access?.endpoint ?? this.endpoint();
|
|
56
|
+
const headers = new Headers(init.headers);
|
|
57
|
+
if (authenticated && access?.authorization)
|
|
58
|
+
headers.set("authorization", access.authorization);
|
|
59
|
+
addClientIdentityHeaders(headers, this.clientIdentity);
|
|
60
|
+
return this.request(new URL(path, endpoint.baseUrl).toString(), {
|
|
61
|
+
...init,
|
|
62
|
+
headers,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export function addClientIdentityHeaders(headers, identity) {
|
|
67
|
+
if (!identity)
|
|
68
|
+
return;
|
|
69
|
+
headers.set("x-sideband-client", headerValue(identity.name));
|
|
70
|
+
headers.set("x-sideband-client-version", headerValue(identity.version));
|
|
71
|
+
}
|
|
72
|
+
function headerValue(value) {
|
|
73
|
+
const normalized = value.trim();
|
|
74
|
+
if (!normalized || /[\r\n]/u.test(normalized))
|
|
75
|
+
throw new TypeError("Invalid Sideband client identity");
|
|
76
|
+
return normalized;
|
|
77
|
+
}
|
|
78
|
+
export async function instanceApiError(response, fallback) {
|
|
79
|
+
const payload = (await response.json().catch(() => undefined));
|
|
80
|
+
return new InstanceApiError(typeof payload?.error === "string"
|
|
81
|
+
? payload.error
|
|
82
|
+
: `${fallback} (${response.status})`, response.status);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=instance-access.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-access.js","sourceRoot":"","sources":["../src/instance-access.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type AttachmentCapabilities = {
|
|
2
|
+
maximumFileBytes: number;
|
|
3
|
+
maximumFilesPerMessage: number;
|
|
4
|
+
maximumMessageBytes: number;
|
|
5
|
+
};
|
|
6
|
+
export type InstanceCapabilities = {
|
|
7
|
+
attachments?: AttachmentCapabilities;
|
|
8
|
+
privateConversations: boolean;
|
|
9
|
+
privateFileTransfers: boolean;
|
|
10
|
+
gifs: boolean;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=instance-capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-capabilities.d.ts","sourceRoot":"","sources":["../src/instance-capabilities.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,CAAC,EAAE,sBAAsB,CAAC;IACrC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,IAAI,EAAE,OAAO,CAAC;CACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-capabilities.js","sourceRoot":"","sources":["../src/instance-capabilities.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { InstanceCapabilities } from "./instance-capabilities.js";
|
|
2
|
+
export type InstanceAuthentication = {
|
|
3
|
+
type: "oidc";
|
|
4
|
+
issuer: string;
|
|
5
|
+
resource: string;
|
|
6
|
+
};
|
|
7
|
+
export type InstanceEndpoint = {
|
|
8
|
+
domain: string;
|
|
9
|
+
baseUrl: string;
|
|
10
|
+
name?: string;
|
|
11
|
+
authentication?: InstanceAuthentication;
|
|
12
|
+
registrationEnabled?: boolean;
|
|
13
|
+
capabilities?: InstanceCapabilities;
|
|
14
|
+
sbp?: {
|
|
15
|
+
websocketPath: string;
|
|
16
|
+
subprotocols: string[];
|
|
17
|
+
authenticationMechanisms: string[];
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export type InstanceEndpointInput = {
|
|
21
|
+
domain: string;
|
|
22
|
+
} | string;
|
|
23
|
+
export type CommunityInvitationPreview = {
|
|
24
|
+
communityName: string;
|
|
25
|
+
instanceName: string;
|
|
26
|
+
};
|
|
27
|
+
export declare function instanceEndpoint(input: InstanceEndpointInput): InstanceEndpoint | undefined;
|
|
28
|
+
export declare function discoverInstanceEndpoint(input: InstanceEndpointInput, request?: typeof fetch): Promise<InstanceEndpoint>;
|
|
29
|
+
export declare function loadCommunityInvitationPreview(endpoint: InstanceEndpoint, inviteUrl: string, request?: typeof fetch): Promise<CommunityInvitationPreview>;
|
|
30
|
+
export declare function parseCommunityInvitationPreview(payload: unknown): CommunityInvitationPreview;
|
|
31
|
+
export declare function parseInstanceDocument(payload: unknown): Pick<InstanceEndpoint, "name" | "authentication" | "registrationEnabled" | "sbp">;
|
|
32
|
+
//# sourceMappingURL=instance-endpoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-endpoint.d.ts","sourceRoot":"","sources":["../src/instance-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,GAAG,CAAC,EAAE;QACJ,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,wBAAwB,EAAE,MAAM,EAAE,CAAC;KACpC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC;AAEhE,MAAM,MAAM,0BAA0B,GAAG;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,qBAAqB,GAC3B,gBAAgB,GAAG,SAAS,CAkB9B;AAED,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,qBAAqB,EAC5B,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CAS3B;AAED,wBAAsB,8BAA8B,CAClD,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC,0BAA0B,CAAC,CAcrC;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,OAAO,GACf,0BAA0B,CAe5B;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,GACf,IAAI,CACL,gBAAgB,EAChB,MAAM,GAAG,gBAAgB,GAAG,qBAAqB,GAAG,KAAK,CAC1D,CAwCA"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
export function instanceEndpoint(input) {
|
|
2
|
+
let domain;
|
|
3
|
+
try {
|
|
4
|
+
domain = normalizeDomain(typeof input === "string" ? input : input.domain);
|
|
5
|
+
}
|
|
6
|
+
catch {
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
if (domain === "localhost")
|
|
10
|
+
return {
|
|
11
|
+
domain,
|
|
12
|
+
baseUrl: "http://127.0.0.1:4000",
|
|
13
|
+
};
|
|
14
|
+
return {
|
|
15
|
+
domain,
|
|
16
|
+
baseUrl: `https://${domain}`,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export async function discoverInstanceEndpoint(input, request = fetch) {
|
|
20
|
+
const endpoint = instanceEndpoint(input);
|
|
21
|
+
if (!endpoint)
|
|
22
|
+
throw new Error("Enter a valid Sideband instance.");
|
|
23
|
+
const response = await request(`${endpoint.baseUrl}/.well-known/sideband`, {
|
|
24
|
+
headers: { accept: "application/json" },
|
|
25
|
+
});
|
|
26
|
+
const payload = await response.json().catch(() => undefined);
|
|
27
|
+
if (!response.ok)
|
|
28
|
+
throw new Error("Could not connect to that instance.");
|
|
29
|
+
return { ...endpoint, ...parseInstanceDocument(payload) };
|
|
30
|
+
}
|
|
31
|
+
export async function loadCommunityInvitationPreview(endpoint, inviteUrl, request = fetch) {
|
|
32
|
+
const token = invitationToken(endpoint, inviteUrl);
|
|
33
|
+
const response = await request(`${endpoint.baseUrl}/api/invites/${encodeURIComponent(token)}`, {
|
|
34
|
+
headers: { accept: "application/json" },
|
|
35
|
+
cache: "no-store",
|
|
36
|
+
credentials: "omit",
|
|
37
|
+
referrerPolicy: "no-referrer",
|
|
38
|
+
});
|
|
39
|
+
const payload = await response.json().catch(() => undefined);
|
|
40
|
+
if (!response.ok)
|
|
41
|
+
throw new Error("This invitation is unavailable.");
|
|
42
|
+
return parseCommunityInvitationPreview(payload);
|
|
43
|
+
}
|
|
44
|
+
export function parseCommunityInvitationPreview(payload) {
|
|
45
|
+
const value = payload;
|
|
46
|
+
if (typeof value?.community?.name !== "string" ||
|
|
47
|
+
!value.community.name.trim() ||
|
|
48
|
+
typeof value.instance?.name !== "string" ||
|
|
49
|
+
!value.instance.name.trim())
|
|
50
|
+
throw new Error("The instance returned an invalid invitation.");
|
|
51
|
+
return {
|
|
52
|
+
communityName: value.community.name.trim(),
|
|
53
|
+
instanceName: value.instance.name.trim(),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export function parseInstanceDocument(payload) {
|
|
57
|
+
const document = payload;
|
|
58
|
+
const authentication = document?.authentication;
|
|
59
|
+
const registration = document?.registration;
|
|
60
|
+
const sbp = document?.sbp;
|
|
61
|
+
if (document?.version !== 1 ||
|
|
62
|
+
authentication?.type !== "oidc" ||
|
|
63
|
+
typeof authentication.issuer !== "string" ||
|
|
64
|
+
!validUrl(authentication.issuer) ||
|
|
65
|
+
typeof authentication.resource !== "string" ||
|
|
66
|
+
!validUrl(authentication.resource) ||
|
|
67
|
+
typeof registration?.enabled !== "boolean" ||
|
|
68
|
+
typeof sbp?.websocket_path !== "string" ||
|
|
69
|
+
!sbp.websocket_path.startsWith("/") ||
|
|
70
|
+
!stringArray(sbp.subprotocols)?.includes("sideband.cbor.v1") ||
|
|
71
|
+
!stringArray(sbp.authentication_mechanisms)?.includes("opaque-credential") ||
|
|
72
|
+
(document.name !== undefined && typeof document.name !== "string"))
|
|
73
|
+
throw new Error("That server is not a compatible Sideband instance.");
|
|
74
|
+
return {
|
|
75
|
+
...(typeof document.name === "string" && document.name.trim()
|
|
76
|
+
? { name: document.name.trim() }
|
|
77
|
+
: {}),
|
|
78
|
+
authentication: {
|
|
79
|
+
type: "oidc",
|
|
80
|
+
issuer: authentication.issuer,
|
|
81
|
+
resource: authentication.resource,
|
|
82
|
+
},
|
|
83
|
+
registrationEnabled: registration.enabled,
|
|
84
|
+
sbp: {
|
|
85
|
+
websocketPath: sbp.websocket_path,
|
|
86
|
+
subprotocols: stringArray(sbp.subprotocols),
|
|
87
|
+
authenticationMechanisms: stringArray(sbp.authentication_mechanisms),
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function stringArray(value) {
|
|
92
|
+
return Array.isArray(value) &&
|
|
93
|
+
value.every((entry) => typeof entry === "string")
|
|
94
|
+
? value
|
|
95
|
+
: undefined;
|
|
96
|
+
}
|
|
97
|
+
function normalizeDomain(value) {
|
|
98
|
+
const domain = value.trim().toLowerCase();
|
|
99
|
+
if (!domain ||
|
|
100
|
+
domain.length > 253 ||
|
|
101
|
+
!domain
|
|
102
|
+
.split(".")
|
|
103
|
+
.every((label) => label.length > 0 &&
|
|
104
|
+
label.length <= 63 &&
|
|
105
|
+
/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/u.test(label)))
|
|
106
|
+
throw new TypeError("Invalid instance domain");
|
|
107
|
+
return domain;
|
|
108
|
+
}
|
|
109
|
+
function validUrl(value) {
|
|
110
|
+
try {
|
|
111
|
+
const url = new URL(value);
|
|
112
|
+
return url.protocol === "https:" || url.protocol === "http:";
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function invitationToken(endpoint, value) {
|
|
119
|
+
let invite;
|
|
120
|
+
let instance;
|
|
121
|
+
try {
|
|
122
|
+
invite = new URL(value);
|
|
123
|
+
instance = new URL(endpoint.baseUrl);
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
throw new TypeError("Invalid community invitation");
|
|
127
|
+
}
|
|
128
|
+
if (!sameInstanceOrigin(invite, instance))
|
|
129
|
+
throw new Error("This invitation belongs to another Sideband instance.");
|
|
130
|
+
const match = /^\/invite\/([^/]+)\/?$/u.exec(invite.pathname);
|
|
131
|
+
if (!match)
|
|
132
|
+
throw new TypeError("Invalid community invitation");
|
|
133
|
+
const token = decodeURIComponent(match[1]);
|
|
134
|
+
if (!token || token.length > 512)
|
|
135
|
+
throw new TypeError("Invalid community invitation");
|
|
136
|
+
return token;
|
|
137
|
+
}
|
|
138
|
+
function sameInstanceOrigin(left, right) {
|
|
139
|
+
if (left.origin === right.origin)
|
|
140
|
+
return true;
|
|
141
|
+
const loopback = new Set(["localhost", "127.0.0.1", "[::1]"]);
|
|
142
|
+
return (loopback.has(left.hostname) &&
|
|
143
|
+
loopback.has(right.hostname) &&
|
|
144
|
+
left.port === right.port &&
|
|
145
|
+
left.protocol === right.protocol);
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=instance-endpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-endpoint.js","sourceRoot":"","sources":["../src/instance-endpoint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { PROFILE_LIMITS, profileCharacterCount, limitProfileCharacters, type ChatState, type PresenceMode, type ContactPresence, type PresenceView, type ActivityView, type UserBadge, type HistoryDirection, type Mention, type AttachmentMetadata, type AttachmentUploadTarget, type GifResult, type ReactionSummary, type ReactionDetailsPage, type ChatMessage, type HistoryPage, type ContextHistoryPage, type ConversationSummary, type CommunityChannel, type Community, type CommunityParticipant, type CommunityMember, type CommunityMemberPage, type CommunityRole, type CommunityPermission, type CommunityPermissionOverride, type ResolvedCommunityChannel, type ResolvedCommunity, type ResolvedCommunityParticipant, type RosterContact, type UserProfile, type UserSummary, type Block, type InboxEntry, type NotificationSettings, type RealtimeSettings, type ClientDevice, type AccountSnapshot, type ConversationSnapshot, type UserTune, type IncomingCall, type CallTarget, type CallParticipant, type CallSession, type MediaAdmission, type SessionEvent, type PrivateConversationSignal, type PrivateConversationSession, type PrivateConversationMessage, type PrivateConversationAttachment, type PrivateConversationView, type PrivateConversationRealtimeEvent, type PrivateTransfer, type PrivateTransferAdmission, type MentionNotification, } from "../domain.js";
|
|
2
|
+
export { entityId, orderedId, idKey, type EntityId, type OrderedId, type UserId, type DeviceId, type ConversationId, type CommunityId, type ChannelId, type AttachmentId, type RoleId, type FriendshipId, type CallId, type PrivateConversationId, type PrivateMessageId, type PrivateTransferId, type InvitationId, type BlockId, type RequestId, type MessageId, type EventId, type NotificationId, } from "../entity-id.js";
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,OAAO,EACZ,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,EACtB,KAAK,4BAA4B,EACjC,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,KAAK,EACV,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,6BAA6B,EAClC,KAAK,uBAAuB,EAC5B,KAAK,gCAAgC,EACrC,KAAK,eAAe,EACpB,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,GACzB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,QAAQ,EACR,SAAS,EACT,KAAK,EACL,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,MAAM,EACX,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,sBAAsB,GAuDvB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,QAAQ,EACR,SAAS,EACT,KAAK,GAqBN,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ActivityView, CommunityMember, ContactPresence, ConversationSummary, RosterContact, UserSummary } from "../domain.js";
|
|
2
|
+
import type { CommunityId, ConversationId, UserId } from "../entity-id.js";
|
|
3
|
+
import type { EphemeralState } from "../client/ephemeral-state.js";
|
|
4
|
+
import type { AccountState } from "../client/state.js";
|
|
5
|
+
export type FriendshipLists = {
|
|
6
|
+
accepted: RosterContact[];
|
|
7
|
+
received: RosterContact[];
|
|
8
|
+
sent: RosterContact[];
|
|
9
|
+
};
|
|
10
|
+
export declare function friendshipLists(state: AccountState): FriendshipLists;
|
|
11
|
+
export declare function userName(state: AccountState, userId: UserId): string;
|
|
12
|
+
export declare function conversationName(state: AccountState, conversation: ConversationSummary | ConversationId): string;
|
|
13
|
+
export declare function conversationProfiles(state: AccountState, conversationId: ConversationId): UserSummary[];
|
|
14
|
+
export declare function communityMembers(state: AccountState, communityId: CommunityId): Array<{
|
|
15
|
+
membership: CommunityMember;
|
|
16
|
+
profile?: UserSummary;
|
|
17
|
+
}>;
|
|
18
|
+
export declare function unreadCounts(state: AccountState): Map<ConversationId, number>;
|
|
19
|
+
export declare function unreadInboxEntries(state: AccountState): import("../domain.js").InboxEntry[];
|
|
20
|
+
export declare function publicPresence(ephemeral: EphemeralState, userId: UserId): ContactPresence;
|
|
21
|
+
export declare function userActivities(ephemeral: EphemeralState, userId: UserId): ActivityView[];
|
|
22
|
+
//# sourceMappingURL=selectors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectors.d.ts","sourceRoot":"","sources":["../../src/model/selectors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,WAAW,EACZ,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,IAAI,EAAE,aAAa,EAAE,CAAC;CACvB,CAAC;AAEF,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,eAAe,CAgBpE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,UAG3D;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,YAAY,EAAE,mBAAmB,GAAG,cAAc,UAenD;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,YAAY,EACnB,cAAc,EAAE,cAAc,GAC7B,WAAW,EAAE,CASf;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,WAAW,GACvB,KAAK,CAAC;IAAE,UAAU,EAAE,eAAe,CAAC;IAAC,OAAO,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC,CAO/D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,+BAU/C;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,uCAYrD;AAED,wBAAgB,cAAc,CAC5B,SAAS,EAAE,cAAc,EACzB,MAAM,EAAE,MAAM,GACb,eAAe,CAEjB;AAED,wBAAgB,cAAc,CAC5B,SAAS,EAAE,cAAc,EACzB,MAAM,EAAE,MAAM,GACb,YAAY,EAAE,CAMhB"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export function friendshipLists(state) {
|
|
2
|
+
const ownUserId = state.ownUserId;
|
|
3
|
+
const result = { accepted: [], received: [], sent: [] };
|
|
4
|
+
for (const friendship of state.friendships.values()) {
|
|
5
|
+
if (friendship.state === "accepted")
|
|
6
|
+
result.accepted.push(friendship);
|
|
7
|
+
else if (friendship.state === "pending")
|
|
8
|
+
result[friendship.requesterId === ownUserId ? "sent" : "received"].push(friendship);
|
|
9
|
+
}
|
|
10
|
+
const compare = (left, right) => userName(state, left.userId).localeCompare(userName(state, right.userId));
|
|
11
|
+
result.accepted.sort(compare);
|
|
12
|
+
result.received.sort(compare);
|
|
13
|
+
result.sent.sort(compare);
|
|
14
|
+
return result;
|
|
15
|
+
}
|
|
16
|
+
export function userName(state, userId) {
|
|
17
|
+
const profile = state.users.get(userId);
|
|
18
|
+
return profile?.displayName.trim() || profile?.username || "Unknown user";
|
|
19
|
+
}
|
|
20
|
+
export function conversationName(state, conversation) {
|
|
21
|
+
const record = typeof conversation === "string"
|
|
22
|
+
? state.conversations.get(conversation)
|
|
23
|
+
: conversation;
|
|
24
|
+
if (!record)
|
|
25
|
+
return "Unknown conversation";
|
|
26
|
+
if (record.name?.trim())
|
|
27
|
+
return record.name.trim();
|
|
28
|
+
const others = record.participantIds.filter((userId) => userId !== state.ownUserId);
|
|
29
|
+
const names = (others.length ? others : record.participantIds).map((userId) => userName(state, userId));
|
|
30
|
+
return names.join(", ") || "Conversation";
|
|
31
|
+
}
|
|
32
|
+
export function conversationProfiles(state, conversationId) {
|
|
33
|
+
return (state.conversations
|
|
34
|
+
.get(conversationId)
|
|
35
|
+
?.participantIds.flatMap((userId) => {
|
|
36
|
+
const profile = state.users.get(userId);
|
|
37
|
+
return profile ? [profile] : [];
|
|
38
|
+
}) ?? []);
|
|
39
|
+
}
|
|
40
|
+
export function communityMembers(state, communityId) {
|
|
41
|
+
return (state.communities.get(communityId)?.members.map((membership) => ({
|
|
42
|
+
membership,
|
|
43
|
+
profile: state.users.get(membership.userId),
|
|
44
|
+
})) ?? []);
|
|
45
|
+
}
|
|
46
|
+
export function unreadCounts(state) {
|
|
47
|
+
const counts = new Map();
|
|
48
|
+
for (const entry of unreadInboxEntries(state)) {
|
|
49
|
+
if (entry.kind !== "unread")
|
|
50
|
+
continue;
|
|
51
|
+
counts.set(entry.conversationId, (counts.get(entry.conversationId) ?? 0) + (entry.unreadCount ?? 1));
|
|
52
|
+
}
|
|
53
|
+
return counts;
|
|
54
|
+
}
|
|
55
|
+
export function unreadInboxEntries(state) {
|
|
56
|
+
return [...state.inbox.values()].filter((entry) => {
|
|
57
|
+
if (entry.read)
|
|
58
|
+
return false;
|
|
59
|
+
const readThrough = state.conversations.get(entry.conversationId)?.readThroughMessageId;
|
|
60
|
+
return (entry.messageId === undefined ||
|
|
61
|
+
readThrough === undefined ||
|
|
62
|
+
entry.messageId > readThrough);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
export function publicPresence(ephemeral, userId) {
|
|
66
|
+
return ephemeral.presence.get(userId)?.availability ?? "offline";
|
|
67
|
+
}
|
|
68
|
+
export function userActivities(ephemeral, userId) {
|
|
69
|
+
return [...ephemeral.activities.values()]
|
|
70
|
+
.filter((view) => view.userId === userId)
|
|
71
|
+
.sort((left, right) => right.activity.updatedAt.localeCompare(left.activity.updatedAt));
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=selectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectors.js","sourceRoot":"","sources":["../../src/model/selectors.ts"],"names":[],"mappings":"AAkBA,MAAM,UAAU,eAAe,CAAC,KAAmB;IACjD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,MAAM,MAAM,GAAoB,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACzE,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;QACpD,IAAI,UAAU,CAAC,KAAK,KAAK,UAAU;YAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aACjE,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS;YACrC,MAAM,CAAC,UAAU,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CACrE,UAAU,CACX,CAAC;IACN,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,IAAmB,EAAE,KAAoB,EAAE,EAAE,CAC5D,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5E,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAmB,EAAE,MAAc;IAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,OAAO,EAAE,QAAQ,IAAI,cAAc,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,KAAmB,EACnB,YAAkD;IAElD,MAAM,MAAM,GACV,OAAO,YAAY,KAAK,QAAQ;QAC9B,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC;QACvC,CAAC,CAAC,YAAY,CAAC;IACnB,IAAI,CAAC,MAAM;QAAE,OAAO,sBAAsB,CAAC;IAC3C,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CACzC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,KAAK,CAAC,SAAS,CACvC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAC5E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CACxB,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,KAAmB,EACnB,cAA8B;IAE9B,OAAO,CACL,KAAK,CAAC,aAAa;SAChB,GAAG,CAAC,cAAc,CAAC;QACpB,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAClC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClC,CAAC,CAAC,IAAI,EAAE,CACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,KAAmB,EACnB,WAAwB;IAExB,OAAO,CACL,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC/D,UAAU;QACV,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;KAC5C,CAAC,CAAC,IAAI,EAAE,CACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAmB;IAC9C,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0B,CAAC;IACjD,KAAK,MAAM,KAAK,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QACtC,MAAM,CAAC,GAAG,CACR,KAAK,CAAC,cAAc,EACpB,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,CACnE,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAmB;IACpD,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAChD,IAAI,KAAK,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAC7B,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CACzC,KAAK,CAAC,cAAc,CACrB,EAAE,oBAAoB,CAAC;QACxB,OAAO,CACL,KAAK,CAAC,SAAS,KAAK,SAAS;YAC7B,WAAW,KAAK,SAAS;YACzB,KAAK,CAAC,SAAS,GAAG,WAAW,CAC9B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,SAAyB,EACzB,MAAc;IAEd,OAAO,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,YAAY,IAAI,SAAS,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,SAAyB,EACzB,MAAc;IAEd,OAAO,CAAC,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;SACtC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;SACxC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACpB,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAChE,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-hash.d.ts","sourceRoot":"","sources":["../../src/private-conversation/file-hash.ts"],"names":[],"mappings":"AAIA,wBAAsB,UAAU,CAAC,IAAI,EAAE,IAAI,mBAa1C"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { sha256 } from "@noble/hashes/sha2";
|
|
2
|
+
const HASH_CHUNK_BYTES = 1024 * 1024;
|
|
3
|
+
export async function sha256Blob(blob) {
|
|
4
|
+
const hash = sha256.create();
|
|
5
|
+
for (let offset = 0; offset < blob.size; offset += HASH_CHUNK_BYTES) {
|
|
6
|
+
const bytes = new Uint8Array(await blob
|
|
7
|
+
.slice(offset, Math.min(blob.size, offset + HASH_CHUNK_BYTES))
|
|
8
|
+
.arrayBuffer());
|
|
9
|
+
hash.update(bytes);
|
|
10
|
+
}
|
|
11
|
+
return Array.from(hash.digest(), (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=file-hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-hash.js","sourceRoot":"","sources":["../../src/private-conversation/file-hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,gBAAgB,GAAG,IAAI,GAAG,IAAI,CAAC;AAErC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAU;IACzC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;IAC7B,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,gBAAgB,EAAE,CAAC;QACpE,MAAM,KAAK,GAAG,IAAI,UAAU,CAC1B,MAAM,IAAI;aACP,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAC,CAAC;aAC7D,WAAW,EAAE,CACjB,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CACxC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CACnC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC"}
|