diff --git a/lib/media/media-utils.js b/lib/media/media-utils.js --- a/lib/media/media-utils.js +++ b/lib/media/media-utils.js @@ -46,7 +46,9 @@ (!!media.uri && isBlobServiceURI(media.uri)) || (!!media.holder && isBlobServiceURI(media.holder)) || (!!media.thumbnailURI && isBlobServiceURI(media.thumbnailURI)) || - (!!media.thumbnailHolder && isBlobServiceURI(media.thumbnailHolder)) + (!!media.thumbnailHolder && isBlobServiceURI(media.thumbnailHolder)) || + (!!media.blobURI && isBlobServiceURI(media.blobURI)) || + (!!media.thumbnailBlobURI && isBlobServiceURI(media.thumbnailBlobURI)) ); } diff --git a/lib/types/media-types.js b/lib/types/media-types.js --- a/lib/types/media-types.js +++ b/lib/types/media-types.js @@ -672,25 +672,33 @@ localMediaSelection: t.maybe(nativeMediaSelectionValidator), }); +// old message formats (native codeVersion < FUTURE_CODE_VERSION) used holder +// new format uses blobURI. Effectively, they both mean blob URI +type ImageBlobURI = { +holder: string } | { +blobURI: string }; + export type EncryptedImage = { + ...ImageBlobURI, +id: string, - // a media URI for keyserver uploads / blob holder for Blob service uploads - +holder: string, +encryptionKey: string, +type: 'encrypted_photo', +dimensions: Dimensions, +thumbHash: ?string, }; -export const encryptedImageValidator: TInterface = - tShape({ - id: tID, - holder: t.String, - encryptionKey: t.String, - type: tString('encrypted_photo'), - dimensions: dimensionsValidator, - thumbHash: t.maybe(t.String), - }); +const encryptedImageCommonsValidator = tShape({ + blobURI: t.maybe(t.String), + id: tID, + encryptionKey: t.String, + type: tString('encrypted_photo'), + dimensions: dimensionsValidator, + thumbHash: t.maybe(t.String), +}); + +export const encryptedImageValidator: TUnion = + t.union([ + tShape({ ...encryptedImageCommonsValidator.meta.props, holder: t.String }), + tShape({ ...encryptedImageCommonsValidator.meta.props, blobURI: t.String }), + ]); export type Video = { +id: string, @@ -717,33 +725,47 @@ localMediaSelection: t.maybe(nativeMediaSelectionValidator), }); +// old message formats (native codeVersion < FUTURE_CODE_VERSION) used holder +// new format uses blobURI. Effectively, they both mean blob URI +type VideoBlobURI = + | { +holder: string, +thumbnailHolder: string } + | { +blobURI: string, +thumbnailBlobURI: string }; + export type EncryptedVideo = { + ...VideoBlobURI, +id: string, - // a media URI for keyserver uploads / blob holder for Blob service uploads - +holder: string, +encryptionKey: string, +type: 'encrypted_video', +dimensions: Dimensions, +loop?: boolean, +thumbnailID: string, - +thumbnailHolder: string, +thumbnailEncryptionKey: string, +thumbnailThumbHash: ?string, }; -export const encryptedVideoValidator: TInterface = - tShape({ - id: tID, - holder: t.String, - encryptionKey: t.String, - type: tString('encrypted_video'), - dimensions: dimensionsValidator, - loop: t.maybe(t.Boolean), - thumbnailID: tID, - thumbnailHolder: t.String, - thumbnailEncryptionKey: t.String, - thumbnailThumbHash: t.maybe(t.String), - }); +const encryptedVideoCommonsValidator = tShape({ + id: tID, + encryptionKey: t.String, + type: tString('encrypted_video'), + dimensions: dimensionsValidator, + loop: t.maybe(t.Boolean), + thumbnailID: tID, + thumbnailEncryptionKey: t.String, + thumbnailThumbHash: t.maybe(t.String), +}); +export const encryptedVideoValidator: TUnion = + t.union([ + tShape({ + ...encryptedVideoCommonsValidator.meta.props, + holder: t.String, + thumbnailHolder: t.String, + }), + tShape({ + ...encryptedVideoCommonsValidator.meta.props, + blobURI: t.String, + thumbnailBlobURI: t.String, + }), + ]); export type Media = Image | Video | EncryptedImage | EncryptedVideo;