feature: Unfurl status links (#4033)

This commit is contained in:
Igor Sirotin 2023-10-13 13:25:34 +01:00 committed by GitHub
parent ac813ef5d8
commit aded258ccb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
43 changed files with 3854 additions and 1336 deletions

View File

@ -1 +1 @@
0.169.0 0.170.0

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -86,7 +86,7 @@ func _1557732988_initialize_dbDownSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1557732988_initialize_db.down.sql", size: 72, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1557732988_initialize_db.down.sql", size: 72, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x77, 0x40, 0x78, 0xb7, 0x71, 0x3c, 0x20, 0x3b, 0xc9, 0xb, 0x2f, 0x49, 0xe4, 0xff, 0x1c, 0x84, 0x54, 0xa1, 0x30, 0xe3, 0x90, 0xf8, 0x73, 0xda, 0xb0, 0x2a, 0xea, 0x8e, 0xf1, 0x82, 0xe7, 0xd2}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x77, 0x40, 0x78, 0xb7, 0x71, 0x3c, 0x20, 0x3b, 0xc9, 0xb, 0x2f, 0x49, 0xe4, 0xff, 0x1c, 0x84, 0x54, 0xa1, 0x30, 0xe3, 0x90, 0xf8, 0x73, 0xda, 0xb0, 0x2a, 0xea, 0x8e, 0xf1, 0x82, 0xe7, 0xd2}}
return a, nil return a, nil
} }
@ -106,7 +106,7 @@ func _1557732988_initialize_dbUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1557732988_initialize_db.up.sql", size: 278, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1557732988_initialize_db.up.sql", size: 278, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf5, 0x85, 0x41, 0x7a, 0xba, 0x4f, 0xa3, 0x43, 0xc0, 0x63, 0xfa, 0x2c, 0xd1, 0xc5, 0xbb, 0x20, 0xa0, 0x64, 0xa8, 0x3b, 0x65, 0x82, 0xa2, 0x14, 0x28, 0x18, 0x7c, 0x8b, 0x3a, 0x7a, 0xfd, 0xe0}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf5, 0x85, 0x41, 0x7a, 0xba, 0x4f, 0xa3, 0x43, 0xc0, 0x63, 0xfa, 0x2c, 0xd1, 0xc5, 0xbb, 0x20, 0xa0, 0x64, 0xa8, 0x3b, 0x65, 0x82, 0xa2, 0x14, 0x28, 0x18, 0x7c, 0x8b, 0x3a, 0x7a, 0xfd, 0xe0}}
return a, nil return a, nil
} }
@ -126,7 +126,7 @@ func staticGo() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "static.go", size: 178, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "static.go", size: 178, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xab, 0x8a, 0xf4, 0x27, 0x24, 0x9d, 0x2a, 0x1, 0x7b, 0x54, 0xea, 0xae, 0x4a, 0x35, 0x40, 0x92, 0xb5, 0xf9, 0xb3, 0x54, 0x3e, 0x3a, 0x1a, 0x2b, 0xae, 0xfb, 0x9e, 0x82, 0xeb, 0x4c, 0xf, 0x6}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xab, 0x8a, 0xf4, 0x27, 0x24, 0x9d, 0x2a, 0x1, 0x7b, 0x54, 0xea, 0xae, 0x4a, 0x35, 0x40, 0x92, 0xb5, 0xf9, 0xb3, 0x54, 0x3e, 0x3a, 0x1a, 0x2b, 0xae, 0xfb, 0x9e, 0x82, 0xeb, 0x4c, 0xf, 0x6}}
return a, nil return a, nil
} }

View File

@ -96,7 +96,7 @@ func _0001_accountsDownSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "0001_accounts.down.sql", size: 21, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "0001_accounts.down.sql", size: 21, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd2, 0x61, 0x4c, 0x18, 0xfc, 0xc, 0xdf, 0x5c, 0x1f, 0x5e, 0xd3, 0xbd, 0xfa, 0x12, 0x5e, 0x8d, 0x8d, 0x8b, 0xb9, 0x5f, 0x99, 0x46, 0x63, 0xa5, 0xe3, 0xa6, 0x8a, 0x4, 0xf1, 0x73, 0x8a, 0xe9}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd2, 0x61, 0x4c, 0x18, 0xfc, 0xc, 0xdf, 0x5c, 0x1f, 0x5e, 0xd3, 0xbd, 0xfa, 0x12, 0x5e, 0x8d, 0x8d, 0x8b, 0xb9, 0x5f, 0x99, 0x46, 0x63, 0xa5, 0xe3, 0xa6, 0x8a, 0x4, 0xf1, 0x73, 0x8a, 0xe9}}
return a, nil return a, nil
} }
@ -116,7 +116,7 @@ func _0001_accountsUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "0001_accounts.up.sql", size: 163, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "0001_accounts.up.sql", size: 163, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf2, 0xfa, 0x99, 0x8e, 0x96, 0xb3, 0x13, 0x6c, 0x1f, 0x6, 0x27, 0xc5, 0xd2, 0xd4, 0xe0, 0xa5, 0x26, 0x82, 0xa7, 0x26, 0xf2, 0x68, 0x9d, 0xed, 0x9c, 0x3d, 0xbb, 0xdc, 0x37, 0x28, 0xbc, 0x1}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf2, 0xfa, 0x99, 0x8e, 0x96, 0xb3, 0x13, 0x6c, 0x1f, 0x6, 0x27, 0xc5, 0xd2, 0xd4, 0xe0, 0xa5, 0x26, 0x82, 0xa7, 0x26, 0xf2, 0x68, 0x9d, 0xed, 0x9c, 0x3d, 0xbb, 0xdc, 0x37, 0x28, 0xbc, 0x1}}
return a, nil return a, nil
} }
@ -136,7 +136,7 @@ func _1605007189_identity_imagesDownSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1605007189_identity_images.down.sql", size: 29, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1605007189_identity_images.down.sql", size: 29, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2f, 0xcf, 0xa7, 0xae, 0xd5, 0x4f, 0xcd, 0x14, 0x63, 0x9, 0xbe, 0x39, 0x49, 0x18, 0x96, 0xb2, 0xa3, 0x8, 0x7d, 0x41, 0xdb, 0x50, 0x5d, 0xf5, 0x4d, 0xa2, 0xd, 0x8f, 0x57, 0x79, 0x77, 0x67}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2f, 0xcf, 0xa7, 0xae, 0xd5, 0x4f, 0xcd, 0x14, 0x63, 0x9, 0xbe, 0x39, 0x49, 0x18, 0x96, 0xb2, 0xa3, 0x8, 0x7d, 0x41, 0xdb, 0x50, 0x5d, 0xf5, 0x4d, 0xa2, 0xd, 0x8f, 0x57, 0x79, 0x77, 0x67}}
return a, nil return a, nil
} }
@ -156,7 +156,7 @@ func _1605007189_identity_imagesUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1605007189_identity_images.up.sql", size: 268, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1605007189_identity_images.up.sql", size: 268, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x50, 0xb6, 0xc1, 0x5c, 0x76, 0x72, 0x6b, 0x22, 0x34, 0xdc, 0x96, 0xdc, 0x2b, 0xfd, 0x2d, 0xbe, 0xcc, 0x1e, 0xd4, 0x5, 0x93, 0xd, 0xc2, 0x51, 0xf3, 0x1a, 0xef, 0x2b, 0x26, 0xa4, 0xeb, 0x65}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x50, 0xb6, 0xc1, 0x5c, 0x76, 0x72, 0x6b, 0x22, 0x34, 0xdc, 0x96, 0xdc, 0x2b, 0xfd, 0x2d, 0xbe, 0xcc, 0x1e, 0xd4, 0x5, 0x93, 0xd, 0xc2, 0x51, 0xf3, 0x1a, 0xef, 0x2b, 0x26, 0xa4, 0xeb, 0x65}}
return a, nil return a, nil
} }
@ -176,7 +176,7 @@ func _1606224181_drop_photo_path_from_accountsDownSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1606224181_drop_photo_path_from_accounts.down.sql", size: 892, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1606224181_drop_photo_path_from_accounts.down.sql", size: 892, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x90, 0x24, 0x17, 0x7, 0x80, 0x93, 0x6f, 0x8d, 0x5d, 0xaa, 0x8c, 0x79, 0x15, 0x5d, 0xb3, 0x19, 0xd7, 0xd8, 0x39, 0xf9, 0x3a, 0x63, 0x8f, 0x81, 0x15, 0xb6, 0xd6, 0x9a, 0x37, 0xa8, 0x8e, 0x9b}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x90, 0x24, 0x17, 0x7, 0x80, 0x93, 0x6f, 0x8d, 0x5d, 0xaa, 0x8c, 0x79, 0x15, 0x5d, 0xb3, 0x19, 0xd7, 0xd8, 0x39, 0xf9, 0x3a, 0x63, 0x8f, 0x81, 0x15, 0xb6, 0xd6, 0x9a, 0x37, 0xa8, 0x8e, 0x9b}}
return a, nil return a, nil
} }
@ -196,7 +196,7 @@ func _1606224181_drop_photo_path_from_accountsUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1606224181_drop_photo_path_from_accounts.up.sql", size: 866, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1606224181_drop_photo_path_from_accounts.up.sql", size: 866, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xff, 0x4c, 0x97, 0xee, 0xef, 0x82, 0xb8, 0x6c, 0x71, 0xbb, 0x50, 0x7b, 0xe6, 0xd9, 0x22, 0x31, 0x7c, 0x1a, 0xfe, 0x91, 0x28, 0xf6, 0x6, 0x36, 0xe, 0xb1, 0xf1, 0xc8, 0x25, 0xac, 0x7e, 0xd6}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xff, 0x4c, 0x97, 0xee, 0xef, 0x82, 0xb8, 0x6c, 0x71, 0xbb, 0x50, 0x7b, 0xe6, 0xd9, 0x22, 0x31, 0x7c, 0x1a, 0xfe, 0x91, 0x28, 0xf6, 0x6, 0x36, 0xe, 0xb1, 0xf1, 0xc8, 0x25, 0xac, 0x7e, 0xd6}}
return a, nil return a, nil
} }
@ -216,7 +216,7 @@ func _1648646095_image_clockDownSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1648646095_image_clock.down.sql", size: 939, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1648646095_image_clock.down.sql", size: 939, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4d, 0xa8, 0x1f, 0xf, 0xe0, 0xd7, 0xc9, 0x68, 0x98, 0xd8, 0x37, 0xb8, 0xba, 0x9e, 0xb2, 0x19, 0xf3, 0xc4, 0x73, 0x80, 0x3, 0x17, 0x2a, 0x53, 0x68, 0x10, 0x13, 0x54, 0x99, 0xb1, 0xf5, 0x1c}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4d, 0xa8, 0x1f, 0xf, 0xe0, 0xd7, 0xc9, 0x68, 0x98, 0xd8, 0x37, 0xb8, 0xba, 0x9e, 0xb2, 0x19, 0xf3, 0xc4, 0x73, 0x80, 0x3, 0x17, 0x2a, 0x53, 0x68, 0x10, 0x13, 0x54, 0x99, 0xb1, 0xf5, 0x1c}}
return a, nil return a, nil
} }
@ -236,7 +236,7 @@ func _1648646095_image_clockUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1648646095_image_clock.up.sql", size: 69, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1648646095_image_clock.up.sql", size: 69, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x98, 0xa6, 0xa4, 0x4e, 0x4e, 0xca, 0x17, 0x56, 0xea, 0xfb, 0xf0, 0xa9, 0x81, 0x95, 0xe, 0x80, 0x52, 0x1, 0x47, 0x9b, 0xde, 0x14, 0xfa, 0x72, 0xc9, 0x62, 0x6f, 0x24, 0xa2, 0xc, 0x32, 0x50}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x98, 0xa6, 0xa4, 0x4e, 0x4e, 0xca, 0x17, 0x56, 0xea, 0xfb, 0xf0, 0xa9, 0x81, 0x95, 0xe, 0x80, 0x52, 0x1, 0x47, 0x9b, 0xde, 0x14, 0xfa, 0x72, 0xc9, 0x62, 0x6f, 0x24, 0xa2, 0xc, 0x32, 0x50}}
return a, nil return a, nil
} }
@ -256,7 +256,7 @@ func _1649317600_add_color_hashUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1649317600_add_color_hash.up.sql", size: 201, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1649317600_add_color_hash.up.sql", size: 201, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1a, 0xf, 0x37, 0x6d, 0xcf, 0x99, 0xc9, 0x2e, 0xdc, 0x70, 0x11, 0xb4, 0x36, 0x26, 0x4f, 0x39, 0xa8, 0x44, 0xf, 0xcb, 0xcc, 0x81, 0x74, 0x7a, 0x88, 0xaa, 0x54, 0x8c, 0xc4, 0xe, 0x56, 0x4f}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1a, 0xf, 0x37, 0x6d, 0xcf, 0x99, 0xc9, 0x2e, 0xdc, 0x70, 0x11, 0xb4, 0x36, 0x26, 0x4f, 0x39, 0xa8, 0x44, 0xf, 0xcb, 0xcc, 0x81, 0x74, 0x7a, 0x88, 0xaa, 0x54, 0x8c, 0xc4, 0xe, 0x56, 0x4f}}
return a, nil return a, nil
} }
@ -276,7 +276,7 @@ func _1660238799_accounts_kdfUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1660238799_accounts_kdf.up.sql", size: 115, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1660238799_accounts_kdf.up.sql", size: 115, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xdf, 0xe6, 0x7a, 0x69, 0x25, 0x42, 0x3b, 0x9c, 0x20, 0xf5, 0xcb, 0xae, 0xb0, 0xb3, 0x1b, 0x66, 0xc2, 0x5d, 0xd0, 0xc1, 0x59, 0xe8, 0xa9, 0xc5, 0x69, 0x58, 0x8f, 0xae, 0xe6, 0xd1, 0x4c, 0x53}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xdf, 0xe6, 0x7a, 0x69, 0x25, 0x42, 0x3b, 0x9c, 0x20, 0xf5, 0xcb, 0xae, 0xb0, 0xb3, 0x1b, 0x66, 0xc2, 0x5d, 0xd0, 0xc1, 0x59, 0xe8, 0xa9, 0xc5, 0x69, 0x58, 0x8f, 0xae, 0xe6, 0xd1, 0x4c, 0x53}}
return a, nil return a, nil
} }
@ -296,7 +296,7 @@ func _1679505708_add_customization_colorUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1679505708_add_customization_color.up.sql", size: 78, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1679505708_add_customization_color.up.sql", size: 78, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa9, 0xe1, 0x3d, 0xaa, 0x5d, 0x35, 0x87, 0x8a, 0x8b, 0xe9, 0x4a, 0xa6, 0x7b, 0x85, 0xbc, 0x33, 0x11, 0xc7, 0x7d, 0x61, 0xac, 0x65, 0x59, 0xda, 0x32, 0x59, 0x68, 0x9d, 0xa1, 0x10, 0x7b, 0xa9}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa9, 0xe1, 0x3d, 0xaa, 0x5d, 0x35, 0x87, 0x8a, 0x8b, 0xe9, 0x4a, 0xa6, 0x7b, 0x85, 0xbc, 0x33, 0x11, 0xc7, 0x7d, 0x61, 0xac, 0x65, 0x59, 0xda, 0x32, 0x59, 0x68, 0x9d, 0xa1, 0x10, 0x7b, 0xa9}}
return a, nil return a, nil
} }
@ -316,7 +316,7 @@ func _1687853321_add_customization_color_updated_atUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1687853321_add_customization_color_updated_at.up.sql", size: 80, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1687853321_add_customization_color_updated_at.up.sql", size: 80, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa8, 0xc2, 0x9, 0xec, 0xf4, 0xd1, 0x46, 0x29, 0xc5, 0xce, 0x4d, 0xd4, 0xf, 0x9c, 0xfa, 0x62, 0x1, 0x29, 0xe6, 0xd2, 0xd5, 0xe, 0xf0, 0x27, 0x81, 0x4a, 0x82, 0x25, 0x5f, 0x67, 0xff, 0xd1}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa8, 0xc2, 0x9, 0xec, 0xf4, 0xd1, 0x46, 0x29, 0xc5, 0xce, 0x4d, 0xd4, 0xf, 0x9c, 0xfa, 0x62, 0x1, 0x29, 0xe6, 0xd2, 0xd5, 0xe, 0xf0, 0x27, 0x81, 0x4a, 0x82, 0x25, 0x5f, 0x67, 0xff, 0xd1}}
return a, nil return a, nil
} }
@ -336,7 +336,7 @@ func docGo() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "doc.go", size: 74, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "doc.go", size: 74, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xde, 0x7c, 0x28, 0xcd, 0x47, 0xf2, 0xfa, 0x7c, 0x51, 0x2d, 0xd8, 0x38, 0xb, 0xb0, 0x34, 0x9d, 0x4c, 0x62, 0xa, 0x9e, 0x28, 0xc3, 0x31, 0x23, 0xd9, 0xbb, 0x89, 0x9f, 0xa0, 0x89, 0x1f, 0xe8}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xde, 0x7c, 0x28, 0xcd, 0x47, 0xf2, 0xfa, 0x7c, 0x51, 0x2d, 0xd8, 0x38, 0xb, 0xb0, 0x34, 0x9d, 0x4c, 0x62, 0xa, 0x9e, 0x28, 0xc3, 0x31, 0x23, 0xd9, 0xbb, 0x89, 0x9f, 0xa0, 0x89, 0x1f, 0xe8}}
return a, nil return a, nil
} }

View File

@ -86,7 +86,7 @@ func _1619446565_postgres_make_anon_metrics_tableDownSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1619446565_postgres_make_anon_metrics_table.down.sql", size: 24, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1619446565_postgres_make_anon_metrics_table.down.sql", size: 24, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x75, 0xea, 0x1, 0x74, 0xe6, 0xa3, 0x11, 0xd0, 0x86, 0x87, 0x7e, 0x31, 0xb4, 0x1a, 0x27, 0x5d, 0xda, 0x77, 0xa3, 0xf5, 0x1d, 0x88, 0x79, 0xcf, 0xd5, 0x95, 0x75, 0xd, 0x47, 0xa1, 0x90, 0x5}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x75, 0xea, 0x1, 0x74, 0xe6, 0xa3, 0x11, 0xd0, 0x86, 0x87, 0x7e, 0x31, 0xb4, 0x1a, 0x27, 0x5d, 0xda, 0x77, 0xa3, 0xf5, 0x1d, 0x88, 0x79, 0xcf, 0xd5, 0x95, 0x75, 0xd, 0x47, 0xa1, 0x90, 0x5}}
return a, nil return a, nil
} }
@ -106,7 +106,7 @@ func _1619446565_postgres_make_anon_metrics_tableUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1619446565_postgres_make_anon_metrics_table.up.sql", size: 443, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1619446565_postgres_make_anon_metrics_table.up.sql", size: 443, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd5, 0xdc, 0x72, 0x28, 0x3c, 0xf6, 0x94, 0xb0, 0x47, 0x3d, 0xca, 0x55, 0x3d, 0xf7, 0x83, 0xb8, 0x7d, 0x2f, 0x1e, 0x98, 0xb7, 0xde, 0xa, 0xff, 0xa0, 0x52, 0x60, 0x83, 0x56, 0xc5, 0xd1, 0xa2}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd5, 0xdc, 0x72, 0x28, 0x3c, 0xf6, 0x94, 0xb0, 0x47, 0x3d, 0xca, 0x55, 0x3d, 0xf7, 0x83, 0xb8, 0x7d, 0x2f, 0x1e, 0x98, 0xb7, 0xde, 0xa, 0xff, 0xa0, 0x52, 0x60, 0x83, 0x56, 0xc5, 0xd1, 0xa2}}
return a, nil return a, nil
} }
@ -126,7 +126,7 @@ func docGo() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "doc.go", size: 380, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "doc.go", size: 380, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x49, 0x1, 0xd4, 0xd6, 0xc7, 0x44, 0xd4, 0xfd, 0x7b, 0x69, 0x1f, 0xe3, 0xe, 0x48, 0x14, 0x99, 0xf0, 0x8e, 0x43, 0xae, 0x54, 0x64, 0xa2, 0x8b, 0x82, 0x1c, 0x2b, 0xb, 0xec, 0xf5, 0xb3, 0xfc}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x49, 0x1, 0xd4, 0xd6, 0xc7, 0x44, 0xd4, 0xfd, 0x7b, 0x69, 0x1f, 0xe3, 0xe, 0x48, 0x14, 0x99, 0xf0, 0x8e, 0x43, 0xae, 0x54, 0x64, 0xa2, 0x8b, 0x82, 0x1c, 0x2b, 0xb, 0xec, 0xf5, 0xb3, 0xfc}}
return a, nil return a, nil
} }

View File

@ -0,0 +1,28 @@
package common
type MediaServerImageIDPrefix string
type MediaServerImageIDPostfix string
type MediaServerImageID string
func CreateImageID(prefix MediaServerImageIDPrefix, postfix MediaServerImageIDPostfix) MediaServerImageID {
return MediaServerImageID(string(prefix) + string(postfix))
}
const (
MediaServerIconPostfix MediaServerImageIDPostfix = "icon"
MediaServerBannerPostfix MediaServerImageIDPostfix = "banner"
)
const (
MediaServerContactPrefix MediaServerImageIDPrefix = "contact-"
MediaServerCommunityPrefix MediaServerImageIDPrefix = "community-"
MediaServerChannelCommunityPrefix MediaServerImageIDPrefix = "community-channel-"
)
const (
MediaServerContactIcon = MediaServerImageID(string(MediaServerContactPrefix) + string(MediaServerIconPostfix))
MediaServerCommunityIcon = MediaServerImageID(string(MediaServerCommunityPrefix) + string(MediaServerIconPostfix))
MediaServerCommunityBanner = MediaServerImageID(string(MediaServerCommunityPrefix) + string(MediaServerBannerPostfix))
MediaServerChannelCommunityIcon = MediaServerImageID(string(MediaServerChannelCommunityPrefix) + string(MediaServerIconPostfix))
MediaServerChannelCommunityBanner = MediaServerImageID(string(MediaServerChannelCommunityPrefix) + string(MediaServerBannerPostfix))
)

View File

@ -8,7 +8,6 @@ import (
"errors" "errors"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"net/url"
"os" "os"
"strings" "strings"
"unicode" "unicode"
@ -82,26 +81,6 @@ const (
ContactVerificationStateCanceled ContactVerificationStateCanceled
) )
type LinkPreviewThumbnail struct {
Width int `json:"width"`
Height int `json:"height"`
// Non-empty when the thumbnail is available via the media server, i.e. after
// the chat message is sent.
URL string `json:"url,omitempty"`
// Non-empty when the thumbnail payload needs to be shared with the client,
// but before it has been persisted.
DataURI string `json:"dataUri,omitempty"`
}
type LinkPreview struct {
Type protobuf.UnfurledLink_LinkType `json:"type"`
URL string `json:"url"`
Hostname string `json:"hostname"`
Title string `json:"title,omitempty"`
Description string `json:"description,omitempty"`
Thumbnail LinkPreviewThumbnail `json:"thumbnail,omitempty"`
}
const EveryoneMentionTag = "0x00001" const EveryoneMentionTag = "0x00001"
type CommandParameters struct { type CommandParameters struct {
@ -219,8 +198,9 @@ type Message struct {
Replied bool `json:"replied"` Replied bool `json:"replied"`
// Links is an array of links within given message // Links is an array of links within given message
Links []string Links []string
LinkPreviews []LinkPreview `json:"linkPreviews"` LinkPreviews []LinkPreview `json:"linkPreviews"`
StatusLinkPreviews []StatusLinkPreview `json:"statusLinkPreviews"`
// EditedAt indicates the clock value it was edited // EditedAt indicates the clock value it was edited
EditedAt uint64 `json:"editedAt"` EditedAt uint64 `json:"editedAt"`
@ -292,6 +272,7 @@ func (m *Message) MarshalJSON() ([]byte, error) {
Replied bool `json:"replied,omitempty"` Replied bool `json:"replied,omitempty"`
Links []string `json:"links,omitempty"` Links []string `json:"links,omitempty"`
LinkPreviews []LinkPreview `json:"linkPreviews,omitempty"` LinkPreviews []LinkPreview `json:"linkPreviews,omitempty"`
StatusLinkPreviews []StatusLinkPreview `json:"statusLinkPreviews,omitempty"`
EditedAt uint64 `json:"editedAt,omitempty"` EditedAt uint64 `json:"editedAt,omitempty"`
Deleted bool `json:"deleted,omitempty"` Deleted bool `json:"deleted,omitempty"`
DeletedBy string `json:"deletedBy,omitempty"` DeletedBy string `json:"deletedBy,omitempty"`
@ -331,6 +312,7 @@ func (m *Message) MarshalJSON() ([]byte, error) {
Replied: m.Replied, Replied: m.Replied,
Links: m.Links, Links: m.Links,
LinkPreviews: m.LinkPreviews, LinkPreviews: m.LinkPreviews,
StatusLinkPreviews: m.StatusLinkPreviews,
MessageType: m.MessageType, MessageType: m.MessageType,
CommandParameters: m.CommandParameters, CommandParameters: m.CommandParameters,
GapParameters: m.GapParameters, GapParameters: m.GapParameters,
@ -763,98 +745,6 @@ func (m *Message) LoadImage() error {
return nil return nil
} }
func isValidLinkPreviewThumbnail(thumbnail LinkPreviewThumbnail) bool {
return (thumbnail.DataURI == "" && thumbnail.Width == 0 && thumbnail.Height == 0) ||
(thumbnail.DataURI != "" && thumbnail.Width > 0 && thumbnail.Height > 0)
}
func isValidLinkPreviewForProto(preview LinkPreview) bool {
switch preview.Type {
case protobuf.UnfurledLink_IMAGE:
return preview.URL != "" && isValidLinkPreviewThumbnail(preview.Thumbnail)
default: // Validate as a link type by default.
return preview.Title != "" && preview.URL != "" && isValidLinkPreviewThumbnail(preview.Thumbnail)
}
}
// ConvertLinkPreviewsToProto expects previews to be correctly sent by the
// client because we can't attempt to re-unfurl URLs at this point (it's
// actually undesirable). We run a basic validation as an additional safety net.
func (m *Message) ConvertLinkPreviewsToProto() ([]*protobuf.UnfurledLink, error) {
if len(m.LinkPreviews) == 0 {
return nil, nil
}
unfurledLinks := make([]*protobuf.UnfurledLink, 0, len(m.LinkPreviews))
for _, preview := range m.LinkPreviews {
// Do not process subsequent previews because we do expect all previews to
// be valid at this stage.
if !isValidLinkPreviewForProto(preview) {
return nil, fmt.Errorf("invalid link preview, url='%s'", preview.URL)
}
var payload []byte
var err error
if preview.Thumbnail.DataURI != "" {
payload, err = images.GetPayloadFromURI(preview.Thumbnail.DataURI)
if err != nil {
return nil, fmt.Errorf("could not get data URI payload, url='%s': %w", preview.URL, err)
}
}
ul := &protobuf.UnfurledLink{
Type: preview.Type,
Url: preview.URL,
Title: preview.Title,
Description: preview.Description,
ThumbnailWidth: uint32(preview.Thumbnail.Width),
ThumbnailHeight: uint32(preview.Thumbnail.Height),
ThumbnailPayload: payload,
}
unfurledLinks = append(unfurledLinks, ul)
}
return unfurledLinks, nil
}
func (m *Message) ConvertFromProtoToLinkPreviews(makeMediaServerURL func(msgID string, previewURL string) string) []LinkPreview {
var links []*protobuf.UnfurledLink
if links = m.GetUnfurledLinks(); links == nil {
return nil
}
previews := make([]LinkPreview, 0, len(links))
for _, link := range links {
parsedURL, err := url.Parse(link.Url)
var hostname string
// URL parsing in Go can fail with URLs that weren't correctly URL encoded.
// This shouldn't happen in general, but if an error happens we just reuse
// the full URL.
if err != nil {
hostname = link.Url
} else {
hostname = parsedURL.Hostname()
}
lp := LinkPreview{
Description: link.Description,
Hostname: hostname,
Title: link.Title,
Type: link.Type,
URL: link.Url,
}
if payload := link.GetThumbnailPayload(); payload != nil {
lp.Thumbnail.Width = int(link.ThumbnailWidth)
lp.Thumbnail.Height = int(link.ThumbnailHeight)
lp.Thumbnail.URL = makeMediaServerURL(m.ID, link.Url)
}
previews = append(previews, lp)
}
return previews
}
func (m *Message) SetAlbumIDAndImagesCount(albumID string, imagesCount uint32) error { func (m *Message) SetAlbumIDAndImagesCount(albumID string, imagesCount uint32) error {
imageMessage := m.GetImage() imageMessage := m.GetImage()
if imageMessage == nil { if imageMessage == nil {

View File

@ -0,0 +1,470 @@
package common
import (
"fmt"
"net/url"
"github.com/status-im/status-go/images"
"github.com/status-im/status-go/protocol/protobuf"
)
type MakeMediaServerURLType func(msgID string, previewURL string, imageID MediaServerImageID) string
type MakeMediaServerURLMessageWrapperType func(previewURL string, imageID MediaServerImageID) string
type LinkPreviewThumbnail struct {
Width int `json:"width"`
Height int `json:"height"`
// Non-empty when the thumbnail is available via the media server, i.e. after
// the chat message is sent.
URL string `json:"url,omitempty"`
// Non-empty when the thumbnail payload needs to be shared with the client,
// but before it has been persisted.
DataURI string `json:"dataUri,omitempty"`
}
type LinkPreview struct {
Type protobuf.UnfurledLink_LinkType `json:"type"`
URL string `json:"url"`
Hostname string `json:"hostname"`
Title string `json:"title,omitempty"`
Description string `json:"description,omitempty"`
Thumbnail LinkPreviewThumbnail `json:"thumbnail,omitempty"`
}
type StatusContactLinkPreview struct {
PublicKey string `json:"publicKey"`
DisplayName string `json:"displayName"`
Description string `json:"description"`
Icon LinkPreviewThumbnail `json:"icon,omitempty"`
}
type StatusCommunityLinkPreview struct {
CommunityID string `json:"communityId"`
DisplayName string `json:"displayName"`
Description string `json:"description"`
MembersCount uint32 `json:"membersCount"`
Color string `json:"color"`
Icon LinkPreviewThumbnail `json:"icon,omitempty"`
Banner LinkPreviewThumbnail `json:"banner,omitempty"`
}
type StatusCommunityChannelLinkPreview struct {
ChannelUUID string `json:"channelUuid"`
Emoji string `json:"emoji"`
DisplayName string `json:"displayName"`
Description string `json:"description"`
Color string `json:"color"`
Community *StatusCommunityLinkPreview `json:"community"`
}
type StatusLinkPreview struct {
URL string `json:"url,omitempty"`
Contact *StatusContactLinkPreview `json:"contact,omitempty"`
Community *StatusCommunityLinkPreview `json:"community,omitempty"`
Channel *StatusCommunityChannelLinkPreview `json:"channel,omitempty"`
}
func (thumbnail *LinkPreviewThumbnail) IsEmpty() bool {
return thumbnail.Width == 0 &&
thumbnail.Height == 0 &&
thumbnail.URL == "" &&
thumbnail.DataURI == ""
}
func (thumbnail *LinkPreviewThumbnail) clear() {
thumbnail.Width = 0
thumbnail.Height = 0
thumbnail.URL = ""
thumbnail.DataURI = ""
}
func (thumbnail *LinkPreviewThumbnail) validateForProto() error {
if thumbnail.DataURI == "" {
if thumbnail.Width == 0 && thumbnail.Height == 0 {
return nil
}
return fmt.Errorf("dataUri is empty, but width/height are not zero")
}
if thumbnail.Width == 0 || thumbnail.Height == 0 {
return fmt.Errorf("dataUri is not empty, but width/heigth are zero")
}
return nil
}
func (thumbnail *LinkPreviewThumbnail) convertToProto() (*protobuf.UnfurledLinkThumbnail, error) {
var payload []byte
var err error
if thumbnail.DataURI != "" {
payload, err = images.GetPayloadFromURI(thumbnail.DataURI)
if err != nil {
return nil, fmt.Errorf("could not get data URI payload, url='%s': %w", thumbnail.URL, err)
}
}
return &protobuf.UnfurledLinkThumbnail{
Width: uint32(thumbnail.Width),
Height: uint32(thumbnail.Height),
Payload: payload,
}, nil
}
func (thumbnail *LinkPreviewThumbnail) loadFromProto(
input *protobuf.UnfurledLinkThumbnail,
URL string,
imageID MediaServerImageID,
makeMediaServerURL MakeMediaServerURLMessageWrapperType) {
thumbnail.clear()
thumbnail.Width = int(input.Width)
thumbnail.Height = int(input.Height)
if len(input.Payload) > 0 {
thumbnail.URL = makeMediaServerURL(URL, imageID)
}
}
func (preview *LinkPreview) validateForProto() error {
switch preview.Type {
case protobuf.UnfurledLink_IMAGE:
if preview.URL == "" {
return fmt.Errorf("empty url")
}
if err := preview.Thumbnail.validateForProto(); err != nil {
return fmt.Errorf("thumbnail is not valid for proto: %w", err)
}
return nil
default: // Validate as a link type by default.
if preview.Title == "" {
return fmt.Errorf("title is empty")
}
if preview.URL == "" {
return fmt.Errorf("url is empty")
}
if err := preview.Thumbnail.validateForProto(); err != nil {
return fmt.Errorf("thumbnail is not valid for proto: %w", err)
}
return nil
}
}
func (preview *StatusLinkPreview) validateForProto() error {
if preview.URL == "" {
return fmt.Errorf("url can't be empty")
}
// At least and only one of Contact/Community/Channel should be present in the preview
if preview.Contact != nil && preview.Community != nil {
return fmt.Errorf("both contact and community are set at the same time")
}
if preview.Community != nil && preview.Channel != nil {
return fmt.Errorf("both community and channel are set at the same time")
}
if preview.Channel != nil && preview.Contact != nil {
return fmt.Errorf("both contact and channel are set at the same time")
}
if preview.Contact == nil && preview.Community == nil && preview.Channel == nil {
return fmt.Errorf("none of contact/community/channel are set")
}
if preview.Contact != nil {
if preview.Contact.PublicKey == "" {
return fmt.Errorf("contact publicKey is empty")
}
if err := preview.Contact.Icon.validateForProto(); err != nil {
return fmt.Errorf("contact icon invalid: %w", err)
}
return nil
}
if preview.Community != nil {
return preview.Community.validateForProto()
}
if preview.Channel != nil {
if preview.Channel.ChannelUUID == "" {
return fmt.Errorf("channelUuid is empty")
}
if preview.Channel.Community == nil {
return fmt.Errorf("channel community is nil")
}
if err := preview.Channel.Community.validateForProto(); err != nil {
return fmt.Errorf("channel community is not valid: %w", err)
}
return nil
}
return nil
}
func (preview *StatusCommunityLinkPreview) validateForProto() error {
if preview == nil {
return fmt.Errorf("community preview is empty")
}
if preview.CommunityID == "" {
return fmt.Errorf("communityId is empty")
}
if err := preview.Icon.validateForProto(); err != nil {
return fmt.Errorf("community icon is invalid: %w", err)
}
if err := preview.Banner.validateForProto(); err != nil {
return fmt.Errorf("community banner is invalid: %w", err)
}
return nil
}
func (preview *StatusCommunityLinkPreview) convertToProto() (*protobuf.UnfurledStatusCommunityLink, error) {
if preview == nil {
return nil, nil
}
icon, err := preview.Icon.convertToProto()
if err != nil {
return nil, err
}
banner, err := preview.Banner.convertToProto()
if err != nil {
return nil, err
}
community := &protobuf.UnfurledStatusCommunityLink{
CommunityId: []byte(preview.CommunityID),
DisplayName: preview.DisplayName,
Description: preview.Description,
MembersCount: preview.MembersCount,
Color: preview.Color,
Icon: icon,
Banner: banner,
}
return community, nil
}
func (preview *StatusCommunityLinkPreview) loadFromProto(c *protobuf.UnfurledStatusCommunityLink,
URL string, thumbnailPrefix MediaServerImageIDPrefix,
makeMediaServerURL MakeMediaServerURLMessageWrapperType) {
preview.CommunityID = string(c.CommunityId)
preview.DisplayName = c.DisplayName
preview.Description = c.Description
preview.MembersCount = c.MembersCount
preview.Color = c.Color
preview.Icon.clear()
preview.Banner.clear()
if icon := c.GetIcon(); icon != nil {
preview.Icon.loadFromProto(icon, URL, CreateImageID(thumbnailPrefix, MediaServerIconPostfix), makeMediaServerURL)
}
if banner := c.GetBanner(); banner != nil {
preview.Banner.loadFromProto(banner, URL, CreateImageID(thumbnailPrefix, MediaServerBannerPostfix), makeMediaServerURL)
}
}
// ConvertLinkPreviewsToProto expects previews to be correctly sent by the
// client because we can't attempt to re-unfurl URLs at this point (it's
// actually undesirable). We run a basic validation as an additional safety net.
func (m *Message) ConvertLinkPreviewsToProto() ([]*protobuf.UnfurledLink, error) {
if len(m.LinkPreviews) == 0 {
return nil, nil
}
unfurledLinks := make([]*protobuf.UnfurledLink, 0, len(m.LinkPreviews))
for _, preview := range m.LinkPreviews {
// Do not process subsequent previews because we do expect all previews to
// be valid at this stage.
if err := preview.validateForProto(); err != nil {
return nil, fmt.Errorf("invalid link preview, url='%s': %w", preview.URL, err)
}
var payload []byte
var err error
if preview.Thumbnail.DataURI != "" {
payload, err = images.GetPayloadFromURI(preview.Thumbnail.DataURI)
if err != nil {
return nil, fmt.Errorf("could not get data URI payload, url='%s': %w", preview.URL, err)
}
}
ul := &protobuf.UnfurledLink{
Type: preview.Type,
Url: preview.URL,
Title: preview.Title,
Description: preview.Description,
ThumbnailWidth: uint32(preview.Thumbnail.Width),
ThumbnailHeight: uint32(preview.Thumbnail.Height),
ThumbnailPayload: payload,
}
unfurledLinks = append(unfurledLinks, ul)
}
return unfurledLinks, nil
}
func (m *Message) ConvertFromProtoToLinkPreviews(makeMediaServerURL func(msgID string, previewURL string) string) []LinkPreview {
var links []*protobuf.UnfurledLink
if links = m.GetUnfurledLinks(); links == nil {
return nil
}
previews := make([]LinkPreview, 0, len(links))
for _, link := range links {
parsedURL, err := url.Parse(link.Url)
var hostname string
// URL parsing in Go can fail with URLs that weren't correctly URL encoded.
// This shouldn't happen in general, but if an error happens we just reuse
// the full URL.
if err != nil {
hostname = link.Url
} else {
hostname = parsedURL.Hostname()
}
lp := LinkPreview{
Description: link.Description,
Hostname: hostname,
Title: link.Title,
Type: link.Type,
URL: link.Url,
}
mediaURL := ""
if len(link.ThumbnailPayload) > 0 {
mediaURL = makeMediaServerURL(m.ID, link.Url)
}
if link.GetThumbnailPayload() != nil {
lp.Thumbnail.Width = int(link.ThumbnailWidth)
lp.Thumbnail.Height = int(link.ThumbnailHeight)
lp.Thumbnail.URL = mediaURL
}
previews = append(previews, lp)
}
return previews
}
func (m *Message) ConvertStatusLinkPreviewsToProto() (*protobuf.UnfurledStatusLinks, error) {
if len(m.StatusLinkPreviews) == 0 {
return nil, nil
}
unfurledLinks := make([]*protobuf.UnfurledStatusLink, 0, len(m.StatusLinkPreviews))
for _, preview := range m.StatusLinkPreviews {
// We expect all previews to be valid at this stage
if err := preview.validateForProto(); err != nil {
return nil, fmt.Errorf("invalid status link preview, url='%s': %w", preview.URL, err)
}
ul := &protobuf.UnfurledStatusLink{
Url: preview.URL,
}
if preview.Contact != nil {
icon, err := preview.Contact.Icon.convertToProto()
if err != nil {
return nil, err
}
ul.Payload = &protobuf.UnfurledStatusLink_Contact{
Contact: &protobuf.UnfurledStatusContactLink{
PublicKey: []byte(preview.Contact.PublicKey),
DisplayName: preview.Contact.DisplayName,
Description: preview.Contact.Description,
Icon: icon,
},
}
}
if preview.Community != nil {
communityPreview, err := preview.Community.convertToProto()
if err != nil {
return nil, err
}
ul.Payload = &protobuf.UnfurledStatusLink_Community{
Community: communityPreview,
}
}
if preview.Channel != nil {
communityPreview, err := preview.Channel.Community.convertToProto()
if err != nil {
return nil, err
}
ul.Payload = &protobuf.UnfurledStatusLink_Channel{
Channel: &protobuf.UnfurledStatusChannelLink{
ChannelUuid: []byte(preview.Channel.ChannelUUID),
Emoji: preview.Channel.Emoji,
DisplayName: preview.Channel.DisplayName,
Description: preview.Channel.Description,
Color: preview.Channel.Color,
Community: communityPreview,
},
}
}
unfurledLinks = append(unfurledLinks, ul)
}
return &protobuf.UnfurledStatusLinks{UnfurledStatusLinks: unfurledLinks}, nil
}
func (m *Message) ConvertFromProtoToStatusLinkPreviews(makeMediaServerURL func(msgID string, previewURL string, imageID MediaServerImageID) string) []StatusLinkPreview {
if m.GetUnfurledStatusLinks() == nil {
return nil
}
links := m.UnfurledStatusLinks.GetUnfurledStatusLinks()
if links == nil {
return nil
}
// This wrapper adds the messageID to the callback
makeMediaServerURLMessageWrapper := func(previewURL string, imageID MediaServerImageID) string {
return makeMediaServerURL(m.ID, previewURL, imageID)
}
previews := make([]StatusLinkPreview, 0, len(links))
for _, link := range links {
lp := StatusLinkPreview{
URL: link.Url,
}
if c := link.GetContact(); c != nil {
lp.Contact = &StatusContactLinkPreview{
PublicKey: string(c.PublicKey),
DisplayName: c.DisplayName,
Description: c.Description,
}
if icon := c.GetIcon(); icon != nil {
lp.Contact.Icon.loadFromProto(icon, link.Url, MediaServerContactIcon, makeMediaServerURLMessageWrapper)
}
}
if c := link.GetCommunity(); c != nil {
lp.Community = new(StatusCommunityLinkPreview)
lp.Community.loadFromProto(c, link.Url, MediaServerCommunityPrefix, makeMediaServerURLMessageWrapper)
}
if c := link.GetChannel(); c != nil {
lp.Channel = &StatusCommunityChannelLinkPreview{
ChannelUUID: string(c.ChannelUuid),
Emoji: c.Emoji,
DisplayName: c.DisplayName,
Description: c.Description,
Color: c.Color,
}
if c.Community != nil {
lp.Channel.Community = new(StatusCommunityLinkPreview)
lp.Channel.Community.loadFromProto(c.Community, link.Url, MediaServerChannelCommunityPrefix, makeMediaServerURLMessageWrapper)
}
}
previews = append(previews, lp)
}
return previews
}

View File

@ -193,12 +193,16 @@ func TestConvertLinkPreviewsToProto(t *testing.T) {
} }
func TestConvertFromProtoToLinkPreviews(t *testing.T) { func TestConvertFromProtoToLinkPreviews(t *testing.T) {
thumbnailPayload, err := base64.StdEncoding.DecodeString("iVBORw0KGgoAAAANSUg=")
require.NoError(t, err)
l := &protobuf.UnfurledLink{ l := &protobuf.UnfurledLink{
Description: "GitHub is where people build software.", Description: "GitHub is where people build software.",
Title: "Build software better, together", Title: "Build software better, together",
Type: protobuf.UnfurledLink_LINK, Type: protobuf.UnfurledLink_LINK,
Url: "https://github.com", Url: "https://github.com",
ThumbnailPayload: []byte(""), ThumbnailPayload: thumbnailPayload,
ThumbnailWidth: 100, ThumbnailWidth: 100,
ThumbnailHeight: 200, ThumbnailHeight: 200,
} }
@ -250,6 +254,335 @@ func TestConvertFromProtoToLinkPreviews(t *testing.T) {
require.Equal(t, "", p.Thumbnail.URL) require.Equal(t, "", p.Thumbnail.URL)
} }
func TestConvertStatusLinkPreviewsToProto(t *testing.T) {
contact := &StatusContactLinkPreview{
PublicKey: "PublicKey_1",
DisplayName: "DisplayName_2",
Description: "Description_3",
Icon: LinkPreviewThumbnail{
Width: 10,
Height: 20,
DataURI: "data:image/png;base64,iVBORw0KGgoAAAANSUg=",
},
}
community := &StatusCommunityLinkPreview{
CommunityID: "CommunityID_4",
DisplayName: "DisplayName_5",
Description: "Description_6",
MembersCount: 7,
Color: "Color_8",
Icon: LinkPreviewThumbnail{
Width: 30,
Height: 40,
DataURI: "data:image/png;base64,iVBORw0KGgoAAAANSUg=",
},
Banner: LinkPreviewThumbnail{
Width: 50,
Height: 60,
DataURI: "data:image/png;base64,iVBORw0KGgoAAAANSUg=",
},
}
channel := &StatusCommunityChannelLinkPreview{
ChannelUUID: "ChannelUUID_11",
Emoji: "Emoji_12",
DisplayName: "DisplayName_13",
Description: "Description_14",
Color: "Color_15",
Community: &StatusCommunityLinkPreview{
CommunityID: "CommunityID_16",
DisplayName: "DisplayName_17",
Description: "Description_18",
MembersCount: 19,
Color: "Color_20",
Icon: LinkPreviewThumbnail{
Width: 70,
Height: 80,
DataURI: "data:image/png;base64,iVBORw0KGgoAAAANSUg=",
},
Banner: LinkPreviewThumbnail{
Width: 90,
Height: 100,
DataURI: "data:image/png;base64,iVBORw0KGgoAAAANSUg=",
},
},
}
message := Message{
StatusLinkPreviews: []StatusLinkPreview{
{
URL: "https://status.app/u/",
Contact: contact,
},
{
URL: "https://status.app/c/",
Community: community,
},
{
URL: "https://status.app/cc/",
Channel: channel,
},
},
}
expectedThumbnailPayload, err := base64.StdEncoding.DecodeString("iVBORw0KGgoAAAANSUg=")
require.NoError(t, err)
unfurledLinks, err := message.ConvertStatusLinkPreviewsToProto()
require.NoError(t, err)
require.Len(t, unfurledLinks.UnfurledStatusLinks, 3)
// Contact link
l1 := unfurledLinks.UnfurledStatusLinks[0]
require.Equal(t, "https://status.app/u/", l1.Url)
require.NotNil(t, l1.GetContact())
require.Nil(t, l1.GetCommunity())
require.Nil(t, l1.GetChannel())
c1 := l1.GetContact()
require.Equal(t, contact.PublicKey, string(c1.PublicKey))
require.Equal(t, contact.DisplayName, c1.DisplayName)
require.Equal(t, contact.Description, c1.Description)
require.NotNil(t, c1.Icon)
require.Equal(t, uint32(contact.Icon.Width), c1.Icon.Width)
require.Equal(t, uint32(contact.Icon.Height), c1.Icon.Height)
require.Equal(t, expectedThumbnailPayload, c1.Icon.Payload)
// Community link
l2 := unfurledLinks.UnfurledStatusLinks[1]
require.Equal(t, "https://status.app/c/", l2.Url)
require.NotNil(t, l2.GetCommunity())
require.Nil(t, l2.GetContact())
require.Nil(t, l2.GetChannel())
c2 := l2.GetCommunity()
require.Equal(t, community.CommunityID, string(c2.CommunityId))
require.Equal(t, community.DisplayName, c2.DisplayName)
require.Equal(t, community.Description, c2.Description)
require.Equal(t, community.MembersCount, c2.MembersCount)
require.Equal(t, community.Color, c2.Color)
require.NotNil(t, c2.Icon)
require.Equal(t, uint32(community.Icon.Width), c2.Icon.Width)
require.Equal(t, uint32(community.Icon.Height), c2.Icon.Height)
require.Equal(t, expectedThumbnailPayload, c2.Icon.Payload)
require.NotNil(t, c2.Banner)
require.Equal(t, uint32(community.Banner.Width), c2.Banner.Width)
require.Equal(t, uint32(community.Banner.Height), c2.Banner.Height)
require.Equal(t, expectedThumbnailPayload, c2.Banner.Payload)
// Channel link
l3 := unfurledLinks.UnfurledStatusLinks[2]
require.Equal(t, "https://status.app/cc/", l3.Url)
require.NotNil(t, l3.GetChannel())
require.Nil(t, l3.GetContact())
require.Nil(t, l3.GetCommunity())
c3 := l3.GetChannel()
require.Equal(t, channel.ChannelUUID, string(c3.ChannelUuid))
require.Equal(t, channel.Emoji, c3.Emoji)
require.Equal(t, channel.DisplayName, c3.DisplayName)
require.Equal(t, channel.Description, c3.Description)
require.Equal(t, channel.Color, c3.Color)
require.NotNil(t, c3.Community)
require.Equal(t, channel.Community.CommunityID, string(c3.Community.CommunityId))
require.Equal(t, channel.Community.DisplayName, c3.Community.DisplayName)
require.Equal(t, channel.Community.Color, c3.Community.Color)
require.Equal(t, channel.Community.Description, c3.Community.Description)
require.Equal(t, channel.Community.MembersCount, c3.Community.MembersCount)
require.NotNil(t, c3.Community.Icon)
require.Equal(t, uint32(channel.Community.Icon.Width), c3.Community.Icon.Width)
require.Equal(t, uint32(channel.Community.Icon.Height), c3.Community.Icon.Height)
require.Equal(t, expectedThumbnailPayload, c3.Community.Icon.Payload)
require.NotNil(t, c3.Community.Banner)
require.Equal(t, uint32(channel.Community.Banner.Width), c3.Community.Banner.Width)
require.Equal(t, uint32(channel.Community.Banner.Height), c3.Community.Banner.Height)
require.Equal(t, expectedThumbnailPayload, c3.Community.Banner.Payload)
// Test any invalid link preview causes an early return.
invalidContactPreview := contact
invalidContactPreview.PublicKey = ""
invalidPreview := message.StatusLinkPreviews[0]
invalidPreview.Contact = invalidContactPreview
message.StatusLinkPreviews = []StatusLinkPreview{invalidPreview}
_, err = message.ConvertStatusLinkPreviewsToProto()
require.ErrorContains(t, err, "invalid status link preview, url='https://status.app/u/'")
}
func TestConvertFromProtoToStatusLinkPreviews(t *testing.T) {
thumbnailPayload, err := base64.StdEncoding.DecodeString("iVBORw0KGgoAAAANSUg=")
require.NoError(t, err)
contact := &protobuf.UnfurledStatusContactLink{
PublicKey: []byte("PublicKey_1"),
DisplayName: "DisplayName_2",
Description: "Description_3",
Icon: &protobuf.UnfurledLinkThumbnail{
Width: 10,
Height: 20,
Payload: thumbnailPayload,
},
}
community := &protobuf.UnfurledStatusCommunityLink{
CommunityId: []byte("CommunityId_4"),
DisplayName: "DisplayName_5",
Description: "Description_6",
MembersCount: 7,
Color: "Color_8",
Icon: &protobuf.UnfurledLinkThumbnail{
Width: 30,
Height: 40,
Payload: thumbnailPayload,
},
Banner: &protobuf.UnfurledLinkThumbnail{
Width: 50,
Height: 60,
Payload: thumbnailPayload,
},
}
channel := &protobuf.UnfurledStatusChannelLink{
ChannelUuid: []byte("ChannelUuid_11"),
Emoji: "Emoji_12",
DisplayName: "DisplayName_13",
Description: "Description_14",
Color: "Color_15",
Community: &protobuf.UnfurledStatusCommunityLink{
CommunityId: []byte("CommunityId_16"),
DisplayName: "DisplayName_17",
Description: "Description_18",
MembersCount: 19,
Color: "Color_20",
Icon: &protobuf.UnfurledLinkThumbnail{
Width: 70,
Height: 80,
Payload: thumbnailPayload,
},
Banner: &protobuf.UnfurledLinkThumbnail{
Width: 90,
Height: 100,
Payload: thumbnailPayload,
},
},
}
msg := Message{
ID: "42",
ChatMessage: &protobuf.ChatMessage{
UnfurledStatusLinks: &protobuf.UnfurledStatusLinks{
UnfurledStatusLinks: []*protobuf.UnfurledStatusLink{
{
Url: "https://status.app/u/",
Payload: &protobuf.UnfurledStatusLink_Contact{
Contact: contact,
},
},
{
Url: "https://status.app/c/",
Payload: &protobuf.UnfurledStatusLink_Community{
Community: community,
},
},
{
Url: "https://status.app/cc/",
Payload: &protobuf.UnfurledStatusLink_Channel{
Channel: channel,
},
},
},
},
},
}
urlMaker := func(msgID string, linkURL string, imageID MediaServerImageID) string {
return "https://localhost:6666/" + msgID + "-" + linkURL + "-" + string(imageID)
}
previews := msg.ConvertFromProtoToStatusLinkPreviews(urlMaker)
require.Len(t, previews, 3)
// Contact preview
p1 := previews[0]
require.Equal(t, "https://status.app/u/", p1.URL)
require.NotNil(t, p1.Contact)
require.Nil(t, p1.Community)
require.Nil(t, p1.Channel)
c1 := p1.Contact
require.NotNil(t, c1)
require.Equal(t, contact.PublicKey, []byte(c1.PublicKey))
require.Equal(t, contact.DisplayName, c1.DisplayName)
require.Equal(t, contact.Description, c1.Description)
require.NotNil(t, c1.Icon)
require.Equal(t, int(contact.Icon.Width), c1.Icon.Width)
require.Equal(t, int(contact.Icon.Height), c1.Icon.Height)
require.Equal(t, "", c1.Icon.DataURI)
require.Equal(t, "https://localhost:6666/42-https://status.app/u/-contact-icon", c1.Icon.URL)
// Community preview
p2 := previews[1]
require.Equal(t, "https://status.app/c/", p2.URL)
require.NotNil(t, p2.Community)
require.Nil(t, p2.Contact)
require.Nil(t, p2.Channel)
c2 := p2.Community
require.Equal(t, community.CommunityId, []byte(c2.CommunityID))
require.Equal(t, community.DisplayName, c2.DisplayName)
require.Equal(t, community.Description, c2.Description)
require.Equal(t, community.MembersCount, c2.MembersCount)
require.Equal(t, community.Color, c2.Color)
require.NotNil(t, c2.Icon)
require.Equal(t, int(community.Icon.Width), c2.Icon.Width)
require.Equal(t, int(community.Icon.Height), c2.Icon.Height)
require.Equal(t, "", c2.Icon.DataURI)
require.Equal(t, "https://localhost:6666/42-https://status.app/c/-community-icon", c2.Icon.URL)
require.NotNil(t, c2.Banner)
require.Equal(t, int(community.Banner.Width), c2.Banner.Width)
require.Equal(t, int(community.Banner.Height), c2.Banner.Height)
require.Equal(t, "", c2.Banner.DataURI)
require.Equal(t, "https://localhost:6666/42-https://status.app/c/-community-banner", c2.Banner.URL)
// Channel preview
p3 := previews[2]
require.Equal(t, "https://status.app/cc/", p3.URL)
require.NotNil(t, p3.Channel)
require.Nil(t, p3.Contact)
require.Nil(t, p3.Community)
c3 := previews[2].Channel
require.Equal(t, channel.ChannelUuid, []byte(c3.ChannelUUID))
require.Equal(t, channel.Emoji, c3.Emoji)
require.Equal(t, channel.DisplayName, c3.DisplayName)
require.Equal(t, channel.Description, c3.Description)
require.Equal(t, channel.Color, c3.Color)
require.NotNil(t, p3.Channel.Community)
require.Equal(t, channel.Community.CommunityId, []byte(c3.Community.CommunityID))
require.Equal(t, channel.Community.DisplayName, c3.Community.DisplayName)
require.Equal(t, channel.Community.Color, c3.Community.Color)
require.Equal(t, channel.Community.Description, c3.Community.Description)
require.Equal(t, channel.Community.MembersCount, c3.Community.MembersCount)
require.NotNil(t, c3.Community.Icon)
require.Equal(t, int(channel.Community.Icon.Width), c3.Community.Icon.Width)
require.Equal(t, int(channel.Community.Icon.Height), c3.Community.Icon.Height)
require.Equal(t, "", c3.Community.Icon.DataURI)
require.Equal(t, "https://localhost:6666/42-https://status.app/cc/-community-channel-icon", c3.Community.Icon.URL)
require.NotNil(t, c3.Community.Banner)
require.Equal(t, int(channel.Community.Banner.Width), c3.Community.Banner.Width)
require.Equal(t, int(channel.Community.Banner.Height), c3.Community.Banner.Height)
require.Equal(t, "", c3.Community.Banner.DataURI)
require.Equal(t, "https://localhost:6666/42-https://status.app/cc/-community-channel-banner", c3.Community.Banner.URL)
}
func assertMarshalAndUnmarshalJSON[T any](t *testing.T, obj *T, msgAndArgs ...any) { func assertMarshalAndUnmarshalJSON[T any](t *testing.T, obj *T, msgAndArgs ...any) {
rawJSON, err := json.Marshal(obj) rawJSON, err := json.Marshal(obj)
require.NoError(t, err, msgAndArgs...) require.NoError(t, err, msgAndArgs...)

View File

@ -103,7 +103,7 @@ func _1536754952_initial_schemaDownSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1536754952_initial_schema.down.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1536754952_initial_schema.down.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x44, 0xcf, 0x76, 0x71, 0x1f, 0x5e, 0x9a, 0x43, 0xd8, 0xcd, 0xb8, 0xc3, 0x70, 0xc3, 0x7f, 0xfc, 0x90, 0xb4, 0x25, 0x1e, 0xf4, 0x66, 0x20, 0xb8, 0x33, 0x7e, 0xb0, 0x76, 0x1f, 0xc, 0xc0, 0x75}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x44, 0xcf, 0x76, 0x71, 0x1f, 0x5e, 0x9a, 0x43, 0xd8, 0xcd, 0xb8, 0xc3, 0x70, 0xc3, 0x7f, 0xfc, 0x90, 0xb4, 0x25, 0x1e, 0xf4, 0x66, 0x20, 0xb8, 0x33, 0x7e, 0xb0, 0x76, 0x1f, 0xc, 0xc0, 0x75}}
return a, nil return a, nil
} }
@ -123,7 +123,7 @@ func _1536754952_initial_schemaUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1536754952_initial_schema.up.sql", size: 962, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1536754952_initial_schema.up.sql", size: 962, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xea, 0x90, 0x5a, 0x59, 0x3e, 0x3, 0xe2, 0x3c, 0x81, 0x42, 0xcd, 0x4c, 0x9a, 0xe8, 0xda, 0x93, 0x2b, 0x70, 0xa4, 0xd5, 0x29, 0x3e, 0xd5, 0xc9, 0x27, 0xb6, 0xb7, 0x65, 0xff, 0x0, 0xcb, 0xde}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xea, 0x90, 0x5a, 0x59, 0x3e, 0x3, 0xe2, 0x3c, 0x81, 0x42, 0xcd, 0x4c, 0x9a, 0xe8, 0xda, 0x93, 0x2b, 0x70, 0xa4, 0xd5, 0x29, 0x3e, 0xd5, 0xc9, 0x27, 0xb6, 0xb7, 0x65, 0xff, 0x0, 0xcb, 0xde}}
return a, nil return a, nil
} }
@ -143,7 +143,7 @@ func _1539249977_update_ratchet_infoDownSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1539249977_update_ratchet_info.down.sql", size: 311, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1539249977_update_ratchet_info.down.sql", size: 311, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1, 0xa4, 0xeb, 0xa0, 0xe6, 0xa0, 0xd4, 0x48, 0xbb, 0xad, 0x6f, 0x7d, 0x67, 0x8c, 0xbd, 0x25, 0xde, 0x1f, 0x73, 0x9a, 0xbb, 0xa8, 0xc9, 0x30, 0xb7, 0xa9, 0x7c, 0xaf, 0xb5, 0x1, 0x61, 0xdd}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1, 0xa4, 0xeb, 0xa0, 0xe6, 0xa0, 0xd4, 0x48, 0xbb, 0xad, 0x6f, 0x7d, 0x67, 0x8c, 0xbd, 0x25, 0xde, 0x1f, 0x73, 0x9a, 0xbb, 0xa8, 0xc9, 0x30, 0xb7, 0xa9, 0x7c, 0xaf, 0xb5, 0x1, 0x61, 0xdd}}
return a, nil return a, nil
} }
@ -163,7 +163,7 @@ func _1539249977_update_ratchet_infoUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1539249977_update_ratchet_info.up.sql", size: 368, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1539249977_update_ratchet_info.up.sql", size: 368, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc, 0x8e, 0xbf, 0x6f, 0xa, 0xc0, 0xe1, 0x3c, 0x42, 0x28, 0x88, 0x1d, 0xdb, 0xba, 0x1c, 0x83, 0xec, 0xba, 0xd3, 0x5f, 0x5c, 0x77, 0x5e, 0xa7, 0x46, 0x36, 0xec, 0x69, 0xa, 0x4b, 0x17, 0x79}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc, 0x8e, 0xbf, 0x6f, 0xa, 0xc0, 0xe1, 0x3c, 0x42, 0x28, 0x88, 0x1d, 0xdb, 0xba, 0x1c, 0x83, 0xec, 0xba, 0xd3, 0x5f, 0x5c, 0x77, 0x5e, 0xa7, 0x46, 0x36, 0xec, 0x69, 0xa, 0x4b, 0x17, 0x79}}
return a, nil return a, nil
} }
@ -183,7 +183,7 @@ func _1540715431_add_versionDownSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1540715431_add_version.down.sql", size: 127, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1540715431_add_version.down.sql", size: 127, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf5, 0x9, 0x4, 0xe3, 0x76, 0x2e, 0xb8, 0x9, 0x23, 0xf0, 0x70, 0x93, 0xc4, 0x50, 0xe, 0x9d, 0x84, 0x22, 0x8c, 0x94, 0xd3, 0x24, 0x9, 0x9a, 0xc1, 0xa1, 0x48, 0x45, 0xfd, 0x40, 0x6e, 0xe6}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf5, 0x9, 0x4, 0xe3, 0x76, 0x2e, 0xb8, 0x9, 0x23, 0xf0, 0x70, 0x93, 0xc4, 0x50, 0xe, 0x9d, 0x84, 0x22, 0x8c, 0x94, 0xd3, 0x24, 0x9, 0x9a, 0xc1, 0xa1, 0x48, 0x45, 0xfd, 0x40, 0x6e, 0xe6}}
return a, nil return a, nil
} }
@ -203,7 +203,7 @@ func _1540715431_add_versionUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1540715431_add_version.up.sql", size: 265, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1540715431_add_version.up.sql", size: 265, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc7, 0x4c, 0x36, 0x96, 0xdf, 0x16, 0x10, 0xa6, 0x27, 0x1a, 0x79, 0x8b, 0x42, 0x83, 0x23, 0xc, 0x7e, 0xb6, 0x3d, 0x2, 0xda, 0xa4, 0xb4, 0xd, 0x27, 0x55, 0xba, 0xdc, 0xb2, 0x88, 0x8f, 0xa6}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc7, 0x4c, 0x36, 0x96, 0xdf, 0x16, 0x10, 0xa6, 0x27, 0x1a, 0x79, 0x8b, 0x42, 0x83, 0x23, 0xc, 0x7e, 0xb6, 0x3d, 0x2, 0xda, 0xa4, 0xb4, 0xd, 0x27, 0x55, 0xba, 0xdc, 0xb2, 0x88, 0x8f, 0xa6}}
return a, nil return a, nil
} }
@ -223,7 +223,7 @@ func _1541164797_add_installationsDownSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1541164797_add_installations.down.sql", size: 26, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1541164797_add_installations.down.sql", size: 26, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf5, 0xfd, 0xe6, 0xd8, 0xca, 0x3b, 0x38, 0x18, 0xee, 0x0, 0x5f, 0x36, 0x9e, 0x1e, 0xd, 0x19, 0x3e, 0xb4, 0x73, 0x53, 0xe9, 0xa5, 0xac, 0xdd, 0xa1, 0x2f, 0xc7, 0x6c, 0xa8, 0xd9, 0xa, 0x88}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf5, 0xfd, 0xe6, 0xd8, 0xca, 0x3b, 0x38, 0x18, 0xee, 0x0, 0x5f, 0x36, 0x9e, 0x1e, 0xd, 0x19, 0x3e, 0xb4, 0x73, 0x53, 0xe9, 0xa5, 0xac, 0xdd, 0xa1, 0x2f, 0xc7, 0x6c, 0xa8, 0xd9, 0xa, 0x88}}
return a, nil return a, nil
} }
@ -243,7 +243,7 @@ func _1541164797_add_installationsUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1541164797_add_installations.up.sql", size: 216, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1541164797_add_installations.up.sql", size: 216, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2d, 0x18, 0x26, 0xb8, 0x88, 0x47, 0xdb, 0x83, 0xcc, 0xb6, 0x9d, 0x1c, 0x1, 0xae, 0x2f, 0xde, 0x97, 0x82, 0x3, 0x30, 0xa8, 0x63, 0xa1, 0x78, 0x4b, 0xa5, 0x9, 0x8, 0x75, 0xa2, 0x57, 0x81}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2d, 0x18, 0x26, 0xb8, 0x88, 0x47, 0xdb, 0x83, 0xcc, 0xb6, 0x9d, 0x1c, 0x1, 0xae, 0x2f, 0xde, 0x97, 0x82, 0x3, 0x30, 0xa8, 0x63, 0xa1, 0x78, 0x4b, 0xa5, 0x9, 0x8, 0x75, 0xa2, 0x57, 0x81}}
return a, nil return a, nil
} }
@ -263,7 +263,7 @@ func _1558084410_add_secretDownSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1558084410_add_secret.down.sql", size: 56, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1558084410_add_secret.down.sql", size: 56, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x49, 0xb, 0x65, 0xdf, 0x59, 0xbf, 0xe9, 0x5, 0x5b, 0x6f, 0xd5, 0x3a, 0xb7, 0x57, 0xe8, 0x78, 0x38, 0x73, 0x53, 0x57, 0xf7, 0x24, 0x4, 0xe4, 0xa2, 0x49, 0x22, 0xa2, 0xc6, 0xfd, 0x80, 0xa4}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x49, 0xb, 0x65, 0xdf, 0x59, 0xbf, 0xe9, 0x5, 0x5b, 0x6f, 0xd5, 0x3a, 0xb7, 0x57, 0xe8, 0x78, 0x38, 0x73, 0x53, 0x57, 0xf7, 0x24, 0x4, 0xe4, 0xa2, 0x49, 0x22, 0xa2, 0xc6, 0xfd, 0x80, 0xa4}}
return a, nil return a, nil
} }
@ -283,7 +283,7 @@ func _1558084410_add_secretUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1558084410_add_secret.up.sql", size: 301, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1558084410_add_secret.up.sql", size: 301, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf5, 0x32, 0x36, 0x8e, 0x47, 0xb0, 0x8f, 0xc1, 0xc6, 0xf7, 0xc6, 0x9f, 0x2d, 0x44, 0x75, 0x2b, 0x26, 0xec, 0x6, 0xa0, 0x7b, 0xa5, 0xbd, 0xc8, 0x76, 0x8a, 0x82, 0x68, 0x2, 0x42, 0xb5, 0xf4}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf5, 0x32, 0x36, 0x8e, 0x47, 0xb0, 0x8f, 0xc1, 0xc6, 0xf7, 0xc6, 0x9f, 0x2d, 0x44, 0x75, 0x2b, 0x26, 0xec, 0x6, 0xa0, 0x7b, 0xa5, 0xbd, 0xc8, 0x76, 0x8a, 0x82, 0x68, 0x2, 0x42, 0xb5, 0xf4}}
return a, nil return a, nil
} }
@ -303,7 +303,7 @@ func _1558588866_add_versionDownSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1558588866_add_version.down.sql", size: 47, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1558588866_add_version.down.sql", size: 47, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xde, 0x52, 0x34, 0x3c, 0x46, 0x4a, 0xf0, 0x72, 0x47, 0x6f, 0x49, 0x5c, 0xc7, 0xf9, 0x32, 0xce, 0xc4, 0x3d, 0xfd, 0x61, 0xa1, 0x8b, 0x8f, 0xf2, 0x31, 0x34, 0xde, 0x15, 0x49, 0xa6, 0xde, 0xb9}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xde, 0x52, 0x34, 0x3c, 0x46, 0x4a, 0xf0, 0x72, 0x47, 0x6f, 0x49, 0x5c, 0xc7, 0xf9, 0x32, 0xce, 0xc4, 0x3d, 0xfd, 0x61, 0xa1, 0x8b, 0x8f, 0xf2, 0x31, 0x34, 0xde, 0x15, 0x49, 0xa6, 0xde, 0xb9}}
return a, nil return a, nil
} }
@ -323,7 +323,7 @@ func _1558588866_add_versionUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1558588866_add_version.up.sql", size: 57, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1558588866_add_version.up.sql", size: 57, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2a, 0xea, 0x64, 0x39, 0x61, 0x20, 0x83, 0x83, 0xb, 0x2e, 0x79, 0x64, 0xb, 0x53, 0xfa, 0xfe, 0xc6, 0xf7, 0x67, 0x42, 0xd3, 0x4f, 0xdc, 0x7e, 0x30, 0x32, 0xe8, 0x14, 0x41, 0xe9, 0xe7, 0x3b}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2a, 0xea, 0x64, 0x39, 0x61, 0x20, 0x83, 0x83, 0xb, 0x2e, 0x79, 0x64, 0xb, 0x53, 0xfa, 0xfe, 0xc6, 0xf7, 0x67, 0x42, 0xd3, 0x4f, 0xdc, 0x7e, 0x30, 0x32, 0xe8, 0x14, 0x41, 0xe9, 0xe7, 0x3b}}
return a, nil return a, nil
} }
@ -343,7 +343,7 @@ func _1559627659_add_contact_codeDownSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1559627659_add_contact_code.down.sql", size: 32, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1559627659_add_contact_code.down.sql", size: 32, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5d, 0x64, 0x6d, 0xce, 0x24, 0x42, 0x20, 0x8d, 0x4f, 0x37, 0xaa, 0x9d, 0xc, 0x57, 0x98, 0xc1, 0xd1, 0x1a, 0x34, 0xcd, 0x9f, 0x8f, 0x34, 0x86, 0xb3, 0xd3, 0xdc, 0xf1, 0x7d, 0xe5, 0x1b, 0x6e}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5d, 0x64, 0x6d, 0xce, 0x24, 0x42, 0x20, 0x8d, 0x4f, 0x37, 0xaa, 0x9d, 0xc, 0x57, 0x98, 0xc1, 0xd1, 0x1a, 0x34, 0xcd, 0x9f, 0x8f, 0x34, 0x86, 0xb3, 0xd3, 0xdc, 0xf1, 0x7d, 0xe5, 0x1b, 0x6e}}
return a, nil return a, nil
} }
@ -363,7 +363,7 @@ func _1559627659_add_contact_codeUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1559627659_add_contact_code.up.sql", size: 198, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1559627659_add_contact_code.up.sql", size: 198, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x16, 0xf6, 0xc2, 0x62, 0x9c, 0xd2, 0xc9, 0x1e, 0xd8, 0xea, 0xaa, 0xea, 0x95, 0x8f, 0x89, 0x6a, 0x85, 0x5d, 0x9d, 0x99, 0x78, 0x3c, 0x90, 0x66, 0x99, 0x3e, 0x4b, 0x19, 0x62, 0xfb, 0x31, 0x4d}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x16, 0xf6, 0xc2, 0x62, 0x9c, 0xd2, 0xc9, 0x1e, 0xd8, 0xea, 0xaa, 0xea, 0x95, 0x8f, 0x89, 0x6a, 0x85, 0x5d, 0x9d, 0x99, 0x78, 0x3c, 0x90, 0x66, 0x99, 0x3e, 0x4b, 0x19, 0x62, 0xfb, 0x31, 0x4d}}
return a, nil return a, nil
} }
@ -383,7 +383,7 @@ func _1561368210_add_installation_metadataDownSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1561368210_add_installation_metadata.down.sql", size: 35, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1561368210_add_installation_metadata.down.sql", size: 35, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa8, 0xde, 0x3f, 0xd2, 0x4a, 0x50, 0x98, 0x56, 0xe3, 0xc0, 0xcd, 0x9d, 0xb0, 0x34, 0x3b, 0xe5, 0x62, 0x18, 0xb5, 0x20, 0xc9, 0x3e, 0xdc, 0x6a, 0x40, 0x36, 0x66, 0xea, 0x51, 0x8c, 0x71, 0xf5}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa8, 0xde, 0x3f, 0xd2, 0x4a, 0x50, 0x98, 0x56, 0xe3, 0xc0, 0xcd, 0x9d, 0xb0, 0x34, 0x3b, 0xe5, 0x62, 0x18, 0xb5, 0x20, 0xc9, 0x3e, 0xdc, 0x6a, 0x40, 0x36, 0x66, 0xea, 0x51, 0x8c, 0x71, 0xf5}}
return a, nil return a, nil
} }
@ -403,7 +403,7 @@ func _1561368210_add_installation_metadataUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1561368210_add_installation_metadata.up.sql", size: 267, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1561368210_add_installation_metadata.up.sql", size: 267, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb4, 0x71, 0x8f, 0x29, 0xb1, 0xaa, 0xd6, 0xd1, 0x8c, 0x17, 0xef, 0x6c, 0xd5, 0x80, 0xb8, 0x2c, 0xc3, 0xfe, 0xec, 0x24, 0x4d, 0xc8, 0x25, 0xd3, 0xb4, 0xcd, 0xa9, 0xac, 0x63, 0x61, 0xb2, 0x9c}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb4, 0x71, 0x8f, 0x29, 0xb1, 0xaa, 0xd6, 0xd1, 0x8c, 0x17, 0xef, 0x6c, 0xd5, 0x80, 0xb8, 0x2c, 0xc3, 0xfe, 0xec, 0x24, 0x4d, 0xc8, 0x25, 0xd3, 0xb4, 0xcd, 0xa9, 0xac, 0x63, 0x61, 0xb2, 0x9c}}
return a, nil return a, nil
} }
@ -423,7 +423,7 @@ func _1632236298_add_communitiesDownSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1632236298_add_communities.down.sql", size: 151, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1632236298_add_communities.down.sql", size: 151, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x26, 0xe5, 0x47, 0xd1, 0xe5, 0xec, 0x5b, 0x3e, 0xdc, 0x22, 0xf4, 0x27, 0xee, 0x70, 0xf3, 0x9, 0x4f, 0xd2, 0x9f, 0x92, 0xf, 0x5a, 0x18, 0x11, 0xb7, 0x40, 0xab, 0xf1, 0x98, 0x72, 0xd6, 0x60}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x26, 0xe5, 0x47, 0xd1, 0xe5, 0xec, 0x5b, 0x3e, 0xdc, 0x22, 0xf4, 0x27, 0xee, 0x70, 0xf3, 0x9, 0x4f, 0xd2, 0x9f, 0x92, 0xf, 0x5a, 0x18, 0x11, 0xb7, 0x40, 0xab, 0xf1, 0x98, 0x72, 0xd6, 0x60}}
return a, nil return a, nil
} }
@ -443,7 +443,7 @@ func _1632236298_add_communitiesUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1632236298_add_communities.up.sql", size: 584, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1632236298_add_communities.up.sql", size: 584, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8f, 0xe0, 0x1, 0x6e, 0x84, 0xc, 0x35, 0xe4, 0x5a, 0xf, 0xbe, 0xcb, 0xf7, 0xd2, 0xa8, 0x25, 0xf5, 0xdb, 0x7, 0xcb, 0xa3, 0xe6, 0xf4, 0xc4, 0x1b, 0xa5, 0xec, 0x32, 0x1e, 0x1e, 0x48, 0x60}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8f, 0xe0, 0x1, 0x6e, 0x84, 0xc, 0x35, 0xe4, 0x5a, 0xf, 0xbe, 0xcb, 0xf7, 0xd2, 0xa8, 0x25, 0xf5, 0xdb, 0x7, 0xcb, 0xa3, 0xe6, 0xf4, 0xc4, 0x1b, 0xa5, 0xec, 0x32, 0x1e, 0x1e, 0x48, 0x60}}
return a, nil return a, nil
} }
@ -463,7 +463,7 @@ func _1636536507_add_index_bundlesUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1636536507_add_index_bundles.up.sql", size: 347, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1636536507_add_index_bundles.up.sql", size: 347, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf1, 0xb9, 0x3c, 0x16, 0xfc, 0xfb, 0xb2, 0xb4, 0x3b, 0xfe, 0xdc, 0xf5, 0x9c, 0x42, 0xa0, 0xa0, 0xd4, 0xd, 0x5b, 0x97, 0x10, 0x80, 0x95, 0xe, 0x13, 0xc1, 0x18, 0x8, 0xee, 0xf, 0x99, 0xee}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf1, 0xb9, 0x3c, 0x16, 0xfc, 0xfb, 0xb2, 0xb4, 0x3b, 0xfe, 0xdc, 0xf5, 0x9c, 0x42, 0xa0, 0xa0, 0xd4, 0xd, 0x5b, 0x97, 0x10, 0x80, 0x95, 0xe, 0x13, 0xc1, 0x18, 0x8, 0xee, 0xf, 0x99, 0xee}}
return a, nil return a, nil
} }
@ -483,7 +483,7 @@ func docGo() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "doc.go", size: 377, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "doc.go", size: 377, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xef, 0xaf, 0xdf, 0xcf, 0x65, 0xae, 0x19, 0xfc, 0x9d, 0x29, 0xc1, 0x91, 0xaf, 0xb5, 0xd5, 0xb1, 0x56, 0xf3, 0xee, 0xa8, 0xba, 0x13, 0x65, 0xdb, 0xab, 0xcf, 0x4e, 0xac, 0x92, 0xe9, 0x60, 0xf1}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xef, 0xaf, 0xdf, 0xcf, 0x65, 0xae, 0x19, 0xfc, 0x9d, 0x29, 0xc1, 0x91, 0xaf, 0xb5, 0xd5, 0xb1, 0x56, 0xf3, 0xee, 0xa8, 0xba, 0x13, 0x65, 0xdb, 0xab, 0xcf, 0x4e, 0xac, 0x92, 0xe9, 0x60, 0xf1}}
return a, nil return a, nil
} }

View File

@ -1,4 +1,4 @@
package unfurlers package protocol
import ( import (
"context" "context"
@ -34,11 +34,11 @@ const (
type Headers map[string]string type Headers map[string]string
type Unfurler interface { type Unfurler interface {
Unfurl() (common.LinkPreview, error) Unfurl() (*common.LinkPreview, error)
} }
func newDefaultLinkPreview(url *neturl.URL) common.LinkPreview { func newDefaultLinkPreview(url *neturl.URL) *common.LinkPreview {
return common.LinkPreview{ return &common.LinkPreview{
URL: url.String(), URL: url.String(),
Hostname: url.Hostname(), Hostname: url.Hostname(),
} }

View File

@ -1,4 +1,4 @@
package unfurlers package protocol
import ( import (
"bytes" "bytes"
@ -76,7 +76,7 @@ func isSupportedImage(payload []byte) bool {
return images.IsJpeg(payload) || images.IsPng(payload) || images.IsWebp(payload) return images.IsJpeg(payload) || images.IsPng(payload) || images.IsWebp(payload)
} }
func (u *ImageUnfurler) Unfurl() (common.LinkPreview, error) { func (u *ImageUnfurler) Unfurl() (*common.LinkPreview, error) {
preview := newDefaultLinkPreview(u.url) preview := newDefaultLinkPreview(u.url)
preview.Type = protobuf.UnfurledLink_IMAGE preview.Type = protobuf.UnfurledLink_IMAGE

View File

@ -1,4 +1,4 @@
package unfurlers package protocol
import ( import (
"encoding/json" "encoding/json"
@ -56,7 +56,7 @@ func (u *OEmbedUnfurler) newOEmbedURL() (*neturl.URL, error) {
return oembedURL, nil return oembedURL, nil
} }
func (u OEmbedUnfurler) Unfurl() (common.LinkPreview, error) { func (u OEmbedUnfurler) Unfurl() (*common.LinkPreview, error) {
preview := newDefaultLinkPreview(u.url) preview := newDefaultLinkPreview(u.url)
preview.Type = protobuf.UnfurledLink_LINK preview.Type = protobuf.UnfurledLink_LINK

View File

@ -1,4 +1,4 @@
package unfurlers package protocol
import ( import (
"bytes" "bytes"
@ -38,7 +38,7 @@ func NewOpenGraphUnfurler(URL *neturl.URL, logger *zap.Logger, httpClient *http.
} }
} }
func (u *OpenGraphUnfurler) Unfurl() (common.LinkPreview, error) { func (u *OpenGraphUnfurler) Unfurl() (*common.LinkPreview, error) {
preview := newDefaultLinkPreview(u.url) preview := newDefaultLinkPreview(u.url)
preview.Type = protobuf.UnfurledLink_LINK preview.Type = protobuf.UnfurledLink_LINK

View File

@ -0,0 +1,186 @@
package protocol
import (
"fmt"
"go.uber.org/zap"
"github.com/status-im/status-go/api/multiformat"
"github.com/status-im/status-go/images"
"github.com/status-im/status-go/protocol/common"
"github.com/status-im/status-go/protocol/communities"
)
type StatusUnfurler struct {
m *Messenger
logger *zap.Logger
url string
}
func NewStatusUnfurler(URL string, messenger *Messenger, logger *zap.Logger) *StatusUnfurler {
return &StatusUnfurler{
m: messenger,
logger: logger,
url: URL,
}
}
func updateThumbnail(image *images.IdentityImage, thumbnail *common.LinkPreviewThumbnail) error {
if image.IsEmpty() {
return nil
}
var err error
thumbnail.Width, thumbnail.Height, err = images.GetImageDimensions(image.Payload)
if err != nil {
return fmt.Errorf("failed to get image dimensions: %w", err)
}
thumbnail.DataURI, err = image.GetDataURI()
if err != nil {
return fmt.Errorf("failed to get data uri: %w", err)
}
return nil
}
func (u *StatusUnfurler) buildContactData(publicKey string) (*common.StatusContactLinkPreview, error) {
contactID, err := multiformat.DeserializeCompressedKey(publicKey)
if err != nil {
return nil, err
}
contact := u.m.GetContactByID(contactID)
// If no contact found locally, fetch it from waku
if contact == nil {
if contact, err = u.m.RequestContactInfoFromMailserver(contactID, true); err != nil {
return nil, fmt.Errorf("failed to request contact info from mailserver for public key '%s': %w", publicKey, err)
}
}
c := new(common.StatusContactLinkPreview)
c.PublicKey = publicKey
c.DisplayName = contact.DisplayName
c.Description = contact.Bio
if image, ok := contact.Images[images.SmallDimName]; ok {
if err = updateThumbnail(&image, &c.Icon); err != nil {
return nil, fmt.Errorf("failed to set thumbnail: %w", err)
}
}
return c, nil
}
func (u *StatusUnfurler) fillCommunityImages(community *communities.Community, icon *common.LinkPreviewThumbnail, banner *common.LinkPreviewThumbnail) error {
if image, ok := community.Images()[images.SmallDimName]; ok {
if err := updateThumbnail(&images.IdentityImage{Payload: image.Payload}, icon); err != nil {
u.logger.Warn("unfurling status link: failed to set community thumbnail", zap.Error(err))
}
}
if image, ok := community.Images()[images.BannerIdentityName]; ok {
if err := updateThumbnail(&images.IdentityImage{Payload: image.Payload}, banner); err != nil {
u.logger.Warn("unfurling status link: failed to set community banner", zap.Error(err))
}
}
return nil
}
func (u *StatusUnfurler) buildCommunityData(communityID string) (*communities.Community, *common.StatusCommunityLinkPreview, error) {
// This automatically checks the database
community, err := u.m.RequestCommunityInfoFromMailserver(communityID, nil, true)
if err != nil {
return nil, nil, fmt.Errorf("failed to get community info for communityID '%s': %w", communityID, err)
}
if community == nil {
return community, nil, fmt.Errorf("community info fetched, but it is empty")
}
c := &common.StatusCommunityLinkPreview{
CommunityID: community.IDString(),
DisplayName: community.Name(),
Description: community.DescriptionText(),
MembersCount: uint32(community.MembersCount()),
Color: community.Color(),
}
err = u.fillCommunityImages(community, &c.Icon, &c.Banner)
if err != nil {
return community, c, err
}
return community, c, nil
}
func (u *StatusUnfurler) buildChannelData(channelUUID string, communityID string) (*common.StatusCommunityChannelLinkPreview, error) {
community, communityData, err := u.buildCommunityData(communityID)
if err != nil {
return nil, fmt.Errorf("failed to build channel community data: %w", err)
}
channel, ok := community.Chats()[channelUUID]
if !ok {
return nil, fmt.Errorf("channel with channelID '%s' not found in community '%s'", channelUUID, communityID)
}
return &common.StatusCommunityChannelLinkPreview{
ChannelUUID: channelUUID,
Emoji: channel.Identity.Emoji,
DisplayName: channel.Identity.DisplayName,
Description: channel.Identity.Description,
Color: channel.Identity.Color,
Community: communityData,
}, nil
}
func (u *StatusUnfurler) Unfurl() (*common.StatusLinkPreview, error) {
preview := new(common.StatusLinkPreview)
preview.URL = u.url
resp, err := u.m.ParseSharedURL(u.url)
if err != nil {
return nil, fmt.Errorf("failed to parse shared url: %w", err)
}
// If a URL has been successfully parsed,
// any further errors should not be returned, only logged.
if resp.Contact != nil {
preview.Contact, err = u.buildContactData(resp.Contact.PublicKey)
if err != nil {
return nil, fmt.Errorf("error when building contact data: %w", err)
}
return preview, nil
}
// NOTE: Currently channel data comes together with community data,
// both `Community` and `Channel` fields will be present.
// So we check for Channel first, then Community.
if resp.Channel != nil {
if resp.Community == nil {
return preview, fmt.Errorf("channel community can't be empty")
}
preview.Channel, err = u.buildChannelData(resp.Channel.ChannelUUID, resp.Community.CommunityID)
if err != nil {
return nil, fmt.Errorf("error when building channel data: %w", err)
}
return preview, nil
}
if resp.Community != nil {
_, preview.Community, err = u.buildCommunityData(resp.Community.CommunityID)
if err != nil {
return nil, fmt.Errorf("error when building community data: %w", err)
}
return preview, nil
}
return nil, fmt.Errorf("shared url does not contain contact, community or channel data")
}

View File

@ -8,6 +8,7 @@ import (
"sort" "sort"
"strings" "strings"
"github.com/golang/protobuf/proto"
"github.com/lib/pq" "github.com/lib/pq"
"github.com/status-im/status-go/protocol/common" "github.com/status-im/status-go/protocol/common"
@ -83,6 +84,7 @@ func (db sqlitePersistence) tableUserMessagesAllFields() string {
mentions, mentions,
links, links,
unfurled_links, unfurled_links,
unfurled_status_links,
command_id, command_id,
command_value, command_value,
command_from, command_from,
@ -136,6 +138,7 @@ func (db sqlitePersistence) tableUserMessagesAllFieldsJoin() string {
m1.mentions, m1.mentions,
m1.links, m1.links,
m1.unfurled_links, m1.unfurled_links,
m1.unfurled_status_links,
m1.command_id, m1.command_id,
m1.command_value, m1.command_value,
m1.command_from, m1.command_from,
@ -215,6 +218,7 @@ func (db sqlitePersistence) tableUserMessagesScanAllFields(row scanner, message
var serializedMentions []byte var serializedMentions []byte
var serializedLinks []byte var serializedLinks []byte
var serializedUnfurledLinks []byte var serializedUnfurledLinks []byte
var serializedUnfurledStatusLinks []byte
var alias sql.NullString var alias sql.NullString
var identicon sql.NullString var identicon sql.NullString
var communityID sql.NullString var communityID sql.NullString
@ -271,6 +275,7 @@ func (db sqlitePersistence) tableUserMessagesScanAllFields(row scanner, message
&serializedMentions, &serializedMentions,
&serializedLinks, &serializedLinks,
&serializedUnfurledLinks, &serializedUnfurledLinks,
&serializedUnfurledStatusLinks,
&command.ID, &command.ID,
&command.Value, &command.Value,
&command.From, &command.From,
@ -414,6 +419,16 @@ func (db sqlitePersistence) tableUserMessagesScanAllFields(row scanner, message
} }
} }
if serializedUnfurledStatusLinks != nil {
// use proto.Marshal, because json.Marshal doesn't support `oneof` fields
var links protobuf.UnfurledStatusLinks
err = proto.Unmarshal(serializedUnfurledStatusLinks, &links)
if err != nil {
return err
}
message.UnfurledStatusLinks = &links
}
if attachment.Id != "" { if attachment.Id != "" {
discordMessage.Attachments = append(discordMessage.Attachments, attachment) discordMessage.Attachments = append(discordMessage.Attachments, attachment)
} }
@ -502,6 +517,15 @@ func (db sqlitePersistence) tableUserMessagesAllValues(message *common.Message)
} }
} }
var serializedUnfurledStatusLinks []byte
if links := message.GetUnfurledStatusLinks(); links != nil {
// use proto.Marshal, because json.Marshal doesn't support `oneof` fields
serializedUnfurledStatusLinks, err = proto.Marshal(links)
if err != nil {
return nil, err
}
}
return []interface{}{ return []interface{}{
message.ID, message.ID,
message.WhisperTimestamp, message.WhisperTimestamp,
@ -534,6 +558,7 @@ func (db sqlitePersistence) tableUserMessagesAllValues(message *common.Message)
serializedMentions, serializedMentions,
serializedLinks, serializedLinks,
serializedUnfurledLinks, serializedUnfurledLinks,
serializedUnfurledStatusLinks,
command.ID, command.ID,
command.Value, command.Value,
command.From, command.From,
@ -2465,12 +2490,12 @@ func (db sqlitePersistence) SaveEdit(editMessage *EditMessage) error {
return nil return nil
} }
_, err := db.db.Exec(`INSERT INTO user_messages_edits (clock, chat_id, message_id, text, source, id, unfurled_links) VALUES(?,?,?,?,?,?,?)`, editMessage.Clock, editMessage.ChatId, editMessage.MessageId, editMessage.Text, editMessage.From, editMessage.ID, pq.Array(editMessage.UnfurledLinks)) _, err := db.db.Exec(`INSERT INTO user_messages_edits (clock, chat_id, message_id, text, source, id, unfurled_links, unfurled_status_links) VALUES(?,?,?,?,?,?,?,?)`, editMessage.Clock, editMessage.ChatId, editMessage.MessageId, editMessage.Text, editMessage.From, editMessage.ID, pq.Array(editMessage.UnfurledLinks), editMessage.UnfurledStatusLinks)
return err return err
} }
func (db sqlitePersistence) GetEdits(messageID string, from string) ([]*EditMessage, error) { func (db sqlitePersistence) GetEdits(messageID string, from string) ([]*EditMessage, error) {
rows, err := db.db.Query(`SELECT clock, chat_id, message_id, source, text, id, unfurled_links FROM user_messages_edits WHERE message_id = ? AND source = ? ORDER BY CLOCK DESC`, messageID, from) rows, err := db.db.Query(`SELECT clock, chat_id, message_id, source, text, id, unfurled_links, unfurled_status_links FROM user_messages_edits WHERE message_id = ? AND source = ? ORDER BY CLOCK DESC`, messageID, from)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -2479,7 +2504,7 @@ func (db sqlitePersistence) GetEdits(messageID string, from string) ([]*EditMess
var messages []*EditMessage var messages []*EditMessage
for rows.Next() { for rows.Next() {
e := NewEditMessage() e := NewEditMessage()
err := rows.Scan(&e.Clock, &e.ChatId, &e.MessageId, &e.From, &e.Text, &e.ID, pq.Array(&e.UnfurledLinks)) err := rows.Scan(&e.Clock, &e.ChatId, &e.MessageId, &e.From, &e.Text, &e.ID, pq.Array(&e.UnfurledLinks), &e.UnfurledStatusLinks)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -2299,6 +2299,13 @@ func (m *Messenger) sendChatMessage(ctx context.Context, message *common.Message
message.UnfurledLinks = unfurledLinks message.UnfurledLinks = unfurledLinks
} }
unfurledStatusLinks, err := message.ConvertStatusLinkPreviewsToProto()
if err != nil {
m.logger.Error("failed to convert status link previews", zap.Error(err))
} else {
message.UnfurledStatusLinks = unfurledStatusLinks
}
var response MessengerResponse var response MessengerResponse
// A valid added chat is required. // A valid added chat is required.
@ -4057,6 +4064,7 @@ func (m *Messenger) prepareMessage(msg *common.Message, s *server.MediaServer) {
} }
msg.LinkPreviews = msg.ConvertFromProtoToLinkPreviews(s.MakeLinkPreviewThumbnailURL) msg.LinkPreviews = msg.ConvertFromProtoToLinkPreviews(s.MakeLinkPreviewThumbnailURL)
msg.StatusLinkPreviews = msg.ConvertFromProtoToStatusLinkPreviews(s.MakeStatusLinkPreviewThumbnailURL)
} }
func (m *Messenger) AllMessageByChatIDWhichMatchTerm(chatID string, searchTerm string, caseSensitive bool) ([]*common.Message, error) { func (m *Messenger) AllMessageByChatIDWhichMatchTerm(chatID string, searchTerm string, caseSensitive bool) ([]*common.Message, error) {

View File

@ -498,13 +498,30 @@ func (s *MessengerEditMessageSuite) TestEditMessageWithLinkPreviews() {
DataURI: "data:image/png;base64,iVBORw0KGgoAAAANSUg=", DataURI: "data:image/png;base64,iVBORw0KGgoAAAANSUg=",
}}, }},
}, },
StatusLinkPreviews: []common.StatusLinkPreview{
{
URL: "https://status.app/u/TestUrl",
Contact: &common.StatusContactLinkPreview{
PublicKey: "TestPublicKey",
DisplayName: "TestDisplayName",
Description: "Test description",
Icon: common.LinkPreviewThumbnail{
Width: 100,
Height: 200,
DataURI: "data:image/png;base64,iVBORw0KGgoAAAANSUg=",
},
},
},
},
} }
sendResponse, err = theirMessenger.EditMessage(context.Background(), editedMessage) sendResponse, err = theirMessenger.EditMessage(context.Background(), editedMessage)
s.Require().NoError(err) s.Require().NoError(err)
s.Require().Len(sendResponse.Messages(), 1) s.Require().Len(sendResponse.Messages(), 1)
s.Require().NotEmpty(sendResponse.Messages()[0].LinkPreviews) s.Require().Len(sendResponse.Messages()[0].LinkPreviews, 1)
s.Require().NotNil(sendResponse.Messages()[0].UnfurledStatusLinks)
s.Require().Len(sendResponse.Messages()[0].UnfurledStatusLinks.UnfurledStatusLinks, 1)
response, err = WaitOnMessengerResponse( response, err = WaitOnMessengerResponse(
s.m, s.m,
func(r *MessengerResponse) bool { return len(r.messages) == 1 }, func(r *MessengerResponse) bool { return len(r.messages) == 1 },
@ -514,7 +531,11 @@ func (s *MessengerEditMessageSuite) TestEditMessageWithLinkPreviews() {
s.Require().Len(response.Chats(), 1) s.Require().Len(response.Chats(), 1)
s.Require().Len(response.Messages(), 1) s.Require().Len(response.Messages(), 1)
s.Require().NotEmpty(response.Messages()[0].EditedAt)
s.Require().NotEmpty(response.Messages()[0].UnfurledLinks) responseMessage := response.Messages()[0]
s.Require().False(response.Messages()[0].New) s.Require().NotEmpty(responseMessage.EditedAt)
s.Require().Len(responseMessage.UnfurledLinks, 1)
s.Require().NotNil(responseMessage.UnfurledStatusLinks)
s.Require().Len(responseMessage.UnfurledStatusLinks.UnfurledStatusLinks, 1)
s.Require().False(responseMessage.New)
} }

View File

@ -14,11 +14,11 @@ import (
"github.com/status-im/markdown" "github.com/status-im/markdown"
"github.com/status-im/status-go/protocol/common" "github.com/status-im/status-go/protocol/common"
"github.com/status-im/status-go/protocol/linkpreview/unfurlers"
) )
type LinkPreview struct { type UnfurlURLsResponse struct {
common.LinkPreview LinkPreviews []*common.LinkPreview `json:"linkPreviews,omitempty"`
StatusLinkPreviews []*common.StatusLinkPreview `json:"statusLinkPreviews,omitempty"`
} }
func normalizeHostname(hostname string) string { func normalizeHostname(hostname string) string {
@ -27,9 +27,10 @@ func normalizeHostname(hostname string) string {
return re.ReplaceAllString(hostname, "$1") return re.ReplaceAllString(hostname, "$1")
} }
func (m *Messenger) newURLUnfurler(httpClient *http.Client, url *neturl.URL) unfurlers.Unfurler { func (m *Messenger) newURLUnfurler(httpClient *http.Client, url *neturl.URL) Unfurler {
if unfurlers.IsSupportedImageURL(url) {
return unfurlers.NewImageUnfurler( if IsSupportedImageURL(url) {
return NewImageUnfurler(
url, url,
m.logger, m.logger,
httpClient) httpClient)
@ -37,21 +38,21 @@ func (m *Messenger) newURLUnfurler(httpClient *http.Client, url *neturl.URL) unf
switch normalizeHostname(url.Hostname()) { switch normalizeHostname(url.Hostname()) {
case "reddit.com": case "reddit.com":
return unfurlers.NewOEmbedUnfurler( return NewOEmbedUnfurler(
"https://www.reddit.com/oembed", "https://www.reddit.com/oembed",
url, url,
m.logger, m.logger,
httpClient) httpClient)
default: default:
return unfurlers.NewOpenGraphUnfurler( return NewOpenGraphUnfurler(
url, url,
m.logger, m.logger,
httpClient) httpClient)
} }
} }
func (m *Messenger) unfurlURL(httpClient *http.Client, url string) (common.LinkPreview, error) { func (m *Messenger) unfurlURL(httpClient *http.Client, url string) (*common.LinkPreview, error) {
var preview common.LinkPreview preview := new(common.LinkPreview)
parsedURL, err := neturl.Parse(url) parsedURL, err := neturl.Parse(url)
if err != nil { if err != nil {
@ -127,27 +128,42 @@ func GetURLs(text string) []string {
} }
func NewDefaultHTTPClient() *http.Client { func NewDefaultHTTPClient() *http.Client {
return &http.Client{Timeout: unfurlers.DefaultRequestTimeout} return &http.Client{Timeout: DefaultRequestTimeout}
} }
// UnfurlURLs assumes clients pass URLs verbatim that were validated and // UnfurlURLs assumes clients pass URLs verbatim that were validated and
// processed by GetURLs. // processed by GetURLs.
func (m *Messenger) UnfurlURLs(httpClient *http.Client, urls []string) ([]common.LinkPreview, error) { func (m *Messenger) UnfurlURLs(httpClient *http.Client, urls []string) (UnfurlURLsResponse, error) {
if httpClient == nil { if httpClient == nil {
httpClient = NewDefaultHTTPClient() httpClient = NewDefaultHTTPClient()
} }
previews := make([]common.LinkPreview, 0, len(urls)) r := UnfurlURLsResponse{
LinkPreviews: make([]*common.LinkPreview, 0, len(urls)),
StatusLinkPreviews: make([]*common.StatusLinkPreview, 0, len(urls)),
}
for _, url := range urls { for _, url := range urls {
m.logger.Debug("unfurling", zap.String("url", url)) m.logger.Debug("unfurling", zap.String("url", url))
p, err := m.unfurlURL(httpClient, url)
if err != nil { if m.IsStatusSharedURL(url) {
m.logger.Info("failed to unfurl", zap.String("url", url), zap.Error(err)) unfurler := NewStatusUnfurler(url, m, m.logger)
preview, err := unfurler.Unfurl()
if err != nil {
m.logger.Warn("failed to unfurl status link", zap.String("url", url), zap.Error(err))
continue
}
r.StatusLinkPreviews = append(r.StatusLinkPreviews, preview)
continue continue
} }
previews = append(previews, p)
p, err := m.unfurlURL(httpClient, url)
if err != nil {
m.logger.Warn("failed to unfurl", zap.String("url", url), zap.Error(err))
continue
}
r.LinkPreviews = append(r.LinkPreviews, p)
} }
return previews, nil return r, nil
} }

View File

@ -13,9 +13,11 @@ import (
"github.com/stretchr/testify/suite" "github.com/stretchr/testify/suite"
"github.com/status-im/status-go/eth-node/crypto"
"github.com/status-im/status-go/images"
"github.com/status-im/status-go/protocol/common" "github.com/status-im/status-go/protocol/common"
"github.com/status-im/status-go/protocol/linkpreview/unfurlers"
"github.com/status-im/status-go/protocol/protobuf" "github.com/status-im/status-go/protocol/protobuf"
"github.com/status-im/status-go/protocol/requests"
) )
func TestMessengerLinkPreviews(t *testing.T) { func TestMessengerLinkPreviews(t *testing.T) {
@ -26,21 +28,6 @@ type MessengerLinkPreviewsTestSuite struct {
MessengerBaseTestSuite MessengerBaseTestSuite
} }
//func (s *MessengerLinkPreviewsTestSuite) SetupTest() {
// s.logger = tt.MustCreateTestLogger()
//
// c := waku.DefaultConfig
// c.MinimumAcceptedPoW = 0
// shh := waku.New(&c, s.logger)
// s.shh = gethbridge.NewGethWakuWrapper(shh)
// s.Require().NoError(shh.Start())
//
// s.m = s.newMessenger()
// s.privateKey = s.m.identity
// _, err := s.m.Start()
// s.Require().NoError(err)
//}
// StubMatcher should either return an http.Response or nil in case the request // StubMatcher should either return an http.Response or nil in case the request
// doesn't match. // doesn't match.
type StubMatcher func(req *http.Request) *http.Response type StubMatcher func(req *http.Request) *http.Response
@ -229,10 +216,11 @@ func (s *MessengerLinkPreviewsTestSuite) Test_UnfurlURLs_YouTube() {
transport.AddURLMatcher(thumbnailURL, s.readAsset("1.jpg"), nil) transport.AddURLMatcher(thumbnailURL, s.readAsset("1.jpg"), nil)
stubbedClient := http.Client{Transport: &transport} stubbedClient := http.Client{Transport: &transport}
previews, err := s.m.UnfurlURLs(&stubbedClient, []string{u}) response, err := s.m.UnfurlURLs(&stubbedClient, []string{u})
s.Require().NoError(err) s.Require().NoError(err)
s.Require().Len(previews, 1) s.Require().Len(response.StatusLinkPreviews, 0)
preview := previews[0] s.Require().Len(response.LinkPreviews, 1)
preview := response.LinkPreviews[0]
s.Require().Equal(expected.Type, preview.Type) s.Require().Equal(expected.Type, preview.Type)
s.Require().Equal(expected.URL, preview.URL) s.Require().Equal(expected.URL, preview.URL)
@ -273,10 +261,11 @@ func (s *MessengerLinkPreviewsTestSuite) Test_UnfurlURLs_Reddit() {
) )
stubbedClient := http.Client{Transport: &transport} stubbedClient := http.Client{Transport: &transport}
previews, err := s.m.UnfurlURLs(&stubbedClient, []string{u}) response, err := s.m.UnfurlURLs(&stubbedClient, []string{u})
s.Require().NoError(err) s.Require().NoError(err)
s.Require().Len(previews, 1) s.Require().Len(response.StatusLinkPreviews, 0)
preview := previews[0] s.Require().Len(response.LinkPreviews, 1)
preview := response.LinkPreviews[0]
s.Require().Equal(expected.Type, preview.Type) s.Require().Equal(expected.Type, preview.Type)
s.Require().Equal(expected.URL, preview.URL) s.Require().Equal(expected.URL, preview.URL)
@ -288,9 +277,10 @@ func (s *MessengerLinkPreviewsTestSuite) Test_UnfurlURLs_Reddit() {
func (s *MessengerLinkPreviewsTestSuite) Test_UnfurlURLs_Timeout() { func (s *MessengerLinkPreviewsTestSuite) Test_UnfurlURLs_Timeout() {
httpClient := http.Client{Timeout: time.Nanosecond} httpClient := http.Client{Timeout: time.Nanosecond}
previews, err := s.m.UnfurlURLs(&httpClient, []string{"https://status.im"}) response, err := s.m.UnfurlURLs(&httpClient, []string{"https://status.im"})
s.Require().NoError(err) s.Require().NoError(err)
s.Require().Empty(previews) s.Require().Len(response.StatusLinkPreviews, 0)
s.Require().Empty(response.LinkPreviews)
} }
func (s *MessengerLinkPreviewsTestSuite) Test_UnfurlURLs_CommonFailures() { func (s *MessengerLinkPreviewsTestSuite) Test_UnfurlURLs_CommonFailures() {
@ -304,19 +294,22 @@ func (s *MessengerLinkPreviewsTestSuite) Test_UnfurlURLs_CommonFailures() {
nil, nil,
) )
stubbedClient := http.Client{Transport: &transport} stubbedClient := http.Client{Transport: &transport}
previews, err := s.m.UnfurlURLs(&stubbedClient, []string{"https://wikipedia.org"}) response, err := s.m.UnfurlURLs(&stubbedClient, []string{"https://wikipedia.org"})
s.Require().NoError(err) s.Require().NoError(err)
s.Require().Empty(previews) s.Require().Len(response.StatusLinkPreviews, 0)
s.Require().Empty(response.LinkPreviews)
// Test 404. // Test 404.
previews, err = s.m.UnfurlURLs(&httpClient, []string{"https://github.com/status-im/i_do_not_exist"}) response, err = s.m.UnfurlURLs(&httpClient, []string{"https://github.com/status-im/i_do_not_exist"})
s.Require().NoError(err) s.Require().NoError(err)
s.Require().Empty(previews) s.Require().Len(response.StatusLinkPreviews, 0)
s.Require().Empty(response.LinkPreviews)
// Test no response when trying to get OpenGraph metadata. // Test no response when trying to get OpenGraph metadata.
previews, err = s.m.UnfurlURLs(&httpClient, []string{"https://wikipedia.o"}) response, err = s.m.UnfurlURLs(&httpClient, []string{"https://wikipedia.o"})
s.Require().NoError(err) s.Require().NoError(err)
s.Require().Empty(previews) s.Require().Len(response.StatusLinkPreviews, 0)
s.Require().Empty(response.LinkPreviews)
} }
func (s *MessengerLinkPreviewsTestSuite) Test_isSupportedImageURL() { func (s *MessengerLinkPreviewsTestSuite) Test_isSupportedImageURL() {
@ -339,7 +332,7 @@ func (s *MessengerLinkPreviewsTestSuite) Test_isSupportedImageURL() {
for _, e := range examples { for _, e := range examples {
parsedURL, err := url.Parse(e.url) parsedURL, err := url.Parse(e.url)
s.Require().NoError(err, e) s.Require().NoError(err, e)
s.Require().Equal(e.expected, unfurlers.IsSupportedImageURL(parsedURL), e.url) s.Require().Equal(e.expected, IsSupportedImageURL(parsedURL), e.url)
} }
} }
@ -363,10 +356,11 @@ func (s *MessengerLinkPreviewsTestSuite) Test_UnfurlURLs_Image() {
transport.AddURLMatcher(u, s.readAsset("IMG_1205.HEIC.jpg"), nil) transport.AddURLMatcher(u, s.readAsset("IMG_1205.HEIC.jpg"), nil)
stubbedClient := http.Client{Transport: &transport} stubbedClient := http.Client{Transport: &transport}
previews, err := s.m.UnfurlURLs(&stubbedClient, []string{u}) response, err := s.m.UnfurlURLs(&stubbedClient, []string{u})
s.Require().NoError(err) s.Require().NoError(err)
s.Require().Len(previews, 1) s.Require().Len(response.StatusLinkPreviews, 0)
preview := previews[0] s.Require().Len(response.LinkPreviews, 1)
preview := response.LinkPreviews[0]
s.Require().Equal(expected.Type, preview.Type) s.Require().Equal(expected.Type, preview.Type)
s.Require().Equal(expected.URL, preview.URL) s.Require().Equal(expected.URL, preview.URL)
@ -378,3 +372,138 @@ func (s *MessengerLinkPreviewsTestSuite) Test_UnfurlURLs_Image() {
s.Require().Equal(expected.Thumbnail.URL, preview.Thumbnail.URL) s.Require().Equal(expected.Thumbnail.URL, preview.Thumbnail.URL)
s.assertContainsLongString(expected.Thumbnail.DataURI, preview.Thumbnail.DataURI, 100) s.assertContainsLongString(expected.Thumbnail.DataURI, preview.Thumbnail.DataURI, 100)
} }
func (s *MessengerLinkPreviewsTestSuite) Test_UnfurlURLs_StatusContactAdded() {
identity, err := crypto.GenerateKey()
s.Require().NoError(err)
c, err := BuildContactFromPublicKey(&identity.PublicKey)
s.Require().NoError(err)
s.Require().NotNil(c)
pubkey, err := c.PublicKey()
s.Require().NoError(err)
shortKey, err := s.m.SerializePublicKey(crypto.CompressPubkey(pubkey))
s.Require().NoError(err)
payload, err := images.GetPayloadFromURI("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixA" +
"AAAiklEQVR4nOzWwQmFQAwG4ffEXmzLIizDImzLarQBhSwSGH7mO+9hh0DI9AthCI0hNIbQGEJjCI0hNIbQxITM1YfHfl69X3m2bsu/8i5mI" +
"obQGEJjCI0hNIbQlG+tUW83UtfNFjMRQ2gMofm8tUa3U9c2i5mIITSGqEnMRAyhMYTGEBpDaO4AAAD//5POEGncqtj1AAAAAElFTkSuQmCC")
s.Require().NoError(err)
icon := images.IdentityImage{
Width: 50,
Height: 50,
Payload: payload,
}
c.Bio = "TestBio_1"
c.DisplayName = "TestDisplayName_2"
c.Images = map[string]images.IdentityImage{}
c.Images[images.SmallDimName] = icon
s.m.allContacts.Store(c.ID, c)
// Generate a shared URL
u, err := s.m.ShareUserURLWithData(c.ID)
s.Require().NoError(err)
// Update contact info locally after creating the shared URL
// This is required to test that URL-decoded data is not used in the preview.
c.Bio = "TestBio_2"
c.DisplayName = "TestDisplayName_2"
s.m.allContacts.Store(c.ID, c)
r, err := s.m.UnfurlURLs(nil, []string{u})
s.Require().NoError(err)
s.Require().Len(r.StatusLinkPreviews, 1)
s.Require().Len(r.LinkPreviews, 0)
preview := r.StatusLinkPreviews[0]
s.Require().Equal(u, preview.URL)
s.Require().Nil(preview.Community)
s.Require().Nil(preview.Channel)
s.Require().NotNil(preview.Contact)
s.Require().Equal(shortKey, preview.Contact.PublicKey)
s.Require().Equal(c.DisplayName, preview.Contact.DisplayName)
s.Require().Equal(c.Bio, preview.Contact.Description)
s.Require().Equal(icon.Width, preview.Contact.Icon.Width)
s.Require().Equal(icon.Height, preview.Contact.Icon.Height)
s.Require().Equal("", preview.Contact.Icon.URL)
expectedDataURI, err := images.GetPayloadDataURI(icon.Payload)
s.Require().NoError(err)
s.Require().Equal(expectedDataURI, preview.Contact.Icon.DataURI)
}
func (s *MessengerLinkPreviewsTestSuite) Test_UnfurlURLs_StatusCommunityJoined() {
description := &requests.CreateCommunity{
Membership: protobuf.CommunityPermissions_NO_MEMBERSHIP,
Name: "status",
Description: "status community description",
Color: "#123456",
Image: "../_assets/tests/status.png", // 256*256 px
ImageAx: 0,
ImageAy: 0,
ImageBx: 256,
ImageBy: 256,
Banner: images.CroppedImage{
ImagePath: "../_assets/tests/IMG_1205.HEIC.jpg", // 2282*3352 px
X: 0,
Y: 0,
Width: 160,
Height: 90,
},
}
response, err := s.m.CreateCommunity(description, false)
s.Require().NoError(err)
s.Require().NotNil(response)
community := response.Communities()[0]
communityImages := community.Images()
s.Require().Len(communityImages, 3)
// Get icon data
icon, ok := communityImages[images.SmallDimName]
s.Require().True(ok)
iconWidth, iconHeight, err := images.GetImageDimensions(icon.Payload)
s.Require().NoError(err)
iconDataURI, err := images.GetPayloadDataURI(icon.Payload)
s.Require().NoError(err)
// Get banner data
banner, ok := communityImages[images.BannerIdentityName]
s.Require().True(ok)
bannerWidth, bannerHeight, err := images.GetImageDimensions(banner.Payload)
s.Require().NoError(err)
bannerDataURI, err := images.GetPayloadDataURI(banner.Payload)
s.Require().NoError(err)
// Create shared URL
u, err := s.m.ShareCommunityURLWithData(community.ID())
s.Require().NoError(err)
// Unfurl community shared URL
r, err := s.m.UnfurlURLs(nil, []string{u})
s.Require().NoError(err)
s.Require().Len(r.StatusLinkPreviews, 1)
s.Require().Len(r.LinkPreviews, 0)
preview := r.StatusLinkPreviews[0]
s.Require().Equal(u, preview.URL)
s.Require().NotNil(preview.Community)
s.Require().Nil(preview.Channel)
s.Require().Nil(preview.Contact)
s.Require().Equal(community.IDString(), preview.Community.CommunityID)
s.Require().Equal(community.Name(), preview.Community.DisplayName)
s.Require().Equal(community.Identity().Description, preview.Community.Description)
s.Require().Equal(iconWidth, preview.Community.Icon.Width)
s.Require().Equal(iconHeight, preview.Community.Icon.Height)
s.Require().Equal(iconDataURI, preview.Community.Icon.DataURI)
s.Require().Equal(bannerWidth, preview.Community.Banner.Width)
s.Require().Equal(bannerHeight, preview.Community.Banner.Height)
s.Require().Equal(bannerDataURI, preview.Community.Banner.DataURI)
}

View File

@ -55,6 +55,9 @@ func (m *Messenger) EditMessage(ctx context.Context, request *requests.EditMessa
if len(request.LinkPreviews) > 0 { if len(request.LinkPreviews) > 0 {
message.LinkPreviews = request.LinkPreviews message.LinkPreviews = request.LinkPreviews
} }
if len(request.StatusLinkPreviews) > 0 {
message.StatusLinkPreviews = request.StatusLinkPreviews
}
clock, _ := chat.NextClockAndTimestamp(m.getTimesource()) clock, _ := chat.NextClockAndTimestamp(m.getTimesource())
@ -65,12 +68,19 @@ func (m *Messenger) EditMessage(ctx context.Context, request *requests.EditMessa
editMessage.ChatId = message.ChatId editMessage.ChatId = message.ChatId
editMessage.MessageId = message.ID editMessage.MessageId = message.ID
editMessage.Clock = clock editMessage.Clock = clock
unfurledLinks, err := message.ConvertLinkPreviewsToProto() unfurledLinks, err := message.ConvertLinkPreviewsToProto()
if err != nil { if err != nil {
return nil, err return nil, err
} }
editMessage.UnfurledLinks = unfurledLinks editMessage.UnfurledLinks = unfurledLinks
unfurledStatusLinks, err := message.ConvertStatusLinkPreviewsToProto()
if err != nil {
return nil, err
}
editMessage.UnfurledStatusLinks = unfurledStatusLinks
err = m.applyEditMessage(editMessage.EditMessage, message) err = m.applyEditMessage(editMessage.EditMessage, message)
if err != nil { if err != nil {
return nil, err return nil, err
@ -346,6 +356,7 @@ func (m *Messenger) applyEditMessage(editMessage *protobuf.EditMessage, message
message.Text = editMessage.Text message.Text = editMessage.Text
message.EditedAt = editMessage.Clock message.EditedAt = editMessage.Clock
message.UnfurledLinks = editMessage.UnfurledLinks message.UnfurledLinks = editMessage.UnfurledLinks
message.UnfurledStatusLinks = editMessage.UnfurledStatusLinks
if editMessage.ContentType != protobuf.ChatMessage_UNKNOWN_CONTENT_TYPE { if editMessage.ContentType != protobuf.ChatMessage_UNKNOWN_CONTENT_TYPE {
message.ContentType = editMessage.ContentType message.ContentType = editMessage.ContentType
} }
@ -360,6 +371,7 @@ func (m *Messenger) applyEditMessage(editMessage *protobuf.EditMessage, message
originalEdit.ContentType = message.ContentType originalEdit.ContentType = message.ContentType
originalEdit.From = message.From originalEdit.From = message.From
originalEdit.UnfurledLinks = message.UnfurledLinks originalEdit.UnfurledLinks = message.UnfurledLinks
originalEdit.UnfurledStatusLinks = message.UnfurledStatusLinks
err := m.persistence.SaveEdit(originalEdit) err := m.persistence.SaveEdit(originalEdit)
if err != nil { if err != nil {
return err return err

View File

@ -41,10 +41,10 @@ type ContactURLData struct {
} }
type URLDataResponse struct { type URLDataResponse struct {
Community CommunityURLData `json:"community"` Community *CommunityURLData `json:"community"`
Channel CommunityChannelURLData `json:"channel"` Channel *CommunityChannelURLData `json:"channel"`
Contact ContactURLData `json:"contact"` Contact *ContactURLData `json:"contact"`
Shard *common.Shard `json:"shard,omitempty"` Shard *common.Shard `json:"shard,omitempty"`
} }
const baseShareURL = "https://status.app" const baseShareURL = "https://status.app"
@ -92,8 +92,8 @@ func (m *Messenger) ShareCommunityURLWithChatKey(communityID types.HexBytes) (st
return fmt.Sprintf("%s/c#%s", baseShareURL, shortKey), nil return fmt.Sprintf("%s/c#%s", baseShareURL, shortKey), nil
} }
func (m *Messenger) prepareCommunityData(community *communities.Community) CommunityURLData { func (m *Messenger) prepareCommunityData(community *communities.Community) *CommunityURLData {
return CommunityURLData{ return &CommunityURLData{
DisplayName: community.Identity().DisplayName, DisplayName: community.Identity().DisplayName,
Description: community.DescriptionText(), Description: community.DescriptionText(),
MembersCount: uint32(community.MembersCount()), MembersCount: uint32(community.MembersCount()),
@ -203,7 +203,7 @@ func (m *Messenger) parseCommunityURLWithData(data string, chatKey string) (*URL
} }
return &URLDataResponse{ return &URLDataResponse{
Community: CommunityURLData{ Community: &CommunityURLData{
DisplayName: communityProto.DisplayName, DisplayName: communityProto.DisplayName,
Description: communityProto.Description, Description: communityProto.Description,
MembersCount: communityProto.MembersCount, MembersCount: communityProto.MembersCount,
@ -237,8 +237,8 @@ func (m *Messenger) ShareCommunityChannelURLWithChatKey(request *requests.Commun
return fmt.Sprintf("%s/cc/%s#%s", baseShareURL, request.ChannelID, shortKey), nil return fmt.Sprintf("%s/cc/%s#%s", baseShareURL, request.ChannelID, shortKey), nil
} }
func (m *Messenger) prepareCommunityChannelData(channel *protobuf.CommunityChat) CommunityChannelURLData { func (m *Messenger) prepareCommunityChannelData(channel *protobuf.CommunityChat) *CommunityChannelURLData {
return CommunityChannelURLData{ return &CommunityChannelURLData{
Emoji: channel.Identity.Emoji, Emoji: channel.Identity.Emoji,
DisplayName: channel.Identity.DisplayName, DisplayName: channel.Identity.DisplayName,
Description: channel.Identity.Description, Description: channel.Identity.Description,
@ -383,7 +383,7 @@ func (m *Messenger) parseCommunityChannelURLWithData(data string, chatKey string
} }
return &URLDataResponse{ return &URLDataResponse{
Community: CommunityURLData{ Community: &CommunityURLData{
DisplayName: channelProto.Community.DisplayName, DisplayName: channelProto.Community.DisplayName,
Description: channelProto.Community.Description, Description: channelProto.Community.Description,
MembersCount: channelProto.Community.MembersCount, MembersCount: channelProto.Community.MembersCount,
@ -391,7 +391,7 @@ func (m *Messenger) parseCommunityChannelURLWithData(data string, chatKey string
TagIndices: channelProto.Community.TagIndices, TagIndices: channelProto.Community.TagIndices,
CommunityID: types.EncodeHex(communityID), CommunityID: types.EncodeHex(communityID),
}, },
Channel: CommunityChannelURLData{ Channel: &CommunityChannelURLData{
Emoji: channelProto.Emoji, Emoji: channelProto.Emoji,
DisplayName: channelProto.DisplayName, DisplayName: channelProto.DisplayName,
Description: channelProto.Description, Description: channelProto.Description,
@ -416,8 +416,8 @@ func (m *Messenger) ShareUserURLWithChatKey(contactID string) (string, error) {
return fmt.Sprintf("%s/u#%s", baseShareURL, shortKey), nil return fmt.Sprintf("%s/u#%s", baseShareURL, shortKey), nil
} }
func (m *Messenger) prepareContactData(contact *Contact) ContactURLData { func (m *Messenger) prepareContactData(contact *Contact) *ContactURLData {
return ContactURLData{ return &ContactURLData{
DisplayName: contact.DisplayName, DisplayName: contact.DisplayName,
} }
} }
@ -471,6 +471,7 @@ func (m *Messenger) prepareEncodedUserData(contact *Contact) (string, string, er
userProto := &protobuf.User{ userProto := &protobuf.User{
DisplayName: contact.DisplayName, DisplayName: contact.DisplayName,
Description: contact.Bio,
} }
userData, err := proto.Marshal(userProto) userData, err := proto.Marshal(userProto)
@ -528,7 +529,7 @@ func (m *Messenger) parseUserURLWithData(data string, chatKey string) (*URLDataR
} }
return &URLDataResponse{ return &URLDataResponse{
Contact: ContactURLData{ Contact: &ContactURLData{
DisplayName: userProto.DisplayName, DisplayName: userProto.DisplayName,
Description: userProto.Description, Description: userProto.Description,
PublicKey: chatKey, PublicKey: chatKey,
@ -536,8 +537,12 @@ func (m *Messenger) parseUserURLWithData(data string, chatKey string) (*URLDataR
}, nil }, nil
} }
func (m *Messenger) IsStatusSharedURL(url string) bool {
return strings.HasPrefix(url, baseShareURL)
}
func (m *Messenger) ParseSharedURL(url string) (*URLDataResponse, error) { func (m *Messenger) ParseSharedURL(url string) (*URLDataResponse, error) {
if !strings.HasPrefix(url, baseShareURL) { if !m.IsStatusSharedURL(url) {
return nil, fmt.Errorf("url should start with '%s'", baseShareURL) return nil, fmt.Errorf("url should start with '%s'", baseShareURL)
} }

View File

@ -205,6 +205,7 @@ func (s *MessengerShareUrlsSuite) TestParseCommunityURLWithData() {
s.Require().NotNil(urlData) s.Require().NotNil(urlData)
s.Require().NotNil(urlData.Community) s.Require().NotNil(urlData.Community)
s.Require().Equal("0x02a3d2fdb9ac335917bf9d46b38d7496c00bbfadbaf832e8aa61d13ac2b4452084", urlData.Community.CommunityID)
s.Require().Equal("Doodles", urlData.Community.DisplayName) s.Require().Equal("Doodles", urlData.Community.DisplayName)
s.Require().Equal("Coloring the world with joy • ᴗ •", urlData.Community.Description) s.Require().Equal("Coloring the world with joy • ᴗ •", urlData.Community.Description)
s.Require().Equal(uint32(446744), urlData.Community.MembersCount) s.Require().Equal(uint32(446744), urlData.Community.MembersCount)
@ -362,7 +363,7 @@ func (s *MessengerShareUrlsSuite) TestParseUserURLWithChatKey() {
s.Require().NotNil(urlData.Contact) s.Require().NotNil(urlData.Contact)
s.Require().Equal(contact.DisplayName, urlData.Contact.DisplayName) s.Require().Equal(contact.DisplayName, urlData.Contact.DisplayName)
s.Require().Equal(contact.Bio, urlData.Contact.DisplayName) s.Require().Equal(contact.Bio, urlData.Contact.Description)
} }
func (s *MessengerShareUrlsSuite) TestShareUserURLWithENS() { func (s *MessengerShareUrlsSuite) TestShareUserURLWithENS() {

View File

@ -2312,6 +2312,21 @@ func (s *MessengerSuite) TestSendMessageWithPreviews() {
} }
inputMsg.LinkPreviews = []common.LinkPreview{preview} inputMsg.LinkPreviews = []common.LinkPreview{preview}
sentContactPreview := common.StatusLinkPreview{
URL: "https://status.app/u/TestUrl",
Contact: &common.StatusContactLinkPreview{
PublicKey: "TestPublicKey",
DisplayName: "TestDisplayName",
Description: "Test description",
Icon: common.LinkPreviewThumbnail{
Width: 100,
Height: 200,
DataURI: "data:image/png;base64,iVBORw0KGgoAAAANSUg=",
},
},
}
inputMsg.StatusLinkPreviews = []common.StatusLinkPreview{sentContactPreview}
_, err = s.m.SendChatMessage(context.Background(), inputMsg) _, err = s.m.SendChatMessage(context.Background(), inputMsg)
s.NoError(err) s.NoError(err)
@ -2322,14 +2337,14 @@ func (s *MessengerSuite) TestSendMessageWithPreviews() {
// Test unfurled links have been saved. // Test unfurled links have been saved.
s.Require().Len(savedMsg.UnfurledLinks, 1) s.Require().Len(savedMsg.UnfurledLinks, 1)
unfurledLink := savedMsg.UnfurledLinks[0] savedLinkProto := savedMsg.UnfurledLinks[0]
s.Require().Equal(preview.Type, unfurledLink.Type) s.Require().Equal(preview.Type, savedLinkProto.Type)
s.Require().Equal(preview.URL, unfurledLink.Url) s.Require().Equal(preview.URL, savedLinkProto.Url)
s.Require().Equal(preview.Title, unfurledLink.Title) s.Require().Equal(preview.Title, savedLinkProto.Title)
s.Require().Equal(preview.Description, unfurledLink.Description) s.Require().Equal(preview.Description, savedLinkProto.Description)
// Test the saved link thumbnail can be encoded as a data URI. // Test the saved link thumbnail can be encoded as a data URI.
expectedDataURI, err := images.GetPayloadDataURI(unfurledLink.ThumbnailPayload) expectedDataURI, err := images.GetPayloadDataURI(savedLinkProto.ThumbnailPayload)
s.Require().NoError(err) s.Require().NoError(err)
s.Require().Equal(preview.Thumbnail.DataURI, expectedDataURI) s.Require().Equal(preview.Thumbnail.DataURI, expectedDataURI)
@ -2337,6 +2352,43 @@ func (s *MessengerSuite) TestSendMessageWithPreviews() {
httpServer.MakeLinkPreviewThumbnailURL(inputMsg.ID, preview.URL), httpServer.MakeLinkPreviewThumbnailURL(inputMsg.ID, preview.URL),
savedMsg.LinkPreviews[0].Thumbnail.URL, savedMsg.LinkPreviews[0].Thumbnail.URL,
) )
// Check saved message protobuf fields
s.Require().NotNil(savedMsg.UnfurledStatusLinks)
s.Require().Len(savedMsg.UnfurledStatusLinks.UnfurledStatusLinks, 1)
savedStatusLinkProto := savedMsg.UnfurledStatusLinks.UnfurledStatusLinks[0]
s.Require().Equal(sentContactPreview.URL, savedStatusLinkProto.Url)
s.Require().NotNil(savedStatusLinkProto.GetContact())
s.Require().Nil(savedStatusLinkProto.GetCommunity())
s.Require().Nil(savedStatusLinkProto.GetChannel())
savedContactProto := savedStatusLinkProto.GetContact()
s.Require().Equal(sentContactPreview.Contact.PublicKey, string(savedContactProto.PublicKey))
s.Require().Equal(sentContactPreview.Contact.DisplayName, savedContactProto.DisplayName)
s.Require().Equal(sentContactPreview.Contact.Description, savedContactProto.Description)
s.Require().NotNil(savedContactProto.Icon)
s.Require().Equal(sentContactPreview.Contact.Icon.Width, int(savedContactProto.Icon.Width))
s.Require().Equal(sentContactPreview.Contact.Icon.Height, int(savedContactProto.Icon.Height))
iconDataURI, err := images.GetPayloadDataURI(savedContactProto.Icon.Payload)
s.Require().NoError(err)
s.Require().Equal(sentContactPreview.Contact.Icon.DataURI, iconDataURI)
// Check message `StatusLinkPreviews` properties
s.Require().Len(savedMsg.StatusLinkPreviews, 1)
savedStatusLinkPreview := savedMsg.StatusLinkPreviews[0]
s.Require().Equal(sentContactPreview.URL, savedStatusLinkPreview.URL)
s.Require().NotNil(savedStatusLinkPreview.Contact)
savedContact := savedStatusLinkPreview.Contact
s.Require().Equal(sentContactPreview.Contact.PublicKey, savedContact.PublicKey)
s.Require().Equal(sentContactPreview.Contact.DisplayName, savedContact.DisplayName)
s.Require().Equal(sentContactPreview.Contact.Description, savedContact.Description)
s.Require().NotNil(savedContact.Icon)
s.Require().Equal(sentContactPreview.Contact.Icon.Width, savedContact.Icon.Width)
s.Require().Equal(sentContactPreview.Contact.Icon.Height, savedContact.Icon.Height)
expectedIconURL := httpServer.MakeStatusLinkPreviewThumbnailURL(inputMsg.ID, sentContactPreview.URL, "contact-icon")
s.Require().Equal(expectedIconURL, savedContact.Icon.URL)
} }
func (s *MessengerSuite) TestMessageSent() { func (s *MessengerSuite) TestMessageSent() {

View File

@ -102,6 +102,7 @@
// 1689931300_add_community_tokens_deployer_and_priv_level.up.sql (156B) // 1689931300_add_community_tokens_deployer_and_priv_level.up.sql (156B)
// 1693311881_add_unfurled_links_to_message_edits.up.sql (64B) // 1693311881_add_unfurled_links_to_message_edits.up.sql (64B)
// 1693311981_community_shard.up.sql (156B) // 1693311981_community_shard.up.sql (156B)
// 1695331492_add_status_link_previews.up.sql (136B)
// README.md (554B) // README.md (554B)
// doc.go (850B) // doc.go (850B)
@ -187,7 +188,7 @@ func _000001_initDownDbSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "000001_init.down.db.sql", size: 65, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "000001_init.down.db.sql", size: 65, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5e, 0xbb, 0x3f, 0x1, 0x75, 0x19, 0x70, 0x86, 0xa7, 0x34, 0x40, 0x17, 0x34, 0x3e, 0x18, 0x51, 0x79, 0xd4, 0x22, 0xad, 0x8f, 0x80, 0xcc, 0xa6, 0xcc, 0x6, 0x2b, 0x62, 0x2, 0x47, 0xba, 0xf9}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5e, 0xbb, 0x3f, 0x1, 0x75, 0x19, 0x70, 0x86, 0xa7, 0x34, 0x40, 0x17, 0x34, 0x3e, 0x18, 0x51, 0x79, 0xd4, 0x22, 0xad, 0x8f, 0x80, 0xcc, 0xa6, 0xcc, 0x6, 0x2b, 0x62, 0x2, 0x47, 0xba, 0xf9}}
return a, nil return a, nil
} }
@ -207,7 +208,7 @@ func _000001_initUpDbSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "000001_init.up.db.sql", size: 2719, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "000001_init.up.db.sql", size: 2719, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x60, 0xdc, 0xeb, 0xe, 0xc2, 0x4f, 0x75, 0xa, 0xf6, 0x3e, 0xc7, 0xc4, 0x4, 0xe2, 0xe1, 0xa4, 0x73, 0x2f, 0x4a, 0xad, 0x1a, 0x0, 0xc3, 0x93, 0x9d, 0x77, 0x3e, 0x31, 0x91, 0x77, 0x2e, 0xc8}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x60, 0xdc, 0xeb, 0xe, 0xc2, 0x4f, 0x75, 0xa, 0xf6, 0x3e, 0xc7, 0xc4, 0x4, 0xe2, 0xe1, 0xa4, 0x73, 0x2f, 0x4a, 0xad, 0x1a, 0x0, 0xc3, 0x93, 0x9d, 0x77, 0x3e, 0x31, 0x91, 0x77, 0x2e, 0xc8}}
return a, nil return a, nil
} }
@ -227,7 +228,7 @@ func _000002_add_last_ens_clock_valueUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "000002_add_last_ens_clock_value.up.sql", size: 77, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "000002_add_last_ens_clock_value.up.sql", size: 77, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4d, 0x3, 0x8f, 0xd5, 0x85, 0x83, 0x47, 0xbe, 0xf9, 0x82, 0x7e, 0x81, 0xa4, 0xbd, 0xaa, 0xd5, 0x98, 0x18, 0x5, 0x2d, 0x82, 0x42, 0x3b, 0x3, 0x50, 0xc3, 0x1e, 0x84, 0x35, 0xf, 0xb6, 0x2b}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4d, 0x3, 0x8f, 0xd5, 0x85, 0x83, 0x47, 0xbe, 0xf9, 0x82, 0x7e, 0x81, 0xa4, 0xbd, 0xaa, 0xd5, 0x98, 0x18, 0x5, 0x2d, 0x82, 0x42, 0x3b, 0x3, 0x50, 0xc3, 0x1e, 0x84, 0x35, 0xf, 0xb6, 0x2b}}
return a, nil return a, nil
} }
@ -247,7 +248,7 @@ func _1586358095_add_replaceUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1586358095_add_replace.up.sql", size: 224, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1586358095_add_replace.up.sql", size: 224, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd2, 0xb3, 0xa9, 0xc7, 0x7f, 0x9d, 0x8f, 0x43, 0x8c, 0x9e, 0x58, 0x8d, 0x44, 0xbc, 0xfa, 0x6b, 0x5f, 0x3f, 0x5a, 0xbe, 0xe8, 0xb1, 0x16, 0xf, 0x91, 0x2a, 0xa0, 0x71, 0xbb, 0x8d, 0x6b, 0xcb}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd2, 0xb3, 0xa9, 0xc7, 0x7f, 0x9d, 0x8f, 0x43, 0x8c, 0x9e, 0x58, 0x8d, 0x44, 0xbc, 0xfa, 0x6b, 0x5f, 0x3f, 0x5a, 0xbe, 0xe8, 0xb1, 0x16, 0xf, 0x91, 0x2a, 0xa0, 0x71, 0xbb, 0x8d, 0x6b, 0xcb}}
return a, nil return a, nil
} }
@ -267,7 +268,7 @@ func _1588665364_add_image_dataUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1588665364_add_image_data.up.sql", size: 186, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1588665364_add_image_data.up.sql", size: 186, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd6, 0xc6, 0x35, 0xb4, 0x4c, 0x39, 0x96, 0x29, 0x30, 0xda, 0xf4, 0x8f, 0xcb, 0xf1, 0x9f, 0x84, 0xdc, 0x88, 0xd4, 0xd5, 0xbc, 0xb6, 0x5b, 0x46, 0x78, 0x67, 0x76, 0x1a, 0x5, 0x36, 0xdc, 0xe5}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd6, 0xc6, 0x35, 0xb4, 0x4c, 0x39, 0x96, 0x29, 0x30, 0xda, 0xf4, 0x8f, 0xcb, 0xf1, 0x9f, 0x84, 0xdc, 0x88, 0xd4, 0xd5, 0xbc, 0xb6, 0x5b, 0x46, 0x78, 0x67, 0x76, 0x1a, 0x5, 0x36, 0xdc, 0xe5}}
return a, nil return a, nil
} }
@ -287,7 +288,7 @@ func _1589365189_add_pow_targetUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1589365189_add_pow_target.up.sql", size: 66, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1589365189_add_pow_target.up.sql", size: 66, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4e, 0x3a, 0xe2, 0x2e, 0x7d, 0xaf, 0xbb, 0xcc, 0x21, 0xa1, 0x7a, 0x41, 0x9a, 0xd0, 0xbb, 0xa9, 0xc8, 0x35, 0xf9, 0x32, 0x34, 0x46, 0x44, 0x9a, 0x86, 0x40, 0x7c, 0xb9, 0x23, 0xc7, 0x3, 0x3f}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4e, 0x3a, 0xe2, 0x2e, 0x7d, 0xaf, 0xbb, 0xcc, 0x21, 0xa1, 0x7a, 0x41, 0x9a, 0xd0, 0xbb, 0xa9, 0xc8, 0x35, 0xf9, 0x32, 0x34, 0x46, 0x44, 0x9a, 0x86, 0x40, 0x7c, 0xb9, 0x23, 0xc7, 0x3, 0x3f}}
return a, nil return a, nil
} }
@ -307,7 +308,7 @@ func _1591277220_add_index_messagesUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1591277220_add_index_messages.up.sql", size: 240, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1591277220_add_index_messages.up.sql", size: 240, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9c, 0xfe, 0xbe, 0xd5, 0xb8, 0x8f, 0xdd, 0xef, 0xbb, 0xa8, 0xad, 0x7f, 0xed, 0x5b, 0x5b, 0x2f, 0xe6, 0x82, 0x27, 0x78, 0x1f, 0xb9, 0x57, 0xdc, 0x8, 0xc2, 0xb2, 0xa9, 0x9a, 0x4, 0xe1, 0x7a}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9c, 0xfe, 0xbe, 0xd5, 0xb8, 0x8f, 0xdd, 0xef, 0xbb, 0xa8, 0xad, 0x7f, 0xed, 0x5b, 0x5b, 0x2f, 0xe6, 0x82, 0x27, 0x78, 0x1f, 0xb9, 0x57, 0xdc, 0x8, 0xc2, 0xb2, 0xa9, 0x9a, 0x4, 0xe1, 0x7a}}
return a, nil return a, nil
} }
@ -327,7 +328,7 @@ func _1593087212_add_mute_chat_and_raw_message_fieldsUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1593087212_add_mute_chat_and_raw_message_fields.up.sql", size: 215, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1593087212_add_mute_chat_and_raw_message_fields.up.sql", size: 215, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x73, 0x99, 0x61, 0xd1, 0xaa, 0xb4, 0xbf, 0xaf, 0xd7, 0x20, 0x17, 0x40, 0xf9, 0x2, 0xfb, 0xcc, 0x40, 0x2a, 0xd, 0x86, 0x36, 0x30, 0x88, 0x89, 0x25, 0x80, 0x42, 0xb0, 0x5b, 0xe9, 0x73, 0x78}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x73, 0x99, 0x61, 0xd1, 0xaa, 0xb4, 0xbf, 0xaf, 0xd7, 0x20, 0x17, 0x40, 0xf9, 0x2, 0xfb, 0xcc, 0x40, 0x2a, 0xd, 0x86, 0x36, 0x30, 0x88, 0x89, 0x25, 0x80, 0x42, 0xb0, 0x5b, 0xe9, 0x73, 0x78}}
return a, nil return a, nil
} }
@ -347,7 +348,7 @@ func _1595862781_add_audio_dataUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1595862781_add_audio_data.up.sql", size: 246, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1595862781_add_audio_data.up.sql", size: 246, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xae, 0xd2, 0xee, 0x55, 0xfb, 0x36, 0xa4, 0x92, 0x66, 0xe, 0x81, 0x62, 0x1e, 0x7a, 0x69, 0xa, 0xd5, 0x4b, 0xa5, 0x6a, 0x8d, 0x1d, 0xce, 0xf3, 0x3e, 0xc0, 0x5f, 0x9c, 0x66, 0x1b, 0xb4, 0xed}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xae, 0xd2, 0xee, 0x55, 0xfb, 0x36, 0xa4, 0x92, 0x66, 0xe, 0x81, 0x62, 0x1e, 0x7a, 0x69, 0xa, 0xd5, 0x4b, 0xa5, 0x6a, 0x8d, 0x1d, 0xce, 0xf3, 0x3e, 0xc0, 0x5f, 0x9c, 0x66, 0x1b, 0xb4, 0xed}}
return a, nil return a, nil
} }
@ -367,7 +368,7 @@ func _1595865249_create_emoji_reactions_tableUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1595865249_create_emoji_reactions_table.up.sql", size: 300, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1595865249_create_emoji_reactions_table.up.sql", size: 300, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3e, 0xc5, 0x43, 0x5c, 0x3d, 0x53, 0x43, 0x2c, 0x1a, 0xa5, 0xb6, 0xbf, 0x7, 0x4, 0x5a, 0x3e, 0x40, 0x8b, 0xa4, 0x57, 0x12, 0x58, 0xbc, 0x42, 0xe2, 0xc3, 0xde, 0x76, 0x98, 0x80, 0xe2, 0xbe}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3e, 0xc5, 0x43, 0x5c, 0x3d, 0x53, 0x43, 0x2c, 0x1a, 0xa5, 0xb6, 0xbf, 0x7, 0x4, 0x5a, 0x3e, 0x40, 0x8b, 0xa4, 0x57, 0x12, 0x58, 0xbc, 0x42, 0xe2, 0xc3, 0xde, 0x76, 0x98, 0x80, 0xe2, 0xbe}}
return a, nil return a, nil
} }
@ -387,7 +388,7 @@ func _1596805115_create_group_chat_invitations_tableUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1596805115_create_group_chat_invitations_table.up.sql", size: 231, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1596805115_create_group_chat_invitations_table.up.sql", size: 231, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6d, 0xb1, 0x14, 0x6d, 0x54, 0x28, 0x67, 0xc3, 0x23, 0x6a, 0xfc, 0x80, 0xdf, 0x9e, 0x4c, 0x35, 0x36, 0xf, 0xf8, 0xf3, 0x5f, 0xae, 0xad, 0xb, 0xc1, 0x51, 0x8e, 0x17, 0x7, 0xe5, 0x7f, 0x91}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6d, 0xb1, 0x14, 0x6d, 0x54, 0x28, 0x67, 0xc3, 0x23, 0x6a, 0xfc, 0x80, 0xdf, 0x9e, 0x4c, 0x35, 0x36, 0xf, 0xf8, 0xf3, 0x5f, 0xae, 0xad, 0xb, 0xc1, 0x51, 0x8e, 0x17, 0x7, 0xe5, 0x7f, 0x91}}
return a, nil return a, nil
} }
@ -407,7 +408,7 @@ func _1597322655_add_invitation_admin_chat_fieldUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1597322655_add_invitation_admin_chat_field.up.sql", size: 54, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1597322655_add_invitation_admin_chat_field.up.sql", size: 54, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa9, 0x7a, 0xa0, 0xf2, 0xdb, 0x13, 0x91, 0x91, 0xa8, 0x34, 0x1a, 0xa1, 0x49, 0x68, 0xd5, 0xae, 0x2c, 0xd8, 0xd5, 0xea, 0x8f, 0x8c, 0xc7, 0x2, 0x4e, 0x58, 0x2c, 0x3a, 0x14, 0xd4, 0x4f, 0x2c}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa9, 0x7a, 0xa0, 0xf2, 0xdb, 0x13, 0x91, 0x91, 0xa8, 0x34, 0x1a, 0xa1, 0x49, 0x68, 0xd5, 0xae, 0x2c, 0xd8, 0xd5, 0xea, 0x8f, 0x8c, 0xc7, 0x2, 0x4e, 0x58, 0x2c, 0x3a, 0x14, 0xd4, 0x4f, 0x2c}}
return a, nil return a, nil
} }
@ -427,7 +428,7 @@ func _1597757544_add_nicknameUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1597757544_add_nickname.up.sql", size: 52, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1597757544_add_nickname.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf4, 0xa2, 0x64, 0x50, 0xc5, 0x4, 0xb9, 0x8b, 0xd1, 0x18, 0x9b, 0xc3, 0x91, 0x36, 0x2a, 0x1f, 0xc3, 0x6c, 0x2d, 0x92, 0xf8, 0x5e, 0xff, 0xb1, 0x59, 0x61, 0x2, 0x1c, 0xe1, 0x85, 0x90, 0xa4}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf4, 0xa2, 0x64, 0x50, 0xc5, 0x4, 0xb9, 0x8b, 0xd1, 0x18, 0x9b, 0xc3, 0x91, 0x36, 0x2a, 0x1f, 0xc3, 0x6c, 0x2d, 0x92, 0xf8, 0x5e, 0xff, 0xb1, 0x59, 0x61, 0x2, 0x1c, 0xe1, 0x85, 0x90, 0xa4}}
return a, nil return a, nil
} }
@ -447,7 +448,7 @@ func _1598955122_add_mentionsUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1598955122_add_mentions.up.sql", size: 52, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1598955122_add_mentions.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8d, 0x22, 0x17, 0x92, 0xd2, 0x11, 0x4e, 0x7, 0x93, 0x9a, 0x55, 0xfd, 0xb, 0x97, 0xc4, 0x63, 0x6a, 0x81, 0x97, 0xcd, 0xb2, 0xf8, 0x4b, 0x5f, 0x3c, 0xfa, 0x3a, 0x38, 0x53, 0x10, 0xed, 0x9d}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8d, 0x22, 0x17, 0x92, 0xd2, 0x11, 0x4e, 0x7, 0x93, 0x9a, 0x55, 0xfd, 0xb, 0x97, 0xc4, 0x63, 0x6a, 0x81, 0x97, 0xcd, 0xb2, 0xf8, 0x4b, 0x5f, 0x3c, 0xfa, 0x3a, 0x38, 0x53, 0x10, 0xed, 0x9d}}
return a, nil return a, nil
} }
@ -467,7 +468,7 @@ func _1599641390_add_emoji_reactions_indexUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1599641390_add_emoji_reactions_index.up.sql", size: 126, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1599641390_add_emoji_reactions_index.up.sql", size: 126, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf9, 0xd8, 0xdc, 0xa7, 0xb, 0x92, 0x7a, 0x61, 0x37, 0x24, 0x1c, 0x77, 0x5e, 0xe, 0x7e, 0xfc, 0x9f, 0x98, 0x7b, 0x65, 0xe7, 0xf9, 0x71, 0x57, 0x89, 0x2d, 0x90, 0x1b, 0xf6, 0x5e, 0x37, 0xe8}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf9, 0xd8, 0xdc, 0xa7, 0xb, 0x92, 0x7a, 0x61, 0x37, 0x24, 0x1c, 0x77, 0x5e, 0xe, 0x7e, 0xfc, 0x9f, 0x98, 0x7b, 0x65, 0xe7, 0xf9, 0x71, 0x57, 0x89, 0x2d, 0x90, 0x1b, 0xf6, 0x5e, 0x37, 0xe8}}
return a, nil return a, nil
} }
@ -487,7 +488,7 @@ func _1599720851_add_seen_index_remove_long_messagesUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1599720851_add_seen_index_remove_long_messages.up.sql", size: 150, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1599720851_add_seen_index_remove_long_messages.up.sql", size: 150, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x24, 0x1c, 0xc4, 0x78, 0x91, 0xc7, 0xeb, 0xfe, 0xc8, 0xa0, 0xd8, 0x13, 0x27, 0x97, 0xc8, 0x96, 0x56, 0x97, 0x33, 0x2c, 0x1e, 0x16, 0x8a, 0xd3, 0x49, 0x99, 0x3, 0xe9, 0xbb, 0xc4, 0x5, 0x3c}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x24, 0x1c, 0xc4, 0x78, 0x91, 0xc7, 0xeb, 0xfe, 0xc8, 0xa0, 0xd8, 0x13, 0x27, 0x97, 0xc8, 0x96, 0x56, 0x97, 0x33, 0x2c, 0x1e, 0x16, 0x8a, 0xd3, 0x49, 0x99, 0x3, 0xe9, 0xbb, 0xc4, 0x5, 0x3c}}
return a, nil return a, nil
} }
@ -507,7 +508,7 @@ func _1603198582_add_profile_chat_fieldUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1603198582_add_profile_chat_field.up.sql", size: 45, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1603198582_add_profile_chat_field.up.sql", size: 45, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xaa, 0xca, 0xe, 0x46, 0xa0, 0x9, 0x9d, 0x47, 0x57, 0xe9, 0xfb, 0x17, 0xeb, 0x9c, 0xf6, 0xb8, 0x1d, 0xe9, 0xd, 0x0, 0xd5, 0xe5, 0xd8, 0x9e, 0x60, 0xa, 0xbf, 0x32, 0x2c, 0x52, 0x7f, 0x6a}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xaa, 0xca, 0xe, 0x46, 0xa0, 0x9, 0x9d, 0x47, 0x57, 0xe9, 0xfb, 0x17, 0xeb, 0x9c, 0xf6, 0xb8, 0x1d, 0xe9, 0xd, 0x0, 0xd5, 0xe5, 0xd8, 0x9e, 0x60, 0xa, 0xbf, 0x32, 0x2c, 0x52, 0x7f, 0x6a}}
return a, nil return a, nil
} }
@ -527,7 +528,7 @@ func _1603816533_add_linksUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1603816533_add_links.up.sql", size: 48, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1603816533_add_links.up.sql", size: 48, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc9, 0x24, 0xd6, 0x1d, 0xa, 0x83, 0x1e, 0x4d, 0xf, 0xae, 0x4d, 0x8c, 0x51, 0x32, 0xa8, 0x37, 0xb0, 0x14, 0xfb, 0x32, 0x34, 0xc8, 0xc, 0x4e, 0x5b, 0xc5, 0x15, 0x65, 0x73, 0x0, 0x0, 0x1d}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc9, 0x24, 0xd6, 0x1d, 0xa, 0x83, 0x1e, 0x4d, 0xf, 0xae, 0x4d, 0x8c, 0x51, 0x32, 0xa8, 0x37, 0xb0, 0x14, 0xfb, 0x32, 0x34, 0xc8, 0xc, 0x4e, 0x5b, 0xc5, 0x15, 0x65, 0x73, 0x0, 0x0, 0x1d}}
return a, nil return a, nil
} }
@ -547,7 +548,7 @@ func _1603888149_create_chat_identity_last_published_tableUpSql() (*asset, error
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1603888149_create_chat_identity_last_published_table.up.sql", size: 407, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1603888149_create_chat_identity_last_published_table.up.sql", size: 407, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7f, 0x9, 0xf, 0xfb, 0xdb, 0x3c, 0x86, 0x70, 0x82, 0xda, 0x10, 0x25, 0xe2, 0x4e, 0x40, 0x45, 0xab, 0x8b, 0x1c, 0x91, 0x7c, 0xf1, 0x70, 0x2e, 0x81, 0xf3, 0x71, 0x45, 0xda, 0xe2, 0xa4, 0x57}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7f, 0x9, 0xf, 0xfb, 0xdb, 0x3c, 0x86, 0x70, 0x82, 0xda, 0x10, 0x25, 0xe2, 0x4e, 0x40, 0x45, 0xab, 0x8b, 0x1c, 0x91, 0x7c, 0xf1, 0x70, 0x2e, 0x81, 0xf3, 0x71, 0x45, 0xda, 0xe2, 0xa4, 0x57}}
return a, nil return a, nil
} }
@ -567,7 +568,7 @@ func _1605075346_add_communitiesUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1605075346_add_communities.up.sql", size: 6971, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1605075346_add_communities.up.sql", size: 6971, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1f, 0x64, 0xea, 0xb4, 0xae, 0x9e, 0xdb, 0x9, 0x58, 0xb6, 0x5c, 0x7a, 0x50, 0xc5, 0xfe, 0x93, 0x5d, 0x36, 0x85, 0x5d, 0x6a, 0xba, 0xc9, 0x7e, 0x84, 0xd7, 0xbf, 0x2a, 0x53, 0xf3, 0x97, 0xf1}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1f, 0x64, 0xea, 0xb4, 0xae, 0x9e, 0xdb, 0x9, 0x58, 0xb6, 0x5c, 0x7a, 0x50, 0xc5, 0xfe, 0x93, 0x5d, 0x36, 0x85, 0x5d, 0x6a, 0xba, 0xc9, 0x7e, 0x84, 0xd7, 0xbf, 0x2a, 0x53, 0xf3, 0x97, 0xf1}}
return a, nil return a, nil
} }
@ -587,7 +588,7 @@ func _1610117927_add_message_cacheUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1610117927_add_message_cache.up.sql", size: 142, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1610117927_add_message_cache.up.sql", size: 142, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x34, 0xf1, 0xf0, 0x82, 0x79, 0x28, 0x19, 0xc2, 0x39, 0x6a, 0xa5, 0x96, 0x59, 0x23, 0xa0, 0xed, 0x60, 0x58, 0x86, 0x9, 0xb9, 0xad, 0xfb, 0xa, 0xe3, 0x47, 0x6e, 0xa1, 0x18, 0xe8, 0x39, 0x2c}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x34, 0xf1, 0xf0, 0x82, 0x79, 0x28, 0x19, 0xc2, 0x39, 0x6a, 0xa5, 0x96, 0x59, 0x23, 0xa0, 0xed, 0x60, 0x58, 0x86, 0x9, 0xb9, 0xad, 0xfb, 0xa, 0xe3, 0x47, 0x6e, 0xa1, 0x18, 0xe8, 0x39, 0x2c}}
return a, nil return a, nil
} }
@ -607,7 +608,7 @@ func _1610959908_add_dont_wrap_to_raw_messagesUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1610959908_add_dont_wrap_to_raw_messages.up.sql", size: 83, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1610959908_add_dont_wrap_to_raw_messages.up.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x71, 0x2, 0x9a, 0xca, 0xd4, 0x38, 0x44, 0x30, 0x2b, 0xa8, 0x27, 0x32, 0x63, 0x53, 0x22, 0x60, 0x59, 0x84, 0x23, 0x96, 0x77, 0xf0, 0x56, 0xd7, 0x94, 0xe0, 0x95, 0x28, 0x6, 0x1d, 0x4e, 0xb1}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x71, 0x2, 0x9a, 0xca, 0xd4, 0x38, 0x44, 0x30, 0x2b, 0xa8, 0x27, 0x32, 0x63, 0x53, 0x22, 0x60, 0x59, 0x84, 0x23, 0x96, 0x77, 0xf0, 0x56, 0xd7, 0x94, 0xe0, 0x95, 0x28, 0x6, 0x1d, 0x4e, 0xb1}}
return a, nil return a, nil
} }
@ -627,7 +628,7 @@ func _1610960912_add_send_on_personal_topicUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1610960912_add_send_on_personal_topic.up.sql", size: 82, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1610960912_add_send_on_personal_topic.up.sql", size: 82, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x77, 0xac, 0x2f, 0xc4, 0xd, 0xa7, 0x1b, 0x37, 0x30, 0xc2, 0x68, 0xee, 0xde, 0x54, 0x5e, 0xbf, 0x3f, 0xa0, 0xd6, 0xc6, 0x9f, 0xd4, 0x34, 0x12, 0x76, 0x1e, 0x66, 0x4a, 0xfc, 0xf, 0xee, 0xc9}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x77, 0xac, 0x2f, 0xc4, 0xd, 0xa7, 0x1b, 0x37, 0x30, 0xc2, 0x68, 0xee, 0xde, 0x54, 0x5e, 0xbf, 0x3f, 0xa0, 0xd6, 0xc6, 0x9f, 0xd4, 0x34, 0x12, 0x76, 0x1e, 0x66, 0x4a, 0xfc, 0xf, 0xee, 0xc9}}
return a, nil return a, nil
} }
@ -647,7 +648,7 @@ func _1612870480_add_datasync_idUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1612870480_add_datasync_id.up.sql", size: 111, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1612870480_add_datasync_id.up.sql", size: 111, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x34, 0x9a, 0xbc, 0xfa, 0xaa, 0x8c, 0x9c, 0x37, 0x67, 0x15, 0x9c, 0x7e, 0x78, 0x75, 0x66, 0x82, 0x18, 0x72, 0x10, 0xbc, 0xd4, 0xab, 0x44, 0xfe, 0x57, 0x85, 0x6d, 0x19, 0xf5, 0x96, 0x8a, 0xbe}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x34, 0x9a, 0xbc, 0xfa, 0xaa, 0x8c, 0x9c, 0x37, 0x67, 0x15, 0x9c, 0x7e, 0x78, 0x75, 0x66, 0x82, 0x18, 0x72, 0x10, 0xbc, 0xd4, 0xab, 0x44, 0xfe, 0x57, 0x85, 0x6d, 0x19, 0xf5, 0x96, 0x8a, 0xbe}}
return a, nil return a, nil
} }
@ -667,7 +668,7 @@ func _1614152139_add_communities_request_to_joinUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1614152139_add_communities_request_to_join.up.sql", size: 831, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1614152139_add_communities_request_to_join.up.sql", size: 831, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x11, 0x3, 0x26, 0xf9, 0x29, 0x50, 0x4f, 0xcd, 0x46, 0xe5, 0xb1, 0x6b, 0xb9, 0x2, 0x40, 0xb1, 0xdf, 0x4a, 0x4c, 0x7a, 0xda, 0x3, 0x35, 0xcd, 0x2d, 0xcc, 0x80, 0x7d, 0x57, 0x5f, 0x3, 0x5c}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x11, 0x3, 0x26, 0xf9, 0x29, 0x50, 0x4f, 0xcd, 0x46, 0xe5, 0xb1, 0x6b, 0xb9, 0x2, 0x40, 0xb1, 0xdf, 0x4a, 0x4c, 0x7a, 0xda, 0x3, 0x35, 0xcd, 0x2d, 0xcc, 0x80, 0x7d, 0x57, 0x5f, 0x3, 0x5c}}
return a, nil return a, nil
} }
@ -687,7 +688,7 @@ func _1615374373_add_confirmationsUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1615374373_add_confirmations.up.sql", size: 227, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1615374373_add_confirmations.up.sql", size: 227, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xdd, 0xa6, 0x65, 0xc5, 0x1d, 0xb2, 0x77, 0x36, 0xe3, 0x79, 0xda, 0xe8, 0x7a, 0xa4, 0xdf, 0x45, 0xae, 0xd8, 0xb4, 0xba, 0x90, 0xfd, 0x74, 0x71, 0x14, 0x75, 0x73, 0x72, 0xb9, 0x9e, 0x1, 0x81}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xdd, 0xa6, 0x65, 0xc5, 0x1d, 0xb2, 0x77, 0x36, 0xe3, 0x79, 0xda, 0xe8, 0x7a, 0xa4, 0xdf, 0x45, 0xae, 0xd8, 0xb4, 0xba, 0x90, 0xfd, 0x74, 0x71, 0x14, 0x75, 0x73, 0x72, 0xb9, 0x9e, 0x1, 0x81}}
return a, nil return a, nil
} }
@ -707,7 +708,7 @@ func _1617694931_add_notification_centerUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1617694931_add_notification_center.up.sql", size: 572, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1617694931_add_notification_center.up.sql", size: 572, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x10, 0x45, 0xc6, 0xc9, 0x73, 0xbb, 0x1f, 0xda, 0xa3, 0x4d, 0x19, 0x98, 0x85, 0x2d, 0xca, 0xda, 0xcc, 0x3b, 0x32, 0xff, 0xc7, 0x7b, 0xe3, 0x9f, 0x9b, 0x2a, 0x93, 0xf5, 0xdf, 0x65, 0x38, 0x91}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x10, 0x45, 0xc6, 0xc9, 0x73, 0xbb, 0x1f, 0xda, 0xa3, 0x4d, 0x19, 0x98, 0x85, 0x2d, 0xca, 0xda, 0xcc, 0x3b, 0x32, 0xff, 0xc7, 0x7b, 0xe3, 0x9f, 0x9b, 0x2a, 0x93, 0xf5, 0xdf, 0x65, 0x38, 0x91}}
return a, nil return a, nil
} }
@ -727,7 +728,7 @@ func _1618923660_create_pin_messagesUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1618923660_create_pin_messages.up.sql", size: 265, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1618923660_create_pin_messages.up.sql", size: 265, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x61, 0x44, 0x3a, 0xbe, 0x30, 0xd2, 0x7e, 0xc0, 0xe2, 0x8e, 0x65, 0x53, 0x54, 0xbb, 0x7a, 0x1c, 0xb3, 0x5d, 0xd2, 0xa6, 0xa9, 0x28, 0xb7, 0xa4, 0x5f, 0x8b, 0x9, 0x5f, 0x17, 0xc1, 0x85, 0x21}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x61, 0x44, 0x3a, 0xbe, 0x30, 0xd2, 0x7e, 0xc0, 0xe2, 0x8e, 0x65, 0x53, 0x54, 0xbb, 0x7a, 0x1c, 0xb3, 0x5d, 0xd2, 0xa6, 0xa9, 0x28, 0xb7, 0xa4, 0x5f, 0x8b, 0x9, 0x5f, 0x17, 0xc1, 0x85, 0x21}}
return a, nil return a, nil
} }
@ -747,7 +748,7 @@ func _1619094007_add_joined_chat_fieldUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1619094007_add_joined_chat_field.up.sql", size: 101, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1619094007_add_joined_chat_field.up.sql", size: 101, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfa, 0x30, 0x81, 0x3a, 0x2f, 0x9f, 0xb3, 0x0, 0x55, 0x8e, 0x1d, 0xa8, 0xb0, 0x68, 0xf0, 0x40, 0x1a, 0x6c, 0xaa, 0xfc, 0x33, 0xd1, 0xd1, 0x55, 0x3f, 0xf2, 0xbd, 0x54, 0xa1, 0x2b, 0x40, 0x95}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfa, 0x30, 0x81, 0x3a, 0x2f, 0x9f, 0xb3, 0x0, 0x55, 0x8e, 0x1d, 0xa8, 0xb0, 0x68, 0xf0, 0x40, 0x1a, 0x6c, 0xaa, 0xfc, 0x33, 0xd1, 0xd1, 0x55, 0x3f, 0xf2, 0xbd, 0x54, 0xa1, 0x2b, 0x40, 0x95}}
return a, nil return a, nil
} }
@ -767,7 +768,7 @@ func _1619099821_add_last_synced_fieldUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1619099821_add_last_synced_field.up.sql", size: 226, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1619099821_add_last_synced_field.up.sql", size: 226, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf, 0x52, 0x22, 0xe, 0x2f, 0xd7, 0x93, 0x5f, 0x42, 0xc2, 0x93, 0x4, 0x35, 0x6f, 0xc9, 0x19, 0xed, 0x6b, 0x52, 0x6f, 0xae, 0x99, 0xe2, 0x68, 0x3d, 0x4f, 0x40, 0xe, 0xe1, 0xa, 0x47, 0x21}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf, 0x52, 0x22, 0xe, 0x2f, 0xd7, 0x93, 0x5f, 0x42, 0xc2, 0x93, 0x4, 0x35, 0x6f, 0xc9, 0x19, 0xed, 0x6b, 0x52, 0x6f, 0xae, 0x99, 0xe2, 0x68, 0x3d, 0x4f, 0x40, 0xe, 0xe1, 0xa, 0x47, 0x21}}
return a, nil return a, nil
} }
@ -787,7 +788,7 @@ func _1621933219_add_mentionedUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1621933219_add_mentioned.up.sql", size: 70, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1621933219_add_mentioned.up.sql", size: 70, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0x76, 0x8a, 0xc9, 0x7, 0x8f, 0xa5, 0xcb, 0x12, 0x21, 0x4e, 0xfe, 0x96, 0x77, 0xcf, 0x7f, 0x76, 0x75, 0x36, 0x2c, 0xf8, 0x1d, 0x13, 0xcb, 0xcd, 0x6e, 0x70, 0xbf, 0xf5, 0x93, 0x67, 0xd1}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0x76, 0x8a, 0xc9, 0x7, 0x8f, 0xa5, 0xcb, 0x12, 0x21, 0x4e, 0xfe, 0x96, 0x77, 0xcf, 0x7f, 0x76, 0x75, 0x36, 0x2c, 0xf8, 0x1d, 0x13, 0xcb, 0xcd, 0x6e, 0x70, 0xbf, 0xf5, 0x93, 0x67, 0xd1}}
return a, nil return a, nil
} }
@ -807,7 +808,7 @@ func _1622010048_add_unviewed_mentions_countUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1622010048_add_unviewed_mentions_count.up.sql", size: 114, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1622010048_add_unviewed_mentions_count.up.sql", size: 114, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7c, 0x16, 0x85, 0xa6, 0x5b, 0xe1, 0x66, 0xb9, 0x84, 0xbe, 0x7f, 0xa, 0x77, 0x23, 0xb9, 0xef, 0x8e, 0x2, 0x8, 0xfc, 0x61, 0xb2, 0x43, 0xa9, 0x63, 0xae, 0xb4, 0xdf, 0x30, 0xb1, 0x61, 0x4b}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7c, 0x16, 0x85, 0xa6, 0x5b, 0xe1, 0x66, 0xb9, 0x84, 0xbe, 0x7f, 0xa, 0x77, 0x23, 0xb9, 0xef, 0x8e, 0x2, 0x8, 0xfc, 0x61, 0xb2, 0x43, 0xa9, 0x63, 0xae, 0xb4, 0xdf, 0x30, 0xb1, 0x61, 0x4b}}
return a, nil return a, nil
} }
@ -827,7 +828,7 @@ func _1622061278_add_message_activity_center_notification_fieldUpSql() (*asset,
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1622061278_add_message_activity_center_notification_field.up.sql", size: 80, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1622061278_add_message_activity_center_notification_field.up.sql", size: 80, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8, 0xc, 0xa6, 0x1f, 0xa5, 0xc6, 0x7c, 0x6f, 0xab, 0x2c, 0x2d, 0xb5, 0xa4, 0xdd, 0xc1, 0xd6, 0x44, 0x83, 0xf9, 0xb1, 0xa5, 0xce, 0x34, 0x3d, 0x2, 0xa9, 0x35, 0xcf, 0xc6, 0xb2, 0x43, 0x37}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8, 0xc, 0xa6, 0x1f, 0xa5, 0xc6, 0x7c, 0x6f, 0xab, 0x2c, 0x2d, 0xb5, 0xa4, 0xdd, 0xc1, 0xd6, 0x44, 0x83, 0xf9, 0xb1, 0xa5, 0xce, 0x34, 0x3d, 0x2, 0xa9, 0x35, 0xcf, 0xc6, 0xb2, 0x43, 0x37}}
return a, nil return a, nil
} }
@ -847,7 +848,7 @@ func _1622464518_set_synced_to_fromUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1622464518_set_synced_to_from.up.sql", size: 105, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1622464518_set_synced_to_from.up.sql", size: 105, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x33, 0x3e, 0x2b, 0xa, 0x1e, 0xc7, 0x6d, 0x6f, 0xd1, 0x1d, 0xe8, 0x4b, 0xdd, 0x92, 0x76, 0xea, 0xf2, 0x3e, 0x15, 0x85, 0xc4, 0xc3, 0x31, 0xf1, 0xc0, 0xa2, 0xd7, 0x47, 0xde, 0x4e, 0xfd, 0xc6}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x33, 0x3e, 0x2b, 0xa, 0x1e, 0xc7, 0x6d, 0x6f, 0xd1, 0x1d, 0xe8, 0x4b, 0xdd, 0x92, 0x76, 0xea, 0xf2, 0x3e, 0x15, 0x85, 0xc4, 0xc3, 0x31, 0xf1, 0xc0, 0xa2, 0xd7, 0x47, 0xde, 0x4e, 0xfd, 0xc6}}
return a, nil return a, nil
} }
@ -867,7 +868,7 @@ func _1622464519_add_chat_descriptionUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1622464519_add_chat_description.up.sql", size: 93, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1622464519_add_chat_description.up.sql", size: 93, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0x2e, 0x89, 0x31, 0xec, 0xef, 0xeb, 0x43, 0xf5, 0x96, 0x6d, 0xce, 0x91, 0x8a, 0x37, 0x2a, 0x11, 0x7a, 0x3f, 0xd9, 0x10, 0xbb, 0xa1, 0xbc, 0x7, 0xe0, 0x3b, 0xa5, 0xf4, 0xa6, 0xf4, 0xa1}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0x2e, 0x89, 0x31, 0xec, 0xef, 0xeb, 0x43, 0xf5, 0x96, 0x6d, 0xce, 0x91, 0x8a, 0x37, 0x2a, 0x11, 0x7a, 0x3f, 0xd9, 0x10, 0xbb, 0xa1, 0xbc, 0x7, 0xe0, 0x3b, 0xa5, 0xf4, 0xa6, 0xf4, 0xa1}}
return a, nil return a, nil
} }
@ -887,7 +888,7 @@ func _1622622253_add_pinned_by_to_pin_messagesUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1622622253_add_pinned_by_to_pin_messages.up.sql", size: 52, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1622622253_add_pinned_by_to_pin_messages.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9b, 0x94, 0xa3, 0x45, 0x91, 0x1e, 0x66, 0xd1, 0x96, 0x5a, 0xaf, 0xfa, 0x29, 0x39, 0xa8, 0x3a, 0x97, 0x4c, 0x65, 0x6, 0x96, 0x90, 0x4c, 0xfe, 0xce, 0x7d, 0x5d, 0xd4, 0xb3, 0x8, 0x6d, 0x5f}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9b, 0x94, 0xa3, 0x45, 0x91, 0x1e, 0x66, 0xd1, 0x96, 0x5a, 0xaf, 0xfa, 0x29, 0x39, 0xa8, 0x3a, 0x97, 0x4c, 0x65, 0x6, 0x96, 0x90, 0x4c, 0xfe, 0xce, 0x7d, 0x5d, 0xd4, 0xb3, 0x8, 0x6d, 0x5f}}
return a, nil return a, nil
} }
@ -907,7 +908,7 @@ func _1623938329_add_author_activity_center_notification_fieldUpSql() (*asset, e
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1623938329_add_author_activity_center_notification_field.up.sql", size: 66, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1623938329_add_author_activity_center_notification_field.up.sql", size: 66, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0xe6, 0xa7, 0xd5, 0x26, 0xff, 0xab, 0x92, 0x88, 0xf0, 0xd3, 0x34, 0xd9, 0x2f, 0xe7, 0x18, 0x1a, 0x40, 0xf9, 0xbe, 0x8e, 0xfc, 0xd0, 0x4f, 0x1f, 0x4a, 0xb9, 0x83, 0x3f, 0xa9, 0xde, 0xb}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0xe6, 0xa7, 0xd5, 0x26, 0xff, 0xab, 0x92, 0x88, 0xf0, 0xd3, 0x34, 0xd9, 0x2f, 0xe7, 0x18, 0x1a, 0x40, 0xf9, 0xbe, 0x8e, 0xfc, 0xd0, 0x4f, 0x1f, 0x4a, 0xb9, 0x83, 0x3f, 0xa9, 0xde, 0xb}}
return a, nil return a, nil
} }
@ -927,7 +928,7 @@ func _1623938330_add_edit_messagesUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1623938330_add_edit_messages.up.sql", size: 369, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1623938330_add_edit_messages.up.sql", size: 369, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7e, 0xd2, 0xce, 0xe, 0x5c, 0x19, 0xbe, 0x5e, 0x29, 0xbe, 0x9b, 0x31, 0x53, 0x76, 0xb2, 0xc8, 0x56, 0xf0, 0x82, 0xfe, 0x7d, 0x6c, 0xe8, 0x5c, 0xe9, 0x7a, 0x5d, 0x5, 0xc4, 0x92, 0x38, 0xe3}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7e, 0xd2, 0xce, 0xe, 0x5c, 0x19, 0xbe, 0x5e, 0x29, 0xbe, 0x9b, 0x31, 0x53, 0x76, 0xb2, 0xc8, 0x56, 0xf0, 0x82, 0xfe, 0x7d, 0x6c, 0xe8, 0x5c, 0xe9, 0x7a, 0x5d, 0x5, 0xc4, 0x92, 0x38, 0xe3}}
return a, nil return a, nil
} }
@ -947,7 +948,7 @@ func _1624978434_add_muted_communityUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1624978434_add_muted_community.up.sql", size: 82, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1624978434_add_muted_community.up.sql", size: 82, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6, 0xdc, 0x6e, 0x6f, 0x97, 0xc7, 0x3d, 0x50, 0xab, 0x80, 0x87, 0x44, 0x43, 0x38, 0xe6, 0xc5, 0xc1, 0x91, 0x26, 0xf, 0x16, 0xe, 0xd9, 0x32, 0x37, 0x25, 0x96, 0x25, 0x6, 0xc8, 0xb5, 0x4a}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6, 0xdc, 0x6e, 0x6f, 0x97, 0xc7, 0x3d, 0x50, 0xab, 0x80, 0x87, 0x44, 0x43, 0x38, 0xe6, 0xc5, 0xc1, 0x91, 0x26, 0xf, 0x16, 0xe, 0xd9, 0x32, 0x37, 0x25, 0x96, 0x25, 0x6, 0xc8, 0xb5, 0x4a}}
return a, nil return a, nil
} }
@ -967,7 +968,7 @@ func _1625018910_add_repply_message_activity_center_notification_fieldUpSql() (*
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1625018910_add_repply_message_activity_center_notification_field.up.sql", size: 86, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1625018910_add_repply_message_activity_center_notification_field.up.sql", size: 86, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf2, 0x52, 0x12, 0x40, 0xd8, 0x6f, 0x71, 0x97, 0x46, 0x39, 0xaa, 0x74, 0x41, 0xcd, 0x45, 0x4c, 0xe8, 0xd9, 0xe2, 0x56, 0x8e, 0x78, 0x18, 0x62, 0xf6, 0xa8, 0x36, 0xe9, 0x9a, 0x1f, 0xc, 0xb1}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf2, 0x52, 0x12, 0x40, 0xd8, 0x6f, 0x71, 0x97, 0x46, 0x39, 0xaa, 0x74, 0x41, 0xcd, 0x45, 0x4c, 0xe8, 0xd9, 0xe2, 0x56, 0x8e, 0x78, 0x18, 0x62, 0xf6, 0xa8, 0x36, 0xe9, 0x9a, 0x1f, 0xc, 0xb1}}
return a, nil return a, nil
} }
@ -987,7 +988,7 @@ func _1625762506_add_deleted_messagesUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1625762506_add_deleted_messages.up.sql", size: 357, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1625762506_add_deleted_messages.up.sql", size: 357, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd5, 0x61, 0x42, 0xb6, 0x8c, 0x7f, 0x2d, 0xec, 0xa9, 0x6d, 0x3d, 0x0, 0xa3, 0x32, 0xd8, 0x4a, 0x38, 0x5c, 0x97, 0xfc, 0x68, 0xde, 0xa9, 0xb7, 0xd8, 0xde, 0xb, 0x29, 0x93, 0xdc, 0x81, 0xf8}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd5, 0x61, 0x42, 0xb6, 0x8c, 0x7f, 0x2d, 0xec, 0xa9, 0x6d, 0x3d, 0x0, 0xa3, 0x32, 0xd8, 0x4a, 0x38, 0x5c, 0x97, 0xfc, 0x68, 0xde, 0xa9, 0xb7, 0xd8, 0xde, 0xb, 0x29, 0x93, 0xdc, 0x81, 0xf8}}
return a, nil return a, nil
} }
@ -1007,7 +1008,7 @@ func _1627388946_add_communities_synced_atUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1627388946_add_communities_synced_at.up.sql", size: 87, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1627388946_add_communities_synced_at.up.sql", size: 87, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc1, 0xbd, 0x9b, 0x6a, 0xc9, 0x1a, 0x7a, 0x34, 0xcf, 0x5f, 0x80, 0x9e, 0x8c, 0x1c, 0xc0, 0xec, 0x4e, 0x78, 0xb0, 0x2d, 0x15, 0x77, 0x38, 0x4a, 0x6a, 0x5, 0x84, 0xf5, 0x8d, 0x8b, 0xbe, 0x9}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc1, 0xbd, 0x9b, 0x6a, 0xc9, 0x1a, 0x7a, 0x34, 0xcf, 0x5f, 0x80, 0x9e, 0x8c, 0x1c, 0xc0, 0xec, 0x4e, 0x78, 0xb0, 0x2d, 0x15, 0x77, 0x38, 0x4a, 0x6a, 0x5, 0x84, 0xf5, 0x8d, 0x8b, 0xbe, 0x9}}
return a, nil return a, nil
} }
@ -1027,7 +1028,7 @@ func _1628280060_createUsermessagesIndexSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1628280060_create-usermessages-index.sql", size: 80, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1628280060_create-usermessages-index.sql", size: 80, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x10, 0x6f, 0x70, 0x47, 0x40, 0xab, 0xa8, 0x60, 0xe0, 0xf9, 0x8, 0x7e, 0x19, 0x9d, 0xba, 0x33, 0x16, 0xfc, 0x3c, 0xdc, 0xa8, 0xa6, 0x53, 0x61, 0x39, 0x82, 0x91, 0xcf, 0x69, 0xd8, 0xf2, 0xcf}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x10, 0x6f, 0x70, 0x47, 0x40, 0xab, 0xa8, 0x60, 0xe0, 0xf9, 0x8, 0x7e, 0x19, 0x9d, 0xba, 0x33, 0x16, 0xfc, 0x3c, 0xdc, 0xa8, 0xa6, 0x53, 0x61, 0x39, 0x82, 0x91, 0xcf, 0x69, 0xd8, 0xf2, 0xcf}}
return a, nil return a, nil
} }
@ -1047,7 +1048,7 @@ func _1632303896_modify_contacts_tableUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1632303896_modify_contacts_table.up.sql", size: 1574, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1632303896_modify_contacts_table.up.sql", size: 1574, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x81, 0x1e, 0x6c, 0x3c, 0xd, 0xd7, 0x7d, 0xbb, 0x19, 0xbc, 0xe4, 0x7, 0xfd, 0xf8, 0x66, 0x6d, 0x78, 0xf6, 0x4, 0xe6, 0x51, 0xe4, 0xe6, 0xdc, 0xe, 0x5a, 0x2e, 0xac, 0xe6, 0xe7, 0x24, 0x69}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x81, 0x1e, 0x6c, 0x3c, 0xd, 0xd7, 0x7d, 0xbb, 0x19, 0xbc, 0xe4, 0x7, 0xfd, 0xf8, 0x66, 0x6d, 0x78, 0xf6, 0x4, 0xe6, 0x51, 0xe4, 0xe6, 0xdc, 0xe, 0x5a, 0x2e, 0xac, 0xe6, 0xe7, 0x24, 0x69}}
return a, nil return a, nil
} }
@ -1067,7 +1068,7 @@ func _1633349838_add_emoji_column_in_chatsUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1633349838_add_emoji_column_in_chats.up.sql", size: 52, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1633349838_add_emoji_column_in_chats.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xcb, 0x33, 0xcb, 0x3b, 0xa9, 0x99, 0x77, 0x6a, 0xea, 0xc4, 0x39, 0xd7, 0xa1, 0x49, 0xa7, 0xdf, 0xff, 0x72, 0xda, 0x34, 0x21, 0x67, 0x66, 0xca, 0x65, 0x46, 0x1, 0xa6, 0x4e, 0xf9, 0x38, 0x86}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xcb, 0x33, 0xcb, 0x3b, 0xa9, 0x99, 0x77, 0x6a, 0xea, 0xc4, 0x39, 0xd7, 0xa1, 0x49, 0xa7, 0xdf, 0xff, 0x72, 0xda, 0x34, 0x21, 0x67, 0x66, 0xca, 0x65, 0x46, 0x1, 0xa6, 0x4e, 0xf9, 0x38, 0x86}}
return a, nil return a, nil
} }
@ -1087,7 +1088,7 @@ func _1634831235_add_highlight_column_in_chatsUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1634831235_add_highlight_column_in_chats.up.sql", size: 62, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1634831235_add_highlight_column_in_chats.up.sql", size: 62, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xaa, 0x63, 0x5c, 0x73, 0x19, 0x83, 0xbd, 0x35, 0x80, 0x9f, 0x66, 0xec, 0x4c, 0xbc, 0x9d, 0x2d, 0x52, 0x91, 0x6d, 0xb3, 0x2b, 0x87, 0xde, 0x24, 0x46, 0x5c, 0xd, 0xfd, 0x78, 0xf5, 0xe3, 0xe9}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xaa, 0x63, 0x5c, 0x73, 0x19, 0x83, 0xbd, 0x35, 0x80, 0x9f, 0x66, 0xec, 0x4c, 0xbc, 0x9d, 0x2d, 0x52, 0x91, 0x6d, 0xb3, 0x2b, 0x87, 0xde, 0x24, 0x46, 0x5c, 0xd, 0xfd, 0x78, 0xf5, 0xe3, 0xe9}}
return a, nil return a, nil
} }
@ -1107,7 +1108,7 @@ func _1634896007_add_last_updated_locally_and_removedUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1634896007_add_last_updated_locally_and_removed.up.sql", size: 131, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1634896007_add_last_updated_locally_and_removed.up.sql", size: 131, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2e, 0xa8, 0x34, 0xe2, 0xc0, 0x62, 0xc8, 0xd6, 0x5a, 0x87, 0xe3, 0x70, 0xe1, 0xc4, 0x16, 0x9c, 0x60, 0x2e, 0x98, 0xf0, 0x91, 0x84, 0xbe, 0xe0, 0xdf, 0x3e, 0x4d, 0x24, 0xc4, 0x6c, 0x40, 0x17}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2e, 0xa8, 0x34, 0xe2, 0xc0, 0x62, 0xc8, 0xd6, 0x5a, 0x87, 0xe3, 0x70, 0xe1, 0xc4, 0x16, 0x9c, 0x60, 0x2e, 0x98, 0xf0, 0x91, 0x84, 0xbe, 0xe0, 0xdf, 0x3e, 0x4d, 0x24, 0xc4, 0x6c, 0x40, 0x17}}
return a, nil return a, nil
} }
@ -1127,7 +1128,7 @@ func _1635840039_add_clock_read_at_column_in_chatsUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1635840039_add_clock_read_at_column_in_chats.up.sql", size: 245, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1635840039_add_clock_read_at_column_in_chats.up.sql", size: 245, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6c, 0xba, 0x3f, 0xba, 0x1a, 0x71, 0xa8, 0x9, 0x19, 0xbe, 0x1e, 0x38, 0x50, 0x30, 0x3a, 0x52, 0x15, 0x29, 0xee, 0x49, 0x19, 0x6f, 0x53, 0xc2, 0xc6, 0x6c, 0xd9, 0x80, 0x7e, 0xb9, 0x58, 0x7a}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6c, 0xba, 0x3f, 0xba, 0x1a, 0x71, 0xa8, 0x9, 0x19, 0xbe, 0x1e, 0x38, 0x50, 0x30, 0x3a, 0x52, 0x15, 0x29, 0xee, 0x49, 0x19, 0x6f, 0x53, 0xc2, 0xc6, 0x6c, 0xd9, 0x80, 0x7e, 0xb9, 0x58, 0x7a}}
return a, nil return a, nil
} }
@ -1147,7 +1148,7 @@ func _1637852321_add_received_invitation_admin_column_in_chatsUpSql() (*asset, e
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1637852321_add_received_invitation_admin_column_in_chats.up.sql", size: 72, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1637852321_add_received_invitation_admin_column_in_chats.up.sql", size: 72, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x70, 0x8b, 0x92, 0x56, 0x83, 0x70, 0x7f, 0x6, 0xb2, 0xd, 0x1c, 0x2f, 0xcc, 0x93, 0xc3, 0x85, 0x8c, 0xc2, 0x38, 0x94, 0x7e, 0x88, 0x3f, 0x39, 0x34, 0xf8, 0x90, 0xcf, 0x83, 0x68, 0x3d, 0xe5}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x70, 0x8b, 0x92, 0x56, 0x83, 0x70, 0x7f, 0x6, 0xb2, 0xd, 0x1c, 0x2f, 0xcc, 0x93, 0xc3, 0x85, 0x8c, 0xc2, 0x38, 0x94, 0x7e, 0x88, 0x3f, 0x39, 0x34, 0xf8, 0x90, 0xcf, 0x83, 0x68, 0x3d, 0xe5}}
return a, nil return a, nil
} }
@ -1167,7 +1168,7 @@ func _1645034601_display_nameUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1645034601_display_name.up.sql", size: 110, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1645034601_display_name.up.sql", size: 110, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x15, 0xfc, 0xda, 0x70, 0x53, 0x19, 0x90, 0x20, 0x4, 0x1c, 0x99, 0x42, 0x53, 0x1a, 0xd6, 0xb8, 0xbb, 0x8a, 0xe8, 0xbe, 0xcc, 0xb7, 0xc, 0x7f, 0x73, 0x50, 0x18, 0xf1, 0x8b, 0x18, 0x54, 0x64}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x15, 0xfc, 0xda, 0x70, 0x53, 0x19, 0x90, 0x20, 0x4, 0x1c, 0x99, 0x42, 0x53, 0x1a, 0xd6, 0xb8, 0xbb, 0x8a, 0xe8, 0xbe, 0xcc, 0xb7, 0xc, 0x7f, 0x73, 0x50, 0x18, 0xf1, 0x8b, 0x18, 0x54, 0x64}}
return a, nil return a, nil
} }
@ -1187,7 +1188,7 @@ func _1645034602_add_mutual_contact_requestUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1645034602_add_mutual_contact_request.up.sql", size: 454, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1645034602_add_mutual_contact_request.up.sql", size: 454, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1a, 0xe0, 0x5d, 0x68, 0xb8, 0x50, 0xa4, 0xbb, 0x3e, 0x4f, 0x2, 0x87, 0xad, 0x87, 0x6e, 0x38, 0xdf, 0xc8, 0x4c, 0xe2, 0x5f, 0xd1, 0x6, 0xdc, 0xe7, 0xbd, 0x4a, 0x9c, 0xf3, 0x91, 0xa1, 0x51}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1a, 0xe0, 0x5d, 0x68, 0xb8, 0x50, 0xa4, 0xbb, 0x3e, 0x4f, 0x2, 0x87, 0xad, 0x87, 0x6e, 0x38, 0xdf, 0xc8, 0x4c, 0xe2, 0x5f, 0xd1, 0x6, 0xdc, 0xe7, 0xbd, 0x4a, 0x9c, 0xf3, 0x91, 0xa1, 0x51}}
return a, nil return a, nil
} }
@ -1207,7 +1208,7 @@ func _1650373957_add_contact_request_stateUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1650373957_add_contact_request_state.up.sql", size: 59, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1650373957_add_contact_request_state.up.sql", size: 59, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5e, 0xc1, 0x3f, 0x29, 0xe, 0x19, 0x86, 0x1a, 0x4c, 0x6c, 0x2a, 0x90, 0x9d, 0xdf, 0xb1, 0xb, 0x72, 0x25, 0xcd, 0x6c, 0x5f, 0xd, 0x51, 0x9e, 0x85, 0xc0, 0x9, 0xb7, 0xbc, 0x87, 0x23, 0xec}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5e, 0xc1, 0x3f, 0x29, 0xe, 0x19, 0x86, 0x1a, 0x4c, 0x6c, 0x2a, 0x90, 0x9d, 0xdf, 0xb1, 0xb, 0x72, 0x25, 0xcd, 0x6c, 0x5f, 0xd, 0x51, 0x9e, 0x85, 0xc0, 0x9, 0xb7, 0xbc, 0x87, 0x23, 0xec}}
return a, nil return a, nil
} }
@ -1227,7 +1228,7 @@ func _1656958989_contact_verificationUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1656958989_contact_verification.up.sql", size: 624, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "1656958989_contact_verification.up.sql", size: 624, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3a, 0x3f, 0x28, 0x38, 0x33, 0xdb, 0xe9, 0x4d, 0xc0, 0x54, 0x8c, 0x2a, 0x73, 0xc4, 0xdd, 0x5c, 0xc5, 0x1a, 0x93, 0x4b, 0x6, 0x13, 0xbe, 0x42, 0xd2, 0x7f, 0xd4, 0xc, 0xc5, 0x4e, 0x6d, 0xce}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3a, 0x3f, 0x28, 0x38, 0x33, 0xdb, 0xe9, 0x4d, 0xc0, 0x54, 0x8c, 0x2a, 0x73, 0xc4, 0xdd, 0x5c, 0xc5, 0x1a, 0x93, 0x4b, 0x6, 0x13, 0xbe, 0x42, 0xd2, 0x7f, 0xd4, 0xc, 0xc5, 0x4e, 0x6d, 0xce}}
return a, nil return a, nil
} }
@ -1247,7 +1248,7 @@ func _1658236268_add_discord_message_authors_tableUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1658236268_add_discord_message_authors_table.up.sql", size: 191, mode: os.FileMode(0664), modTime: time.Unix(1667843815, 0)} info := bindataFileInfo{name: "1658236268_add_discord_message_authors_table.up.sql", size: 191, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3d, 0xb7, 0xdb, 0x79, 0x1, 0x15, 0xe7, 0x76, 0x5d, 0x22, 0x54, 0x82, 0x9a, 0xbe, 0x24, 0xc1, 0x82, 0xcf, 0x67, 0x91, 0x53, 0xcc, 0xac, 0x74, 0x18, 0x61, 0x69, 0x68, 0x19, 0xca, 0x2b, 0xa8}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3d, 0xb7, 0xdb, 0x79, 0x1, 0x15, 0xe7, 0x76, 0x5d, 0x22, 0x54, 0x82, 0x9a, 0xbe, 0x24, 0xc1, 0x82, 0xcf, 0x67, 0x91, 0x53, 0xcc, 0xac, 0x74, 0x18, 0x61, 0x69, 0x68, 0x19, 0xca, 0x2b, 0xa8}}
return a, nil return a, nil
} }
@ -1267,7 +1268,7 @@ func _1659619997_add_discord_messages_tableUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1659619997_add_discord_messages_table.up.sql", size: 371, mode: os.FileMode(0664), modTime: time.Unix(1667843815, 0)} info := bindataFileInfo{name: "1659619997_add_discord_messages_table.up.sql", size: 371, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xde, 0x12, 0x9c, 0x96, 0xe2, 0x42, 0x3f, 0x94, 0x62, 0xc2, 0x76, 0xab, 0x3b, 0x4c, 0x85, 0x36, 0x48, 0xcc, 0x73, 0x60, 0x93, 0x5a, 0xd6, 0x7, 0xd6, 0x0, 0xee, 0x1b, 0x1e, 0x34, 0x58, 0x99}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xde, 0x12, 0x9c, 0x96, 0xe2, 0x42, 0x3f, 0x94, 0x62, 0xc2, 0x76, 0xab, 0x3b, 0x4c, 0x85, 0x36, 0x48, 0xcc, 0x73, 0x60, 0x93, 0x5a, 0xd6, 0x7, 0xd6, 0x0, 0xee, 0x1b, 0x1e, 0x34, 0x58, 0x99}}
return a, nil return a, nil
} }
@ -1287,7 +1288,7 @@ func _1660226788_create_chat_identity_social_linksUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1660226788_create_chat_identity_social_links.up.sql", size: 318, mode: os.FileMode(0664), modTime: time.Unix(1667843815, 0)} info := bindataFileInfo{name: "1660226788_create_chat_identity_social_links.up.sql", size: 318, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3c, 0x76, 0x40, 0xe9, 0x85, 0xc4, 0x38, 0xf8, 0xe5, 0x5d, 0xe8, 0x13, 0x46, 0x1b, 0xc, 0x1, 0xe9, 0x2f, 0x74, 0xd1, 0x79, 0x59, 0xa4, 0xdb, 0x4a, 0x4a, 0xf4, 0x98, 0x58, 0x3c, 0x57, 0xd3}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3c, 0x76, 0x40, 0xe9, 0x85, 0xc4, 0x38, 0xf8, 0xe5, 0x5d, 0xe8, 0x13, 0x46, 0x1b, 0xc, 0x1, 0xe9, 0x2f, 0x74, 0xd1, 0x79, 0x59, 0xa4, 0xdb, 0x4a, 0x4a, 0xf4, 0x98, 0x58, 0x3c, 0x57, 0xd3}}
return a, nil return a, nil
} }
@ -1307,7 +1308,7 @@ func _1660226789_add_walletconnectsessions_tableUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1660226789_add_walletconnectsessions_table.up.sql", size: 215, mode: os.FileMode(0664), modTime: time.Unix(1667843815, 0)} info := bindataFileInfo{name: "1660226789_add_walletconnectsessions_table.up.sql", size: 215, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf8, 0x5c, 0x72, 0x2, 0xed, 0x36, 0x19, 0x91, 0x4d, 0x1a, 0xc1, 0xab, 0x84, 0xfa, 0x41, 0xb1, 0x46, 0xa5, 0xdb, 0x3f, 0x76, 0x47, 0xd3, 0x75, 0x3c, 0x6a, 0x8e, 0x78, 0xe6, 0x41, 0xdc, 0x7f}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf8, 0x5c, 0x72, 0x2, 0xed, 0x36, 0x19, 0x91, 0x4d, 0x1a, 0xc1, 0xab, 0x84, 0xfa, 0x41, 0xb1, 0x46, 0xa5, 0xdb, 0x3f, 0x76, 0x47, 0xd3, 0x75, 0x3c, 0x6a, 0x8e, 0x78, 0xe6, 0x41, 0xdc, 0x7f}}
return a, nil return a, nil
} }
@ -1327,7 +1328,7 @@ func _1661242854_add_communities_requests_to_leaveUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1661242854_add_communities_requests_to_leave.up.sql", size: 204, mode: os.FileMode(0664), modTime: time.Unix(1667843815, 0)} info := bindataFileInfo{name: "1661242854_add_communities_requests_to_leave.up.sql", size: 204, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x49, 0x2e, 0x7d, 0x14, 0xef, 0x6e, 0x95, 0x4b, 0x6, 0x70, 0x2e, 0xd1, 0xf6, 0x59, 0xf9, 0xe, 0x56, 0xa, 0x9c, 0x80, 0x18, 0xca, 0xb9, 0x49, 0x19, 0xf, 0x89, 0x94, 0x36, 0x6d, 0x93, 0x9a}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x49, 0x2e, 0x7d, 0x14, 0xef, 0x6e, 0x95, 0x4b, 0x6, 0x70, 0x2e, 0xd1, 0xf6, 0x59, 0xf9, 0xe, 0x56, 0xa, 0x9c, 0x80, 0x18, 0xca, 0xb9, 0x49, 0x19, 0xf, 0x89, 0x94, 0x36, 0x6d, 0x93, 0x9a}}
return a, nil return a, nil
} }
@ -1347,7 +1348,7 @@ func _1662044232_add_chat_imageUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1662044232_add_chat_image.up.sql", size: 49, mode: os.FileMode(0664), modTime: time.Unix(1667843815, 0)} info := bindataFileInfo{name: "1662044232_add_chat_image.up.sql", size: 49, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb3, 0x74, 0xdf, 0x50, 0x79, 0x73, 0x9e, 0xd0, 0xff, 0xa4, 0xd3, 0x87, 0xc3, 0x48, 0x31, 0x6c, 0xdf, 0xa6, 0x20, 0x85, 0xe6, 0x4e, 0x19, 0x9d, 0xef, 0xcc, 0x84, 0x2b, 0x5d, 0x44, 0x34, 0x6}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb3, 0x74, 0xdf, 0x50, 0x79, 0x73, 0x9e, 0xd0, 0xff, 0xa4, 0xd3, 0x87, 0xc3, 0x48, 0x31, 0x6c, 0xdf, 0xa6, 0x20, 0x85, 0xe6, 0x4e, 0x19, 0x9d, 0xef, 0xcc, 0x84, 0x2b, 0x5d, 0x44, 0x34, 0x6}}
return a, nil return a, nil
} }
@ -1367,7 +1368,7 @@ func _1662106895_add_chat_first_message_timestampUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1662106895_add_chat_first_message_timestamp.up.sql", size: 113, mode: os.FileMode(0664), modTime: time.Unix(1667843815, 0)} info := bindataFileInfo{name: "1662106895_add_chat_first_message_timestamp.up.sql", size: 113, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8b, 0x55, 0x74, 0xfa, 0xf5, 0x51, 0x85, 0x19, 0xfd, 0xfb, 0x6, 0x79, 0x4d, 0x1d, 0xd, 0x3, 0x46, 0x66, 0x34, 0x1e, 0xce, 0x91, 0x21, 0x29, 0xf6, 0x71, 0xe7, 0x31, 0x39, 0x8f, 0x9d, 0x5}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8b, 0x55, 0x74, 0xfa, 0xf5, 0x51, 0x85, 0x19, 0xfd, 0xfb, 0x6, 0x79, 0x4d, 0x1d, 0xd, 0x3, 0x46, 0x66, 0x34, 0x1e, 0xce, 0x91, 0x21, 0x29, 0xf6, 0x71, 0xe7, 0x31, 0x39, 0x8f, 0x9d, 0x5}}
return a, nil return a, nil
} }
@ -1387,7 +1388,7 @@ func _1662723928_add_discord_author_image_fieldsUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1662723928_add_discord_author_image_fields.up.sql", size: 75, mode: os.FileMode(0664), modTime: time.Unix(1667843815, 0)} info := bindataFileInfo{name: "1662723928_add_discord_author_image_fields.up.sql", size: 75, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1e, 0x5b, 0x48, 0x57, 0x98, 0x55, 0x9a, 0xf1, 0x75, 0xf7, 0xb5, 0x41, 0x5e, 0x96, 0xc5, 0xce, 0xfc, 0x30, 0x5c, 0x15, 0x35, 0x9e, 0x4e, 0x4a, 0x3b, 0x38, 0x42, 0xc4, 0x27, 0x3c, 0x87, 0xbf}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1e, 0x5b, 0x48, 0x57, 0x98, 0x55, 0x9a, 0xf1, 0x75, 0xf7, 0xb5, 0x41, 0x5e, 0x96, 0xc5, 0xce, 0xfc, 0x30, 0x5c, 0x15, 0x35, 0x9e, 0x4e, 0x4a, 0x3b, 0x38, 0x42, 0xc4, 0x27, 0x3c, 0x87, 0xbf}}
return a, nil return a, nil
} }
@ -1407,7 +1408,7 @@ func _1664195977_add_deleted_for_mesUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1664195977_add_deleted_for_mes.up.sql", size: 352, mode: os.FileMode(0664), modTime: time.Unix(1667843815, 0)} info := bindataFileInfo{name: "1664195977_add_deleted_for_mes.up.sql", size: 352, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7d, 0x9d, 0x13, 0x9, 0xaa, 0x44, 0x14, 0x93, 0xe2, 0xf5, 0x53, 0xb7, 0x79, 0xa8, 0x18, 0xf0, 0x6c, 0xa4, 0x9c, 0x73, 0xc1, 0xaa, 0xc5, 0x2e, 0xc5, 0x41, 0xd7, 0x24, 0xb0, 0xd7, 0xb8, 0xdf}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7d, 0x9d, 0x13, 0x9, 0xaa, 0x44, 0x14, 0x93, 0xe2, 0xf5, 0x53, 0xb7, 0x79, 0xa8, 0x18, 0xf0, 0x6c, 0xa4, 0x9c, 0x73, 0xc1, 0xaa, 0xc5, 0x2e, 0xc5, 0x41, 0xd7, 0x24, 0xb0, 0xd7, 0xb8, 0xdf}}
return a, nil return a, nil
} }
@ -1427,7 +1428,7 @@ func _1664367420_add_discord_attachments_tableUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1664367420_add_discord_attachments_table.up.sql", size: 350, mode: os.FileMode(0664), modTime: time.Unix(1667843815, 0)} info := bindataFileInfo{name: "1664367420_add_discord_attachments_table.up.sql", size: 350, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x48, 0xe1, 0xb6, 0x4f, 0x6f, 0x92, 0x0, 0xb4, 0xf, 0x55, 0x12, 0x1c, 0x98, 0x6d, 0xbc, 0x1e, 0xfd, 0xae, 0x1c, 0xce, 0xd1, 0x3d, 0x2, 0x21, 0x2e, 0xc0, 0x13, 0xa, 0xb2, 0xec, 0x81, 0x13}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x48, 0xe1, 0xb6, 0x4f, 0x6f, 0x92, 0x0, 0xb4, 0xf, 0x55, 0x12, 0x1c, 0x98, 0x6d, 0xbc, 0x1e, 0xfd, 0xae, 0x1c, 0xce, 0xd1, 0x3d, 0x2, 0x21, 0x2e, 0xc0, 0x13, 0xa, 0xb2, 0xec, 0x81, 0x13}}
return a, nil return a, nil
} }
@ -1447,7 +1448,7 @@ func _1665079662_add_spectated_column_in_communitiesUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1665079662_add_spectated_column_in_communities.up.sql", size: 86, mode: os.FileMode(0664), modTime: time.Unix(1667843815, 0)} info := bindataFileInfo{name: "1665079662_add_spectated_column_in_communities.up.sql", size: 86, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa0, 0x5d, 0xfe, 0xe2, 0xbe, 0xdf, 0xba, 0x45, 0xe9, 0xfc, 0xa7, 0x5f, 0xda, 0x19, 0xdb, 0x40, 0x96, 0x59, 0x78, 0xa, 0xd7, 0x4a, 0xca, 0x1a, 0x93, 0xfb, 0xae, 0x6d, 0x74, 0x7, 0x36, 0xdd}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa0, 0x5d, 0xfe, 0xe2, 0xbe, 0xdf, 0xba, 0x45, 0xe9, 0xfc, 0xa7, 0x5f, 0xda, 0x19, 0xdb, 0x40, 0x96, 0x59, 0x78, 0xa, 0xd7, 0x4a, 0xca, 0x1a, 0x93, 0xfb, 0xae, 0x6d, 0x74, 0x7, 0x36, 0xdd}}
return a, nil return a, nil
} }
@ -1467,7 +1468,7 @@ func _1665479047_add_community_id_in_notificationsUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1665479047_add_community_id_in_notifications.up.sql", size: 169, mode: os.FileMode(0664), modTime: time.Unix(1667843815, 0)} info := bindataFileInfo{name: "1665479047_add_community_id_in_notifications.up.sql", size: 169, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd9, 0x8f, 0x8b, 0x1c, 0xaa, 0x6a, 0x56, 0xd6, 0xa5, 0x88, 0x57, 0x13, 0x8f, 0xea, 0xb9, 0x23, 0x82, 0x50, 0xb7, 0x65, 0x1f, 0xab, 0xfa, 0x23, 0x6f, 0x0, 0x7, 0xb6, 0x6e, 0xb5, 0x85, 0x44}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd9, 0x8f, 0x8b, 0x1c, 0xaa, 0x6a, 0x56, 0xd6, 0xa5, 0x88, 0x57, 0x13, 0x8f, 0xea, 0xb9, 0x23, 0x82, 0x50, 0xb7, 0x65, 0x1f, 0xab, 0xfa, 0x23, 0x6f, 0x0, 0x7, 0xb6, 0x6e, 0xb5, 0x85, 0x44}}
return a, nil return a, nil
} }
@ -1487,7 +1488,7 @@ func _1665484435_add_encrypted_messagesUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1665484435_add_encrypted_messages.up.sql", size: 402, mode: os.FileMode(0664), modTime: time.Unix(1667843815, 0)} info := bindataFileInfo{name: "1665484435_add_encrypted_messages.up.sql", size: 402, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8f, 0x5c, 0x1e, 0x1c, 0x7f, 0xae, 0x5f, 0xeb, 0x3c, 0x6c, 0xcd, 0xc2, 0x99, 0x48, 0x5c, 0x83, 0xa0, 0xa2, 0x97, 0x5, 0x39, 0x82, 0x71, 0x90, 0x47, 0x21, 0x84, 0x29, 0x19, 0xa4, 0x7a, 0x90}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8f, 0x5c, 0x1e, 0x1c, 0x7f, 0xae, 0x5f, 0xeb, 0x3c, 0x6c, 0xcd, 0xc2, 0x99, 0x48, 0x5c, 0x83, 0xa0, 0xa2, 0x97, 0x5, 0x39, 0x82, 0x71, 0x90, 0x47, 0x21, 0x84, 0x29, 0x19, 0xa4, 0x7a, 0x90}}
return a, nil return a, nil
} }
@ -1507,7 +1508,7 @@ func _1665560200_add_contact_verification_individualUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1665560200_add_contact_verification_individual.up.sql", size: 509, mode: os.FileMode(0664), modTime: time.Unix(1667843815, 0)} info := bindataFileInfo{name: "1665560200_add_contact_verification_individual.up.sql", size: 509, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc5, 0xbb, 0x61, 0xfd, 0xbf, 0x33, 0x1d, 0x4e, 0x5f, 0xbd, 0x86, 0x42, 0xb0, 0x6c, 0xf7, 0x39, 0x19, 0x6e, 0x72, 0x35, 0xfd, 0x1b, 0xd6, 0xbd, 0xf6, 0x81, 0x21, 0xc4, 0xaa, 0x6, 0x62, 0x40}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc5, 0xbb, 0x61, 0xfd, 0xbf, 0x33, 0x1d, 0x4e, 0x5f, 0xbd, 0x86, 0x42, 0xb0, 0x6c, 0xf7, 0x39, 0x19, 0x6e, 0x72, 0x35, 0xfd, 0x1b, 0xd6, 0xbd, 0xf6, 0x81, 0x21, 0xc4, 0xaa, 0x6, 0x62, 0x40}}
return a, nil return a, nil
} }
@ -1527,7 +1528,7 @@ func _1670921937_add_album_idUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1670921937_add_album_id.up.sql", size: 55, mode: os.FileMode(0664), modTime: time.Unix(1671559305, 0)} info := bindataFileInfo{name: "1670921937_add_album_id.up.sql", size: 55, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7e, 0xae, 0x83, 0x58, 0xb7, 0x77, 0x5, 0xca, 0xe3, 0xda, 0x32, 0x8f, 0x7b, 0xa4, 0x2f, 0x4c, 0xaf, 0x5f, 0xfa, 0x94, 0x36, 0xe4, 0xf9, 0x7, 0xc6, 0xd6, 0xb7, 0x90, 0xf3, 0xe5, 0xb5, 0x3}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7e, 0xae, 0x83, 0x58, 0xb7, 0x77, 0x5, 0xca, 0xe3, 0xda, 0x32, 0x8f, 0x7b, 0xa4, 0x2f, 0x4c, 0xaf, 0x5f, 0xfa, 0x94, 0x36, 0xe4, 0xf9, 0x7, 0xc6, 0xd6, 0xb7, 0x90, 0xf3, 0xe5, 0xb5, 0x3}}
return a, nil return a, nil
} }
@ -1547,7 +1548,7 @@ func _1673373000_add_repliedUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1673373000_add_replied.up.sql", size: 67, mode: os.FileMode(0664), modTime: time.Unix(1673398499, 0)} info := bindataFileInfo{name: "1673373000_add_replied.up.sql", size: 67, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd5, 0x1c, 0xae, 0xf2, 0xf, 0xb4, 0xc2, 0xba, 0x3c, 0xfe, 0x7b, 0xb0, 0xf, 0xf, 0xd5, 0xbc, 0xe2, 0xa7, 0xad, 0x50, 0xd9, 0x5a, 0xe8, 0x96, 0x22, 0x65, 0x89, 0xcf, 0x4a, 0x9a, 0x1b, 0x94}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd5, 0x1c, 0xae, 0xf2, 0xf, 0xb4, 0xc2, 0xba, 0x3c, 0xfe, 0x7b, 0xb0, 0xf, 0xf, 0xd5, 0xbc, 0xe2, 0xa7, 0xad, 0x50, 0xd9, 0x5a, 0xe8, 0x96, 0x22, 0x65, 0x89, 0xcf, 0x4a, 0x9a, 0x1b, 0x94}}
return a, nil return a, nil
} }
@ -1567,7 +1568,7 @@ func _1673428910_add_image_width_heightUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1673428910_add_image_width_height.up.sql", size: 117, mode: os.FileMode(0664), modTime: time.Unix(1673527384, 0)} info := bindataFileInfo{name: "1673428910_add_image_width_height.up.sql", size: 117, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x74, 0xda, 0x93, 0x2a, 0x9b, 0x6b, 0xb7, 0x96, 0xcd, 0xac, 0xf, 0xaf, 0x54, 0x89, 0x9e, 0x91, 0x5b, 0xd0, 0x4a, 0xa, 0x8d, 0x9e, 0x80, 0x66, 0x26, 0x9e, 0xb5, 0xa9, 0x8, 0xec, 0x2d, 0x6c}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x74, 0xda, 0x93, 0x2a, 0x9b, 0x6b, 0xb7, 0x96, 0xcd, 0xac, 0xf, 0xaf, 0x54, 0x89, 0x9e, 0x91, 0x5b, 0xd0, 0x4a, 0xa, 0x8d, 0x9e, 0x80, 0x66, 0x26, 0x9e, 0xb5, 0xa9, 0x8, 0xec, 0x2d, 0x6c}}
return a, nil return a, nil
} }
@ -1587,7 +1588,7 @@ func _1674210659_add_contact_request_local_clockUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1674210659_add_contact_request_local_clock.up.sql", size: 691, mode: os.FileMode(0664), modTime: time.Unix(1675294606, 0)} info := bindataFileInfo{name: "1674210659_add_contact_request_local_clock.up.sql", size: 691, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x92, 0x72, 0x39, 0xfe, 0x72, 0x98, 0xfc, 0x91, 0x20, 0x10, 0xe8, 0xf5, 0xac, 0x79, 0xa8, 0x1c, 0xca, 0x7b, 0x35, 0xa, 0xc1, 0x56, 0x49, 0x9a, 0xfc, 0xbd, 0x64, 0x9d, 0xdf, 0xd2, 0x60, 0x70}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x92, 0x72, 0x39, 0xfe, 0x72, 0x98, 0xfc, 0x91, 0x20, 0x10, 0xe8, 0xf5, 0xac, 0x79, 0xa8, 0x1c, 0xca, 0x7b, 0x35, 0xa, 0xc1, 0x56, 0x49, 0x9a, 0xfc, 0xbd, 0x64, 0x9d, 0xdf, 0xd2, 0x60, 0x70}}
return a, nil return a, nil
} }
@ -1607,7 +1608,7 @@ func _1675212323_add_deleted_byUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1675212323_add_deleted_by.up.sql", size: 57, mode: os.FileMode(0664), modTime: time.Unix(1675294606, 0)} info := bindataFileInfo{name: "1675212323_add_deleted_by.up.sql", size: 57, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x85, 0x37, 0x29, 0x2f, 0xd, 0x5a, 0xb6, 0xdb, 0xa7, 0x8, 0x86, 0xfc, 0x7a, 0x70, 0xd8, 0x4d, 0xe6, 0xf0, 0x57, 0xe7, 0xd1, 0x95, 0xd5, 0x4, 0x40, 0x2f, 0x7a, 0x5, 0x4f, 0xc2, 0x97, 0xbc}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x85, 0x37, 0x29, 0x2f, 0xd, 0x5a, 0xb6, 0xdb, 0xa7, 0x8, 0x86, 0xfc, 0x7a, 0x70, 0xd8, 0x4d, 0xe6, 0xf0, 0x57, 0xe7, 0xd1, 0x95, 0xd5, 0x4, 0x40, 0x2f, 0x7a, 0x5, 0x4f, 0xc2, 0x97, 0xbc}}
return a, nil return a, nil
} }
@ -1627,7 +1628,7 @@ func _1675247084_add_activity_center_statesUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1675247084_add_activity_center_states.up.sql", size: 136, mode: os.FileMode(0664), modTime: time.Unix(1676987564, 0)} info := bindataFileInfo{name: "1675247084_add_activity_center_states.up.sql", size: 136, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xba, 0x90, 0x7d, 0x55, 0xc7, 0x40, 0x29, 0x26, 0x97, 0x45, 0x5c, 0xdf, 0xba, 0x61, 0xb, 0xfc, 0x3d, 0x7a, 0x6c, 0x42, 0xe4, 0x95, 0x78, 0xb0, 0xc5, 0x1f, 0x73, 0xe9, 0x33, 0x51, 0xc8, 0x81}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xba, 0x90, 0x7d, 0x55, 0xc7, 0x40, 0x29, 0x26, 0x97, 0x45, 0x5c, 0xdf, 0xba, 0x61, 0xb, 0xfc, 0x3d, 0x7a, 0x6c, 0x42, 0xe4, 0x95, 0x78, 0xb0, 0xc5, 0x1f, 0x73, 0xe9, 0x33, 0x51, 0xc8, 0x81}}
return a, nil return a, nil
} }
@ -1647,7 +1648,7 @@ func _1675272329_fix_protocol_migrationUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1675272329_fix_protocol_migration.up.sql", size: 183, mode: os.FileMode(0664), modTime: time.Unix(1675294606, 0)} info := bindataFileInfo{name: "1675272329_fix_protocol_migration.up.sql", size: 183, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb6, 0xe0, 0x11, 0x4c, 0x66, 0x55, 0x72, 0xd3, 0xe6, 0x98, 0xa4, 0xe7, 0x44, 0xf9, 0x3b, 0x3a, 0x3f, 0xd9, 0x91, 0x1e, 0x4f, 0xfc, 0x56, 0x63, 0xe5, 0xa4, 0x83, 0xfc, 0x7c, 0xcf, 0x18, 0x99}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb6, 0xe0, 0x11, 0x4c, 0x66, 0x55, 0x72, 0xd3, 0xe6, 0x98, 0xa4, 0xe7, 0x44, 0xf9, 0x3b, 0x3a, 0x3f, 0xd9, 0x91, 0x1e, 0x4f, 0xfc, 0x56, 0x63, 0xe5, 0xa4, 0x83, 0xfc, 0x7c, 0xcf, 0x18, 0x99}}
return a, nil return a, nil
} }
@ -1667,7 +1668,7 @@ func _1676998418_fix_activity_center_migrationUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1676998418_fix_activity_center_migration.up.sql", size: 178, mode: os.FileMode(0664), modTime: time.Unix(1677251785, 0)} info := bindataFileInfo{name: "1676998418_fix_activity_center_migration.up.sql", size: 178, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8a, 0xdc, 0x64, 0xb1, 0x47, 0x67, 0xda, 0x2c, 0x26, 0x29, 0x6b, 0x6f, 0xb, 0xfa, 0x45, 0xf3, 0xad, 0x8b, 0x1a, 0x5f, 0x1c, 0xed, 0xd7, 0xea, 0x54, 0xf5, 0x3f, 0xb8, 0xf6, 0xf9, 0x44, 0x53}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8a, 0xdc, 0x64, 0xb1, 0x47, 0x67, 0xda, 0x2c, 0x26, 0x29, 0x6b, 0x6f, 0xb, 0xfa, 0x45, 0xf3, 0xad, 0x8b, 0x1a, 0x5f, 0x1c, 0xed, 0xd7, 0xea, 0x54, 0xf5, 0x3f, 0xb8, 0xf6, 0xf9, 0x44, 0x53}}
return a, nil return a, nil
} }
@ -1687,7 +1688,7 @@ func _1677278861_add_deleted_column_to_activity_center_notifications_tableUpSql(
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1677278861_add_deleted_column_to_activity_center_notifications_table.up.sql", size: 381, mode: os.FileMode(0664), modTime: time.Unix(1677714914, 0)} info := bindataFileInfo{name: "1677278861_add_deleted_column_to_activity_center_notifications_table.up.sql", size: 381, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x38, 0x3a, 0x95, 0xaf, 0x81, 0xb0, 0x85, 0x8d, 0x73, 0xda, 0x7b, 0x2a, 0x35, 0xa6, 0xaa, 0xcc, 0x4c, 0x35, 0xa3, 0xa8, 0xbd, 0xd1, 0x37, 0xe8, 0x5d, 0x83, 0xa4, 0x33, 0x1f, 0x10, 0xe4, 0xe6}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x38, 0x3a, 0x95, 0xaf, 0x81, 0xb0, 0x85, 0x8d, 0x73, 0xda, 0x7b, 0x2a, 0x35, 0xa6, 0xaa, 0xcc, 0x4c, 0x35, 0xa3, 0xa8, 0xbd, 0xd1, 0x37, 0xe8, 0x5d, 0x83, 0xa4, 0x33, 0x1f, 0x10, 0xe4, 0xe6}}
return a, nil return a, nil
} }
@ -1707,7 +1708,7 @@ func _1677486338_add_community_tokens_tableUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1677486338_add_community_tokens_table.up.sql", size: 527, mode: os.FileMode(0664), modTime: time.Unix(1677714914, 0)} info := bindataFileInfo{name: "1677486338_add_community_tokens_table.up.sql", size: 527, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfb, 0x7b, 0x3d, 0x7e, 0x79, 0xc4, 0x3a, 0xf1, 0xda, 0x4b, 0xc6, 0xd1, 0xd, 0xfb, 0xb2, 0xb9, 0x7f, 0x81, 0x29, 0xab, 0xd8, 0x1, 0x20, 0xd7, 0xe1, 0xaf, 0x3e, 0x67, 0x1b, 0xdb, 0xf9, 0xd5}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfb, 0x7b, 0x3d, 0x7e, 0x79, 0xc4, 0x3a, 0xf1, 0xda, 0x4b, 0xc6, 0xd1, 0xd, 0xfb, 0xb2, 0xb9, 0x7f, 0x81, 0x29, 0xab, 0xd8, 0x1, 0x20, 0xd7, 0xe1, 0xaf, 0x3e, 0x67, 0x1b, 0xdb, 0xf9, 0xd5}}
return a, nil return a, nil
} }
@ -1727,7 +1728,7 @@ func _1678292329_add_collapsed_categoriesUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1678292329_add_collapsed_categories.up.sql", size: 170, mode: os.FileMode(0664), modTime: time.Unix(1679924157, 0)} info := bindataFileInfo{name: "1678292329_add_collapsed_categories.up.sql", size: 170, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x46, 0x63, 0x86, 0xd5, 0x7, 0xe2, 0x25, 0x15, 0x1b, 0xfe, 0xf3, 0xe, 0x50, 0x48, 0x11, 0x3c, 0x7c, 0xc6, 0xe5, 0xab, 0x8d, 0x1f, 0xe8, 0x3c, 0xcb, 0xf0, 0x8d, 0xa7, 0x49, 0x4c, 0x16, 0x4f}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x46, 0x63, 0x86, 0xd5, 0x7, 0xe2, 0x25, 0x15, 0x1b, 0xfe, 0xf3, 0xe, 0x50, 0x48, 0x11, 0x3c, 0x7c, 0xc6, 0xe5, 0xab, 0x8d, 0x1f, 0xe8, 0x3c, 0xcb, 0xf0, 0x8d, 0xa7, 0x49, 0x4c, 0x16, 0x4f}}
return a, nil return a, nil
} }
@ -1747,7 +1748,7 @@ func _1678800760_add_index_to_raw_messagesUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1678800760_add_index_to_raw_messages.up.sql", size: 88, mode: os.FileMode(0664), modTime: time.Unix(1679924157, 0)} info := bindataFileInfo{name: "1678800760_add_index_to_raw_messages.up.sql", size: 88, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9d, 0xd9, 0x8d, 0x22, 0x46, 0xae, 0x7b, 0x53, 0x3e, 0x51, 0x39, 0xad, 0xad, 0x38, 0x50, 0x6, 0xfa, 0xb9, 0xc4, 0x9f, 0x8d, 0xd2, 0x67, 0x0, 0xef, 0x58, 0x13, 0xab, 0x6a, 0x67, 0xf3, 0x7e}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9d, 0xd9, 0x8d, 0x22, 0x46, 0xae, 0x7b, 0x53, 0x3e, 0x51, 0x39, 0xad, 0xad, 0x38, 0x50, 0x6, 0xfa, 0xb9, 0xc4, 0x9f, 0x8d, 0xd2, 0x67, 0x0, 0xef, 0x58, 0x13, 0xab, 0x6a, 0x67, 0xf3, 0x7e}}
return a, nil return a, nil
} }
@ -1767,7 +1768,7 @@ func _1678877478_add_communities_requests_to_join_revealed_addresses_tableUpSql(
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1678877478_add_communities_requests_to_join_revealed_addresses_table.up.sql", size: 168, mode: os.FileMode(0664), modTime: time.Unix(1679924157, 0)} info := bindataFileInfo{name: "1678877478_add_communities_requests_to_join_revealed_addresses_table.up.sql", size: 168, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x82, 0x1, 0xb4, 0xb2, 0x94, 0x25, 0xd5, 0x2e, 0x45, 0xc3, 0xb1, 0x2c, 0xeb, 0x1a, 0x52, 0xe0, 0x4b, 0x9b, 0x46, 0xf4, 0xc, 0xac, 0x1, 0x1e, 0x90, 0xbc, 0x64, 0x38, 0x10, 0xf1, 0xaf, 0xac}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x82, 0x1, 0xb4, 0xb2, 0x94, 0x25, 0xd5, 0x2e, 0x45, 0xc3, 0xb1, 0x2c, 0xeb, 0x1a, 0x52, 0xe0, 0x4b, 0x9b, 0x46, 0xf4, 0xc, 0xac, 0x1, 0x1e, 0x90, 0xbc, 0x64, 0x38, 0x10, 0xf1, 0xaf, 0xac}}
return a, nil return a, nil
} }
@ -1787,7 +1788,7 @@ func _1679326850_add_community_token_ownersUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1679326850_add_community_token_owners.up.sql", size: 206, mode: os.FileMode(0664), modTime: time.Unix(1680094975, 0)} info := bindataFileInfo{name: "1679326850_add_community_token_owners.up.sql", size: 206, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe9, 0xe6, 0x25, 0x67, 0xd1, 0xd6, 0x54, 0x88, 0xb1, 0x80, 0x1e, 0x2d, 0x9c, 0xfa, 0x1c, 0xc7, 0x63, 0x6e, 0xf9, 0x66, 0xb1, 0x68, 0xc6, 0xf8, 0x51, 0xb6, 0xd5, 0x4e, 0x93, 0x39, 0x5e, 0xc0}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe9, 0xe6, 0x25, 0x67, 0xd1, 0xd6, 0x54, 0x88, 0xb1, 0x80, 0x1e, 0x2d, 0x9c, 0xfa, 0x1c, 0xc7, 0x63, 0x6e, 0xf9, 0x66, 0xb1, 0x68, 0xc6, 0xf8, 0x51, 0xb6, 0xd5, 0x4e, 0x93, 0x39, 0x5e, 0xc0}}
return a, nil return a, nil
} }
@ -1807,7 +1808,7 @@ func _1680011500_add_album_images_countUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1680011500_add_album_images_count.up.sql", size: 71, mode: os.FileMode(0664), modTime: time.Unix(1681392552, 0)} info := bindataFileInfo{name: "1680011500_add_album_images_count.up.sql", size: 71, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2e, 0x55, 0x99, 0x31, 0xcc, 0x80, 0x78, 0xc3, 0x51, 0x13, 0x63, 0x6f, 0x1a, 0xfd, 0x53, 0xd2, 0xf4, 0x13, 0x4b, 0xb2, 0x4f, 0x99, 0xb8, 0x7b, 0x7, 0x99, 0xb6, 0xab, 0x88, 0x2e, 0x7, 0x8}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2e, 0x55, 0x99, 0x31, 0xcc, 0x80, 0x78, 0xc3, 0x51, 0x13, 0x63, 0x6f, 0x1a, 0xfd, 0x53, 0xd2, 0xf4, 0x13, 0x4b, 0xb2, 0x4f, 0x99, 0xb8, 0x7b, 0x7, 0x99, 0xb6, 0xab, 0x88, 0x2e, 0x7, 0x8}}
return a, nil return a, nil
} }
@ -1827,7 +1828,7 @@ func _1680114896_add_index_on_album_idUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1680114896_add_index_on_album_id.up.sql", size: 83, mode: os.FileMode(0664), modTime: time.Unix(1681392552, 0)} info := bindataFileInfo{name: "1680114896_add_index_on_album_id.up.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb3, 0x7e, 0xd5, 0xcd, 0x2d, 0xab, 0xd4, 0x32, 0x26, 0x50, 0x3a, 0x5b, 0x8e, 0x1c, 0xcc, 0x35, 0xf8, 0xa1, 0x2a, 0xc1, 0x23, 0xf6, 0x90, 0xfe, 0x84, 0x3, 0xde, 0x5a, 0xee, 0xc6, 0xfc, 0x2a}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb3, 0x7e, 0xd5, 0xcd, 0x2d, 0xab, 0xd4, 0x32, 0x26, 0x50, 0x3a, 0x5b, 0x8e, 0x1c, 0xcc, 0x35, 0xf8, 0xa1, 0x2a, 0xc1, 0x23, 0xf6, 0x90, 0xfe, 0x84, 0x3, 0xde, 0x5a, 0xee, 0xc6, 0xfc, 0x2a}}
return a, nil return a, nil
} }
@ -1847,7 +1848,7 @@ func _1681655289_add_mute_tillUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1681655289_add_mute_till.up.sql", size: 51, mode: os.FileMode(0664), modTime: time.Unix(1683581866, 0)} info := bindataFileInfo{name: "1681655289_add_mute_till.up.sql", size: 51, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd1, 0xbe, 0xce, 0xb8, 0xe1, 0x30, 0xe7, 0xa7, 0xe0, 0x7d, 0x97, 0xf4, 0x26, 0xb8, 0x57, 0x1d, 0x2a, 0xed, 0x18, 0xf2, 0xa, 0xe3, 0x77, 0x29, 0x18, 0x55, 0x9, 0x74, 0x2c, 0x24, 0x5a, 0x19}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd1, 0xbe, 0xce, 0xb8, 0xe1, 0x30, 0xe7, 0xa7, 0xe0, 0x7d, 0x97, 0xf4, 0x26, 0xb8, 0x57, 0x1d, 0x2a, 0xed, 0x18, 0xf2, 0xa, 0xe3, 0x77, 0x29, 0x18, 0x55, 0x9, 0x74, 0x2c, 0x24, 0x5a, 0x19}}
return a, nil return a, nil
} }
@ -1867,7 +1868,7 @@ func _1681934966_add_index_response_toUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1681934966_add_index_response_to.up.sql", size: 70, mode: os.FileMode(0664), modTime: time.Unix(1683581866, 0)} info := bindataFileInfo{name: "1681934966_add_index_response_to.up.sql", size: 70, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3b, 0xed, 0xa6, 0x7e, 0x51, 0xf2, 0xa1, 0x3c, 0x78, 0x9a, 0xa7, 0x7a, 0x51, 0x25, 0x7d, 0xdd, 0x4b, 0xf3, 0x45, 0xeb, 0x3f, 0xad, 0x23, 0x3e, 0xac, 0x16, 0x28, 0x62, 0x7, 0x8c, 0xe0, 0xa0}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3b, 0xed, 0xa6, 0x7e, 0x51, 0xf2, 0xa1, 0x3c, 0x78, 0x9a, 0xa7, 0x7a, 0x51, 0x25, 0x7d, 0xdd, 0x4b, 0xf3, 0x45, 0xeb, 0x3f, 0xad, 0x23, 0x3e, 0xac, 0x16, 0x28, 0x62, 0x7, 0x8c, 0xe0, 0xa0}}
return a, nil return a, nil
} }
@ -1887,7 +1888,7 @@ func _1682528339_add_index_user_messages_unseenUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1682528339_add_index_user_messages_unseen.up.sql", size: 104, mode: os.FileMode(0664), modTime: time.Unix(1683581871, 0)} info := bindataFileInfo{name: "1682528339_add_index_user_messages_unseen.up.sql", size: 104, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x35, 0xfa, 0x98, 0xdd, 0x74, 0x5e, 0x21, 0x1f, 0xf2, 0x56, 0x17, 0x96, 0xfe, 0xbb, 0x44, 0x4c, 0xa1, 0xd8, 0x9f, 0x2e, 0x6, 0x2f, 0xd8, 0x23, 0xec, 0x94, 0x8c, 0x53, 0xf3, 0xf0, 0x40, 0xe7}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x35, 0xfa, 0x98, 0xdd, 0x74, 0x5e, 0x21, 0x1f, 0xf2, 0x56, 0x17, 0x96, 0xfe, 0xbb, 0x44, 0x4c, 0xa1, 0xd8, 0x9f, 0x2e, 0x6, 0x2f, 0xd8, 0x23, 0xec, 0x94, 0x8c, 0x53, 0xf3, 0xf0, 0x40, 0xe7}}
return a, nil return a, nil
} }
@ -1907,7 +1908,7 @@ func _1683707289_recreate_deleted_for_mesUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1683707289_recreate_deleted_for_mes.up.sql", size: 408, mode: os.FileMode(0664), modTime: time.Unix(1683894948, 0)} info := bindataFileInfo{name: "1683707289_recreate_deleted_for_mes.up.sql", size: 408, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5b, 0x9d, 0xd6, 0x45, 0x41, 0x29, 0x44, 0xf6, 0x14, 0x38, 0xeb, 0xdf, 0x6b, 0x5d, 0x9c, 0x45, 0x4b, 0xc3, 0xa8, 0xbd, 0x38, 0x14, 0xd9, 0x73, 0xf1, 0x51, 0xbb, 0x9f, 0x14, 0x36, 0xf2, 0x11}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5b, 0x9d, 0xd6, 0x45, 0x41, 0x29, 0x44, 0xf6, 0x14, 0x38, 0xeb, 0xdf, 0x6b, 0x5d, 0x9c, 0x45, 0x4b, 0xc3, 0xa8, 0xbd, 0x38, 0x14, 0xd9, 0x73, 0xf1, 0x51, 0xbb, 0x9f, 0x14, 0x36, 0xf2, 0x11}}
return a, nil return a, nil
} }
@ -1927,7 +1928,7 @@ func _1683725607_mark_discord_messages_as_seenUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1683725607_mark_discord_messages_as_seen.up.sql", size: 108, mode: os.FileMode(0664), modTime: time.Unix(1683894948, 0)} info := bindataFileInfo{name: "1683725607_mark_discord_messages_as_seen.up.sql", size: 108, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd7, 0x2a, 0xc3, 0x43, 0xea, 0x5e, 0x3, 0x2e, 0xce, 0x79, 0xea, 0xa5, 0x67, 0x61, 0x8c, 0xe4, 0xb9, 0xb7, 0x4d, 0xd5, 0xd5, 0xb0, 0x35, 0xc8, 0x2b, 0xa0, 0x3f, 0xd8, 0xde, 0xea, 0x4e, 0x16}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd7, 0x2a, 0xc3, 0x43, 0xea, 0x5e, 0x3, 0x2e, 0xce, 0x79, 0xea, 0xa5, 0x67, 0x61, 0x8c, 0xe4, 0xb9, 0xb7, 0x4d, 0xd5, 0xd5, 0xb0, 0x35, 0xc8, 0x2b, 0xa0, 0x3f, 0xd8, 0xde, 0xea, 0x4e, 0x16}}
return a, nil return a, nil
} }
@ -1947,7 +1948,7 @@ func _1684174617_add_url_previews_to_user_messagesUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1684174617_add_url_previews_to_user_messages.up.sql", size: 58, mode: os.FileMode(0664), modTime: time.Unix(1685365190, 0)} info := bindataFileInfo{name: "1684174617_add_url_previews_to_user_messages.up.sql", size: 58, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xdc, 0xb0, 0x72, 0xe3, 0xe4, 0xa9, 0x63, 0x82, 0xea, 0x52, 0x70, 0xb6, 0xa0, 0x73, 0x55, 0x7a, 0x78, 0xa8, 0xd2, 0xb0, 0xf4, 0x78, 0x8a, 0xd, 0x5a, 0xa2, 0x9d, 0x92, 0xdc, 0xce, 0x1c, 0x71}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xdc, 0xb0, 0x72, 0xe3, 0xe4, 0xa9, 0x63, 0x82, 0xea, 0x52, 0x70, 0xb6, 0xa0, 0x73, 0x55, 0x7a, 0x78, 0xa8, 0xd2, 0xb0, 0xf4, 0x78, 0x8a, 0xd, 0x5a, 0xa2, 0x9d, 0x92, 0xdc, 0xce, 0x1c, 0x71}}
return a, nil return a, nil
} }
@ -1967,7 +1968,7 @@ func _1684175608_add_token_balancesUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1684175608_add_token_balances.up.sql", size: 467, mode: os.FileMode(0664), modTime: time.Unix(1685365190, 0)} info := bindataFileInfo{name: "1684175608_add_token_balances.up.sql", size: 467, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1b, 0x4e, 0xe0, 0x48, 0x34, 0x1, 0x4d, 0x88, 0x11, 0x54, 0x20, 0x52, 0x5c, 0x57, 0x14, 0xa9, 0xa9, 0x36, 0xa4, 0x28, 0x59, 0x48, 0xa8, 0xa, 0x76, 0xec, 0x37, 0xee, 0x9e, 0xd2, 0x20, 0xaa}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1b, 0x4e, 0xe0, 0x48, 0x34, 0x1, 0x4d, 0x88, 0x11, 0x54, 0x20, 0x52, 0x5c, 0x57, 0x14, 0xa9, 0xa9, 0x36, 0xa4, 0x28, 0x59, 0x48, 0xa8, 0xa, 0x76, 0xec, 0x37, 0xee, 0x9e, 0xd2, 0x20, 0xaa}}
return a, nil return a, nil
} }
@ -1987,7 +1988,7 @@ func _1684979808_sync_activity_center_notificationsUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1684979808_sync_activity_center_notifications.up.sql", size: 169, mode: os.FileMode(0664), modTime: time.Unix(1687991048, 0)} info := bindataFileInfo{name: "1684979808_sync_activity_center_notifications.up.sql", size: 169, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd8, 0xf5, 0xf7, 0x94, 0xa9, 0xa1, 0x60, 0x26, 0x9d, 0xca, 0x31, 0xf, 0x14, 0xd, 0x70, 0xf8, 0xab, 0x40, 0x29, 0x73, 0x61, 0xbd, 0x1b, 0xb6, 0xc4, 0x31, 0x77, 0x9e, 0x32, 0xa8, 0xce, 0x6d}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd8, 0xf5, 0xf7, 0x94, 0xa9, 0xa1, 0x60, 0x26, 0x9d, 0xca, 0x31, 0xf, 0x14, 0xd, 0x70, 0xf8, 0xab, 0x40, 0x29, 0x73, 0x61, 0xbd, 0x1b, 0xb6, 0xc4, 0x31, 0x77, 0x9e, 0x32, 0xa8, 0xce, 0x6d}}
return a, nil return a, nil
} }
@ -2007,7 +2008,7 @@ func _1685383829_add_communities_mute_tillUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1685383829_add_communities_mute_till.up.sql", size: 69, mode: os.FileMode(0664), modTime: time.Unix(1692114327, 0)} info := bindataFileInfo{name: "1685383829_add_communities_mute_till.up.sql", size: 69, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xbf, 0x58, 0x96, 0xe5, 0x66, 0xcb, 0xde, 0xed, 0x76, 0xb8, 0x5a, 0x86, 0x81, 0x9a, 0x60, 0x51, 0x12, 0x37, 0x54, 0x9a, 0x36, 0x3e, 0xd1, 0x4a, 0xbe, 0x9a, 0xab, 0x20, 0x7f, 0x1d, 0xf4, 0x73}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xbf, 0x58, 0x96, 0xe5, 0x66, 0xcb, 0xde, 0xed, 0x76, 0xb8, 0x5a, 0x86, 0x81, 0x9a, 0x60, 0x51, 0x12, 0x37, 0x54, 0x9a, 0x36, 0x3e, 0xd1, 0x4a, 0xbe, 0x9a, 0xab, 0x20, 0x7f, 0x1d, 0xf4, 0x73}}
return a, nil return a, nil
} }
@ -2027,7 +2028,7 @@ func _1685964183_add_chainids_to_revealed_addressesUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1685964183_add_chainids_to_revealed_addresses.up.sql", size: 88, mode: os.FileMode(0664), modTime: time.Unix(1687991048, 0)} info := bindataFileInfo{name: "1685964183_add_chainids_to_revealed_addresses.up.sql", size: 88, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc, 0xb5, 0xa8, 0xd7, 0xad, 0x9c, 0x54, 0xa5, 0xe9, 0xdb, 0x42, 0x2d, 0xd0, 0xd7, 0x22, 0x1, 0x93, 0xf3, 0x4f, 0x53, 0xf7, 0x1e, 0xbe, 0x4b, 0xac, 0xc7, 0x63, 0x15, 0xdf, 0xe0, 0x6, 0xf8}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc, 0xb5, 0xa8, 0xd7, 0xad, 0x9c, 0x54, 0xa5, 0xe9, 0xdb, 0x42, 0x2d, 0xd0, 0xd7, 0x22, 0x1, 0x93, 0xf3, 0x4f, 0x53, 0xf7, 0x1e, 0xbe, 0x4b, 0xac, 0xc7, 0x63, 0x15, 0xdf, 0xe0, 0x6, 0xf8}}
return a, nil return a, nil
} }
@ -2047,7 +2048,7 @@ func _1687370421_add_communities_muted_till_newUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1687370421_add_communities_muted_till_new.up.sql", size: 635, mode: os.FileMode(0664), modTime: time.Unix(1692114327, 0)} info := bindataFileInfo{name: "1687370421_add_communities_muted_till_new.up.sql", size: 635, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x65, 0x73, 0x96, 0x1d, 0xc8, 0x3e, 0xca, 0xf5, 0xdc, 0xe3, 0xac, 0x3f, 0x9c, 0xc3, 0x67, 0x12, 0x9c, 0x19, 0x1, 0x4, 0x2b, 0xea, 0x6b, 0xe1, 0x59, 0x59, 0x89, 0x3d, 0xef, 0x4a, 0x6e, 0xbe}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x65, 0x73, 0x96, 0x1d, 0xc8, 0x3e, 0xca, 0xf5, 0xdc, 0xe3, 0xac, 0x3f, 0x9c, 0xc3, 0x67, 0x12, 0x9c, 0x19, 0x1, 0x4, 0x2b, 0xea, 0x6b, 0xe1, 0x59, 0x59, 0x89, 0x3d, 0xef, 0x4a, 0x6e, 0xbe}}
return a, nil return a, nil
} }
@ -2067,7 +2068,7 @@ func _1687416607_add_communities_check_channel_permission_responses_tableUpSql()
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1687416607_add_communities_check_channel_permission_responses_table.up.sql", size: 739, mode: os.FileMode(0664), modTime: time.Unix(1692114327, 0)} info := bindataFileInfo{name: "1687416607_add_communities_check_channel_permission_responses_table.up.sql", size: 739, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc2, 0x6, 0x3, 0x1a, 0xde, 0x9d, 0xbc, 0x50, 0x9d, 0xf1, 0x6d, 0x5a, 0x1c, 0x28, 0x92, 0x19, 0x89, 0x76, 0x4e, 0x8b, 0x60, 0xa9, 0xf, 0xe9, 0x76, 0xf1, 0xee, 0x75, 0x92, 0xbd, 0xda, 0x72}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc2, 0x6, 0x3, 0x1a, 0xde, 0x9d, 0xbc, 0x50, 0x9d, 0xf1, 0x6d, 0x5a, 0x1c, 0x28, 0x92, 0x19, 0x89, 0x76, 0x4e, 0x8b, 0x60, 0xa9, 0xf, 0xe9, 0x76, 0xf1, 0xee, 0x75, 0x92, 0xbd, 0xda, 0x72}}
return a, nil return a, nil
} }
@ -2087,7 +2088,7 @@ func _1687856939_add_community_tokens_decimalsUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1687856939_add_community_tokens_decimals.up.sql", size: 65, mode: os.FileMode(0664), modTime: time.Unix(1692114327, 0)} info := bindataFileInfo{name: "1687856939_add_community_tokens_decimals.up.sql", size: 65, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x59, 0x76, 0x42, 0x70, 0xc9, 0x7b, 0x16, 0xf6, 0xfe, 0x7, 0x1c, 0x99, 0xe5, 0x38, 0xfd, 0xa0, 0x3b, 0x93, 0x40, 0xbc, 0x66, 0xc2, 0xd1, 0xdd, 0xe9, 0xc7, 0xbf, 0xae, 0x36, 0xcc, 0x46, 0x57}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x59, 0x76, 0x42, 0x70, 0xc9, 0x7b, 0x16, 0xf6, 0xfe, 0x7, 0x1c, 0x99, 0xe5, 0x38, 0xfd, 0xa0, 0x3b, 0x93, 0x40, 0xbc, 0x66, 0xc2, 0xd1, 0xdd, 0xe9, 0xc7, 0xbf, 0xae, 0x36, 0xcc, 0x46, 0x57}}
return a, nil return a, nil
} }
@ -2107,7 +2108,7 @@ func _1687959987_modify_community_tokens_supply_as_stringUpSql() (*asset, error)
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1687959987_modify_community_tokens_supply_as_string.up.sql", size: 77, mode: os.FileMode(0664), modTime: time.Unix(1692114327, 0)} info := bindataFileInfo{name: "1687959987_modify_community_tokens_supply_as_string.up.sql", size: 77, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x57, 0x89, 0xbf, 0x9b, 0xed, 0x9b, 0x18, 0x3f, 0x84, 0xb5, 0x3c, 0x78, 0x40, 0x60, 0xea, 0x33, 0x26, 0x50, 0x3, 0xda, 0x28, 0x92, 0xd3, 0xb6, 0xff, 0x40, 0xa7, 0x19, 0x2, 0xa7, 0x17, 0xf9}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x57, 0x89, 0xbf, 0x9b, 0xed, 0x9b, 0x18, 0x3f, 0x84, 0xb5, 0x3c, 0x78, 0x40, 0x60, 0xea, 0x33, 0x26, 0x50, 0x3, 0xda, 0x28, 0x92, 0xd3, 0xb6, 0xff, 0x40, 0xa7, 0x19, 0x2, 0xa7, 0x17, 0xf9}}
return a, nil return a, nil
} }
@ -2127,7 +2128,7 @@ func _1689258900_add_airdrop_address_to_revealed_addressesUpSql() (*asset, error
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1689258900_add_airdrop_address_to_revealed_addresses.up.sql", size: 99, mode: os.FileMode(0664), modTime: time.Unix(1692114327, 0)} info := bindataFileInfo{name: "1689258900_add_airdrop_address_to_revealed_addresses.up.sql", size: 99, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xea, 0x7e, 0xaf, 0x5c, 0xd, 0xe5, 0x1e, 0x67, 0x1a, 0x6d, 0xd, 0x28, 0x20, 0x7a, 0x1a, 0x45, 0x6e, 0xba, 0x80, 0x91, 0xb0, 0xd6, 0xfd, 0xc2, 0xb9, 0x42, 0x5c, 0x8d, 0x6e, 0x3e, 0x6e, 0xb2}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xea, 0x7e, 0xaf, 0x5c, 0xd, 0xe5, 0x1e, 0x67, 0x1a, 0x6d, 0xd, 0x28, 0x20, 0x7a, 0x1a, 0x45, 0x6e, 0xba, 0x80, 0x91, 0xb0, 0xd6, 0xfd, 0xc2, 0xb9, 0x42, 0x5c, 0x8d, 0x6e, 0x3e, 0x6e, 0xb2}}
return a, nil return a, nil
} }
@ -2147,7 +2148,7 @@ func _1689266326_create_communities_events_tableUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1689266326_create_communities_events_table.up.sql", size: 164, mode: os.FileMode(0664), modTime: time.Unix(1692814344, 0)} info := bindataFileInfo{name: "1689266326_create_communities_events_table.up.sql", size: 164, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf5, 0x4e, 0xe, 0xba, 0x29, 0x16, 0x46, 0x38, 0x19, 0xa4, 0x5, 0x40, 0x46, 0xaf, 0x9a, 0x6, 0x89, 0xe0, 0x9c, 0xcc, 0xec, 0x8a, 0xb, 0x40, 0x85, 0x6f, 0xcc, 0x5, 0x24, 0x2a, 0x33, 0xfa}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf5, 0x4e, 0xe, 0xba, 0x29, 0x16, 0x46, 0x38, 0x19, 0xa4, 0x5, 0x40, 0x46, 0xaf, 0x9a, 0x6, 0x89, 0xe0, 0x9c, 0xcc, 0xec, 0x8a, 0xb, 0x40, 0x85, 0x6f, 0xcc, 0x5, 0x24, 0x2a, 0x33, 0xfa}}
return a, nil return a, nil
} }
@ -2167,7 +2168,7 @@ func _1689931300_add_community_tokens_deployer_and_priv_levelUpSql() (*asset, er
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1689931300_add_community_tokens_deployer_and_priv_level.up.sql", size: 156, mode: os.FileMode(0664), modTime: time.Unix(1692814344, 0)} info := bindataFileInfo{name: "1689931300_add_community_tokens_deployer_and_priv_level.up.sql", size: 156, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3f, 0x24, 0xd9, 0x4d, 0xe, 0x4b, 0xe3, 0x4c, 0xd1, 0xc, 0x72, 0xd4, 0x99, 0xe4, 0xb9, 0xb8, 0xe9, 0x38, 0x9e, 0x11, 0x48, 0xea, 0xe3, 0x5d, 0xd9, 0xd0, 0xef, 0x96, 0x38, 0x5a, 0xd4, 0xa5}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3f, 0x24, 0xd9, 0x4d, 0xe, 0x4b, 0xe3, 0x4c, 0xd1, 0xc, 0x72, 0xd4, 0x99, 0xe4, 0xb9, 0xb8, 0xe9, 0x38, 0x9e, 0x11, 0x48, 0xea, 0xe3, 0x5d, 0xd9, 0xd0, 0xef, 0x96, 0x38, 0x5a, 0xd4, 0xa5}}
return a, nil return a, nil
} }
@ -2187,7 +2188,7 @@ func _1693311881_add_unfurled_links_to_message_editsUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1693311881_add_unfurled_links_to_message_edits.up.sql", size: 64, mode: os.FileMode(0664), modTime: time.Unix(1694098269, 0)} info := bindataFileInfo{name: "1693311881_add_unfurled_links_to_message_edits.up.sql", size: 64, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6b, 0xc7, 0x7c, 0xe4, 0x80, 0x6f, 0xf8, 0x96, 0xb, 0x37, 0xff, 0xa2, 0xab, 0x1c, 0xbd, 0x25, 0x8d, 0x1e, 0x9a, 0x65, 0xe9, 0x45, 0xaf, 0x7f, 0x77, 0x84, 0x1b, 0x10, 0x1b, 0x1a, 0x5, 0xcc}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6b, 0xc7, 0x7c, 0xe4, 0x80, 0x6f, 0xf8, 0x96, 0xb, 0x37, 0xff, 0xa2, 0xab, 0x1c, 0xbd, 0x25, 0x8d, 0x1e, 0x9a, 0x65, 0xe9, 0x45, 0xaf, 0x7f, 0x77, 0x84, 0x1b, 0x10, 0x1b, 0x1a, 0x5, 0xcc}}
return a, nil return a, nil
} }
@ -2207,11 +2208,31 @@ func _1693311981_community_shardUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1693311981_community_shard.up.sql", size: 156, mode: os.FileMode(0664), modTime: time.Unix(1694098617, 0)} info := bindataFileInfo{name: "1693311981_community_shard.up.sql", size: 156, mode: os.FileMode(0644), modTime: time.Unix(1697196255, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc9, 0x12, 0xf9, 0xde, 0x49, 0x9f, 0x95, 0xaa, 0x22, 0x5e, 0x54, 0x5a, 0x1, 0xd, 0xc6, 0x1f, 0x42, 0x93, 0xe8, 0x69, 0x30, 0x11, 0x69, 0x41, 0x7f, 0x87, 0x57, 0x56, 0x2a, 0x32, 0xb9, 0x3e}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc9, 0x12, 0xf9, 0xde, 0x49, 0x9f, 0x95, 0xaa, 0x22, 0x5e, 0x54, 0x5a, 0x1, 0xd, 0xc6, 0x1f, 0x42, 0x93, 0xe8, 0x69, 0x30, 0x11, 0x69, 0x41, 0x7f, 0x87, 0x57, 0x56, 0x2a, 0x32, 0xb9, 0x3e}}
return a, nil return a, nil
} }
var __1695331492_add_status_link_previewsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x28\x2d\x4e\x2d\x8a\xcf\x4d\x2d\x2e\x4e\x4c\x4f\x2d\x56\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\x28\xcd\x4b\x2b\x2d\xca\x49\x4d\x89\x2f\x2e\x49\x2c\x29\x2d\x8e\xcf\xc9\xcc\xcb\x2e\x56\x70\xf2\xf1\x77\xb2\xe6\xc2\x69\x40\x7c\x6a\x4a\x66\x09\xd1\xc6\x00\x02\x00\x00\xff\xff\x3c\xe3\x6f\xcd\x88\x00\x00\x00")
func _1695331492_add_status_link_previewsUpSqlBytes() ([]byte, error) {
return bindataRead(
__1695331492_add_status_link_previewsUpSql,
"1695331492_add_status_link_previews.up.sql",
)
}
func _1695331492_add_status_link_previewsUpSql() (*asset, error) {
bytes, err := _1695331492_add_status_link_previewsUpSqlBytes()
if err != nil {
return nil, err
}
info := bindataFileInfo{name: "1695331492_add_status_link_previews.up.sql", size: 136, mode: os.FileMode(0644), modTime: time.Unix(1697196265, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb6, 0x7d, 0x6e, 0x86, 0xf0, 0xf8, 0x23, 0x4b, 0x16, 0x3d, 0xca, 0x8f, 0xfc, 0x8, 0x22, 0xd5, 0x70, 0x14, 0xbb, 0xdd, 0xa9, 0xb8, 0x3e, 0xc6, 0x20, 0xfb, 0x0, 0x26, 0x73, 0xcb, 0x92, 0xb2}}
return a, nil
}
var _readmeMd = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x91\xc1\xce\xd3\x30\x10\x84\xef\x7e\x8a\x91\x7a\x01\xa9\x2a\x8f\xc0\x0d\x71\x82\x03\x48\x1c\xc9\x36\x9e\x36\x96\x1c\x6f\xf0\xae\x93\xe6\xed\x91\xa3\xc2\xdf\xff\x66\xed\xd8\x33\xdf\x78\x4f\xa7\x13\xbe\xea\x06\x57\x6c\x35\x39\x31\xa7\x7b\x15\x4f\x5a\xec\x73\x08\xbf\x08\x2d\x79\x7f\x4a\x43\x5b\x86\x17\xfd\x8c\x21\xea\x56\x5e\x47\x90\x4a\x14\x75\x48\xde\x64\x37\x2c\x6a\x96\xae\x99\x48\x05\xf6\x27\x77\x13\xad\x08\xae\x8a\x51\xe7\x25\xf3\xf1\xa9\x9f\xf9\x58\x58\x2c\xad\xbc\xe0\x8b\x56\xf0\x21\x5d\xeb\x4c\x95\xb3\xae\x84\x60\xd4\xdc\xe6\x82\x5d\x1b\x36\x6d\x39\x62\x92\xf5\xb8\x11\xdb\x92\xd3\x28\xce\xe0\x13\xe1\x72\xcd\x3c\x63\xd4\x65\x87\xae\xac\xe8\xc3\x28\x2e\x67\x44\x66\x3a\x21\x25\xa2\x72\xac\x14\x67\xbc\x84\x9f\x53\x32\x8c\x52\x70\x25\x56\xd6\xfd\x8d\x05\x37\xad\x30\x9d\x9f\xa6\x86\x0f\xcd\x58\x7f\xcf\x34\x93\x3b\xed\x90\x9f\xa4\x1f\xcf\x30\x85\x4d\x07\x58\xaf\x7f\x25\xc4\x9d\xf3\x72\x64\x84\xd0\x7f\xf9\x9b\x3a\x2d\x84\xef\x85\x48\x66\x8d\xd8\x88\x9b\x8c\x8c\x98\x5b\xf6\x74\x14\x4e\x33\x0d\xc9\xe0\x93\x38\xda\x12\xc5\x69\xbd\xe4\xf0\x2e\x7a\x78\x07\x1c\xfe\x13\x9f\x91\x29\x31\x95\x7b\x7f\x62\x59\x37\xb4\xe5\x5e\x25\xfe\x33\xee\xd5\x53\x71\xd6\xda\x3a\xd8\xcb\xde\x2e\xf8\xa1\x90\x55\x53\x0c\xc7\xaa\x0d\xe9\x76\x14\x29\x1c\x7b\x68\xdd\x2f\xe1\x6f\x00\x00\x00\xff\xff\x3c\x0a\xc2\xfe\x2a\x02\x00\x00") var _readmeMd = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x91\xc1\xce\xd3\x30\x10\x84\xef\x7e\x8a\x91\x7a\x01\xa9\x2a\x8f\xc0\x0d\x71\x82\x03\x48\x1c\xc9\x36\x9e\x36\x96\x1c\x6f\xf0\xae\x93\xe6\xed\x91\xa3\xc2\xdf\xff\x66\xed\xd8\x33\xdf\x78\x4f\xa7\x13\xbe\xea\x06\x57\x6c\x35\x39\x31\xa7\x7b\x15\x4f\x5a\xec\x73\x08\xbf\x08\x2d\x79\x7f\x4a\x43\x5b\x86\x17\xfd\x8c\x21\xea\x56\x5e\x47\x90\x4a\x14\x75\x48\xde\x64\x37\x2c\x6a\x96\xae\x99\x48\x05\xf6\x27\x77\x13\xad\x08\xae\x8a\x51\xe7\x25\xf3\xf1\xa9\x9f\xf9\x58\x58\x2c\xad\xbc\xe0\x8b\x56\xf0\x21\x5d\xeb\x4c\x95\xb3\xae\x84\x60\xd4\xdc\xe6\x82\x5d\x1b\x36\x6d\x39\x62\x92\xf5\xb8\x11\xdb\x92\xd3\x28\xce\xe0\x13\xe1\x72\xcd\x3c\x63\xd4\x65\x87\xae\xac\xe8\xc3\x28\x2e\x67\x44\x66\x3a\x21\x25\xa2\x72\xac\x14\x67\xbc\x84\x9f\x53\x32\x8c\x52\x70\x25\x56\xd6\xfd\x8d\x05\x37\xad\x30\x9d\x9f\xa6\x86\x0f\xcd\x58\x7f\xcf\x34\x93\x3b\xed\x90\x9f\xa4\x1f\xcf\x30\x85\x4d\x07\x58\xaf\x7f\x25\xc4\x9d\xf3\x72\x64\x84\xd0\x7f\xf9\x9b\x3a\x2d\x84\xef\x85\x48\x66\x8d\xd8\x88\x9b\x8c\x8c\x98\x5b\xf6\x74\x14\x4e\x33\x0d\xc9\xe0\x93\x38\xda\x12\xc5\x69\xbd\xe4\xf0\x2e\x7a\x78\x07\x1c\xfe\x13\x9f\x91\x29\x31\x95\x7b\x7f\x62\x59\x37\xb4\xe5\x5e\x25\xfe\x33\xee\xd5\x53\x71\xd6\xda\x3a\xd8\xcb\xde\x2e\xf8\xa1\x90\x55\x53\x0c\xc7\xaa\x0d\xe9\x76\x14\x29\x1c\x7b\x68\xdd\x2f\xe1\x6f\x00\x00\x00\xff\xff\x3c\x0a\xc2\xfe\x2a\x02\x00\x00")
func readmeMdBytes() ([]byte, error) { func readmeMdBytes() ([]byte, error) {
@ -2227,7 +2248,7 @@ func readmeMd() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "README.md", size: 554, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "README.md", size: 554, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1c, 0x6e, 0xfb, 0xcc, 0x81, 0x94, 0x4d, 0x8c, 0xa0, 0x3b, 0x5, 0xb0, 0x18, 0xd6, 0xbb, 0xb3, 0x79, 0xc8, 0x8f, 0xff, 0xc1, 0x10, 0xf9, 0xf, 0x20, 0x1b, 0x4a, 0x74, 0x96, 0x42, 0xd7, 0xa8}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1c, 0x6e, 0xfb, 0xcc, 0x81, 0x94, 0x4d, 0x8c, 0xa0, 0x3b, 0x5, 0xb0, 0x18, 0xd6, 0xbb, 0xb3, 0x79, 0xc8, 0x8f, 0xff, 0xc1, 0x10, 0xf9, 0xf, 0x20, 0x1b, 0x4a, 0x74, 0x96, 0x42, 0xd7, 0xa8}}
return a, nil return a, nil
} }
@ -2247,7 +2268,7 @@ func docGo() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "doc.go", size: 850, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "doc.go", size: 850, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa0, 0xcc, 0x41, 0xe1, 0x61, 0x12, 0x97, 0xe, 0x36, 0x8c, 0xa7, 0x9e, 0xe0, 0x6e, 0x59, 0x9e, 0xee, 0xd5, 0x4a, 0xcf, 0x1e, 0x60, 0xd6, 0xc3, 0x3a, 0xc9, 0x6c, 0xf2, 0x86, 0x5a, 0xb4, 0x1e}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa0, 0xcc, 0x41, 0xe1, 0x61, 0x12, 0x97, 0xe, 0x36, 0x8c, 0xa7, 0x9e, 0xe0, 0x6e, 0x59, 0x9e, 0xee, 0xd5, 0x4a, 0xcf, 0x1e, 0x60, 0xd6, 0xc3, 0x3a, 0xc9, 0x6c, 0xf2, 0x86, 0x5a, 0xb4, 0x1e}}
return a, nil return a, nil
} }
@ -2547,6 +2568,8 @@ var _bindata = map[string]func() (*asset, error){
"1693311981_community_shard.up.sql": _1693311981_community_shardUpSql, "1693311981_community_shard.up.sql": _1693311981_community_shardUpSql,
"1695331492_add_status_link_previews.up.sql": _1695331492_add_status_link_previewsUpSql,
"README.md": readmeMd, "README.md": readmeMd,
"doc.go": docGo, "doc.go": docGo,
@ -2695,8 +2718,9 @@ var _bintree = &bintree{nil, map[string]*bintree{
"1689931300_add_community_tokens_deployer_and_priv_level.up.sql": &bintree{_1689931300_add_community_tokens_deployer_and_priv_levelUpSql, map[string]*bintree{}}, "1689931300_add_community_tokens_deployer_and_priv_level.up.sql": &bintree{_1689931300_add_community_tokens_deployer_and_priv_levelUpSql, map[string]*bintree{}},
"1693311881_add_unfurled_links_to_message_edits.up.sql": &bintree{_1693311881_add_unfurled_links_to_message_editsUpSql, map[string]*bintree{}}, "1693311881_add_unfurled_links_to_message_edits.up.sql": &bintree{_1693311881_add_unfurled_links_to_message_editsUpSql, map[string]*bintree{}},
"1693311981_community_shard.up.sql": &bintree{_1693311981_community_shardUpSql, map[string]*bintree{}}, "1693311981_community_shard.up.sql": &bintree{_1693311981_community_shardUpSql, map[string]*bintree{}},
"README.md": &bintree{readmeMd, map[string]*bintree{}}, "1695331492_add_status_link_previews.up.sql": &bintree{_1695331492_add_status_link_previewsUpSql, map[string]*bintree{}},
"doc.go": &bintree{docGo, map[string]*bintree{}}, "README.md": &bintree{readmeMd, map[string]*bintree{}},
"doc.go": &bintree{docGo, map[string]*bintree{}},
}} }}
// RestoreAsset restores an asset under the given directory. // RestoreAsset restores an asset under the given directory.

View File

@ -0,0 +1,2 @@
ALTER TABLE user_messages ADD COLUMN unfurled_status_links BLOB;
ALTER TABLE user_messages_edits ADD COLUMN unfurled_status_links BLOB;

View File

@ -70,7 +70,7 @@ func (x UnfurledLink_LinkType) String() string {
} }
func (UnfurledLink_LinkType) EnumDescriptor() ([]byte, []int) { func (UnfurledLink_LinkType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_263952f55fd35689, []int{10, 0} return fileDescriptor_263952f55fd35689, []int{11, 0}
} }
type ChatMessage_ContentType int32 type ChatMessage_ContentType int32
@ -149,7 +149,7 @@ func (x ChatMessage_ContentType) String() string {
} }
func (ChatMessage_ContentType) EnumDescriptor() ([]byte, []int) { func (ChatMessage_ContentType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_263952f55fd35689, []int{11, 0} return fileDescriptor_263952f55fd35689, []int{17, 0}
} }
type StickerMessage struct { type StickerMessage struct {
@ -345,6 +345,7 @@ type EditMessage struct {
MessageType MessageType `protobuf:"varint,6,opt,name=message_type,json=messageType,proto3,enum=protobuf.MessageType" json:"message_type,omitempty"` MessageType MessageType `protobuf:"varint,6,opt,name=message_type,json=messageType,proto3,enum=protobuf.MessageType" json:"message_type,omitempty"`
ContentType ChatMessage_ContentType `protobuf:"varint,7,opt,name=content_type,json=contentType,proto3,enum=protobuf.ChatMessage_ContentType" json:"content_type,omitempty"` ContentType ChatMessage_ContentType `protobuf:"varint,7,opt,name=content_type,json=contentType,proto3,enum=protobuf.ChatMessage_ContentType" json:"content_type,omitempty"`
UnfurledLinks []*UnfurledLink `protobuf:"bytes,8,rep,name=unfurled_links,json=unfurledLinks,proto3" json:"unfurled_links,omitempty"` UnfurledLinks []*UnfurledLink `protobuf:"bytes,8,rep,name=unfurled_links,json=unfurledLinks,proto3" json:"unfurled_links,omitempty"`
UnfurledStatusLinks *UnfurledStatusLinks `protobuf:"bytes,9,opt,name=unfurled_status_links,json=unfurledStatusLinks,proto3" json:"unfurled_status_links,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
@ -431,6 +432,13 @@ func (m *EditMessage) GetUnfurledLinks() []*UnfurledLink {
return nil return nil
} }
func (m *EditMessage) GetUnfurledStatusLinks() *UnfurledStatusLinks {
if m != nil {
return m.UnfurledStatusLinks
}
return nil
}
type DeleteMessage struct { type DeleteMessage struct {
Clock uint64 `protobuf:"varint,1,opt,name=clock,proto3" json:"clock,omitempty"` Clock uint64 `protobuf:"varint,1,opt,name=clock,proto3" json:"clock,omitempty"`
ChatId string `protobuf:"bytes,2,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` ChatId string `protobuf:"bytes,2,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"`
@ -891,6 +899,61 @@ func (m *DiscordMessageAttachment) GetLocalUrl() string {
return "" return ""
} }
type UnfurledLinkThumbnail struct {
Payload []byte `protobuf:"bytes,1,opt,name=payload,proto3" json:"payload,omitempty"`
Width uint32 `protobuf:"varint,2,opt,name=width,proto3" json:"width,omitempty"`
Height uint32 `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *UnfurledLinkThumbnail) Reset() { *m = UnfurledLinkThumbnail{} }
func (m *UnfurledLinkThumbnail) String() string { return proto.CompactTextString(m) }
func (*UnfurledLinkThumbnail) ProtoMessage() {}
func (*UnfurledLinkThumbnail) Descriptor() ([]byte, []int) {
return fileDescriptor_263952f55fd35689, []int{10}
}
func (m *UnfurledLinkThumbnail) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UnfurledLinkThumbnail.Unmarshal(m, b)
}
func (m *UnfurledLinkThumbnail) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_UnfurledLinkThumbnail.Marshal(b, m, deterministic)
}
func (m *UnfurledLinkThumbnail) XXX_Merge(src proto.Message) {
xxx_messageInfo_UnfurledLinkThumbnail.Merge(m, src)
}
func (m *UnfurledLinkThumbnail) XXX_Size() int {
return xxx_messageInfo_UnfurledLinkThumbnail.Size(m)
}
func (m *UnfurledLinkThumbnail) XXX_DiscardUnknown() {
xxx_messageInfo_UnfurledLinkThumbnail.DiscardUnknown(m)
}
var xxx_messageInfo_UnfurledLinkThumbnail proto.InternalMessageInfo
func (m *UnfurledLinkThumbnail) GetPayload() []byte {
if m != nil {
return m.Payload
}
return nil
}
func (m *UnfurledLinkThumbnail) GetWidth() uint32 {
if m != nil {
return m.Width
}
return 0
}
func (m *UnfurledLinkThumbnail) GetHeight() uint32 {
if m != nil {
return m.Height
}
return 0
}
type UnfurledLink struct { type UnfurledLink struct {
// A valid URL which uniquely identifies this link. // A valid URL which uniquely identifies this link.
Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
@ -912,7 +975,7 @@ func (m *UnfurledLink) Reset() { *m = UnfurledLink{} }
func (m *UnfurledLink) String() string { return proto.CompactTextString(m) } func (m *UnfurledLink) String() string { return proto.CompactTextString(m) }
func (*UnfurledLink) ProtoMessage() {} func (*UnfurledLink) ProtoMessage() {}
func (*UnfurledLink) Descriptor() ([]byte, []int) { func (*UnfurledLink) Descriptor() ([]byte, []int) {
return fileDescriptor_263952f55fd35689, []int{10} return fileDescriptor_263952f55fd35689, []int{11}
} }
func (m *UnfurledLink) XXX_Unmarshal(b []byte) error { func (m *UnfurledLink) XXX_Unmarshal(b []byte) error {
@ -982,6 +1045,379 @@ func (m *UnfurledLink) GetType() UnfurledLink_LinkType {
return UnfurledLink_LINK return UnfurledLink_LINK
} }
type UnfurledStatusContactLink struct {
PublicKey []byte `protobuf:"bytes,1,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"`
DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
Icon *UnfurledLinkThumbnail `protobuf:"bytes,4,opt,name=icon,proto3" json:"icon,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *UnfurledStatusContactLink) Reset() { *m = UnfurledStatusContactLink{} }
func (m *UnfurledStatusContactLink) String() string { return proto.CompactTextString(m) }
func (*UnfurledStatusContactLink) ProtoMessage() {}
func (*UnfurledStatusContactLink) Descriptor() ([]byte, []int) {
return fileDescriptor_263952f55fd35689, []int{12}
}
func (m *UnfurledStatusContactLink) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UnfurledStatusContactLink.Unmarshal(m, b)
}
func (m *UnfurledStatusContactLink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_UnfurledStatusContactLink.Marshal(b, m, deterministic)
}
func (m *UnfurledStatusContactLink) XXX_Merge(src proto.Message) {
xxx_messageInfo_UnfurledStatusContactLink.Merge(m, src)
}
func (m *UnfurledStatusContactLink) XXX_Size() int {
return xxx_messageInfo_UnfurledStatusContactLink.Size(m)
}
func (m *UnfurledStatusContactLink) XXX_DiscardUnknown() {
xxx_messageInfo_UnfurledStatusContactLink.DiscardUnknown(m)
}
var xxx_messageInfo_UnfurledStatusContactLink proto.InternalMessageInfo
func (m *UnfurledStatusContactLink) GetPublicKey() []byte {
if m != nil {
return m.PublicKey
}
return nil
}
func (m *UnfurledStatusContactLink) GetDisplayName() string {
if m != nil {
return m.DisplayName
}
return ""
}
func (m *UnfurledStatusContactLink) GetDescription() string {
if m != nil {
return m.Description
}
return ""
}
func (m *UnfurledStatusContactLink) GetIcon() *UnfurledLinkThumbnail {
if m != nil {
return m.Icon
}
return nil
}
type UnfurledStatusCommunityLink struct {
CommunityId []byte `protobuf:"bytes,1,opt,name=community_id,json=communityId,proto3" json:"community_id,omitempty"`
DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
MembersCount uint32 `protobuf:"varint,4,opt,name=members_count,json=membersCount,proto3" json:"members_count,omitempty"`
Color string `protobuf:"bytes,5,opt,name=color,proto3" json:"color,omitempty"`
Icon *UnfurledLinkThumbnail `protobuf:"bytes,7,opt,name=icon,proto3" json:"icon,omitempty"`
Banner *UnfurledLinkThumbnail `protobuf:"bytes,8,opt,name=banner,proto3" json:"banner,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *UnfurledStatusCommunityLink) Reset() { *m = UnfurledStatusCommunityLink{} }
func (m *UnfurledStatusCommunityLink) String() string { return proto.CompactTextString(m) }
func (*UnfurledStatusCommunityLink) ProtoMessage() {}
func (*UnfurledStatusCommunityLink) Descriptor() ([]byte, []int) {
return fileDescriptor_263952f55fd35689, []int{13}
}
func (m *UnfurledStatusCommunityLink) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UnfurledStatusCommunityLink.Unmarshal(m, b)
}
func (m *UnfurledStatusCommunityLink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_UnfurledStatusCommunityLink.Marshal(b, m, deterministic)
}
func (m *UnfurledStatusCommunityLink) XXX_Merge(src proto.Message) {
xxx_messageInfo_UnfurledStatusCommunityLink.Merge(m, src)
}
func (m *UnfurledStatusCommunityLink) XXX_Size() int {
return xxx_messageInfo_UnfurledStatusCommunityLink.Size(m)
}
func (m *UnfurledStatusCommunityLink) XXX_DiscardUnknown() {
xxx_messageInfo_UnfurledStatusCommunityLink.DiscardUnknown(m)
}
var xxx_messageInfo_UnfurledStatusCommunityLink proto.InternalMessageInfo
func (m *UnfurledStatusCommunityLink) GetCommunityId() []byte {
if m != nil {
return m.CommunityId
}
return nil
}
func (m *UnfurledStatusCommunityLink) GetDisplayName() string {
if m != nil {
return m.DisplayName
}
return ""
}
func (m *UnfurledStatusCommunityLink) GetDescription() string {
if m != nil {
return m.Description
}
return ""
}
func (m *UnfurledStatusCommunityLink) GetMembersCount() uint32 {
if m != nil {
return m.MembersCount
}
return 0
}
func (m *UnfurledStatusCommunityLink) GetColor() string {
if m != nil {
return m.Color
}
return ""
}
func (m *UnfurledStatusCommunityLink) GetIcon() *UnfurledLinkThumbnail {
if m != nil {
return m.Icon
}
return nil
}
func (m *UnfurledStatusCommunityLink) GetBanner() *UnfurledLinkThumbnail {
if m != nil {
return m.Banner
}
return nil
}
type UnfurledStatusChannelLink struct {
ChannelUuid []byte `protobuf:"bytes,1,opt,name=channel_uuid,json=channelUuid,proto3" json:"channel_uuid,omitempty"`
Emoji string `protobuf:"bytes,2,opt,name=emoji,proto3" json:"emoji,omitempty"`
DisplayName string `protobuf:"bytes,3,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"`
Color string `protobuf:"bytes,5,opt,name=color,proto3" json:"color,omitempty"`
Community *UnfurledStatusCommunityLink `protobuf:"bytes,6,opt,name=community,proto3" json:"community,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *UnfurledStatusChannelLink) Reset() { *m = UnfurledStatusChannelLink{} }
func (m *UnfurledStatusChannelLink) String() string { return proto.CompactTextString(m) }
func (*UnfurledStatusChannelLink) ProtoMessage() {}
func (*UnfurledStatusChannelLink) Descriptor() ([]byte, []int) {
return fileDescriptor_263952f55fd35689, []int{14}
}
func (m *UnfurledStatusChannelLink) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UnfurledStatusChannelLink.Unmarshal(m, b)
}
func (m *UnfurledStatusChannelLink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_UnfurledStatusChannelLink.Marshal(b, m, deterministic)
}
func (m *UnfurledStatusChannelLink) XXX_Merge(src proto.Message) {
xxx_messageInfo_UnfurledStatusChannelLink.Merge(m, src)
}
func (m *UnfurledStatusChannelLink) XXX_Size() int {
return xxx_messageInfo_UnfurledStatusChannelLink.Size(m)
}
func (m *UnfurledStatusChannelLink) XXX_DiscardUnknown() {
xxx_messageInfo_UnfurledStatusChannelLink.DiscardUnknown(m)
}
var xxx_messageInfo_UnfurledStatusChannelLink proto.InternalMessageInfo
func (m *UnfurledStatusChannelLink) GetChannelUuid() []byte {
if m != nil {
return m.ChannelUuid
}
return nil
}
func (m *UnfurledStatusChannelLink) GetEmoji() string {
if m != nil {
return m.Emoji
}
return ""
}
func (m *UnfurledStatusChannelLink) GetDisplayName() string {
if m != nil {
return m.DisplayName
}
return ""
}
func (m *UnfurledStatusChannelLink) GetDescription() string {
if m != nil {
return m.Description
}
return ""
}
func (m *UnfurledStatusChannelLink) GetColor() string {
if m != nil {
return m.Color
}
return ""
}
func (m *UnfurledStatusChannelLink) GetCommunity() *UnfurledStatusCommunityLink {
if m != nil {
return m.Community
}
return nil
}
type UnfurledStatusLink struct {
Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
// Types that are valid to be assigned to Payload:
//
// *UnfurledStatusLink_Contact
// *UnfurledStatusLink_Community
// *UnfurledStatusLink_Channel
Payload isUnfurledStatusLink_Payload `protobuf_oneof:"payload"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *UnfurledStatusLink) Reset() { *m = UnfurledStatusLink{} }
func (m *UnfurledStatusLink) String() string { return proto.CompactTextString(m) }
func (*UnfurledStatusLink) ProtoMessage() {}
func (*UnfurledStatusLink) Descriptor() ([]byte, []int) {
return fileDescriptor_263952f55fd35689, []int{15}
}
func (m *UnfurledStatusLink) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UnfurledStatusLink.Unmarshal(m, b)
}
func (m *UnfurledStatusLink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_UnfurledStatusLink.Marshal(b, m, deterministic)
}
func (m *UnfurledStatusLink) XXX_Merge(src proto.Message) {
xxx_messageInfo_UnfurledStatusLink.Merge(m, src)
}
func (m *UnfurledStatusLink) XXX_Size() int {
return xxx_messageInfo_UnfurledStatusLink.Size(m)
}
func (m *UnfurledStatusLink) XXX_DiscardUnknown() {
xxx_messageInfo_UnfurledStatusLink.DiscardUnknown(m)
}
var xxx_messageInfo_UnfurledStatusLink proto.InternalMessageInfo
func (m *UnfurledStatusLink) GetUrl() string {
if m != nil {
return m.Url
}
return ""
}
type isUnfurledStatusLink_Payload interface {
isUnfurledStatusLink_Payload()
}
type UnfurledStatusLink_Contact struct {
Contact *UnfurledStatusContactLink `protobuf:"bytes,2,opt,name=contact,proto3,oneof"`
}
type UnfurledStatusLink_Community struct {
Community *UnfurledStatusCommunityLink `protobuf:"bytes,3,opt,name=community,proto3,oneof"`
}
type UnfurledStatusLink_Channel struct {
Channel *UnfurledStatusChannelLink `protobuf:"bytes,4,opt,name=channel,proto3,oneof"`
}
func (*UnfurledStatusLink_Contact) isUnfurledStatusLink_Payload() {}
func (*UnfurledStatusLink_Community) isUnfurledStatusLink_Payload() {}
func (*UnfurledStatusLink_Channel) isUnfurledStatusLink_Payload() {}
func (m *UnfurledStatusLink) GetPayload() isUnfurledStatusLink_Payload {
if m != nil {
return m.Payload
}
return nil
}
func (m *UnfurledStatusLink) GetContact() *UnfurledStatusContactLink {
if x, ok := m.GetPayload().(*UnfurledStatusLink_Contact); ok {
return x.Contact
}
return nil
}
func (m *UnfurledStatusLink) GetCommunity() *UnfurledStatusCommunityLink {
if x, ok := m.GetPayload().(*UnfurledStatusLink_Community); ok {
return x.Community
}
return nil
}
func (m *UnfurledStatusLink) GetChannel() *UnfurledStatusChannelLink {
if x, ok := m.GetPayload().(*UnfurledStatusLink_Channel); ok {
return x.Channel
}
return nil
}
// XXX_OneofWrappers is for the internal use of the proto package.
func (*UnfurledStatusLink) XXX_OneofWrappers() []interface{} {
return []interface{}{
(*UnfurledStatusLink_Contact)(nil),
(*UnfurledStatusLink_Community)(nil),
(*UnfurledStatusLink_Channel)(nil),
}
}
// Create a wrapper around repeated property for proper unmarshalling
type UnfurledStatusLinks struct {
UnfurledStatusLinks []*UnfurledStatusLink `protobuf:"bytes,1,rep,name=unfurled_status_links,json=unfurledStatusLinks,proto3" json:"unfurled_status_links,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *UnfurledStatusLinks) Reset() { *m = UnfurledStatusLinks{} }
func (m *UnfurledStatusLinks) String() string { return proto.CompactTextString(m) }
func (*UnfurledStatusLinks) ProtoMessage() {}
func (*UnfurledStatusLinks) Descriptor() ([]byte, []int) {
return fileDescriptor_263952f55fd35689, []int{16}
}
func (m *UnfurledStatusLinks) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UnfurledStatusLinks.Unmarshal(m, b)
}
func (m *UnfurledStatusLinks) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_UnfurledStatusLinks.Marshal(b, m, deterministic)
}
func (m *UnfurledStatusLinks) XXX_Merge(src proto.Message) {
xxx_messageInfo_UnfurledStatusLinks.Merge(m, src)
}
func (m *UnfurledStatusLinks) XXX_Size() int {
return xxx_messageInfo_UnfurledStatusLinks.Size(m)
}
func (m *UnfurledStatusLinks) XXX_DiscardUnknown() {
xxx_messageInfo_UnfurledStatusLinks.DiscardUnknown(m)
}
var xxx_messageInfo_UnfurledStatusLinks proto.InternalMessageInfo
func (m *UnfurledStatusLinks) GetUnfurledStatusLinks() []*UnfurledStatusLink {
if m != nil {
return m.UnfurledStatusLinks
}
return nil
}
type ChatMessage struct { type ChatMessage struct {
// Lamport timestamp of the chat message // Lamport timestamp of the chat message
Clock uint64 `protobuf:"varint,1,opt,name=clock,proto3" json:"clock,omitempty"` Clock uint64 `protobuf:"varint,1,opt,name=clock,proto3" json:"clock,omitempty"`
@ -1019,6 +1455,7 @@ type ChatMessage struct {
ContactRequestPropagatedState *ContactRequestPropagatedState `protobuf:"bytes,15,opt,name=contact_request_propagated_state,json=contactRequestPropagatedState,proto3" json:"contact_request_propagated_state,omitempty"` ContactRequestPropagatedState *ContactRequestPropagatedState `protobuf:"bytes,15,opt,name=contact_request_propagated_state,json=contactRequestPropagatedState,proto3" json:"contact_request_propagated_state,omitempty"`
UnfurledLinks []*UnfurledLink `protobuf:"bytes,16,rep,name=unfurled_links,json=unfurledLinks,proto3" json:"unfurled_links,omitempty"` UnfurledLinks []*UnfurledLink `protobuf:"bytes,16,rep,name=unfurled_links,json=unfurledLinks,proto3" json:"unfurled_links,omitempty"`
Shard *Shard `protobuf:"bytes,17,opt,name=shard,proto3" json:"shard,omitempty"` Shard *Shard `protobuf:"bytes,17,opt,name=shard,proto3" json:"shard,omitempty"`
UnfurledStatusLinks *UnfurledStatusLinks `protobuf:"bytes,18,opt,name=unfurled_status_links,json=unfurledStatusLinks,proto3" json:"unfurled_status_links,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
@ -1028,7 +1465,7 @@ func (m *ChatMessage) Reset() { *m = ChatMessage{} }
func (m *ChatMessage) String() string { return proto.CompactTextString(m) } func (m *ChatMessage) String() string { return proto.CompactTextString(m) }
func (*ChatMessage) ProtoMessage() {} func (*ChatMessage) ProtoMessage() {}
func (*ChatMessage) Descriptor() ([]byte, []int) { func (*ChatMessage) Descriptor() ([]byte, []int) {
return fileDescriptor_263952f55fd35689, []int{11} return fileDescriptor_263952f55fd35689, []int{17}
} }
func (m *ChatMessage) XXX_Unmarshal(b []byte) error { func (m *ChatMessage) XXX_Unmarshal(b []byte) error {
@ -1216,6 +1653,13 @@ func (m *ChatMessage) GetShard() *Shard {
return nil return nil
} }
func (m *ChatMessage) GetUnfurledStatusLinks() *UnfurledStatusLinks {
if m != nil {
return m.UnfurledStatusLinks
}
return nil
}
// XXX_OneofWrappers is for the internal use of the proto package. // XXX_OneofWrappers is for the internal use of the proto package.
func (*ChatMessage) XXX_OneofWrappers() []interface{} { func (*ChatMessage) XXX_OneofWrappers() []interface{} {
return []interface{}{ return []interface{}{
@ -1241,7 +1685,13 @@ func init() {
proto.RegisterType((*DiscordMessageAuthor)(nil), "protobuf.DiscordMessageAuthor") proto.RegisterType((*DiscordMessageAuthor)(nil), "protobuf.DiscordMessageAuthor")
proto.RegisterType((*DiscordMessageReference)(nil), "protobuf.DiscordMessageReference") proto.RegisterType((*DiscordMessageReference)(nil), "protobuf.DiscordMessageReference")
proto.RegisterType((*DiscordMessageAttachment)(nil), "protobuf.DiscordMessageAttachment") proto.RegisterType((*DiscordMessageAttachment)(nil), "protobuf.DiscordMessageAttachment")
proto.RegisterType((*UnfurledLinkThumbnail)(nil), "protobuf.UnfurledLinkThumbnail")
proto.RegisterType((*UnfurledLink)(nil), "protobuf.UnfurledLink") proto.RegisterType((*UnfurledLink)(nil), "protobuf.UnfurledLink")
proto.RegisterType((*UnfurledStatusContactLink)(nil), "protobuf.UnfurledStatusContactLink")
proto.RegisterType((*UnfurledStatusCommunityLink)(nil), "protobuf.UnfurledStatusCommunityLink")
proto.RegisterType((*UnfurledStatusChannelLink)(nil), "protobuf.UnfurledStatusChannelLink")
proto.RegisterType((*UnfurledStatusLink)(nil), "protobuf.UnfurledStatusLink")
proto.RegisterType((*UnfurledStatusLinks)(nil), "protobuf.UnfurledStatusLinks")
proto.RegisterType((*ChatMessage)(nil), "protobuf.ChatMessage") proto.RegisterType((*ChatMessage)(nil), "protobuf.ChatMessage")
} }
@ -1250,101 +1700,120 @@ func init() {
} }
var fileDescriptor_263952f55fd35689 = []byte{ var fileDescriptor_263952f55fd35689 = []byte{
// 1523 bytes of a gzipped FileDescriptorProto // 1840 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0x4f, 0x73, 0xe3, 0x4a, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xdd, 0x92, 0xdb, 0x58,
0x11, 0x8f, 0xff, 0x5b, 0x2d, 0xdb, 0xd1, 0xce, 0xe6, 0x65, 0xf5, 0xb6, 0x5e, 0x5e, 0xbc, 0x66, 0x11, 0x1e, 0xff, 0x8f, 0x5a, 0xb6, 0x47, 0x39, 0x33, 0x99, 0x38, 0x21, 0xb3, 0x71, 0x94, 0x6c,
0xa9, 0x0d, 0x05, 0x65, 0xaa, 0xf6, 0x3d, 0xa8, 0x57, 0x45, 0x51, 0x94, 0x62, 0xeb, 0x25, 0x62, 0x65, 0x28, 0xa8, 0xa1, 0x6a, 0xb2, 0xc0, 0x56, 0x51, 0xd4, 0x96, 0x62, 0x6b, 0x13, 0x91, 0xd8,
0xe3, 0x3f, 0x8c, 0xe5, 0x3c, 0xc2, 0x45, 0xa5, 0x48, 0x93, 0x58, 0x15, 0x59, 0x32, 0xd2, 0x18, 0xe3, 0x95, 0xe5, 0x2c, 0xe1, 0x46, 0xa5, 0x91, 0x4e, 0xc6, 0x62, 0xf4, 0x63, 0xf4, 0x03, 0x98,
0x30, 0x27, 0xbe, 0x11, 0x37, 0x4e, 0x1c, 0x39, 0x70, 0xe0, 0xca, 0x57, 0xe0, 0x13, 0xf0, 0x01, 0x17, 0xe1, 0x2d, 0xe0, 0x86, 0xe2, 0x8a, 0x07, 0xe0, 0x82, 0x3b, 0x8a, 0x57, 0xe0, 0x09, 0xb8,
0xa8, 0x99, 0xd1, 0x5f, 0x93, 0x64, 0x61, 0x2f, 0xc9, 0x74, 0x4f, 0x77, 0xab, 0xe7, 0x37, 0x3d, 0xe2, 0x8a, 0x3a, 0x3f, 0xfa, 0xf3, 0xd8, 0x93, 0x4d, 0x8a, 0x2b, 0xab, 0xfb, 0x74, 0x9f, 0xd3,
0xfd, 0x6b, 0x03, 0x72, 0x56, 0x36, 0xb5, 0xd6, 0x24, 0x8e, 0xed, 0x7b, 0x32, 0xdc, 0x44, 0x21, 0xfd, 0x75, 0x9f, 0x3e, 0xdd, 0x06, 0x64, 0x2f, 0xad, 0xc4, 0xf4, 0x71, 0x1c, 0x5b, 0x57, 0xf8,
0x0d, 0x51, 0x9b, 0xff, 0xbb, 0xdd, 0xde, 0xbd, 0x96, 0x49, 0xb0, 0x5d, 0xc7, 0x42, 0xfd, 0xba, 0x6c, 0x15, 0x85, 0x49, 0x88, 0xf6, 0xe9, 0xcf, 0x65, 0xfa, 0xfe, 0x81, 0x88, 0x83, 0xd4, 0x8f,
0xeb, 0x84, 0x01, 0xb5, 0x1d, 0x9a, 0x88, 0x72, 0xbc, 0xb2, 0x23, 0x57, 0x08, 0x83, 0x6f, 0xa0, 0x19, 0xfb, 0x41, 0xcf, 0x0e, 0x83, 0xc4, 0xb2, 0x13, 0x4e, 0x8a, 0xf1, 0xd2, 0x8a, 0x1c, 0x46,
0xb7, 0xa0, 0x9e, 0xf3, 0x40, 0xa2, 0x89, 0x08, 0x85, 0x10, 0xd4, 0x57, 0x76, 0xbc, 0x52, 0x2b, 0xc8, 0x5f, 0x42, 0x7f, 0x9e, 0xb8, 0xf6, 0x35, 0x8e, 0x26, 0x6c, 0x2b, 0x84, 0xa0, 0xb9, 0xb4,
0xfd, 0xca, 0x99, 0x84, 0xf9, 0x9a, 0xe9, 0x36, 0xb6, 0xf3, 0xa0, 0x56, 0xfb, 0x95, 0xb3, 0x06, 0xe2, 0xe5, 0xa0, 0x36, 0xac, 0x9d, 0x0a, 0x3a, 0xfd, 0x26, 0xbc, 0x95, 0x65, 0x5f, 0x0f, 0xea,
0xe6, 0xeb, 0xc1, 0xdf, 0x2b, 0xd0, 0x31, 0xd6, 0xf6, 0x3d, 0x49, 0x1d, 0x55, 0x68, 0x6d, 0xec, 0xc3, 0xda, 0x69, 0x4b, 0xa7, 0xdf, 0xf2, 0xdf, 0x6b, 0xd0, 0xd5, 0x7c, 0xeb, 0x0a, 0x67, 0x8a,
0x9d, 0x1f, 0xda, 0x2e, 0xf7, 0xed, 0xe0, 0x54, 0x44, 0xef, 0xa0, 0x4e, 0x77, 0x1b, 0xc2, 0xdd, 0x03, 0xe8, 0xac, 0xac, 0xb5, 0x17, 0x5a, 0x0e, 0xd5, 0xed, 0xea, 0x19, 0x89, 0x9e, 0x41, 0x33,
0x7b, 0xef, 0x5f, 0x0e, 0xd3, 0x34, 0x87, 0xdc, 0xdf, 0xdc, 0x6d, 0x08, 0xe6, 0x06, 0xe8, 0x73, 0x59, 0xaf, 0x30, 0x55, 0xef, 0x9f, 0x1f, 0x9e, 0x65, 0x66, 0x9e, 0x51, 0x7d, 0x63, 0xbd, 0xc2,
0x68, 0xdb, 0xfe, 0xed, 0x76, 0x6d, 0x79, 0xae, 0x5a, 0xe3, 0xdf, 0x6f, 0x71, 0xd9, 0x70, 0xd1, 0x3a, 0x15, 0x40, 0xf7, 0x61, 0xdf, 0xf2, 0x2e, 0x53, 0xdf, 0x74, 0x9d, 0x41, 0x83, 0x9e, 0xdf,
0x11, 0x34, 0x7e, 0xef, 0xb9, 0x74, 0xa5, 0xd6, 0xfb, 0x95, 0xb3, 0x2e, 0x16, 0x02, 0x3a, 0x86, 0xa1, 0xb4, 0xe6, 0xa0, 0x23, 0x68, 0xfd, 0xce, 0x75, 0x92, 0xe5, 0xa0, 0x39, 0xac, 0x9d, 0xf6,
0xe6, 0x8a, 0x78, 0xf7, 0x2b, 0xaa, 0x36, 0xb8, 0x3a, 0x91, 0xd0, 0x8f, 0x00, 0x25, 0x81, 0xd8, 0x74, 0x46, 0xa0, 0x63, 0x68, 0x2f, 0xb1, 0x7b, 0xb5, 0x4c, 0x06, 0x2d, 0xca, 0xe6, 0x14, 0xfa,
0x17, 0x62, 0xcb, 0x09, 0xb7, 0x01, 0x55, 0x9b, 0xdc, 0x46, 0x11, 0x21, 0xf9, 0xc6, 0x88, 0xe9, 0x21, 0x20, 0xbe, 0x11, 0x39, 0x21, 0x36, 0xed, 0x30, 0x0d, 0x92, 0x41, 0x9b, 0xca, 0x48, 0x6c,
0x07, 0x7f, 0xa9, 0x40, 0x47, 0xdb, 0xba, 0x5e, 0xf8, 0xf1, 0xa3, 0x7c, 0x5d, 0x3a, 0x4a, 0x3f, 0x4b, 0xba, 0x30, 0x22, 0x7c, 0xf9, 0xaf, 0x35, 0xe8, 0x2a, 0xa9, 0xe3, 0x86, 0x1f, 0x76, 0xe5,
0x3f, 0x4a, 0xd1, 0x5f, 0x08, 0x85, 0x73, 0x9d, 0x82, 0xec, 0x6e, 0x23, 0x9b, 0x7a, 0x61, 0x60, 0x8b, 0x8a, 0x2b, 0xc3, 0xc2, 0x95, 0xb2, 0x3e, 0x23, 0x4a, 0x7e, 0x3d, 0x02, 0xd1, 0x49, 0x23,
0xad, 0x63, 0x7e, 0xb4, 0x3a, 0x86, 0x54, 0x35, 0x89, 0x07, 0x3f, 0x01, 0x29, 0xf3, 0x41, 0xc7, 0x2b, 0x71, 0xc3, 0xc0, 0xf4, 0x63, 0xea, 0x5a, 0x53, 0x87, 0x8c, 0x35, 0x89, 0xe5, 0x1f, 0x83,
0x80, 0x96, 0xd3, 0x0f, 0xd3, 0xd9, 0x77, 0x53, 0x4b, 0x5b, 0x8e, 0x8d, 0x99, 0x65, 0xde, 0xcc, 0x90, 0xeb, 0xa0, 0x63, 0x40, 0x8b, 0xe9, 0xeb, 0xe9, 0xc5, 0xb7, 0x53, 0x53, 0x59, 0x8c, 0xb5,
0x75, 0xe5, 0x00, 0xb5, 0xa0, 0xa6, 0x69, 0x23, 0xa5, 0xc2, 0x17, 0x13, 0xac, 0x54, 0x07, 0x7f, 0x0b, 0xd3, 0x78, 0x37, 0x53, 0xa5, 0x3d, 0xd4, 0x81, 0x86, 0xa2, 0x8c, 0xa4, 0x1a, 0xfd, 0x98,
0xab, 0x82, 0xac, 0xbb, 0x1e, 0x4d, 0xf3, 0x3e, 0x82, 0x86, 0xe3, 0x87, 0xce, 0x03, 0xcf, 0xba, 0xe8, 0x52, 0x5d, 0xfe, 0x63, 0x03, 0x44, 0xd5, 0x71, 0x93, 0xcc, 0xee, 0x23, 0x68, 0xd9, 0x5e,
0x8e, 0x85, 0xc0, 0x6e, 0x8f, 0x92, 0x3f, 0x50, 0x9e, 0xb3, 0x84, 0xf9, 0x1a, 0xbd, 0x82, 0x16, 0x68, 0x5f, 0x53, 0xab, 0x9b, 0x3a, 0x23, 0x48, 0xf4, 0x12, 0xfc, 0xfb, 0x84, 0xda, 0x2c, 0xe8,
0x2f, 0xa0, 0x0c, 0xe8, 0x26, 0x13, 0x0d, 0x17, 0x9d, 0x00, 0x24, 0x45, 0xc5, 0xf6, 0xea, 0x7c, 0xf4, 0x1b, 0xdd, 0x83, 0x0e, 0x4d, 0xa0, 0x1c, 0xe8, 0x36, 0x21, 0x35, 0x07, 0x9d, 0x00, 0xf0,
0x4f, 0x4a, 0x34, 0xe2, 0x1a, 0xee, 0x23, 0x3b, 0x10, 0x78, 0x77, 0xb0, 0x10, 0xd0, 0x37, 0xd0, 0xa4, 0x22, 0x6b, 0x4d, 0xba, 0x26, 0x70, 0x0e, 0x0b, 0xc3, 0x55, 0x64, 0x05, 0x0c, 0xef, 0xae,
0x49, 0x9d, 0x38, 0x3a, 0x4d, 0x8e, 0xce, 0x67, 0x39, 0x3a, 0x49, 0x82, 0x1c, 0x12, 0x79, 0x9d, 0xce, 0x08, 0xf4, 0x25, 0x74, 0x33, 0x25, 0x8a, 0x4e, 0x9b, 0xa2, 0x73, 0xb7, 0x40, 0x87, 0x1b,
0x0b, 0x68, 0x0c, 0x1d, 0x56, 0x9d, 0x24, 0xa0, 0xc2, 0xb3, 0xc5, 0x3d, 0xdf, 0xe4, 0x9e, 0xa3, 0x48, 0x21, 0x11, 0xfd, 0x82, 0x40, 0x63, 0xe8, 0x92, 0xec, 0xc4, 0x41, 0xc2, 0x34, 0x3b, 0x54,
0x95, 0x9d, 0x1e, 0x6f, 0x38, 0x12, 0x96, 0x22, 0x8a, 0x93, 0x0b, 0xe8, 0xe7, 0xd0, 0xdb, 0x06, 0xf3, 0x71, 0xa1, 0x39, 0x5a, 0x5a, 0x99, 0x7b, 0x67, 0x23, 0x26, 0xc9, 0x76, 0xb1, 0x0b, 0x02,
0x77, 0xdb, 0xc8, 0x27, 0xae, 0xe5, 0x7b, 0xc1, 0x43, 0xac, 0xb6, 0xfb, 0xb5, 0x33, 0xf9, 0xfd, 0xfd, 0x1c, 0xfa, 0x69, 0xf0, 0x3e, 0x8d, 0x3c, 0xec, 0x98, 0x9e, 0x1b, 0x5c, 0xc7, 0x83, 0xfd,
0x71, 0x1e, 0x67, 0x99, 0xec, 0x5f, 0x79, 0xc1, 0x03, 0xee, 0x6e, 0x0b, 0x52, 0x3c, 0xf8, 0x47, 0x61, 0xe3, 0x54, 0x3c, 0x3f, 0x2e, 0xf6, 0x59, 0xf0, 0xf5, 0x37, 0x6e, 0x70, 0xad, 0xf7, 0xd2,
0x05, 0xba, 0x63, 0xe2, 0x13, 0x4a, 0x9e, 0x07, 0xb2, 0x00, 0x5a, 0xf5, 0x19, 0xd0, 0x6a, 0x4f, 0x12, 0x15, 0xa3, 0x6f, 0xe0, 0x6e, 0xae, 0x1e, 0x27, 0x56, 0x92, 0xc6, 0x7c, 0x17, 0x61, 0x58,
0x82, 0x56, 0x7f, 0x0e, 0xb4, 0xc6, 0xff, 0x0c, 0xda, 0x09, 0x80, 0xcb, 0xd3, 0x75, 0xad, 0xdb, 0x3b, 0x15, 0xcf, 0x4f, 0x6e, 0xee, 0x32, 0xa7, 0x52, 0x54, 0x5b, 0x3f, 0x4c, 0x6f, 0x32, 0xe5,
0x1d, 0x07, 0x5b, 0xc2, 0x52, 0xa2, 0x39, 0xdf, 0x0d, 0x26, 0x70, 0xbc, 0xd8, 0x05, 0x8e, 0x38, 0x7f, 0xd4, 0xa0, 0x37, 0xc6, 0x1e, 0x4e, 0xf0, 0xed, 0xb1, 0x29, 0xc5, 0xa1, 0x7e, 0x4b, 0x1c,
0xd1, 0xb7, 0x61, 0x34, 0xf9, 0xc8, 0xb1, 0xca, 0xd9, 0x57, 0xf7, 0xb2, 0x1f, 0xfc, 0xb3, 0x0a, 0x1a, 0x3b, 0xe3, 0xd0, 0xbc, 0x2d, 0x0e, 0xad, 0xef, 0x1c, 0x87, 0x13, 0x00, 0x87, 0x9a, 0xeb,
0xbd, 0xb1, 0x17, 0x3b, 0x61, 0xe4, 0xa6, 0x71, 0x7a, 0x50, 0xf5, 0xdc, 0xa4, 0x43, 0x54, 0x3d, 0x98, 0x97, 0x6b, 0x1a, 0x3f, 0x41, 0x17, 0x38, 0xe7, 0xc5, 0x5a, 0x9e, 0xc0, 0xf1, 0x7c, 0x1d,
0x97, 0x57, 0x58, 0xfa, 0x2a, 0xa4, 0xa4, 0xe6, 0xbf, 0x00, 0x89, 0x7a, 0x6b, 0x12, 0x53, 0x7b, 0xd8, 0xcc, 0xa3, 0xaf, 0xc3, 0x68, 0xf2, 0x01, 0xb7, 0xaa, 0xd6, 0xd7, 0x37, 0xac, 0x97, 0xff,
0xbd, 0x49, 0x21, 0xc9, 0x14, 0xe8, 0x0c, 0x0e, 0x33, 0x81, 0x55, 0x30, 0x49, 0x6b, 0x6d, 0x5f, 0x55, 0x87, 0xfe, 0xd8, 0x8d, 0xed, 0x30, 0x72, 0xb2, 0x7d, 0xfa, 0x50, 0x77, 0x1d, 0x5e, 0x74,
0xcd, 0xde, 0x62, 0x72, 0xd5, 0x1c, 0x21, 0x09, 0xa7, 0x22, 0xfa, 0x29, 0x34, 0xed, 0x2d, 0x5d, 0xea, 0xae, 0x43, 0x93, 0x36, 0xbb, 0x68, 0x02, 0xbf, 0x46, 0x0f, 0x41, 0x48, 0x5c, 0x1f, 0xc7,
0x85, 0x11, 0x87, 0x40, 0x7e, 0xff, 0x65, 0x0e, 0x5d, 0x39, 0x5f, 0x8d, 0x5b, 0xe1, 0xc4, 0x1a, 0x89, 0xe5, 0xaf, 0x32, 0x48, 0x72, 0x06, 0x3a, 0x85, 0x83, 0x9c, 0x20, 0x97, 0x02, 0x67, 0xe9,
0xfd, 0x02, 0xa4, 0x88, 0xdc, 0x91, 0x88, 0x04, 0x8e, 0x28, 0x38, 0xb9, 0x58, 0x70, 0x65, 0x57, 0xbb, 0xc9, 0x26, 0xd7, 0x9b, 0x67, 0x0f, 0x45, 0x48, 0xd0, 0x33, 0x12, 0xfd, 0x04, 0xda, 0x56,
0x9c, 0x1a, 0xe2, 0xdc, 0x07, 0x8d, 0x41, 0xb6, 0x29, 0xb5, 0x9d, 0xd5, 0x9a, 0x04, 0x34, 0xad, 0x9a, 0x2c, 0xc3, 0x88, 0x42, 0x20, 0x9e, 0x7f, 0x56, 0x40, 0x57, 0xb5, 0x57, 0xa1, 0x52, 0x3a,
0xb5, 0xc1, 0x93, 0x5f, 0xcf, 0x4c, 0x71, 0xd1, 0x6d, 0xf0, 0xaf, 0x0a, 0x1c, 0x3d, 0x96, 0xe7, 0x97, 0x46, 0x5f, 0x81, 0x10, 0xe1, 0xf7, 0x38, 0xc2, 0x81, 0xcd, 0x72, 0x58, 0x2c, 0xe7, 0x70,
0x63, 0xe8, 0x06, 0xf6, 0x3a, 0x43, 0x97, 0xad, 0xd1, 0x5b, 0xe8, 0xba, 0x5e, 0xec, 0x44, 0xde, 0x55, 0x55, 0xcf, 0x04, 0xf5, 0x42, 0x07, 0x8d, 0x41, 0xb4, 0x92, 0xc4, 0xb2, 0x97, 0x3e, 0x0e,
0xda, 0x0b, 0x6c, 0x1a, 0x46, 0x09, 0xc2, 0x65, 0x25, 0x7a, 0x0d, 0xed, 0xc0, 0x73, 0x1e, 0xb8, 0x92, 0x2c, 0x7d, 0xe5, 0x9d, 0xa7, 0xe7, 0xa2, 0x7a, 0x59, 0x4d, 0xfe, 0x77, 0x0d, 0x8e, 0xb6,
0xb7, 0x80, 0x37, 0x93, 0xd9, 0xfd, 0xd8, 0xbf, 0xb3, 0xa9, 0x1d, 0x2d, 0x23, 0x3f, 0x41, 0x36, 0xd9, 0xb9, 0x0d, 0xdd, 0xc0, 0xf2, 0x73, 0x74, 0xc9, 0x37, 0x7a, 0x0a, 0x3d, 0xc7, 0x8d, 0xed,
0x57, 0xa0, 0x21, 0x20, 0x21, 0xf0, 0x3e, 0x39, 0x4f, 0x9a, 0x61, 0x93, 0xd7, 0xef, 0x23, 0x3b, 0xc8, 0xf5, 0xdd, 0xc0, 0x4a, 0xc2, 0x88, 0x23, 0x5c, 0x65, 0xa2, 0x07, 0xb0, 0x1f, 0xb8, 0xf6,
0xec, 0x4b, 0x7e, 0xe8, 0xd8, 0x3e, 0x0b, 0xd6, 0x12, 0x5f, 0x4a, 0xe5, 0x41, 0x08, 0xaf, 0x9e, 0x35, 0xd5, 0x66, 0xf0, 0xe6, 0x34, 0x89, 0x8f, 0xf5, 0x5b, 0x2b, 0xb1, 0xa2, 0x45, 0xe4, 0x71,
0x00, 0x95, 0x25, 0x91, 0x15, 0x5a, 0x72, 0xe2, 0xc2, 0xbb, 0xf9, 0x02, 0x24, 0x67, 0x65, 0x07, 0x64, 0x0b, 0x06, 0x3a, 0x03, 0xc4, 0x08, 0x5a, 0x7a, 0x67, 0xbc, 0xbe, 0xb6, 0x69, 0xfe, 0x6e,
0x01, 0xf1, 0x8d, 0xac, 0x2e, 0x33, 0x05, 0x2b, 0x8c, 0xfb, 0xad, 0xe7, 0xbb, 0x46, 0xc6, 0x15, 0x59, 0x21, 0x27, 0x79, 0xa1, 0x6d, 0x79, 0x64, 0xb3, 0x0e, 0x3b, 0x29, 0xa3, 0xe5, 0x10, 0xee,
0x89, 0x38, 0xf8, 0x77, 0x05, 0xd4, 0xa7, 0xee, 0xe0, 0xbf, 0xd0, 0x2d, 0xa5, 0xb0, 0x5f, 0xfc, 0xed, 0x00, 0x95, 0x18, 0x91, 0x27, 0x1a, 0xf7, 0xb8, 0x74, 0x6f, 0x1e, 0x82, 0x60, 0x2f, 0xad,
0x48, 0x81, 0xda, 0x36, 0xf2, 0x93, 0x0f, 0xb0, 0x25, 0x3b, 0xe9, 0x9d, 0xe7, 0x93, 0x69, 0x01, 0x20, 0xc0, 0x9e, 0x96, 0xe7, 0x65, 0xce, 0x20, 0x89, 0x71, 0x95, 0xba, 0x9e, 0xa3, 0xe5, 0xcf,
0xd3, 0x54, 0x66, 0xb7, 0xc2, 0xd6, 0x0b, 0xef, 0x8f, 0xe4, 0x7c, 0x47, 0x49, 0xcc, 0x71, 0xad, 0x0f, 0x27, 0xe5, 0xff, 0xd4, 0x60, 0xb0, 0x2b, 0x06, 0x37, 0xd0, 0xad, 0x98, 0xb0, 0x99, 0xfc,
0xe3, 0xb2, 0x12, 0xf5, 0xa1, 0xd8, 0xbc, 0x92, 0xf7, 0x5b, 0xea, 0x67, 0x05, 0xfe, 0x69, 0x95, 0x48, 0x82, 0x46, 0x1a, 0x79, 0xfc, 0x00, 0xf2, 0x49, 0x3c, 0x7d, 0xef, 0x7a, 0x78, 0x5a, 0xc2,
0xf9, 0xa7, 0x88, 0x73, 0x7b, 0x0f, 0xe7, 0x3f, 0x57, 0xa1, 0x53, 0x6c, 0x73, 0x69, 0xf2, 0x95, 0x34, 0xa3, 0x49, 0x54, 0xc8, 0xf7, 0xdc, 0xfd, 0x03, 0x7e, 0xb1, 0x4e, 0x70, 0x4c, 0x71, 0x6d,
0x3c, 0xf9, 0x23, 0x68, 0x50, 0x8f, 0xfa, 0x69, 0x2d, 0x09, 0x81, 0x25, 0xe4, 0x12, 0x56, 0x37, 0xea, 0x55, 0x26, 0x1a, 0x42, 0xb9, 0x1e, 0xf2, 0xfb, 0x5b, 0x29, 0x91, 0xa5, 0x27, 0xad, 0x53,
0x1b, 0x46, 0x47, 0xc9, 0x61, 0x8b, 0x2a, 0xf4, 0x43, 0x78, 0x41, 0x57, 0xdb, 0xf5, 0x6d, 0x60, 0x7d, 0xd2, 0xca, 0x38, 0xef, 0x6f, 0xe0, 0x6c, 0xc2, 0xdd, 0x72, 0xe1, 0x34, 0x96, 0xa9, 0x7f,
0x7b, 0xbe, 0x95, 0xa6, 0x26, 0xba, 0x99, 0x92, 0x6d, 0xcc, 0x33, 0xba, 0x3f, 0xcc, 0x8d, 0x05, 0x19, 0x58, 0xae, 0x77, 0xcb, 0x0b, 0x99, 0x3f, 0xd4, 0xf5, 0xed, 0x0f, 0x75, 0xa3, 0xfc, 0x50,
0x69, 0x0b, 0x76, 0xee, 0x65, 0xea, 0xef, 0x38, 0x7b, 0xff, 0x00, 0x72, 0x67, 0x2b, 0xe1, 0x71, 0xcb, 0x7f, 0xae, 0x43, 0xb7, 0x7c, 0x42, 0x86, 0x4e, 0xad, 0x40, 0xe7, 0x08, 0x5a, 0x89, 0x9b,
0xc1, 0xd1, 0x79, 0x80, 0x4b, 0x41, 0xe8, 0x5f, 0x25, 0x1d, 0x46, 0xf0, 0xc3, 0xe9, 0xe3, 0x7d, 0x78, 0x59, 0xb2, 0x32, 0x82, 0x78, 0xec, 0x60, 0x92, 0x98, 0x2b, 0xf2, 0x84, 0x72, 0x34, 0xcb,
0x7d, 0xc8, 0xfe, 0xe4, 0xb4, 0x3b, 0x38, 0x85, 0x76, 0xaa, 0x41, 0x6d, 0xa8, 0x5f, 0x19, 0xd3, 0x2c, 0xf4, 0x03, 0xb8, 0x93, 0x64, 0xf6, 0x9a, 0x99, 0xb1, 0xac, 0x5c, 0x4a, 0xf9, 0xc2, 0x2c,
0x0f, 0xca, 0x01, 0x92, 0xa0, 0x61, 0x4c, 0xb4, 0x0b, 0x5d, 0xa9, 0x0c, 0xfe, 0x04, 0x20, 0x17, 0x6f, 0x51, 0x0e, 0x0a, 0x61, 0x66, 0x3f, 0xeb, 0x28, 0xfa, 0x39, 0xfb, 0x5b, 0xea, 0xc8, 0xf7,
0x08, 0xe6, 0x89, 0xfe, 0x58, 0xea, 0x64, 0x55, 0xbe, 0x53, 0xe8, 0x64, 0x29, 0xbb, 0xd6, 0x0a, 0xa1, 0x50, 0x36, 0xb9, 0x4b, 0xac, 0xaf, 0x28, 0x36, 0x78, 0xc5, 0x9a, 0x90, 0xe7, 0xbc, 0x84,
0xec, 0x7a, 0x0a, 0x72, 0x44, 0xe2, 0x4d, 0x18, 0xc4, 0xc4, 0xa2, 0x61, 0x52, 0x26, 0x90, 0xaa, 0xb1, 0x37, 0xed, 0xd1, 0xf6, 0xb7, 0xe8, 0x8c, 0xe2, 0x9a, 0xb7, 0x0a, 0xf2, 0x23, 0xd8, 0xcf,
0xcc, 0x90, 0x0d, 0x3a, 0x24, 0x88, 0x2d, 0xfe, 0x30, 0x93, 0xae, 0x46, 0x82, 0x98, 0xd7, 0x50, 0x38, 0x68, 0x1f, 0x9a, 0x6f, 0xb4, 0xe9, 0x6b, 0x69, 0x0f, 0x09, 0xd0, 0xd2, 0x26, 0xca, 0x4b,
0x81, 0x64, 0x9a, 0x25, 0x92, 0xd9, 0xe7, 0x8b, 0xd6, 0x27, 0x93, 0x6c, 0xfb, 0x93, 0x48, 0xf6, 0x55, 0xaa, 0xc9, 0x7f, 0xa9, 0xc1, 0xfd, 0xea, 0x33, 0x34, 0x62, 0xed, 0x1d, 0x85, 0xef, 0x04,
0x6b, 0x68, 0xc5, 0x62, 0x54, 0x54, 0x25, 0xde, 0x34, 0xd5, 0x3c, 0x40, 0x79, 0x86, 0xbc, 0x3c, 0x60, 0x95, 0x5e, 0x7a, 0xae, 0x6d, 0x5e, 0xe3, 0x35, 0x0f, 0x8d, 0xc0, 0x38, 0xaf, 0xf1, 0x1a,
0xc0, 0xa9, 0x29, 0x1a, 0x42, 0x83, 0xcf, 0x60, 0x2a, 0x70, 0x9f, 0xe3, 0xbd, 0xe1, 0x2f, 0xf7, 0x3d, 0x86, 0xae, 0xe3, 0xc6, 0x2b, 0xcf, 0x5a, 0x9b, 0xa5, 0xfb, 0x2f, 0x72, 0x1e, 0x4d, 0xb8,
0x10, 0x66, 0xcc, 0xde, 0x66, 0x93, 0x90, 0x2a, 0xef, 0xdb, 0x17, 0x27, 0x2c, 0x66, 0xcf, 0xcd, 0x0f, 0x03, 0xfb, 0x1c, 0x9a, 0xae, 0x1d, 0x06, 0x14, 0x4b, 0x71, 0x97, 0x5f, 0x79, 0xaa, 0xe8,
0xd0, 0x97, 0x20, 0x39, 0xe1, 0x7a, 0xbd, 0x0d, 0x3c, 0xba, 0x53, 0x3b, 0xac, 0x22, 0x2f, 0x0f, 0x54, 0x58, 0xfe, 0x53, 0x1d, 0xbe, 0xb7, 0x69, 0xb6, 0xef, 0xa7, 0x81, 0x9b, 0xac, 0xa9, 0xe1,
0x70, 0xae, 0x42, 0x23, 0x38, 0x74, 0x45, 0x2b, 0x48, 0x87, 0x65, 0xd5, 0xd9, 0xcf, 0xbe, 0xdc, 0x8f, 0x49, 0x23, 0xc0, 0x19, 0xa6, 0x9b, 0x65, 0x95, 0x98, 0xf3, 0x34, 0xe7, 0xff, 0x63, 0xfc,
0x2b, 0x2e, 0x0f, 0x70, 0xcf, 0x2d, 0xf3, 0x5d, 0x46, 0xe0, 0xdd, 0x22, 0x81, 0xbf, 0x81, 0x8e, 0x13, 0xe8, 0xf9, 0xd8, 0xbf, 0xc4, 0x51, 0xd6, 0x14, 0xb2, 0x7e, 0xb2, 0xcb, 0x99, 0xb4, 0x21,
0xeb, 0xc5, 0x1b, 0xdf, 0xde, 0x89, 0x8b, 0xec, 0x25, 0xef, 0x46, 0xe8, 0xf8, 0x65, 0x6e, 0xa0, 0xa4, 0x8f, 0x5a, 0xe8, 0x85, 0x11, 0x2f, 0x62, 0x8c, 0xc8, 0xfd, 0xee, 0x7c, 0x84, 0xdf, 0xe8,
0x9f, 0x0c, 0xdf, 0x56, 0x44, 0x7e, 0xbb, 0x25, 0x31, 0xb5, 0x36, 0x51, 0xb8, 0xb1, 0xef, 0x6d, 0xa7, 0xd0, 0xbe, 0x24, 0xe5, 0x25, 0xa2, 0x77, 0xeb, 0x3b, 0xa8, 0x71, 0x71, 0x52, 0x71, 0x36,
0x46, 0xde, 0x31, 0xb5, 0x29, 0x51, 0x0f, 0x79, 0x3a, 0xef, 0x0a, 0xb7, 0x21, 0x3c, 0xb0, 0x70, 0xe3, 0xcc, 0xea, 0x54, 0x0e, 0x17, 0x23, 0xcd, 0x34, 0x2d, 0xc1, 0xc5, 0x78, 0x8b, 0xd4, 0xa5,
0x98, 0x67, 0xf6, 0x0b, 0x66, 0x8e, 0x4f, 0x9c, 0xe7, 0xb6, 0x1f, 0x19, 0x85, 0x94, 0xff, 0x63, 0x17, 0x11, 0xfb, 0xe1, 0xaf, 0xdd, 0xec, 0xde, 0x50, 0xe2, 0x06, 0x88, 0x8d, 0x0f, 0x82, 0xd8,
0x14, 0x42, 0xdf, 0x87, 0x06, 0xff, 0x79, 0xa0, 0xbe, 0xe0, 0x59, 0x1d, 0x16, 0xae, 0x98, 0xa9, 0xbc, 0x09, 0xe2, 0x76, 0x7c, 0x46, 0x20, 0xe4, 0xe1, 0xe2, 0xef, 0xe7, 0xe7, 0xbb, 0x5a, 0xa7,
0xb1, 0xd8, 0x1d, 0xfc, 0xb5, 0x06, 0xf2, 0xa8, 0xd4, 0xb0, 0x8e, 0xd2, 0x91, 0x75, 0x34, 0x9b, 0x4a, 0xf0, 0xf5, 0x42, 0x4f, 0xfe, 0x6f, 0x0d, 0xd0, 0xcd, 0x2e, 0x6b, 0x4b, 0x59, 0xf8, 0x8a,
0x9a, 0xfa, 0xd4, 0x4c, 0x87, 0xd6, 0x1e, 0x80, 0xa9, 0xff, 0xda, 0xb4, 0xe6, 0x57, 0x9a, 0x31, 0x3d, 0xe2, 0x96, 0xcd, 0x1a, 0x5b, 0xf1, 0xfc, 0xc9, 0xee, 0xb3, 0xf2, 0xfb, 0xf1, 0x6a, 0x4f,
0x55, 0x2a, 0x48, 0x86, 0xd6, 0xc2, 0x34, 0x46, 0x1f, 0x74, 0xac, 0x54, 0x11, 0x40, 0x73, 0x61, 0xcf, 0xb4, 0x90, 0x5a, 0x36, 0xb7, 0xf1, 0x11, 0xe6, 0xbe, 0xda, 0x2b, 0x19, 0x4c, 0xed, 0x60,
0x6a, 0xe6, 0x72, 0xa1, 0xd4, 0xd8, 0xb3, 0xd4, 0x27, 0xb3, 0x5f, 0x1a, 0x4a, 0x1d, 0xbd, 0x82, 0xa8, 0xf3, 0x0b, 0xb1, 0xdb, 0x8e, 0x22, 0x7e, 0xd4, 0x0e, 0x46, 0xbe, 0x10, 0xf2, 0x52, 0x2a,
0x97, 0x26, 0xd6, 0xa6, 0x0b, 0x6d, 0x64, 0x1a, 0x33, 0x16, 0x71, 0x32, 0xd1, 0xa6, 0x63, 0xa5, 0x5f, 0xc1, 0xe1, 0x96, 0x0e, 0x13, 0xcd, 0x76, 0xf5, 0xa7, 0x35, 0xda, 0x26, 0x3c, 0xbc, 0xad,
0x81, 0xce, 0xe0, 0xed, 0xe2, 0x66, 0x61, 0xea, 0x13, 0x6b, 0xa2, 0x2f, 0x16, 0xda, 0x85, 0x9e, 0x3f, 0xdd, 0xde, 0x9e, 0xfe, 0x13, 0x40, 0x2c, 0x75, 0xd6, 0x3b, 0xba, 0xb8, 0x4a, 0xbf, 0x55,
0x7d, 0x6d, 0x8e, 0x8d, 0x6b, 0xcd, 0xd4, 0xad, 0x0b, 0x3c, 0x5b, 0xce, 0x95, 0x66, 0xfe, 0xc8, 0xa7, 0x2b, 0xa5, 0x7e, 0x2b, 0x1b, 0x2b, 0x1a, 0xa5, 0xb1, 0xe2, 0x11, 0x88, 0x11, 0x8e, 0x57,
0x5b, 0x6c, 0xc9, 0xc7, 0x68, 0xa5, 0x8d, 0xba, 0x20, 0xb1, 0x60, 0xcb, 0xa9, 0x61, 0xde, 0x28, 0x61, 0x10, 0x63, 0x33, 0x09, 0x79, 0xea, 0x40, 0xc6, 0x32, 0x42, 0x32, 0xe1, 0xe1, 0x20, 0x66,
0x12, 0x1b, 0xb4, 0xf7, 0xc2, 0x5d, 0x68, 0x73, 0x05, 0xd0, 0x4b, 0x38, 0x64, 0x71, 0xb5, 0x91, 0xa9, 0xc7, 0x7b, 0x2f, 0x1c, 0xc4, 0x34, 0xed, 0x4a, 0xad, 0x70, 0xbb, 0xd2, 0x0a, 0x6f, 0x76,
0x69, 0x61, 0xfd, 0x57, 0x4b, 0x7d, 0x61, 0x2a, 0x32, 0x53, 0x8e, 0x8d, 0xc5, 0x68, 0x86, 0xc7, 0xb5, 0x9d, 0x4f, 0x9e, 0x2e, 0xf6, 0x3f, 0x69, 0xba, 0xf8, 0x02, 0x3a, 0x31, 0x9b, 0x91, 0xf9,
0xa9, 0xb5, 0xd2, 0x41, 0x9f, 0xc3, 0x67, 0xc6, 0x58, 0x9f, 0x9a, 0x86, 0x79, 0x63, 0x5d, 0xeb, 0x40, 0x30, 0x28, 0x36, 0xa8, 0x0e, 0xcf, 0x24, 0xac, 0x5c, 0x14, 0x9d, 0x41, 0x8b, 0x0e, 0x9f,
0xd8, 0xf8, 0xd6, 0x18, 0x69, 0x2c, 0x67, 0xa5, 0x8b, 0xde, 0xc0, 0xc9, 0x5e, 0xf0, 0xb9, 0x31, 0x03, 0xa0, 0x3a, 0xc7, 0x1b, 0x53, 0x6f, 0xa1, 0xc1, 0xc4, 0x88, 0xbc, 0x45, 0x46, 0xc0, 0x81,
0x9d, 0xea, 0xb9, 0x77, 0x0f, 0xbd, 0x85, 0xfe, 0x9e, 0xc9, 0x64, 0x69, 0x2e, 0xb5, 0x2b, 0x4b, 0xb8, 0x29, 0x5f, 0x1e, 0x2d, 0x89, 0x3c, 0x15, 0x43, 0x9f, 0x95, 0xd3, 0xb7, 0x4b, 0xae, 0x7f,
0xbf, 0x66, 0x67, 0x5a, 0xe8, 0x53, 0x53, 0x39, 0x7c, 0xe4, 0xd0, 0x25, 0x2b, 0x6d, 0x34, 0xd2, 0x35, 0x2f, 0x47, 0x70, 0xe0, 0xb0, 0x86, 0x25, 0xfb, 0x97, 0x60, 0x60, 0x6f, 0x5a, 0x5f, 0xed,
0xe7, 0xa6, 0x3e, 0x56, 0x14, 0xf4, 0x0e, 0xbe, 0xf7, 0x9c, 0x25, 0xd6, 0x27, 0xb3, 0x6b, 0x7d, 0x68, 0x5e, 0xed, 0xe9, 0x7d, 0xa7, 0xda, 0x95, 0xe7, 0x63, 0x46, 0xaf, 0x3c, 0x66, 0x6c, 0xd6,
0xac, 0xbc, 0x38, 0x97, 0x32, 0x7e, 0x39, 0xef, 0xfe, 0x46, 0x1e, 0xfe, 0xf8, 0x67, 0xe9, 0x2d, 0x90, 0xfe, 0xcd, 0x1a, 0xb2, 0x82, 0x21, 0xbf, 0x67, 0x66, 0x84, 0x7f, 0x93, 0xe2, 0x38, 0x31,
0xdf, 0x36, 0xf9, 0xea, 0xab, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x18, 0x95, 0x9c, 0x97, 0x5f, 0x57, 0x51, 0xb8, 0xb2, 0xae, 0xac, 0x84, 0x27, 0x31, 0x1e, 0x1c, 0x50, 0x73, 0x9e, 0x95, 0xa2,
0x0e, 0x00, 0x00, 0xc1, 0x34, 0x74, 0xa6, 0x30, 0xcb, 0xe5, 0x49, 0xe6, 0x62, 0xfd, 0xc4, 0xbe, 0x6d, 0x79, 0xcb,
0x0c, 0x28, 0x7d, 0xcc, 0x0c, 0xf8, 0x39, 0xb4, 0xe8, 0xff, 0x22, 0x83, 0x3b, 0xd4, 0xaa, 0x83,
0x52, 0x88, 0x09, 0x5b, 0x67, 0xab, 0xbb, 0x47, 0x45, 0xf4, 0xc9, 0xa3, 0xe2, 0xdf, 0x1a, 0x20,
0x8e, 0x2a, 0x9d, 0xda, 0x51, 0x36, 0xfe, 0x8f, 0x2e, 0xa6, 0x86, 0x3a, 0x35, 0xb2, 0x3f, 0x00,
0xfa, 0x00, 0x86, 0xfa, 0x4b, 0xc3, 0x9c, 0xbd, 0x51, 0xb4, 0xa9, 0x54, 0x43, 0x22, 0x74, 0xe6,
0x86, 0x36, 0x7a, 0xad, 0xea, 0x52, 0x1d, 0x01, 0xb4, 0xe7, 0x86, 0x62, 0x2c, 0xe6, 0x52, 0x83,
0xb4, 0x0b, 0xea, 0xe4, 0xe2, 0x17, 0x9a, 0xd4, 0x44, 0xf7, 0xe0, 0xd0, 0xd0, 0x95, 0xe9, 0x5c,
0x19, 0x19, 0xda, 0x05, 0xd9, 0x71, 0x32, 0x51, 0xa6, 0x63, 0xa9, 0x85, 0x4e, 0xe1, 0xe9, 0xfc,
0xdd, 0xdc, 0x50, 0x27, 0xe6, 0x44, 0x9d, 0xcf, 0x95, 0x97, 0x6a, 0x7e, 0xda, 0x4c, 0xd7, 0xde,
0x2a, 0x86, 0x6a, 0xbe, 0xd4, 0x2f, 0x16, 0x33, 0xa9, 0x5d, 0x34, 0x1f, 0x1d, 0xf2, 0x49, 0xff,
0x92, 0x90, 0xf6, 0x51, 0x0f, 0x04, 0xb2, 0xd9, 0x62, 0xaa, 0x19, 0xef, 0x24, 0x01, 0x1d, 0x03,
0xda, 0xd8, 0xee, 0xa5, 0x32, 0x93, 0x00, 0x1d, 0xc2, 0x01, 0xd9, 0x57, 0x19, 0x19, 0xa6, 0xae,
0x7e, 0xb3, 0x50, 0xe7, 0x86, 0x24, 0x12, 0xe6, 0x58, 0x9b, 0x8f, 0x2e, 0xf4, 0x71, 0x26, 0x2d,
0x75, 0xd1, 0x7d, 0xb8, 0xab, 0x8d, 0xd5, 0xa9, 0xa1, 0x19, 0xef, 0xcc, 0xb7, 0xaa, 0xae, 0x7d,
0xad, 0x8d, 0x14, 0x62, 0xb3, 0xd4, 0x43, 0x8f, 0xe1, 0x64, 0x63, 0xf3, 0x99, 0x36, 0x9d, 0xaa,
0x85, 0x76, 0x1f, 0x3d, 0x85, 0xe1, 0x86, 0xc8, 0x64, 0x61, 0x2c, 0x94, 0x37, 0xa6, 0xfa, 0x96,
0xf8, 0x34, 0x57, 0xa7, 0x86, 0x74, 0xb0, 0xc5, 0xe9, 0x8a, 0x94, 0x32, 0x1a, 0xa9, 0x33, 0x43,
0x1d, 0x4b, 0x12, 0x7a, 0x06, 0x4f, 0x6e, 0x93, 0xd4, 0xd5, 0xc9, 0xc5, 0x5b, 0x75, 0x2c, 0xdd,
0x29, 0x95, 0xef, 0x17, 0xbd, 0x5f, 0x89, 0x67, 0x3f, 0xfa, 0x59, 0x96, 0x01, 0x97, 0x6d, 0xfa,
0xf5, 0xfc, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x3e, 0x26, 0x1f, 0x1a, 0xab, 0x13, 0x00, 0x00,
} }

View File

@ -48,6 +48,7 @@ message EditMessage {
ChatMessage.ContentType content_type = 7; ChatMessage.ContentType content_type = 7;
repeated UnfurledLink unfurled_links = 8; repeated UnfurledLink unfurled_links = 8;
UnfurledStatusLinks unfurled_status_links = 9;
} }
message DeleteMessage { message DeleteMessage {
@ -108,6 +109,12 @@ message DiscordMessageAttachment {
string localUrl = 8; string localUrl = 8;
} }
message UnfurledLinkThumbnail {
bytes payload = 1;
uint32 width = 2;
uint32 height = 3;
}
message UnfurledLink { message UnfurledLink {
// A valid URL which uniquely identifies this link. // A valid URL which uniquely identifies this link.
string url = 1; string url = 1;
@ -127,6 +134,46 @@ message UnfurledLink {
} }
} }
message UnfurledStatusContactLink {
bytes public_key = 1;
string display_name = 2;
string description = 3;
UnfurledLinkThumbnail icon = 4;
}
message UnfurledStatusCommunityLink {
bytes community_id = 1;
string display_name = 2;
string description = 3;
uint32 members_count = 4;
string color = 5;
UnfurledLinkThumbnail icon = 7;
UnfurledLinkThumbnail banner = 8;
}
message UnfurledStatusChannelLink {
bytes channel_uuid = 1;
string emoji = 2;
string display_name = 3;
string description = 4;
string color = 5;
UnfurledStatusCommunityLink community = 6;
}
message UnfurledStatusLink {
string url = 1;
oneof payload {
UnfurledStatusContactLink contact = 2;
UnfurledStatusCommunityLink community = 3;
UnfurledStatusChannelLink channel = 4;
}
}
// Create a wrapper around repeated property for proper unmarshalling
message UnfurledStatusLinks {
repeated UnfurledStatusLink unfurled_status_links = 1;
}
message ChatMessage { message ChatMessage {
// Lamport timestamp of the chat message // Lamport timestamp of the chat message
uint64 clock = 1; uint64 clock = 1;
@ -171,6 +218,8 @@ message ChatMessage {
Shard shard = 17; Shard shard = 17;
UnfurledStatusLinks unfurled_status_links = 18;
enum ContentType { enum ContentType {
UNKNOWN_CONTENT_TYPE = 0; UNKNOWN_CONTENT_TYPE = 0;
TEXT_PLAIN = 1; TEXT_PLAIN = 1;

View File

@ -39,7 +39,6 @@ const (
SyncSetting_DISPLAY_NAME SyncSetting_Type = 13 SyncSetting_DISPLAY_NAME SyncSetting_Type = 13
SyncSetting_BIO SyncSetting_Type = 14 SyncSetting_BIO SyncSetting_Type = 14
SyncSetting_MNEMONIC_REMOVED SyncSetting_Type = 15 SyncSetting_MNEMONIC_REMOVED SyncSetting_Type = 15
SyncSetting_INCLUDE_WATCHONLY_ACCOUNT SyncSetting_Type = 17
) )
var SyncSetting_Type_name = map[int32]string{ var SyncSetting_Type_name = map[int32]string{
@ -225,37 +224,36 @@ func init() {
} }
var fileDescriptor_e2f7a0bce2873c78 = []byte{ var fileDescriptor_e2f7a0bce2873c78 = []byte{
// 508 bytes of a gzipped FileDescriptorProto // 484 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x92, 0xcf, 0x6f, 0xd3, 0x30, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x92, 0x4d, 0x8f, 0xda, 0x3c,
0x14, 0xc7, 0x9b, 0x35, 0x5d, 0xbb, 0x97, 0x6e, 0x33, 0xde, 0x04, 0x61, 0x80, 0x16, 0xc6, 0x25, 0x10, 0x80, 0x09, 0x84, 0xaf, 0x09, 0x0b, 0x96, 0x59, 0xbd, 0x6f, 0xb4, 0xad, 0xb4, 0x29, 0xbd,
0xa7, 0x20, 0x01, 0xe2, 0xc2, 0xc9, 0x75, 0xdc, 0xd5, 0x6a, 0x62, 0x47, 0xb6, 0xd3, 0xaa, 0x5c, 0xe4, 0x94, 0x4a, 0x6d, 0xd5, 0x4b, 0x4f, 0x21, 0x31, 0x60, 0x91, 0xd8, 0x91, 0xed, 0x80, 0xe8,
0x2c, 0x5a, 0x95, 0xa9, 0xa2, 0x6a, 0xaa, 0x35, 0x43, 0xea, 0x91, 0x7f, 0x82, 0xbf, 0x17, 0x25, 0xc5, 0x2a, 0x88, 0xae, 0x50, 0x11, 0x41, 0x4b, 0xb6, 0x52, 0xfe, 0x6e, 0xff, 0x44, 0xaf, 0x55,
0xa1, 0xfc, 0x3c, 0xd9, 0xef, 0xfb, 0x3e, 0xef, 0xeb, 0xe7, 0x67, 0xc3, 0xc5, 0x6e, 0xbf, 0x59, 0x92, 0xd2, 0xcf, 0x53, 0x32, 0xcf, 0x3c, 0x33, 0x1e, 0x7f, 0xc0, 0xf8, 0x52, 0x9c, 0x76, 0xfa,
0xd8, 0xdd, 0xb2, 0x2c, 0x57, 0x9b, 0xbb, 0x5d, 0xb4, 0xbd, 0x2f, 0xca, 0x02, 0xf7, 0xea, 0x65, 0xb2, 0xcf, 0xf3, 0xc3, 0xe9, 0xe1, 0xe2, 0x9d, 0x1f, 0xb3, 0x3c, 0xc3, 0xbd, 0xea, 0xb3, 0x7d,
0xfe, 0xf0, 0xf9, 0xe6, 0x5b, 0x07, 0x3c, 0xbd, 0xdf, 0x2c, 0x74, 0x03, 0xe0, 0x08, 0xdc, 0x72, 0xfa, 0x34, 0xf9, 0x6a, 0x82, 0x25, 0x8b, 0xd3, 0x4e, 0xd6, 0x02, 0xf6, 0xc0, 0xcc, 0x8b, 0xf3,
0xbf, 0x5d, 0xfa, 0x4e, 0xe0, 0x84, 0x67, 0x6f, 0xae, 0xa2, 0x03, 0x18, 0xfd, 0x01, 0x45, 0x66, 0xde, 0x36, 0x1c, 0xc3, 0x1d, 0xbe, 0xbe, 0xf3, 0xae, 0xa2, 0xf7, 0x9b, 0xe4, 0xa9, 0xe2, 0xbc,
0xbf, 0x5d, 0xaa, 0x9a, 0xc3, 0x97, 0xd0, 0x59, 0xac, 0x8b, 0xc5, 0x17, 0xff, 0x28, 0x70, 0x42, 0x17, 0x95, 0x87, 0x6f, 0xa1, 0xbd, 0x3b, 0x66, 0xbb, 0xcf, 0x76, 0xd3, 0x31, 0x5c, 0x53, 0xd4,
0x57, 0x35, 0x01, 0x7e, 0x05, 0xfd, 0xaf, 0x9f, 0xd6, 0x0f, 0x4b, 0xbb, 0x2b, 0xef, 0x57, 0x9b, 0x01, 0x7e, 0x09, 0x83, 0x2f, 0x1f, 0x8f, 0x4f, 0x7b, 0x7d, 0xc9, 0x1f, 0x0f, 0xa7, 0x07, 0xbb,
0x3b, 0xbf, 0x1d, 0x38, 0xe1, 0xc9, 0xa8, 0xa5, 0xbc, 0x5a, 0xd5, 0xb5, 0x88, 0x5f, 0x42, 0x13, 0xe5, 0x18, 0x6e, 0x7f, 0xd1, 0x10, 0x56, 0x45, 0x65, 0x05, 0xf1, 0x0b, 0xa8, 0x43, 0xbd, 0x2d,
0xda, 0xf9, 0xbe, 0x5c, 0xee, 0x7c, 0x37, 0x70, 0xc2, 0xfe, 0xa8, 0xa5, 0xa0, 0x16, 0x07, 0x95, 0xf2, 0xfd, 0xc5, 0x36, 0x1d, 0xc3, 0x1d, 0x2c, 0x1a, 0x02, 0x2a, 0x38, 0x2d, 0x19, 0xbe, 0x07,
0x86, 0xaf, 0x01, 0x7e, 0x22, 0x45, 0xb1, 0xf6, 0x3b, 0x81, 0x13, 0xf6, 0x46, 0x2d, 0x75, 0xd2, 0xf8, 0xa1, 0x64, 0xd9, 0xd1, 0x6e, 0x3b, 0x86, 0xdb, 0x5b, 0x34, 0x44, 0xbf, 0x36, 0xb2, 0xec,
0x10, 0x45, 0xb1, 0xfe, 0xed, 0xb1, 0xda, 0x94, 0xef, 0xdf, 0xf9, 0xc7, 0x81, 0x13, 0xb6, 0x7f, 0xf8, 0xab, 0xc7, 0xe1, 0x94, 0xbf, 0x7b, 0x6b, 0x77, 0x1c, 0xc3, 0x6d, 0xfd, 0xec, 0x41, 0x4b,
0x79, 0xf0, 0x4a, 0xbb, 0xf9, 0xde, 0x06, 0xb7, 0x6a, 0x18, 0x7b, 0xd0, 0xcd, 0xc5, 0x58, 0xc8, 0x36, 0xf9, 0xd6, 0x04, 0xb3, 0x1c, 0x18, 0x5b, 0xd0, 0x4d, 0xd9, 0x92, 0xf1, 0x35, 0x43, 0x0d,
0xa9, 0x40, 0x2d, 0xdc, 0x87, 0x1e, 0xcd, 0x95, 0x62, 0x82, 0xce, 0x90, 0x83, 0xcf, 0xc1, 0xbb, 0x3c, 0x80, 0x5e, 0x90, 0x0a, 0x41, 0x58, 0xb0, 0x41, 0x06, 0x1e, 0x81, 0x35, 0xa7, 0x33, 0x2d,
0xe5, 0x43, 0xab, 0x18, 0x65, 0xc2, 0x68, 0x74, 0x84, 0x31, 0x9c, 0x55, 0xc2, 0x90, 0x4c, 0x64, 0x48, 0x40, 0x98, 0x92, 0xa8, 0x89, 0x31, 0x0c, 0x4b, 0x30, 0xf3, 0x57, 0x3c, 0x15, 0x54, 0x11,
0xae, 0xb8, 0x61, 0x1a, 0xb5, 0xf1, 0x35, 0x3c, 0x4b, 0x99, 0xd6, 0xe4, 0x96, 0x69, 0x3b, 0x54, 0x89, 0x5a, 0xf8, 0x1e, 0x9e, 0xc5, 0x44, 0x4a, 0x7f, 0x4e, 0xa4, 0x9e, 0x09, 0x1e, 0xeb, 0x80,
0x32, 0xb5, 0x54, 0x0a, 0x43, 0xa8, 0xd1, 0x56, 0x8a, 0x64, 0x86, 0xdc, 0xaa, 0x28, 0x53, 0x6c, 0x33, 0xe5, 0x07, 0x4a, 0x6a, 0xce, 0xa2, 0x0d, 0x32, 0xcb, 0xa2, 0x44, 0x90, 0x19, 0x11, 0x82,
0xc8, 0x94, 0x62, 0xb1, 0x15, 0x24, 0x65, 0xa8, 0x83, 0x2f, 0xe0, 0x3c, 0x53, 0x6c, 0xc2, 0xd9, 0x84, 0x9a, 0xf9, 0x31, 0x41, 0x6d, 0x3c, 0x86, 0x51, 0x22, 0xc8, 0x8a, 0x92, 0xb5, 0x4e, 0x04,
0xd4, 0x66, 0x8a, 0x4f, 0x08, 0x9d, 0xa1, 0x63, 0xfc, 0x1c, 0xfc, 0x4c, 0xc9, 0x21, 0x4f, 0x98, 0x5d, 0xf9, 0xc1, 0x06, 0x75, 0xf0, 0x73, 0xb0, 0x13, 0xc1, 0x67, 0x34, 0x22, 0x3a, 0xa1, 0x81,
0xcd, 0x38, 0x35, 0xb9, 0x62, 0xda, 0xea, 0x91, 0x9c, 0x5a, 0x23, 0x51, 0xb7, 0x3a, 0xe7, 0xbf, 0x4a, 0x05, 0x91, 0x5a, 0x2e, 0xf8, 0x5a, 0x2b, 0x8e, 0xba, 0xe5, 0x3a, 0xff, 0x64, 0x57, 0x54,
0xec, 0x84, 0x6b, 0x3e, 0xe0, 0x09, 0x37, 0x33, 0xd4, 0xc3, 0x4f, 0xe0, 0x42, 0x33, 0x11, 0x5b, 0xd2, 0x29, 0x8d, 0xa8, 0xda, 0xa0, 0x1e, 0xfe, 0x1f, 0xc6, 0x92, 0xb0, 0x50, 0x4b, 0xe5, 0xab,
0x6d, 0x88, 0xc9, 0xb5, 0xcd, 0xb3, 0x98, 0x54, 0x1d, 0x9e, 0x54, 0xbe, 0xda, 0x70, 0x3a, 0x66, 0x54, 0xea, 0x34, 0x09, 0xfd, 0x72, 0xc2, 0x7e, 0xd9, 0x57, 0x2a, 0x1a, 0x2c, 0x89, 0x90, 0x3a,
0x4a, 0xdb, 0x8c, 0xd0, 0xb1, 0xb6, 0x5c, 0x68, 0x43, 0x92, 0x84, 0xc5, 0x08, 0xf0, 0x15, 0x3c, 0xf1, 0x83, 0xa5, 0xd4, 0x94, 0x49, 0xe5, 0x47, 0x11, 0x09, 0x11, 0xe0, 0x3b, 0xf8, 0xef, 0xaf,
0xfe, 0x27, 0x9b, 0x31, 0x11, 0x73, 0x71, 0x8b, 0xbc, 0xbf, 0x2a, 0x9b, 0x29, 0xd8, 0x43, 0x8c, 0x6c, 0x42, 0x58, 0x48, 0xd9, 0x1c, 0x59, 0x7f, 0x54, 0xd6, 0xa7, 0xa0, 0xaf, 0x31, 0x1a, 0x60,
0xfa, 0x18, 0x41, 0x3f, 0xe6, 0x3a, 0x4b, 0xc8, 0xac, 0xb9, 0xd6, 0x29, 0xee, 0x42, 0x7b, 0xc0, 0x04, 0x83, 0x90, 0xca, 0x24, 0xf2, 0x37, 0xf5, 0xb6, 0x6e, 0x70, 0x17, 0x5a, 0x53, 0xca, 0xd1,
0x25, 0x3a, 0xc3, 0x97, 0x80, 0x52, 0xc1, 0x52, 0x29, 0x38, 0xb5, 0x8a, 0xa5, 0x72, 0xc2, 0x62, 0x10, 0xdf, 0x02, 0x8a, 0x19, 0x89, 0x39, 0xa3, 0x81, 0x16, 0x24, 0xe6, 0x2b, 0x12, 0xa2, 0xd1,
0x74, 0x8e, 0x5f, 0xc0, 0x53, 0x2e, 0x68, 0x92, 0xc7, 0xcc, 0x4e, 0x89, 0xa1, 0xa3, 0x6a, 0x40, 0xc4, 0xec, 0x21, 0x84, 0xa6, 0x5d, 0x68, 0xd7, 0x37, 0x75, 0xf3, 0xc1, 0xf2, 0x5e, 0xbd, 0xbf,
0x96, 0x50, 0x2a, 0x73, 0x61, 0xd0, 0xa3, 0x1b, 0xb7, 0x87, 0x10, 0x1a, 0x74, 0xa1, 0xd3, 0x3c, 0x3e, 0xa5, 0x6d, 0xa7, 0xfa, 0x7b, 0xf3, 0x3d, 0x00, 0x00, 0xff, 0xff, 0xd4, 0x80, 0xfb, 0x9e,
0xe4, 0xe9, 0x47, 0x2f, 0x7a, 0xfd, 0xe1, 0xf0, 0xd3, 0xe6, 0xc7, 0xf5, 0xee, 0xed, 0x8f, 0x00, 0x9b, 0x02, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0xe1, 0x41, 0x4b, 0xcb, 0xba, 0x02, 0x00, 0x00,
} }

View File

@ -90,7 +90,7 @@ func _1593601729_initial_schemaDownSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1593601729_initial_schema.down.sql", size: 144, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1593601729_initial_schema.down.sql", size: 144, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa, 0x95, 0x55, 0x64, 0x38, 0x40, 0x16, 0xbf, 0x8b, 0x1c, 0x18, 0xb4, 0xc5, 0x7f, 0xd0, 0xb8, 0xf0, 0x3c, 0xa2, 0x82, 0xf8, 0x8d, 0x5a, 0xd3, 0xb6, 0x6e, 0xa3, 0xb4, 0xc, 0x9, 0x33, 0x0}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa, 0x95, 0x55, 0x64, 0x38, 0x40, 0x16, 0xbf, 0x8b, 0x1c, 0x18, 0xb4, 0xc5, 0x7f, 0xd0, 0xb8, 0xf0, 0x3c, 0xa2, 0x82, 0xf8, 0x8d, 0x5a, 0xd3, 0xb6, 0x6e, 0xa3, 0xb4, 0xc, 0x9, 0x33, 0x0}}
return a, nil return a, nil
} }
@ -110,7 +110,7 @@ func _1593601729_initial_schemaUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1593601729_initial_schema.up.sql", size: 1773, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1593601729_initial_schema.up.sql", size: 1773, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4e, 0x1e, 0x5, 0x35, 0x9, 0xb2, 0x2d, 0x6f, 0x33, 0x63, 0xa2, 0x7a, 0x5b, 0xd2, 0x2d, 0xcb, 0x79, 0x7e, 0x6, 0xb4, 0x9d, 0x35, 0xd8, 0x9b, 0x55, 0xe5, 0xf8, 0x44, 0xca, 0xa6, 0xf3, 0xd3}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4e, 0x1e, 0x5, 0x35, 0x9, 0xb2, 0x2d, 0x6f, 0x33, 0x63, 0xa2, 0x7a, 0x5b, 0xd2, 0x2d, 0xcb, 0x79, 0x7e, 0x6, 0xb4, 0x9d, 0x35, 0xd8, 0x9b, 0x55, 0xe5, 0xf8, 0x44, 0xca, 0xa6, 0xf3, 0xd3}}
return a, nil return a, nil
} }
@ -130,7 +130,7 @@ func _1597909626_add_server_typeDownSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1597909626_add_server_type.down.sql", size: 0, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1597909626_add_server_type.down.sql", size: 0, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55}}
return a, nil return a, nil
} }
@ -150,7 +150,7 @@ func _1597909626_add_server_typeUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1597909626_add_server_type.up.sql", size: 145, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1597909626_add_server_type.up.sql", size: 145, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc8, 0x3f, 0xe0, 0xe7, 0x57, 0x0, 0x5d, 0x60, 0xf3, 0x55, 0x64, 0x71, 0x80, 0x3c, 0xca, 0x8, 0x61, 0xb5, 0x3c, 0xe, 0xa1, 0xe4, 0x61, 0xd1, 0x4e, 0xd8, 0xb2, 0x55, 0xdd, 0x87, 0x62, 0x9b}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc8, 0x3f, 0xe0, 0xe7, 0x57, 0x0, 0x5d, 0x60, 0xf3, 0x55, 0x64, 0x71, 0x80, 0x3c, 0xca, 0x8, 0x61, 0xb5, 0x3c, 0xe, 0xa1, 0xe4, 0x61, 0xd1, 0x4e, 0xd8, 0xb2, 0x55, 0xdd, 0x87, 0x62, 0x9b}}
return a, nil return a, nil
} }
@ -170,7 +170,7 @@ func _1599053776_add_chat_id_and_typeDownSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1599053776_add_chat_id_and_type.down.sql", size: 0, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1599053776_add_chat_id_and_type.down.sql", size: 0, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55}}
return a, nil return a, nil
} }
@ -190,7 +190,7 @@ func _1599053776_add_chat_id_and_typeUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1599053776_add_chat_id_and_type.up.sql", size: 264, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1599053776_add_chat_id_and_type.up.sql", size: 264, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xea, 0x7a, 0xf9, 0xc4, 0xa2, 0x96, 0x2e, 0xf9, 0x8f, 0x7, 0xf1, 0x1e, 0x73, 0x8a, 0xa6, 0x3a, 0x13, 0x4, 0x73, 0x82, 0x83, 0xb, 0xe3, 0xb5, 0x3b, 0x7e, 0xd, 0x23, 0xce, 0x98, 0xd4, 0xdc}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xea, 0x7a, 0xf9, 0xc4, 0xa2, 0x96, 0x2e, 0xf9, 0x8f, 0x7, 0xf1, 0x1e, 0x73, 0x8a, 0xa6, 0x3a, 0x13, 0x4, 0x73, 0x82, 0x83, 0xb, 0xe3, 0xb5, 0x3b, 0x7e, 0xd, 0x23, 0xce, 0x98, 0xd4, 0xdc}}
return a, nil return a, nil
} }
@ -210,7 +210,7 @@ func docGo() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "doc.go", size: 382, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "doc.go", size: 382, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc0, 0x2f, 0x1e, 0x64, 0x9, 0x93, 0xe4, 0x8b, 0xf2, 0x98, 0x5a, 0x45, 0xe2, 0x80, 0x88, 0x67, 0x7a, 0x2d, 0xd7, 0x4b, 0xd1, 0x73, 0xb6, 0x6d, 0x15, 0xc2, 0x0, 0x34, 0xcd, 0xa0, 0xdb, 0x20}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc0, 0x2f, 0x1e, 0x64, 0x9, 0x93, 0xe4, 0x8b, 0xf2, 0x98, 0x5a, 0x45, 0xe2, 0x80, 0x88, 0x67, 0x7a, 0x2d, 0xd7, 0x4b, 0xd1, 0x73, 0xb6, 0x6d, 0x15, 0xc2, 0x0, 0x34, 0xcd, 0xa0, 0xdb, 0x20}}
return a, nil return a, nil
} }

View File

@ -88,7 +88,7 @@ func _1593601728_initial_schemaDownSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1593601728_initial_schema.down.sql", size: 200, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1593601728_initial_schema.down.sql", size: 200, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x88, 0x8a, 0x61, 0x81, 0x57, 0x45, 0x9b, 0x97, 0x9b, 0x1f, 0xf6, 0x94, 0x8a, 0x20, 0xb3, 0x2b, 0xff, 0x69, 0x49, 0xf4, 0x58, 0xcc, 0xd0, 0x55, 0xcc, 0x9a, 0x8b, 0xb6, 0x7f, 0x29, 0x53, 0xc1}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x88, 0x8a, 0x61, 0x81, 0x57, 0x45, 0x9b, 0x97, 0x9b, 0x1f, 0xf6, 0x94, 0x8a, 0x20, 0xb3, 0x2b, 0xff, 0x69, 0x49, 0xf4, 0x58, 0xcc, 0xd0, 0x55, 0xcc, 0x9a, 0x8b, 0xb6, 0x7f, 0x29, 0x53, 0xc1}}
return a, nil return a, nil
} }
@ -108,7 +108,7 @@ func _1593601728_initial_schemaUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1593601728_initial_schema.up.sql", size: 675, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1593601728_initial_schema.up.sql", size: 675, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfd, 0x61, 0x90, 0x79, 0xd9, 0x14, 0x65, 0xe9, 0x96, 0x53, 0x17, 0x33, 0x54, 0xeb, 0x8b, 0x5d, 0x95, 0x99, 0x10, 0x36, 0x58, 0xdd, 0xb2, 0xbf, 0x45, 0xd9, 0xbb, 0xc4, 0x92, 0xe, 0xce, 0x2}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfd, 0x61, 0x90, 0x79, 0xd9, 0x14, 0x65, 0xe9, 0x96, 0x53, 0x17, 0x33, 0x54, 0xeb, 0x8b, 0x5d, 0x95, 0x99, 0x10, 0x36, 0x58, 0xdd, 0xb2, 0xbf, 0x45, 0xd9, 0xbb, 0xc4, 0x92, 0xe, 0xce, 0x2}}
return a, nil return a, nil
} }
@ -128,7 +128,7 @@ func _1598419937_add_push_notifications_tableDownSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1598419937_add_push_notifications_table.down.sql", size: 51, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1598419937_add_push_notifications_table.down.sql", size: 51, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc, 0x98, 0xc8, 0x30, 0x45, 0x5b, 0xc5, 0x7d, 0x13, 0x5d, 0xe7, 0xc8, 0x23, 0x43, 0xf7, 0xdc, 0x9c, 0xe2, 0xdd, 0x63, 0xf0, 0xb7, 0x16, 0x40, 0xc, 0xda, 0xb9, 0x16, 0x70, 0x2b, 0x5a, 0x7e}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc, 0x98, 0xc8, 0x30, 0x45, 0x5b, 0xc5, 0x7d, 0x13, 0x5d, 0xe7, 0xc8, 0x23, 0x43, 0xf7, 0xdc, 0x9c, 0xe2, 0xdd, 0x63, 0xf0, 0xb7, 0x16, 0x40, 0xc, 0xda, 0xb9, 0x16, 0x70, 0x2b, 0x5a, 0x7e}}
return a, nil return a, nil
} }
@ -148,7 +148,7 @@ func _1598419937_add_push_notifications_tableUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1598419937_add_push_notifications_table.up.sql", size: 104, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1598419937_add_push_notifications_table.up.sql", size: 104, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2, 0x3e, 0xef, 0xf, 0xc2, 0xdf, 0xbc, 0x99, 0x7a, 0xc2, 0xd3, 0x64, 0x4f, 0x4c, 0x7e, 0xfc, 0x2e, 0x8c, 0xa7, 0x54, 0xd3, 0x4d, 0x25, 0x98, 0x41, 0xbc, 0xea, 0xd7, 0x2, 0xc1, 0xd0, 0x52}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2, 0x3e, 0xef, 0xf, 0xc2, 0xdf, 0xbc, 0x99, 0x7a, 0xc2, 0xd3, 0x64, 0x4f, 0x4c, 0x7e, 0xfc, 0x2e, 0x8c, 0xa7, 0x54, 0xd3, 0x4d, 0x25, 0x98, 0x41, 0xbc, 0xea, 0xd7, 0x2, 0xc1, 0xd0, 0x52}}
return a, nil return a, nil
} }
@ -168,7 +168,7 @@ func docGo() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "doc.go", size: 382, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "doc.go", size: 382, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc0, 0x2f, 0x1e, 0x64, 0x9, 0x93, 0xe4, 0x8b, 0xf2, 0x98, 0x5a, 0x45, 0xe2, 0x80, 0x88, 0x67, 0x7a, 0x2d, 0xd7, 0x4b, 0xd1, 0x73, 0xb6, 0x6d, 0x15, 0xc2, 0x0, 0x34, 0xcd, 0xa0, 0xdb, 0x20}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc0, 0x2f, 0x1e, 0x64, 0x9, 0x93, 0xe4, 0x8b, 0xf2, 0x98, 0x5a, 0x45, 0xe2, 0x80, 0x88, 0x67, 0x7a, 0x2d, 0xd7, 0x4b, 0xd1, 0x73, 0xb6, 0x6d, 0x15, 0xc2, 0x0, 0x34, 0xcd, 0xa0, 0xdb, 0x20}}
return a, nil return a, nil
} }

View File

@ -12,10 +12,11 @@ var ErrEditMessageInvalidID = errors.New("edit-message: invalid id")
var ErrEditMessageInvalidText = errors.New("edit-message: invalid text") var ErrEditMessageInvalidText = errors.New("edit-message: invalid text")
type EditMessage struct { type EditMessage struct {
ID types.HexBytes `json:"id"` ID types.HexBytes `json:"id"`
Text string `json:"text"` Text string `json:"text"`
ContentType protobuf.ChatMessage_ContentType `json:"content-type"` ContentType protobuf.ChatMessage_ContentType `json:"content-type"`
LinkPreviews []common.LinkPreview `json:"linkPreviews"` LinkPreviews []common.LinkPreview `json:"linkPreviews"`
StatusLinkPreviews []common.StatusLinkPreview `json:"statusLinkPreviews"`
} }
func (e *EditMessage) Validate() error { func (e *EditMessage) Validate() error {

View File

@ -89,7 +89,7 @@ func _1561059284_add_waku_keysDownSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1561059284_add_waku_keys.down.sql", size: 22, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1561059284_add_waku_keys.down.sql", size: 22, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe5, 0x2a, 0x7e, 0x9, 0xa3, 0xdd, 0xc6, 0x3, 0xfa, 0xaa, 0x98, 0xa0, 0x26, 0x5e, 0x67, 0x43, 0xe6, 0x20, 0xfd, 0x10, 0xfd, 0x60, 0x89, 0x17, 0x13, 0x87, 0x1b, 0x44, 0x36, 0x79, 0xb6, 0x60}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe5, 0x2a, 0x7e, 0x9, 0xa3, 0xdd, 0xc6, 0x3, 0xfa, 0xaa, 0x98, 0xa0, 0x26, 0x5e, 0x67, 0x43, 0xe6, 0x20, 0xfd, 0x10, 0xfd, 0x60, 0x89, 0x17, 0x13, 0x87, 0x1b, 0x44, 0x36, 0x79, 0xb6, 0x60}}
return a, nil return a, nil
} }
@ -109,7 +109,7 @@ func _1561059284_add_waku_keysUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1561059284_add_waku_keys.up.sql", size: 109, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1561059284_add_waku_keys.up.sql", size: 109, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa9, 0x5c, 0x8, 0x32, 0xef, 0x12, 0x88, 0x21, 0xd, 0x7a, 0x42, 0x4d, 0xe7, 0x2d, 0x6c, 0x99, 0xb6, 0x1, 0xf1, 0xba, 0x2c, 0x40, 0x8d, 0xa9, 0x4b, 0xe6, 0xc4, 0x21, 0xec, 0x47, 0x6b, 0xf7}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa9, 0x5c, 0x8, 0x32, 0xef, 0x12, 0x88, 0x21, 0xd, 0x7a, 0x42, 0x4d, 0xe7, 0x2d, 0x6c, 0x99, 0xb6, 0x1, 0xf1, 0xba, 0x2c, 0x40, 0x8d, 0xa9, 0x4b, 0xe6, 0xc4, 0x21, 0xec, 0x47, 0x6b, 0xf7}}
return a, nil return a, nil
} }
@ -129,7 +129,7 @@ func _1616691080_add_wakuv2_keysDownSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1616691080_add_wakuV2_keys.down.sql", size: 24, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1616691080_add_wakuV2_keys.down.sql", size: 24, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x42, 0xb6, 0x23, 0x70, 0xb8, 0x63, 0x18, 0x61, 0xea, 0x35, 0x6e, 0xae, 0xe9, 0x71, 0x89, 0xa, 0xa5, 0x72, 0xa2, 0x64, 0xaa, 0x45, 0x1, 0xf, 0xfc, 0xee, 0x1b, 0xd9, 0xd2, 0x27, 0xf4, 0xe2}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x42, 0xb6, 0x23, 0x70, 0xb8, 0x63, 0x18, 0x61, 0xea, 0x35, 0x6e, 0xae, 0xe9, 0x71, 0x89, 0xa, 0xa5, 0x72, 0xa2, 0x64, 0xaa, 0x45, 0x1, 0xf, 0xfc, 0xee, 0x1b, 0xd9, 0xd2, 0x27, 0xf4, 0xe2}}
return a, nil return a, nil
} }
@ -149,7 +149,7 @@ func _1616691080_add_wakuv2_keysUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1616691080_add_wakuV2_keys.up.sql", size: 111, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1616691080_add_wakuV2_keys.up.sql", size: 111, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x10, 0xf0, 0x97, 0x25, 0xfe, 0x96, 0x2c, 0xa8, 0x62, 0x4a, 0x71, 0x75, 0xff, 0x5f, 0x43, 0x1e, 0x71, 0x53, 0xf1, 0xde, 0xf, 0xcf, 0xcd, 0x87, 0x15, 0x61, 0x9d, 0x25, 0x2e, 0xaf, 0x18, 0x99}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x10, 0xf0, 0x97, 0x25, 0xfe, 0x96, 0x2c, 0xa8, 0x62, 0x4a, 0x71, 0x75, 0xff, 0x5f, 0x43, 0x1e, 0x71, 0x53, 0xf1, 0xde, 0xf, 0xcf, 0xcd, 0x87, 0x15, 0x61, 0x9d, 0x25, 0x2e, 0xaf, 0x18, 0x99}}
return a, nil return a, nil
} }
@ -169,7 +169,7 @@ func _1634723014_add_wakuv2_keysUpSql() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "1634723014_add_wakuV2_keys.up.sql", size: 125, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "1634723014_add_wakuV2_keys.up.sql", size: 125, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7e, 0xe1, 0x7a, 0x1e, 0x6, 0xad, 0x1b, 0x37, 0xdb, 0xea, 0x94, 0xaf, 0xe0, 0x7d, 0xc9, 0xd6, 0xda, 0x52, 0x71, 0x8a, 0x44, 0xb3, 0xa6, 0x7b, 0x1e, 0x90, 0xdb, 0x1e, 0x5a, 0xa, 0x40, 0x26}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7e, 0xe1, 0x7a, 0x1e, 0x6, 0xad, 0x1b, 0x37, 0xdb, 0xea, 0x94, 0xaf, 0xe0, 0x7d, 0xc9, 0xd6, 0xda, 0x52, 0x71, 0x8a, 0x44, 0xb3, 0xa6, 0x7b, 0x1e, 0x90, 0xdb, 0x1e, 0x5a, 0xa, 0x40, 0x26}}
return a, nil return a, nil
} }
@ -189,7 +189,7 @@ func docGo() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "doc.go", size: 373, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "doc.go", size: 373, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x23, 0x6a, 0xc1, 0xce, 0x94, 0xf6, 0xef, 0xf1, 0x97, 0x95, 0xb, 0x35, 0xaf, 0x5f, 0xe7, 0x5f, 0xac, 0x6e, 0xb8, 0xab, 0xba, 0xb5, 0x35, 0x97, 0x22, 0x36, 0x11, 0xce, 0x44, 0xfc, 0xfa, 0xac}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x23, 0x6a, 0xc1, 0xce, 0x94, 0xf6, 0xef, 0xf1, 0x97, 0x95, 0xb, 0x35, 0xaf, 0x5f, 0xe7, 0x5f, 0xac, 0x6e, 0xb8, 0xab, 0xba, 0xb5, 0x35, 0x97, 0x22, 0x36, 0x11, 0xce, 0x44, 0xfc, 0xfa, 0xac}}
return a, nil return a, nil
} }

View File

@ -3,9 +3,7 @@ package server
import ( import (
"bytes" "bytes"
"database/sql" "database/sql"
"encoding/json"
"errors" "errors"
"fmt"
"image" "image"
"image/color" "image/color"
"net/http" "net/http"
@ -22,17 +20,17 @@ import (
"github.com/status-im/status-go/multiaccounts" "github.com/status-im/status-go/multiaccounts"
"github.com/status-im/status-go/protocol/identity/colorhash" "github.com/status-im/status-go/protocol/identity/colorhash"
"github.com/status-im/status-go/protocol/identity/ring" "github.com/status-im/status-go/protocol/identity/ring"
"github.com/status-im/status-go/protocol/protobuf"
) )
const ( const (
basePath = "/messages" basePath = "/messages"
imagesPath = basePath + "/images" imagesPath = basePath + "/images"
audioPath = basePath + "/audio" audioPath = basePath + "/audio"
ipfsPath = "/ipfs" ipfsPath = "/ipfs"
discordAuthorsPath = "/discord/authors" discordAuthorsPath = "/discord/authors"
discordAttachmentsPath = basePath + "/discord/attachments" discordAttachmentsPath = basePath + "/discord/attachments"
LinkPreviewThumbnailPath = "/link-preview/thumbnail" LinkPreviewThumbnailPath = "/link-preview/thumbnail"
StatusLinkPreviewThumbnailPath = "/status-link-preview/thumbnail"
// Handler routes for pairing // Handler routes for pairing
accountImagesPath = "/accountImages" accountImagesPath = "/accountImages"
@ -80,6 +78,7 @@ type ImageParams struct {
URL string URL string
MessageID string MessageID string
AttachmentID string AttachmentID string
ImageID string
Hash string Hash string
Download bool Download bool
@ -266,6 +265,10 @@ func ParseImageParams(logger *zap.Logger, params url.Values) ImageParams {
parsed.AuthorID = authorIds[0] parsed.AuthorID = authorIds[0]
} }
if imageIds := params["image-id"]; len(imageIds) != 0 {
parsed.ImageID = imageIds[0]
}
urls := params["url"] urls := params["url"]
if len(urls) != 0 { if len(urls) != 0 {
parsed.URL = urls[0] parsed.URL = urls[0]
@ -917,66 +920,3 @@ func handleQRCodeGeneration(multiaccountsDB *multiaccounts.Database, logger *zap
} }
} }
} }
func getThumbnailPayload(db *sql.DB, logger *zap.Logger, msgID string, thumbnailURL string) ([]byte, error) {
var payload []byte
var result []byte
err := db.QueryRow(`SELECT unfurled_links FROM user_messages WHERE id = ?`, msgID).Scan(&result)
if err != nil {
return payload, fmt.Errorf("could not find message with message-id '%s': %w", msgID, err)
}
var links []*protobuf.UnfurledLink
err = json.Unmarshal(result, &links)
if err != nil {
return payload, fmt.Errorf("failed to unmarshal protobuf.UrlPreview: %w", err)
}
for _, p := range links {
if p.Url == thumbnailURL {
payload = p.ThumbnailPayload
break
}
}
return payload, nil
}
func handleLinkPreviewThumbnail(db *sql.DB, logger *zap.Logger) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
params := r.URL.Query()
parsed := ParseImageParams(logger, params)
if parsed.MessageID == "" {
http.Error(w, "missing query parameter 'message-id'", http.StatusBadRequest)
return
}
if parsed.URL == "" {
http.Error(w, "missing query parameter 'url'", http.StatusBadRequest)
return
}
thumbnail, err := getThumbnailPayload(db, logger, parsed.MessageID, parsed.URL)
if err != nil {
logger.Error("failed to get thumbnail", zap.String("msgID", parsed.MessageID))
http.Error(w, "failed to get thumbnail", http.StatusInternalServerError)
return
}
mimeType, err := images.GetMimeType(thumbnail)
if err != nil {
http.Error(w, "mime type not supported", http.StatusNotImplemented)
return
}
w.Header().Set("Content-Type", "image/"+mimeType)
w.Header().Set("Cache-Control", "no-store")
_, err = w.Write(thumbnail)
if err != nil {
logger.Error("failed to write response", zap.Error(err))
}
}
}

View File

@ -0,0 +1,209 @@
package server
import (
"database/sql"
"encoding/json"
"fmt"
"net/http"
"github.com/golang/protobuf/proto"
"go.uber.org/zap"
"github.com/status-im/status-go/images"
"github.com/status-im/status-go/protocol/common"
"github.com/status-im/status-go/protocol/protobuf"
)
func getThumbnailPayload(db *sql.DB, logger *zap.Logger, msgID string, thumbnailURL string) ([]byte, error) {
var payload []byte
var result []byte
err := db.QueryRow(`SELECT unfurled_links FROM user_messages WHERE id = ?`, msgID).Scan(&result)
if err != nil {
return payload, fmt.Errorf("could not find message with message-id '%s': %w", msgID, err)
}
var links []*protobuf.UnfurledLink
err = json.Unmarshal(result, &links)
if err != nil {
return payload, fmt.Errorf("failed to unmarshal protobuf.UrlPreview: %w", err)
}
for _, p := range links {
if p.Url == thumbnailURL {
payload = p.ThumbnailPayload
break
}
}
return payload, nil
}
func handleLinkPreviewThumbnail(db *sql.DB, logger *zap.Logger) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
params := r.URL.Query()
parsed := ParseImageParams(logger, params)
if parsed.MessageID == "" {
http.Error(w, "missing query parameter 'message-id'", http.StatusBadRequest)
return
}
if parsed.URL == "" {
http.Error(w, "missing query parameter 'url'", http.StatusBadRequest)
return
}
thumbnail, err := getThumbnailPayload(db, logger, parsed.MessageID, parsed.URL)
if err != nil {
logger.Error("failed to get thumbnail", zap.String("msgID", parsed.MessageID))
http.Error(w, "failed to get thumbnail", http.StatusInternalServerError)
return
}
mimeType, err := images.GetMimeType(thumbnail)
if err != nil {
http.Error(w, "mime type not supported", http.StatusNotImplemented)
return
}
w.Header().Set("Content-Type", "image/"+mimeType)
w.Header().Set("Cache-Control", "no-store")
_, err = w.Write(thumbnail)
if err != nil {
logger.Error("failed to write response", zap.Error(err))
}
}
}
func getStatusLinkPreviewImage(p *protobuf.UnfurledStatusLink, imageID common.MediaServerImageID) ([]byte, error) {
switch imageID {
case common.MediaServerContactIcon:
contact := p.GetContact()
if contact == nil {
return nil, fmt.Errorf("this is not a contact link")
}
if contact.Icon == nil {
return nil, fmt.Errorf("contact icon is empty")
}
return contact.Icon.Payload, nil
case common.MediaServerCommunityIcon:
community := p.GetCommunity()
if community == nil {
return nil, fmt.Errorf("this is not a community link")
}
if community.Icon == nil {
return nil, fmt.Errorf("community icon is empty")
}
return community.Icon.Payload, nil
case common.MediaServerCommunityBanner:
community := p.GetCommunity()
if community == nil {
return nil, fmt.Errorf("this is not a community link")
}
if community.Banner == nil {
return nil, fmt.Errorf("community banner is empty")
}
return community.Banner.Payload, nil
case common.MediaServerChannelCommunityIcon:
channel := p.GetChannel()
if channel == nil {
return nil, fmt.Errorf("this is not a community channel link")
}
if channel.Community == nil {
return nil, fmt.Errorf("channel community is empty")
}
if channel.Community.Icon == nil {
return nil, fmt.Errorf("channel community icon is empty")
}
return channel.Community.Icon.Payload, nil
case common.MediaServerChannelCommunityBanner:
channel := p.GetChannel()
if channel == nil {
return nil, fmt.Errorf("this is not a community channel link")
}
if channel.Community == nil {
return nil, fmt.Errorf("channel community is empty")
}
if channel.Community.Banner == nil {
return nil, fmt.Errorf("channel community banner is empty")
}
return channel.Community.Banner.Payload, nil
}
return nil, fmt.Errorf("value not supported")
}
func getStatusLinkPreviewThumbnail(db *sql.DB, messageID string, URL string, imageID common.MediaServerImageID) ([]byte, int, error) {
var messageLinks []byte
err := db.QueryRow(`SELECT unfurled_status_links FROM user_messages WHERE id = ?`, messageID).Scan(&messageLinks)
if err != nil {
return nil, http.StatusBadRequest, fmt.Errorf("could not find message with message-id '%s': %w", messageID, err)
}
var links protobuf.UnfurledStatusLinks
err = proto.Unmarshal(messageLinks, &links)
if err != nil {
return nil, http.StatusInternalServerError, fmt.Errorf("failed to unmarshal protobuf.UrlPreview: %w", err)
}
for _, p := range links.UnfurledStatusLinks {
if p.Url == URL {
thumbnailPayload, err := getStatusLinkPreviewImage(p, imageID)
if err != nil {
return nil, http.StatusBadRequest, fmt.Errorf("invalid query parameter 'image-id' value: %w", err)
}
return thumbnailPayload, http.StatusOK, nil
}
}
return nil, http.StatusBadRequest, fmt.Errorf("no link preview found for given url")
}
func handleStatusLinkPreviewThumbnail(db *sql.DB, logger *zap.Logger) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
params := r.URL.Query()
parsed := ParseImageParams(logger, params)
if parsed.MessageID == "" {
http.Error(w, "missing query parameter 'message-id'", http.StatusBadRequest)
return
}
if parsed.URL == "" {
http.Error(w, "missing query parameter 'url'", http.StatusBadRequest)
return
}
if parsed.ImageID == "" {
http.Error(w, "missing query parameter 'image-id'", http.StatusBadRequest)
return
}
thumbnail, httpsStatusCode, err := getStatusLinkPreviewThumbnail(db, parsed.MessageID, parsed.URL, common.MediaServerImageID(parsed.ImageID))
if err != nil {
http.Error(w, err.Error(), httpsStatusCode)
return
}
mimeType, err := images.GetMimeType(thumbnail)
if err != nil {
http.Error(w, "mime type not supported", http.StatusNotImplemented)
return
}
w.Header().Set("Content-Type", "image/"+mimeType)
w.Header().Set("Cache-Control", "no-store")
_, err = w.Write(thumbnail)
if err != nil {
logger.Error("failed to write response", zap.Error(err))
}
}
}

View File

@ -8,28 +8,40 @@ import (
"net/url" "net/url"
"testing" "testing"
"github.com/stretchr/testify/require" "github.com/golang/protobuf/proto"
"github.com/stretchr/testify/suite"
"go.uber.org/zap" "go.uber.org/zap"
"github.com/status-im/status-go/appdatabase" "github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/logutils"
"github.com/status-im/status-go/protocol/common" "github.com/status-im/status-go/protocol/common"
"github.com/status-im/status-go/protocol/protobuf" "github.com/status-im/status-go/protocol/protobuf"
"github.com/status-im/status-go/protocol/sqlite" "github.com/status-im/status-go/protocol/sqlite"
"github.com/status-im/status-go/protocol/tt"
"github.com/status-im/status-go/t/helpers" "github.com/status-im/status-go/t/helpers"
) )
func setupTest(t *testing.T) (*sql.DB, *zap.Logger) { func TestHandlersSuite(t *testing.T) {
db, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{}) suite.Run(t, new(HandlersSuite))
require.NoError(t, err)
err = sqlite.Migrate(db)
require.NoError(t, err)
logger := logutils.ZapLogger()
return db, logger
} }
func createUserMessage(t *testing.T, db *sql.DB, msg *common.Message) { type HandlersSuite struct {
suite.Suite
db *sql.DB
logger *zap.Logger
}
func (s *HandlersSuite) SetupTest() {
db, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
s.Require().NoError(err)
err = sqlite.Migrate(db)
s.Require().NoError(err)
s.logger = tt.MustCreateTestLogger()
s.db = db
}
func (s *HandlersSuite) saveUserMessage(msg *common.Message) {
whisperTimestamp := 0 whisperTimestamp := 0
source := "" source := ""
text := "" text := ""
@ -40,7 +52,7 @@ func createUserMessage(t *testing.T, db *sql.DB, msg *common.Message) {
responseTo := "" responseTo := ""
clockValue := 0 clockValue := 0
stmt, err := db.Prepare(` stmt, err := s.db.Prepare(`
INSERT INTO user_messages ( INSERT INTO user_messages (
id, id,
whisper_timestamp, whisper_timestamp,
@ -52,13 +64,25 @@ func createUserMessage(t *testing.T, db *sql.DB, msg *common.Message) {
local_chat_id, local_chat_id,
response_to, response_to,
clock_value, clock_value,
unfurled_links unfurled_links,
) VALUES (?,?,?,?,?,?,?,?,?,?,?) unfurled_status_links
) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)
`) `)
require.NoError(t, err)
links, err := json.Marshal(msg.UnfurledLinks) s.Require().NoError(err)
require.NoError(t, err)
links := []byte{}
statusLinks := []byte{}
if msg.UnfurledLinks != nil {
links, err = json.Marshal(msg.UnfurledLinks)
s.Require().NoError(err)
}
if msg.UnfurledStatusLinks != nil {
statusLinks, err = proto.Marshal(msg.UnfurledStatusLinks)
s.Require().NoError(err)
}
_, err = stmt.Exec( _, err = stmt.Exec(
msg.ID, msg.ID,
@ -72,13 +96,14 @@ func createUserMessage(t *testing.T, db *sql.DB, msg *common.Message) {
responseTo, responseTo,
clockValue, clockValue,
links, links,
statusLinks,
) )
require.NoError(t, err) s.Require().NoError(err)
} }
func httpGetReqRecorder(t *testing.T, handler http.HandlerFunc, reqURL string) *httptest.ResponseRecorder { func (s *HandlersSuite) httpGetReqRecorder(handler http.HandlerFunc, reqURL string) *httptest.ResponseRecorder {
req, err := http.NewRequest("GET", reqURL, nil) req, err := http.NewRequest("GET", reqURL, nil)
require.NoError(t, err) s.Require().NoError(err)
rr := httptest.NewRecorder() rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req) handler.ServeHTTP(rr, req)
@ -86,49 +111,437 @@ func httpGetReqRecorder(t *testing.T, handler http.HandlerFunc, reqURL string) *
return rr return rr
} }
func TestHandleLinkPreviewThumbnail(t *testing.T) { func (s *HandlersSuite) verifyHTTPResponseThumbnail(rr *httptest.ResponseRecorder, expectedPayload []byte) {
db, logger := setupTest(t) s.Require().Equal(expectedPayload, rr.Body.Bytes())
s.Require().Equal("image/jpeg", rr.HeaderMap.Get("Content-Type"))
s.Require().Equal("no-store", rr.HeaderMap.Get("Cache-Control"))
}
func (s *HandlersSuite) TestHandleLinkPreviewThumbnail() {
previewURL := "https://github.com" previewURL := "https://github.com"
defaultPayload := []byte{0xff, 0xd8, 0xff, 0xdb, 0x0, 0x84, 0x0, 0x50, 0x37, 0x3c, 0x46, 0x3c, 0x32, 0x50}
msg := common.Message{ msg := common.Message{
ID: "1", ID: "1",
ChatMessage: &protobuf.ChatMessage{ ChatMessage: &protobuf.ChatMessage{
UnfurledLinks: []*protobuf.UnfurledLink{ UnfurledLinks: []*protobuf.UnfurledLink{
{ {
Type: protobuf.UnfurledLink_LINK, Type: protobuf.UnfurledLink_LINK,
Url: previewURL, Url: previewURL,
ThumbnailWidth: 100, ThumbnailWidth: 100,
ThumbnailHeight: 200, ThumbnailHeight: 200,
ThumbnailPayload: []byte{0xff, 0xd8, 0xff, 0xdb, 0x0, 0x84, 0x0, 0x50, 0x37, 0x3c, 0x46, 0x3c, 0x32, 0x50},
}, },
}, },
}, },
} }
createUserMessage(t, db, &msg) s.saveUserMessage(&msg)
// Test happy path. testCases := []struct {
reqURL := "/dummy?" + url.Values{"message-id": {msg.ID}, "url": {previewURL}}.Encode() Name string
rr := httpGetReqRecorder(t, handleLinkPreviewThumbnail(db, logger), reqURL) ExpectedHTTPStatusCode int
require.Equal(t, http.StatusOK, rr.Code) ThumbnailPayload []byte
require.Equal(t, msg.UnfurledLinks[0].ThumbnailPayload, rr.Body.Bytes()) Parameters url.Values
require.Equal(t, "image/jpeg", rr.HeaderMap.Get("Content-Type")) CheckFunc func(s *HandlersSuite, rr *httptest.ResponseRecorder)
require.Equal(t, "no-store", rr.HeaderMap.Get("Cache-Control")) }{
{
Name: "Test happy path",
ExpectedHTTPStatusCode: http.StatusOK,
ThumbnailPayload: defaultPayload,
Parameters: url.Values{
"message-id": {msg.ID},
"url": {previewURL},
},
CheckFunc: func(s *HandlersSuite, rr *httptest.ResponseRecorder) {
s.verifyHTTPResponseThumbnail(rr, msg.UnfurledLinks[0].ThumbnailPayload)
},
},
{
Name: "Test request with missing 'url' parameter",
ThumbnailPayload: defaultPayload,
ExpectedHTTPStatusCode: http.StatusBadRequest,
Parameters: url.Values{
"message-id": {msg.ID},
},
CheckFunc: func(s *HandlersSuite, rr *httptest.ResponseRecorder) {
s.Require().Equal("missing query parameter 'url'\n", rr.Body.String())
},
},
{
Name: "Test request with missing 'message-id' parameter",
ThumbnailPayload: defaultPayload,
ExpectedHTTPStatusCode: http.StatusBadRequest,
Parameters: url.Values{
"url": {previewURL},
},
CheckFunc: func(s *HandlersSuite, rr *httptest.ResponseRecorder) {
s.Require().Equal("missing query parameter 'message-id'\n", rr.Body.String())
},
},
{
Name: "Test mime type not supported",
ThumbnailPayload: []byte("unsupported image"),
ExpectedHTTPStatusCode: http.StatusNotImplemented,
Parameters: url.Values{
"message-id": {msg.ID},
"url": {previewURL},
},
},
}
// Test bad requests. handler := handleLinkPreviewThumbnail(s.db, s.logger)
reqURL = "/dummy?" + url.Values{"message-id": {msg.ID}}.Encode()
rr = httpGetReqRecorder(t, handleLinkPreviewThumbnail(db, logger), reqURL)
require.Equal(t, http.StatusBadRequest, rr.Code)
require.Equal(t, "missing query parameter 'url'\n", rr.Body.String())
reqURL = "/dummy?" + url.Values{"url": {previewURL}}.Encode() for _, tc := range testCases {
rr = httpGetReqRecorder(t, handleLinkPreviewThumbnail(db, logger), reqURL) s.Run(tc.Name, func() {
require.Equal(t, http.StatusBadRequest, rr.Code) msg.UnfurledLinks[0].ThumbnailPayload = tc.ThumbnailPayload
require.Equal(t, "missing query parameter 'message-id'\n", rr.Body.String()) s.saveUserMessage(&msg)
// Test mime type not supported. requestURL := "/dummy?" + tc.Parameters.Encode()
msg.UnfurledLinks[0].ThumbnailPayload = []byte("unsupported image") rr := s.httpGetReqRecorder(handler, requestURL)
createUserMessage(t, db, &msg) s.Require().Equal(tc.ExpectedHTTPStatusCode, rr.Code)
reqURL = "/dummy?" + url.Values{"message-id": {msg.ID}, "url": {previewURL}}.Encode() if tc.CheckFunc != nil {
rr = httpGetReqRecorder(t, handleLinkPreviewThumbnail(db, logger), reqURL) tc.CheckFunc(s, rr)
require.Equal(t, http.StatusNotImplemented, rr.Code) }
})
}
}
func (s *HandlersSuite) TestHandleStatusLinkPreviewThumbnail() {
contact := &protobuf.UnfurledStatusContactLink{
PublicKey: []byte("PublicKey_1"),
Icon: &protobuf.UnfurledLinkThumbnail{
Width: 10,
Height: 20,
Payload: []byte{0xff, 0xd8, 0xff, 0xdb, 0x0, 0x84, 0x0, 0x50, 0x37, 0x3c, 0x46, 0x3c, 0x32, 0x50},
},
}
contactWithUnsupportedImage := &protobuf.UnfurledStatusContactLink{
PublicKey: []byte("PublicKey_2"),
Icon: &protobuf.UnfurledLinkThumbnail{
Width: 10,
Height: 20,
Payload: []byte("unsupported image"),
},
}
community := &protobuf.UnfurledStatusCommunityLink{
CommunityId: []byte("CommunityId_1"),
Icon: &protobuf.UnfurledLinkThumbnail{
Width: 30,
Height: 40,
Payload: []byte{0xff, 0xd8, 0xff, 0xdb, 0x0, 0x84, 0x0, 0x50, 0x37, 0x3c, 0x46, 0x3c, 0x32, 0x51},
},
Banner: &protobuf.UnfurledLinkThumbnail{
Width: 50,
Height: 60,
Payload: []byte{0xff, 0xd8, 0xff, 0xdb, 0x0, 0x84, 0x0, 0x50, 0x37, 0x3c, 0x46, 0x3c, 0x32, 0x52},
},
}
channel := &protobuf.UnfurledStatusChannelLink{
ChannelUuid: []byte("ChannelUuid_1"),
Community: &protobuf.UnfurledStatusCommunityLink{
CommunityId: []byte("CommunityId_2"),
Icon: &protobuf.UnfurledLinkThumbnail{
Width: 70,
Height: 80,
Payload: []byte{0xff, 0xd8, 0xff, 0xdb, 0x0, 0x84, 0x0, 0x50, 0x37, 0x3c, 0x46, 0x3c, 0x32, 0x53},
},
Banner: &protobuf.UnfurledLinkThumbnail{
Width: 90,
Height: 100,
Payload: []byte{0xff, 0xd8, 0xff, 0xdb, 0x0, 0x84, 0x0, 0x50, 0x37, 0x3c, 0x46, 0x3c, 0x32, 0x54},
},
},
}
unfurledContact := &protobuf.UnfurledStatusLink{
Url: "https://status.app/u/",
Payload: &protobuf.UnfurledStatusLink_Contact{
Contact: contact,
},
}
unfurledContactWithUnsupportedImage := &protobuf.UnfurledStatusLink{
Url: "https://status.app/u/",
Payload: &protobuf.UnfurledStatusLink_Contact{
Contact: contactWithUnsupportedImage,
},
}
unfurledCommunity := &protobuf.UnfurledStatusLink{
Url: "https://status.app/c/",
Payload: &protobuf.UnfurledStatusLink_Community{
Community: community,
},
}
unfurledChannel := &protobuf.UnfurledStatusLink{
Url: "https://status.app/cc/",
Payload: &protobuf.UnfurledStatusLink_Channel{
Channel: channel,
},
}
const (
messageIDContactOnly = "1"
messageIDCommunityOnly = "2"
messageIDChannelOnly = "3"
messageIDAllLinks = "4"
messageIDUnsupportedImage = "5"
)
s.saveUserMessage(&common.Message{
ID: messageIDContactOnly,
ChatMessage: &protobuf.ChatMessage{
UnfurledStatusLinks: &protobuf.UnfurledStatusLinks{
UnfurledStatusLinks: []*protobuf.UnfurledStatusLink{
unfurledContact,
},
},
},
})
s.saveUserMessage(&common.Message{
ID: messageIDCommunityOnly,
ChatMessage: &protobuf.ChatMessage{
UnfurledStatusLinks: &protobuf.UnfurledStatusLinks{
UnfurledStatusLinks: []*protobuf.UnfurledStatusLink{
unfurledCommunity,
},
},
},
})
s.saveUserMessage(&common.Message{
ID: messageIDChannelOnly,
ChatMessage: &protobuf.ChatMessage{
UnfurledStatusLinks: &protobuf.UnfurledStatusLinks{
UnfurledStatusLinks: []*protobuf.UnfurledStatusLink{
unfurledChannel,
},
},
},
})
s.saveUserMessage(&common.Message{
ID: messageIDAllLinks,
ChatMessage: &protobuf.ChatMessage{
UnfurledStatusLinks: &protobuf.UnfurledStatusLinks{
UnfurledStatusLinks: []*protobuf.UnfurledStatusLink{
unfurledContact,
unfurledCommunity,
unfurledChannel,
},
},
},
})
s.saveUserMessage(&common.Message{
ID: messageIDUnsupportedImage,
ChatMessage: &protobuf.ChatMessage{
UnfurledStatusLinks: &protobuf.UnfurledStatusLinks{
UnfurledStatusLinks: []*protobuf.UnfurledStatusLink{
unfurledContactWithUnsupportedImage,
},
},
},
})
testCases := []struct {
Name string
ExpectedHTTPStatusCode int
Parameters url.Values
CheckFunc func(s *HandlersSuite, rr *httptest.ResponseRecorder)
}{
{
Name: "Test valid contact icon link",
Parameters: url.Values{
"message-id": {messageIDContactOnly},
"url": {unfurledContact.Url},
"image-id": {string(common.MediaServerContactIcon)},
},
ExpectedHTTPStatusCode: http.StatusOK,
CheckFunc: func(s *HandlersSuite, rr *httptest.ResponseRecorder) {
s.verifyHTTPResponseThumbnail(rr, unfurledContact.GetContact().Icon.Payload)
},
},
{
Name: "Test invalid request for community icon in a contact link",
Parameters: url.Values{
"message-id": {messageIDContactOnly},
"url": {unfurledContact.Url},
"image-id": {string(common.MediaServerCommunityIcon)},
},
ExpectedHTTPStatusCode: http.StatusBadRequest,
CheckFunc: func(s *HandlersSuite, rr *httptest.ResponseRecorder) {
s.Require().Equal("invalid query parameter 'image-id' value: this is not a community link\n", rr.Body.String())
},
},
{
Name: "Test invalid request for cahnnel community banner in a contact link",
Parameters: url.Values{
"message-id": {messageIDContactOnly},
"url": {unfurledContact.Url},
"image-id": {string(common.MediaServerChannelCommunityBanner)},
},
ExpectedHTTPStatusCode: http.StatusBadRequest,
CheckFunc: func(s *HandlersSuite, rr *httptest.ResponseRecorder) {
s.Require().Equal("invalid query parameter 'image-id' value: this is not a community channel link\n", rr.Body.String())
},
},
{
Name: "Test invalid request for channel community banner in a contact link",
Parameters: url.Values{
"message-id": {messageIDContactOnly},
"url": {unfurledContact.Url},
"image-id": {"contact-banner"},
},
ExpectedHTTPStatusCode: http.StatusBadRequest,
CheckFunc: func(s *HandlersSuite, rr *httptest.ResponseRecorder) {
s.Require().Equal("invalid query parameter 'image-id' value: value not supported\n", rr.Body.String())
},
},
{
Name: "Test valid community icon link",
Parameters: url.Values{
"message-id": {messageIDCommunityOnly},
"url": {unfurledCommunity.Url},
"image-id": {string(common.MediaServerCommunityIcon)},
},
ExpectedHTTPStatusCode: http.StatusOK,
CheckFunc: func(s *HandlersSuite, rr *httptest.ResponseRecorder) {
s.verifyHTTPResponseThumbnail(rr, unfurledCommunity.GetCommunity().Icon.Payload)
},
},
{
Name: "Test valid community banner link",
Parameters: url.Values{
"message-id": {messageIDCommunityOnly},
"url": {unfurledCommunity.Url},
"image-id": {string(common.MediaServerCommunityBanner)},
},
ExpectedHTTPStatusCode: http.StatusOK,
CheckFunc: func(s *HandlersSuite, rr *httptest.ResponseRecorder) {
s.verifyHTTPResponseThumbnail(rr, unfurledCommunity.GetCommunity().Banner.Payload)
},
},
{
Name: "Test valid channel community icon link",
Parameters: url.Values{
"message-id": {messageIDChannelOnly},
"url": {unfurledChannel.Url},
"image-id": {string(common.MediaServerChannelCommunityIcon)},
},
ExpectedHTTPStatusCode: http.StatusOK,
CheckFunc: func(s *HandlersSuite, rr *httptest.ResponseRecorder) {
s.verifyHTTPResponseThumbnail(rr, unfurledChannel.GetChannel().GetCommunity().Icon.Payload)
},
},
{
Name: "Test valid channel community banner link",
Parameters: url.Values{
"message-id": {messageIDChannelOnly},
"url": {unfurledChannel.Url},
"image-id": {string(common.MediaServerChannelCommunityBanner)},
},
ExpectedHTTPStatusCode: http.StatusOK,
CheckFunc: func(s *HandlersSuite, rr *httptest.ResponseRecorder) {
s.verifyHTTPResponseThumbnail(rr, unfurledChannel.GetChannel().GetCommunity().Banner.Payload)
},
},
{
Name: "Test valid contact icon link in a diverse message",
Parameters: url.Values{
"message-id": {messageIDAllLinks},
"url": {unfurledContact.Url},
"image-id": {string(common.MediaServerContactIcon)},
},
ExpectedHTTPStatusCode: http.StatusOK,
CheckFunc: func(s *HandlersSuite, rr *httptest.ResponseRecorder) {
s.verifyHTTPResponseThumbnail(rr, unfurledContact.GetContact().Icon.Payload)
},
},
{
Name: "Test valid community icon link in a diverse message",
Parameters: url.Values{
"message-id": {messageIDAllLinks},
"url": {unfurledCommunity.Url},
"image-id": {string(common.MediaServerCommunityIcon)},
},
ExpectedHTTPStatusCode: http.StatusOK,
CheckFunc: func(s *HandlersSuite, rr *httptest.ResponseRecorder) {
s.verifyHTTPResponseThumbnail(rr, unfurledCommunity.GetCommunity().Icon.Payload)
},
},
{
Name: "Test valid channel community icon link in a diverse message",
Parameters: url.Values{
"message-id": {messageIDAllLinks},
"url": {unfurledChannel.Url},
"image-id": {string(common.MediaServerChannelCommunityIcon)},
},
ExpectedHTTPStatusCode: http.StatusOK,
CheckFunc: func(s *HandlersSuite, rr *httptest.ResponseRecorder) {
s.verifyHTTPResponseThumbnail(rr, unfurledChannel.GetChannel().GetCommunity().Icon.Payload)
},
},
{
Name: "Test mime type not supported",
Parameters: url.Values{
"message-id": {messageIDUnsupportedImage},
"url": {unfurledContactWithUnsupportedImage.Url},
"image-id": {string(common.MediaServerContactIcon)},
},
ExpectedHTTPStatusCode: http.StatusNotImplemented,
},
{
Name: "Test request with missing 'message-id' parameter",
Parameters: url.Values{
"url": {unfurledCommunity.Url},
"image-id": {string(common.MediaServerCommunityIcon)},
},
ExpectedHTTPStatusCode: http.StatusBadRequest,
CheckFunc: func(s *HandlersSuite, rr *httptest.ResponseRecorder) {
s.Require().Equal("missing query parameter 'message-id'\n", rr.Body.String())
},
},
{
Name: "Test request with missing 'url' parameter",
Parameters: url.Values{
"message-id": {messageIDCommunityOnly},
"image-id": {string(common.MediaServerCommunityIcon)},
},
ExpectedHTTPStatusCode: http.StatusBadRequest,
CheckFunc: func(s *HandlersSuite, rr *httptest.ResponseRecorder) {
s.Require().Equal("missing query parameter 'url'\n", rr.Body.String())
},
},
{
Name: "Test request with missing 'image-id' parameter",
Parameters: url.Values{
"message-id": {messageIDCommunityOnly},
"url": {unfurledCommunity.Url},
},
ExpectedHTTPStatusCode: http.StatusBadRequest,
CheckFunc: func(s *HandlersSuite, rr *httptest.ResponseRecorder) {
s.Require().Equal("missing query parameter 'image-id'\n", rr.Body.String())
},
},
}
handler := handleStatusLinkPreviewThumbnail(s.db, s.logger)
for _, tc := range testCases {
s.Run(tc.Name, func() {
requestURL := "/dummy?" + tc.Parameters.Encode()
rr := s.httpGetReqRecorder(handler, requestURL)
s.Require().Equal(tc.ExpectedHTTPStatusCode, rr.Code)
if tc.CheckFunc != nil {
tc.CheckFunc(s, rr)
}
})
}
} }

View File

@ -7,6 +7,7 @@ import (
"github.com/status-im/status-go/ipfs" "github.com/status-im/status-go/ipfs"
"github.com/status-im/status-go/logutils" "github.com/status-im/status-go/logutils"
"github.com/status-im/status-go/multiaccounts" "github.com/status-im/status-go/multiaccounts"
"github.com/status-im/status-go/protocol/common"
"github.com/status-im/status-go/signal" "github.com/status-im/status-go/signal"
) )
@ -37,16 +38,17 @@ func NewMediaServer(db *sql.DB, downloader *ipfs.Downloader, multiaccountsDB *mu
multiaccountsDB: multiaccountsDB, multiaccountsDB: multiaccountsDB,
} }
s.SetHandlers(HandlerPatternMap{ s.SetHandlers(HandlerPatternMap{
accountImagesPath: handleAccountImages(s.multiaccountsDB, s.logger), accountImagesPath: handleAccountImages(s.multiaccountsDB, s.logger),
accountInitialsPath: handleAccountInitials(s.multiaccountsDB, s.logger), accountInitialsPath: handleAccountInitials(s.multiaccountsDB, s.logger),
audioPath: handleAudio(s.db, s.logger), audioPath: handleAudio(s.db, s.logger),
contactImagesPath: handleContactImages(s.db, s.logger), contactImagesPath: handleContactImages(s.db, s.logger),
discordAttachmentsPath: handleDiscordAttachment(s.db, s.logger), discordAttachmentsPath: handleDiscordAttachment(s.db, s.logger),
discordAuthorsPath: handleDiscordAuthorAvatar(s.db, s.logger), discordAuthorsPath: handleDiscordAuthorAvatar(s.db, s.logger),
generateQRCode: handleQRCodeGeneration(s.multiaccountsDB, s.logger), generateQRCode: handleQRCodeGeneration(s.multiaccountsDB, s.logger),
imagesPath: handleImage(s.db, s.logger), imagesPath: handleImage(s.db, s.logger),
ipfsPath: handleIPFS(s.downloader, s.logger), ipfsPath: handleIPFS(s.downloader, s.logger),
LinkPreviewThumbnailPath: handleLinkPreviewThumbnail(s.db, s.logger), LinkPreviewThumbnailPath: handleLinkPreviewThumbnail(s.db, s.logger),
StatusLinkPreviewThumbnailPath: handleStatusLinkPreviewThumbnail(s.db, s.logger),
}) })
return s, nil return s, nil
@ -73,6 +75,13 @@ func (s *MediaServer) MakeLinkPreviewThumbnailURL(msgID string, previewURL strin
return u.String() return u.String()
} }
func (s *MediaServer) MakeStatusLinkPreviewThumbnailURL(msgID string, previewURL string, imageID common.MediaServerImageID) string {
u := s.MakeBaseURL()
u.Path = StatusLinkPreviewThumbnailPath
u.RawQuery = url.Values{"message-id": {msgID}, "url": {previewURL}, "image-id": {string(imageID)}}.Encode()
return u.String()
}
func (s *MediaServer) MakeDiscordAuthorAvatarURL(authorID string) string { func (s *MediaServer) MakeDiscordAuthorAvatarURL(authorID string) string {
u := s.MakeBaseURL() u := s.MakeBaseURL()
u.Path = discordAuthorsPath u.Path = discordAuthorsPath

View File

@ -16,6 +16,7 @@ import (
"github.com/stretchr/testify/suite" "github.com/stretchr/testify/suite"
"github.com/status-im/status-go/images" "github.com/status-im/status-go/images"
"github.com/status-im/status-go/protocol/common"
"github.com/status-im/status-go/server/servertest" "github.com/status-im/status-go/server/servertest"
) )
@ -116,6 +117,16 @@ func (s *ServerURLSuite) TestServer_MakeLinkPreviewThumbnailURL() {
s.serverNoPort.MakeLinkPreviewThumbnailURL("99", "https://github.com")) s.serverNoPort.MakeLinkPreviewThumbnailURL("99", "https://github.com"))
} }
func (s *ServerURLSuite) TestServer_MakeStatusLinkPreviewThumbnailURL() {
s.Require().Equal(
baseURLWithCustomPort+"/status-link-preview/thumbnail?image-id=contact-icon&message-id=99&url=https%3A%2F%2Fstatus.app",
s.server.MakeStatusLinkPreviewThumbnailURL("99", "https://status.app", common.MediaServerContactIcon))
s.testNoPort(
baseURLWithDefaultPort+"/status-link-preview/thumbnail?image-id=contact-icon&message-id=99&url=https%3A%2F%2Fstatus.app",
s.serverNoPort.MakeStatusLinkPreviewThumbnailURL("99", "https://status.app", common.MediaServerContactIcon))
}
func (s *ServerURLSuite) TestServer_MakeAudioURL() { func (s *ServerURLSuite) TestServer_MakeAudioURL() {
s.Require().Equal( s.Require().Equal(
baseURLWithCustomPort+"/messages/audio?messageId=0xde1e7ebee71e", baseURLWithCustomPort+"/messages/audio?messageId=0xde1e7ebee71e",

View File

@ -1166,7 +1166,7 @@ func (api *PublicAPI) GetTextURLs(text string) []string {
// be removed from the response. // be removed from the response.
// //
// This endpoint expects the client to send URLs normalized by GetTextURLs. // This endpoint expects the client to send URLs normalized by GetTextURLs.
func (api *PublicAPI) UnfurlURLs(urls []string) ([]common.LinkPreview, error) { func (api *PublicAPI) UnfurlURLs(urls []string) (protocol.UnfurlURLsResponse, error) {
return api.service.messenger.UnfurlURLs(nil, urls) return api.service.messenger.UnfurlURLs(nil, urls)
} }

View File

@ -104,7 +104,7 @@ func emojisTxt() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "emojis.txt", size: 28134, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "emojis.txt", size: 28134, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf5, 0x28, 0xc, 0x22, 0x34, 0xa1, 0xeb, 0x8, 0x8d, 0xef, 0x38, 0x1b, 0xd8, 0xc2, 0x1a, 0x6d, 0xa2, 0x62, 0xad, 0x43, 0xfc, 0x1c, 0x38, 0xda, 0x8c, 0x3f, 0x34, 0xa, 0x8c, 0x6f, 0x5d, 0xd8}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf5, 0x28, 0xc, 0x22, 0x34, 0xa1, 0xeb, 0x8, 0x8d, 0xef, 0x38, 0x1b, 0xd8, 0xc2, 0x1a, 0x6d, 0xa2, 0x62, 0xad, 0x43, 0xfc, 0x1c, 0x38, 0xda, 0x8c, 0x3f, 0x34, 0xa, 0x8c, 0x6f, 0x5d, 0xd8}}
return a, nil return a, nil
} }
@ -124,7 +124,7 @@ func ConfigReadmeMd() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "../config/README.md", size: 3031, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "../config/README.md", size: 3031, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x15, 0x44, 0x2b, 0x13, 0x14, 0x34, 0xa, 0x66, 0x62, 0x1b, 0xc6, 0x4a, 0x2c, 0x7d, 0x4d, 0x89, 0xfb, 0xc9, 0x69, 0xe4, 0x18, 0x5f, 0x3, 0x98, 0x6d, 0x3c, 0x9e, 0xa8, 0xcd, 0x53, 0x5d, 0x75}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x15, 0x44, 0x2b, 0x13, 0x14, 0x34, 0xa, 0x66, 0x62, 0x1b, 0xc6, 0x4a, 0x2c, 0x7d, 0x4d, 0x89, 0xfb, 0xc9, 0x69, 0xe4, 0x18, 0x5f, 0x3, 0x98, 0x6d, 0x3c, 0x9e, 0xa8, 0xcd, 0x53, 0x5d, 0x75}}
return a, nil return a, nil
} }
@ -144,7 +144,7 @@ func ConfigCliAnonMetricNodeClientJson() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "../config/cli/anon-metric-node-client.json", size: 857, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "../config/cli/anon-metric-node-client.json", size: 857, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x90, 0xdf, 0xcd, 0xc8, 0x92, 0x1d, 0x63, 0x5e, 0xe1, 0xf9, 0x7f, 0xed, 0xf2, 0x68, 0x6b, 0x20, 0xff, 0x1d, 0x3b, 0xc9, 0x7b, 0xb9, 0x6a, 0xba, 0xd3, 0xbd, 0xf7, 0x48, 0x7b, 0x5a, 0x52, 0x79}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x90, 0xdf, 0xcd, 0xc8, 0x92, 0x1d, 0x63, 0x5e, 0xe1, 0xf9, 0x7f, 0xed, 0xf2, 0x68, 0x6b, 0x20, 0xff, 0x1d, 0x3b, 0xc9, 0x7b, 0xb9, 0x6a, 0xba, 0xd3, 0xbd, 0xf7, 0x48, 0x7b, 0x5a, 0x52, 0x79}}
return a, nil return a, nil
} }
@ -164,7 +164,7 @@ func ConfigCliAnonMetricNodeServerJson() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "../config/cli/anon-metric-node-server.json", size: 696, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "../config/cli/anon-metric-node-server.json", size: 696, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf0, 0x2f, 0x97, 0xab, 0x77, 0x61, 0x93, 0x9d, 0x1f, 0x33, 0x18, 0x72, 0xad, 0xce, 0xa3, 0x35, 0xa9, 0x44, 0xbf, 0x29, 0xa8, 0xea, 0x21, 0xb7, 0x22, 0x7f, 0x7d, 0x3a, 0x6b, 0x55, 0x3c, 0x66}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf0, 0x2f, 0x97, 0xab, 0x77, 0x61, 0x93, 0x9d, 0x1f, 0x33, 0x18, 0x72, 0xad, 0xce, 0xa3, 0x35, 0xa9, 0x44, 0xbf, 0x29, 0xa8, 0xea, 0x21, 0xb7, 0x22, 0x7f, 0x7d, 0x3a, 0x6b, 0x55, 0x3c, 0x66}}
return a, nil return a, nil
} }
@ -184,7 +184,7 @@ func ConfigCliFleetEthProdJson() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "../config/cli/fleet-eth.prod.json", size: 3619, mode: os.FileMode(0664), modTime: time.Unix(1685365190, 0)} info := bindataFileInfo{name: "../config/cli/fleet-eth.prod.json", size: 3619, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x92, 0x4f, 0x86, 0x8b, 0x6e, 0x2, 0x27, 0xa3, 0x37, 0x27, 0x74, 0x51, 0xf0, 0x97, 0x5b, 0x64, 0x8e, 0xbd, 0x29, 0xba, 0x75, 0x2d, 0x75, 0x78, 0x46, 0xb9, 0x56, 0x6, 0xb1, 0xf9, 0x85, 0xdd}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x92, 0x4f, 0x86, 0x8b, 0x6e, 0x2, 0x27, 0xa3, 0x37, 0x27, 0x74, 0x51, 0xf0, 0x97, 0x5b, 0x64, 0x8e, 0xbd, 0x29, 0xba, 0x75, 0x2d, 0x75, 0x78, 0x46, 0xb9, 0x56, 0x6, 0xb1, 0xf9, 0x85, 0xdd}}
return a, nil return a, nil
} }
@ -204,7 +204,7 @@ func ConfigCliFleetEthStagingJson() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "../config/cli/fleet-eth.staging.json", size: 2139, mode: os.FileMode(0664), modTime: time.Unix(1685365190, 0)} info := bindataFileInfo{name: "../config/cli/fleet-eth.staging.json", size: 2139, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb0, 0xac, 0xc9, 0x61, 0x97, 0x42, 0x0, 0x3a, 0xfc, 0x78, 0x11, 0xa1, 0xc7, 0x55, 0x71, 0x46, 0x72, 0x3e, 0x52, 0xb0, 0x89, 0x69, 0x7f, 0x8f, 0xf1, 0x26, 0x44, 0xc5, 0xfc, 0x20, 0x9f, 0xa1}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb0, 0xac, 0xc9, 0x61, 0x97, 0x42, 0x0, 0x3a, 0xfc, 0x78, 0x11, 0xa1, 0xc7, 0x55, 0x71, 0x46, 0x72, 0x3e, 0x52, 0xb0, 0x89, 0x69, 0x7f, 0x8f, 0xf1, 0x26, 0x44, 0xc5, 0xfc, 0x20, 0x9f, 0xa1}}
return a, nil return a, nil
} }
@ -224,7 +224,7 @@ func ConfigCliFleetShardsTestJson() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "../config/cli/fleet-shards.test.json", size: 1954, mode: os.FileMode(0664), modTime: time.Unix(1696363813, 0)} info := bindataFileInfo{name: "../config/cli/fleet-shards.test.json", size: 1954, mode: os.FileMode(0644), modTime: time.Unix(1697196255, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xcf, 0xeb, 0x33, 0xd4, 0x3, 0x54, 0xff, 0xda, 0x1f, 0xc4, 0xc, 0x91, 0x88, 0x1e, 0x53, 0xbf, 0x49, 0xa, 0x6c, 0x45, 0xf9, 0x19, 0x91, 0xec, 0xe, 0x1a, 0xfc, 0x14, 0x86, 0x8d, 0xa3, 0x5a}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xcf, 0xeb, 0x33, 0xd4, 0x3, 0x54, 0xff, 0xda, 0x1f, 0xc4, 0xc, 0x91, 0x88, 0x1e, 0x53, 0xbf, 0x49, 0xa, 0x6c, 0x45, 0xf9, 0x19, 0x91, 0xec, 0xe, 0x1a, 0xfc, 0x14, 0x86, 0x8d, 0xa3, 0x5a}}
return a, nil return a, nil
} }
@ -244,7 +244,7 @@ func ConfigCliFleetStatusProdJson() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "../config/cli/fleet-status.prod.json", size: 2338, mode: os.FileMode(0664), modTime: time.Unix(1685365190, 0)} info := bindataFileInfo{name: "../config/cli/fleet-status.prod.json", size: 2338, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x59, 0xea, 0x14, 0x57, 0xed, 0x60, 0x4d, 0xb6, 0x32, 0x7e, 0xd3, 0xbe, 0x1e, 0xc7, 0xfe, 0x42, 0xee, 0xfe, 0x10, 0xe4, 0x22, 0x64, 0xc1, 0xb9, 0xce, 0x34, 0xcd, 0xdd, 0xe3, 0x38, 0x43, 0xd3}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x59, 0xea, 0x14, 0x57, 0xed, 0x60, 0x4d, 0xb6, 0x32, 0x7e, 0xd3, 0xbe, 0x1e, 0xc7, 0xfe, 0x42, 0xee, 0xfe, 0x10, 0xe4, 0x22, 0x64, 0xc1, 0xb9, 0xce, 0x34, 0xcd, 0xdd, 0xe3, 0x38, 0x43, 0xd3}}
return a, nil return a, nil
} }
@ -264,7 +264,7 @@ func ConfigCliFleetStatusTestJson() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "../config/cli/fleet-status.test.json", size: 1457, mode: os.FileMode(0664), modTime: time.Unix(1685365190, 0)} info := bindataFileInfo{name: "../config/cli/fleet-status.test.json", size: 1457, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc9, 0x9f, 0x8f, 0x25, 0x1f, 0x31, 0xbd, 0x72, 0x26, 0xb7, 0xd, 0x7e, 0xcb, 0xbb, 0x12, 0xef, 0x9f, 0x1a, 0x2e, 0xb, 0x96, 0x64, 0x7d, 0x52, 0x9e, 0x68, 0x13, 0x55, 0xd5, 0x88, 0x38, 0x7b}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc9, 0x9f, 0x8f, 0x25, 0x1f, 0x31, 0xbd, 0x72, 0x26, 0xb7, 0xd, 0x7e, 0xcb, 0xbb, 0x12, 0xef, 0x9f, 0x1a, 0x2e, 0xb, 0x96, 0x64, 0x7d, 0x52, 0x9e, 0x68, 0x13, 0x55, 0xd5, 0x88, 0x38, 0x7b}}
return a, nil return a, nil
} }
@ -284,7 +284,7 @@ func ConfigCliFleetWakuv2ProdJson() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "../config/cli/fleet-wakuv2.prod.json", size: 1264, mode: os.FileMode(0664), modTime: time.Unix(1685365190, 0)} info := bindataFileInfo{name: "../config/cli/fleet-wakuv2.prod.json", size: 1264, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x71, 0xb9, 0x1c, 0x57, 0x50, 0xa9, 0x93, 0x70, 0xcd, 0xd7, 0x22, 0xee, 0x65, 0x72, 0x11, 0x71, 0xd3, 0x20, 0xd0, 0xf0, 0x4d, 0x53, 0x94, 0x44, 0x81, 0xbd, 0x11, 0xed, 0x5e, 0x72, 0x0, 0x12}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x71, 0xb9, 0x1c, 0x57, 0x50, 0xa9, 0x93, 0x70, 0xcd, 0xd7, 0x22, 0xee, 0x65, 0x72, 0x11, 0x71, 0xd3, 0x20, 0xd0, 0xf0, 0x4d, 0x53, 0x94, 0x44, 0x81, 0xbd, 0x11, 0xed, 0x5e, 0x72, 0x0, 0x12}}
return a, nil return a, nil
} }
@ -304,7 +304,7 @@ func ConfigCliFleetWakuv2TestJson() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "../config/cli/fleet-wakuv2.test.json", size: 1264, mode: os.FileMode(0664), modTime: time.Unix(1685365190, 0)} info := bindataFileInfo{name: "../config/cli/fleet-wakuv2.test.json", size: 1264, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2c, 0x67, 0x1e, 0xd1, 0x98, 0x7b, 0xf3, 0x9f, 0x76, 0xa0, 0xbe, 0x67, 0x29, 0xdb, 0xd7, 0x3e, 0xb8, 0x7c, 0x65, 0x2d, 0x2, 0x84, 0xe0, 0xab, 0x8d, 0x3d, 0x4a, 0x53, 0xb4, 0xa7, 0x2e, 0xf0}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2c, 0x67, 0x1e, 0xd1, 0x98, 0x7b, 0xf3, 0x9f, 0x76, 0xa0, 0xbe, 0x67, 0x29, 0xdb, 0xd7, 0x3e, 0xb8, 0x7c, 0x65, 0x2d, 0x2, 0x84, 0xe0, 0xab, 0x8d, 0x3d, 0x4a, 0x53, 0xb4, 0xa7, 0x2e, 0xf0}}
return a, nil return a, nil
} }
@ -324,7 +324,7 @@ func ConfigCliLesEnabledJson() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "../config/cli/les-enabled.json", size: 58, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "../config/cli/les-enabled.json", size: 58, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7e, 0xee, 0x27, 0xa7, 0x74, 0xa0, 0x46, 0xa1, 0x41, 0xed, 0x4d, 0x16, 0x5b, 0xf3, 0xf0, 0x7c, 0xc8, 0x2f, 0x6f, 0x47, 0xa4, 0xbb, 0x5f, 0x43, 0x33, 0xd, 0x9, 0x9d, 0xea, 0x9e, 0x15, 0xee}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7e, 0xee, 0x27, 0xa7, 0x74, 0xa0, 0x46, 0xa1, 0x41, 0xed, 0x4d, 0x16, 0x5b, 0xf3, 0xf0, 0x7c, 0xc8, 0x2f, 0x6f, 0x47, 0xa4, 0xbb, 0x5f, 0x43, 0x33, 0xd, 0x9, 0x9d, 0xea, 0x9e, 0x15, 0xee}}
return a, nil return a, nil
} }
@ -344,7 +344,7 @@ func ConfigCliMailserverEnabledJson() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "../config/cli/mailserver-enabled.json", size: 176, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "../config/cli/mailserver-enabled.json", size: 176, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x34, 0xec, 0x81, 0x8b, 0x99, 0xb6, 0xdb, 0xc0, 0x8b, 0x46, 0x97, 0x96, 0xc7, 0x58, 0x30, 0x33, 0xef, 0x54, 0x25, 0x87, 0x7b, 0xb9, 0x94, 0x6b, 0x18, 0xa4, 0x5b, 0x58, 0x67, 0x7c, 0x44, 0xa6}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x34, 0xec, 0x81, 0x8b, 0x99, 0xb6, 0xdb, 0xc0, 0x8b, 0x46, 0x97, 0x96, 0xc7, 0x58, 0x30, 0x33, 0xef, 0x54, 0x25, 0x87, 0x7b, 0xb9, 0x94, 0x6b, 0x18, 0xa4, 0x5b, 0x58, 0x67, 0x7c, 0x44, 0xa6}}
return a, nil return a, nil
} }
@ -364,7 +364,7 @@ func ConfigStatusChainGenesisJson() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "../config/status-chain-genesis.json", size: 612, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "../config/status-chain-genesis.json", size: 612, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb, 0xf0, 0xc, 0x1, 0x95, 0x65, 0x6, 0x55, 0x48, 0x8f, 0x83, 0xa0, 0xb4, 0x81, 0xda, 0xad, 0x30, 0x6d, 0xb2, 0x78, 0x1b, 0x26, 0x4, 0x13, 0x12, 0x9, 0x6, 0xae, 0x3a, 0x2c, 0x1, 0x71}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb, 0xf0, 0xc, 0x1, 0x95, 0x65, 0x6, 0x55, 0x48, 0x8f, 0x83, 0xa0, 0xb4, 0x81, 0xda, 0xad, 0x30, 0x6d, 0xb2, 0x78, 0x1b, 0x26, 0x4, 0x13, 0x12, 0x9, 0x6, 0xae, 0x3a, 0x2c, 0x1, 0x71}}
return a, nil return a, nil
} }
@ -384,7 +384,7 @@ func keysBootnodeKey() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "keys/bootnode.key", size: 65, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "keys/bootnode.key", size: 65, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x31, 0xcf, 0x27, 0xd4, 0x96, 0x2e, 0x32, 0xcd, 0x58, 0x96, 0x2a, 0xe5, 0x8c, 0xa0, 0xf1, 0x73, 0x1f, 0xd6, 0xd6, 0x8b, 0xb, 0x73, 0xd3, 0x2c, 0x84, 0x1a, 0x56, 0xa4, 0x74, 0xb6, 0x95, 0x20}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x31, 0xcf, 0x27, 0xd4, 0x96, 0x2e, 0x32, 0xcd, 0x58, 0x96, 0x2a, 0xe5, 0x8c, 0xa0, 0xf1, 0x73, 0x1f, 0xd6, 0xd6, 0x8b, 0xb, 0x73, 0xd3, 0x2c, 0x84, 0x1a, 0x56, 0xa4, 0x74, 0xb6, 0x95, 0x20}}
return a, nil return a, nil
} }
@ -404,7 +404,7 @@ func keysFirebaseauthkey() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "keys/firebaseauthkey", size: 153, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "keys/firebaseauthkey", size: 153, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe, 0x69, 0x23, 0x64, 0x7d, 0xf9, 0x14, 0x37, 0x6f, 0x2b, 0x1, 0xf0, 0xb0, 0xa4, 0xb2, 0xd0, 0x18, 0xcd, 0xf9, 0xeb, 0x57, 0xa3, 0xfd, 0x79, 0x25, 0xa7, 0x9c, 0x3, 0xce, 0x26, 0xec, 0xe1}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe, 0x69, 0x23, 0x64, 0x7d, 0xf9, 0x14, 0x37, 0x6f, 0x2b, 0x1, 0xf0, 0xb0, 0xa4, 0xb2, 0xd0, 0x18, 0xcd, 0xf9, 0xeb, 0x57, 0xa3, 0xfd, 0x79, 0x25, 0xa7, 0x9c, 0x3, 0xce, 0x26, 0xec, 0xe1}}
return a, nil return a, nil
} }
@ -424,7 +424,7 @@ func keysTestAccount1StatusChainPk() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "keys/test-account1-status-chain.pk", size: 489, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "keys/test-account1-status-chain.pk", size: 489, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8f, 0xba, 0x35, 0x1, 0x2b, 0x9d, 0xad, 0xf0, 0x2d, 0x3c, 0x4d, 0x6, 0xb5, 0x22, 0x2, 0x47, 0xd4, 0x1c, 0xf4, 0x31, 0x2f, 0xb, 0x5b, 0x27, 0x5d, 0x43, 0x97, 0x58, 0x2d, 0xf0, 0xe1, 0xbe}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8f, 0xba, 0x35, 0x1, 0x2b, 0x9d, 0xad, 0xf0, 0x2d, 0x3c, 0x4d, 0x6, 0xb5, 0x22, 0x2, 0x47, 0xd4, 0x1c, 0xf4, 0x31, 0x2f, 0xb, 0x5b, 0x27, 0x5d, 0x43, 0x97, 0x58, 0x2d, 0xf0, 0xe1, 0xbe}}
return a, nil return a, nil
} }
@ -444,7 +444,7 @@ func keysTestAccount1Pk() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "keys/test-account1.pk", size: 491, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "keys/test-account1.pk", size: 491, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9, 0x43, 0xc2, 0xf4, 0x8c, 0xc6, 0x64, 0x25, 0x8c, 0x7, 0x8c, 0xa8, 0x89, 0x2b, 0x7b, 0x9b, 0x4f, 0x81, 0xcb, 0xce, 0x3d, 0xef, 0x82, 0x9c, 0x27, 0x27, 0xa9, 0xc5, 0x46, 0x70, 0x30, 0x38}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9, 0x43, 0xc2, 0xf4, 0x8c, 0xc6, 0x64, 0x25, 0x8c, 0x7, 0x8c, 0xa8, 0x89, 0x2b, 0x7b, 0x9b, 0x4f, 0x81, 0xcb, 0xce, 0x3d, 0xef, 0x82, 0x9c, 0x27, 0x27, 0xa9, 0xc5, 0x46, 0x70, 0x30, 0x38}}
return a, nil return a, nil
} }
@ -464,7 +464,7 @@ func keysTestAccount2StatusChainPk() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "keys/test-account2-status-chain.pk", size: 489, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "keys/test-account2-status-chain.pk", size: 489, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9, 0xf8, 0x5c, 0xe9, 0x92, 0x96, 0x2d, 0x88, 0x2b, 0x8e, 0x42, 0x3f, 0xa4, 0x93, 0x6c, 0xad, 0xe9, 0xc0, 0x1b, 0x8a, 0x8, 0x8c, 0x5e, 0x7a, 0x84, 0xa2, 0xf, 0x9f, 0x77, 0x58, 0x2c, 0x2c}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9, 0xf8, 0x5c, 0xe9, 0x92, 0x96, 0x2d, 0x88, 0x2b, 0x8e, 0x42, 0x3f, 0xa4, 0x93, 0x6c, 0xad, 0xe9, 0xc0, 0x1b, 0x8a, 0x8, 0x8c, 0x5e, 0x7a, 0x84, 0xa2, 0xf, 0x9f, 0x77, 0x58, 0x2c, 0x2c}}
return a, nil return a, nil
} }
@ -484,7 +484,7 @@ func keysTestAccount2Pk() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "keys/test-account2.pk", size: 491, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "keys/test-account2.pk", size: 491, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9f, 0x72, 0xd5, 0x95, 0x5c, 0x5a, 0x99, 0x9d, 0x2f, 0x21, 0x83, 0xd7, 0x10, 0x17, 0x4a, 0x3d, 0x65, 0xc9, 0x26, 0x1a, 0x2c, 0x9d, 0x65, 0x63, 0xd2, 0xa0, 0xfc, 0x7c, 0x0, 0x87, 0x38, 0x9f}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9f, 0x72, 0xd5, 0x95, 0x5c, 0x5a, 0x99, 0x9d, 0x2f, 0x21, 0x83, 0xd7, 0x10, 0x17, 0x4a, 0x3d, 0x65, 0xc9, 0x26, 0x1a, 0x2c, 0x9d, 0x65, 0x63, 0xd2, 0xa0, 0xfc, 0x7c, 0x0, 0x87, 0x38, 0x9f}}
return a, nil return a, nil
} }
@ -504,7 +504,7 @@ func keysTestAccount3BeforeEip55Pk() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "keys/test-account3-before-eip55.pk", size: 489, mode: os.FileMode(0664), modTime: time.Unix(1663713040, 0)} info := bindataFileInfo{name: "keys/test-account3-before-eip55.pk", size: 489, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x81, 0x40, 0x56, 0xc1, 0x5e, 0x10, 0x6e, 0x28, 0x15, 0x3, 0x4e, 0xc4, 0xc4, 0x71, 0x4d, 0x16, 0x99, 0xcc, 0x1b, 0x63, 0xee, 0x10, 0x20, 0xe4, 0x59, 0x52, 0x3f, 0xc0, 0xad, 0x15, 0x13, 0x72}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x81, 0x40, 0x56, 0xc1, 0x5e, 0x10, 0x6e, 0x28, 0x15, 0x3, 0x4e, 0xc4, 0xc4, 0x71, 0x4d, 0x16, 0x99, 0xcc, 0x1b, 0x63, 0xee, 0x10, 0x20, 0xe4, 0x59, 0x52, 0x3f, 0xc0, 0xad, 0x15, 0x13, 0x72}}
return a, nil return a, nil
} }

View File

@ -86,7 +86,7 @@ func configPublicChainAccountsJson() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "config/public-chain-accounts.json", size: 307, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "config/public-chain-accounts.json", size: 307, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x76, 0x5d, 0xc0, 0xfe, 0x57, 0x50, 0x18, 0xec, 0x2d, 0x61, 0x1b, 0xa9, 0x81, 0x11, 0x5f, 0x77, 0xf7, 0xb6, 0x67, 0x82, 0x1, 0x40, 0x68, 0x9d, 0xc5, 0x41, 0xaf, 0xce, 0x43, 0x81, 0x92, 0x96}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x76, 0x5d, 0xc0, 0xfe, 0x57, 0x50, 0x18, 0xec, 0x2d, 0x61, 0x1b, 0xa9, 0x81, 0x11, 0x5f, 0x77, 0xf7, 0xb6, 0x67, 0x82, 0x1, 0x40, 0x68, 0x9d, 0xc5, 0x41, 0xaf, 0xce, 0x43, 0x81, 0x92, 0x96}}
return a, nil return a, nil
} }
@ -106,7 +106,7 @@ func configStatusChainAccountsJson() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "config/status-chain-accounts.json", size: 543, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "config/status-chain-accounts.json", size: 543, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8e, 0xb3, 0x61, 0x51, 0x70, 0x3c, 0x12, 0x3e, 0xf1, 0x1c, 0x81, 0xfb, 0x9a, 0x7c, 0xe3, 0x63, 0xd0, 0x8f, 0x12, 0xc5, 0x2d, 0xf4, 0xea, 0x27, 0x33, 0xef, 0xca, 0xf9, 0x3f, 0x72, 0x44, 0xbf}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8e, 0xb3, 0x61, 0x51, 0x70, 0x3c, 0x12, 0x3e, 0xf1, 0x1c, 0x81, 0xfb, 0x9a, 0x7c, 0xe3, 0x63, 0xd0, 0x8f, 0x12, 0xc5, 0x2d, 0xf4, 0xea, 0x27, 0x33, 0xef, 0xca, 0xf9, 0x3f, 0x72, 0x44, 0xbf}}
return a, nil return a, nil
} }
@ -126,7 +126,7 @@ func configTestDataJson() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "config/test-data.json", size: 84, mode: os.FileMode(0644), modTime: time.Unix(1694703775, 0)} info := bindataFileInfo{name: "config/test-data.json", size: 84, mode: os.FileMode(0644), modTime: time.Unix(1697059193, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xce, 0x9d, 0x80, 0xf5, 0x87, 0xfa, 0x57, 0x1d, 0xa1, 0xd5, 0x7a, 0x10, 0x3, 0xac, 0xd7, 0xf4, 0x64, 0x32, 0x96, 0x2b, 0xb7, 0x21, 0xb7, 0xa6, 0x80, 0x40, 0xe9, 0x65, 0xe3, 0xd6, 0xbd, 0x40}} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xce, 0x9d, 0x80, 0xf5, 0x87, 0xfa, 0x57, 0x1d, 0xa1, 0xd5, 0x7a, 0x10, 0x3, 0xac, 0xd7, 0xf4, 0x64, 0x32, 0x96, 0x2b, 0xb7, 0x21, 0xb7, 0xa6, 0x80, 0x40, 0xe9, 0x65, 0xe3, 0xd6, 0xbd, 0x40}}
return a, nil return a, nil
} }

File diff suppressed because one or more lines are too long