@ddd-qc/lit-happ 0.26.0 → 0.26.2

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.
@@ -1,4 +1,4 @@
1
- import { AppSignalCb, Timestamp } from "@holochain/client";
1
+ import { AppSignalCb, EntryVisibility, Timestamp } from "@holochain/client";
2
2
  import { ActionId, AgentId, AnyLinkableId, EntryId, EntryPulse, LinkPulse, TipProtocol, ZomeSignalProtocol } from "@ddd-qc/cell-proxy";
3
3
  import { ZomeViewModel } from "./ZomeViewModel";
4
4
  import { ZomeIndex } from "@holochain/client/lib/hdk/link";
@@ -38,12 +38,14 @@ export interface EntryPulseMat {
38
38
  author: AgentId;
39
39
  eh: EntryId;
40
40
  entryType: string;
41
+ visibility: EntryVisibility;
41
42
  bytes: Uint8Array;
42
43
  }
43
44
  /** */
44
45
  export declare function materializeEntryPulse(entryPulse: EntryPulse, entryTypes: string[]): EntryPulseMat;
45
- export interface LinkMat {
46
- }
46
+ /** */
47
+ export declare function dematerializeEntryPulse(pulse: EntryPulseMat, entryTypes: string[]): EntryPulse;
48
+ /** */
47
49
  export interface LinkPulseMat {
48
50
  author: AgentId;
49
51
  base: AnyLinkableId;
@@ -59,3 +61,5 @@ export interface LinkPulseMat {
59
61
  }
60
62
  /** */
61
63
  export declare function materializeLinkPulse(linkPulse: LinkPulse, linkTypes: string[]): LinkPulseMat;
64
+ /** */
65
+ export declare function dematerializeLinkPulse(pulse: LinkPulseMat, linkTypes: string[]): LinkPulse;
@@ -1,4 +1,4 @@
1
- import { ActionId, AgentId, EntryId, intoLinkableId, prettyDate, ZomeSignalProtocolType } from "@ddd-qc/cell-proxy";
1
+ import { ActionId, AgentId, EntryId, getIndexByVariant, intoLinkableId, prettyDate, ZomeSignalProtocolType } from "@ddd-qc/cell-proxy";
2
2
  import { ZomeViewModel } from "./ZomeViewModel";
3
3
  /**
4
4
  * ZVM with support for ZomeSignals
@@ -43,11 +43,19 @@ export class ZomeViewModelWithSignals extends ZomeViewModel {
43
43
  if (ZomeSignalProtocolType.Entry in pulse) {
44
44
  const entryPulseMat = materializeEntryPulse(pulse.Entry, this.constructor.ENTRY_TYPES);
45
45
  all.push(this.handleEntryPulse(entryPulseMat, from));
46
+ /** If new entry from this agent, broadcast to peers as tip */
47
+ if (entryPulseMat.isNew && from.b64 == this.cell.agentId.b64 && entryPulseMat.visibility == "Public") {
48
+ all.push(this.broadcastTip({ Entry: pulse.Entry }));
49
+ }
46
50
  continue;
47
51
  }
48
52
  if (ZomeSignalProtocolType.Link in pulse) {
49
53
  const linkPulseMat = materializeLinkPulse(pulse.Link, this.constructor.LINK_TYPES);
50
54
  all.push(this.handleLinkPulse(linkPulseMat, from));
55
+ /** If new Link from this agent, broadcast to peers as tip */
56
+ if (linkPulseMat.isNew && from.b64 == this.cell.agentId.b64) {
57
+ all.push(this.broadcastTip({ Link: pulse.Link }));
58
+ }
51
59
  continue;
52
60
  }
53
61
  }
@@ -106,7 +114,7 @@ export class ZomeViewModelWithSignals extends ZomeViewModel {
106
114
  }
107
115
  /** */
