@openvtc/trust-tasks 0.27.1 → 0.27.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +218 -0
- package/dist/_runtime/consume.d.ts +2 -1
- package/dist/_runtime/consume.d.ts.map +1 -1
- package/dist/_runtime/consume.js +26 -1
- package/dist/_runtime/consume.js.map +1 -1
- package/dist/_runtime/document.d.ts +9 -0
- package/dist/_runtime/document.d.ts.map +1 -1
- package/dist/_runtime/document.js +15 -1
- package/dist/_runtime/document.js.map +1 -1
- package/dist/_runtime/freshness.d.ts +4 -2
- package/dist/_runtime/freshness.d.ts.map +1 -1
- package/dist/_runtime/freshness.js +9 -6
- package/dist/_runtime/freshness.js.map +1 -1
- package/dist/_shared/components.d.ts +346 -23
- package/dist/_shared/components.d.ts.map +1 -1
- package/dist/device/list/0.1/payload.d.ts +4 -4
- package/dist/device/list/0.1/payload.d.ts.map +1 -1
- package/dist/device/list/0.1/payload.js +4 -2
- package/dist/device/list/0.1/payload.js.map +1 -1
- package/dist/device/list/0.2/payload.d.ts +4 -4
- package/dist/device/list/0.2/payload.d.ts.map +1 -1
- package/dist/device/list/0.2/payload.js +4 -2
- package/dist/device/list/0.2/payload.js.map +1 -1
- package/dist/device/register/0.1/payload.d.ts +4 -4
- package/dist/device/register/0.1/payload.d.ts.map +1 -1
- package/dist/device/register/0.1/payload.js +4 -2
- package/dist/device/register/0.1/payload.js.map +1 -1
- package/dist/device/register/0.2/payload.d.ts +4 -4
- package/dist/device/register/0.2/payload.d.ts.map +1 -1
- package/dist/device/register/0.2/payload.js +4 -2
- package/dist/device/register/0.2/payload.js.map +1 -1
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -1
- package/dist/rooms/_shared/0.1/room.d.ts +1 -1
- package/dist/rooms/_shared/0.1/room.d.ts.map +1 -1
- package/dist/rooms/create/0.2/payload.d.ts +534 -0
- package/dist/rooms/create/0.2/payload.d.ts.map +1 -0
- package/dist/rooms/create/0.2/payload.js +293 -0
- package/dist/rooms/create/0.2/payload.js.map +1 -0
- package/dist/rooms/epoch/chain/0.2/payload.d.ts +534 -0
- package/dist/rooms/epoch/chain/0.2/payload.d.ts.map +1 -0
- package/dist/rooms/epoch/chain/0.2/payload.js +292 -0
- package/dist/rooms/epoch/chain/0.2/payload.js.map +1 -0
- package/dist/rooms/epoch/prune/0.2/payload.d.ts +467 -0
- package/dist/rooms/epoch/prune/0.2/payload.d.ts.map +1 -0
- package/dist/rooms/epoch/prune/0.2/payload.js +251 -0
- package/dist/rooms/epoch/prune/0.2/payload.js.map +1 -0
- package/dist/rooms/info/0.2/payload.d.ts +1129 -0
- package/dist/rooms/info/0.2/payload.d.ts.map +1 -0
- package/dist/rooms/info/0.2/payload.js +618 -0
- package/dist/rooms/info/0.2/payload.js.map +1 -0
- package/dist/rooms/keys/backfill/0.2/payload.d.ts +380 -0
- package/dist/rooms/keys/backfill/0.2/payload.d.ts.map +1 -0
- package/dist/rooms/keys/backfill/0.2/payload.js +197 -0
- package/dist/rooms/keys/backfill/0.2/payload.js.map +1 -0
- package/dist/rooms/keys/browse/0.1/payload.d.ts +4 -4
- package/dist/rooms/keys/browse/0.1/payload.js +2 -2
- package/dist/rooms/keys/browse/0.1/payload.js.map +1 -1
- package/dist/rooms/keys/browse/0.2/payload.d.ts +941 -0
- package/dist/rooms/keys/browse/0.2/payload.d.ts.map +1 -0
- package/dist/rooms/keys/browse/0.2/payload.js +558 -0
- package/dist/rooms/keys/browse/0.2/payload.js.map +1 -0
- package/dist/rooms/keys/chain/0.2/payload.d.ts +450 -0
- package/dist/rooms/keys/chain/0.2/payload.d.ts.map +1 -0
- package/dist/rooms/keys/chain/0.2/payload.js +248 -0
- package/dist/rooms/keys/chain/0.2/payload.js.map +1 -0
- package/dist/rooms/keys/profile/read/0.1/payload.d.ts +4 -4
- package/dist/rooms/keys/profile/read/0.1/payload.js +2 -2
- package/dist/rooms/keys/profile/read/0.1/payload.js.map +1 -1
- package/dist/rooms/keys/read/0.1/payload.d.ts +4 -4
- package/dist/rooms/keys/read/0.1/payload.js +2 -2
- package/dist/rooms/keys/read/0.1/payload.js.map +1 -1
- package/dist/rooms/owner/anchor/0.1/payload.d.ts +4 -4
- package/dist/rooms/owner/anchor/0.1/payload.js +2 -2
- package/dist/rooms/owner/anchor/0.1/payload.js.map +1 -1
- package/dist/rooms/records/get/0.1/payload.d.ts +4 -4
- package/dist/rooms/records/get/0.1/payload.js +2 -2
- package/dist/rooms/records/get/0.1/payload.js.map +1 -1
- package/dist/rooms/records/get/0.2/payload.d.ts +4 -4
- package/dist/rooms/records/get/0.2/payload.js +2 -2
- package/dist/rooms/records/get/0.2/payload.js.map +1 -1
- package/dist/rooms/records/list/0.1/payload.d.ts +4 -4
- package/dist/rooms/records/list/0.1/payload.js +2 -2
- package/dist/rooms/records/list/0.1/payload.js.map +1 -1
- package/dist/rooms/records/list/0.2/payload.d.ts +4 -4
- package/dist/rooms/records/list/0.2/payload.js +2 -2
- package/dist/rooms/records/list/0.2/payload.js.map +1 -1
- package/dist/rooms/records/list/0.3/payload.d.ts +970 -0
- package/dist/rooms/records/list/0.3/payload.d.ts.map +1 -0
- package/dist/rooms/records/list/0.3/payload.js +526 -0
- package/dist/rooms/records/list/0.3/payload.js.map +1 -0
- package/dist/rooms/records/prune/0.1/payload.d.ts +706 -0
- package/dist/rooms/records/prune/0.1/payload.d.ts.map +1 -0
- package/dist/rooms/records/prune/0.1/payload.js +374 -0
- package/dist/rooms/records/prune/0.1/payload.js.map +1 -0
- package/dist/rooms/records/put/0.3/payload.d.ts +1212 -0
- package/dist/rooms/records/put/0.3/payload.d.ts.map +1 -0
- package/dist/rooms/records/put/0.3/payload.js +646 -0
- package/dist/rooms/records/put/0.3/payload.js.map +1 -0
- package/dist/rooms/records/retention/set/0.1/payload.d.ts +521 -0
- package/dist/rooms/records/retention/set/0.1/payload.d.ts.map +1 -0
- package/dist/rooms/records/retention/set/0.1/payload.js +276 -0
- package/dist/rooms/records/retention/set/0.1/payload.js.map +1 -0
- package/dist/vault/credentials/present/0.1/payload.d.ts +407 -0
- package/dist/vault/credentials/present/0.1/payload.d.ts.map +1 -0
- package/dist/vault/credentials/present/0.1/payload.js +217 -0
- package/dist/vault/credentials/present/0.1/payload.js.map +1 -0
- package/dist/vault/credentials/query/0.1/payload.d.ts +12 -0
- package/dist/vault/credentials/query/0.1/payload.d.ts.map +1 -1
- package/dist/vault/credentials/query/0.1/payload.js +4 -0
- package/dist/vault/credentials/query/0.1/payload.js.map +1 -1
- package/dist/vta/webvh/dids/create/1.2/payload.d.ts +961 -0
- package/dist/vta/webvh/dids/create/1.2/payload.d.ts.map +1 -0
- package/dist/vta/webvh/dids/create/1.2/payload.js +480 -0
- package/dist/vta/webvh/dids/create/1.2/payload.js.map +1 -0
- package/dist/vtc/_shared/0.1/room-migration.d.ts +16 -0
- package/dist/vtc/_shared/0.1/room-migration.d.ts.map +1 -0
- package/dist/vtc/_shared/0.1/room-migration.js +6 -0
- package/dist/vtc/_shared/0.1/room-migration.js.map +1 -0
- package/dist/vtc/_shared/0.1/room-storage.d.ts +1 -1
- package/dist/vtc/_shared/0.1/room-storage.d.ts.map +1 -1
- package/dist/vtc/_shared/0.2/room-storage.d.ts +16 -0
- package/dist/vtc/_shared/0.2/room-storage.d.ts.map +1 -0
- package/dist/vtc/_shared/0.2/room-storage.js +6 -0
- package/dist/vtc/_shared/0.2/room-storage.js.map +1 -0
- package/dist/vtc/admin/events/_shared/0.4/topic.d.ts +31 -0
- package/dist/vtc/admin/events/_shared/0.4/topic.d.ts.map +1 -0
- package/dist/vtc/admin/events/_shared/0.4/topic.js +6 -0
- package/dist/vtc/admin/events/_shared/0.4/topic.js.map +1 -0
- package/dist/vtc/admin/events/event/0.4/payload.d.ts +172 -0
- package/dist/vtc/admin/events/event/0.4/payload.d.ts.map +1 -0
- package/dist/vtc/admin/events/event/0.4/payload.js +103 -0
- package/dist/vtc/admin/events/event/0.4/payload.js.map +1 -0
- package/dist/vtc/admin/events/subscribe/0.4/payload.d.ts +409 -0
- package/dist/vtc/admin/events/subscribe/0.4/payload.d.ts.map +1 -0
- package/dist/vtc/admin/events/subscribe/0.4/payload.js +238 -0
- package/dist/vtc/admin/events/subscribe/0.4/payload.js.map +1 -0
- package/dist/vtc/rooms/get/0.2/payload.d.ts +1966 -0
- package/dist/vtc/rooms/get/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/rooms/get/0.2/payload.js +976 -0
- package/dist/vtc/rooms/get/0.2/payload.js.map +1 -0
- package/dist/vtc/rooms/storage/migrate/0.2/payload.d.ts +595 -0
- package/dist/vtc/rooms/storage/migrate/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/rooms/storage/migrate/0.2/payload.js +336 -0
- package/dist/vtc/rooms/storage/migrate/0.2/payload.js.map +1 -0
- package/dist/vtc/storage/configs/create/0.1/payload.d.ts +1 -1
- package/dist/vtc/storage/configs/create/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/storage/configs/create/0.2/payload.d.ts +1360 -0
- package/dist/vtc/storage/configs/create/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/storage/configs/create/0.2/payload.js +783 -0
- package/dist/vtc/storage/configs/create/0.2/payload.js.map +1 -0
- package/dist/vtc/storage/configs/get/0.1/payload.d.ts +1 -1
- package/dist/vtc/storage/configs/get/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/storage/configs/get/0.2/payload.d.ts +1854 -0
- package/dist/vtc/storage/configs/get/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/storage/configs/get/0.2/payload.js +1075 -0
- package/dist/vtc/storage/configs/get/0.2/payload.js.map +1 -0
- package/dist/vtc/storage/configs/list/0.1/payload.d.ts +1 -1
- package/dist/vtc/storage/configs/list/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/storage/configs/list/0.2/payload.d.ts +1955 -0
- package/dist/vtc/storage/configs/list/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/storage/configs/list/0.2/payload.js +1125 -0
- package/dist/vtc/storage/configs/list/0.2/payload.js.map +1 -0
- package/dist/vtc/storage/configs/update/0.1/payload.d.ts +1 -1
- package/dist/vtc/storage/configs/update/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/storage/configs/update/0.2/payload.d.ts +1362 -0
- package/dist/vtc/storage/configs/update/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/storage/configs/update/0.2/payload.js +782 -0
- package/dist/vtc/storage/configs/update/0.2/payload.js.map +1 -0
- package/dist/vtc/storage/credentials/set/0.1/payload.d.ts +1 -1
- package/dist/vtc/storage/credentials/set/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/storage/credentials/set/0.2/payload.d.ts +979 -0
- package/dist/vtc/storage/credentials/set/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/storage/credentials/set/0.2/payload.js +573 -0
- package/dist/vtc/storage/credentials/set/0.2/payload.js.map +1 -0
- package/package.json +1 -1
- package/src/_runtime/consume.ts +26 -2
- package/src/_runtime/document.ts +17 -1
- package/src/_runtime/freshness.ts +9 -7
- package/src/_shared/components.ts +372 -23
- package/src/device/list/0.1/payload.ts +4 -2
- package/src/device/list/0.2/payload.ts +4 -2
- package/src/device/register/0.1/payload.ts +4 -2
- package/src/device/register/0.2/payload.ts +4 -2
- package/src/index.ts +25 -0
- package/src/rooms/_shared/0.1/room.ts +1 -1
- package/src/rooms/create/0.2/payload.ts +364 -0
- package/src/rooms/epoch/chain/0.2/payload.ts +347 -0
- package/src/rooms/epoch/prune/0.2/payload.ts +315 -0
- package/src/rooms/info/0.2/payload.ts +700 -0
- package/src/rooms/keys/backfill/0.2/payload.ts +260 -0
- package/src/rooms/keys/browse/0.1/payload.ts +2 -2
- package/src/rooms/keys/browse/0.2/payload.ts +628 -0
- package/src/rooms/keys/chain/0.2/payload.ts +308 -0
- package/src/rooms/keys/profile/read/0.1/payload.ts +2 -2
- package/src/rooms/keys/read/0.1/payload.ts +2 -2
- package/src/rooms/owner/anchor/0.1/payload.ts +2 -2
- package/src/rooms/records/get/0.1/payload.ts +2 -2
- package/src/rooms/records/get/0.2/payload.ts +2 -2
- package/src/rooms/records/list/0.1/payload.ts +2 -2
- package/src/rooms/records/list/0.2/payload.ts +2 -2
- package/src/rooms/records/list/0.3/payload.ts +601 -0
- package/src/rooms/records/prune/0.1/payload.ts +451 -0
- package/src/rooms/records/put/0.3/payload.ts +741 -0
- package/src/rooms/records/retention/set/0.1/payload.ts +338 -0
- package/src/vault/credentials/present/0.1/payload.ts +283 -0
- package/src/vault/credentials/query/0.1/payload.ts +8 -0
- package/src/vta/webvh/dids/create/1.2/payload.ts +660 -0
- package/src/vtc/_shared/0.1/room-migration.ts +17 -0
- package/src/vtc/_shared/0.1/room-storage.ts +1 -1
- package/src/vtc/_shared/0.2/room-storage.ts +17 -0
- package/src/vtc/admin/events/_shared/0.4/topic.ts +32 -0
- package/src/vtc/admin/events/event/0.4/payload.ts +137 -0
- package/src/vtc/admin/events/subscribe/0.4/payload.ts +318 -0
- package/src/vtc/rooms/get/0.2/payload.ts +1372 -0
- package/src/vtc/rooms/storage/migrate/0.2/payload.ts +408 -0
- package/src/vtc/storage/configs/create/0.1/payload.ts +1 -1
- package/src/vtc/storage/configs/create/0.2/payload.ts +830 -0
- package/src/vtc/storage/configs/get/0.1/payload.ts +1 -1
- package/src/vtc/storage/configs/get/0.2/payload.ts +1110 -0
- package/src/vtc/storage/configs/list/0.1/payload.ts +1 -1
- package/src/vtc/storage/configs/list/0.2/payload.ts +1177 -0
- package/src/vtc/storage/configs/update/0.1/payload.ts +1 -1
- package/src/vtc/storage/configs/update/0.2/payload.ts +829 -0
- package/src/vtc/storage/credentials/set/0.1/payload.ts +1 -1
- package/src/vtc/storage/credentials/set/0.2/payload.ts +619 -0
package/src/_runtime/consume.ts
CHANGED
|
@@ -304,7 +304,8 @@ export interface ConsumeOptions<P, R> {
|
|
|
304
304
|
*
|
|
305
305
|
* Return a success response, an {@link ErrorResponse} to refuse, or nothing
|
|
306
306
|
* at all for a specification that defines no success response (§4.4.1) —
|
|
307
|
-
* which yields the `accepted` outcome.
|
|
307
|
+
* which yields the `accepted` outcome. A throw aborts the pipeline, releases
|
|
308
|
+
* the item-11 claim so the document can be resent, and is rethrown.
|
|
308
309
|
*/
|
|
309
310
|
handler: (
|
|
310
311
|
doc: TrustTaskDocument<P>,
|
|
@@ -514,10 +515,33 @@ export async function consumeInbound<P, R>(
|
|
|
514
515
|
case "fresh":
|
|
515
516
|
claim = { guard, digest };
|
|
516
517
|
break;
|
|
518
|
+
default:
|
|
519
|
+
// A guard answering with a verdict this runtime does not know has
|
|
520
|
+
// not said the document is fresh. Executing anyway would skip item
|
|
521
|
+
// 11, so fail closed, as for a guard that cannot answer at all.
|
|
522
|
+
return route({
|
|
523
|
+
code: "unavailable",
|
|
524
|
+
message: REPLAY_RECORD_UNAVAILABLE,
|
|
525
|
+
retryable: true,
|
|
526
|
+
});
|
|
517
527
|
}
|
|
518
528
|
}
|
|
519
529
|
|
|
520
|
-
|
|
530
|
+
let result: Awaited<ReturnType<typeof handler>>;
|
|
531
|
+
try {
|
|
532
|
+
result = await handler(doc, resolved.parties);
|
|
533
|
+
} catch (e) {
|
|
534
|
+
// The handler did not finish, so nothing says the effect happened.
|
|
535
|
+
// Holding the claim would answer every resend with an in-flight duplicate
|
|
536
|
+
// until the record expired: the document could not be retried, and the
|
|
537
|
+
// producer would never learn why.
|
|
538
|
+
try {
|
|
539
|
+
await claim?.guard.release?.(doc.id, claim.digest);
|
|
540
|
+
} catch {
|
|
541
|
+
/* best-effort */
|
|
542
|
+
}
|
|
543
|
+
throw e;
|
|
544
|
+
}
|
|
521
545
|
|
|
522
546
|
if (result === undefined || result === null) {
|
|
523
547
|
// Fire-and-forget: nothing to cache, but the claim stands — the effect
|
package/src/_runtime/document.ts
CHANGED
|
@@ -237,13 +237,29 @@ export const TRUST_TASK_ERROR_TYPE_URI = "https://trusttasks.org/spec/trust-task
|
|
|
237
237
|
*
|
|
238
238
|
* @param now Milliseconds since the epoch, as from `Date.now()`.
|
|
239
239
|
*/
|
|
240
|
+
/**
|
|
241
|
+
* Parse an RFC 3339 `date-time` (SPEC §4.2) to epoch milliseconds, or `NaN`.
|
|
242
|
+
*
|
|
243
|
+
* Stricter than `Date.parse`, which reads a timestamp with no zone designator
|
|
244
|
+
* as *local* time and accepts forms RFC 3339 does not (a bare date, `Jan 1
|
|
245
|
+
* 2026`). The Rust and Go runtimes refuse both, and an instant that depends on
|
|
246
|
+
* the consumer's time zone is not one instant at all.
|
|
247
|
+
*/
|
|
248
|
+
export function parseRfc3339(value: string): number {
|
|
249
|
+
if (!RFC3339.test(value)) return NaN;
|
|
250
|
+
return Date.parse(value.toUpperCase());
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
const RFC3339 =
|
|
254
|
+
/^\d{4}-\d{2}-\d{2}[Tt]\d{2}:\d{2}:\d{2}(\.\d+)?([Zz]|[+-]\d{2}:\d{2})$/;
|
|
255
|
+
|
|
240
256
|
export function validateBasic<P>(
|
|
241
257
|
doc: TrustTaskDocument<P>,
|
|
242
258
|
now: number,
|
|
243
259
|
myVid: string,
|
|
244
260
|
): RejectReason | null {
|
|
245
261
|
if (doc.expiresAt !== undefined) {
|
|
246
|
-
const expiresAt =
|
|
262
|
+
const expiresAt = parseRfc3339(doc.expiresAt);
|
|
247
263
|
if (Number.isNaN(expiresAt)) {
|
|
248
264
|
return {
|
|
249
265
|
code: "malformedRequest",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* be kept forever.
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
|
-
import type
|
|
23
|
+
import { parseRfc3339, type RejectReason, type TrustTaskDocument } from "./document.js";
|
|
24
24
|
|
|
25
25
|
/** The clock-skew tolerance SPEC §4.2 sanctions ("typically ≤ 60s"), in ms. */
|
|
26
26
|
export const DEFAULT_SKEW_MS = 60_000;
|
|
@@ -125,14 +125,14 @@ export function validateFreshness<P>(
|
|
|
125
125
|
});
|
|
126
126
|
|
|
127
127
|
if (doc.issuedAt !== undefined) {
|
|
128
|
-
const issuedAt =
|
|
128
|
+
const issuedAt = parseRfc3339(doc.issuedAt);
|
|
129
129
|
if (Number.isNaN(issuedAt)) {
|
|
130
130
|
return malformed("issuedAt is not a valid RFC 3339 timestamp");
|
|
131
131
|
}
|
|
132
132
|
if (issuedAt > now + policy.skewMs) return malformed(FUTURE_ISSUED_AT);
|
|
133
133
|
|
|
134
134
|
if (doc.expiresAt !== undefined) {
|
|
135
|
-
const expiresAt =
|
|
135
|
+
const expiresAt = parseRfc3339(doc.expiresAt);
|
|
136
136
|
// A malformed `expiresAt` is `validateBasic`'s to report; skip it here
|
|
137
137
|
// rather than raise a second, differently-worded rejection for it.
|
|
138
138
|
if (!Number.isNaN(expiresAt) && expiresAt <= issuedAt) {
|
|
@@ -160,7 +160,9 @@ export function validateFreshness<P>(
|
|
|
160
160
|
* this consumer's willingness to execute it, which SPEC §7.2 makes the same
|
|
161
161
|
* instant as the end of the record's required retention.
|
|
162
162
|
*
|
|
163
|
-
* `expiresAt` fixes it where present; otherwise `issuedAt + maxAgeMs
|
|
163
|
+
* `expiresAt` fixes it where present; otherwise `issuedAt + maxAgeMs + skewMs`
|
|
164
|
+
* — the same bound {@link validateFreshness} accepts up to, so a replay arriving
|
|
165
|
+
* inside the skew allowance still finds the record.
|
|
164
166
|
* `undefined` means this policy places no bound on the document, in which case
|
|
165
167
|
* a consumer **MUST NOT** execute a consequential task on it — there is no
|
|
166
168
|
* window in which to keep the record.
|
|
@@ -171,13 +173,13 @@ export function recordExpiry<P>(
|
|
|
171
173
|
now: number,
|
|
172
174
|
): number | undefined {
|
|
173
175
|
if (doc.expiresAt !== undefined) {
|
|
174
|
-
const expiresAt =
|
|
176
|
+
const expiresAt = parseRfc3339(doc.expiresAt);
|
|
175
177
|
if (!Number.isNaN(expiresAt)) return expiresAt;
|
|
176
178
|
}
|
|
177
179
|
if (policy.maxAgeMs === undefined) return undefined;
|
|
178
|
-
const issuedAt = doc.issuedAt === undefined ? NaN :
|
|
180
|
+
const issuedAt = doc.issuedAt === undefined ? NaN : parseRfc3339(doc.issuedAt);
|
|
179
181
|
// Fall back to `now` when the producer stamped no usable `issuedAt`: the
|
|
180
182
|
// record then lives a full window from first sight, which is the longest the
|
|
181
183
|
// document could still be arriving from a queue.
|
|
182
|
-
return (Number.isNaN(issuedAt) ? now : issuedAt) + policy.maxAgeMs;
|
|
184
|
+
return (Number.isNaN(issuedAt) ? now : issuedAt) + policy.maxAgeMs + policy.skewMs;
|
|
183
185
|
}
|