@ddd-qc/lit-happ 0.27.1 → 0.28.0
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/DnaElement.d.ts +2 -14
- package/dist/DnaElement.d.ts.map +1 -0
- package/dist/DnaElement.js +2 -18
- package/dist/DnaElement.js.map +1 -1
- package/dist/DnaViewModel.d.ts +2 -24
- package/dist/DnaViewModel.d.ts.map +1 -0
- package/dist/DnaViewModel.js +5 -40
- package/dist/DnaViewModel.js.map +1 -1
- package/dist/HappElement.d.ts +3 -17
- package/dist/HappElement.d.ts.map +1 -0
- package/dist/HappElement.js +9 -42
- package/dist/HappElement.js.map +1 -1
- package/dist/HappViewModel.d.ts +1 -24
- package/dist/HappViewModel.d.ts.map +1 -0
- package/dist/HappViewModel.js +9 -52
- package/dist/HappViewModel.js.map +1 -1
- package/dist/ViewModel.d.ts +1 -29
- package/dist/ViewModel.d.ts.map +1 -0
- package/dist/ViewModel.js +0 -36
- package/dist/ViewModel.js.map +1 -1
- package/dist/ZomeElement.d.ts +2 -9
- package/dist/ZomeElement.d.ts.map +1 -0
- package/dist/ZomeElement.js +2 -18
- package/dist/ZomeElement.js.map +1 -1
- package/dist/ZomeViewModel.d.ts +1 -15
- package/dist/ZomeViewModel.d.ts.map +1 -0
- package/dist/ZomeViewModel.js +0 -20
- package/dist/ZomeViewModel.js.map +1 -1
- package/dist/ZomeViewModelWithSignals.d.ts +1 -19
- package/dist/ZomeViewModelWithSignals.d.ts.map +1 -0
- package/dist/ZomeViewModelWithSignals.js +9 -39
- package/dist/ZomeViewModelWithSignals.js.map +1 -1
- package/dist/definitions.d.ts +1 -1
- package/dist/definitions.d.ts.map +1 -0
- package/dist/definitions.js +0 -19
- package/dist/definitions.js.map +1 -1
- package/dist/elements/cell-context.d.ts +1 -6
- package/dist/elements/cell-context.d.ts.map +1 -0
- package/dist/elements/cell-context.js +1 -14
- package/dist/elements/cell-context.js.map +1 -1
- package/dist/elements/dvm-inspect.d.ts +2 -10
- package/dist/elements/dvm-inspect.d.ts.map +1 -0
- package/dist/elements/dvm-inspect.js +2 -17
- package/dist/elements/dvm-inspect.js.map +1 -1
- package/dist/elements/entry-def-select.d.ts +3 -10
- package/dist/elements/entry-def-select.d.ts.map +1 -0
- package/dist/elements/entry-def-select.js +2 -19
- package/dist/elements/entry-def-select.js.map +1 -1
- package/dist/elements/view-cell-context.d.ts +1 -4
- package/dist/elements/view-cell-context.d.ts.map +1 -0
- package/dist/elements/view-cell-context.js +0 -4
- package/dist/elements/view-cell-context.js.map +1 -1
- package/dist/globals.d.ts +1 -4
- package/dist/globals.d.ts.map +1 -0
- package/dist/globals.js +1 -20
- package/dist/globals.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/roleMixin.d.ts +1 -10
- package/dist/roleMixin.d.ts.map +1 -0
- package/dist/roleMixin.js +2 -12
- package/dist/roleMixin.js.map +1 -1
- package/package.json +2 -2
package/dist/DnaElement.d.ts
CHANGED
|
@@ -9,28 +9,16 @@ declare const DnaElement_base: (abstract new (...args: any[]) => {
|
|
|
9
9
|
}) & {
|
|
10
10
|
readonly DEFAULT_BASE_ROLE_NAME: string;
|
|
11
11
|
}) & typeof LitElement;
|
|
12
|
-
/**
|
|
13
|
-
* A LitElement that is bound to a specific DnaViewModel, e.g. a View for the ViewModel
|
|
14
|
-
*/
|
|
15
12
|
export declare class DnaElement<P, DVM extends DnaViewModel> extends DnaElement_base {
|
|
16
|
-
/** if BaseRoleName is not provided, subclass must call requestDvm() in its Ctor */
|
|
17
13
|
constructor(baseRoleName?: BaseRoleName);
|
|
18
|
-
/** Provided by Context depending on BaseRoleName */
|
|
19
14
|
protected _dvm: DVM;
|
|
20
15
|
_cell_via_context: Cell;
|
|
21
16
|
perspective: P;
|
|
22
17
|
private _consumer?;
|
|
23
|
-
/** -- Methods -- */
|
|
24
|
-
/** */
|
|
25
18
|
protected requestDvm(canRerequest?: boolean): void;
|
|
26
|
-
|
|
27
|
-
* To be overriden by subclasses
|
|
28
|
-
* Example: Have a subclass unsubscribe to oldDvm's zvms and subscribe to the new ones
|
|
29
|
-
*/
|
|
30
|
-
protected dvmUpdated(newDvm: DVM, oldDvm?: DVM): Promise<void>;
|
|
31
|
-
/** */
|
|
19
|
+
protected dvmUpdated(_newDvm: DVM, _oldDvm?: DVM): Promise<void>;
|
|
32
20
|
shouldUpdate(changedProperties: PropertyValues<this>): boolean;
|
|
33
|
-
/** */
|
|
34
21
|
protected willUpdate(changedProperties: PropertyValues<this>): void;
|
|
35
22
|
}
|
|
36
23
|
export {};
|
|
24
|
+
//# sourceMappingURL=DnaElement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DnaElement.d.ts","sourceRoot":"","sources":["../src/DnaElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,KAAK,CAAC;AAG/C,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,YAAY,EAAE,IAAI,EAAY,MAAM,oBAAoB,CAAC;;;;;;;;;AAOjE,qBAAa,UAAU,CAAC,CAAC,EAAE,GAAG,SAAS,YAAY,CAAE,SAAQ,eAAgC;gBAG/E,YAAY,CAAC,EAAE,YAAY;IAQ9B,SAAS,CAAC,IAAI,EAAG,GAAG,CAAC;IAI9B,iBAAiB,EAAG,IAAI,CAAC;IAGzB,WAAW,EAAG,CAAC,CAAC;IAGhB,OAAO,CAAC,SAAS,CAAC,CAAC;IAMnB,SAAS,CAAC,UAAU,CAAC,YAAY,GAAE,OAAe;cAkClC,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7D,YAAY,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC;cAY1C,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC;CAKtE"}
|
package/dist/DnaElement.js
CHANGED
|
@@ -5,32 +5,24 @@ import { ContextConsumer, consume, createContext } from "@lit/context";
|
|
|
5
5
|
import { CellMixin } from "@ddd-qc/cell-proxy";
|
|
6
6
|
import { cellContext } from "./elements/cell-context";
|
|
7
7
|
import { RoleMixin } from "./roleMixin";
|
|
8
|
-
/**
|
|
9
|
-
* A LitElement that is bound to a specific DnaViewModel, e.g. a View for the ViewModel
|
|
10
|
-
*/
|
|
11
8
|
export class DnaElement extends CellMixin(RoleMixin(LitElement)) {
|
|
12
|
-
/** if BaseRoleName is not provided, subclass must call requestDvm() in its Ctor */
|
|
13
9
|
constructor(baseRoleName) {
|
|
14
10
|
super();
|
|
15
11
|
if (baseRoleName) {
|
|
16
12
|
this.baseRoleName = baseRoleName;
|
|
17
13
|
}
|
|
18
14
|
}
|
|
19
|
-
/** -- Methods -- */
|
|
20
|
-
/** */
|
|
21
15
|
requestDvm(canRerequest = false) {
|
|
22
|
-
/** Consume Context based on given dnaHash */
|
|
23
16
|
if (!this._cell_via_context) {
|
|
24
17
|
console.error("No Cell info found via context in a DnaElement for role:", this.baseRoleName);
|
|
25
18
|
return;
|
|
26
19
|
}
|
|
27
|
-
/* DVM already requested */
|
|
28
20
|
if (!canRerequest && this._consumer) {
|
|
29
21
|
return;
|
|
30
22
|
}
|
|
31
23
|
const contextType = createContext('dvm/' + this.cell.name);
|
|
32
24
|
console.log(`\t\t Requesting context "${contextType}"`);
|
|
33
|
-
this._consumer = new ContextConsumer(this, contextType, async (value,
|
|
25
|
+
this._consumer = new ContextConsumer(this, contextType, async (value, _dispose) => {
|
|
34
26
|
console.log(`\t\t Received value for context "${contextType}"`);
|
|
35
27
|
await this.dvmUpdated(value, this._dvm);
|
|
36
28
|
if (this._dvm) {
|
|
@@ -39,16 +31,9 @@ export class DnaElement extends CellMixin(RoleMixin(LitElement)) {
|
|
|
39
31
|
this._dvm = value;
|
|
40
32
|
this._dvm.subscribe(this, 'perspective');
|
|
41
33
|
}, false);
|
|
42
|
-
//console.log({consumer})
|
|
43
34
|
}
|
|
44
|
-
|
|
45
|
-
* To be overriden by subclasses
|
|
46
|
-
* Example: Have a subclass unsubscribe to oldDvm's zvms and subscribe to the new ones
|
|
47
|
-
*/
|
|
48
|
-
async dvmUpdated(newDvm, oldDvm) {
|
|
49
|
-
//console.log(`\t\t Default dvmUpdated() called`)
|
|
35
|
+
async dvmUpdated(_newDvm, _oldDvm) {
|
|
50
36
|
}
|
|
51
|
-
/** */
|
|
52
37
|
shouldUpdate(changedProperties) {
|
|
53
38
|
if (changedProperties.has("_cell_via_context")) {
|
|
54
39
|
this._cell = this._cell_via_context;
|
|
@@ -58,7 +43,6 @@ export class DnaElement extends CellMixin(RoleMixin(LitElement)) {
|
|
|
58
43
|
}
|
|
59
44
|
return !!this._dvm;
|
|
60
45
|
}
|
|
61
|
-
/** */
|
|
62
46
|
willUpdate(changedProperties) {
|
|
63
47
|
if (changedProperties.has("_cell_via_context")) {
|
|
64
48
|
this.requestDvm(true);
|
package/dist/DnaElement.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DnaElement.js","sourceRoot":"","sources":["../src/DnaElement.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAiB,MAAM,KAAK,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAE,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,eAAe,EAAE,OAAO,EAAE,aAAa,EAAC,MAAM,cAAc,CAAC;AAErE,OAAO,EAAqB,SAAS,EAAC,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAC,WAAW,EAAC,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"DnaElement.js","sourceRoot":"","sources":["../src/DnaElement.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAiB,MAAM,KAAK,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAE,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,eAAe,EAAE,OAAO,EAAE,aAAa,EAAC,MAAM,cAAc,CAAC;AAErE,OAAO,EAAqB,SAAS,EAAC,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAC,WAAW,EAAC,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAKtC,MAAM,OAAO,UAAwC,SAAQ,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAG3F,YAAY,YAA2B;QACrC,KAAK,EAAE,CAAC;QACR,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;SAClC;IACH,CAAC;IAmBS,UAAU,CAAC,eAAwB,KAAK;QAEhD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3B,OAAO,CAAC,KAAK,CAAC,0DAA0D,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;YAC5F,OAAO;SACR;QAED,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE;YACnC,OAAO;SACR;QACD,MAAM,WAAW,GAAG,aAAa,CAAM,MAAM,GAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,4BAA4B,WAAW,GAAG,CAAC,CAAA;QACvD,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAClC,IAAI,EACJ,WAAW,EACX,KAAK,EAAE,KAAU,EAAE,QAAqB,EAAiB,EAAE;YACzD,OAAO,CAAC,GAAG,CAAC,oCAAoC,WAAW,GAAG,CAAC,CAAA;YAC/D,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aAC7B;YACD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC3C,CAAC,EACD,KAAK,CACN,CAAC;IAEJ,CAAC;IAOS,KAAK,CAAC,UAAU,CAAC,OAAY,EAAE,OAAa;IAEtD,CAAC;IAIQ,YAAY,CAAC,iBAAuC;QAC3D,IAAI,iBAAiB,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE;YAC9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC;SACrC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAIkB,UAAU,CAAC,iBAAuC;QACnE,IAAI,iBAAiB,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE;YAC9C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACvB;IACH,CAAC;CACF;AAzEoB;IAAlB,KAAK,EAAE;wCAAsB;AAI9B;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAC,CAAC;IACjD,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAC,CAAC;qDAClB;AAGzB;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAC,CAAC;+CAC3D","sourcesContent":["import {LitElement, PropertyValues} from \"lit\";\nimport {property, state} from \"lit/decorators.js\";\nimport {ContextConsumer, consume, createContext} from \"@lit/context\";\nimport {DnaViewModel} from \"./DnaViewModel\";\nimport {BaseRoleName, Cell, CellMixin} from \"@ddd-qc/cell-proxy\";\nimport {cellContext} from \"./elements/cell-context\";\nimport {RoleMixin} from \"./roleMixin\";\n\n/**\n * A LitElement that is bound to a specific DnaViewModel, e.g. a View for the ViewModel\n */\nexport class DnaElement<P, DVM extends DnaViewModel> extends CellMixin(RoleMixin(LitElement)) {\n\n /** if BaseRoleName is not provided, subclass must call requestDvm() in its Ctor */\n constructor(baseRoleName?: BaseRoleName) {\n super();\n if (baseRoleName) {\n this.baseRoleName = baseRoleName;\n }\n }\n\n /** Provided by Context depending on BaseRoleName */\n @state() protected _dvm!: DVM;\n\n @consume({ context: cellContext, subscribe: true})\n @property({type: Object, attribute: false})\n _cell_via_context!: Cell;\n\n @property({type: Object, attribute: false, hasChanged: (_v, _old) => true})\n perspective!: P;\n\n // @ts-ignore\n private _consumer?;\n\n\n /** -- Methods -- */\n\n /** */\n protected requestDvm(canRerequest: boolean = false) {\n /** Consume Context based on given dnaHash */\n if (!this._cell_via_context) {\n console.error(\"No Cell info found via context in a DnaElement for role:\", this.baseRoleName)\n return;\n }\n /* DVM already requested */\n if (!canRerequest && this._consumer) {\n return;\n }\n const contextType = createContext<DVM>('dvm/'+ this.cell.name);\n console.log(`\\t\\t Requesting context \"${contextType}\"`)\n this._consumer = new ContextConsumer(\n this,\n contextType,\n async (value: DVM, _dispose?: () => void): Promise<void> => {\n console.log(`\\t\\t Received value for context \"${contextType}\"`)\n await this.dvmUpdated(value, this._dvm);\n if (this._dvm) {\n this._dvm.unsubscribe(this);\n }\n this._dvm = value;\n this._dvm.subscribe(this, 'perspective');\n },\n false, // true will call twice at init\n );\n //console.log({consumer})\n }\n\n\n /**\n * To be overriden by subclasses\n * Example: Have a subclass unsubscribe to oldDvm's zvms and subscribe to the new ones\n */\n protected async dvmUpdated(_newDvm: DVM, _oldDvm?: DVM): Promise<void> {\n //console.log(`\\t\\t Default dvmUpdated() called`)\n }\n\n\n /** */\n override shouldUpdate(changedProperties: PropertyValues<this>) {\n if (changedProperties.has(\"_cell_via_context\")) {\n this._cell = this._cell_via_context;\n }\n if (!this._dvm) {\n this.requestDvm();\n }\n return !!this._dvm;\n }\n\n\n /** */\n protected override willUpdate(changedProperties: PropertyValues<this>) {\n if (changedProperties.has(\"_cell_via_context\")) {\n this.requestDvm(true);\n }\n }\n}\n"]}
|
package/dist/DnaViewModel.d.ts
CHANGED
|
@@ -6,11 +6,9 @@ import { DnaModifiersOptions, ZvmDef } from "./definitions";
|
|
|
6
6
|
import { Context } from "@lit/context";
|
|
7
7
|
import { CellProxy, AppProxy, HCL, Dictionary, AgentId, EntryDef } from "@ddd-qc/cell-proxy";
|
|
8
8
|
import { RoleSpecific } from "./roleMixin";
|
|
9
|
-
/** Interface specific to DnaViewModel class */
|
|
10
9
|
interface IDnaViewModel {
|
|
11
10
|
dumpCallLogs(zomeName?: ZomeName): void;
|
|
12
11
|
dumpSignalLogs(zomeName?: ZomeName): void;
|
|
13
|
-
/** zomeName -> (AppEntryName, isPublic)[] */
|
|
14
12
|
fetchAllEntryDefs(): Promise<Dictionary<Dictionary<EntryDef>>>;
|
|
15
13
|
}
|
|
16
14
|
export type DvmConstructor = typeof RoleSpecific & {
|
|
@@ -24,54 +22,34 @@ declare const DnaViewModel_base: (abstract new (...args: any[]) => {
|
|
|
24
22
|
}) & ((abstract new (...args: any[]) => {
|
|
25
23
|
baseRoleName: string;
|
|
26
24
|
}) & {
|
|
27
|
-
/** Interface specific to DnaViewModel class */
|
|
28
25
|
readonly DEFAULT_BASE_ROLE_NAME: string;
|
|
29
26
|
}) & typeof ViewModel;
|
|
30
|
-
/**
|
|
31
|
-
* Abstract ViewModel for a DNA.
|
|
32
|
-
* It holds the CellProxy and all the ZomeViewModels of the DNA.
|
|
33
|
-
* It is expected to derive this class for each DNA and add extra logic at the DNA level.
|
|
34
|
-
* TODO: Split into RoleViewModel and CellViewModel (e.g. have call logs separated by role)
|
|
35
|
-
*/
|
|
36
27
|
export declare abstract class DnaViewModel extends DnaViewModel_base implements IDnaViewModel {
|
|
37
28
|
readonly host: ReactiveElement;
|
|
38
29
|
static ZVM_DEFS: ZvmDef[];
|
|
39
30
|
static DNA_MODIFIERS: DnaModifiersOptions;
|
|
40
|
-
/** Ctor */
|
|
41
31
|
constructor(host: ReactiveElement, appProxy: AppProxy, idOrHcl: HCL | InstalledAppId);
|
|
42
|
-
/** -- Fields -- */
|
|
43
32
|
protected _cellProxy: CellProxy;
|
|
44
33
|
protected _zomeViewModels: Dictionary<ZomeViewModel>;
|
|
45
34
|
protected _zomeNames: Dictionary<ZomeName>;
|
|
46
35
|
private _allEntryDefs;
|
|
47
|
-
/** list of "known" peers in this DNA */
|
|
48
36
|
protected _livePeers: AgentId[];
|
|
49
37
|
readonly hcl: HCL;
|
|
50
|
-
/** -- Getters -- */
|
|
51
38
|
get livePeers(): AgentId[];
|
|
52
39
|
get zomeNames(): ZomeName[];
|
|
53
40
|
getZomeEntryDefs(zomeName: ZomeName): Dictionary<EntryDef> | undefined;
|
|
54
41
|
getZomeViewModel(zomeName: ZomeName): ZomeViewModel | undefined;
|
|
55
42
|
getZomeName(zvm: typeof ZomeViewModel): ZomeName | undefined;
|
|
56
|
-
/** -- Methods -- */
|
|
57
|
-
/** Override so we can provide context of all zvms */
|
|
58
43
|
provideContext(host: ReactiveElement): void;
|
|
59
44
|
getContext(): Context<unknown, unknown>;
|
|
60
|
-
/** */
|
|
61
45
|
authorizeZomeCalls(adminWs: AdminWebsocket): Promise<void>;
|
|
62
|
-
/** Not async on purpose as we except this to be long. Post-processing should be done via Observer pattern */
|
|
63
46
|
protected probeAllInner(): void;
|
|
64
|
-
|
|
65
|
-
zvmChanged(zvm: ZomeViewModel): void;
|
|
66
|
-
/** */
|
|
47
|
+
zvmChanged(_zvm: ZomeViewModel): void;
|
|
67
48
|
initializePerspectiveOffline(): Promise<void>;
|
|
68
|
-
/** */
|
|
69
49
|
initializePerspectiveOnline(): Promise<void>;
|
|
70
|
-
/** Maybe useless since the entry defs are in the integrity zome which is not represented here */
|
|
71
50
|
fetchAllEntryDefs(): Promise<Dictionary<Dictionary<EntryDef>>>;
|
|
72
|
-
/** */
|
|
73
51
|
dumpCallLogs(zomeName?: ZomeName): void;
|
|
74
|
-
/** */
|
|
75
52
|
dumpSignalLogs(zomeName?: ZomeName): void;
|
|
76
53
|
}
|
|
77
54
|
export {};
|
|
55
|
+
//# sourceMappingURL=DnaViewModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DnaViewModel.d.ts","sourceRoot":"","sources":["../src/DnaViewModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAC,eAAe,EAAC,MAAM,KAAK,CAAC;AACpC,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EACL,cAAc,EACd,cAAc,EACd,QAAQ,EACT,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAC,mBAAmB,EAAE,MAAM,EAAC,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAC,OAAO,EAAgB,MAAM,cAAc,CAAC;AACpD,OAAO,EACL,SAAS,EACT,QAAQ,EACR,GAAG,EACH,UAAU,EAAa,OAAO,EAAE,QAAQ,EACzC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAY,YAAY,EAAC,MAAM,aAAa,CAAC;AAMpD,UAAU,aAAa;IACrB,YAAY,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACxC,cAAc,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAE1C,iBAAiB,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;CAIhE;AAED,MAAM,MAAM,cAAc,GAAG,OAAO,YAAY,GAAG;IAAC,aAAa,EAAE,mBAAmB,CAAA;CAAC,GAAG;IACxF,KAAI,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,GAAG,cAAc,GAAG,YAAY,CAAC;CAC1F,CAAC;;;;;;;;;AASF,8BAAsB,YAAa,SAAQ,iBAAgC,YAAW,aAAa;aAOrE,IAAI,EAAE,eAAe;IALnC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACxC,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC;gBAId,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,GAAG,cAAc;IA+BpG,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC;IAEhC,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,aAAa,CAAC,CAAM;IAE1D,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAM;IAEhD,OAAO,CAAC,aAAa,CAAwC;IAG7D,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,CAAM;IAErC,SAAgB,GAAG,EAAE,GAAG,CAAC;IAMzB,IAAI,SAAS,IAAI,OAAO,EAAE,CAA2B;IAErD,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAyC;IAEpE,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,SAAS;IACtE,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,aAAa,GAAG,SAAS;IAC/D,WAAW,CAAC,GAAG,EAAE,OAAO,aAAa,GAAG,QAAQ,GAAG,SAAS;IAKvC,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAShE,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;IAIjC,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;cAwB7C,aAAa,IAAI,IAAI;IASxC,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAItB,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;IAW7C,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrD,iBAAiB,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IAgBpE,YAAY,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI;IAMvC,cAAc,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI;CAgB1C"}
|
package/dist/DnaViewModel.js
CHANGED
|
@@ -1,26 +1,14 @@
|
|
|
1
1
|
import { ViewModel } from "./ViewModel";
|
|
2
|
-
import { GrantedFunctionsType, } from "@holochain/client";
|
|
3
2
|
import { createContext } from "@lit/context";
|
|
4
3
|
import { HCL, CellMixin } from "@ddd-qc/cell-proxy";
|
|
5
4
|
import { RoleMixin } from "./roleMixin";
|
|
6
|
-
/**
|
|
7
|
-
* Abstract ViewModel for a DNA.
|
|
8
|
-
* It holds the CellProxy and all the ZomeViewModels of the DNA.
|
|
9
|
-
* It is expected to derive this class for each DNA and add extra logic at the DNA level.
|
|
10
|
-
* TODO: Split into RoleViewModel and CellViewModel (e.g. have call logs separated by role)
|
|
11
|
-
*/
|
|
12
5
|
export class DnaViewModel extends CellMixin(RoleMixin(ViewModel)) {
|
|
13
|
-
/** Ctor */
|
|
14
6
|
constructor(host, appProxy, idOrHcl) {
|
|
15
7
|
super();
|
|
16
8
|
this.host = host;
|
|
17
|
-
/* ZomeName -> Zvm */
|
|
18
9
|
this._zomeViewModels = {};
|
|
19
|
-
/* ZvmCtorName -> ZomeName */
|
|
20
10
|
this._zomeNames = {};
|
|
21
|
-
/* ZomeName -> (EntryName -> EntryDef) */
|
|
22
11
|
this._allEntryDefs = {};
|
|
23
|
-
/** list of "known" peers in this DNA */
|
|
24
12
|
this._livePeers = [];
|
|
25
13
|
if (typeof idOrHcl === 'object') {
|
|
26
14
|
this.baseRoleName = idOrHcl.baseRoleName;
|
|
@@ -31,10 +19,9 @@ export class DnaViewModel extends CellMixin(RoleMixin(ViewModel)) {
|
|
|
31
19
|
}
|
|
32
20
|
const dvmCtor = this.constructor;
|
|
33
21
|
const zvmDefs = dvmCtor.ZVM_DEFS;
|
|
34
|
-
this._cellProxy = appProxy.getCellProxy(this.hcl);
|
|
22
|
+
this._cellProxy = appProxy.getCellProxy(this.hcl);
|
|
35
23
|
this._cell = this._cellProxy.cell;
|
|
36
24
|
console.log(`DVM.ctor of ${this.baseRoleName}`, this._cellProxy.cell);
|
|
37
|
-
/** Create all ZVMs for this DNA */
|
|
38
25
|
for (const zvmDef of zvmDefs) {
|
|
39
26
|
let zvm;
|
|
40
27
|
if (Array.isArray(zvmDef)) {
|
|
@@ -43,23 +30,18 @@ export class DnaViewModel extends CellMixin(RoleMixin(ViewModel)) {
|
|
|
43
30
|
else {
|
|
44
31
|
zvm = new zvmDef(this._cellProxy, this);
|
|
45
32
|
}
|
|
46
|
-
// TODO check zvm.zomeName exists in _cellProxy
|
|
47
33
|
this._zomeViewModels[zvm.zomeName] = zvm;
|
|
48
34
|
this._zomeNames[zvmDef.constructor.name] = zvm.zomeName;
|
|
49
35
|
}
|
|
50
|
-
this.provideContext(host);
|
|
36
|
+
this.provideContext(host);
|
|
51
37
|
}
|
|
52
|
-
/** -- Getters -- */
|
|
53
38
|
get livePeers() { return this._livePeers; }
|
|
54
39
|
;
|
|
55
40
|
get zomeNames() { return Object.values(this._zomeNames); }
|
|
56
41
|
getZomeEntryDefs(zomeName) { return this._allEntryDefs[zomeName]; }
|
|
57
42
|
getZomeViewModel(zomeName) { return this._zomeViewModels[zomeName]; }
|
|
58
43
|
getZomeName(zvm) { return this._zomeNames[zvm.constructor.name]; }
|
|
59
|
-
|
|
60
|
-
/** Override so we can provide context of all zvms */
|
|
61
|
-
/*private*/ provideContext(host) {
|
|
62
|
-
//console.log("DVM.provideContext()", host, this)
|
|
44
|
+
provideContext(host) {
|
|
63
45
|
super.provideContext(host);
|
|
64
46
|
for (const zvm of Object.values(this._zomeViewModels)) {
|
|
65
47
|
zvm.provideContext(host);
|
|
@@ -67,39 +49,26 @@ export class DnaViewModel extends CellMixin(RoleMixin(ViewModel)) {
|
|
|
67
49
|
}
|
|
68
50
|
getContext() { return createContext('dvm/' + this.cell.name); }
|
|
69
51
|
;
|
|
70
|
-
/** */
|
|
71
52
|
async authorizeZomeCalls(adminWs) {
|
|
72
53
|
let allFnNames = [];
|
|
73
54
|
for (const [_zomeName, zvm] of Object.entries(this._zomeViewModels)) {
|
|
74
55
|
allFnNames = allFnNames.concat(zvm.zomeProxy.fnNames);
|
|
75
56
|
}
|
|
76
|
-
const grantedFns = { [GrantedFunctionsType.Listed]: allFnNames };
|
|
77
57
|
try {
|
|
78
58
|
console.log("authorizeSigningCredentials: " + this.cell.hcl().toString(), allFnNames);
|
|
79
59
|
console.log("authorizeSigningCredentials. cell_id = " + this.cell.address.str);
|
|
80
|
-
//await adminWs.authorizeSigningCredentials(this.cell.id, grantedFns);
|
|
81
60
|
await adminWs.authorizeSigningCredentials(this.cell.address.intoId());
|
|
82
61
|
}
|
|
83
62
|
catch (e) {
|
|
84
63
|
console.warn("authorizeSigningCredentials FAILED.", e);
|
|
85
64
|
}
|
|
86
|
-
// this._signingProps = getSigningCredentials(this.cellId);
|
|
87
|
-
// console.log({signProps: this._signingProps})
|
|
88
|
-
//
|
|
89
|
-
// for (const [zomeName, zvm] of Object.entries(this._zomeViewModels)) {
|
|
90
|
-
// zvm.zomeProxy.setSigningProps(this._signingProps);
|
|
91
|
-
// }
|
|
92
65
|
}
|
|
93
|
-
/** Not async on purpose as we except this to be long. Post-processing should be done via Observer pattern */
|
|
94
66
|
probeAllInner() {
|
|
95
67
|
for (const [_name, zvm] of Object.entries(this._zomeViewModels)) {
|
|
96
|
-
//console.log("Dvm.probeAll()", name)
|
|
97
68
|
zvm.probeAll();
|
|
98
69
|
}
|
|
99
70
|
}
|
|
100
|
-
|
|
101
|
-
zvmChanged(zvm) { }
|
|
102
|
-
/** */
|
|
71
|
+
zvmChanged(_zvm) { }
|
|
103
72
|
async initializePerspectiveOffline() {
|
|
104
73
|
const all = [];
|
|
105
74
|
for (const [_name, zvm] of Object.entries(this._zomeViewModels)) {
|
|
@@ -108,7 +77,6 @@ export class DnaViewModel extends CellMixin(RoleMixin(ViewModel)) {
|
|
|
108
77
|
}
|
|
109
78
|
await Promise.all(all);
|
|
110
79
|
}
|
|
111
|
-
/** */
|
|
112
80
|
async initializePerspectiveOnline() {
|
|
113
81
|
const all = [];
|
|
114
82
|
for (const [_name, zvm] of Object.entries(this._zomeViewModels)) {
|
|
@@ -117,12 +85,11 @@ export class DnaViewModel extends CellMixin(RoleMixin(ViewModel)) {
|
|
|
117
85
|
}
|
|
118
86
|
await Promise.all(all);
|
|
119
87
|
}
|
|
120
|
-
/** Maybe useless since the entry defs are in the integrity zome which is not represented here */
|
|
121
88
|
async fetchAllEntryDefs() {
|
|
122
89
|
for (const zvm of Object.values(this._zomeViewModels)) {
|
|
123
90
|
const zomeName = zvm.zomeName;
|
|
124
91
|
try {
|
|
125
|
-
const defs = await this._cellProxy.callEntryDefs(zomeName);
|
|
92
|
+
const defs = await this._cellProxy.callEntryDefs(zomeName);
|
|
126
93
|
this._allEntryDefs[zomeName] = defs;
|
|
127
94
|
}
|
|
128
95
|
catch (e) {
|
|
@@ -132,11 +99,9 @@ export class DnaViewModel extends CellMixin(RoleMixin(ViewModel)) {
|
|
|
132
99
|
}
|
|
133
100
|
return this._allEntryDefs;
|
|
134
101
|
}
|
|
135
|
-
/** */
|
|
136
102
|
dumpCallLogs(zomeName) {
|
|
137
103
|
this._cellProxy.dumpCallLogs(zomeName);
|
|
138
104
|
}
|
|
139
|
-
/** */
|
|
140
105
|
dumpSignalLogs(zomeName) {
|
|
141
106
|
console.warn("Dumping signals in DVM", this.baseRoleName);
|
|
142
107
|
if (zomeName == undefined) {
|
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/context\";\nimport {\n CellProxy,\n AppProxy,\n HCL,\n Dictionary, CellMixin, AgentId, EntryDef\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 dumpCallLogs(zomeName?: ZomeName): void;\n dumpSignalLogs(zomeName?: ZomeName): void;\n /** zomeName -> (AppEntryName, isPublic)[] */\n fetchAllEntryDefs(): Promise<Dictionary<Dictionary<EntryDef>>>;\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 /* ZomeName -> (EntryName -> EntryDef) */\n private _allEntryDefs: Dictionary<Dictionary<EntryDef>> = {};\n\n /** list of \"known\" peers in this DNA */\n protected _livePeers: AgentId[] = [];\n\n public readonly hcl: HCL;\n\n\n\n /** -- Getters -- */\n\n get livePeers(): AgentId[] { return this._livePeers };\n\n get zomeNames(): ZomeName[] {return Object.values(this._zomeNames);}\n\n getZomeEntryDefs(zomeName: ZomeName): Dictionary<EntryDef> | 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.address.str);\n //await adminWs.authorizeSigningCredentials(this.cell.id, grantedFns);\n await adminWs.authorizeSigningCredentials(this.cell.address.intoId());\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 /** Not async on purpose as we except this to be long. Post-processing should be done via Observer pattern */\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 /** */\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<Dictionary<EntryDef>>> {\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 dumpCallLogs(zomeName?: ZomeName): void {\n this._cellProxy.dumpCallLogs(zomeName);\n }\n\n\n /** */\n dumpSignalLogs(zomeName?: ZomeName): void {\n console.warn(\"Dumping signals in DVM\", this.baseRoleName);\n if (zomeName == undefined) {\n for (const [name, zvm] of Object.entries(this._zomeViewModels)) {\n const logs = this._cellProxy.signalLogs.filter((log) => log.zomeName == name)\n zvm.dumpSignalLogs(logs);\n }\n return;\n }\n if (this._zomeViewModels[zomeName]) {\n const logs = this._cellProxy.signalLogs.filter((log) => log.zomeName == zomeName)\n this._zomeViewModels[zomeName].dumpSignalLogs(logs);\n } else {\n console.error(`Unknown zome ${zomeName} in DVM ${this.baseRoleName}`)\n }\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, FunctionName,\n InstalledAppId,\n ZomeName,\n} from \"@holochain/client\";\nimport {DnaModifiersOptions, ZvmDef} from \"./definitions\";\nimport {Context, createContext} from \"@lit/context\";\nimport {\n CellProxy,\n AppProxy,\n HCL,\n Dictionary, CellMixin, AgentId, EntryDef\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 dumpCallLogs(zomeName?: ZomeName): void;\n dumpSignalLogs(zomeName?: ZomeName): void;\n /** zomeName -> (AppEntryName, isPublic)[] */\n fetchAllEntryDefs(): Promise<Dictionary<Dictionary<EntryDef>>>;\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 /* ZomeName -> (EntryName -> EntryDef) */\n private _allEntryDefs: Dictionary<Dictionary<EntryDef>> = {};\n\n /** list of \"known\" peers in this DNA */\n protected _livePeers: AgentId[] = [];\n\n public readonly hcl: HCL;\n\n\n\n /** -- Getters -- */\n\n get livePeers(): AgentId[] { return this._livePeers };\n\n get zomeNames(): ZomeName[] {return Object.values(this._zomeNames);}\n\n getZomeEntryDefs(zomeName: ZomeName): Dictionary<EntryDef> | 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*/ override 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: [ZomeName, FunctionName][] = [];\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.address.str);\n //await adminWs.authorizeSigningCredentials(this.cell.id, grantedFns);\n await adminWs.authorizeSigningCredentials(this.cell.address.intoId());\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 /** Not async on purpose as we except this to be long. Post-processing should be done via Observer pattern */\n protected override 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 /** */\n zvmChanged(_zvm: ZomeViewModel): void {}\n\n\n /** */\n override 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 override 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<Dictionary<EntryDef>>> {\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 dumpCallLogs(zomeName?: ZomeName): void {\n this._cellProxy.dumpCallLogs(zomeName);\n }\n\n\n /** */\n dumpSignalLogs(zomeName?: ZomeName): void {\n console.warn(\"Dumping signals in DVM\", this.baseRoleName);\n if (zomeName == undefined) {\n for (const [name, zvm] of Object.entries(this._zomeViewModels)) {\n const logs = this._cellProxy.signalLogs.filter((log) => log.zomeName == name)\n zvm.dumpSignalLogs(logs);\n }\n return;\n }\n if (this._zomeViewModels[zomeName]) {\n const logs = this._cellProxy.signalLogs.filter((log) => log.zomeName == zomeName)\n this._zomeViewModels[zomeName]!.dumpSignalLogs(logs);\n } else {\n console.error(`Unknown zome ${zomeName} in DVM ${this.baseRoleName}`)\n }\n }\n}\n"]}
|
package/dist/HappElement.d.ts
CHANGED
|
@@ -4,34 +4,20 @@ import { HappViewModel } from "./HappViewModel";
|
|
|
4
4
|
import { CellDef, HvmDef } from "./definitions";
|
|
5
5
|
import { AppWebsocket, ClonedCell, InstalledAppId, NetworkInfo, Timestamp } from "@holochain/client";
|
|
6
6
|
import { DnaViewModel } from "./DnaViewModel";
|
|
7
|
-
/**
|
|
8
|
-
*
|
|
9
|
-
*/
|
|
10
7
|
export declare class HappElement extends LitElement {
|
|
11
|
-
/** Must be defined by subclass */
|
|
12
8
|
static HVM_DEF: HvmDef;
|
|
13
|
-
/** Set during init triggered at ctor */
|
|
14
9
|
appProxy: AppProxy;
|
|
15
10
|
hvm: HappViewModel;
|
|
16
|
-
/** Ctor */
|
|
17
11
|
protected constructor(port_or_socket: number | AppWebsocket, appId?: InstalledAppId, adminUrl?: URL, defaultTimeout?: number);
|
|
18
|
-
/** */
|
|
19
12
|
hvmConstructed(): Promise<void>;
|
|
20
|
-
/** */
|
|
21
13
|
perspectiveInitializedOffline(): Promise<void>;
|
|
22
|
-
/** */
|
|
23
14
|
perspectiveInitializedOnline(): Promise<void>;
|
|
24
|
-
|
|
15
|
+
shouldUpdate(): boolean;
|
|
25
16
|
protected constructHvm(port_or_socket: number | AppWebsocket, appId?: InstalledAppId, adminUrl?: URL, defaultTimeout?: number): Promise<void>;
|
|
26
|
-
/** */
|
|
27
17
|
initializePerspective(): Promise<void>;
|
|
28
|
-
/** */
|
|
29
18
|
networkInfoAll(baseRoleName?: string): Promise<Record<CellIdStr, [Timestamp, NetworkInfo]>>;
|
|
30
|
-
|
|
31
|
-
dumpLastestNetworkInfo(baseRoleName?: string): Promise<never>;
|
|
19
|
+
dumpLastestNetworkInfo(baseRoleName?: string): void;
|
|
32
20
|
dumpNetworkInfoLogs(cellIdStr?: string): void;
|
|
33
|
-
/** */
|
|
34
21
|
createClone(baseRoleName: BaseRoleName, cellDef?: CellDef): Promise<[ClonedCell, DnaViewModel]>;
|
|
35
|
-
/** */
|
|
36
|
-
shouldUpdate(): boolean;
|
|
37
22
|
}
|
|
23
|
+
//# sourceMappingURL=HappElement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HappElement.d.ts","sourceRoot":"","sources":["../src/HappElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,KAAK,CAAC;AAE/B,OAAO,EACL,YAAY,EACZ,QAAQ,EAGR,SAAS,EACV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAC,OAAO,EAAE,MAAM,EAAC,MAAM,eAAe,CAAC;AAC9C,OAAO,EACL,YAAY,EACZ,UAAU,EACV,cAAc,EACd,WAAW,EAAE,SAAS,EACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAS5C,qBAAa,WAAY,SAAQ,UAAU;IAGzC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;IAGvB,QAAQ,EAAG,QAAQ,CAAC;IACX,GAAG,EAAG,aAAa,CAAC;IAI7B,SAAS,aAAa,cAAc,EAAE,MAAM,GAAG,YAAY,EAAE,KAAK,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM;IAMtH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAE/B,6BAA6B,IAAI,OAAO,CAAC,IAAI,CAAC;IAE9C,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;IAG1C,YAAY;cAKL,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY,EAAE,KAAK,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB7I,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBtC,cAAc,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IAgDjG,sBAAsB,CAAC,YAAY,CAAC,EAAE,MAAM;IAgD5C,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM;IA+BhC,WAAW,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;CAItG"}
|
package/dist/HappElement.js
CHANGED
|
@@ -1,31 +1,24 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import { LitElement } from "lit";
|
|
3
3
|
import { state } from "lit/decorators.js";
|
|
4
|
-
import { ConductorAppProxy, flattenCells, AgentIdMap, CellAddress } from "@ddd-qc/cell-proxy";
|
|
4
|
+
import { ConductorAppProxy, flattenCells, AgentIdMap, CellAddress, } from "@ddd-qc/cell-proxy";
|
|
5
5
|
import { HappViewModel } from "./HappViewModel";
|
|
6
|
-
import { HoloHash } from "@holochain/client";
|
|
7
|
-
/**
|
|
8
|
-
*
|
|
9
|
-
*/
|
|
10
6
|
export class HappElement extends LitElement {
|
|
11
|
-
/** Ctor */
|
|
12
7
|
constructor(port_or_socket, appId, adminUrl, defaultTimeout) {
|
|
13
8
|
super();
|
|
14
|
-
|
|
9
|
+
this.constructHvm(port_or_socket, appId, adminUrl, defaultTimeout);
|
|
15
10
|
}
|
|
16
|
-
/** */
|
|
17
11
|
async hvmConstructed() { }
|
|
18
|
-
/** */
|
|
19
12
|
async perspectiveInitializedOffline() { }
|
|
20
|
-
/** */
|
|
21
13
|
async perspectiveInitializedOnline() { }
|
|
22
|
-
|
|
14
|
+
shouldUpdate() {
|
|
15
|
+
return !!this.hvm;
|
|
16
|
+
}
|
|
23
17
|
async constructHvm(port_or_socket, appId, adminUrl, defaultTimeout) {
|
|
24
18
|
const hvmDef = this.constructor.HVM_DEF;
|
|
25
19
|
if (!hvmDef) {
|
|
26
20
|
throw Error("HVM_DEF static field undefined in HappElement subclass " + this.constructor.name);
|
|
27
21
|
}
|
|
28
|
-
/** Override appId */
|
|
29
22
|
if (appId) {
|
|
30
23
|
hvmDef.id = appId;
|
|
31
24
|
}
|
|
@@ -35,33 +28,19 @@ export class HappElement extends LitElement {
|
|
|
35
28
|
await this.hvmConstructed();
|
|
36
29
|
await this.initializePerspective();
|
|
37
30
|
}
|
|
38
|
-
/** */
|
|
39
31
|
async initializePerspective() {
|
|
40
32
|
await this.hvm.initializePerspectiveOffline();
|
|
41
33
|
await this.perspectiveInitializedOffline();
|
|
42
|
-
// TODO move this to a later stage
|
|
43
34
|
await this.hvm.initializePerspectiveOnline();
|
|
44
35
|
await this.perspectiveInitializedOnline();
|
|
45
36
|
}
|
|
46
|
-
// /** */
|
|
47
|
-
// async networkInfoCell(hcl: HCL): Promise<NetworkInfo> {
|
|
48
|
-
// const dvm = this.hvm.getDvm(hcl);
|
|
49
|
-
// if (!dvm) {
|
|
50
|
-
// return Promise.reject("No DNA found at given HCL: " + hcl.toString());
|
|
51
|
-
// }
|
|
52
|
-
// const netInfoMap = await this.appProxy.networkInfo({dnas: [dvm.cell.dnaId.hash]});
|
|
53
|
-
// return netInfoMap[dvm.cell.dnaId][1];
|
|
54
|
-
// }
|
|
55
|
-
/** */
|
|
56
37
|
async networkInfoAll(baseRoleName) {
|
|
57
38
|
console.log(`networkInfoAll() "${baseRoleName}"`);
|
|
58
|
-
/** Grab cellMap */
|
|
59
39
|
const hvmDef = this.constructor.HVM_DEF;
|
|
60
40
|
const cellMap = this.appProxy.getAppCells(hvmDef.id);
|
|
61
41
|
if (!cellMap) {
|
|
62
42
|
return Promise.reject("No cells found at given appId: " + hvmDef.id);
|
|
63
43
|
}
|
|
64
|
-
/** Get cell Ids */
|
|
65
44
|
let cellAddrs = [];
|
|
66
45
|
if (baseRoleName) {
|
|
67
46
|
const cfr = cellMap[baseRoleName];
|
|
@@ -76,7 +55,6 @@ export class HappElement extends LitElement {
|
|
|
76
55
|
}
|
|
77
56
|
}
|
|
78
57
|
console.log(`networkInfoAll() cellIds`, cellAddrs.map(cellId => cellId.str));
|
|
79
|
-
/* Sort by agent key */
|
|
80
58
|
let dnaPerAgentMap = new AgentIdMap();
|
|
81
59
|
for (const cellAddr of cellAddrs) {
|
|
82
60
|
if (!dnaPerAgentMap.get(cellAddr.agentId)) {
|
|
@@ -85,35 +63,30 @@ export class HappElement extends LitElement {
|
|
|
85
63
|
dnaPerAgentMap.get(cellAddr.agentId).push(cellAddr.dnaId);
|
|
86
64
|
}
|
|
87
65
|
console.log(`networkInfoAll() dnaMap`, dnaPerAgentMap);
|
|
88
|
-
/** Call NetworkInfo per AgentId */
|
|
89
66
|
const allNetInfos = {};
|
|
90
67
|
for (const [agent, dnaIds] of dnaPerAgentMap.entries()) {
|
|
91
|
-
const netInfos = await this.appProxy.networkInfo({ dnas: dnaIds.map((dna) =>
|
|
68
|
+
const netInfos = await this.appProxy.networkInfo({ dnas: dnaIds.map((dna) => dna.hash) });
|
|
92
69
|
let i = 0;
|
|
93
70
|
for (const netInfo of netInfos) {
|
|
94
71
|
const idStr = new CellAddress(dnaIds[i], agent).str;
|
|
95
|
-
allNetInfos[idStr] = netInfo;
|
|
72
|
+
allNetInfos[idStr] = [Date.now(), netInfo];
|
|
96
73
|
i += 1;
|
|
97
74
|
}
|
|
98
75
|
}
|
|
99
|
-
/* Done */
|
|
100
76
|
return allNetInfos;
|
|
101
77
|
}
|
|
102
|
-
/** */
|
|
103
78
|
dumpLastestNetworkInfo(baseRoleName) {
|
|
104
79
|
console.log(`dumpLastestNetworkInfo() "${baseRoleName}"`);
|
|
105
|
-
/** Grab cellMap */
|
|
106
80
|
const hvmDef = this.constructor.HVM_DEF;
|
|
107
81
|
const cellMap = this.appProxy.getAppCells(hvmDef.id);
|
|
108
82
|
if (!cellMap) {
|
|
109
83
|
throw Error("No cells found at given appId: " + hvmDef.id);
|
|
110
84
|
}
|
|
111
|
-
/** Get cell Ids */
|
|
112
85
|
let cellAddrs = [];
|
|
113
86
|
if (baseRoleName) {
|
|
114
87
|
const cfr = cellMap[baseRoleName];
|
|
115
88
|
if (!cfr) {
|
|
116
|
-
|
|
89
|
+
throw Promise.reject("No cells found at given baseRoleName: " + baseRoleName);
|
|
117
90
|
}
|
|
118
91
|
cellAddrs = flattenCells(cfr);
|
|
119
92
|
}
|
|
@@ -124,7 +97,7 @@ export class HappElement extends LitElement {
|
|
|
124
97
|
}
|
|
125
98
|
let logs = cellAddrs.map((cellAddr) => {
|
|
126
99
|
const logs = this.appProxy.networkInfoLogs[cellAddr.str];
|
|
127
|
-
if (logs.length === 0) {
|
|
100
|
+
if (!logs || logs.length === 0) {
|
|
128
101
|
return;
|
|
129
102
|
}
|
|
130
103
|
const [ts, info] = logs[logs.length - 1];
|
|
@@ -146,7 +119,6 @@ export class HappElement extends LitElement {
|
|
|
146
119
|
});
|
|
147
120
|
console.table(logs);
|
|
148
121
|
}
|
|
149
|
-
/* */
|
|
150
122
|
dumpNetworkInfoLogs(cellIdStr) {
|
|
151
123
|
console.log(`dumpNetworkInfoLogs() "${cellIdStr}"`);
|
|
152
124
|
let logMap = this.appProxy.networkInfoLogs;
|
|
@@ -175,14 +147,9 @@ export class HappElement extends LitElement {
|
|
|
175
147
|
console.table(logs);
|
|
176
148
|
}
|
|
177
149
|
}
|
|
178
|
-
/** */
|
|
179
150
|
async createClone(baseRoleName, cellDef) {
|
|
180
151
|
return this.hvm.cloneDvm(baseRoleName, cellDef);
|
|
181
152
|
}
|
|
182
|
-
/** */
|
|
183
|
-
shouldUpdate() {
|
|
184
|
-
return !!this.hvm;
|
|
185
|
-
}
|
|
186
153
|
}
|
|
187
154
|
__decorate([
|
|
188
155
|
state()
|