108
116
  export function materializeEntryPulse(entryPulse, entryTypes) {
109
- console.log("materializeEntryPulse()", entryTypes);
117
+ //console.log("materializeEntryPulse()", entryTypes);
110
118
  const stateStr = Object.keys(entryPulse.state)[0];
111
119
  return {
112
120
  ah: new ActionId(entryPulse.ah),
@@ -116,10 +124,31 @@ export function materializeEntryPulse(entryPulse, entryTypes) {
116
124
  author: new AgentId(entryPulse.author),
117
125
  eh: new EntryId(entryPulse.eh),
118
126
  entryType: entryTypes[entryPulse.def.entry_index],
127
+ visibility: entryPulse.def.visibility,
119
128
  bytes: entryPulse.bytes,
120
129
  };
121
130
  }
122
131
  /** */
132
+ export function dematerializeEntryPulse(pulse, entryTypes) {
133
+ let state = {};
134
+ state[pulse.state] = pulse.isNew;
135
+ //console.log("dematerializeEntryPulse()", state, entryTypes);
136
+ /** */
137
+ return {
138
+ ah: pulse.ah.hash,
139
+ state: state,
140
+ ts: pulse.ts,
141
+ author: pulse.author.hash,
142
+ eh: pulse.eh.hash,
143
+ def: {
144
+ entry_index: getIndexByVariant(entryTypes, pulse.entryType),
145
+ zome_index: 42,
146
+ visibility: pulse.visibility,
147
+ },
148
+ bytes: pulse.bytes,
149
+ };
150
+ }
151
+ /** */
123
152
  export function materializeLinkPulse(linkPulse, linkTypes) {
124
153
  console.log("materializeLinkPulse()", linkTypes);
125
154
  const stateStr = Object.keys(linkPulse.state)[0];
@@ -136,4 +165,24 @@ export function materializeLinkPulse(linkPulse, linkTypes) {
136
165
  isNew: linkPulse.state[stateStr],
137
166
  };
138
167
  }
168
+ /** */
169
+ export function dematerializeLinkPulse(pulse, linkTypes) {
170
+ let state = {};
171
+ state[pulse.state] = pulse.isNew;
172
+ console.log("dematerializeLinkPulse()", state);
173
+ /** */
174
+ return {
175
+ state: state,
176
+ link: {
177
+ author: pulse.author.hash,
178
+ base: pulse.base.hash,
179
+ target: pulse.target.hash,
180
+ timestamp: pulse.timestamp,
181
+ zome_index: pulse.zome_index,
182
+ link_type: getIndexByVariant(linkTypes, pulse.link_type),
183
+ tag: pulse.tag,
184
+ create_link_hash: pulse.create_link_hash.hash,
185
+ }
186
+ };
187
+ }
139
188
  //# sourceMappingURL=ZomeViewModelWithSignals.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ZomeViewModelWithSignals.js","sourceRoot":"","sources":["../src/ZomeViewModelWithSignals.ts"],"names":[],"mappings":"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","sourcesContent":["import {AppSignalCb, Link, Timestamp} from \"@holochain/client\";\r\nimport {\r\n ActionId,\r\n AgentId, AnyLinkableId, EntryId,\r\n EntryPulse, getVariantByIndex, intoLinkableId, LinkPulse, prettyDate, StateChange,\r\n TipProtocol, TipProtocolVariantApp, TipProtocolVariantEntry, TipProtocolVariantLink,\r\n ZomeSignal, ZomeSignalProtocol,\r\n ZomeSignalProtocolType, ZomeSignalProtocolVariantEntry, ZomeSignalProtocolVariantLink\r\n} from \"@ddd-qc/cell-proxy\";\r\nimport {AppSignal} from \"@holochain/client/lib/api/app/types\";\r\nimport {ZomeViewModel} from \"./ZomeViewModel\";\r\nimport {ActionHash, AgentPubKey} from \"@holochain/client/lib/types\";\r\nimport {AnyLinkableHash, LinkType, ZomeIndex} from \"@holochain/client/lib/hdk/link\";\r\n\r\n\r\n/** */\r\nexport interface CastLog {\r\n ts: Timestamp,\r\n tip: TipProtocol,\r\n peers: AgentId[],\r\n}\r\n\r\n\r\n/**\r\n * ZVM with support for ZomeSignals\r\n */\r\nexport abstract class ZomeViewModelWithSignals extends ZomeViewModel {\r\n\r\n private _castLogs: CastLog[] = [];\r\n\r\n /** Methods to override */\r\n protected handleAppTip(_appTip: Uint8Array, _from: AgentId): ZomeSignalProtocol | undefined { return undefined;}\r\n protected async handleEntryPulse(_pulse: EntryPulseMat, _from: AgentId): Promise<void> {}\r\n protected async handleLinkPulse(_pulse: LinkPulseMat, _from: AgentId): Promise<void> {}\r\n\r\n\r\n /** */\r\n signalHandler?: AppSignalCb = this.mySignalHandler;\r\n\r\n\r\n /** */\r\n private mySignalHandler(appSignal: AppSignal): void {\r\n const defaultZomeName = (this.constructor as typeof ZomeViewModelWithSignals).ZOME_PROXY.DEFAULT_ZOME_NAME\r\n console.log(\"mySignalHandler()\", appSignal, defaultZomeName);\r\n if (appSignal.zome_name !== defaultZomeName) {\r\n return;\r\n }\r\n const zomeSignal = appSignal.payload as ZomeSignal;\r\n if (!(\"pulses\" in zomeSignal)) {\r\n return;\r\n }\r\n /*await*/ this.handleSignal(zomeSignal);\r\n }\r\n\r\n\r\n /** */\r\n private async handleSignal(signal: ZomeSignal): Promise<void> {\r\n const from = new AgentId(signal.from);\r\n let all = [];\r\n for (let pulse of signal.pulses) {\r\n /** -- Handle Signal according to type -- */\r\n /** Change tip to Entry or Link signal */\r\n if (ZomeSignalProtocolType.Tip in pulse) {\r\n pulse = this.handleTip(pulse.Tip as TipProtocol, from)!;\r\n if (!pulse) {\r\n continue;\r\n }\r\n }\r\n if (ZomeSignalProtocolType.Entry in pulse) {\r\n const entryPulseMat = materializeEntryPulse(pulse.Entry as EntryPulse, (this.constructor as typeof ZomeViewModel).ENTRY_TYPES);\r\n all.push(this.handleEntryPulse(entryPulseMat, from));\r\n continue;\r\n }\r\n if (ZomeSignalProtocolType.Link in pulse) {\r\n const linkPulseMat = materializeLinkPulse(pulse.Link as LinkPulse, (this.constructor as typeof ZomeViewModel).LINK_TYPES);\r\n all.push(this.handleLinkPulse(linkPulseMat, from));\r\n continue;\r\n }\r\n }\r\n await Promise.all(all);\r\n this.notifySubscribers();\r\n }\r\n\r\n\r\n /** */\r\n private handleTip(tip: TipProtocol, from: AgentId): ZomeSignalProtocol | undefined {\r\n const type = Object.keys(tip)[0];\r\n console.log(\"handleTip()\", type, from, tip);\r\n /* Handle tip according to its type */\r\n switch (type) {\r\n case \"Ping\":\r\n case \"Pong\":\r\n break;\r\n case \"Entry\": return {Entry: (tip as TipProtocolVariantEntry).Entry} as ZomeSignalProtocolVariantEntry; break;\r\n case \"Link\": return {Link: (tip as TipProtocolVariantLink).Link} as ZomeSignalProtocolVariantLink; break;\r\n case \"App\":\r\n return this.handleAppTip((tip as TipProtocolVariantApp).App, from);\r\n break;\r\n }\r\n }\r\n\r\n\r\n /** */\r\n async broadcastTip(tip: TipProtocol, agents?: Array<AgentId>): Promise<void> {\r\n agents = agents? agents : this._dvmParent.livePeers;\r\n /** Skip if no recipients or sending to self only */\r\n const filtered = agents.filter((key) => key.b64 != this.cell.agentId.b64);\r\n const tipType = Object.keys(tip)[0];\r\n console.log(`broadcastTip() Sending Tip \"${tipType}\" to`, filtered, this.cell.agentId.short);\r\n //if (!agents || agents.length == 1 && agents[0] === this._cellProxy.cell.agentPubKey) {\r\n if (!filtered || filtered.length == 0) {\r\n console.log(\"broadcastTip() aborted: No recipients\")\r\n return;\r\n }\r\n /** Broadcast */\r\n const peers = agents.map((key) => key.hash);\r\n await this.zomeProxy.call('cast_tip', {tip, peers});\r\n /** Log */\r\n this._castLogs.push({ts: Date.now(), tip, peers: agents});\r\n }\r\n\r\n\r\n /** */\r\n dumpCastLogs() {\r\n console.warn(`Tips sent from zome \"${this.zomeName}\"`);\r\n let appSignals: any[] = [];\r\n this._castLogs.map((log) => {\r\n const type = Object.keys(log.tip)[0];\r\n const payload = (log.tip as any)[type];\r\n appSignals.push({timestamp: prettyDate(new Date(log.ts)), type, payload, count: log.peers.length, first: log.peers[0]});\r\n });\r\n console.table(appSignals);\r\n }\r\n}\r\n\r\n\r\nexport interface EntryPulseMat {\r\n ah: ActionId,\r\n state: string,\r\n isNew: Boolean,\r\n ts: Timestamp,\r\n author: AgentId,\r\n eh: EntryId,\r\n entryType: string,\r\n bytes: Uint8Array,\r\n}\r\n\r\n\r\n/** */\r\nexport function materializeEntryPulse(entryPulse: EntryPulse, entryTypes: string[]): EntryPulseMat {\r\n console.log(\"materializeEntryPulse()\", entryTypes);\r\n const stateStr = Object.keys(entryPulse.state)[0];\r\n return {\r\n ah: new ActionId(entryPulse.ah),\r\n state: stateStr,\r\n isNew: (entryPulse.state as any)[stateStr],\r\n ts: entryPulse.ts,\r\n author: new AgentId(entryPulse.author),\r\n eh: new EntryId(entryPulse.eh),\r\n entryType: entryTypes[entryPulse.def.entry_index],\r\n bytes: entryPulse.bytes,\r\n }\r\n}\r\n\r\n\r\nexport interface LinkMat {\r\n\r\n}\r\n\r\nexport interface LinkPulseMat {\r\n author: AgentId,\r\n base: AnyLinkableId;\r\n target: AnyLinkableId,\r\n timestamp: Timestamp,\r\n zome_index: ZomeIndex,\r\n link_type: string,\r\n tag: Uint8Array,\r\n create_link_hash: ActionId,\r\n /** */\r\n state: string,\r\n isNew: Boolean,\r\n}\r\n\r\n/** */\r\nexport function materializeLinkPulse(linkPulse: LinkPulse, linkTypes: string[]): LinkPulseMat {\r\n console.log(\"materializeLinkPulse()\", linkTypes);\r\n const stateStr = Object.keys(linkPulse.state)[0];\r\n return {\r\n author: new AgentId(linkPulse.link.author),\r\n base: intoLinkableId((linkPulse.link as any).base),\r\n target: intoLinkableId(linkPulse.link.target),\r\n timestamp: linkPulse.link.timestamp,\r\n zome_index: linkPulse.link.zome_index,\r\n link_type: linkTypes[linkPulse.link.link_type],\r\n tag: linkPulse.link.tag,\r\n create_link_hash: new ActionId(linkPulse.link.create_link_hash),\r\n state: Object.keys(linkPulse.state)[0],\r\n isNew: (linkPulse.state as any)[stateStr],\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ZomeViewModelWithSignals.js","sourceRoot":"","sources":["../src/ZomeViewModelWithSignals.ts"],"names":[],"mappings":"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","sourcesContent":["import {AppSignalCb, EntryVisibility, Timestamp} from \"@holochain/client\";\r\nimport {\r\n ActionId,\r\n AgentId, AnyLinkableId, EntryId,\r\n EntryPulse, getIndexByVariant, intoLinkableId, LinkPulse, prettyDate, StateChange,\r\n TipProtocol, TipProtocolVariantApp, TipProtocolVariantEntry, TipProtocolVariantLink,\r\n ZomeSignal, ZomeSignalProtocol,\r\n ZomeSignalProtocolType, ZomeSignalProtocolVariantEntry, ZomeSignalProtocolVariantLink\r\n} from \"@ddd-qc/cell-proxy\";\r\nimport {AppSignal} from \"@holochain/client/lib/api/app/types\";\r\nimport {ZomeViewModel} from \"./ZomeViewModel\";\r\nimport {ZomeIndex} from \"@holochain/client/lib/hdk/link\";\r\n\r\n\r\n/** */\r\nexport interface CastLog {\r\n ts: Timestamp,\r\n tip: TipProtocol,\r\n peers: AgentId[],\r\n}\r\n\r\n\r\n/**\r\n * ZVM with support for ZomeSignals\r\n */\r\nexport abstract class ZomeViewModelWithSignals extends ZomeViewModel {\r\n\r\n private _castLogs: CastLog[] = [];\r\n\r\n /** Methods to override */\r\n protected handleAppTip(_appTip: Uint8Array, _from: AgentId): ZomeSignalProtocol | undefined { return undefined;}\r\n protected async handleEntryPulse(_pulse: EntryPulseMat, _from: AgentId): Promise<void> {}\r\n protected async handleLinkPulse(_pulse: LinkPulseMat, _from: AgentId): Promise<void> {}\r\n\r\n\r\n /** */\r\n signalHandler?: AppSignalCb = this.mySignalHandler;\r\n\r\n\r\n /** */\r\n private mySignalHandler(appSignal: AppSignal): void {\r\n const defaultZomeName = (this.constructor as typeof ZomeViewModelWithSignals).ZOME_PROXY.DEFAULT_ZOME_NAME;\r\n console.log(\"mySignalHandler()\", appSignal, defaultZomeName);\r\n if (appSignal.zome_name !== defaultZomeName) {\r\n return;\r\n }\r\n const zomeSignal = appSignal.payload as ZomeSignal;\r\n if (!(\"pulses\" in zomeSignal)) {\r\n return;\r\n }\r\n /*await*/ this.handleSignal(zomeSignal);\r\n }\r\n\r\n\r\n /** */\r\n private async handleSignal(signal: ZomeSignal): Promise<void> {\r\n const from = new AgentId(signal.from);\r\n let all = [];\r\n for (let pulse of signal.pulses) {\r\n /** -- Handle Signal according to type -- */\r\n /** Change tip to Entry or Link signal */\r\n if (ZomeSignalProtocolType.Tip in pulse) {\r\n pulse = this.handleTip(pulse.Tip as TipProtocol, from)!;\r\n if (!pulse) {\r\n continue;\r\n }\r\n }\r\n if (ZomeSignalProtocolType.Entry in pulse) {\r\n const entryPulseMat = materializeEntryPulse(pulse.Entry as EntryPulse, (this.constructor as typeof ZomeViewModel).ENTRY_TYPES);\r\n all.push(this.handleEntryPulse(entryPulseMat, from));\r\n /** If new entry from this agent, broadcast to peers as tip */\r\n if (entryPulseMat.isNew && from.b64 == this.cell.agentId.b64 && entryPulseMat.visibility == \"Public\") {\r\n all.push(this.broadcastTip({Entry: pulse.Entry as EntryPulse}));\r\n }\r\n continue;\r\n }\r\n if (ZomeSignalProtocolType.Link in pulse) {\r\n const linkPulseMat = materializeLinkPulse(pulse.Link as LinkPulse, (this.constructor as typeof ZomeViewModel).LINK_TYPES);\r\n all.push(this.handleLinkPulse(linkPulseMat, from));\r\n /** If new Link from this agent, broadcast to peers as tip */\r\n if (linkPulseMat.isNew && from.b64 == this.cell.agentId.b64) {\r\n all.push(this.broadcastTip({Link: pulse.Link as LinkPulse}));\r\n }\r\n continue;\r\n }\r\n }\r\n await Promise.all(all);\r\n this.notifySubscribers();\r\n }\r\n\r\n\r\n /** */\r\n private handleTip(tip: TipProtocol, from: AgentId): ZomeSignalProtocol | undefined {\r\n const type = Object.keys(tip)[0];\r\n console.log(\"handleTip()\", type, from, tip);\r\n /* Handle tip according to its type */\r\n switch (type) {\r\n case \"Ping\":\r\n case \"Pong\":\r\n break;\r\n case \"Entry\": return {Entry: (tip as TipProtocolVariantEntry).Entry} as ZomeSignalProtocolVariantEntry; break;\r\n case \"Link\": return {Link: (tip as TipProtocolVariantLink).Link} as ZomeSignalProtocolVariantLink; break;\r\n case \"App\":\r\n return this.handleAppTip((tip as TipProtocolVariantApp).App, from);\r\n break;\r\n }\r\n }\r\n\r\n\r\n /** */\r\n async broadcastTip(tip: TipProtocol, agents?: Array<AgentId>): Promise<void> {\r\n agents = agents? agents : this._dvmParent.livePeers;\r\n /** Skip if no recipients or sending to self only */\r\n const filtered = agents.filter((key) => key.b64 != this.cell.agentId.b64);\r\n const tipType = Object.keys(tip)[0];\r\n console.log(`broadcastTip() Sending Tip \"${tipType}\" to`, filtered, this.cell.agentId.short);\r\n //if (!agents || agents.length == 1 && agents[0] === this._cellProxy.cell.agentPubKey) {\r\n if (!filtered || filtered.length == 0) {\r\n console.log(\"broadcastTip() aborted: No recipients\")\r\n return;\r\n }\r\n /** Broadcast */\r\n const peers = agents.map((key) => key.hash);\r\n await this.zomeProxy.call('cast_tip', {tip, peers});\r\n /** Log */\r\n this._castLogs.push({ts: Date.now(), tip, peers: agents});\r\n }\r\n\r\n\r\n /** */\r\n dumpCastLogs() {\r\n console.warn(`Tips sent from zome \"${this.zomeName}\"`);\r\n let appSignals: any[] = [];\r\n this._castLogs.map((log) => {\r\n const type = Object.keys(log.tip)[0];\r\n const payload = (log.tip as any)[type];\r\n appSignals.push({timestamp: prettyDate(new Date(log.ts)), type, payload, count: log.peers.length, first: log.peers[0]});\r\n });\r\n console.table(appSignals);\r\n }\r\n}\r\n\r\n\r\nexport interface EntryPulseMat {\r\n ah: ActionId,\r\n state: string,\r\n isNew: Boolean,\r\n ts: Timestamp,\r\n author: AgentId,\r\n eh: EntryId,\r\n entryType: string,\r\n visibility: EntryVisibility,\r\n bytes: Uint8Array,\r\n}\r\n\r\n\r\n/** */\r\nexport function materializeEntryPulse(entryPulse: EntryPulse, entryTypes: string[]): EntryPulseMat {\r\n //console.log(\"materializeEntryPulse()\", entryTypes);\r\n const stateStr = Object.keys(entryPulse.state)[0];\r\n return {\r\n ah: new ActionId(entryPulse.ah),\r\n state: stateStr,\r\n isNew: (entryPulse.state as any)[stateStr],\r\n ts: entryPulse.ts,\r\n author: new AgentId(entryPulse.author),\r\n eh: new EntryId(entryPulse.eh),\r\n entryType: entryTypes[entryPulse.def.entry_index],\r\n visibility: entryPulse.def.visibility,\r\n bytes: entryPulse.bytes,\r\n }\r\n}\r\n\r\n\r\n/** */\r\nexport function dematerializeEntryPulse(pulse: EntryPulseMat, entryTypes: string[]): EntryPulse {\r\n let state: Object = {};\r\n state[pulse.state] = pulse.isNew;\r\n //console.log(\"dematerializeEntryPulse()\", state, entryTypes);\r\n /** */\r\n return {\r\n ah: pulse.ah.hash,\r\n state: state as StateChange,\r\n ts: pulse.ts,\r\n author: pulse.author.hash,\r\n eh: pulse.eh.hash,\r\n def: {\r\n entry_index: getIndexByVariant(entryTypes, pulse.entryType),\r\n zome_index: 42, // Should not be used\r\n visibility: pulse.visibility,\r\n },\r\n bytes: pulse.bytes,\r\n }\r\n}\r\n\r\n\r\n/** */\r\nexport interface LinkPulseMat {\r\n author: AgentId,\r\n base: AnyLinkableId;\r\n target: AnyLinkableId,\r\n timestamp: Timestamp,\r\n zome_index: ZomeIndex,\r\n link_type: string,\r\n tag: Uint8Array,\r\n create_link_hash: ActionId,\r\n /** */\r\n state: string,\r\n isNew: Boolean,\r\n}\r\n\r\n/** */\r\nexport function materializeLinkPulse(linkPulse: LinkPulse, linkTypes: string[]): LinkPulseMat {\r\n console.log(\"materializeLinkPulse()\", linkTypes);\r\n const stateStr = Object.keys(linkPulse.state)[0];\r\n return {\r\n author: new AgentId(linkPulse.link.author),\r\n base: intoLinkableId(linkPulse.link.base),\r\n target: intoLinkableId(linkPulse.link.target),\r\n timestamp: linkPulse.link.timestamp,\r\n zome_index: linkPulse.link.zome_index,\r\n link_type: linkTypes[linkPulse.link.link_type],\r\n tag: linkPulse.link.tag,\r\n create_link_hash: new ActionId(linkPulse.link.create_link_hash),\r\n state: Object.keys(linkPulse.state)[0],\r\n isNew: (linkPulse.state as any)[stateStr],\r\n }\r\n}\r\n\r\n/** */\r\nexport function dematerializeLinkPulse(pulse: LinkPulseMat, linkTypes: string[]): LinkPulse {\r\n let state: Object = {};\r\n state[pulse.state] = pulse.isNew;\r\n console.log(\"dematerializeLinkPulse()\", state);\r\n /** */\r\n return {\r\n state: state as StateChange,\r\n link: {\r\n author: pulse.author.hash,\r\n base: pulse.base.hash,\r\n target: pulse.target.hash,\r\n timestamp: pulse.timestamp,\r\n zome_index: pulse.zome_index,\r\n link_type: getIndexByVariant(linkTypes, pulse.link_type),\r\n tag: pulse.tag,\r\n create_link_hash: pulse.create_link_hash.hash,\r\n }\r\n }\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ddd-qc/lit-happ",
3
- "version": "0.26.0",
3
+ "version": "0.26.2",
4
4
  "description": "MVVM Framework for holochain apps using Lit",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -29,7 +29,7 @@
29
29
  },
30
30
  "dependencies": {
31
31
  "@ddd-qc/cell-proxy": "file:../cell-proxy",
32
- "@holochain/client": "^0.18.0-dev.1",
32
+ "@holochain/client": "^0.18.0-dev.4",
33
33
  "@lit/context": "1.0.1",
34
34
  "lit": "3.0.2",
35
35
  "async-mutex": "0.4.0"