@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.
Files changed (65) hide show
  1. package/dist/DnaElement.d.ts +2 -14
  2. package/dist/DnaElement.d.ts.map +1 -0
  3. package/dist/DnaElement.js +2 -18
  4. package/dist/DnaElement.js.map +1 -1
  5. package/dist/DnaViewModel.d.ts +2 -24
  6. package/dist/DnaViewModel.d.ts.map +1 -0
  7. package/dist/DnaViewModel.js +5 -40
  8. package/dist/DnaViewModel.js.map +1 -1
  9. package/dist/HappElement.d.ts +3 -17
  10. package/dist/HappElement.d.ts.map +1 -0
  11. package/dist/HappElement.js +9 -42
  12. package/dist/HappElement.js.map +1 -1
  13. package/dist/HappViewModel.d.ts +1 -24
  14. package/dist/HappViewModel.d.ts.map +1 -0
  15. package/dist/HappViewModel.js +9 -52
  16. package/dist/HappViewModel.js.map +1 -1
  17. package/dist/ViewModel.d.ts +1 -29
  18. package/dist/ViewModel.d.ts.map +1 -0
  19. package/dist/ViewModel.js +0 -36
  20. package/dist/ViewModel.js.map +1 -1
  21. package/dist/ZomeElement.d.ts +2 -9
  22. package/dist/ZomeElement.d.ts.map +1 -0
  23. package/dist/ZomeElement.js +2 -18
  24. package/dist/ZomeElement.js.map +1 -1
  25. package/dist/ZomeViewModel.d.ts +1 -15
  26. package/dist/ZomeViewModel.d.ts.map +1 -0
  27. package/dist/ZomeViewModel.js +0 -20
  28. package/dist/ZomeViewModel.js.map +1 -1
  29. package/dist/ZomeViewModelWithSignals.d.ts +1 -19
  30. package/dist/ZomeViewModelWithSignals.d.ts.map +1 -0
  31. package/dist/ZomeViewModelWithSignals.js +9 -39
  32. package/dist/ZomeViewModelWithSignals.js.map +1 -1
  33. package/dist/definitions.d.ts +1 -1
  34. package/dist/definitions.d.ts.map +1 -0
  35. package/dist/definitions.js +0 -19
  36. package/dist/definitions.js.map +1 -1
  37. package/dist/elements/cell-context.d.ts +1 -6
  38. package/dist/elements/cell-context.d.ts.map +1 -0
  39. package/dist/elements/cell-context.js +1 -14
  40. package/dist/elements/cell-context.js.map +1 -1
  41. package/dist/elements/dvm-inspect.d.ts +2 -10
  42. package/dist/elements/dvm-inspect.d.ts.map +1 -0
  43. package/dist/elements/dvm-inspect.js +2 -17
  44. package/dist/elements/dvm-inspect.js.map +1 -1
  45. package/dist/elements/entry-def-select.d.ts +3 -10
  46. package/dist/elements/entry-def-select.d.ts.map +1 -0
  47. package/dist/elements/entry-def-select.js +2 -19
  48. package/dist/elements/entry-def-select.js.map +1 -1
  49. package/dist/elements/view-cell-context.d.ts +1 -4
  50. package/dist/elements/view-cell-context.d.ts.map +1 -0
  51. package/dist/elements/view-cell-context.js +0 -4
  52. package/dist/elements/view-cell-context.js.map +1 -1
  53. package/dist/globals.d.ts +1 -4
  54. package/dist/globals.d.ts.map +1 -0
  55. package/dist/globals.js +1 -20
  56. package/dist/globals.js.map +1 -1
  57. package/dist/index.d.ts +1 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +0 -1
  60. package/dist/index.js.map +1 -1
  61. package/dist/roleMixin.d.ts +1 -10
  62. package/dist/roleMixin.d.ts.map +1 -0
  63. package/dist/roleMixin.js +2 -12
  64. package/dist/roleMixin.js.map +1 -1
  65. package/package.json +2 -2
@@ -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"}
@@ -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, dispose) => {
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);
@@ -1 +1 @@
1
- {"version":3,"file":"DnaElement.js","sourceRoot":"","sources":["../src/DnaElement.ts"],"names":[],"mappings":"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","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 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 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 willUpdate(changedProperties: PropertyValues<this>) {\n if (changedProperties.has(\"_cell_via_context\")) {\n this.requestDvm(true);\n }\n }\n}\n"]}
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"]}
@@ -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"}
@@ -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); // WARN can throw error
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); // TODO move this to host.connectedCallback? e.g. change ViewModel to a ReactiveController
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
- /** -- Methods -- */
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); // TODO optimize
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) {
@@ -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"]}
@@ -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"}
@@ -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
- /* await */ this.constructHvm(port_or_socket, appId, adminUrl, defaultTimeout);
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) => new HoloHash(dna.hash)) });
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
- return Promise.reject("No cells found at given baseRoleName: " + baseRoleName);
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()