### With a contact #### Including all data types ```jsx const outgoing = new Whisper.Message({ type: 'outgoing', sent_at: Date.now() - 18000000, contact: [ { name: { displayName: 'Someone Somewhere', }, number: [ { value: util.CONTACTS[0].id, type: 1, }, ], avatar: { avatar: { path: util.gifObjectUrl, }, }, }, ], }); const incoming = new Whisper.Message( Object.assign({}, outgoing.attributes, { source: '+12025550011', type: 'incoming', }) ); const View = Whisper.MessageView; ; ``` #### In group conversation ```jsx const outgoing = new Whisper.Message({ type: 'outgoing', sent_at: Date.now() - 18000000, contact: [ { name: { displayName: 'Someone Somewhere', }, number: [ { value: util.CONTACTS[0].id, type: 1, }, ], avatar: { avatar: { path: util.gifObjectUrl, }, }, }, ], }); const incoming = new Whisper.Message( Object.assign({}, outgoing.attributes, { source: '+12025550011', type: 'incoming', }) ); const View = Whisper.MessageView; ; ``` #### If contact has no signal account ```jsx const outgoing = new Whisper.Message({ type: 'outgoing', sent_at: Date.now() - 18000000, contact: [ { name: { displayName: 'Someone Somewhere', }, number: [ { value: '+12025551000', type: 1, }, ], avatar: { avatar: { path: util.gifObjectUrl, }, }, }, ], }); const incoming = new Whisper.Message( Object.assign({}, outgoing.attributes, { source: '+12025550011', type: 'incoming', }) ); const View = Whisper.MessageView; ; ``` #### With organization name instead of name ```jsx const outgoing = new Whisper.Message({ type: 'outgoing', sent_at: Date.now() - 18000000, contact: [ { organization: 'United Somewheres, Inc.', email: [ { value: 'someone@somewheres.com', type: 2, }, ], avatar: { avatar: { path: util.gifObjectUrl, }, }, }, ], }); const incoming = new Whisper.Message( Object.assign({}, outgoing.attributes, { source: '+12025550011', type: 'incoming', }) ); const View = Whisper.MessageView; ; ``` #### No displayName or organization ```jsx const outgoing = new Whisper.Message({ type: 'outgoing', sent_at: Date.now() - 18000000, contact: [ { name: { givenName: 'Someone', }, number: [ { value: '+12025551000', type: 1, }, ], avatar: { avatar: { path: util.gifObjectUrl, }, }, }, ], }); const incoming = new Whisper.Message( Object.assign({}, outgoing.attributes, { source: '+12025550011', type: 'incoming', }) ); const View = Whisper.MessageView; ; ``` #### Default avatar ```jsx const outgoing = new Whisper.Message({ type: 'outgoing', sent_at: Date.now() - 18000000, contact: [ { name: { displayName: 'Someone Somewhere', }, number: [ { value: util.CONTACTS[0].id, type: 1, }, ], }, ], }); const incoming = new Whisper.Message( Object.assign({}, outgoing.attributes, { source: '+12025550011', type: 'incoming', }) ); const View = Whisper.MessageView; ; ``` #### Empty contact ```jsx const outgoing = new Whisper.Message({ type: 'outgoing', sent_at: Date.now() - 18000000, contact: [{}], }); const incoming = new Whisper.Message( Object.assign({}, outgoing.attributes, { source: '+12025550011', type: 'incoming', }) ); const View = Whisper.MessageView; ; ``` #### Contact with caption (cannot currently be sent) ```jsx const outgoing = new Whisper.Message({ type: 'outgoing', sent_at: Date.now() - 18000000, body: 'I want to introduce you to Someone...', contact: [ { name: { displayName: 'Someone Somewhere', }, number: [ { value: util.CONTACTS[0].id, type: 1, }, ], avatar: { avatar: { path: util.gifObjectUrl, }, }, }, ], }); const incoming = new Whisper.Message( Object.assign({}, outgoing.attributes, { source: '+12025550011', type: 'incoming', }) ); const View = Whisper.MessageView; ; ```