mirror of
https://github.com/logseq/logseq.git
synced 2026-05-02 18:06:32 +00:00
266 lines
8.0 KiB
Clojure
266 lines
8.0 KiB
Clojure
(ns frontend.worker.rtc.const
|
|
"RTC constants/schema"
|
|
(:require [logseq.db.frontend.malli-schema :as db-malli-schema]
|
|
[malli.core :as m]
|
|
[malli.transform :as mt]
|
|
[malli.util :as mu]))
|
|
|
|
(goog-define RTC-E2E-TEST* false)
|
|
(def RTC-E2E-TEST RTC-E2E-TEST*)
|
|
|
|
(def block-pos-schema
|
|
[:catn
|
|
[:parent-uuid [:maybe :uuid]]
|
|
[:order [:maybe db-malli-schema/block-order]]])
|
|
|
|
(def av-schema
|
|
[:cat
|
|
:keyword
|
|
[:or
|
|
:uuid ;; reference type
|
|
:string ;; all other type value convert to string by transit
|
|
]
|
|
:int ;; t
|
|
:boolean ;; add(true) or retract
|
|
])
|
|
|
|
(def to-ws-op-schema
|
|
[:multi {:dispatch first :decode/string #(update % 0 keyword)}
|
|
[:move
|
|
[:cat :keyword
|
|
[:map
|
|
[:block-uuid :uuid]
|
|
[:pos block-pos-schema]]]]
|
|
[:remove
|
|
[:cat :keyword
|
|
[:map
|
|
[:block-uuids [:sequential :uuid]]]]]
|
|
[:update-page
|
|
[:cat :keyword
|
|
[:map
|
|
[:block-uuid :uuid]
|
|
[:page-name :string]
|
|
[:block/title :string]]]]
|
|
[:remove-page
|
|
[:cat :keyword
|
|
[:map
|
|
[:block-uuid :uuid]]]]
|
|
[:update
|
|
[:cat :keyword
|
|
[:map
|
|
[:block-uuid :uuid]
|
|
[:db/ident {:optional true} :keyword]
|
|
[:pos block-pos-schema]
|
|
[:av-coll [:sequential av-schema]]
|
|
[:card-one-attrs {:optional true} [:sequential :keyword]]]]]
|
|
[:update-schema
|
|
[:cat :keyword
|
|
[:map
|
|
[:block-uuid :uuid]
|
|
[:db/ident :keyword]
|
|
[:db/valueType :keyword]
|
|
[:db/cardinality {:optional true} :keyword]
|
|
[:db/index {:optional true} :boolean]]]]])
|
|
|
|
(comment
|
|
(def to-ws-ops-validator (m/validator [:sequential to-ws-op-schema])))
|
|
|
|
(def to-ws-ops-decoder (m/decoder [:sequential to-ws-op-schema] mt/string-transformer))
|
|
|
|
(def ^:private extra-attr-map-schema
|
|
[:map-of
|
|
:keyword
|
|
[:or
|
|
[:or :uuid :string]
|
|
[:sequential [:or :uuid :string]]]])
|
|
|
|
(def data-from-ws-schema
|
|
"TODO: split this mix schema to multiple ones"
|
|
[:map
|
|
[:req-id :string]
|
|
[:t {:optional true} :int]
|
|
[:t-before {:optional true} :int]
|
|
[:failed-ops {:optional true} [:sequential to-ws-op-schema]]
|
|
[:s3-presign-url {:optional true} :string]
|
|
[:server-schema-version {:optional true} :int]
|
|
[:server-only-db-ident-blocks {:optional true} [:maybe :string] ;;transit
|
|
]
|
|
[:users {:optional true} [:sequential
|
|
[:map {:closed true}
|
|
[:user/uuid :uuid]
|
|
[:user/name :string]
|
|
[:user/email :string]
|
|
[:user/online? :boolean]
|
|
[:user/avatar {:optional true} :string]
|
|
[:graph<->user/user-type :keyword]]]]
|
|
[:online-users {:optional true} [:sequential
|
|
[:map {:closed true}
|
|
[:user/uuid :uuid]
|
|
[:user/name :string]
|
|
[:user/email :string]
|
|
[:user/avatar {:optional true} :string]]]]
|
|
[:refed-blocks {:optional true}
|
|
[:maybe
|
|
[:sequential
|
|
[:map
|
|
[:block/uuid :uuid]
|
|
[:db/ident {:optional true} :keyword]
|
|
[:block/order {:optional true} db-malli-schema/block-order]
|
|
[:block/parent {:optional true} :uuid]
|
|
[::m/default extra-attr-map-schema]]]]]
|
|
[:affected-blocks {:optional true}
|
|
[:map-of :uuid
|
|
[:multi {:dispatch :op :decode/string #(update % :op keyword)}
|
|
[:move
|
|
[:map {:closed true}
|
|
[:op :keyword]
|
|
[:self :uuid]
|
|
[:parents [:sequential :uuid]]
|
|
[:block/order {:optional true} db-malli-schema/block-order]
|
|
[:hash {:optional true} :int]
|
|
[:db/ident {:optional true} :keyword]]]
|
|
[:remove
|
|
[:map
|
|
[:op :keyword]
|
|
[:block-uuid :uuid]]]
|
|
[:update-attrs
|
|
[:map
|
|
[:op :keyword]
|
|
[:self :uuid]
|
|
[:parents {:optional true} [:sequential :uuid]]
|
|
[:block/order {:optional true} db-malli-schema/block-order]
|
|
[:hash {:optional true} :int]
|
|
[:db/ident {:optional true} :keyword]
|
|
[::m/default extra-attr-map-schema]]]
|
|
[:move+update-attrs
|
|
[:map
|
|
[:op :keyword]
|
|
[:self :uuid]
|
|
[:parents {:optional true} [:sequential :uuid]]
|
|
[:block/order {:optional true} db-malli-schema/block-order]
|
|
[:hash {:optional true} :int]
|
|
[:db/ident {:optional true} :keyword]
|
|
[::m/default extra-attr-map-schema]]]
|
|
[:update-page
|
|
[:map
|
|
[:op :keyword]
|
|
[:self :uuid]
|
|
[:block/title :string]
|
|
[:db/ident {:optional true} :keyword]
|
|
[:block/order {:optional true} db-malli-schema/block-order]
|
|
[::m/default extra-attr-map-schema]]]
|
|
[:remove-page
|
|
[:map
|
|
[:op :keyword]
|
|
[:block-uuid :uuid]]]]]]
|
|
[:asset-uuid->url {:optional true} [:map-of :uuid :string]]
|
|
[:ex-data {:optional true} [:map [:type :keyword]]]
|
|
[:ex-message {:optional true} :string]])
|
|
|
|
(def data-from-ws-coercer (m/coercer data-from-ws-schema mt/string-transformer))
|
|
(def data-from-ws-validator (m/validator data-from-ws-schema))
|
|
|
|
(def data-to-ws-schema
|
|
(mu/closed-schema
|
|
[:multi {:dispatch :action}
|
|
["list-graphs"
|
|
[:map
|
|
[:req-id :string]
|
|
[:action :string]]]
|
|
["register-graph-updates"
|
|
[:map
|
|
[:req-id :string]
|
|
[:action :string]
|
|
[:graph-uuid :string]]]
|
|
["apply-ops"
|
|
[:map
|
|
[:req-id :string]
|
|
[:action :string]
|
|
[:graph-uuid :string]
|
|
[:ops [:sequential to-ws-op-schema]]
|
|
[:t-before :int]]]
|
|
["presign-put-temp-s3-obj"
|
|
[:map
|
|
[:req-id :string]
|
|
[:action :string]]]
|
|
["upload-graph"
|
|
[:map
|
|
[:req-id :string]
|
|
[:action :string]
|
|
[:s3-key :string]
|
|
[:graph-name :string]]]
|
|
["download-graph"
|
|
[:map
|
|
[:req-id :string]
|
|
[:action :string]
|
|
[:graph-uuid :string]]]
|
|
["download-info-list"
|
|
[:map
|
|
[:req-id :string]
|
|
[:action :string]
|
|
[:graph-uuid :string]]]
|
|
["snapshot-list"
|
|
[:map
|
|
[:req-id :string]
|
|
[:action :string]
|
|
[:graph-uuid :string]]]
|
|
["snapshot-graph"
|
|
[:map
|
|
[:req-id :string]
|
|
[:action :string]
|
|
[:graph-uuid :string]]]
|
|
["grant-access"
|
|
[:map
|
|
[:req-id :string]
|
|
[:action :string]
|
|
[:graph-uuid :uuid]
|
|
[:target-user-uuids {:optional true} [:sequential :uuid]]
|
|
[:target-user-emails {:optional true} [:sequential :string]]]]
|
|
["get-users-info"
|
|
[:map
|
|
[:req-id :string]
|
|
[:action :string]
|
|
[:graph-uuid :uuid]]]
|
|
["delete-graph"
|
|
[:map
|
|
[:req-id :string]
|
|
[:action :string]
|
|
[:graph-uuid :uuid]]]
|
|
["query-block-content-versions"
|
|
[:map
|
|
[:req-id :string]
|
|
[:action :string]
|
|
[:graph-uuid :string]
|
|
[:block-uuids [:sequential :uuid]]]]
|
|
["calibrate-graph-skeleton"
|
|
[:map
|
|
[:req-id :string]
|
|
[:action :string]
|
|
[:graph-uuid :string]
|
|
[:t :int]
|
|
[:schema-version :int]
|
|
[:db-ident-blocks [:sequential
|
|
[:map
|
|
[:db/ident :keyword]
|
|
[::m/default extra-attr-map-schema]]]]]]
|
|
|
|
["get-assets-upload-urls"
|
|
[:map
|
|
[:req-id :string]
|
|
[:action :string]
|
|
[:graph-uuid :string]
|
|
[:asset-uuid->metadata [:map-of :uuid [:map-of :string :string]]]]]
|
|
["get-assets-download-urls"
|
|
[:map
|
|
[:req-id :string]
|
|
[:action :string]
|
|
[:graph-uuid :string]
|
|
[:asset-uuids [:sequential :uuid]]]]]))
|
|
(def data-to-ws-encoder (m/encoder data-to-ws-schema (mt/transformer
|
|
mt/string-transformer
|
|
(mt/key-transformer {:encode m/-keyword->string}))))
|
|
(def data-to-ws-coercer (m/coercer data-to-ws-schema mt/string-transformer nil
|
|
#(do
|
|
(prn ::data-to-ws-schema %)
|
|
(m/-fail! ::data-to-ws-schema %))))
|