@amalgm/live 0.2.81-main.41421531763 → 0.2.81-main.41442331400

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.
@@ -7,7 +7,8 @@
7
7
  * goes.
8
8
  *
9
9
  * The current version is always kept. A permanent deletion keeps no history:
10
- * every version before it goes when it is accepted.
10
+ * every version before it goes when it is accepted. A secret keeps none either:
11
+ * an old value someone replaced must not stay readable.
11
12
  *
12
13
  * Time is the authority's acceptance time, never a device clock. Because a
13
14
  * version's end depends only on the versions after it, accepting version `k`
@@ -1 +1 @@
1
- {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../src/history/rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIzE,2DAA2D;AAC3D,eAAO,MAAM,WAAW,KAAK,CAAC;AAE9B,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,QAAc,CAAC;AAE5C,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,QAAc,CAAC;AAW5C;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,GACvD,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CASzB;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,EAAE,CAmBvF"}
1
+ {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../src/history/rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIzE,2DAA2D;AAC3D,eAAO,MAAM,WAAW,KAAK,CAAC;AAE9B,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,QAAc,CAAC;AAE5C,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,QAAc,CAAC;AAc5C;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,GACvD,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CASzB;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,EAAE,CAmBvF"}
@@ -7,7 +7,8 @@
7
7
  * goes.
8
8
  *
9
9
  * The current version is always kept. A permanent deletion keeps no history:
10
- * every version before it goes when it is accepted.
10
+ * every version before it goes when it is accepted. A secret keeps none either:
11
+ * an old value someone replaced must not stay readable.
11
12
  *
12
13
  * Time is the authority's acceptance time, never a device clock. Because a
13
14
  * version's end depends only on the versions after it, accepting version `k`
@@ -29,6 +30,8 @@ export const VERSION_TRASH_MS = 30 * DAY_MS;
29
30
  function keptUntil(next, tenth) {
30
31
  return Math.max(next.acceptedAt + KEEP_REPLACED_MS, tenth.acceptedAt);
31
32
  }
33
+ /** Accepting this version ends every version before it, at once. */
34
+ const endsHistory = (version) => version.deleted || version.type === 'secret';
32
35
  /**
33
36
  * The one release accepting `version` fixes, or null when it fixes none yet.
34
37
  * `versionAt` reads an earlier version of the same entity; only the one that
@@ -36,7 +39,7 @@ function keptUntil(next, tenth) {
36
39
  */
37
40
  export async function releaseFixedBy(version, versionAt) {
38
41
  const { entityId, sequence, acceptedAt } = version;
39
- if (version.deleted) {
42
+ if (endsHistory(version)) {
40
43
  return sequence > 1 ? { entityId, through: sequence - 1, dueAt: acceptedAt } : null;
41
44
  }
42
45
  const leaving = sequence - KEEP_NEWEST;
@@ -54,12 +57,12 @@ export async function releaseFixedBy(version, versionAt) {
54
57
  export function judge(versions, now) {
55
58
  const count = versions.length;
56
59
  const last = versions[count - 1];
57
- const deletedAt = last?.deleted === true ? last.acceptedAt : null;
60
+ const endedAt = last !== undefined && endsHistory(last) ? last.acceptedAt : null;
58
61
  return versions.map((version, index) => {
59
62
  if (index === count - 1)
60
63
  return { ...version, state: 'current', trashedAt: null, goneAt: null };
61
- if (deletedAt !== null) {
62
- return { ...version, state: 'gone', trashedAt: deletedAt, goneAt: deletedAt };
64
+ if (endedAt !== null) {
65
+ return { ...version, state: 'gone', trashedAt: endedAt, goneAt: endedAt };
63
66
  }
64
67
  const next = versions[index + 1];
65
68
  const tenth = versions[index + KEEP_NEWEST];
@@ -1 +1 @@
1
- {"version":3,"file":"rule.js","sourceRoot":"","sources":["../../src/history/rule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rule.js","sourceRoot":"","sources":["../../src/history/rule.ts"],"names":[],"mappings":"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"}
@@ -24,7 +24,10 @@ export interface ReceivePagePorts {
24
24
  * caught up at no position. */
25
25
  export declare function receiveTailPage(ports: ReceivePagePorts, authorityId: string, observe: (cursor: number) => void): Promise<boolean>;
26
26
  /** One page of one entity's channel: its own dense history. The cursor is
27
- * the Inbox cursor, a page after it can never gap, and no authority
28
- * position moves. */
27
+ * the Inbox cursor, so a page after it can never gap. An entity that is its
28
+ * own authority, a construct, is that authority's whole history, so its page
29
+ * is also the authority's complete delivery prefix and Apply's line starts
30
+ * there. Any other entity is one among many, and its page moves no authority
31
+ * position. */
29
32
  export declare function receiveEntityPage(ports: ReceivePagePorts, entityId: string, observe: (cursor: number) => void): Promise<boolean>;
30
33
  //# sourceMappingURL=receive-pages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"receive-pages.d.ts","sourceRoot":"","sources":["../../src/records/receive-pages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEtG,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;IAC9C,gEAAgE;IAChE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/D,4DAA4D;IAC5D,QAAQ,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC;CACvC;AAED;;;+BAG+B;AAC/B,wBAAsB,eAAe,CACnC,KAAK,EAAE,gBAAgB,EACvB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,OAAO,CAAC,CAoClB;AAED;;qBAEqB;AACrB,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,gBAAgB,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,OAAO,CAAC,CAwBlB"}
1
+ {"version":3,"file":"receive-pages.d.ts","sourceRoot":"","sources":["../../src/records/receive-pages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEtG,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;IAC9C,gEAAgE;IAChE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/D,4DAA4D;IAC5D,QAAQ,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC;CACvC;AAED;;;+BAG+B;AAC/B,wBAAsB,eAAe,CACnC,KAAK,EAAE,gBAAgB,EACvB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,OAAO,CAAC,CAoClB;AAED;;;;;eAKe;AACf,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,gBAAgB,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,OAAO,CAAC,CAyBlB"}
@@ -53,8 +53,11 @@ export async function receiveTailPage(ports, authorityId, observe) {
53
53
  return deliveries.length === ENTITY_RECORD_DELIVERY_LIMIT;
54
54
  }
55
55
  /** One page of one entity's channel: its own dense history. The cursor is
56
- * the Inbox cursor, a page after it can never gap, and no authority
57
- * position moves. */
56
+ * the Inbox cursor, so a page after it can never gap. An entity that is its
57
+ * own authority, a construct, is that authority's whole history, so its page
58
+ * is also the authority's complete delivery prefix and Apply's line starts
59
+ * there. Any other entity is one among many, and its page moves no authority
60
+ * position. */
58
61
  export async function receiveEntityPage(ports, entityId, observe) {
59
62
  const { store, authority, run } = ports;
60
63
  const after = await run(() => store.readEntityCursor(entityId));
@@ -69,10 +72,11 @@ export async function receiveEntityPage(ports, entityId, observe) {
69
72
  if (deliveries.some((delivery) => delivery.record.entityId !== entityId)) {
70
73
  throw new Error(`entity channel ${entityId} delivered another entity's record`);
71
74
  }
75
+ const { authorityId } = deliveries[0].record;
72
76
  const stored = await run(() => store.receive({
73
- authorityId: deliveries[0].record.authorityId,
77
+ authorityId,
74
78
  deliveries,
75
- advanceDeliveryCursor: false,
79
+ advanceDeliveryCursor: authorityId === entityId,
76
80
  }));
77
81
  if (stored.kind === 'gap') {
78
82
  throw new Error(`entity ${entityId} is missing sequence ${stored.gap.after + 1}`);
@@ -1 +1 @@
1
- {"version":3,"file":"receive-pages.js","sourceRoot":"","sources":["../../src/records/receive-pages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"receive-pages.js","sourceRoot":"","sources":["../../src/records/receive-pages.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,8 @@
8
8
  * goes.
9
9
  *
10
10
  * The current version is always kept. A permanent deletion keeps no history:
11
- * every version before it goes when it is accepted.
11
+ * every version before it goes when it is accepted. A secret keeps none either:
12
+ * an old value someone replaced must not stay readable.
12
13
  *
13
14
  * Time is the authority's acceptance time, never a device clock. Because a
14
15
  * version's end depends only on the versions after it, accepting version `k`
@@ -34,6 +35,8 @@ exports.VERSION_TRASH_MS = 30 * DAY_MS;
34
35
  function keptUntil(next, tenth) {
35
36
  return Math.max(next.acceptedAt + exports.KEEP_REPLACED_MS, tenth.acceptedAt);
36
37
  }
38
+ /** Accepting this version ends every version before it, at once. */
39
+ const endsHistory = (version) => version.deleted || version.type === 'secret';
37
40
  /**
38
41
  * The one release accepting `version` fixes, or null when it fixes none yet.
39
42
  * `versionAt` reads an earlier version of the same entity; only the one that
@@ -41,7 +44,7 @@ function keptUntil(next, tenth) {
41
44
  */
42
45
  async function releaseFixedBy(version, versionAt) {
43
46
  const { entityId, sequence, acceptedAt } = version;
44
- if (version.deleted) {
47
+ if (endsHistory(version)) {
45
48
  return sequence > 1 ? { entityId, through: sequence - 1, dueAt: acceptedAt } : null;
46
49
  }
47
50
  const leaving = sequence - exports.KEEP_NEWEST;
@@ -59,12 +62,12 @@ async function releaseFixedBy(version, versionAt) {
59
62
  function judge(versions, now) {
60
63
  const count = versions.length;
61
64
  const last = versions[count - 1];
62
- const deletedAt = last?.deleted === true ? last.acceptedAt : null;
65
+ const endedAt = last !== undefined && endsHistory(last) ? last.acceptedAt : null;
63
66
  return versions.map((version, index) => {
64
67
  if (index === count - 1)
65
68
  return { ...version, state: 'current', trashedAt: null, goneAt: null };
66
- if (deletedAt !== null) {
67
- return { ...version, state: 'gone', trashedAt: deletedAt, goneAt: deletedAt };
69
+ if (endedAt !== null) {
70
+ return { ...version, state: 'gone', trashedAt: endedAt, goneAt: endedAt };
68
71
  }
69
72
  const next = versions[index + 1];
70
73
  const tenth = versions[index + exports.KEEP_NEWEST];
@@ -1 +1 @@
1
- {"version":3,"file":"rule.js","sourceRoot":"","sources":["../../src/history/rule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rule.js","sourceRoot":"","sources":["../../src/history/rule.ts"],"names":[],"mappings":"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"}
@@ -58,8 +58,11 @@ async function receiveTailPage(ports, authorityId, observe) {
58
58
  return deliveries.length === exports.ENTITY_RECORD_DELIVERY_LIMIT;
59
59
  }
60
60
  /** One page of one entity's channel: its own dense history. The cursor is
61
- * the Inbox cursor, a page after it can never gap, and no authority
62
- * position moves. */
61
+ * the Inbox cursor, so a page after it can never gap. An entity that is its
62
+ * own authority, a construct, is that authority's whole history, so its page
63
+ * is also the authority's complete delivery prefix and Apply's line starts
64
+ * there. Any other entity is one among many, and its page moves no authority
65
+ * position. */
63
66
  async function receiveEntityPage(ports, entityId, observe) {
64
67
  const { store, authority, run } = ports;
65
68
  const after = await run(() => store.readEntityCursor(entityId));
@@ -74,10 +77,11 @@ async function receiveEntityPage(ports, entityId, observe) {
74
77
  if (deliveries.some((delivery) => delivery.record.entityId !== entityId)) {
75
78
  throw new Error(`entity channel ${entityId} delivered another entity's record`);
76
79
  }
80
+ const { authorityId } = deliveries[0].record;
77
81
  const stored = await run(() => store.receive({
78
- authorityId: deliveries[0].record.authorityId,
82
+ authorityId,
79
83
  deliveries,
80
- advanceDeliveryCursor: false,
84
+ advanceDeliveryCursor: authorityId === entityId,
81
85
  }));
82
86
  if (stored.kind === 'gap') {
83
87
  throw new Error(`entity ${entityId} is missing sequence ${stored.gap.after + 1}`);
@@ -1 +1 @@
1
- {"version":3,"file":"receive-pages.js","sourceRoot":"","sources":["../../src/records/receive-pages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"receive-pages.js","sourceRoot":"","sources":["../../src/records/receive-pages.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amalgm/live",
3
- "version": "0.2.81-main.41421531763",
3
+ "version": "0.2.81-main.41442331400",
4
4
  "description": "Portable realtime SDK for Amalgm — wire contracts, mutation discipline, and delivery state machines behind host-injected adapters.",
5
5
  "type": "module",
6
6
  "main": "./dist-cjs/index.js",
@@ -143,11 +143,11 @@
143
143
  "dependencies": {
144
144
  "@amalgm/core": "0.5.1-main.41264319540"
145
145
  },
146
- "gitHead": "8eafd28d572aae2717d147763fb7be6a70bef0bf",
146
+ "gitHead": "7d7b4f997eace310fdcd23b4d3df42ec373060c8",
147
147
  "amalgmSource": {
148
148
  "repository": "amalgm-inc/amalgm-live",
149
149
  "branch": "main",
150
- "commit": "8eafd28d572aae2717d147763fb7be6a70bef0bf",
151
- "occurrence": "41421531763"
150
+ "commit": "7d7b4f997eace310fdcd23b4d3df42ec373060c8",
151
+ "occurrence": "41442331400"
152
152
  }
153
153
  }