@ddd-qc/lit-happ 0.18.0 → 0.18.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.
- package/dist/DnaViewModel.d.ts +3 -3
- package/dist/DnaViewModel.js +3 -2
- package/dist/DnaViewModel.js.map +1 -1
- package/dist/HappElement.d.ts +2 -2
- package/dist/HappElement.js +2 -2
- package/dist/HappElement.js.map +1 -1
- package/dist/HappViewModel.d.ts +4 -4
- package/dist/HappViewModel.js +18 -18
- package/dist/HappViewModel.js.map +1 -1
- package/dist/ViewModel.d.ts +0 -8
- package/dist/ViewModel.js +1 -1
- package/dist/ViewModel.js.map +1 -1
- package/package.json +1 -1
package/dist/DnaViewModel.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { ViewModel } from "./ViewModel";
|
|
|
4
4
|
import { AdminWebsocket, InstalledAppId, ZomeName } from "@holochain/client";
|
|
5
5
|
import { DnaModifiersOptions, ZvmDef } from "./definitions";
|
|
6
6
|
import { Context } from "@lit-labs/context";
|
|
7
|
-
import { CellProxy,
|
|
7
|
+
import { CellProxy, AppProxy, HCL, Dictionary } from "@ddd-qc/cell-proxy";
|
|
8
8
|
import { RoleSpecific } from "./roleMixin";
|
|
9
9
|
/** Interface specific to DnaViewModel class */
|
|
10
10
|
interface IDnaViewModel {
|
|
@@ -14,7 +14,7 @@ interface IDnaViewModel {
|
|
|
14
14
|
export type DvmConstructor = typeof RoleSpecific & {
|
|
15
15
|
DNA_MODIFIERS: DnaModifiersOptions;
|
|
16
16
|
} & {
|
|
17
|
-
new (host: ReactiveElement, proxy:
|
|
17
|
+
new (host: ReactiveElement, proxy: AppProxy, idOrHcl: HCL | InstalledAppId): DnaViewModel;
|
|
18
18
|
};
|
|
19
19
|
declare const DnaViewModel_base: (abstract new (...args: any[]) => {
|
|
20
20
|
_cell?: import("@ddd-qc/cell-proxy").Cell;
|
|
@@ -35,7 +35,7 @@ export declare abstract class DnaViewModel extends DnaViewModel_base implements
|
|
|
35
35
|
static ZVM_DEFS: ZvmDef[];
|
|
36
36
|
static DNA_MODIFIERS: DnaModifiersOptions;
|
|
37
37
|
/** Ctor */
|
|
38
|
-
constructor(host: ReactiveElement,
|
|
38
|
+
constructor(host: ReactiveElement, appProxy: AppProxy, idOrHcl: HCL | InstalledAppId);
|
|
39
39
|
/** -- Fields -- */
|
|
40
40
|
protected _cellProxy: CellProxy;
|
|
41
41
|
protected _zomeViewModels: Dictionary<ZomeViewModel>;
|
package/dist/DnaViewModel.js
CHANGED
|
@@ -11,7 +11,7 @@ import { RoleMixin } from "./roleMixin";
|
|
|
11
11
|
*/
|
|
12
12
|
export class DnaViewModel extends CellMixin(RoleMixin(ViewModel)) {
|
|
13
13
|
/** Ctor */
|
|
14
|
-
constructor(host,
|
|
14
|
+
constructor(host, appProxy, idOrHcl) {
|
|
15
15
|
super();
|
|
16
16
|
this.host = host;
|
|
17
17
|
/* ZomeName -> Zvm */
|
|
@@ -28,7 +28,7 @@ export class DnaViewModel extends CellMixin(RoleMixin(ViewModel)) {
|
|
|
28
28
|
}
|
|
29
29
|
const dvmCtor = this.constructor;
|
|
30
30
|
const zvmDefs = dvmCtor.ZVM_DEFS;
|
|
31
|
-
this._cellProxy =
|
|
31
|
+
this._cellProxy = appProxy.getCellProxy(this.hcl); // WARN can throw error
|
|
32
32
|
this._cell = this._cellProxy.cell;
|
|
33
33
|
console.log(`DVM.ctor of ${this.baseRoleName}`, this._cellProxy.cell);
|
|
34
34
|
/** Create all ZVMs for this DNA */
|
|
@@ -70,6 +70,7 @@ export class DnaViewModel extends CellMixin(RoleMixin(ViewModel)) {
|
|
|
70
70
|
const grantedFns = { [GrantedFunctionsType.Listed]: allFnNames };
|
|
71
71
|
try {
|
|
72
72
|
console.log("authorizeSigningCredentials: " + this.cell.hcl().toString(), allFnNames);
|
|
73
|
+
console.log("authorizeSigningCredentials. cell_id = [" + this.cell.dnaHash + " ; " + this.cell.agentPubKey + "]");
|
|
73
74
|
await adminWs.authorizeSigningCredentials(this.cell.id, grantedFns);
|
|
74
75
|
}
|
|
75
76
|
catch (e) {
|
package/dist/DnaViewModel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DnaViewModel.js","sourceRoot":"","sources":["../src/DnaViewModel.ts"],"names":[],"mappings":"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","sourcesContent":["import {ZomeViewModel} from \"./ZomeViewModel\";\nimport {ReactiveElement} from \"lit\";\nimport {ViewModel} from \"./ViewModel\";\nimport {\n AdminWebsocket,\n GrantedFunctionsType,\n InstalledAppId,\n ZomeName,\n} from \"@holochain/client\";\nimport {DnaModifiersOptions, ZvmDef} from \"./definitions\";\nimport {Context, createContext} from \"@lit-labs/context\";\nimport {\n CellProxy,\n ConductorAppProxy,\n HCL,\n Dictionary, CellMixin\n} from \"@ddd-qc/cell-proxy\";\nimport {RoleMixin, RoleSpecific} from \"./roleMixin\";\n\n\n//export type IDnaViewModel = _DnaViewModel & ICellDef & typeof RoleSpecific;\n\n/** Interface specific to DnaViewModel class */\ninterface IDnaViewModel {\n dumpLogs(zomeName?: ZomeName): void;\n fetchAllEntryDefs(): Promise<Dictionary<[string, boolean][]>>;\n //get entryTypes(): Dictionary<[string, boolean][]>;\n //getZomeEntryDefs(zomeName: ZomeName): [string, boolean][] | undefined;\n //getZomeViewModel(zomeName: ZomeName): ZomeViewModel | undefined\n}\n\nexport type DvmConstructor = typeof RoleSpecific & {DNA_MODIFIERS: DnaModifiersOptions} & {\n new(host: ReactiveElement, proxy: ConductorAppProxy, idOrHcl: HCL | InstalledAppId): DnaViewModel;\n};\n\n\n/**\n * Abstract ViewModel for a DNA.\n * It holds the CellProxy and all the ZomeViewModels of the DNA.\n * It is expected to derive this class for each DNA and add extra logic at the DNA level.\n * TODO: Split into RoleViewModel and CellViewModel (e.g. have call logs separated by role)\n */\nexport abstract class DnaViewModel extends CellMixin(RoleMixin(ViewModel)) implements IDnaViewModel {\n\n /* private */ static ZVM_DEFS: ZvmDef[];\n static DNA_MODIFIERS: DnaModifiersOptions;\n\n\n /** Ctor */\n constructor(public readonly host: ReactiveElement, conductorAppProxy: ConductorAppProxy, idOrHcl: HCL | InstalledAppId) {\n super();\n if (typeof idOrHcl === 'object') {\n this.baseRoleName = idOrHcl.baseRoleName;\n this.hcl = idOrHcl;\n } else {\n this.hcl = new HCL(idOrHcl, this.baseRoleName);\n }\n const dvmCtor = (this.constructor as typeof DnaViewModel)\n const zvmDefs = dvmCtor.ZVM_DEFS;\n this._cellProxy = conductorAppProxy.getCellProxy(this.hcl); // WARN can throw error\n this._cell = this._cellProxy.cell;\n console.log(`DVM.ctor of ${this.baseRoleName}`, this._cellProxy.cell);\n /** Create all ZVMs for this DNA */\n for (const zvmDef of zvmDefs) {\n let zvm;\n if (Array.isArray(zvmDef)) {\n zvm = new zvmDef[0](this._cellProxy, this, zvmDef[1]);\n } else {\n zvm = new zvmDef(this._cellProxy, this);\n }\n // TODO check zvm.zomeName exists in _cellProxy\n this._zomeViewModels[zvm.zomeName] = zvm;\n this._zomeNames[zvmDef.constructor.name] = zvm.zomeName;\n }\n this.provideContext(host); // TODO move this to host.connectedCallback? e.g. change ViewModel to a ReactiveController\n }\n\n\n /** -- Fields -- */\n\n protected _cellProxy: CellProxy;\n /* ZomeName -> Zvm */\n protected _zomeViewModels: Dictionary<ZomeViewModel> = {};\n /* ZvmCtorName -> ZomeName */\n protected _zomeNames: Dictionary<ZomeName> = {};\n private _allEntryDefs: Dictionary<[string, boolean][]> = {};\n\n public readonly hcl: HCL;\n\n\n /** -- Getters -- */\n\n getZomeEntryDefs(zomeName: ZomeName): [string, boolean][] | undefined {return this._allEntryDefs[zomeName]}\n getZomeViewModel(zomeName: ZomeName): ZomeViewModel | undefined {return this._zomeViewModels[zomeName]}\n getZomeName(zvm: typeof ZomeViewModel): ZomeName | undefined { return this._zomeNames[zvm.constructor.name]}\n\n /** -- Methods -- */\n\n /** Override so we can provide context of all zvms */\n /*private*/ provideContext(host: ReactiveElement): void {\n //console.log(\"DVM.provideContext()\", host, this)\n super.provideContext(host);\n for (const zvm of Object.values(this._zomeViewModels)) {\n zvm.provideContext(host)\n }\n }\n\n\n getContext(): Context<unknown, unknown> {return createContext<typeof this>('dvm/' + this.cell.name)};\n\n\n /** */\n async authorizeZomeCalls(adminWs: AdminWebsocket): Promise<void> {\n let allFnNames = [];\n for (const [_zomeName, zvm] of Object.entries(this._zomeViewModels)) {\n allFnNames = allFnNames.concat(zvm.zomeProxy.fnNames)\n }\n const grantedFns = { [GrantedFunctionsType.Listed]: allFnNames }\n try {\n console.log(\"authorizeSigningCredentials: \" + this.cell.hcl().toString(), allFnNames);\n await adminWs.authorizeSigningCredentials(this.cell.id, grantedFns);\n } catch(e) {\n console.warn(\"authorizeSigningCredentials FAILED.\", e);\n }\n // this._signingProps = getSigningCredentials(this.cellId);\n // console.log({signProps: this._signingProps})\n //\n // for (const [zomeName, zvm] of Object.entries(this._zomeViewModels)) {\n // zvm.zomeProxy.setSigningProps(this._signingProps);\n // }\n }\n\n\n /** */\n protected probeAllInner(): void {\n for (const [_name, zvm] of Object.entries(this._zomeViewModels)) {\n //console.log(\"Dvm.probeAll()\", name)\n zvm.probeAll();\n }\n }\n\n /** */\n zvmChanged(zvm: ZomeViewModel): void {}\n\n\n /** */\n async initializePerspectiveOffline(): Promise<void> {\n const all = [];\n for (const [_name, zvm] of Object.entries(this._zomeViewModels)) {\n const p = zvm.initializePerspectiveOffline();\n all.push(p);\n }\n await Promise.all(all);\n }\n\n\n /** */\n async initializePerspectiveOnline(): Promise<void> {\n const all = [];\n for (const [_name, zvm] of Object.entries(this._zomeViewModels)) {\n const p = zvm.initializePerspectiveOnline();\n all.push(p);\n }\n await Promise.all(all);\n }\n\n\n /** Maybe useless since the entry defs are in the integrity zome which is not represented here */\n async fetchAllEntryDefs(): Promise<Dictionary<[string, boolean][]>> {\n for (const zvm of Object.values(this._zomeViewModels)) {\n const zomeName = zvm.zomeName;\n try {\n const defs = await this._cellProxy.callEntryDefs(zomeName); // TODO optimize\n this._allEntryDefs[zomeName] = defs\n } catch (e) {\n console.warn(`Calling \"entry_defs()\" failed on zome \"${zomeName}\". Possibly because zome does not have any entry types defined.`)\n this._allEntryDefs[zomeName] = [];\n }\n }\n return this._allEntryDefs;\n }\n\n\n\n /** */\n dumpLogs(zomeName?: ZomeName): void {\n this._cellProxy.dumpLogs(zomeName);\n this._cellProxy.dumpSignals();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DnaViewModel.js","sourceRoot":"","sources":["../src/DnaViewModel.ts"],"names":[],"mappings":"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","sourcesContent":["import {ZomeViewModel} from \"./ZomeViewModel\";\nimport {ReactiveElement} from \"lit\";\nimport {ViewModel} from \"./ViewModel\";\nimport {\n AdminWebsocket,\n GrantedFunctionsType,\n InstalledAppId,\n ZomeName,\n} from \"@holochain/client\";\nimport {DnaModifiersOptions, ZvmDef} from \"./definitions\";\nimport {Context, createContext} from \"@lit-labs/context\";\nimport {\n CellProxy,\n AppProxy,\n HCL,\n Dictionary, CellMixin\n} from \"@ddd-qc/cell-proxy\";\nimport {RoleMixin, RoleSpecific} from \"./roleMixin\";\n\n\n//export type IDnaViewModel = _DnaViewModel & ICellDef & typeof RoleSpecific;\n\n/** Interface specific to DnaViewModel class */\ninterface IDnaViewModel {\n dumpLogs(zomeName?: ZomeName): void;\n fetchAllEntryDefs(): Promise<Dictionary<[string, boolean][]>>;\n //get entryTypes(): Dictionary<[string, boolean][]>;\n //getZomeEntryDefs(zomeName: ZomeName): [string, boolean][] | undefined;\n //getZomeViewModel(zomeName: ZomeName): ZomeViewModel | undefined\n}\n\nexport type DvmConstructor = typeof RoleSpecific & {DNA_MODIFIERS: DnaModifiersOptions} & {\n new(host: ReactiveElement, proxy: AppProxy, idOrHcl: HCL | InstalledAppId): DnaViewModel;\n};\n\n\n/**\n * Abstract ViewModel for a DNA.\n * It holds the CellProxy and all the ZomeViewModels of the DNA.\n * It is expected to derive this class for each DNA and add extra logic at the DNA level.\n * TODO: Split into RoleViewModel and CellViewModel (e.g. have call logs separated by role)\n */\nexport abstract class DnaViewModel extends CellMixin(RoleMixin(ViewModel)) implements IDnaViewModel {\n\n /* private */ static ZVM_DEFS: ZvmDef[];\n static DNA_MODIFIERS: DnaModifiersOptions;\n\n\n /** Ctor */\n constructor(public readonly host: ReactiveElement, appProxy: AppProxy, idOrHcl: HCL | InstalledAppId) {\n super();\n if (typeof idOrHcl === 'object') {\n this.baseRoleName = idOrHcl.baseRoleName;\n this.hcl = idOrHcl;\n } else {\n this.hcl = new HCL(idOrHcl, this.baseRoleName);\n }\n const dvmCtor = (this.constructor as typeof DnaViewModel)\n const zvmDefs = dvmCtor.ZVM_DEFS;\n this._cellProxy = appProxy.getCellProxy(this.hcl); // WARN can throw error\n this._cell = this._cellProxy.cell;\n console.log(`DVM.ctor of ${this.baseRoleName}`, this._cellProxy.cell);\n /** Create all ZVMs for this DNA */\n for (const zvmDef of zvmDefs) {\n let zvm;\n if (Array.isArray(zvmDef)) {\n zvm = new zvmDef[0](this._cellProxy, this, zvmDef[1]);\n } else {\n zvm = new zvmDef(this._cellProxy, this);\n }\n // TODO check zvm.zomeName exists in _cellProxy\n this._zomeViewModels[zvm.zomeName] = zvm;\n this._zomeNames[zvmDef.constructor.name] = zvm.zomeName;\n }\n this.provideContext(host); // TODO move this to host.connectedCallback? e.g. change ViewModel to a ReactiveController\n }\n\n\n /** -- Fields -- */\n\n protected _cellProxy: CellProxy;\n /* ZomeName -> Zvm */\n protected _zomeViewModels: Dictionary<ZomeViewModel> = {};\n /* ZvmCtorName -> ZomeName */\n protected _zomeNames: Dictionary<ZomeName> = {};\n private _allEntryDefs: Dictionary<[string, boolean][]> = {};\n\n public readonly hcl: HCL;\n\n\n /** -- Getters -- */\n\n getZomeEntryDefs(zomeName: ZomeName): [string, boolean][] | undefined {return this._allEntryDefs[zomeName]}\n getZomeViewModel(zomeName: ZomeName): ZomeViewModel | undefined {return this._zomeViewModels[zomeName]}\n getZomeName(zvm: typeof ZomeViewModel): ZomeName | undefined { return this._zomeNames[zvm.constructor.name]}\n\n /** -- Methods -- */\n\n /** Override so we can provide context of all zvms */\n /*private*/ provideContext(host: ReactiveElement): void {\n //console.log(\"DVM.provideContext()\", host, this)\n super.provideContext(host);\n for (const zvm of Object.values(this._zomeViewModels)) {\n zvm.provideContext(host)\n }\n }\n\n\n getContext(): Context<unknown, unknown> {return createContext<typeof this>('dvm/' + this.cell.name)};\n\n\n /** */\n async authorizeZomeCalls(adminWs: AdminWebsocket): Promise<void> {\n let allFnNames = [];\n for (const [_zomeName, zvm] of Object.entries(this._zomeViewModels)) {\n allFnNames = allFnNames.concat(zvm.zomeProxy.fnNames)\n }\n const grantedFns = { [GrantedFunctionsType.Listed]: allFnNames }\n try {\n console.log(\"authorizeSigningCredentials: \" + this.cell.hcl().toString(), allFnNames);\n console.log(\"authorizeSigningCredentials. cell_id = [\" + this.cell.dnaHash + \" ; \" + this.cell.agentPubKey + \"]\");\n await adminWs.authorizeSigningCredentials(this.cell.id, grantedFns);\n } catch(e) {\n console.warn(\"authorizeSigningCredentials FAILED.\", e);\n }\n // this._signingProps = getSigningCredentials(this.cellId);\n // console.log({signProps: this._signingProps})\n //\n // for (const [zomeName, zvm] of Object.entries(this._zomeViewModels)) {\n // zvm.zomeProxy.setSigningProps(this._signingProps);\n // }\n }\n\n\n /** */\n protected probeAllInner(): void {\n for (const [_name, zvm] of Object.entries(this._zomeViewModels)) {\n //console.log(\"Dvm.probeAll()\", name)\n zvm.probeAll();\n }\n }\n\n /** */\n zvmChanged(zvm: ZomeViewModel): void {}\n\n\n /** */\n async initializePerspectiveOffline(): Promise<void> {\n const all = [];\n for (const [_name, zvm] of Object.entries(this._zomeViewModels)) {\n const p = zvm.initializePerspectiveOffline();\n all.push(p);\n }\n await Promise.all(all);\n }\n\n\n /** */\n async initializePerspectiveOnline(): Promise<void> {\n const all = [];\n for (const [_name, zvm] of Object.entries(this._zomeViewModels)) {\n const p = zvm.initializePerspectiveOnline();\n all.push(p);\n }\n await Promise.all(all);\n }\n\n\n /** Maybe useless since the entry defs are in the integrity zome which is not represented here */\n async fetchAllEntryDefs(): Promise<Dictionary<[string, boolean][]>> {\n for (const zvm of Object.values(this._zomeViewModels)) {\n const zomeName = zvm.zomeName;\n try {\n const defs = await this._cellProxy.callEntryDefs(zomeName); // TODO optimize\n this._allEntryDefs[zomeName] = defs\n } catch (e) {\n console.warn(`Calling \"entry_defs()\" failed on zome \"${zomeName}\". Possibly because zome does not have any entry types defined.`)\n this._allEntryDefs[zomeName] = [];\n }\n }\n return this._allEntryDefs;\n }\n\n\n\n /** */\n dumpLogs(zomeName?: ZomeName): void {\n this._cellProxy.dumpLogs(zomeName);\n this._cellProxy.dumpSignals();\n }\n}\n"]}
|
package/dist/HappElement.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { LitElement } from "lit";
|
|
2
|
-
import { BaseRoleName,
|
|
2
|
+
import { BaseRoleName, AppProxy } from "@ddd-qc/cell-proxy";
|
|
3
3
|
import { HappViewModel } from "./HappViewModel";
|
|
4
4
|
import { CellDef, HvmDef } from "./definitions";
|
|
5
5
|
import { AppWebsocket, ClonedCell, InstalledAppId } from "@holochain/client";
|
|
@@ -11,7 +11,7 @@ export declare class HappElement extends LitElement {
|
|
|
11
11
|
/** Must be defined by subclass */
|
|
12
12
|
static HVM_DEF: HvmDef;
|
|
13
13
|
/** Set during init triggered at ctor */
|
|
14
|
-
|
|
14
|
+
appProxy: AppProxy;
|
|
15
15
|
hvm: HappViewModel;
|
|
16
16
|
/** Ctor */
|
|
17
17
|
protected constructor(port_or_socket: number | AppWebsocket, appId?: InstalledAppId);
|
package/dist/HappElement.js
CHANGED
|
@@ -20,7 +20,7 @@ export class HappElement extends LitElement {
|
|
|
20
20
|
async perspectiveInitializedOnline() { }
|
|
21
21
|
/** */
|
|
22
22
|
async constructHvm(port_or_socket, appId) {
|
|
23
|
-
this.
|
|
23
|
+
this.appProxy = await ConductorAppProxy.new(port_or_socket);
|
|
24
24
|
const hvmDef = this.constructor.HVM_DEF;
|
|
25
25
|
if (!hvmDef) {
|
|
26
26
|
throw Error("HVM_DEF static field undefined in HappElement subclass " + this.constructor.name);
|
|
@@ -29,7 +29,7 @@ export class HappElement extends LitElement {
|
|
|
29
29
|
if (appId) {
|
|
30
30
|
hvmDef.id = appId;
|
|
31
31
|
}
|
|
32
|
-
this.hvm = await HappViewModel.new(this, this.
|
|
32
|
+
this.hvm = await HappViewModel.new(this, this.appProxy, hvmDef);
|
|
33
33
|
await this.hvmConstructed();
|
|
34
34
|
await this.initializePerspective();
|
|
35
35
|
}
|
package/dist/HappElement.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HappElement.js","sourceRoot":"","sources":["../src/HappElement.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,KAAK,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"HappElement.js","sourceRoot":"","sources":["../src/HappElement.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,KAAK,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAyB,iBAAiB,EAAC,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAM9C;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,UAAU;IAUzC,WAAW;IACX,YAAsB,cAAqC,EAAE,KAAsB;QACjF,KAAK,EAAE,CAAC;QACR,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAED,MAAM;IACN,KAAK,CAAC,cAAc,KAAmB,CAAC;IACxC,MAAM;IACN,KAAK,CAAC,6BAA6B,KAAmB,CAAC;IACvD,MAAM;IACN,KAAK,CAAC,4BAA4B,KAAmB,CAAC;IAGtD,MAAM;IACI,KAAK,CAAC,YAAY,CAAC,cAAqC,EAAE,KAAsB;QACxF,IAAI,CAAC,QAAQ,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAI,IAAI,CAAC,WAAkC,CAAC,OAAO,CAAC;QAChE,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,KAAK,CAAC,yDAAyD,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SAChG;QACD,qBAAqB;QACrB,IAAI,KAAK,EAAE;YACT,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC;SACnB;QACD,IAAI,CAAC,GAAG,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACrC,CAAC;IAGD,MAAM;IACN,KAAK,CAAC,qBAAqB;QACzB,MAAM,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,CAAC;QAC9C,MAAM,IAAI,CAAC,6BAA6B,EAAE,CAAC;QAC3C,kCAAkC;QAClC,MAAM,IAAI,CAAC,GAAG,CAAC,2BAA2B,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,4BAA4B,EAAE,CAAC;IAC5C,CAAC;IAGD,MAAM;IACN,KAAK,CAAC,WAAW,CAAC,YAA0B,EAAE,OAAiB;QAC7D,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAGD,MAAM;IACN,YAAY;QACV,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACpB,CAAC;CAEF;AAvDU;IAAR,KAAK,EAAE;wCAAqB","sourcesContent":["import {LitElement} from \"lit\";\nimport { state } from \"lit/decorators.js\";\nimport {BaseRoleName, AppProxy, ConductorAppProxy} from \"@ddd-qc/cell-proxy\";\nimport {HappViewModel} from \"./HappViewModel\";\nimport {CellDef, HvmDef} from \"./definitions\";\nimport {AppWebsocket, ClonedCell, InstalledAppId} from \"@holochain/client\";\nimport {DnaViewModel} from \"./DnaViewModel\";\n\n\n/**\n *\n */\nexport class HappElement extends LitElement {\n\n /** Must be defined by subclass */\n static HVM_DEF: HvmDef;\n\n /** Set during init triggered at ctor */\n appProxy!: AppProxy;\n @state() hvm!: HappViewModel;\n\n\n /** Ctor */\n protected constructor(port_or_socket: number | AppWebsocket, appId?: InstalledAppId) {\n super();\n /* await */ this.constructHvm(port_or_socket, appId);\n }\n\n /** */\n async hvmConstructed(): Promise<void> {}\n /** */\n async perspectiveInitializedOffline(): Promise<void> {}\n /** */\n async perspectiveInitializedOnline(): Promise<void> {}\n\n\n /** */\n protected async constructHvm(port_or_socket: number | AppWebsocket, appId?: InstalledAppId): Promise<void> {\n this.appProxy = await ConductorAppProxy.new(port_or_socket);\n const hvmDef = (this.constructor as typeof HappElement).HVM_DEF;\n if (!hvmDef) {\n throw Error(\"HVM_DEF static field undefined in HappElement subclass \" + this.constructor.name);\n }\n /** Override appId */\n if (appId) {\n hvmDef.id = appId;\n }\n this.hvm = await HappViewModel.new(this, this.appProxy, hvmDef);\n await this.hvmConstructed();\n await this.initializePerspective();\n }\n\n\n /** */\n async initializePerspective(): Promise<void> {\n await this.hvm.initializePerspectiveOffline();\n await this.perspectiveInitializedOffline();\n // TODO move this to a later stage\n await this.hvm.initializePerspectiveOnline();\n await this.perspectiveInitializedOnline();\n }\n\n\n /** */\n async createClone(baseRoleName: BaseRoleName, cellDef?: CellDef): Promise<[ClonedCell, DnaViewModel]> {\n return this.hvm.cloneDvm(baseRoleName, cellDef);\n }\n\n\n /** */\n shouldUpdate() {\n return !!this.hvm;\n }\n\n}\n"]}
|
package/dist/HappViewModel.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AdminWebsocket, ClonedCell, InstalledAppId } from "@holochain/client";
|
|
2
2
|
import { ReactiveElement } from "lit";
|
|
3
|
-
import {
|
|
3
|
+
import { AppProxy, BaseRoleName, Dictionary, HCL } from "@ddd-qc/cell-proxy";
|
|
4
4
|
import { CellDef, DvmDef, HvmDef } from "./definitions";
|
|
5
5
|
import { DnaViewModel } from "./DnaViewModel";
|
|
6
6
|
import { CellId } from "@holochain/client/lib/types";
|
|
@@ -10,7 +10,7 @@ import { CellId } from "@holochain/client/lib/types";
|
|
|
10
10
|
*/
|
|
11
11
|
export declare class HappViewModel {
|
|
12
12
|
protected _host: ReactiveElement;
|
|
13
|
-
protected
|
|
13
|
+
protected _appProxy: AppProxy;
|
|
14
14
|
/** -- Fields -- */
|
|
15
15
|
readonly appId: InstalledAppId;
|
|
16
16
|
/** HCLString -> DnaViewModel */
|
|
@@ -28,8 +28,8 @@ export declare class HappViewModel {
|
|
|
28
28
|
/** */
|
|
29
29
|
getClones(baseRoleName: BaseRoleName): DnaViewModel[];
|
|
30
30
|
/** -- Create -- */
|
|
31
|
-
/** Spawn a HappViewModel for an AppId running on the
|
|
32
|
-
static new(host: ReactiveElement,
|
|
31
|
+
/** Spawn a HappViewModel for an AppId running on the AppProxy */
|
|
32
|
+
static new(host: ReactiveElement, appProxy: AppProxy, hvmDef: HvmDef): Promise<HappViewModel>;
|
|
33
33
|
/** Ctor */
|
|
34
34
|
private constructor();
|
|
35
35
|
/** -- Methods -- */
|
package/dist/HappViewModel.js
CHANGED
|
@@ -12,7 +12,7 @@ export class HappViewModel {
|
|
|
12
12
|
}
|
|
13
13
|
/** */
|
|
14
14
|
getCellDvms(cellId) {
|
|
15
|
-
const hcls = this.
|
|
15
|
+
const hcls = this._appProxy.getLocations(cellId);
|
|
16
16
|
if (hcls === undefined)
|
|
17
17
|
return undefined;
|
|
18
18
|
let dict = {};
|
|
@@ -44,9 +44,9 @@ export class HappViewModel {
|
|
|
44
44
|
return cloneDvms;
|
|
45
45
|
}
|
|
46
46
|
/** -- Create -- */
|
|
47
|
-
/** Spawn a HappViewModel for an AppId running on the
|
|
48
|
-
static async new(host,
|
|
49
|
-
const appId =
|
|
47
|
+
/** Spawn a HappViewModel for an AppId running on the AppProxy */
|
|
48
|
+
static async new(host, appProxy, hvmDef) {
|
|
49
|
+
const appId = appProxy.appIdOfShame ? appProxy.appIdOfShame : hvmDef.id;
|
|
50
50
|
console.log("HappViewModel.new()", hvmDef.id, appId);
|
|
51
51
|
/** Create all Cell Proxies in the definition */
|
|
52
52
|
for (const dvmDef of hvmDef.dvmDefs) {
|
|
@@ -56,22 +56,22 @@ export class HappViewModel {
|
|
|
56
56
|
const baseRoleName = dvmDef.baseRoleName
|
|
57
57
|
? dvmDef.baseRoleName
|
|
58
58
|
: dvmDef.ctor.DEFAULT_BASE_ROLE_NAME;
|
|
59
|
-
await
|
|
59
|
+
await appProxy.fetchCells(appId, baseRoleName);
|
|
60
60
|
const hcl = new HCL(appId, baseRoleName);
|
|
61
|
-
|
|
61
|
+
appProxy.createCellProxy(hcl);
|
|
62
62
|
}
|
|
63
|
-
const hvm = new HappViewModel(host,
|
|
63
|
+
const hvm = new HappViewModel(host, appProxy, hvmDef);
|
|
64
64
|
return hvm;
|
|
65
65
|
}
|
|
66
66
|
/** Ctor */
|
|
67
|
-
constructor(_host, /* VIEW */
|
|
67
|
+
constructor(_host, /* VIEW */ _appProxy, /* MODEL */ hvmDef) {
|
|
68
68
|
this._host = _host;
|
|
69
|
-
this.
|
|
69
|
+
this._appProxy = _appProxy;
|
|
70
70
|
/** HCLString -> DnaViewModel */
|
|
71
71
|
this._dvmMap = {};
|
|
72
72
|
/** BaseRoleName -> DvmDef */
|
|
73
73
|
this._defMap = {};
|
|
74
|
-
this.appId = this.
|
|
74
|
+
this.appId = this._appProxy.appIdOfShame ? this._appProxy.appIdOfShame : hvmDef.id;
|
|
75
75
|
/** Create all non-deferred DVMs for this Happ */
|
|
76
76
|
for (const dvmDef of hvmDef.dvmDefs) {
|
|
77
77
|
this.createOriginalDvm(dvmDef);
|
|
@@ -89,25 +89,25 @@ export class HappViewModel {
|
|
|
89
89
|
}
|
|
90
90
|
/** */
|
|
91
91
|
createStartingClonesDvm() {
|
|
92
|
-
const appInstalledCells = this.
|
|
92
|
+
const appInstalledCells = this._appProxy.getAppCells(this.appId);
|
|
93
93
|
for (const [baseRoleName, roleCells] of Object.entries(appInstalledCells)) {
|
|
94
94
|
const def = this._defMap[baseRoleName];
|
|
95
95
|
for (const [cloneId, clone] of Object.entries(roleCells.clones)) {
|
|
96
96
|
const hcl = new HCL(this.appId, baseRoleName, cloneId);
|
|
97
|
-
this.
|
|
97
|
+
this._appProxy.createCellProxy(hcl, clone.name);
|
|
98
98
|
this.createDvm(def, hcl);
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
102
|
/** */
|
|
103
103
|
createDvm(dvmDef, hcl) {
|
|
104
|
-
const dvm = new dvmDef.ctor(this._host, this.
|
|
104
|
+
const dvm = new dvmDef.ctor(this._host, this._appProxy, hcl); // WARN this can throw an error
|
|
105
105
|
//console.log(` createDvm() for "${hcl.toString()}" ; cellId: ${CellIdStr(dvm.cellId)}`);
|
|
106
106
|
/** Setup signalHandler */
|
|
107
107
|
if (dvm.signalHandler) {
|
|
108
108
|
//console.log(`"${dvm.baseRoleName}" signalHandler added`, dvm.signalHandler);
|
|
109
109
|
try {
|
|
110
|
-
this.
|
|
110
|
+
this._appProxy.addSignalHandler((sig) => {
|
|
111
111
|
dvm.signalHandler(sig);
|
|
112
112
|
}, hcl.toString());
|
|
113
113
|
}
|
|
@@ -170,16 +170,16 @@ export class HappViewModel {
|
|
|
170
170
|
request.name = cellDef.cloneName;
|
|
171
171
|
}
|
|
172
172
|
/** Create Cell */
|
|
173
|
-
const clonedCell = await this.
|
|
173
|
+
const clonedCell = await this._appProxy.createCloneCell(request);
|
|
174
174
|
//console.log("clone created:", CellIdStr(cloneInstalledCell.cell_id));
|
|
175
|
-
const cell = await this.
|
|
175
|
+
const cell = await this._appProxy.fetchCell(this.appId, clonedCell.cell_id);
|
|
176
176
|
console.log("clone created:", cell);
|
|
177
177
|
const hcl = new HCL(this.appId, baseRoleName, cell.cloneId);
|
|
178
178
|
/** Get created cell */
|
|
179
179
|
const clone = cell.asCloned();
|
|
180
|
-
this.
|
|
180
|
+
this._appProxy.addClone(hcl, clone);
|
|
181
181
|
/** Create CellProxy */
|
|
182
|
-
this.
|
|
182
|
+
this._appProxy.createCellProxy(hcl, clone.name);
|
|
183
183
|
/** Create DVM and authorize */
|
|
184
184
|
const dvm = this.createDvm(def, hcl);
|
|
185
185
|
if (this._adminWs) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HappViewModel.js","sourceRoot":"","sources":["../src/HappViewModel.ts"],"names":[],"mappings":"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","sourcesContent":["import {AdminWebsocket, ClonedCell, CreateCloneCellRequest, InstalledAppId} from \"@holochain/client\";\nimport { ReactiveElement } from \"lit\";\nimport {\n BaseRoleName,\n CloneIndex,\n ConductorAppProxy,\n createCloneName,\n Dictionary,\n HCL,\n} from \"@ddd-qc/cell-proxy\";\nimport { CellDef, DvmDef, HvmDef } from \"./definitions\";\nimport { DnaViewModel } from \"./DnaViewModel\";\nimport { AppSignal } from \"@holochain/client/lib/api/app/types\";\nimport { CellId } from \"@holochain/client/lib/types\";\n\n\n//export type HvmConstructor = {new(installedAppId: InstalledAppId): HappViewModel};\n\n\n/**\n * \"ViewModel\" of a hApp\n * Creates and stores all the DnaViewModels from the happDef.\n */\nexport class HappViewModel {\n\n /** -- Fields -- */\n readonly appId: InstalledAppId;\n /** HCLString -> DnaViewModel */\n protected _dvmMap: Dictionary<DnaViewModel> = {};\n /** BaseRoleName -> DvmDef */\n protected _defMap: Dictionary<DvmDef> = {};\n\n\n protected _adminWs?: AdminWebsocket;\n\n /** -- Getters -- */\n\n /** */\n getDef(name: BaseRoleName): DvmDef | undefined {\n return this._defMap[name];\n }\n\n /** */\n getCellDvms(cellId: CellId): Dictionary<DnaViewModel> | undefined {\n const hcls = this._conductorAppProxy.getLocations(cellId);\n if (hcls === undefined) return undefined;\n let dict: Dictionary<DnaViewModel> = {};\n for (const hcl of hcls) {\n const maybe = this.getDvm(hcl);\n if (maybe) {\n dict[hcl.toString()] = maybe;\n }\n }\n return dict;\n }\n\n /** */\n getDvm(hclOrId: HCL | BaseRoleName ): DnaViewModel | undefined {\n if (typeof hclOrId === 'string') {\n hclOrId = new HCL(this.appId, hclOrId);\n }\n return this._dvmMap[hclOrId.toString()];\n }\n\n\n /** */\n getClones(baseRoleName: BaseRoleName): DnaViewModel[] {\n const searchHcl = new HCL(this.appId, baseRoleName);\n let cloneDvms = [];\n for (const [sHcl, dvm] of Object.entries(this._dvmMap)) {\n const hcl = HCL.parse(sHcl);\n if (hcl.isClone() && hcl.match(searchHcl)) {\n cloneDvms.push(dvm);\n }\n }\n return cloneDvms;\n }\n\n\n /** -- Create -- */\n\n /** Spawn a HappViewModel for an AppId running on the ConductorAppProxy */\n static async new(host: ReactiveElement, conductorAppProxy: ConductorAppProxy, hvmDef: HvmDef): Promise<HappViewModel> {\n const appId = conductorAppProxy.appIdOfShame? conductorAppProxy.appIdOfShame : hvmDef.id;\n console.log(\"HappViewModel.new()\", hvmDef.id, appId)\n /** Create all Cell Proxies in the definition */\n for (const dvmDef of hvmDef.dvmDefs) {\n if (dvmDef.ctor.DEFAULT_BASE_ROLE_NAME === undefined) {\n return Promise.reject(\"static field DEFAULT_BASE_ROLE_NAME not defined for class \" + dvmDef.ctor.name);\n }\n const baseRoleName = dvmDef.baseRoleName\n ? dvmDef.baseRoleName\n : dvmDef.ctor.DEFAULT_BASE_ROLE_NAME;\n await conductorAppProxy.fetchCells(appId, baseRoleName);\n const hcl = new HCL(appId, baseRoleName);\n conductorAppProxy.createCellProxy(hcl);\n }\n const hvm = new HappViewModel(host, conductorAppProxy, hvmDef);\n return hvm;\n }\n\n\n /** Ctor */\n private constructor(\n protected _host: ReactiveElement, /* VIEW */\n protected _conductorAppProxy: ConductorAppProxy, /* MODEL */\n hvmDef: HvmDef, /* VIEW-MODEL definition */\n ) {\n this.appId = this._conductorAppProxy.appIdOfShame? this._conductorAppProxy.appIdOfShame : hvmDef.id;\n /** Create all non-deferred DVMs for this Happ */\n for (const dvmDef of hvmDef.dvmDefs) {\n this.createOriginalDvm(dvmDef);\n }\n this.createStartingClonesDvm();\n //console.log(\"HappViewModel created\", this._dvmMap)\n }\n\n\n /** -- Methods -- */\n\n async authorizeAllZomeCalls(adminWs: AdminWebsocket): Promise<void> {\n for (const [_sHcl, dvm] of Object.entries(this._dvmMap)) {\n //console.log(\"Authorizing\", sHcl);\n await dvm.authorizeZomeCalls(adminWs);\n }\n this._adminWs = adminWs\n }\n\n /** */\n private createStartingClonesDvm(): void {\n const appInstalledCells = this._conductorAppProxy.getAppCells(this.appId)!;\n for (const [baseRoleName, roleCells] of Object.entries(appInstalledCells)) {\n const def = this._defMap[baseRoleName];\n for (const [cloneId, clone] of Object.entries(roleCells.clones)) {\n const hcl = new HCL(this.appId, baseRoleName, cloneId);\n this._conductorAppProxy.createCellProxy(hcl, clone.name);\n this.createDvm(def, hcl);\n }\n }\n }\n\n\n /** */\n private createDvm(dvmDef: DvmDef, hcl: HCL): DnaViewModel {\n const dvm: DnaViewModel = new dvmDef.ctor(this._host, this._conductorAppProxy, hcl); // WARN this can throw an error\n //console.log(` createDvm() for \"${hcl.toString()}\" ; cellId: ${CellIdStr(dvm.cellId)}`);\n /** Setup signalHandler */\n if (dvm.signalHandler) {\n //console.log(`\"${dvm.baseRoleName}\" signalHandler added`, dvm.signalHandler);\n try {\n this._conductorAppProxy.addSignalHandler((sig: AppSignal) => {\n dvm.signalHandler!(sig)\n }, hcl.toString());\n } catch (e) {\n console.error(e)\n }\n }\n /** Store it */\n if (this._dvmMap[hcl.toString()]) {\n throw Error(\"DVM already exists for \" + hcl.toString());\n }\n this._dvmMap[hcl.toString()] = dvm;\n /** Done */\n return dvm;\n }\n\n\n /** */\n private createOriginalDvm(dvmDef: DvmDef): void {\n /** Determine baseRoleName */\n const baseRoleName = dvmDef.baseRoleName\n ? dvmDef.baseRoleName\n : dvmDef.ctor.DEFAULT_BASE_ROLE_NAME;\n //console.log(\"createOriginalDvm() for \", baseRoleName);\n if (this._defMap[baseRoleName]) {\n throw Error(`createOriginalDvm() failed. DVM for original cell of ${baseRoleName} already exists.`);\n }\n const hcl = new HCL(this.appId, baseRoleName);\n this.createDvm(dvmDef, hcl);\n this._defMap[baseRoleName] = dvmDef;\n }\n\n\n /** */\n async cloneDvm(baseRoleName: BaseRoleName, cellDef?: CellDef): Promise<[ClonedCell, DnaViewModel]> {\n //console.log(\"createCloneDvm()\", baseRoleName);\n /** Check preconditions */\n const def = this._defMap[baseRoleName];\n if (!def) {\n return Promise.reject(`createCloneDvm() failed for ${baseRoleName}. No original DVM created.`)\n }\n if (!def.isClonable) {\n return Promise.reject(`createCloneDvm() failed. Role \"${baseRoleName}\" is not clonable.`)\n }\n /** Get cloneIndex */\n const clones = this.getClones(baseRoleName);\n const cloneIndex: CloneIndex = clones.length;\n const cloneName = cellDef && cellDef.cloneName\n ? cellDef.cloneName\n : createCloneName(baseRoleName, cloneIndex);\n /** Build default request */\n let request: CreateCloneCellRequest = {\n app_id: this.appId,\n role_name: baseRoleName,\n modifiers: {\n network_seed: String(cloneIndex),\n },\n name: cloneName,\n }\n /** Modify request according to CellDef */\n if (cellDef) {\n request.modifiers = cellDef.modifiers;\n request.membrane_proof = cellDef.membraneProof;\n request.name = cellDef.cloneName;\n }\n /** Create Cell */\n const clonedCell = await this._conductorAppProxy.createCloneCell(request);\n //console.log(\"clone created:\", CellIdStr(cloneInstalledCell.cell_id));\n const cell = await this._conductorAppProxy.fetchCell(this.appId, clonedCell.cell_id);\n console.log(\"clone created:\", cell);\n const hcl = new HCL(this.appId, baseRoleName, cell.cloneId);\n /** Get created cell */\n const clone = cell.asCloned()!;\n this._conductorAppProxy.addClone(hcl, clone);\n /** Create CellProxy */\n this._conductorAppProxy.createCellProxy(hcl, clone.name);\n /** Create DVM and authorize */\n const dvm = this.createDvm(def, hcl);\n if (this._adminWs) {\n await dvm.authorizeZomeCalls(this._adminWs);\n }\n /** Done */\n return [clonedCell, dvm];\n }\n\n\n /** */\n probeAll(): void {\n for (const dvm of Object.values(this._dvmMap)) {\n dvm.probeAll();\n }\n }\n\n\n /** */\n async initializePerspectiveOnline(): Promise<void> {\n const all = [];\n for (const dvm of Object.values(this._dvmMap)) {\n const p = dvm.initializePerspectiveOnline();\n all.push(p);\n }\n await Promise.all(all);\n }\n\n\n /** */\n async initializePerspectiveOffline(): Promise<void> {\n const all = [];\n for (const dvm of Object.values(this._dvmMap)) {\n const p = dvm.initializePerspectiveOffline();\n all.push(p);\n }\n await Promise.all(all);\n }\n\n\n /** */\n dumpLogs(baseRoleName?: BaseRoleName): void {\n if (baseRoleName) {\n const dvm = this.getDvm(baseRoleName);\n if (dvm) {\n dvm.dumpLogs();\n } else {\n console.error(`dumpLogs() failed. Role \"${baseRoleName}\" not found in happ \"${this.appId}\"`)\n }\n } else {\n for (const dvm of Object.values(this._dvmMap)) {\n dvm.dumpLogs();\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"HappViewModel.js","sourceRoot":"","sources":["../src/HappViewModel.ts"],"names":[],"mappings":"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","sourcesContent":["import {AdminWebsocket, ClonedCell, CreateCloneCellRequest, InstalledAppId} from \"@holochain/client\";\nimport { ReactiveElement } from \"lit\";\nimport {\n AppProxy,\n BaseRoleName,\n CloneIndex,\n createCloneName,\n Dictionary,\n HCL,\n} from \"@ddd-qc/cell-proxy\";\nimport { CellDef, DvmDef, HvmDef } from \"./definitions\";\nimport { DnaViewModel } from \"./DnaViewModel\";\nimport { AppSignal } from \"@holochain/client/lib/api/app/types\";\nimport { CellId } from \"@holochain/client/lib/types\";\n\n\n//export type HvmConstructor = {new(installedAppId: InstalledAppId): HappViewModel};\n\n\n/**\n * \"ViewModel\" of a hApp\n * Creates and stores all the DnaViewModels from the happDef.\n */\nexport class HappViewModel {\n\n /** -- Fields -- */\n readonly appId: InstalledAppId;\n /** HCLString -> DnaViewModel */\n protected _dvmMap: Dictionary<DnaViewModel> = {};\n /** BaseRoleName -> DvmDef */\n protected _defMap: Dictionary<DvmDef> = {};\n\n\n protected _adminWs?: AdminWebsocket;\n\n /** -- Getters -- */\n\n /** */\n getDef(name: BaseRoleName): DvmDef | undefined {\n return this._defMap[name];\n }\n\n /** */\n getCellDvms(cellId: CellId): Dictionary<DnaViewModel> | undefined {\n const hcls = this._appProxy.getLocations(cellId);\n if (hcls === undefined) return undefined;\n let dict: Dictionary<DnaViewModel> = {};\n for (const hcl of hcls) {\n const maybe = this.getDvm(hcl);\n if (maybe) {\n dict[hcl.toString()] = maybe;\n }\n }\n return dict;\n }\n\n /** */\n getDvm(hclOrId: HCL | BaseRoleName ): DnaViewModel | undefined {\n if (typeof hclOrId === 'string') {\n hclOrId = new HCL(this.appId, hclOrId);\n }\n return this._dvmMap[hclOrId.toString()];\n }\n\n\n /** */\n getClones(baseRoleName: BaseRoleName): DnaViewModel[] {\n const searchHcl = new HCL(this.appId, baseRoleName);\n let cloneDvms = [];\n for (const [sHcl, dvm] of Object.entries(this._dvmMap)) {\n const hcl = HCL.parse(sHcl);\n if (hcl.isClone() && hcl.match(searchHcl)) {\n cloneDvms.push(dvm);\n }\n }\n return cloneDvms;\n }\n\n\n /** -- Create -- */\n\n /** Spawn a HappViewModel for an AppId running on the AppProxy */\n static async new(host: ReactiveElement, appProxy: AppProxy, hvmDef: HvmDef): Promise<HappViewModel> {\n const appId = appProxy.appIdOfShame? appProxy.appIdOfShame : hvmDef.id;\n console.log(\"HappViewModel.new()\", hvmDef.id, appId)\n /** Create all Cell Proxies in the definition */\n for (const dvmDef of hvmDef.dvmDefs) {\n if (dvmDef.ctor.DEFAULT_BASE_ROLE_NAME === undefined) {\n return Promise.reject(\"static field DEFAULT_BASE_ROLE_NAME not defined for class \" + dvmDef.ctor.name);\n }\n const baseRoleName = dvmDef.baseRoleName\n ? dvmDef.baseRoleName\n : dvmDef.ctor.DEFAULT_BASE_ROLE_NAME;\n await appProxy.fetchCells(appId, baseRoleName);\n const hcl = new HCL(appId, baseRoleName);\n appProxy.createCellProxy(hcl);\n }\n const hvm = new HappViewModel(host, appProxy, hvmDef);\n return hvm;\n }\n\n\n /** Ctor */\n private constructor(\n protected _host: ReactiveElement, /* VIEW */\n protected _appProxy: AppProxy, /* MODEL */\n hvmDef: HvmDef, /* VIEW-MODEL definition */\n ) {\n this.appId = this._appProxy.appIdOfShame? this._appProxy.appIdOfShame : hvmDef.id;\n /** Create all non-deferred DVMs for this Happ */\n for (const dvmDef of hvmDef.dvmDefs) {\n this.createOriginalDvm(dvmDef);\n }\n this.createStartingClonesDvm();\n //console.log(\"HappViewModel created\", this._dvmMap)\n }\n\n\n /** -- Methods -- */\n\n async authorizeAllZomeCalls(adminWs: AdminWebsocket): Promise<void> {\n for (const [_sHcl, dvm] of Object.entries(this._dvmMap)) {\n //console.log(\"Authorizing\", sHcl);\n await dvm.authorizeZomeCalls(adminWs);\n }\n this._adminWs = adminWs\n }\n\n /** */\n private createStartingClonesDvm(): void {\n const appInstalledCells = this._appProxy.getAppCells(this.appId)!;\n for (const [baseRoleName, roleCells] of Object.entries(appInstalledCells)) {\n const def = this._defMap[baseRoleName];\n for (const [cloneId, clone] of Object.entries(roleCells.clones)) {\n const hcl = new HCL(this.appId, baseRoleName, cloneId);\n this._appProxy.createCellProxy(hcl, clone.name);\n this.createDvm(def, hcl);\n }\n }\n }\n\n\n /** */\n private createDvm(dvmDef: DvmDef, hcl: HCL): DnaViewModel {\n const dvm: DnaViewModel = new dvmDef.ctor(this._host, this._appProxy, hcl); // WARN this can throw an error\n //console.log(` createDvm() for \"${hcl.toString()}\" ; cellId: ${CellIdStr(dvm.cellId)}`);\n /** Setup signalHandler */\n if (dvm.signalHandler) {\n //console.log(`\"${dvm.baseRoleName}\" signalHandler added`, dvm.signalHandler);\n try {\n this._appProxy.addSignalHandler((sig: AppSignal) => {\n dvm.signalHandler!(sig)\n }, hcl.toString());\n } catch (e) {\n console.error(e)\n }\n }\n /** Store it */\n if (this._dvmMap[hcl.toString()]) {\n throw Error(\"DVM already exists for \" + hcl.toString());\n }\n this._dvmMap[hcl.toString()] = dvm;\n /** Done */\n return dvm;\n }\n\n\n /** */\n private createOriginalDvm(dvmDef: DvmDef): void {\n /** Determine baseRoleName */\n const baseRoleName = dvmDef.baseRoleName\n ? dvmDef.baseRoleName\n : dvmDef.ctor.DEFAULT_BASE_ROLE_NAME;\n //console.log(\"createOriginalDvm() for \", baseRoleName);\n if (this._defMap[baseRoleName]) {\n throw Error(`createOriginalDvm() failed. DVM for original cell of ${baseRoleName} already exists.`);\n }\n const hcl = new HCL(this.appId, baseRoleName);\n this.createDvm(dvmDef, hcl);\n this._defMap[baseRoleName] = dvmDef;\n }\n\n\n /** */\n async cloneDvm(baseRoleName: BaseRoleName, cellDef?: CellDef): Promise<[ClonedCell, DnaViewModel]> {\n //console.log(\"createCloneDvm()\", baseRoleName);\n /** Check preconditions */\n const def = this._defMap[baseRoleName];\n if (!def) {\n return Promise.reject(`createCloneDvm() failed for ${baseRoleName}. No original DVM created.`)\n }\n if (!def.isClonable) {\n return Promise.reject(`createCloneDvm() failed. Role \"${baseRoleName}\" is not clonable.`)\n }\n /** Get cloneIndex */\n const clones = this.getClones(baseRoleName);\n const cloneIndex: CloneIndex = clones.length;\n const cloneName = cellDef && cellDef.cloneName\n ? cellDef.cloneName\n : createCloneName(baseRoleName, cloneIndex);\n /** Build default request */\n let request: CreateCloneCellRequest = {\n app_id: this.appId,\n role_name: baseRoleName,\n modifiers: {\n network_seed: String(cloneIndex),\n },\n name: cloneName,\n }\n /** Modify request according to CellDef */\n if (cellDef) {\n request.modifiers = cellDef.modifiers;\n request.membrane_proof = cellDef.membraneProof;\n request.name = cellDef.cloneName;\n }\n /** Create Cell */\n const clonedCell = await this._appProxy.createCloneCell(request);\n //console.log(\"clone created:\", CellIdStr(cloneInstalledCell.cell_id));\n const cell = await this._appProxy.fetchCell(this.appId, clonedCell.cell_id);\n console.log(\"clone created:\", cell);\n const hcl = new HCL(this.appId, baseRoleName, cell.cloneId);\n /** Get created cell */\n const clone = cell.asCloned()!;\n this._appProxy.addClone(hcl, clone);\n /** Create CellProxy */\n this._appProxy.createCellProxy(hcl, clone.name);\n /** Create DVM and authorize */\n const dvm = this.createDvm(def, hcl);\n if (this._adminWs) {\n await dvm.authorizeZomeCalls(this._adminWs);\n }\n /** Done */\n return [clonedCell, dvm];\n }\n\n\n /** */\n probeAll(): void {\n for (const dvm of Object.values(this._dvmMap)) {\n dvm.probeAll();\n }\n }\n\n\n /** */\n async initializePerspectiveOnline(): Promise<void> {\n const all = [];\n for (const dvm of Object.values(this._dvmMap)) {\n const p = dvm.initializePerspectiveOnline();\n all.push(p);\n }\n await Promise.all(all);\n }\n\n\n /** */\n async initializePerspectiveOffline(): Promise<void> {\n const all = [];\n for (const dvm of Object.values(this._dvmMap)) {\n const p = dvm.initializePerspectiveOffline();\n all.push(p);\n }\n await Promise.all(all);\n }\n\n\n /** */\n dumpLogs(baseRoleName?: BaseRoleName): void {\n if (baseRoleName) {\n const dvm = this.getDvm(baseRoleName);\n if (dvm) {\n dvm.dumpLogs();\n } else {\n console.error(`dumpLogs() failed. Role \"${baseRoleName}\" not found in happ \"${this.appId}\"`)\n }\n } else {\n for (const dvm of Object.values(this._dvmMap)) {\n dvm.dumpLogs();\n }\n }\n }\n}\n"]}
|
package/dist/ViewModel.d.ts
CHANGED
|
@@ -2,12 +2,6 @@ import { Context } from "@lit-labs/context";
|
|
|
2
2
|
import { ReactiveControllerHost, ReactiveElement } from "lit";
|
|
3
3
|
import { AppSignalCb } from "@holochain/client";
|
|
4
4
|
import { Mutex } from 'async-mutex';
|
|
5
|
-
declare enum InitializationState {
|
|
6
|
-
Uninitialized = "Uninitialized",
|
|
7
|
-
InitializingOffline = "InitializingOffline",
|
|
8
|
-
InitializingOnline = "InitializingOnline",
|
|
9
|
-
Initialized = "Initialized"
|
|
10
|
-
}
|
|
11
5
|
/**
|
|
12
6
|
* ABC of a ViewModel.
|
|
13
7
|
* It mediates the interaction between a View (CustomElements) and a Model (Zome / DNA).
|
|
@@ -24,7 +18,6 @@ export declare abstract class ViewModel {
|
|
|
24
18
|
protected _previousPerspective?: unknown;
|
|
25
19
|
protected _providedHosts: [ReactiveControllerHost, PropertyKey][];
|
|
26
20
|
protected _provider?: unknown;
|
|
27
|
-
protected _initializationState: InitializationState;
|
|
28
21
|
protected _probeMutex: Mutex;
|
|
29
22
|
/** -- Abstract fields -- */
|
|
30
23
|
abstract signalHandler?: AppSignalCb;
|
|
@@ -56,4 +49,3 @@ export declare abstract class ViewModel {
|
|
|
56
49
|
/** */
|
|
57
50
|
protected notifySubscribers(): boolean;
|
|
58
51
|
}
|
|
59
|
-
export {};
|
package/dist/ViewModel.js
CHANGED
|
@@ -21,7 +21,7 @@ var InitializationState;
|
|
|
21
21
|
export class ViewModel {
|
|
22
22
|
constructor() {
|
|
23
23
|
this._providedHosts = [];
|
|
24
|
-
|
|
24
|
+
//protected _initializationState: InitializationState = InitializationState.Uninitialized;
|
|
25
25
|
this._probeMutex = new Mutex();
|
|
26
26
|
}
|
|
27
27
|
/* (optional) Set perspective with data from the source-chain only */
|
package/dist/ViewModel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewModel.js","sourceRoot":"","sources":["../src/ViewModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAI3D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,IAAK,mBAKJ;AALD,WAAK,mBAAmB;IACtB,sDAA+B,CAAA;IAC/B,kEAA2C,CAAA;IAC3C,gEAAyC,CAAA;IACzC,kDAA2B,CAAA;AAC7B,CAAC,EALI,mBAAmB,KAAnB,mBAAmB,QAKvB;AAED;;;;;;;;;;GAUG;AACF,MAAM,OAAgB,SAAS;IAA/B;QAIW,mBAAc,GAA4C,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"ViewModel.js","sourceRoot":"","sources":["../src/ViewModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAI3D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,IAAK,mBAKJ;AALD,WAAK,mBAAmB;IACtB,sDAA+B,CAAA;IAC/B,kEAA2C,CAAA;IAC3C,gEAAyC,CAAA;IACzC,kDAA2B,CAAA;AAC7B,CAAC,EALI,mBAAmB,KAAnB,mBAAmB,QAKvB;AAED;;;;;;;;;;GAUG;AACF,MAAM,OAAgB,SAAS;IAA/B;QAIW,mBAAc,GAA4C,EAAE,CAAC;QAGvE,0FAA0F;QAGhF,gBAAW,GAAG,IAAI,KAAK,EAAE,CAAC;IAuFtC,CAAC;IA1EC,qEAAqE;IACrE,KAAK,CAAC,4BAA4B,KAAmB,CAAC;IACtD,uDAAuD;IACvD,KAAK,CAAC,2BAA2B,KAAmB,CAAC;IACrD,0GAA0G;IAChG,aAAa,KAAU,CAAC;IAAA,CAAC;IAEnC;;;OAGG;IACH,QAAQ;QACN,uEAAuE;QACvE,gEAAgE;QAChE,YAAY;QACZ,IAAI;QACJ,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE;YAC/B,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;YACjE,OAAO;SACR;QACD,IAAI,CAAC,WAAW;aACb,OAAO,EAAE;aACT,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YACtB,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACP,CAAC;IAUD,0BAA0B;IAE1B,mCAAmC;IACnC,cAAc,CAAC,YAA6B;QAC1C,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;QACrF,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,CAAC;IAC9E,CAAC;IAED,6BAA6B;IAE7B,MAAM;IACN,SAAS,CAAC,YAAoC,EAAE,QAAqB;QAChE,YAAoB,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QACnD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAA;IACtD,CAAC;IAED,MAAM;IACN,WAAW,CAAC,SAAiC;QACzC,IAAI,KAAK,GAAI,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE;YACjD,IAAI,IAAI,KAAK,SAAS;gBAAE,MAAM;YAC9B,KAAK,IAAI,CAAC,CAAC;SACd;QACD,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YACZ,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SACxC;IACL,CAAC;IAED,MAAM;IACI,iBAAiB;QACzB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAAE,OAAO,KAAK,CAAC;QACrC,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE;YACjD,IAAY,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;SAC5C;QACD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAAA;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;CAEF","sourcesContent":["import {Context, ContextProvider} from \"@lit-labs/context\";\nimport {ReactiveControllerHost, ReactiveElement} from \"lit\";\nimport {AppSignalCb} from \"@holochain/client\";\n\nimport { Mutex } from 'async-mutex';\n\n\nenum InitializationState {\n Uninitialized = \"Uninitialized\",\n InitializingOffline = \"InitializingOffline\",\n InitializingOnline = \"InitializingOnline\",\n Initialized = \"Initialized\",\n}\n\n/**\n * ABC of a ViewModel.\n * It mediates the interaction between a View (CustomElements) and a Model (Zome / DNA).\n * It is an Observable meant to be observed by (Lit) ReactiveElements.\n * It is meant to be a singleton passed around by a (Lit) Context.\n * The ViewModel contains a perspective: All the data that a view can observe.\n * To update subscribers, it makes use of Lit's reactive properties.\n * When subscribing, a host must provide a reactive property that has the ViewModel's perspestives's type.\n * Hosts can trigger probing in order to get an updated perspective.\n * The perspective can be automatically updated by internal events.\n */\n export abstract class ViewModel {\n\n /** -- Fields -- */\n protected _previousPerspective?: unknown;\n protected _providedHosts: [ReactiveControllerHost, PropertyKey][] = [];\n protected _provider?: unknown; // FIXME type: ContextProvider<this.getContext()>;\n\n //protected _initializationState: InitializationState = InitializationState.Uninitialized;\n\n\n protected _probeMutex = new Mutex();\n\n /** -- Abstract fields -- */\n\n abstract signalHandler?: AppSignalCb;\n\n\n /** -- Abstract methods -- */\n\n abstract getContext(): Context<unknown, unknown>;\n /* Child class should implement with specific type */\n abstract get perspective(): unknown;\n\n /* (optional) Set perspective with data from the source-chain only */\n async initializePerspectiveOffline(): Promise<void> {}\n /* (optional) Set perspective with data from the DHT */\n async initializePerspectiveOnline(): Promise<void> {}\n /* (optional) Lets the observer trigger probing into the network in order to get an updated perspective */\n protected probeAllInner(): void {};\n\n /**\n * Mutex wrapping of probeAllInner: Don't call probeAll() during a probeAll()\n * Should not be async as we expect this to be long, so happs are expected to use signals instead if something changed.\n */\n probeAll(): void {\n // if (this._initializationState !== InitializationState.Initialized) {\n // console.warn(\"probeAll() called on unitialized ViewModel\");\n // return;\n // }\n if (this._probeMutex.isLocked()) {\n console.log(\"probeAll() call skipped. Reason: Already running.\");\n return;\n }\n this._probeMutex\n .acquire()\n .then(async (release) => {\n this.probeAllInner();\n release();\n });\n }\n\n /**\n * Return true if the perspective has changed. This will trigger an update on the observers\n * Child classes are expected to compare their latest constructed perspective (the one returned by this.perspective())\n * with this._previousPerspective.\n */\n protected abstract hasChanged(): boolean;\n\n\n /** -- Final methods -- */\n\n /** Set ContextProvider for host */\n provideContext(providerHost: ReactiveElement): void {\n console.log(`\\t\\tProviding context \"${this.getContext()}\" | in host `, providerHost);\n this._provider = new ContextProvider(providerHost, this.getContext(), this);\n }\n\n /** -- Observer pattern -- */\n\n /** */\n subscribe(providedHost: ReactiveControllerHost, propName: PropertyKey): void {\n (providedHost as any)[propName] = this.perspective;\n this._providedHosts.push([providedHost, propName])\n }\n\n /** */\n unsubscribe(candidate: ReactiveControllerHost): void {\n let index = 0;\n for (const [host, _propName] of this._providedHosts) {\n if (host === candidate) break;\n index += 1;\n }\n if (index > -1) {\n this._providedHosts.splice(index, 1);\n }\n }\n\n /** */\n protected notifySubscribers(): boolean {\n if (!this.hasChanged()) return false;\n for (const [host, propName] of this._providedHosts) {\n (host as any)[propName] = this.perspective;\n }\n this._previousPerspective = this.perspective\n return true;\n }\n\n}\n"]}
|