@ddd-qc/lit-happ 0.33.8 → 0.33.9

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.
@@ -10,8 +10,8 @@ export declare class HappMultiElement extends LitElement {
10
10
  hvms: [AppProxy, HappViewModel][];
11
11
  networkCaller?: NetworkCaller;
12
12
  get count(): number;
13
- protected constructor(appConnections: [HcConnectionOptions, InstalledAppId | undefined][], isMainView: boolean);
14
- protected constructHvms(appConnections: [HcConnectionOptions, InstalledAppId | undefined][]): Promise<void>;
13
+ protected constructor(appConnections: [HcConnectionOptions, string | undefined, InstalledAppId | undefined][], isMainView: boolean);
14
+ protected constructHvms(appConnections: [HcConnectionOptions, happSha256: string | undefined, InstalledAppId | undefined][]): Promise<void>;
15
15
  initializePerspectiveFromLocal(): Promise<void>;
16
16
  initializePerspectiveFromNetwork(): Promise<void>;
17
17
  shouldUpdate(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"HappMultiElement.d.ts","sourceRoot":"","sources":["../src/HappMultiElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,KAAK,CAAC;AAE/B,OAAO,EACH,QAAQ,EAGR,SAAS,EAAkC,mBAAmB,EACjE,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AACrC,OAAO,EACL,cAAc,EAAE,cAAc,EAC9B,SAAS,EACV,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAO9C,qBAAa,gBAAiB,SAAQ,UAAU;aAgB5B,UAAU,EAAE,OAAO;IAbrC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;IAGd,IAAI,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,CAAK;IAG/C,aAAa,CAAC,EAAE,aAAa,CAAC;IAE9B,IAAI,KAAK,IAAI,MAAM,CAA0B;IAG7C,SAAS,aACP,cAAc,EAAE,CAAC,mBAAmB,EAAE,cAAc,GAAG,SAAS,CAAC,EAAE,EACnD,UAAU,EAAE,OAAO;cAQrB,aAAa,CAAC,cAAc,EAAE,CAAC,mBAAmB,EAAE,cAAc,GAAG,SAAS,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB3G,8BAA8B,IAAI,OAAO,CAAC,IAAI,CAAC;IAO/C,gCAAgC,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5C,YAAY;IAIZ,YAAY;IAQf,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAEhC,+BAA+B,IAAI,OAAO,CAAC,IAAI,CAAC;IAEhD,iCAAiC,IAAI,OAAO,CAAC,IAAI,CAAC;IAMpD,cAAc,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;CAgDrG"}
1
+ {"version":3,"file":"HappMultiElement.d.ts","sourceRoot":"","sources":["../src/HappMultiElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,KAAK,CAAC;AAE/B,OAAO,EACH,QAAQ,EAGR,SAAS,EAAkC,mBAAmB,EACjE,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AACrC,OAAO,EACL,cAAc,EAAE,cAAc,EAC9B,SAAS,EACV,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAO9C,qBAAa,gBAAiB,SAAQ,UAAU;aAgB5B,UAAU,EAAE,OAAO;IAbrC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;IAGd,IAAI,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,CAAK;IAG/C,aAAa,CAAC,EAAE,aAAa,CAAC;IAE9B,IAAI,KAAK,IAAI,MAAM,CAA0B;IAG7C,SAAS,aACP,cAAc,EAAE,CAAC,mBAAmB,EAAE,MAAM,GAAG,SAAS,EAAE,cAAc,GAAG,SAAS,CAAC,EAAE,EACvE,UAAU,EAAE,OAAO;cAQrB,aAAa,CAAC,cAAc,EAAE,CAAC,mBAAmB,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,cAAc,GAAG,SAAS,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB3I,8BAA8B,IAAI,OAAO,CAAC,IAAI,CAAC;IAO/C,gCAAgC,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5C,YAAY;IAIZ,YAAY;IAQf,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAEhC,+BAA+B,IAAI,OAAO,CAAC,IAAI,CAAC;IAEhD,iCAAiC,IAAI,OAAO,CAAC,IAAI,CAAC;IAMpD,cAAc,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;CAgDrG"}
@@ -18,8 +18,8 @@ export class HappMultiElement extends LitElement {
18
18
  if (!hvmDef) {
19
19
  throw Error("HVM_DEF static field undefined in HappMultiElement subclass " + this.constructor.name);
20
20
  }
21
- for (const [options, appId] of appConnections) {
22
- const appProxy = await ConductorAppProxy.new(hvmDef.id, options);
21
+ for (const [options, happSha256, appId] of appConnections) {
22
+ const appProxy = await ConductorAppProxy.new(hvmDef.id, options, happSha256);
23
23
  if (appId) {
24
24
  hvmDef.id = appId;
25
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"HappMultiElement.js","sourceRoot":"","sources":["../src/HappMultiElement.ts"],"names":[],"mappings":"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","sourcesContent":["import {LitElement} from \"lit\";\nimport { state } from \"lit/decorators.js\";\nimport {\n AppProxy,\n ConductorAppProxy,\n flattenCells,\n CellIdStr, AgentIdMap, DnaId, CellAddress, HcConnectionOptions,\n} from \"@ddd-qc/cell-proxy\";\nimport {HappViewModel} from \"./HappViewModel\";\nimport {HvmDef} from \"./definitions\";\nimport {\n InstalledAppId, NetworkMetrics,\n Timestamp\n} from \"@holochain/client\";\n// @ts-ignore\nimport * as net from \"net\";\nimport {NetworkCaller} from \"./NetworkCaller\";\n\n\n/**\n * Base class for HappMultiElements, which are LitElements that wrap multiple HappViewModel,\n * i.e. the main WebComponent of a web-app using multiple Holochain apps.\n */\nexport class HappMultiElement extends LitElement {\n\n /** Must be defined by subclass */\n static HVM_DEF: HvmDef;\n\n /** Set during init triggered at ctor */\n @state() hvms: [AppProxy, HappViewModel][] = []\n\n /** Continually calls networkInfo for a specific cell with appProxy */\n networkCaller?: NetworkCaller;\n\n get count(): number {return this.hvms.length}\n\n /** Ctor */\n protected constructor(\n appConnections: [HcConnectionOptions, InstalledAppId | undefined][],\n public readonly isMainView: boolean,\n ) {\n super();\n this.constructHvms(appConnections)\n .then(() => console.debug(\"HappMultiElement constructed\"))\n }\n\n /** */\n protected async constructHvms(appConnections: [HcConnectionOptions, InstalledAppId | undefined][]): Promise<void> {\n const hvmDef = (this.constructor as typeof HappMultiElement).HVM_DEF;\n if (!hvmDef) {\n throw Error(\"HVM_DEF static field undefined in HappMultiElement subclass \" + this.constructor.name);\n }\n for (const [options, appId] of appConnections) {\n const appProxy = await ConductorAppProxy.new(hvmDef.id, options);\n if (appId) {\n /** Override appId */\n hvmDef.id = appId;\n }\n const hvm = await HappViewModel.new(this, appProxy, hvmDef, this.isMainView);\n await hvm.authorizeAllZomeCalls(appProxy.adminWs);\n this.hvms.push([appProxy, hvm]);\n }\n this.networkCaller = new NetworkCaller(this.hvms[0]![0]); // use first appProxy\n await this.hvmsConstructed();\n await this.initializePerspectiveFromLocal();\n }\n\n /** */\n async initializePerspectiveFromLocal(): Promise<void> {\n for (const [_proxy, hvm] of this.hvms) {\n await hvm.initializePerspectiveFromLocal();\n }\n await this.perspectiveInitializedFromLocal();\n }\n\n async initializePerspectiveFromNetwork(): Promise<void> {\n for (const [_proxy, hvm] of this.hvms) {\n await hvm.initializePerspectiveFromLocal();\n }\n await this.perspectiveInitializedFromNetwork();\n }\n\n /** -- Lit lifecycle hooks -- */\n\n /** */\n override shouldUpdate() {\n return this.hvms.length > 0;\n }\n\n override firstUpdated() {\n this.perspectiveInitializedFromNetwork()\n .then(() => console.debug(\"Finished initializing Happ perspective from Network\"))\n }\n\n /** -- Hooks for subclasses to override -- */\n\n /** */\n async hvmsConstructed(): Promise<void> {}\n /** */\n async perspectiveInitializedFromLocal(): Promise<void> {}\n /** */\n async perspectiveInitializedFromNetwork(): Promise<void> {}\n\n\n /** -- Methods -- */\n\n /** */\n async networkInfoAll(baseRoleName?: string): Promise<Record<CellIdStr, [Timestamp, NetworkMetrics]>> {\n //console.debug(`networkInfoAll() \"${baseRoleName}\"`);\n /** Grab cellMap */\n const hvmDef = (this.constructor as typeof HappMultiElement).HVM_DEF;\n const appProxy = this.hvms[0]![0];\n const cellMap = appProxy.getAppCells(hvmDef.id);\n if (!cellMap) {\n return Promise.reject(\"No cells found at given appId: \" + hvmDef.id);\n }\n /** Get cell Ids */\n let cellAddrs: CellAddress[] = [];\n if (baseRoleName) {\n const cfr = cellMap[baseRoleName];\n if (!cfr) {\n return Promise.reject(\"No cells found at given baseRoleName: \" + baseRoleName);\n }\n cellAddrs = flattenCells(cfr);\n } else {\n for (const cells of Object.values(cellMap)) {\n cellAddrs = cellAddrs.concat(flattenCells(cells))\n }\n }\n //console.debug(`networkInfoAll() cellIds`, cellAddrs.map(cellId => cellId.str));\n /* Sort by agent key */\n let dnaPerAgentMap: AgentIdMap<DnaId[]> = new AgentIdMap();\n for (const cellAddr of cellAddrs) {\n if (!dnaPerAgentMap.get(cellAddr.agentId)) {\n dnaPerAgentMap.set(cellAddr.agentId, []);\n }\n dnaPerAgentMap.get(cellAddr.agentId)!.push(cellAddr.dnaId);\n }\n //console.debug(`networkInfoAll() dnaMap`, dnaPerAgentMap);\n /** Call NetworkInfo per AgentId */\n const allNetInfos: Record<CellIdStr, [Timestamp, NetworkMetrics]> = {};\n for (const [agent, dnaIds] of dnaPerAgentMap.entries()) {\n for (const dna of dnaIds) {\n const response = await appProxy.dumpNetworkMetrics({dna_hash: dna.hash, include_dht_summary: true});\n if (!response || !response[dna.b64]) {\n throw Promise.reject(\"No network metrics response for dna\");\n }\n const idStr = new CellAddress(dna, agent).str;\n allNetInfos[idStr] = [Date.now(), response[dna.b64]!];\n }\n }\n /* Done */\n return allNetInfos;\n }\n\n}\n"]}
1
+ {"version":3,"file":"HappMultiElement.js","sourceRoot":"","sources":["../src/HappMultiElement.ts"],"names":[],"mappings":"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","sourcesContent":["import {LitElement} from \"lit\";\nimport { state } from \"lit/decorators.js\";\nimport {\n AppProxy,\n ConductorAppProxy,\n flattenCells,\n CellIdStr, AgentIdMap, DnaId, CellAddress, HcConnectionOptions,\n} from \"@ddd-qc/cell-proxy\";\nimport {HappViewModel} from \"./HappViewModel\";\nimport {HvmDef} from \"./definitions\";\nimport {\n InstalledAppId, NetworkMetrics,\n Timestamp\n} from \"@holochain/client\";\n// @ts-ignore\nimport * as net from \"net\";\nimport {NetworkCaller} from \"./NetworkCaller\";\n\n\n/**\n * Base class for HappMultiElements, which are LitElements that wrap multiple HappViewModel,\n * i.e. the main WebComponent of a web-app using multiple Holochain apps.\n */\nexport class HappMultiElement extends LitElement {\n\n /** Must be defined by subclass */\n static HVM_DEF: HvmDef;\n\n /** Set during init triggered at ctor */\n @state() hvms: [AppProxy, HappViewModel][] = []\n\n /** Continually calls networkInfo for a specific cell with appProxy */\n networkCaller?: NetworkCaller;\n\n get count(): number {return this.hvms.length}\n\n /** Ctor */\n protected constructor(\n appConnections: [HcConnectionOptions, string | undefined, InstalledAppId | undefined][],\n public readonly isMainView: boolean,\n ) {\n super();\n this.constructHvms(appConnections)\n .then(() => console.debug(\"HappMultiElement constructed\"))\n }\n\n /** */\n protected async constructHvms(appConnections: [HcConnectionOptions, happSha256: string | undefined, InstalledAppId | undefined][]): Promise<void> {\n const hvmDef = (this.constructor as typeof HappMultiElement).HVM_DEF;\n if (!hvmDef) {\n throw Error(\"HVM_DEF static field undefined in HappMultiElement subclass \" + this.constructor.name);\n }\n for (const [options, happSha256, appId] of appConnections) {\n const appProxy = await ConductorAppProxy.new(hvmDef.id, options, happSha256);\n if (appId) {\n /** Override appId */\n hvmDef.id = appId;\n }\n const hvm = await HappViewModel.new(this, appProxy, hvmDef, this.isMainView);\n await hvm.authorizeAllZomeCalls(appProxy.adminWs);\n this.hvms.push([appProxy, hvm]);\n }\n this.networkCaller = new NetworkCaller(this.hvms[0]![0]); // use first appProxy\n await this.hvmsConstructed();\n await this.initializePerspectiveFromLocal();\n }\n\n /** */\n async initializePerspectiveFromLocal(): Promise<void> {\n for (const [_proxy, hvm] of this.hvms) {\n await hvm.initializePerspectiveFromLocal();\n }\n await this.perspectiveInitializedFromLocal();\n }\n\n async initializePerspectiveFromNetwork(): Promise<void> {\n for (const [_proxy, hvm] of this.hvms) {\n await hvm.initializePerspectiveFromLocal();\n }\n await this.perspectiveInitializedFromNetwork();\n }\n\n /** -- Lit lifecycle hooks -- */\n\n /** */\n override shouldUpdate() {\n return this.hvms.length > 0;\n }\n\n override firstUpdated() {\n this.perspectiveInitializedFromNetwork()\n .then(() => console.debug(\"Finished initializing Happ perspective from Network\"))\n }\n\n /** -- Hooks for subclasses to override -- */\n\n /** */\n async hvmsConstructed(): Promise<void> {}\n /** */\n async perspectiveInitializedFromLocal(): Promise<void> {}\n /** */\n async perspectiveInitializedFromNetwork(): Promise<void> {}\n\n\n /** -- Methods -- */\n\n /** */\n async networkInfoAll(baseRoleName?: string): Promise<Record<CellIdStr, [Timestamp, NetworkMetrics]>> {\n //console.debug(`networkInfoAll() \"${baseRoleName}\"`);\n /** Grab cellMap */\n const hvmDef = (this.constructor as typeof HappMultiElement).HVM_DEF;\n const appProxy = this.hvms[0]![0];\n const cellMap = appProxy.getAppCells(hvmDef.id);\n if (!cellMap) {\n return Promise.reject(\"No cells found at given appId: \" + hvmDef.id);\n }\n /** Get cell Ids */\n let cellAddrs: CellAddress[] = [];\n if (baseRoleName) {\n const cfr = cellMap[baseRoleName];\n if (!cfr) {\n return Promise.reject(\"No cells found at given baseRoleName: \" + baseRoleName);\n }\n cellAddrs = flattenCells(cfr);\n } else {\n for (const cells of Object.values(cellMap)) {\n cellAddrs = cellAddrs.concat(flattenCells(cells))\n }\n }\n //console.debug(`networkInfoAll() cellIds`, cellAddrs.map(cellId => cellId.str));\n /* Sort by agent key */\n let dnaPerAgentMap: AgentIdMap<DnaId[]> = new AgentIdMap();\n for (const cellAddr of cellAddrs) {\n if (!dnaPerAgentMap.get(cellAddr.agentId)) {\n dnaPerAgentMap.set(cellAddr.agentId, []);\n }\n dnaPerAgentMap.get(cellAddr.agentId)!.push(cellAddr.dnaId);\n }\n //console.debug(`networkInfoAll() dnaMap`, dnaPerAgentMap);\n /** Call NetworkInfo per AgentId */\n const allNetInfos: Record<CellIdStr, [Timestamp, NetworkMetrics]> = {};\n for (const [agent, dnaIds] of dnaPerAgentMap.entries()) {\n for (const dna of dnaIds) {\n const response = await appProxy.dumpNetworkMetrics({dna_hash: dna.hash, include_dht_summary: true});\n if (!response || !response[dna.b64]) {\n throw Promise.reject(\"No network metrics response for dna\");\n }\n const idStr = new CellAddress(dna, agent).str;\n allNetInfos[idStr] = [Date.now(), response[dna.b64]!];\n }\n }\n /* Done */\n return allNetInfos;\n }\n\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ddd-qc/lit-happ",
3
- "version": "0.33.8",
3
+ "version": "0.33.9",
4
4
  "description": "MVVM Framework for holochain apps using Lit",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",