diff --git a/cmd/testcase/main.go b/cmd/testcase/main.go new file mode 100644 index 000000000..c823b1612 --- /dev/null +++ b/cmd/testcase/main.go @@ -0,0 +1,115 @@ +package main + +import ( + "fmt" + "io" + "os" + "path/filepath" + + "github.com/gogo/protobuf/jsonpb" + "github.com/gogo/protobuf/proto" + + "github.com/anyproto/anytype-heart/pb" +) + +func run() error { + if len(os.Args) == 1 { + return fmt.Errorf("select command: generate-json-helpers") + } + + if os.Args[1] == "generate-json-helpers" { + return generateJsonHelpers() + } + return nil +} + +func generateJsonHelpers() error { + rootPath := "./tests/integration/testdata/import" + entries, err := os.ReadDir(rootPath) + if err != nil { + return fmt.Errorf("read dir: %w", err) + } + for _, entry := range entries { + if entry.IsDir() { + err := generateJsonHelpersForImportCase(filepath.Join(rootPath, entry.Name())) + if err != nil { + return fmt.Errorf("generate json helpers for dir %s: %w", entry.Name(), err) + } + } + } + return nil +} + +func generateJsonHelpersForImportCase(dir string) error { + entries, err := os.ReadDir(dir) + if err != nil { + return fmt.Errorf("read dir: %w", err) + } + for _, entry := range entries { + if entry.IsDir() { + continue + } + // Remove old json files + if filepath.Ext(entry.Name()) == ".txt" { + path := filepath.Join(dir, entry.Name()) + fmt.Println("delete old json file: ", path) + err := os.Remove(path) + if err != nil { + return fmt.Errorf("remove file: %w", err) + } + } + } + for _, entry := range entries { + if entry.IsDir() { + continue + } + if filepath.Ext(entry.Name()) == ".pb" { + err = generateJsonHelper(dir, entry.Name()) + if err != nil { + return fmt.Errorf("generate helper: %w", err) + } + } + } + return nil +} + +func generateJsonHelper(dir string, pbFileName string) error { + f, err := os.Open(filepath.Join(dir, pbFileName)) + if err != nil { + return fmt.Errorf("open file: %w", err) + } + defer f.Close() + snapshot := &pb.SnapshotWithType{} + + data, err := io.ReadAll(f) + if err != nil { + return fmt.Errorf("read pb file: %w", err) + } + err = proto.Unmarshal(data, snapshot) + if err != nil { + return fmt.Errorf("unmarshal pb: %w", err) + } + + jsonFilePath := filepath.Join(dir, pbFileName+".txt") + jsonFile, err := os.Create(jsonFilePath) + if err != nil { + return fmt.Errorf("create file: %w", err) + } + defer jsonFile.Close() + + marshaler := &jsonpb.Marshaler{Indent: " "} + err = marshaler.Marshal(jsonFile, snapshot) + if err != nil { + return fmt.Errorf("marshal to json: %w", err) + } + fmt.Println("created json file: ", jsonFilePath) + return nil +} + +func main() { + err := run() + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} diff --git a/tests/integration/import_test.go b/tests/integration/import_test.go index fed638d7e..b5d3267a3 100644 --- a/tests/integration/import_test.go +++ b/tests/integration/import_test.go @@ -84,7 +84,7 @@ func TestImportFiles(t *testing.T) { if v := msg.GetObjectDetailsSet(); v != nil { if slices.Contains(v.SubIds, subscriptionId) { fileObjectId := pbtypes.GetString(v.Details, bundle.RelationKeyId.String()) - assertImageAvailbleInGateway(t, app, fileObjectId) + assertImageAvailableInGateway(t, app, fileObjectId) return true } } @@ -93,7 +93,7 @@ func TestImportFiles(t *testing.T) { }) } -func assertImageAvailbleInGateway(t *testing.T, app *testApplication, fileObjectId string) { +func assertImageAvailableInGateway(t *testing.T, app *testApplication, fileObjectId string) { gw := getService[gateway.Gateway](app) host := gw.Addr() resp, err := http.Get("http://" + host + "/image/" + fileObjectId) diff --git a/tests/integration/testdata/import/object with file block/bafyreidcjbn5axvbp4qrs43vfvtgmj3w5ahygfhjsbjm44gkaqms2iopny.pb.txt b/tests/integration/testdata/import/object with file block/bafyreidcjbn5axvbp4qrs43vfvtgmj3w5ahygfhjsbjm44gkaqms2iopny.pb.txt new file mode 100644 index 000000000..df12c4a8a --- /dev/null +++ b/tests/integration/testdata/import/object with file block/bafyreidcjbn5axvbp4qrs43vfvtgmj3w5ahygfhjsbjm44gkaqms2iopny.pb.txt @@ -0,0 +1,285 @@ +{ + "sbType": "STType", + "snapshot": { + "data": { + "blocks": [ + { + "id": "bafyreidcjbn5axvbp4qrs43vfvtgmj3w5ahygfhjsbjm44gkaqms2iopny", + "childrenIds": [ + "header" + ], + "smartblock": { + + } + }, + { + "id": "header", + "restrictions": { + "edit": true, + "remove": true, + "drag": true, + "dropOn": true + }, + "childrenIds": [ + "title", + "featuredRelations" + ], + "layout": { + "style": "Header" + } + }, + { + "id": "title", + "fields": { + "_detailsKey": [ + "name", + "done" + ] + }, + "restrictions": { + "remove": true, + "drag": true, + "dropOn": true + }, + "text": { + "style": "Title", + "marks": { + + } + } + }, + { + "id": "featuredRelations", + "restrictions": { + "remove": true, + "drag": true, + "dropOn": true + }, + "featuredRelations": { + + } + } + ], + "details": { + "backlinks": [ + ], + "createdDate": 1708681936, + "creator": "_anytype_profile", + "description": "Auto-generated object from .jpg \u0026 .png files added to Anytype. A representation of the external form of a person or thing in art", + "featuredRelations": [ + "backlinks", + "type" + ], + "iconEmoji": "🏞", + "id": "bafyreidcjbn5axvbp4qrs43vfvtgmj3w5ahygfhjsbjm44gkaqms2iopny", + "internalFlags": [ + ], + "isArchived": false, + "isHidden": false, + "isReadonly": true, + "lastModifiedBy": "_participant_bafyreieo7b7uqpcyrl5djfeezwhrycrexqv2l2giugf67drbg536naiav4_3uxcyvge8is62_A6LrAEcm6LMpygR5LZ2yJ4izsNmzKrzGBJmYWKExtiJZbi7h", + "lastModifiedDate": 1708681937, + "lastUsedDate": 1708679837, + "layout": 4, + "links": [ + ], + "name": "Image", + "origin": 7, + "recommendedLayout": 8, + "recommendedRelations": [ + "bafyreiexomkqsmiquooblaiivjekszpxtktc4vwzpot7eagl4sm4xgvxsm", + "bafyreigpg65ux5iiouypryze4xe3zybzvzgjkukqhwt6ywceo2xyrbyzcq", + "bafyreifigx3ej4ryeolhg2z3kejvvqyoesc6oqay7fr5yqhb6c3qs42wwa", + "bafyreihzahmws7ikdemquxesbr33pjfjrefaqidjrpo3i4rt3uu4s6btra", + "bafyreif3deijdgfbsd6n3kmxqgsb2tnkt7n4jnngqm2icrpfyi37c7v47q", + "bafyreifpt7wvp72aax7c2bjd4fkoimimvqj4xofxlhayg5qklocuyxeucy", + "bafyreic7cas7aiytfos6gh7445glrygw7bbpgbjnhifmtjaly3axes4bue", + "bafyreigdgqsyw5qhov4n5prhbtbw3hszi3bbiunni456naw5sidvvqauc4", + "bafyreickzet3mkznzh4akug2p6qrnmhxzjjzctrt42qfl7gfpwap5a2dp4", + "bafyreihocceydestrxj42pplz2lv5moumaezgdgajcdhdhxr2xjt6fkn7q", + "bafyreibtadmiwpuj7ylqjtliukqpv6z6uqcspr5v4xerrsgeqjoeq5m7o4", + "bafyreiawn7wlwt6hzgkdpnaf6ap6q5s35xnnqpuvyo7fa6eatv6yptx4uy" + ], + "restrictions": [ + 3, + 6, + 5, + 7, + 4, + 1 + ], + "revision": 0, + "smartblockTypes": [ + 256 + ], + "snippet": "", + "sourceObject": "_otimage", + "spaceId": "bafyreieo7b7uqpcyrl5djfeezwhrycrexqv2l2giugf67drbg536naiav4.3uxcyvge8is62", + "type": "bafyreibb45igjiprvuhe7j35hgfunh72oggyqhnoyxknmm5ebqfyvrwulq", + "uniqueKey": "ot-image" + }, + "objectTypes": [ + "ot-objectType" + ], + "relationLinks": [ + { + "key": "spaceId", + "format": "object" + }, + { + "key": "description" + }, + { + "key": "recommendedRelations", + "format": "object" + }, + { + "key": "internalFlags", + "format": "number" + }, + { + "key": "name", + "format": "shorttext" + }, + { + "key": "revision", + "format": "number" + }, + { + "key": "origin", + "format": "number" + }, + { + "key": "recommendedLayout", + "format": "number" + }, + { + "key": "sourceObject", + "format": "object" + }, + { + "key": "featuredRelations", + "format": "object" + }, + { + "key": "isHidden", + "format": "checkbox" + }, + { + "key": "smartblockTypes", + "format": "number" + }, + { + "key": "layout", + "format": "number" + }, + { + "key": "iconEmoji", + "format": "emoji" + }, + { + "key": "id", + "format": "object" + }, + { + "key": "uniqueKey" + }, + { + "key": "isReadonly", + "format": "checkbox" + }, + { + "key": "snippet" + }, + { + "key": "backlinks", + "format": "object" + }, + { + "key": "iconImage", + "format": "file" + }, + { + "key": "type", + "format": "object" + }, + { + "key": "layoutAlign", + "format": "number" + }, + { + "key": "coverId" + }, + { + "key": "coverScale", + "format": "number" + }, + { + "key": "coverType", + "format": "number" + }, + { + "key": "coverX", + "format": "number" + }, + { + "key": "coverY", + "format": "number" + }, + { + "key": "createdDate", + "format": "date" + }, + { + "key": "creator", + "format": "object" + }, + { + "key": "lastModifiedDate", + "format": "date" + }, + { + "key": "lastModifiedBy", + "format": "object" + }, + { + "key": "lastOpenedDate", + "format": "date" + }, + { + "key": "isFavorite", + "format": "checkbox" + }, + { + "key": "workspaceId", + "format": "object" + }, + { + "key": "links", + "format": "object" + }, + { + "key": "restrictions", + "format": "number" + }, + { + "key": "fileId", + "format": "shorttext" + }, + { + "key": "sizeInBytes", + "format": "number" + }, + { + "key": "lastUsedDate", + "format": "date" + }, + { + "key": "isArchived", + "format": "checkbox" + } + ], + "key": "image" + } + } +} \ No newline at end of file diff --git a/tests/integration/testdata/import/object with file block/bafyreie5dsqow6vcoqh5cahq4epetrm3tnmue5txgbdbyjojcgpase5soy.pb.txt b/tests/integration/testdata/import/object with file block/bafyreie5dsqow6vcoqh5cahq4epetrm3tnmue5txgbdbyjojcgpase5soy.pb.txt new file mode 100644 index 000000000..d24bb5f79 --- /dev/null +++ b/tests/integration/testdata/import/object with file block/bafyreie5dsqow6vcoqh5cahq4epetrm3tnmue5txgbdbyjojcgpase5soy.pb.txt @@ -0,0 +1,297 @@ +{ + "sbType": "FileObject", + "snapshot": { + "data": { + "blocks": [ + { + "id": "bafyreie5dsqow6vcoqh5cahq4epetrm3tnmue5txgbdbyjojcgpase5soy", + "restrictions": { + "edit": true, + "remove": true, + "drag": true, + "dropOn": true + }, + "childrenIds": [ + "header", + "file", + "widthInPixels", + "heightInPixels", + "sizeInBytes" + ], + "smartblock": { + + } + }, + { + "id": "header", + "restrictions": { + "edit": true, + "remove": true, + "drag": true, + "dropOn": true + }, + "childrenIds": [ + "title", + "featuredRelations" + ], + "layout": { + "style": "Header" + } + }, + { + "id": "file", + "restrictions": { + "edit": true, + "remove": true, + "drag": true, + "dropOn": true + }, + "file": { + "name": "test_image.png", + "type": "Image", + "mime": "image/png", + "size": "473831", + "targetObjectId": "bafyreie5dsqow6vcoqh5cahq4epetrm3tnmue5txgbdbyjojcgpase5soy", + "state": "Done" + } + }, + { + "id": "widthInPixels", + "restrictions": { + "edit": true, + "remove": true, + "drag": true, + "dropOn": true + }, + "relation": { + "key": "widthInPixels" + } + }, + { + "id": "heightInPixels", + "restrictions": { + "edit": true, + "remove": true, + "drag": true, + "dropOn": true + }, + "relation": { + "key": "heightInPixels" + } + }, + { + "id": "sizeInBytes", + "restrictions": { + "edit": true, + "remove": true, + "drag": true, + "dropOn": true + }, + "relation": { + "key": "sizeInBytes" + } + }, + { + "id": "title", + "fields": { + "_detailsKey": [ + "name", + "done" + ] + }, + "restrictions": { + "edit": true, + "remove": true, + "drag": true, + "dropOn": true + }, + "text": { + "style": "Title", + "marks": { + + } + } + }, + { + "id": "featuredRelations", + "restrictions": { + "edit": true, + "remove": true, + "drag": true, + "dropOn": true + }, + "featuredRelations": { + + } + } + ], + "details": { + "addedDate": 1708689792, + "backlinks": [ + ], + "createdDate": 1708689792, + "creator": "_participant_bafyreieo7b7uqpcyrl5djfeezwhrycrexqv2l2giugf67drbg536naiav4_3uxcyvge8is62_A6LrAEcm6LMpygR5LZ2yJ4izsNmzKrzGBJmYWKExtiJZbi7h", + "featuredRelations": [ + "type" + ], + "fileBackupStatus": 1, + "fileExt": "png", + "fileId": "bafybeigw3qcbjo32mum7uq2esdocm6oofh2ncx24p26rhwmfurvh3yq524", + "fileIndexingStatus": 1, + "fileMimeType": "image/png", + "fileSyncStatus": 1, + "heightInPixels": 512, + "iconImage": "bafyreie5dsqow6vcoqh5cahq4epetrm3tnmue5txgbdbyjojcgpase5soy", + "id": "bafyreie5dsqow6vcoqh5cahq4epetrm3tnmue5txgbdbyjojcgpase5soy", + "isReadonly": false, + "lastModifiedBy": "_participant_bafyreieo7b7uqpcyrl5djfeezwhrycrexqv2l2giugf67drbg536naiav4_3uxcyvge8is62_A6LrAEcm6LMpygR5LZ2yJ4izsNmzKrzGBJmYWKExtiJZbi7h", + "lastModifiedDate": 1708689794, + "layout": 8, + "links": [ + ], + "name": "test_image", + "origin": 2, + "restrictions": [ + 3, + 6, + 5, + 7, + 8 + ], + "sizeInBytes": 473831, + "snippet": "", + "source": "files/test_image.png", + "spaceId": "bafyreieo7b7uqpcyrl5djfeezwhrycrexqv2l2giugf67drbg536naiav4.3uxcyvge8is62", + "type": "bafyreidcjbn5axvbp4qrs43vfvtgmj3w5ahygfhjsbjm44gkaqms2iopny", + "widthInPixels": 512 + }, + "objectTypes": [ + "ot-image" + ], + "relationLinks": [ + { + "key": "widthInPixels", + "format": "number" + }, + { + "key": "fileExt" + }, + { + "key": "sizeInBytes", + "format": "number" + }, + { + "key": "isReadonly", + "format": "checkbox" + }, + { + "key": "layout", + "format": "number" + }, + { + "key": "heightInPixels", + "format": "number" + }, + { + "key": "name", + "format": "shorttext" + }, + { + "key": "fileMimeType" + }, + { + "key": "addedDate", + "format": "date" + }, + { + "key": "fileIndexingStatus", + "format": "number" + }, + { + "key": "fileId", + "format": "shorttext" + }, + { + "key": "lastModifiedDate", + "format": "date" + }, + { + "key": "iconImage", + "format": "file" + }, + { + "key": "spaceId", + "format": "object" + }, + { + "key": "origin", + "format": "number" + }, + { + "key": "featuredRelations", + "format": "object" + }, + { + "key": "creator", + "format": "object" + }, + { + "key": "createdDate", + "format": "date" + }, + { + "key": "id", + "format": "object" + }, + { + "key": "type", + "format": "object" + }, + { + "key": "snippet" + }, + { + "key": "backlinks", + "format": "object" + }, + { + "key": "fileBackupStatus", + "format": "number" + }, + { + "key": "fileSyncStatus", + "format": "number" + }, + { + "key": "source", + "format": "url" + } + ], + "fileInfo": { + "fileId": "bafybeigw3qcbjo32mum7uq2esdocm6oofh2ncx24p26rhwmfurvh3yq524", + "encryptionKeys": [ + { + "path": "/0/thumbnail/", + "key": "bb5zsn2rvmc24ekyav4ogwrtj6afvwya6siy644tepem64onjr4wa" + }, + { + "path": "/0/exif/", + "key": "bw324fjytzv6ih6hxv44zkoukak6vxjnmixmu346xknuplqqoh4mq" + }, + { + "path": "/0/original/", + "key": "boo64mttkxvjdtm4tovib2chfrte4odm6z5o5h72bjwtv6mp3j77q" + }, + { + "path": "/0/large/", + "key": "boo64mttkxvjdtm4tovib2chfrte4odm6z5o5h72bjwtv6mp3j77q" + }, + { + "path": "/0/small/", + "key": "bpentwpltji4e6zgscfge2fi6hvy5z4kvmznqlv3gd2kmelgx357q" + } + ] + } + } + } +} \ No newline at end of file diff --git a/tests/integration/testdata/import/object with file block/bafyreiemifn6w6xsd7g6lltwtcatunjuycybb5wkxrzwp3ljfoid7z6b74.pb.txt b/tests/integration/testdata/import/object with file block/bafyreiemifn6w6xsd7g6lltwtcatunjuycybb5wkxrzwp3ljfoid7z6b74.pb.txt new file mode 100644 index 000000000..33a53840b --- /dev/null +++ b/tests/integration/testdata/import/object with file block/bafyreiemifn6w6xsd7g6lltwtcatunjuycybb5wkxrzwp3ljfoid7z6b74.pb.txt @@ -0,0 +1,275 @@ +{ + "sbType": "STType", + "snapshot": { + "data": { + "blocks": [ + { + "id": "bafyreiemifn6w6xsd7g6lltwtcatunjuycybb5wkxrzwp3ljfoid7z6b74", + "childrenIds": [ + "header" + ], + "smartblock": { + + } + }, + { + "id": "header", + "restrictions": { + "edit": true, + "remove": true, + "drag": true, + "dropOn": true + }, + "childrenIds": [ + "title", + "featuredRelations" + ], + "layout": { + "style": "Header" + } + }, + { + "id": "title", + "fields": { + "_detailsKey": [ + "name", + "done" + ] + }, + "restrictions": { + "remove": true, + "drag": true, + "dropOn": true + }, + "text": { + "style": "Title", + "marks": { + + } + } + }, + { + "id": "featuredRelations", + "restrictions": { + "remove": true, + "drag": true, + "dropOn": true + }, + "featuredRelations": { + + } + } + ], + "details": { + "backlinks": [ + ], + "createdDate": 1708681936, + "creator": "_anytype_profile", + "description": "Blank canvas with Title", + "featuredRelations": [ + "backlinks", + "type" + ], + "iconEmoji": "📄", + "id": "bafyreiemifn6w6xsd7g6lltwtcatunjuycybb5wkxrzwp3ljfoid7z6b74", + "internalFlags": [ + ], + "isArchived": false, + "isHidden": false, + "isReadonly": true, + "lastModifiedBy": "_participant_bafyreieo7b7uqpcyrl5djfeezwhrycrexqv2l2giugf67drbg536naiav4_3uxcyvge8is62_A6LrAEcm6LMpygR5LZ2yJ4izsNmzKrzGBJmYWKExtiJZbi7h", + "lastModifiedDate": 1708681937, + "lastUsedDate": 1708689740, + "layout": 4, + "links": [ + ], + "name": "Page", + "origin": 7, + "recommendedLayout": 0, + "recommendedRelations": [ + "bafyreictzawc6xtanufurxgn2ttmqmshzqzz2ve235tzovkh4swbztae3a", + "bafyreiawn7wlwt6hzgkdpnaf6ap6q5s35xnnqpuvyo7fa6eatv6yptx4uy" + ], + "restrictions": [ + 3, + 6, + 5, + 7, + 4, + 1 + ], + "revision": 0, + "smartblockTypes": [ + 16 + ], + "snippet": "", + "sourceObject": "_otpage", + "spaceId": "bafyreieo7b7uqpcyrl5djfeezwhrycrexqv2l2giugf67drbg536naiav4.3uxcyvge8is62", + "type": "bafyreibb45igjiprvuhe7j35hgfunh72oggyqhnoyxknmm5ebqfyvrwulq", + "uniqueKey": "ot-page" + }, + "objectTypes": [ + "ot-objectType" + ], + "relationLinks": [ + { + "key": "spaceId", + "format": "object" + }, + { + "key": "description" + }, + { + "key": "recommendedLayout", + "format": "number" + }, + { + "key": "recommendedRelations", + "format": "object" + }, + { + "key": "layout", + "format": "number" + }, + { + "key": "featuredRelations", + "format": "object" + }, + { + "key": "isHidden", + "format": "checkbox" + }, + { + "key": "revision", + "format": "number" + }, + { + "key": "origin", + "format": "number" + }, + { + "key": "iconEmoji", + "format": "emoji" + }, + { + "key": "name", + "format": "shorttext" + }, + { + "key": "smartblockTypes", + "format": "number" + }, + { + "key": "sourceObject", + "format": "object" + }, + { + "key": "internalFlags", + "format": "number" + }, + { + "key": "id", + "format": "object" + }, + { + "key": "uniqueKey" + }, + { + "key": "isReadonly", + "format": "checkbox" + }, + { + "key": "snippet" + }, + { + "key": "backlinks", + "format": "object" + }, + { + "key": "iconImage", + "format": "file" + }, + { + "key": "type", + "format": "object" + }, + { + "key": "layoutAlign", + "format": "number" + }, + { + "key": "coverId" + }, + { + "key": "coverScale", + "format": "number" + }, + { + "key": "coverType", + "format": "number" + }, + { + "key": "coverX", + "format": "number" + }, + { + "key": "coverY", + "format": "number" + }, + { + "key": "createdDate", + "format": "date" + }, + { + "key": "creator", + "format": "object" + }, + { + "key": "lastModifiedDate", + "format": "date" + }, + { + "key": "lastModifiedBy", + "format": "object" + }, + { + "key": "lastOpenedDate", + "format": "date" + }, + { + "key": "isFavorite", + "format": "checkbox" + }, + { + "key": "workspaceId", + "format": "object" + }, + { + "key": "links", + "format": "object" + }, + { + "key": "restrictions", + "format": "number" + }, + { + "key": "fileId", + "format": "shorttext" + }, + { + "key": "sizeInBytes", + "format": "number" + }, + { + "key": "lastUsedDate", + "format": "date" + }, + { + "key": "isArchived", + "format": "checkbox" + } + ], + "key": "page" + } + } +} \ No newline at end of file diff --git a/tests/integration/testdata/import/object with file block/bafyreigsuu2hfq2cyb7ae4fg6ogcinhqmojudvbb7ekhe5fhrp2rrsixl4.pb.txt b/tests/integration/testdata/import/object with file block/bafyreigsuu2hfq2cyb7ae4fg6ogcinhqmojudvbb7ekhe5fhrp2rrsixl4.pb.txt new file mode 100644 index 000000000..2a52797e8 --- /dev/null +++ b/tests/integration/testdata/import/object with file block/bafyreigsuu2hfq2cyb7ae4fg6ogcinhqmojudvbb7ekhe5fhrp2rrsixl4.pb.txt @@ -0,0 +1,229 @@ +{ + "sbType": "Page", + "snapshot": { + "data": { + "blocks": [ + { + "id": "bafyreigsuu2hfq2cyb7ae4fg6ogcinhqmojudvbb7ekhe5fhrp2rrsixl4", + "restrictions": { + + }, + "childrenIds": [ + "header", + "65d889564ac3df30bcfe9576", + "65d889804ac3df30bcfe9578" + ], + "smartblock": { + + } + }, + { + "id": "header", + "restrictions": { + "edit": true, + "remove": true, + "drag": true, + "dropOn": true + }, + "childrenIds": [ + "title", + "featuredRelations" + ], + "layout": { + "style": "Header" + } + }, + { + "id": "65d889564ac3df30bcfe9576", + "restrictions": { + + }, + "text": { + "marks": { + + } + } + }, + { + "id": "65d889804ac3df30bcfe9578", + "restrictions": { + + }, + "file": { + "name": "test_image.png", + "type": "Image", + "mime": "image/png", + "size": "473831", + "addedAt": "1708689793", + "targetObjectId": "bafyreie5dsqow6vcoqh5cahq4epetrm3tnmue5txgbdbyjojcgpase5soy", + "state": "Done" + } + }, + { + "id": "title", + "fields": { + "_detailsKey": [ + "name", + "done" + ] + }, + "restrictions": { + "remove": true, + "drag": true, + "dropOn": true + }, + "text": { + "style": "Title", + "marks": { + + } + } + }, + { + "id": "featuredRelations", + "restrictions": { + "remove": true, + "drag": true, + "dropOn": true + }, + "featuredRelations": { + + } + } + ], + "details": { + "backlinks": [ + ], + "createdDate": 1708689740, + "creator": "_participant_bafyreieo7b7uqpcyrl5djfeezwhrycrexqv2l2giugf67drbg536naiav4_3uxcyvge8is62_A6LrAEcm6LMpygR5LZ2yJ4izsNmzKrzGBJmYWKExtiJZbi7h", + "featuredRelations": [ + "type", + "backlinks" + ], + "id": "bafyreigsuu2hfq2cyb7ae4fg6ogcinhqmojudvbb7ekhe5fhrp2rrsixl4", + "lastModifiedBy": "_participant_bafyreieo7b7uqpcyrl5djfeezwhrycrexqv2l2giugf67drbg536naiav4_3uxcyvge8is62_A6LrAEcm6LMpygR5LZ2yJ4izsNmzKrzGBJmYWKExtiJZbi7h", + "lastModifiedDate": 1708689793, + "lastOpenedDate": 1708689789, + "layout": 0, + "links": [ + ], + "name": "Page with file block", + "restrictions": [ + ], + "snippet": "", + "spaceId": "bafyreieo7b7uqpcyrl5djfeezwhrycrexqv2l2giugf67drbg536naiav4.3uxcyvge8is62", + "type": "bafyreiemifn6w6xsd7g6lltwtcatunjuycybb5wkxrzwp3ljfoid7z6b74" + }, + "objectTypes": [ + "ot-page" + ], + "relationLinks": [ + { + "key": "id", + "format": "object" + }, + { + "key": "name", + "format": "shorttext" + }, + { + "key": "description" + }, + { + "key": "snippet" + }, + { + "key": "iconEmoji", + "format": "emoji" + }, + { + "key": "iconImage", + "format": "file" + }, + { + "key": "type", + "format": "object" + }, + { + "key": "layout", + "format": "number" + }, + { + "key": "layoutAlign", + "format": "number" + }, + { + "key": "coverId" + }, + { + "key": "coverScale", + "format": "number" + }, + { + "key": "coverType", + "format": "number" + }, + { + "key": "coverX", + "format": "number" + }, + { + "key": "coverY", + "format": "number" + }, + { + "key": "createdDate", + "format": "date" + }, + { + "key": "creator", + "format": "object" + }, + { + "key": "lastModifiedDate", + "format": "date" + }, + { + "key": "lastModifiedBy", + "format": "object" + }, + { + "key": "lastOpenedDate", + "format": "date" + }, + { + "key": "featuredRelations", + "format": "object" + }, + { + "key": "isFavorite", + "format": "checkbox" + }, + { + "key": "workspaceId", + "format": "object" + }, + { + "key": "spaceId", + "format": "object" + }, + { + "key": "links", + "format": "object" + }, + { + "key": "internalFlags", + "format": "number" + }, + { + "key": "restrictions", + "format": "number" + }, + { + "key": "backlinks", + "format": "object" + } + ] + } + } +} \ No newline at end of file