diff --git a/bots/api/TYPES.md b/bots/api/TYPES.md index af89c86411..41fbe54b03 100644 --- a/bots/api/TYPES.md +++ b/bots/api/TYPES.md @@ -146,6 +146,7 @@ This file is generated automatically. - [Profile](#profile) - [ProxyClientError](#proxyclienterror) - [ProxyError](#proxyerror) +- [PublicGroupAccess](#publicgroupaccess) - [PublicGroupData](#publicgroupdata) - [PublicGroupProfile](#publicgroupprofile) - [RCErrorType](#rcerrortype) @@ -157,6 +158,7 @@ This file is generated automatically. - [RcvFileTransfer](#rcvfiletransfer) - [RcvGroupEvent](#rcvgroupevent) - [RcvMsgError](#rcvmsgerror) +- [RelayCapabilities](#relaycapabilities) - [RelayProfile](#relayprofile) - [RelayStatus](#relaystatus) - [ReportReason](#reportreason) @@ -2498,6 +2500,7 @@ UpdateRequired: - userChatRelay: [UserChatRelay](#userchatrelay) - relayStatus: [RelayStatus](#relaystatus) - relayLink: string? +- relayCap: [RelayCapabilities](#relaycapabilities) --- @@ -3067,6 +3070,17 @@ NO_SESSION: - type: "NO_SESSION" +--- + +## PublicGroupAccess + +**Record type**: +- groupWebPage: string? +- groupDomain: string? +- domainWebPage: bool +- allowEmbedding: bool + + --- ## PublicGroupData @@ -3083,6 +3097,7 @@ NO_SESSION: - groupType: [GroupType](#grouptype) - groupLink: string - publicGroupId: string +- publicGroupAccess: [PublicGroupAccess](#publicgroupaccess)? --- @@ -3340,6 +3355,14 @@ ParseError: - parseError: string +--- + +## RelayCapabilities + +**Record type**: +- baseWebUrl: string? + + --- ## RelayProfile diff --git a/bots/src/API/Docs/Types.hs b/bots/src/API/Docs/Types.hs index 0f9e198cc1..3981504552 100644 --- a/bots/src/API/Docs/Types.hs +++ b/bots/src/API/Docs/Types.hs @@ -327,6 +327,7 @@ chatTypesDocsData = (sti @Profile, STRecord, "", [], "", ""), (sti @ProxyClientError, STUnion, "Proxy", [], "", ""), (sti @ProxyError, STUnion, "", [], "", ""), + (sti @PublicGroupAccess, STRecord, "", [], "", ""), (sti @PublicGroupData, STRecord, "", [], "", ""), (sti @PublicGroupProfile, STRecord, "", [], "", ""), (sti @RatchetSyncState, STEnum, "RS", [], "", ""), @@ -338,6 +339,7 @@ chatTypesDocsData = (sti @RcvFileTransfer, STRecord, "", [], "", ""), (sti @RcvGroupEvent, STUnion, "RGE", [], "", ""), (sti @RcvMsgError, STUnion, "RME", [], "", ""), + (sti @RelayCapabilities, STRecord, "", [], "", ""), (sti @RelayProfile, STRecord, "", [], "", ""), (sti @RelayStatus, STEnum, "RS", [], "", ""), (sti @ReportReason, STEnum' (dropPfxSfx "RR" ""), "", ["RRUnknown"], "", ""), @@ -545,6 +547,7 @@ deriving instance Generic PreparedGroup deriving instance Generic Profile deriving instance Generic ProxyClientError deriving instance Generic ProxyError +deriving instance Generic PublicGroupAccess deriving instance Generic PublicGroupData deriving instance Generic PublicGroupProfile deriving instance Generic RatchetSyncState @@ -556,6 +559,7 @@ deriving instance Generic RcvFileStatus deriving instance Generic RcvFileTransfer deriving instance Generic RcvGroupEvent deriving instance Generic RcvMsgError +deriving instance Generic RelayCapabilities deriving instance Generic RelayProfile deriving instance Generic RelayStatus deriving instance Generic ReportReason diff --git a/packages/simplex-chat-client/types/typescript/src/types.ts b/packages/simplex-chat-client/types/typescript/src/types.ts index de86d1e790..c20acc7b7d 100644 --- a/packages/simplex-chat-client/types/typescript/src/types.ts +++ b/packages/simplex-chat-client/types/typescript/src/types.ts @@ -2776,6 +2776,7 @@ export interface GroupRelay { userChatRelay: UserChatRelay relayStatus: RelayStatus relayLink?: string + relayCap: RelayCapabilities } export type GroupRootKey = GroupRootKey.Private | GroupRootKey.Public @@ -3356,6 +3357,13 @@ export namespace ProxyError { } } +export interface PublicGroupAccess { + groupWebPage?: string + groupDomain?: string + domainWebPage: boolean + allowEmbedding: boolean +} + export interface PublicGroupData { publicMemberCount: number // int64 } @@ -3364,6 +3372,7 @@ export interface PublicGroupProfile { groupType: GroupType groupLink: string publicGroupId: string + publicGroupAccess?: PublicGroupAccess } export type RCErrorType = @@ -3752,6 +3761,10 @@ export namespace RcvMsgError { } } +export interface RelayCapabilities { + baseWebUrl?: string +} + export interface RelayProfile { displayName: string fullName: string diff --git a/packages/simplex-chat-python/src/simplex_chat/types/_types.py b/packages/simplex-chat-python/src/simplex_chat/types/_types.py index 3bbf82d350..99fe580f26 100644 --- a/packages/simplex-chat-python/src/simplex_chat/types/_types.py +++ b/packages/simplex-chat-python/src/simplex_chat/types/_types.py @@ -1949,6 +1949,7 @@ class GroupRelay(TypedDict): userChatRelay: "UserChatRelay" relayStatus: "RelayStatus" relayLink: NotRequired[str] + relayCap: "RelayCapabilities" class GroupRootKey_private(TypedDict): type: Literal["private"] @@ -2356,6 +2357,12 @@ ProxyError = ProxyError_PROTOCOL | ProxyError_BROKER | ProxyError_BASIC_AUTH | P ProxyError_Tag = Literal["PROTOCOL", "BROKER", "BASIC_AUTH", "NO_SESSION"] +class PublicGroupAccess(TypedDict): + groupWebPage: NotRequired[str] + groupDomain: NotRequired[str] + domainWebPage: bool + allowEmbedding: bool + class PublicGroupData(TypedDict): publicMemberCount: int # int64 @@ -2363,6 +2370,7 @@ class PublicGroupProfile(TypedDict): groupType: "GroupType" groupLink: str publicGroupId: str + publicGroupAccess: NotRequired["PublicGroupAccess"] class RCErrorType_internal(TypedDict): type: Literal["internal"] @@ -2631,6 +2639,9 @@ RcvMsgError = RcvMsgError_dropped | RcvMsgError_parseError RcvMsgError_Tag = Literal["dropped", "parseError"] +class RelayCapabilities(TypedDict): + baseWebUrl: NotRequired[str] + class RelayProfile(TypedDict): displayName: str fullName: str diff --git a/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt b/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt index a7880799db..14c9226d2c 100644 --- a/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt +++ b/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt @@ -143,6 +143,7 @@ Query: SELECT -- GroupInfo g.group_id, g.local_display_name, gp.display_name, gp.full_name, gp.short_descr, g.local_alias, gp.description, gp.image, gp.group_type, gp.group_link, gp.public_group_id, + gp.group_web_page, gp.group_domain, gp.domain_web_page, gp.allow_embedding, g.enable_ntfs, g.send_rcpts, g.favorite, gp.preferences, gp.member_admission, g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.conn_full_link_to_connect, g.conn_short_link_to_connect, g.conn_link_prepared_connection, g.conn_link_started_connection, g.welcome_shared_msg_id, g.request_shared_msg_id, @@ -979,6 +980,7 @@ SEARCH delivery_tasks USING COVERING INDEX idx_delivery_tasks_next (group_id=? A Query: SELECT gp.display_name, gp.full_name, gp.short_descr, gp.description, gp.image, gp.group_type, gp.group_link, gp.public_group_id, + gp.group_web_page, gp.group_domain, gp.domain_web_page, gp.allow_embedding, gp.preferences, gp.member_admission FROM group_profiles gp JOIN groups g ON gp.group_profile_id = g.group_profile_id @@ -1228,8 +1230,9 @@ Query: INSERT INTO group_profiles (display_name, full_name, short_descr, description, image, group_type, group_link, public_group_id, + group_web_page, group_domain, domain_web_page, allow_embedding, user_id, preferences, member_admission, created_at, updated_at) - VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?) + VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) Plan: @@ -1752,6 +1755,7 @@ Query: UPDATE group_profiles SET display_name = ?, full_name = ?, short_descr = ?, description = ?, image = ?, group_type = ?, group_link = ?, + group_web_page = ?, group_domain = ?, domain_web_page = ?, allow_embedding = ?, preferences = ?, member_admission = ?, updated_at = ? WHERE group_profile_id IN ( SELECT group_profile_id @@ -5119,6 +5123,14 @@ SEARCH group_profiles USING INTEGER PRIMARY KEY (rowid=?) LIST SUBQUERY 1 SEARCH groups USING INTEGER PRIMARY KEY (rowid=?) +Query: + UPDATE group_relays + SET base_web_url = ?, updated_at = ? + WHERE group_member_id = ? + +Plan: +SEARCH group_relays USING INDEX idx_group_relays_group_member_id (group_member_id=?) + Query: UPDATE group_relays SET conf_id = ?, relay_link = ?, updated_at = ? @@ -5295,6 +5307,7 @@ Query: SELECT -- GroupInfo g.group_id, g.local_display_name, gp.display_name, gp.full_name, gp.short_descr, g.local_alias, gp.description, gp.image, gp.group_type, gp.group_link, gp.public_group_id, + gp.group_web_page, gp.group_domain, gp.domain_web_page, gp.allow_embedding, g.enable_ntfs, g.send_rcpts, g.favorite, gp.preferences, gp.member_admission, g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.conn_full_link_to_connect, g.conn_short_link_to_connect, g.conn_link_prepared_connection, g.conn_link_started_connection, g.welcome_shared_msg_id, g.request_shared_msg_id, @@ -5331,6 +5344,7 @@ Query: SELECT -- GroupInfo g.group_id, g.local_display_name, gp.display_name, gp.full_name, gp.short_descr, g.local_alias, gp.description, gp.image, gp.group_type, gp.group_link, gp.public_group_id, + gp.group_web_page, gp.group_domain, gp.domain_web_page, gp.allow_embedding, g.enable_ntfs, g.send_rcpts, g.favorite, gp.preferences, gp.member_admission, g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.conn_full_link_to_connect, g.conn_short_link_to_connect, g.conn_link_prepared_connection, g.conn_link_started_connection, g.welcome_shared_msg_id, g.request_shared_msg_id, @@ -5360,6 +5374,7 @@ Query: SELECT -- GroupInfo g.group_id, g.local_display_name, gp.display_name, gp.full_name, gp.short_descr, g.local_alias, gp.description, gp.image, gp.group_type, gp.group_link, gp.public_group_id, + gp.group_web_page, gp.group_domain, gp.domain_web_page, gp.allow_embedding, g.enable_ntfs, g.send_rcpts, g.favorite, gp.preferences, gp.member_admission, g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.conn_full_link_to_connect, g.conn_short_link_to_connect, g.conn_link_prepared_connection, g.conn_link_started_connection, g.welcome_shared_msg_id, g.request_shared_msg_id, @@ -5690,7 +5705,7 @@ SEARCH f USING INDEX idx_files_chat_item_id (chat_item_id=?) Query: SELECT gr.group_relay_id, gr.group_member_id, cr.chat_relay_id, cr.address, cr.display_name, cr.full_name, cr.short_descr, cr.image, cr.domains, cr.preset, cr.tested, cr.enabled, cr.deleted, - gr.relay_status, gr.relay_link + gr.relay_status, gr.relay_link, gr.base_web_url FROM group_relays gr JOIN chat_relays cr ON cr.chat_relay_id = gr.chat_relay_id @@ -5707,7 +5722,7 @@ SEARCH m USING INTEGER PRIMARY KEY (rowid=?) Query: SELECT gr.group_relay_id, gr.group_member_id, cr.chat_relay_id, cr.address, cr.display_name, cr.full_name, cr.short_descr, cr.image, cr.domains, cr.preset, cr.tested, cr.enabled, cr.deleted, - gr.relay_status, gr.relay_link + gr.relay_status, gr.relay_link, gr.base_web_url FROM group_relays gr JOIN chat_relays cr ON cr.chat_relay_id = gr.chat_relay_id WHERE gr.group_id = ? @@ -5718,7 +5733,7 @@ SEARCH cr USING INTEGER PRIMARY KEY (rowid=?) Query: SELECT gr.group_relay_id, gr.group_member_id, cr.chat_relay_id, cr.address, cr.display_name, cr.full_name, cr.short_descr, cr.image, cr.domains, cr.preset, cr.tested, cr.enabled, cr.deleted, - gr.relay_status, gr.relay_link + gr.relay_status, gr.relay_link, gr.base_web_url FROM group_relays gr JOIN chat_relays cr ON cr.chat_relay_id = gr.chat_relay_id WHERE gr.group_member_id = ? @@ -5729,7 +5744,7 @@ SEARCH cr USING INTEGER PRIMARY KEY (rowid=?) Query: SELECT gr.group_relay_id, gr.group_member_id, cr.chat_relay_id, cr.address, cr.display_name, cr.full_name, cr.short_descr, cr.image, cr.domains, cr.preset, cr.tested, cr.enabled, cr.deleted, - gr.relay_status, gr.relay_link + gr.relay_status, gr.relay_link, gr.base_web_url FROM group_relays gr JOIN chat_relays cr ON cr.chat_relay_id = gr.chat_relay_id WHERE gr.group_relay_id = ? diff --git a/src/Simplex/Chat/Store/SQLite/Migrations/chat_schema.sql b/src/Simplex/Chat/Store/SQLite/Migrations/chat_schema.sql index 86c198670c..ccff26b38d 100644 --- a/src/Simplex/Chat/Store/SQLite/Migrations/chat_schema.sql +++ b/src/Simplex/Chat/Store/SQLite/Migrations/chat_schema.sql @@ -125,7 +125,11 @@ CREATE TABLE group_profiles( short_descr TEXT, group_type TEXT, group_link BLOB, - public_group_id BLOB + public_group_id BLOB, + group_web_page TEXT, + group_domain TEXT, + domain_web_page INTEGER, + allow_embedding INTEGER ) STRICT; CREATE TABLE groups( group_id INTEGER PRIMARY KEY, -- local group ID @@ -778,6 +782,8 @@ CREATE TABLE group_relays( conf_id BLOB, created_at TEXT NOT NULL DEFAULT(datetime('now')), updated_at TEXT NOT NULL DEFAULT(datetime('now')) + , + base_web_url TEXT ) STRICT; CREATE INDEX contact_profiles_index ON contact_profiles( display_name,