Commit 8a6dee20553eb2c7dc78f6ae843306099b24b093
expose message.sync.timestamp, use minimum received/asserted value as asserted timestamp
handles clocks set into the future, and avoid received "3 mins from now" issue!Matt McKegg committed on 12/12/2017, 2:00:43 AM
Parent: 091cd9014a216a160e1b882346f8460330cf4c78
Files changed
feed/obs/recent.js | changed |
feed/pull/channel.js | changed |
feed/pull/public.js | changed |
message/html/timestamp.js | changed |
message/sync/timestamp.js | added |
feed/obs/recent.js | |||
---|---|---|---|
@@ -8,9 +8,10 @@ | |||
8 | 8 … | ||
9 | 9 … | exports.gives = nest('feed.obs.recent') | |
10 | 10 … | ||
11 | 11 … | exports.needs = nest({ | |
12 | - 'sbot.pull.log': 'first' | ||
12 … | + 'sbot.pull.log': 'first', | ||
13 … | + 'message.sync.timestamp': 'first' | ||
13 | 14 … | }) | |
14 | 15 … | ||
15 | 16 … | exports.create = function (api) { | |
16 | 17 … | return nest('feed.obs.recent', function (limit) { | |
@@ -21,9 +22,9 @@ | |||
21 | 22 … | ]) | |
22 | 23 … | ) | |
23 | 24 … | ||
24 | 25 … | var result = MutantPullReduce(stream, (result, msg) => { | |
25 | - if (msg.value.timestamp && Date.now() - msg.value.timestamp < 24 * hr) { | ||
26 … | + if (api.message.sync.timestamp(msg) && Date.now() - api.message.sync.timestamp(msg) < 24 * hr) { | ||
26 | 27 … | result.add(msg.value.author) | |
27 | 28 … | } | |
28 | 29 … | return result | |
29 | 30 … | }, { |
feed/pull/channel.js | ||
---|---|---|
@@ -5,9 +5,10 @@ | ||
5 | 5 … | exports.gives = nest('feed.pull.channel') |
6 | 6 … | exports.needs = nest({ |
7 | 7 … | 'sbot.pull.backlinks': 'first', |
8 | 8 … | 'channel.sync.normalize': 'first', |
9 | - 'message.sync.isBlocked': 'first' | |
9 … | + 'message.sync.isBlocked': 'first', | |
10 … | + 'message.sync.timestamp': 'first' | |
10 | 11 … | }) |
11 | 12 … | |
12 | 13 … | exports.create = function (api) { |
13 | 14 … | return nest('feed.pull.channel', function (channel) { |
@@ -16,9 +17,9 @@ | ||
16 | 17 … | |
17 | 18 … | return function (opts) { |
18 | 19 … | // handle last item passed in as lt |
19 | 20 … | var lt = (opts.lt && opts.lt.value) |
20 | - ? opts.lt.value.timestamp | |
21 … | + ? api.message.sync.timestamp(opts.lt) | |
21 | 22 … | : opts.lt |
22 | 23 … | |
23 | 24 … | delete opts.lt |
24 | 25 … |
feed/pull/public.js | ||
---|---|---|
@@ -3,16 +3,17 @@ | ||
3 | 3 … | |
4 | 4 … | exports.gives = nest('feed.pull.public') |
5 | 5 … | exports.needs = nest({ |
6 | 6 … | 'sbot.pull.feed': 'first', |
7 | - 'message.sync.isBlocked': 'first' | |
7 … | + 'message.sync.isBlocked': 'first', | |
8 … | + 'message.sync.timestamp': 'first' | |
8 | 9 … | }) |
9 | 10 … | |
10 | 11 … | exports.create = function (api) { |
11 | 12 … | return nest('feed.pull.public', (opts) => { |
12 | 13 … | // handle last item passed in as lt |
13 | 14 … | opts.lt = (opts.lt && opts.lt.value) |
14 | - ? opts.lt.value.timestamp | |
15 … | + ? api.message.sync.timestamp(opts.lt) | |
15 | 16 … | : opts.lt |
16 | 17 … | |
17 | 18 … | return pull( |
18 | 19 … | api.sbot.pull.feed(opts), |
message/html/timestamp.js | ||
---|---|---|
@@ -1,17 +1,19 @@ | ||
1 | 1 … | const h = require('mutant/h') |
2 | 2 … | const nest = require('depnest') |
3 | 3 … | |
4 | 4 … | exports.gives = nest('message.html.timestamp') |
5 | -exports.needs = nest('lib.obs.timeAgo', 'first') | |
5 … | +exports.needs = nest({ | |
6 … | + 'lib.obs.timeAgo': 'first', | |
7 … | + 'message.sync.timestamp': 'first' | |
8 … | +}) | |
6 | 9 … | |
7 | 10 … | exports.create = function (api) { |
8 | 11 … | return nest('message.html.timestamp', timestamp) |
9 | 12 … | |
10 | 13 … | function timestamp (msg) { |
11 | 14 … | return h('a.Timestamp', { |
12 | 15 … | href: msg.key, |
13 | - title: new Date(msg.value.timestamp) | |
14 | - }, api.lib.obs.timeAgo(msg.value.timestamp)) | |
16 … | + title: new Date(api.message.sync.timestamp(msg)) | |
17 … | + }, api.lib.obs.timeAgo(api.message.sync.timestamp(msg))) | |
15 | 18 … | } |
16 | 19 … | } |
17 | - |
message/sync/timestamp.js | ||
---|---|---|
@@ -1,0 +1,18 @@ | ||
1 … | +var nest = require('depnest') | |
2 … | + | |
3 … | +exports.gives = nest('message.sync.timestamp', true) | |
4 … | + | |
5 … | +// get the asserted timestamp for a given message unless the message was | |
6 … | +// received before the claimed time, then use recieve time | |
7 … | +// (handles clocks set into the future, and avoid received "3 mins from now" issue!) | |
8 … | + | |
9 … | +exports.create = function (api) { | |
10 … | + return nest('message.sync.timestamp', function (msg) { | |
11 … | + if (!msg || !msg.value || !msg.value.timestamp) return | |
12 … | + if (msg.timestamp) { | |
13 … | + return Math.min(msg.timestamp, msg.value.timestamp) | |
14 … | + } else { | |
15 … | + return msg.value.timestamp | |
16 … | + } | |
17 … | + }) | |
18 … | +} |
Built with git-ssb-web