@ddd-qc/cell-proxy 0.23.1 → 0.24.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.
@@ -1,8 +1,10 @@
1
- import { AppApi, AppInfoRequest, AppInfoResponse, AppSignal, AppSignalCb, CallZomeRequest, CellId, InstalledAppId, CreateCloneCellRequest, DisableCloneCellRequest, EnableCloneCellRequest, ClonedCell, Timestamp, DnaHashB64, NetworkInfo, AgentPubKeyB64 } from "@holochain/client";
1
+ import { AppInfoResponse, AppSignal, AppSignalCb, CallZomeRequest, CellId, InstalledAppId, CreateCloneCellRequest, DisableCloneCellRequest, EnableCloneCellRequest, ClonedCell, Timestamp, NetworkInfo, AppClient, AppNetworkInfoRequest, NetworkInfoResponse, AppEvents, AdminWebsocket } from "@holochain/client";
2
+ import { UnsubscribeFunction } from "emittery";
2
3
  import { CellProxy } from "./CellProxy";
3
4
  import { CellIdStr, RoleCellsMap, BaseRoleName, CellsForRole } from "./types";
4
5
  import { HCL, HCLString } from "./hcl";
5
6
  import { Cell } from "./cell";
7
+ import { AgentPubKey } from "@holochain/client/lib/types";
6
8
  /** */
7
9
  export interface SignalUnsubscriber {
8
10
  unsubscribe: () => void;
@@ -14,9 +16,10 @@ export interface SignalUnsubscriber {
14
16
  * Stores appSignal logs
15
17
  * TODO Implement Singleton per App port?
16
18
  */
17
- export declare class AppProxy implements AppApi {
18
- defaultTimeout: number;
19
+ export declare class AppProxy implements AppClient {
19
20
  /** -- Fields -- */
21
+ defaultTimeout: number;
22
+ adminWs?: AdminWebsocket;
20
23
  /** Signal log: [Timestamp, CellIdStr, Signal, isSystem] */
21
24
  private _signalLogs;
22
25
  /** Map cells per App: InstalledAppId -> (BaseRoleName -> CellsForRole) */
@@ -47,20 +50,22 @@ export declare class AppProxy implements AppApi {
47
50
  getAppRoles(installedAppId: InstalledAppId): BaseRoleName[] | undefined;
48
51
  /** */
49
52
  getClones(appId: InstalledAppId, baseRoleName: BaseRoleName): ClonedCell[];
53
+ /** -- AppClient -- */
54
+ myPubKey: AgentPubKey;
55
+ installedAppId: InstalledAppId;
56
+ callZome(req: CallZomeRequest, timeout?: number): Promise<unknown>;
57
+ on<Name extends keyof AppEvents>(eventName: Name | readonly Name[], listener: AppSignalCb): UnsubscribeFunction;
58
+ appInfo(): Promise<AppInfoResponse>;
50
59
  createCloneCell(request: CreateCloneCellRequest): Promise<ClonedCell>;
51
- /** -- AppApi -- */
52
60
  enableCloneCell(request: EnableCloneCellRequest): Promise<ClonedCell>;
53
61
  disableCloneCell(request: DisableCloneCellRequest): Promise<void>;
54
- appInfo(args: AppInfoRequest): Promise<AppInfoResponse>;
55
- callZome(req: CallZomeRequest, timeout?: number): Promise<unknown>;
62
+ networkInfo(args: AppNetworkInfoRequest): Promise<NetworkInfoResponse>;
56
63
  /** -- Creation -- */
57
64
  /** Ctor */
58
- constructor(defaultTimeout: number);
65
+ constructor(defaultTimeout: number, adminWs?: AdminWebsocket);
59
66
  /** -- Methods -- */
60
67
  get networkInfoLogs(): Record<CellIdStr, [Timestamp, NetworkInfo][]>;
61
68
  /** */
62
- networkInfo(agent: AgentPubKeyB64, dnas: DnaHashB64[]): Promise<Record<DnaHashB64, [Timestamp, NetworkInfo]>>;
63
- /** */
64
69
  fetchCell(appId: InstalledAppId, cellId: CellId): Promise<Cell>;
65
70
  /** Get all cells for a BaseRole in an app */
66
71
  fetchCells(appId: InstalledAppId, baseRoleName: BaseRoleName): Promise<CellsForRole>;
@@ -83,22 +88,22 @@ export declare class AppProxy implements AppApi {
83
88
  /** Protocol for notifying the ViewModel (UI) of system level events */
84
89
  export type SystemSignalProtocolVariantPostCommitStart = {
85
90
  type: "PostCommitStart";
86
- entryType: string;
91
+ entry_type: string;
87
92
  };
88
93
  export type SystemSignalProtocolVariantPostCommitEnd = {
89
94
  type: "PostCommitEnd";
90
- entryType: string;
95
+ entry_type: string;
91
96
  succeeded: boolean;
92
97
  };
93
98
  export type SystemSignalProtocolVariantSelfCallStart = {
94
99
  type: "SelfCallStart";
95
- zomeName: string;
100
+ zome_name: string;
96
101
  fnName: string;
97
102
  };
98
103
  export type SystemSignalProtocolVariantSelfCallEnd = {
99
104
  type: "SelfCallEnd";
100
- zomeName: string;
101
- fnName: string;
105
+ zome_name: string;
106
+ fn_name: string;
102
107
  succeeded: boolean;
103
108
  };
104
109
  export type SystemSignalProtocol = SystemSignalProtocolVariantPostCommitStart | SystemSignalProtocolVariantPostCommitEnd | SystemSignalProtocolVariantSelfCallStart | SystemSignalProtocolVariantSelfCallEnd;
package/dist/AppProxy.js CHANGED
@@ -76,27 +76,30 @@ export class AppProxy {
76
76
  return [];
77
77
  return Object.values(roleInstalledCells.clones);
78
78
  }
79
+ async callZome(req, timeout) {
80
+ throw new Error("Method not implemented.");
81
+ }
82
+ on(eventName, listener) {
83
+ throw new Error("Method not implemented.");
84
+ }
85
+ async appInfo() {
86
+ throw new Error("Method not implemented.");
87
+ }
79
88
  async createCloneCell(request) {
80
89
  throw new Error("Method not implemented.");
81
90
  }
82
- /** -- AppApi -- */
83
91
  async enableCloneCell(request) {
84
92
  throw new Error("Method not implemented.");
85
93
  }
86
94
  async disableCloneCell(request) {
87
95
  throw new Error("Method not implemented.");
88
96
  }
89
- async appInfo(args) {
90
- throw new Error("Method not implemented.");
91
- }
92
- async callZome(req, timeout) {
97
+ networkInfo(args) {
93
98
  throw new Error("Method not implemented.");
94
99
  }
95
100
  /** -- Creation -- */
96
101
  /** Ctor */
97
- /*protected*/ constructor(defaultTimeout) {
98
- this.defaultTimeout = defaultTimeout;
99
- /** -- Fields -- */
102
+ /*protected*/ constructor(defaultTimeout, adminWs) {
100
103
  /** Signal log: [Timestamp, CellIdStr, Signal, isSystem] */
101
104
  this._signalLogs = [];
102
105
  /** Map cells per App: InstalledAppId -> (BaseRoleName -> CellsForRole) */
@@ -109,17 +112,15 @@ export class AppProxy {
109
112
  this._cellProxies = {};
110
113
  /** Map HCLString: CloneId -> CloneName */
111
114
  this._cellNames = {}; // Provisioned cell's name is its baseRoleName so no need to map them
115
+ this.defaultTimeout = defaultTimeout;
116
+ this.adminWs = adminWs;
112
117
  /*const _unsub =*/ this.addSignalHandler((sig) => this.logSignal(sig));
113
118
  }
114
119
  /** -- Methods -- */
115
120
  get networkInfoLogs() { return {}; }
116
121
  /** */
117
- async networkInfo(agent, dnas) {
118
- throw new Error("Method not implemented.");
119
- }
120
- /** */
121
122
  async fetchCell(appId, cellId) {
122
- const appInfo = await this.appInfo({ installed_app_id: appId });
123
+ const appInfo = await this.appInfo();
123
124
  //console.log("fetchCell", appInfo);
124
125
  if (appInfo == null) {
125
126
  return Promise.reject(`getCell() failed. App "${appId}" not found"`);
@@ -144,7 +145,7 @@ export class AppProxy {
144
145
  /** Get all cells for a BaseRole in an app */
145
146
  async fetchCells(appId, baseRoleName) {
146
147
  /** Make sure hApp exists */
147
- const appInfo = await this.appInfo({ installed_app_id: appId });
148
+ const appInfo = await this.appInfo();
148
149
  if (appInfo == null) {
149
150
  return Promise.reject(`fetchCells() failed. App "${appId}" not found`);
150
151
  }
@@ -274,7 +275,7 @@ export class AppProxy {
274
275
  /** Log all signals received */
275
276
  logSignal(signal) {
276
277
  const isSystem = this.isSystemSignal(signal);
277
- console.log("signal logged", signal, isSystem);
278
+ //console.log("signal logged", signal, isSystem)
278
279
  this._signalLogs.push([Date.now(), CellIdStr(signal.cell_id), signal, isSystem]);
279
280
  }
280
281
  /** */
@@ -1 +1 @@
1
- {"version":3,"file":"AppProxy.js","sourceRoot":"","sources":["../src/AppProxy.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AppApi,\n AppInfoRequest,\n AppInfoResponse,\n AppSignal,\n AppSignalCb,\n CallZomeRequest,\n CellId,\n InstalledAppId,\n CreateCloneCellRequest,\n DisableCloneCellRequest,\n EnableCloneCellRequest,\n ClonedCell,\n CellType,\n ProvisionedCell,\n encodeHashToBase64, Timestamp, DnaHashB64, NetworkInfo, decodeHashFromBase64, AgentPubKeyB64,\n} from \"@holochain/client\";\nimport { CellProxy } from \"./CellProxy\";\nimport {CellIdStr, RoleCellsMap, BaseRoleName, CellsForRole} from \"./types\";\nimport {areCellsEqual, Dictionary, prettyDate, printAppInfo} from \"./utils\";\nimport {HCL, HCLString} from \"./hcl\";\nimport {Cell} from \"./cell\";\n\n\n/** */\nexport interface SignalUnsubscriber {\n unsubscribe: () => void;\n}\n\n\n/**\n * Creates and holds Cell proxies.\n * Maintains a mapping between CellIds and HCLs\n * Handles SignalHandlers per HCL\n * Stores appSignal logs\n * TODO Implement Singleton per App port?\n */\nexport class AppProxy implements AppApi {\n\n /** -- Fields -- */\n\n /** Signal log: [Timestamp, CellIdStr, Signal, isSystem] */\n private _signalLogs: [Timestamp, CellIdStr, AppSignal, Boolean][] = [];\n /** Map cells per App: InstalledAppId -> (BaseRoleName -> CellsForRole) */\n private _cellsByApp: Dictionary<RoleCellsMap> = {};\n /** Map cell locations: CellIdStr -> HCL[] */\n private _hclMap: Dictionary<HCL[]> = {};\n /** Store handlers per cell location: HCLString -> AppSignalCb[] */\n private _signalHandlers: Dictionary<AppSignalCb[]> = {};\n /** Store cell proxies per cell: CellIdStr -> CellProxy */\n private _cellProxies: Dictionary<CellProxy> = {};\n\n\n /** Map HCLString: CloneId -> CloneName */\n private _cellNames: Dictionary<string> = {} // Provisioned cell's name is its baseRoleName so no need to map them\n\n /** -- Getters -- */\n\n /** Check this after connecting since AppWebsocket can shamelessly override the provided args. */\n get appIdOfShame(): InstalledAppId | undefined { return undefined }\n\n /** */\n getAppCells(appId: InstalledAppId): RoleCellsMap | undefined {\n return this._cellsByApp[appId];\n }\n\n /** */\n getCellName(hcl: HCL): string {return this._cellNames[hcl.toString()]}\n\n\n get signalLogs(): [Timestamp, CellIdStr, AppSignal, Boolean][] { return this._signalLogs }\n\n /** */\n getLocations(cellId: CellId): HCL[] | undefined {\n return this._hclMap[CellIdStr(cellId)];\n }\n\n /** */\n getCell(hcl: HCL): Cell {\n const roleCellsMap = this._cellsByApp[hcl.appId];\n if (!roleCellsMap) throw Error(`getCell() failed. No hApp with ID \"${hcl.appId}\" found.`);\n const roleCells = roleCellsMap[hcl.baseRoleName];\n if (!roleCells) throw Error(`getCell() failed: BaseRoleName \"${hcl.baseRoleName}\" not found in happ \"${hcl.appId}\"`);\n let cell = roleCells.provisioned;\n if (hcl.cloneId !== undefined) {\n cell = roleCells.clones[hcl.cloneId];\n if (!cell) {\n throw Error(`getCell() failed: clone \"${hcl.cloneId}\" not found for role \"${hcl.toString()}\"`);\n }\n }\n return new Cell(cell, hcl.appId, hcl.baseRoleName);\n }\n\n\n /** Get stored CellProxy or attempt to create it */\n getCellProxy(cellIdOrLoc: HCL | CellId): CellProxy {\n if (cellIdOrLoc instanceof HCL) {\n const cell = this.getCell(cellIdOrLoc);\n const maybeProxy = this.getCellProxy(cell.id);\n if (!maybeProxy) throw Error(\"getCellProxy() failed. Proxy not found for cell \" + CellIdStr(cell.id));\n return maybeProxy;\n }\n const sId = CellIdStr(cellIdOrLoc);\n const maybeProxy = this._cellProxies[sId];\n if (maybeProxy === undefined) throw Error(\"getCellProxy() failed. Proxy not found for cell \" + sId);\n return maybeProxy;\n }\n\n\n /** */\n getAppRoles(installedAppId: InstalledAppId): BaseRoleName[] | undefined {\n if (!this._cellsByApp[installedAppId]) return undefined;\n return Object.values(this._cellsByApp[installedAppId]).map((roleCells) => {\n return roleCells.provisioned.name;\n });\n }\n\n\n /** */\n getClones(appId: InstalledAppId, baseRoleName: BaseRoleName): ClonedCell[] {\n const maybeApp = this._cellsByApp[appId]\n if (!maybeApp) return [];\n const roleInstalledCells = maybeApp[baseRoleName];\n if (!roleInstalledCells) return [];\n return Object.values(roleInstalledCells.clones);\n }\n\n\n\n async createCloneCell(request: CreateCloneCellRequest): Promise<ClonedCell> {\n throw new Error(\"Method not implemented.\");\n }\n\n /** -- AppApi -- */\n\n async enableCloneCell(request: EnableCloneCellRequest): Promise<ClonedCell> {\n throw new Error(\"Method not implemented.\");\n }\n\n async disableCloneCell(request: DisableCloneCellRequest): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n async appInfo(args: AppInfoRequest): Promise<AppInfoResponse> {\n throw new Error(\"Method not implemented.\");\n }\n\n async callZome(req: CallZomeRequest, timeout?: number): Promise<unknown> {\n throw new Error(\"Method not implemented.\");\n }\n\n\n /** -- Creation -- */\n\n /** Ctor */\n /*protected*/ constructor(public defaultTimeout: number) {\n /*const _unsub =*/ this.addSignalHandler((sig) => this.logSignal(sig));\n }\n\n\n /** -- Methods -- */\n\n get networkInfoLogs(): Record<CellIdStr, [Timestamp, NetworkInfo][]> {return {}}\n\n /** */\n async networkInfo(agent: AgentPubKeyB64, dnas: DnaHashB64[]): Promise<Record<DnaHashB64, [Timestamp, NetworkInfo]>> {\n throw new Error(\"Method not implemented.\");\n }\n\n /** */\n async fetchCell(appId: InstalledAppId, cellId: CellId): Promise<Cell> {\n const appInfo = await this.appInfo({installed_app_id: appId});\n //console.log(\"fetchCell\", appInfo);\n if (appInfo == null) {\n return Promise.reject(`getCell() failed. App \"${appId}\" not found\"`);\n }\n for (const cellInfos of Object.values(appInfo.cell_info)) {\n for (const [baseRoleName, cellInfo] of Object.entries(cellInfos)) {\n let cell: Cell;\n try {\n cell = Cell.from(cellInfo, appId, baseRoleName);\n } catch(e) {\n // skip stem cell\n continue;\n }\n if (areCellsEqual(cell.id, cellId)) {\n return cell;\n }\n }\n }\n return Promise.reject(\"getCell() failed. Cell not found for app.\");\n }\n\n\n /** Get all cells for a BaseRole in an app */\n async fetchCells(appId: InstalledAppId, baseRoleName: BaseRoleName): Promise<CellsForRole> {\n /** Make sure hApp exists */\n const appInfo = await this.appInfo({installed_app_id: appId});\n if (appInfo == null) {\n return Promise.reject(`fetchCells() failed. App \"${appId}\" not found`);\n }\n console.log(\"fetchCells() installedAppInfo:\\n\", printAppInfo(appInfo));\n\n /** Make sure app Object exists */\n if (!this._cellsByApp[appId]) {\n this._cellsByApp[appId] = {};\n }\n /** Get all cells with that baseRoleName */\n let provisioned: ProvisionedCell | undefined;\n let clones: Dictionary<ClonedCell> = {};\n for (const [curBaseRoleName, cellInfos] of Object.entries(appInfo.cell_info)) {\n for (const cellInfo of Object.values(cellInfos)) {\n if (baseRoleName !== curBaseRoleName || CellType.Stem in cellInfo) {\n continue;\n }\n if (CellType.Cloned in cellInfo) {\n if (clones[cellInfo.cloned.clone_id]) {\n console.error(`fetchCells() Entry already exist for clone: \"${cellInfo.cloned.clone_id}\"`)\n }\n clones[cellInfo.cloned.clone_id] = cellInfo.cloned;\n } else {\n provisioned = cellInfo.provisioned;\n }\n }\n }\n if (typeof provisioned === 'undefined') {\n return Promise.reject(\"Provisioned cell not found for role \" + baseRoleName);\n }\n let roleInstalledCells: CellsForRole = {provisioned: provisioned!, clones}\n /** Store it*/\n this._cellsByApp[appId][baseRoleName] = roleInstalledCells;\n return roleInstalledCells;\n }\n\n\n /** */\n addClone(hcl: HCL, cloneCell: ClonedCell): void {\n if (!this._cellsByApp[hcl.appId]) throw Error(\"addClone() failed. no appId. \" + hcl.toString());\n if (!this._cellsByApp[hcl.appId][hcl.baseRoleName]) throw Error(\"addClone() failed. no baseRoleName. \" + hcl.toString());\n if (hcl.cloneId === undefined) throw Error(\"addClone() failed. Cell is not a CloneCell: \" + hcl.toString());\n\n // let cloneName = hcl.cloneId;\n // if (hcl.cloneId === undefined) {\n // const cloneIndex: number = Object.keys(this._cellsByApp[hcl.appId][hcl.baseRoleName].clones).length;\n // cloneName = createCloneName(hcl.baseRoleName, cloneIndex);\n // }\n this._cellsByApp[hcl.appId][hcl.baseRoleName].clones[cloneCell.clone_id] = cloneCell;\n // const sCellId = CellIdStr(cloneCell.cell_id);\n // console.log(\"CreateCellProxy() adding to hclMap\", sCellId, cellLoc.asHcl())\n // if (this._hclMap[sCellId]) {\n // this._hclMap[sCellId].push(cellLoc.asHcl());\n // } else {\n // this._hclMap[sCellId] = [cellLoc.asHcl()];\n // }\n }\n\n\n /** */\n createCellProxy(hcl: HCL, cloneName?: string): CellProxy {\n console.log(\"createCellProxy() for\", hcl.toString(), cloneName);\n /** Make sure cell exists */\n const cell = this.getCell(hcl);\n const sCellId = CellIdStr(cell.id);\n /** Create proxy for this cell if none exist yet, otherwise reuse */\n let cellProxy = this._cellProxies[sCellId];\n if (!cellProxy) {\n /** Create and store Proxy */\n cellProxy = new CellProxy(this, cell, this.defaultTimeout);\n this._cellProxies[sCellId] = cellProxy;\n }\n /** Create CellId -> HCL mapping */\n //console.log(\"CreateCellProxy() adding to hclMap\", sCellId, hcl.toString())\n if (this._hclMap[sCellId]) {\n this._hclMap[sCellId].push(hcl);\n } else {\n this._hclMap[sCellId] = [hcl];\n }\n //console.log(\"createCellProxy() Currently stored hclMap:\", this._hclMap);\n /** Associate cloneName if any */\n const name = cloneName? cloneName : hcl.baseRoleName;\n this._cellNames[hcl.toString()] = name;\n /** Done */\n return cellProxy;\n }\n\n\n /** */\n onSignal(signal: AppSignal): void {\n /** Grab cell specific handlers */\n const hcls = this.getLocations(signal.cell_id);\n const handlerss: AppSignalCb[][] = hcls? hcls.map((hcl) => this._signalHandlers[hcl.toString()]) : [];\n //console.log(\"onSignal()\", hcls? hcls.toString() : \"unknown cell: \" + encodeHashToBase64(signal.cell_id[0]), handlerss);\n /** Grab common handler */\n const allHandlers = this._signalHandlers[\"__all\"];\n if (allHandlers) handlerss.push(allHandlers);\n /** Send to all handlers */\n for (const handlers of handlerss) {\n for (const handler of handlers) {\n handler(signal);\n }\n }\n }\n\n\n /** Store signalHandler to internal handler array */\n addSignalHandler(handler: AppSignalCb, hcl?: HCLString): SignalUnsubscriber {\n //console.log(\"addSignalHandler()\", hcl);\n\n hcl = hcl? hcl: \"__all\";\n //console.log(\"addSignalHandler()\", hcl, Object.keys(this._signalHandlers));\n if (!this._signalHandlers[hcl]) {\n this._signalHandlers[hcl] = [handler];\n } else {\n this._signalHandlers[hcl].push(handler);\n }\n /* return tailored unsubscribe function to the caller */\n return {\n unsubscribe: () => {\n // FIXME\n // const maybeHandler = this._signalHandlers[hcl!]\n // if (!maybeHandler) {\n // console.warn(\"unsubscribe failed: Couldn't find signalHandler for\", hcl)\n // return;\n // }\n // delete this._signalHandlers[hcl!];\n }\n };\n }\n\n /** Log all signals received */\n protected logSignal(signal: AppSignal): void {\n const isSystem = this.isSystemSignal(signal);\n console.log(\"signal logged\", signal, isSystem)\n this._signalLogs.push([Date.now(), CellIdStr(signal.cell_id), signal, isSystem])\n }\n\n\n /** */\n isSystemSignal(signal: AppSignal): Boolean {\n return typeof signal.payload === 'object' && !Array.isArray(signal.payload) && signal.payload !== null && \"System\" in (signal.payload as Object);\n }\n\n\n /** */\n dumpSignals(cellId?: CellId) {\n if (cellId) {\n const cellStr = CellIdStr(cellId);\n const hcls = this._hclMap[cellStr];\n const names = hcls.map((hcl) => this.getCellName(hcl));\n console.warn(`Dumping App signal logs for cell \"${names}\"`);\n const logs = this._signalLogs\n .filter((log) => log[1] == cellStr)\n .filter((log) => !log[3])\n .map((log) => {\n return { timestamp: prettyDate(new Date(log[0])), zome: log[2].zome_name, payload: log[2].payload}\n });\n console.table(logs);\n console.warn(`Dumping System signal logs for cell \"${names}\"`);\n const syslogs = this._signalLogs\n .filter((log) => log[1] == cellStr)\n .filter((log) => log[3])\n .map((log) => {\n const payload = (log[2].payload as Object)[\"System\"];\n return { timestamp: prettyDate(new Date(log[0])), zome: log[2].zome_name, payload}\n });\n console.table(syslogs);\n } else {\n console.warn(\"Dumping all App signal logs\", )\n const logs = this._signalLogs\n .filter((log) => !log[3])\n .map((log) => {\n const app = this._hclMap[log[1]][0].appId\n const cell: string = this._hclMap[log[1]][0].roleName;\n return { timestamp: prettyDate(new Date(log[0])), app, cell, zome: log[2].zome_name, payload: log[2].payload };\n });\n console.table(logs);\n console.warn(\"Dumping all System signal logs\", )\n const syslogs = this._signalLogs\n .filter((log) => log[3])\n .map((log) => {\n const app = this._hclMap[log[1]][0].appId\n const cell: string = this._hclMap[log[1]][0].roleName;\n const payload = (log[2].payload as Object)[\"System\"];\n return { timestamp: prettyDate(new Date(log[0])), app, cell, zome: log[2].zome_name, payload };\n });\n console.table(syslogs);\n }\n }\n}\n\n\n/** WARN: must be up to date with Rust code */\n/** Protocol for notifying the ViewModel (UI) of system level events */\nexport type SystemSignalProtocolVariantPostCommitStart = {\n type: \"PostCommitStart\"\n entryType: string\n}\nexport type SystemSignalProtocolVariantPostCommitEnd = {\n type: \"PostCommitEnd\"\n entryType: string\n succeeded: boolean\n}\nexport type SystemSignalProtocolVariantSelfCallStart = {\n type: \"SelfCallStart\"\n zomeName: string\n fnName: string\n}\nexport type SystemSignalProtocolVariantSelfCallEnd = {\n type: \"SelfCallEnd\"\n zomeName: string\n fnName: string\n succeeded: boolean\n}\nexport type SystemSignalProtocol =\n | SystemSignalProtocolVariantPostCommitStart\n | SystemSignalProtocolVariantPostCommitEnd\n | SystemSignalProtocolVariantSelfCallStart\n | SystemSignalProtocolVariantSelfCallEnd;\n"]}
1
+ {"version":3,"file":"AppProxy.js","sourceRoot":"","sources":["../src/AppProxy.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AppInfoResponse,\n AppSignal,\n AppSignalCb,\n CallZomeRequest,\n CellId,\n InstalledAppId,\n CreateCloneCellRequest,\n DisableCloneCellRequest,\n EnableCloneCellRequest,\n ClonedCell,\n CellType,\n ProvisionedCell,\n Timestamp, NetworkInfo, AppClient, AppNetworkInfoRequest, NetworkInfoResponse, AppEvents, AdminWebsocket,\n} from \"@holochain/client\";\nimport { UnsubscribeFunction } from \"emittery\";\nimport { CellProxy } from \"./CellProxy\";\nimport {CellIdStr, RoleCellsMap, BaseRoleName, CellsForRole} from \"./types\";\nimport {areCellsEqual, Dictionary, prettyDate, printAppInfo} from \"./utils\";\nimport {HCL, HCLString} from \"./hcl\";\nimport {Cell} from \"./cell\";\nimport {AgentPubKey} from \"@holochain/client/lib/types\";\n\n\n/** */\nexport interface SignalUnsubscriber {\n unsubscribe: () => void;\n}\n\n\n/**\n * Creates and holds Cell proxies.\n * Maintains a mapping between CellIds and HCLs\n * Handles SignalHandlers per HCL\n * Stores appSignal logs\n * TODO Implement Singleton per App port?\n */\nexport class AppProxy implements AppClient {\n\n /** -- Fields -- */\n\n public defaultTimeout: number;\n public adminWs?: AdminWebsocket;\n\n /** Signal log: [Timestamp, CellIdStr, Signal, isSystem] */\n private _signalLogs: [Timestamp, CellIdStr, AppSignal, Boolean][] = [];\n /** Map cells per App: InstalledAppId -> (BaseRoleName -> CellsForRole) */\n private _cellsByApp: Dictionary<RoleCellsMap> = {};\n /** Map cell locations: CellIdStr -> HCL[] */\n private _hclMap: Dictionary<HCL[]> = {};\n /** Store handlers per cell location: HCLString -> AppSignalCb[] */\n private _signalHandlers: Dictionary<AppSignalCb[]> = {};\n /** Store cell proxies per cell: CellIdStr -> CellProxy */\n private _cellProxies: Dictionary<CellProxy> = {};\n\n\n /** Map HCLString: CloneId -> CloneName */\n private _cellNames: Dictionary<string> = {} // Provisioned cell's name is its baseRoleName so no need to map them\n\n /** -- Getters -- */\n\n /** Check this after connecting since AppWebsocket can shamelessly override the provided args. */\n get appIdOfShame(): InstalledAppId | undefined { return undefined }\n\n /** */\n getAppCells(appId: InstalledAppId): RoleCellsMap | undefined {\n return this._cellsByApp[appId];\n }\n\n /** */\n getCellName(hcl: HCL): string {return this._cellNames[hcl.toString()]}\n\n\n get signalLogs(): [Timestamp, CellIdStr, AppSignal, Boolean][] { return this._signalLogs }\n\n /** */\n getLocations(cellId: CellId): HCL[] | undefined {\n return this._hclMap[CellIdStr(cellId)];\n }\n\n /** */\n getCell(hcl: HCL): Cell {\n const roleCellsMap = this._cellsByApp[hcl.appId];\n if (!roleCellsMap) throw Error(`getCell() failed. No hApp with ID \"${hcl.appId}\" found.`);\n const roleCells = roleCellsMap[hcl.baseRoleName];\n if (!roleCells) throw Error(`getCell() failed: BaseRoleName \"${hcl.baseRoleName}\" not found in happ \"${hcl.appId}\"`);\n let cell = roleCells.provisioned;\n if (hcl.cloneId !== undefined) {\n cell = roleCells.clones[hcl.cloneId];\n if (!cell) {\n throw Error(`getCell() failed: clone \"${hcl.cloneId}\" not found for role \"${hcl.toString()}\"`);\n }\n }\n return new Cell(cell, hcl.appId, hcl.baseRoleName);\n }\n\n\n /** Get stored CellProxy or attempt to create it */\n getCellProxy(cellIdOrLoc: HCL | CellId): CellProxy {\n if (cellIdOrLoc instanceof HCL) {\n const cell = this.getCell(cellIdOrLoc);\n const maybeProxy = this.getCellProxy(cell.id);\n if (!maybeProxy) throw Error(\"getCellProxy() failed. Proxy not found for cell \" + CellIdStr(cell.id));\n return maybeProxy;\n }\n const sId = CellIdStr(cellIdOrLoc);\n const maybeProxy = this._cellProxies[sId];\n if (maybeProxy === undefined) throw Error(\"getCellProxy() failed. Proxy not found for cell \" + sId);\n return maybeProxy;\n }\n\n\n /** */\n getAppRoles(installedAppId: InstalledAppId): BaseRoleName[] | undefined {\n if (!this._cellsByApp[installedAppId]) return undefined;\n return Object.values(this._cellsByApp[installedAppId]).map((roleCells) => {\n return roleCells.provisioned.name;\n });\n }\n\n\n /** */\n getClones(appId: InstalledAppId, baseRoleName: BaseRoleName): ClonedCell[] {\n const maybeApp = this._cellsByApp[appId]\n if (!maybeApp) return [];\n const roleInstalledCells = maybeApp[baseRoleName];\n if (!roleInstalledCells) return [];\n return Object.values(roleInstalledCells.clones);\n }\n\n\n /** -- AppClient -- */\n\n myPubKey: AgentPubKey;\n installedAppId: InstalledAppId;\n\n async callZome(req: CallZomeRequest, timeout?: number): Promise<unknown> {\n throw new Error(\"Method not implemented.\");\n }\n\n on<Name extends keyof AppEvents>(\n eventName: Name | readonly Name[],\n listener: AppSignalCb\n ): UnsubscribeFunction {\n throw new Error(\"Method not implemented.\");\n }\n\n async appInfo(): Promise<AppInfoResponse> {\n throw new Error(\"Method not implemented.\");\n }\n\n async createCloneCell(request: CreateCloneCellRequest): Promise<ClonedCell> {\n throw new Error(\"Method not implemented.\");\n }\n\n async enableCloneCell(request: EnableCloneCellRequest): Promise<ClonedCell> {\n throw new Error(\"Method not implemented.\");\n }\n\n async disableCloneCell(request: DisableCloneCellRequest): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n networkInfo(args: AppNetworkInfoRequest): Promise<NetworkInfoResponse> {\n throw new Error(\"Method not implemented.\");\n }\n\n\n /** -- Creation -- */\n\n /** Ctor */\n /*protected*/ constructor(defaultTimeout: number, adminWs?: AdminWebsocket) {\n this.defaultTimeout = defaultTimeout;\n this.adminWs = adminWs;\n /*const _unsub =*/ this.addSignalHandler((sig) => this.logSignal(sig));\n }\n\n\n /** -- Methods -- */\n\n get networkInfoLogs(): Record<CellIdStr, [Timestamp, NetworkInfo][]> {return {}}\n\n /** */\n async fetchCell(appId: InstalledAppId, cellId: CellId): Promise<Cell> {\n const appInfo = await this.appInfo();\n //console.log(\"fetchCell\", appInfo);\n if (appInfo == null) {\n return Promise.reject(`getCell() failed. App \"${appId}\" not found\"`);\n }\n for (const cellInfos of Object.values(appInfo.cell_info)) {\n for (const [baseRoleName, cellInfo] of Object.entries(cellInfos)) {\n let cell: Cell;\n try {\n cell = Cell.from(cellInfo, appId, baseRoleName);\n } catch(e) {\n // skip stem cell\n continue;\n }\n if (areCellsEqual(cell.id, cellId)) {\n return cell;\n }\n }\n }\n return Promise.reject(\"getCell() failed. Cell not found for app.\");\n }\n\n\n /** Get all cells for a BaseRole in an app */\n async fetchCells(appId: InstalledAppId, baseRoleName: BaseRoleName): Promise<CellsForRole> {\n /** Make sure hApp exists */\n const appInfo = await this.appInfo();\n if (appInfo == null) {\n return Promise.reject(`fetchCells() failed. App \"${appId}\" not found`);\n }\n console.log(\"fetchCells() installedAppInfo:\\n\", printAppInfo(appInfo));\n\n /** Make sure app Object exists */\n if (!this._cellsByApp[appId]) {\n this._cellsByApp[appId] = {};\n }\n /** Get all cells with that baseRoleName */\n let provisioned: ProvisionedCell | undefined;\n let clones: Dictionary<ClonedCell> = {};\n for (const [curBaseRoleName, cellInfos] of Object.entries(appInfo.cell_info)) {\n for (const cellInfo of Object.values(cellInfos)) {\n if (baseRoleName !== curBaseRoleName || CellType.Stem in cellInfo) {\n continue;\n }\n if (CellType.Cloned in cellInfo) {\n if (clones[cellInfo.cloned.clone_id]) {\n console.error(`fetchCells() Entry already exist for clone: \"${cellInfo.cloned.clone_id}\"`)\n }\n clones[cellInfo.cloned.clone_id] = cellInfo.cloned;\n } else {\n provisioned = cellInfo.provisioned;\n }\n }\n }\n if (typeof provisioned === 'undefined') {\n return Promise.reject(\"Provisioned cell not found for role \" + baseRoleName);\n }\n let roleInstalledCells: CellsForRole = {provisioned: provisioned!, clones}\n /** Store it*/\n this._cellsByApp[appId][baseRoleName] = roleInstalledCells;\n return roleInstalledCells;\n }\n\n\n /** */\n addClone(hcl: HCL, cloneCell: ClonedCell): void {\n if (!this._cellsByApp[hcl.appId]) throw Error(\"addClone() failed. no appId. \" + hcl.toString());\n if (!this._cellsByApp[hcl.appId][hcl.baseRoleName]) throw Error(\"addClone() failed. no baseRoleName. \" + hcl.toString());\n if (hcl.cloneId === undefined) throw Error(\"addClone() failed. Cell is not a CloneCell: \" + hcl.toString());\n\n // let cloneName = hcl.cloneId;\n // if (hcl.cloneId === undefined) {\n // const cloneIndex: number = Object.keys(this._cellsByApp[hcl.appId][hcl.baseRoleName].clones).length;\n // cloneName = createCloneName(hcl.baseRoleName, cloneIndex);\n // }\n this._cellsByApp[hcl.appId][hcl.baseRoleName].clones[cloneCell.clone_id] = cloneCell;\n // const sCellId = CellIdStr(cloneCell.cell_id);\n // console.log(\"CreateCellProxy() adding to hclMap\", sCellId, cellLoc.asHcl())\n // if (this._hclMap[sCellId]) {\n // this._hclMap[sCellId].push(cellLoc.asHcl());\n // } else {\n // this._hclMap[sCellId] = [cellLoc.asHcl()];\n // }\n }\n\n\n /** */\n createCellProxy(hcl: HCL, cloneName?: string): CellProxy {\n console.log(\"createCellProxy() for\", hcl.toString(), cloneName);\n /** Make sure cell exists */\n const cell = this.getCell(hcl);\n const sCellId = CellIdStr(cell.id);\n /** Create proxy for this cell if none exist yet, otherwise reuse */\n let cellProxy = this._cellProxies[sCellId];\n if (!cellProxy) {\n /** Create and store Proxy */\n cellProxy = new CellProxy(this, cell, this.defaultTimeout);\n this._cellProxies[sCellId] = cellProxy;\n }\n /** Create CellId -> HCL mapping */\n //console.log(\"CreateCellProxy() adding to hclMap\", sCellId, hcl.toString())\n if (this._hclMap[sCellId]) {\n this._hclMap[sCellId].push(hcl);\n } else {\n this._hclMap[sCellId] = [hcl];\n }\n //console.log(\"createCellProxy() Currently stored hclMap:\", this._hclMap);\n /** Associate cloneName if any */\n const name = cloneName? cloneName : hcl.baseRoleName;\n this._cellNames[hcl.toString()] = name;\n /** Done */\n return cellProxy;\n }\n\n\n /** */\n onSignal(signal: AppSignal): void {\n /** Grab cell specific handlers */\n const hcls = this.getLocations(signal.cell_id);\n const handlerss: AppSignalCb[][] = hcls? hcls.map((hcl) => this._signalHandlers[hcl.toString()]) : [];\n //console.log(\"onSignal()\", hcls? hcls.toString() : \"unknown cell: \" + encodeHashToBase64(signal.cell_id[0]), handlerss);\n /** Grab common handler */\n const allHandlers = this._signalHandlers[\"__all\"];\n if (allHandlers) handlerss.push(allHandlers);\n /** Send to all handlers */\n for (const handlers of handlerss) {\n for (const handler of handlers) {\n handler(signal);\n }\n }\n }\n\n\n /** Store signalHandler to internal handler array */\n addSignalHandler(handler: AppSignalCb, hcl?: HCLString): SignalUnsubscriber {\n //console.log(\"addSignalHandler()\", hcl);\n\n hcl = hcl? hcl: \"__all\";\n //console.log(\"addSignalHandler()\", hcl, Object.keys(this._signalHandlers));\n if (!this._signalHandlers[hcl]) {\n this._signalHandlers[hcl] = [handler];\n } else {\n this._signalHandlers[hcl].push(handler);\n }\n /* return tailored unsubscribe function to the caller */\n return {\n unsubscribe: () => {\n // FIXME\n // const maybeHandler = this._signalHandlers[hcl!]\n // if (!maybeHandler) {\n // console.warn(\"unsubscribe failed: Couldn't find signalHandler for\", hcl)\n // return;\n // }\n // delete this._signalHandlers[hcl!];\n }\n };\n }\n\n /** Log all signals received */\n protected logSignal(signal: AppSignal): void {\n const isSystem = this.isSystemSignal(signal);\n //console.log(\"signal logged\", signal, isSystem)\n this._signalLogs.push([Date.now(), CellIdStr(signal.cell_id), signal, isSystem])\n }\n\n\n /** */\n isSystemSignal(signal: AppSignal): Boolean {\n return typeof signal.payload === 'object' && !Array.isArray(signal.payload) && signal.payload !== null && \"System\" in (signal.payload as Object);\n }\n\n\n /** */\n dumpSignals(cellId?: CellId) {\n if (cellId) {\n const cellStr = CellIdStr(cellId);\n const hcls = this._hclMap[cellStr];\n const names = hcls.map((hcl) => this.getCellName(hcl));\n console.warn(`Dumping App signal logs for cell \"${names}\"`);\n const logs = this._signalLogs\n .filter((log) => log[1] == cellStr)\n .filter((log) => !log[3])\n .map((log) => {\n return { timestamp: prettyDate(new Date(log[0])), zome: log[2].zome_name, payload: log[2].payload}\n });\n console.table(logs);\n console.warn(`Dumping System signal logs for cell \"${names}\"`);\n const syslogs = this._signalLogs\n .filter((log) => log[1] == cellStr)\n .filter((log) => log[3])\n .map((log) => {\n const payload = (log[2].payload as Object)[\"System\"];\n return { timestamp: prettyDate(new Date(log[0])), zome: log[2].zome_name, payload}\n });\n console.table(syslogs);\n } else {\n console.warn(\"Dumping all App signal logs\", )\n const logs = this._signalLogs\n .filter((log) => !log[3])\n .map((log) => {\n const app = this._hclMap[log[1]][0].appId\n const cell: string = this._hclMap[log[1]][0].roleName;\n return { timestamp: prettyDate(new Date(log[0])), app, cell, zome: log[2].zome_name, payload: log[2].payload };\n });\n console.table(logs);\n console.warn(\"Dumping all System signal logs\", )\n const syslogs = this._signalLogs\n .filter((log) => log[3])\n .map((log) => {\n const app = this._hclMap[log[1]][0].appId\n const cell: string = this._hclMap[log[1]][0].roleName;\n const payload = (log[2].payload as Object)[\"System\"];\n return { timestamp: prettyDate(new Date(log[0])), app, cell, zome: log[2].zome_name, payload };\n });\n console.table(syslogs);\n }\n }\n}\n\n\n/** WARN: must be up to date with Rust code */\n/** Protocol for notifying the ViewModel (UI) of system level events */\nexport type SystemSignalProtocolVariantPostCommitStart = {\n type: \"PostCommitStart\"\n entry_type: string\n}\nexport type SystemSignalProtocolVariantPostCommitEnd = {\n type: \"PostCommitEnd\"\n entry_type: string\n succeeded: boolean\n}\nexport type SystemSignalProtocolVariantSelfCallStart = {\n type: \"SelfCallStart\"\n zome_name: string\n fnName: string\n}\nexport type SystemSignalProtocolVariantSelfCallEnd = {\n type: \"SelfCallEnd\"\n zome_name: string\n fn_name: string\n succeeded: boolean\n}\nexport type SystemSignalProtocol =\n | SystemSignalProtocolVariantPostCommitStart\n | SystemSignalProtocolVariantPostCommitEnd\n | SystemSignalProtocolVariantSelfCallStart\n | SystemSignalProtocolVariantSelfCallEnd;\n"]}
@@ -31,8 +31,12 @@ export declare class CellProxy extends CellProxy_base {
31
31
  private _appProxy;
32
32
  /** Ctor */
33
33
  constructor(_appProxy: AppProxy, cell: Cell, defaultTimeout?: number);
34
- private _selfCallRelease?;
34
+ /** Have a PostCommitEnd release the Mutex */
35
+ private _postCommitRelease?;
36
+ private _postCommitReleaseEntryType?;
37
+ protected blockUntilPostCommit(signal: AppSignal): Promise<void>;
35
38
  /** Have a self call acquire & the call Mutex */
39
+ private _selfCallRelease?;
36
40
  protected blockSelfCall(signal: AppSignal): Promise<void>;
37
41
  /** -- Fields -- */
38
42
  defaultTimeout: number;
@@ -49,6 +53,11 @@ export declare class CellProxy extends CellProxy_base {
49
53
  executeZomeCall(reqLog: RequestLog): Promise<ResponseLog>;
50
54
  /** Pass call request to conductor proxy and log it */
51
55
  logCallTimedout(reqLog: RequestLog): ResponseLog;
56
+ /**
57
+ * callZome() with Mutex (for calls that writes to source-chain)
58
+ * TODO: Implement call queue instead of mutex?
59
+ */
60
+ callZomeBlockPostCommit(entryType: string, zome_name: ZomeName, fn_name: string, payload: any, cap_secret: CapSecret | null, timeout?: number): Promise<unknown>;
52
61
  /**
53
62
  * callZome() with Mutex (for calls that writes to source-chain)
54
63
  * TODO: Implement call queue instead of mutex?
package/dist/CellProxy.js CHANGED
@@ -22,15 +22,39 @@ export class CellProxy extends CellMixin(Empty) {
22
22
  console.log(`CellProxy.ctor`, cell);
23
23
  this.defaultTimeout = defaultTimeout ? defaultTimeout : 10 * 1000;
24
24
  this._callMutex = withTimeout(new Mutex(), this.defaultTimeout);
25
- /*const _unsub =*/ this.addSignalHandler((sig) => this.blockSelfCall(sig));
25
+ ///*const _unsub =*/ this.addSignalHandler((sig) => this.blockSelfCall(sig));
26
+ /*const _unsub =*/ this.addSignalHandler((sig) => this.blockUntilPostCommit(sig));
27
+ }
28
+ async blockUntilPostCommit(signal) {
29
+ //console.log("blockUntilPostCommit()", signal, this._appProxy.isSystemSignal(signal) , this._postCommitReleaseEntryType, !!this._postCommitRelease);
30
+ if (!this._appProxy.isSystemSignal(signal) || !this._postCommitRelease || !this._postCommitReleaseEntryType) {
31
+ return;
32
+ }
33
+ const sys = signal.payload["System"];
34
+ if (sys.type !== "PostCommitEnd") {
35
+ return;
36
+ }
37
+ const end = sys;
38
+ if (!end.succeeded) {
39
+ this.dumpSignals();
40
+ this.dumpLogs(signal.zome_name);
41
+ }
42
+ if (end.entry_type !== this._postCommitReleaseEntryType) {
43
+ return;
44
+ }
45
+ /** Release */
46
+ //console.log("blockUntilPostCommit() RELEASE");
47
+ this._postCommitRelease();
48
+ delete this._postCommitRelease;
49
+ delete this._postCommitReleaseEntryType;
26
50
  }
27
- /** Have a self call acquire & the call Mutex */
28
51
  async blockSelfCall(signal) {
29
52
  if (!this._appProxy.isSystemSignal(signal)) {
30
53
  return;
31
54
  }
32
55
  const sys = signal.payload["System"];
33
56
  if (sys.type == "SelfCallStart") {
57
+ console.log("");
34
58
  /** Acquire lock */
35
59
  try {
36
60
  this._callMutex.acquire().then((r) => this._selfCallRelease = r);
@@ -46,7 +70,7 @@ export class CellProxy extends CellMixin(Empty) {
46
70
  const end = sys;
47
71
  if (!end.succeeded) {
48
72
  this.dumpSignals();
49
- this.dumpLogs(end.zomeName);
73
+ this.dumpLogs(end.zome_name);
50
74
  }
51
75
  }
52
76
  }
@@ -85,6 +109,32 @@ export class CellProxy extends CellMixin(Empty) {
85
109
  this._responseLog.push(respLog);
86
110
  return respLog;
87
111
  }
112
+ /**
113
+ * callZome() with Mutex (for calls that writes to source-chain)
114
+ * TODO: Implement call queue instead of mutex?
115
+ */
116
+ async callZomeBlockPostCommit(entryType, zome_name, fn_name, payload, cap_secret, timeout) {
117
+ timeout = timeout ? timeout : this.defaultTimeout;
118
+ const req = {
119
+ cap_secret, zome_name, fn_name, payload,
120
+ cell_id: this.cell.id,
121
+ provenance: this.cell.id[1],
122
+ };
123
+ const log = { request: req, timeout, requestTimestamp: Date.now() };
124
+ /** Acquire lock */
125
+ try {
126
+ this._postCommitRelease = await this._callMutex.acquire();
127
+ this._postCommitReleaseEntryType = entryType;
128
+ }
129
+ catch (e) {
130
+ console.warn("Waiting for callZomeBlockPostCommit mutex timed-out", e);
131
+ this.logCallTimedout(log);
132
+ return Promise.reject("Waiting for callZomeBlockPostCommit mutex timed-out");
133
+ }
134
+ /** Execute */
135
+ const respLog = await this.executeZomeCall(log);
136
+ return respLog.success;
137
+ }
88
138
  /**
89
139
  * callZome() with Mutex (for calls that writes to source-chain)
90
140
  * TODO: Implement call queue instead of mutex?
@@ -241,14 +291,14 @@ export class CellProxy extends CellMixin(Empty) {
241
291
  .map(([ts, cellId, signal, isSystem]) => [ts, cellId, signal.payload["System"]]);
242
292
  let sigResults = [];
243
293
  for (const [startTs, startId, startSignal] of startCalls) {
244
- const index = endCalls.findIndex(([ts, cellId, signal]) => ts >= startTs && startId == cellId && startSignal.fnName == signal.fnName);
294
+ const index = endCalls.findIndex(([ts, cellId, signal]) => ts >= startTs && startId == cellId && startSignal.fnName == signal.fn_name);
245
295
  if (index == -1) {
246
296
  continue;
247
297
  }
248
298
  const first = endCalls.splice(index, 1)[0];
249
299
  const [endTs, _cId, endSignal] = first;
250
300
  const duration = prettyDuration(new Date(endTs - startTs));
251
- const log = { startTime: startTs, zomeName: endSignal.zomeName, fnName: endSignal.fnName, succeeded: endSignal.succeeded, duration };
301
+ const log = { startTime: startTs, zomeName: endSignal.zome_name, fnName: endSignal.fn_name, succeeded: endSignal.succeeded, duration };
252
302
  sigResults.push(log);
253
303
  }
254
304
  console.table(sigResults);
@@ -1 +1 @@
1
- {"version":3,"file":"CellProxy.js","sourceRoot":"","sources":["../src/CellProxy.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AppSignal,\n AppSignalCb,\n CallZomeRequest,\n CapSecret,\n encodeHashToBase64,\n Timestamp,\n ZomeName\n} from \"@holochain/client\";\nimport {anyToB64, prettyDate, prettyDuration} from \"./utils\";\nimport {CellMixin, Empty} from \"./mixins\";\nimport {Cell} from \"./cell\";\nimport {CellIdStr, DnaInfo, EntryDefsCallbackResult, ZomeInfo} from \"./types\";\nimport {Mutex, withTimeout} from \"async-mutex\";\nimport MutexInterface from \"async-mutex/lib/MutexInterface\";\nimport {\n AppProxy,\n SignalUnsubscriber,\n SystemSignalProtocol,\n SystemSignalProtocolVariantSelfCallEnd,\n SystemSignalProtocolVariantSelfCallStart\n} from \"./AppProxy\";\n\n\nexport interface RequestLog {\n request: CallZomeRequest,\n timeout: number,\n requestTimestamp: number,\n executionTimestamp: number,\n}\n\nexport interface ResponseLog {\n success?: unknown,\n failure?: unknown,\n timestamp: number,\n requestIndex: number;\n}\n\n\nexport type Cb = () => Promise<unknown>\n\n/**\n * Proxy for a running DNA.\n * It logs and queues ZomeCalls.\n * It holds a reference to its AppProxy and its Cell.\n * This class is expected to be used by ZomeProxies.\n */\nexport class CellProxy extends CellMixin(Empty) {\n\n /** Ctor */\n constructor(\n private _appProxy: AppProxy,\n cell: Cell,\n //public readonly dnaDef: MyDnaDef,\n defaultTimeout?: number) {\n super();\n this._cell = cell;\n console.log(`CellProxy.ctor`, cell);\n this.defaultTimeout = defaultTimeout ? defaultTimeout : 10 * 1000;\n this._callMutex = withTimeout(new Mutex(), this.defaultTimeout);\n\n /*const _unsub =*/ this.addSignalHandler((sig) => this.blockSelfCall(sig));\n }\n\n\n private _selfCallRelease?;\n\n /** Have a self call acquire & the call Mutex */\n protected async blockSelfCall(signal: AppSignal) {\n if (!this._appProxy.isSystemSignal(signal)) {\n return;\n }\n\n const sys = (signal.payload as Object)[\"System\"] as SystemSignalProtocol;\n if (sys.type == \"SelfCallStart\") {\n /** Acquire lock */\n try {\n this._callMutex.acquire().then((r) => this._selfCallRelease = r)\n } catch (e) {\n console.error(\"A Zome self call is initialted during a writing zome call\", e);\n }\n }\n if (sys.type == \"SelfCallEnd\" && this._selfCallRelease) {\n /** Release */\n this._selfCallRelease();\n delete this._selfCallRelease;\n const end = sys as SystemSignalProtocolVariantSelfCallEnd;\n if (!end.succeeded) {\n this.dumpSignals();\n this.dumpLogs(end.zomeName);\n }\n }\n }\n\n\n /** -- Fields -- */\n\n defaultTimeout: number;\n protected _callMutex: MutexInterface;\n\n\n\n /** append only logs */\n private _requestLog: RequestLog[] = []\n private _responseLog: ResponseLog[] = []\n\n\n /** -- Methods -- */\n\n /** */\n addSignalHandler(handler: AppSignalCb): SignalUnsubscriber {\n return this._appProxy.addSignalHandler(handler, this.cell.hcl().toString());\n }\n\n\n /** */\n dumpSignals() {\n this._appProxy.dumpSignals(this.cell.id);\n }\n\n /** Pass call request to conductor proxy and log it */\n async executeZomeCall(reqLog: RequestLog): Promise<ResponseLog> {\n reqLog.executionTimestamp = Date.now();\n const requestIndex = this._requestLog.length;\n this._requestLog.push(reqLog);\n try {\n const response = await this._appProxy.callZome(reqLog.request, reqLog.timeout);\n const respLog = { requestIndex, success: response, timestamp: Date.now() };\n this._responseLog.push(respLog);\n return respLog;\n } catch (e) {\n const respLog = { requestIndex, failure: e, timestamp: Date.now() }\n this._responseLog.push(respLog);\n return respLog;\n }\n }\n\n\n /** Pass call request to conductor proxy and log it */\n logCallTimedout(reqLog: RequestLog): ResponseLog {\n reqLog.executionTimestamp = Date.now();\n const requestIndex = this._requestLog.length;\n this._requestLog.push(reqLog);\n const respLog = { requestIndex, failure: \"Waiting for Mutex timed-out\", timestamp: Date.now() }\n this._responseLog.push(respLog);\n return respLog;\n }\n\n\n /**\n * callZome() with Mutex (for calls that writes to source-chain)\n * TODO: Implement call queue instead of mutex?\n */\n async callZomeBlocking(zome_name: ZomeName, fn_name: string, payload: any, cap_secret: CapSecret | null, timeout?: number): Promise<unknown> {\n timeout = timeout? timeout : this.defaultTimeout;\n const req = {\n cap_secret, zome_name, fn_name, payload,\n cell_id: this.cell.id,\n provenance: this.cell.id[1],\n } as CallZomeRequest;\n const log = { request: req, timeout, requestTimestamp: Date.now() } as RequestLog;\n\n /** Acquire lock */\n let release;\n try {\n release = await this._callMutex.acquire();\n } catch(e) {\n console.warn(\"Waiting for callZomeBlocking mutex timed-out\", e);\n this.logCallTimedout(log)\n return Promise.reject(\"Waiting for callZomeBlocking mutex timed-out\");\n }\n /** Execute */\n const respLog = await this.executeZomeCall(log);\n /** Release */\n release();\n if (respLog.failure) {\n this.dumpSignals();\n this.dumpLogs(zome_name);\n return Promise.reject(respLog.failure)\n }\n return respLog.success;\n }\n\n\n /** */\n async callZome(zome_name: ZomeName, fn_name: string, payload: any, cap_secret: CapSecret | null, timeout?: number): Promise<unknown> {\n timeout = timeout? timeout : this.defaultTimeout;\n const req = {\n cap_secret, zome_name, fn_name, payload,\n cell_id: this.cell.id,\n provenance: this.cell.id[1],\n } as CallZomeRequest;\n const log = { request: req, timeout, requestTimestamp: Date.now() } as RequestLog;\n try {\n await this._callMutex.waitForUnlock();\n } catch(e) {\n console.warn(\"Waiting for callZome mutex timed-out\", e);\n this.logCallTimedout(log);\n return Promise.reject(\"Waiting for callZome mutex timed-out\");\n }\n const respLog = await this.executeZomeCall(log);\n if (respLog.failure) {\n this.dumpSignals();\n this.dumpLogs(zome_name);\n return Promise.reject(respLog.failure)\n }\n return respLog.success;\n }\n\n\n /**\n * Calls the `entry_defs()` zome function and\n * Returns an array of all the zome's AppEntryNames and Visibility, i.e. (AppEntryName, isPublic)[]\n */\n async callEntryDefs(zomeName: ZomeName): Promise<[string, boolean][]> {\n //console.log(\"callEntryDefs()\", zomeName)\n try {\n const entryDefs = await this.callZome(zomeName, \"entry_defs\", null, null, 10 * 1000) as EntryDefsCallbackResult; // Need big timeout since holochain is slow when receiving simultaneous calls from multiple happs\n //console.debug(\"getEntryDefs() for \" + this.zomeName + \" result:\")\n //console.log({entryDefs})\n let result: [string, boolean][] = []\n for (const def of entryDefs.Defs) {\n const name = def.id.App;\n result.push([name, def.visibility.hasOwnProperty('Public')])\n }\n //console.log({result})\n return result;\n } catch (e) {\n console.error(\"Calling getEntryDefs() on \" + zomeName + \" failed: \")\n console.error({ e })\n return Promise.reject(e)\n }\n }\n\n\n\n /**\n * Calls the `zome_info()` zome function\n */\n async callZomeInfo(zomeName: ZomeName): Promise<ZomeInfo> {\n console.log(\"callZomeInfo()\", zomeName)\n try {\n const zome_info = await this.callZome(zomeName, \"get_zome_info\", null, null, 10 * 100) as ZomeInfo;\n //console.debug(\"callZomeInfo() for \" + zomeName + \" result:\")\n //console.log({zome_info})\n return zome_info;\n } catch (e) {\n console.error(\"Calling callZomeInfo() on \" + zomeName + \" failed. Make sure `get_zome_info()` is implemented in your zome code. Error: \")\n console.error({ e })\n return Promise.reject(e)\n }\n }\n\n\n /**\n * Calls the `dna_info()` zome function\n */\n async callDnaInfo(zomeName: ZomeName): Promise<DnaInfo> {\n console.log(\"callDnaInfo()\", zomeName)\n try {\n const dna_info = await this.callZome(zomeName, \"get_dna_info\", null, null, 10 * 100) as DnaInfo;\n //console.debug(\"callDnaInfo() for \" + zomeName + \" result:\")\n //console.log({dna_info})\n return dna_info;\n } catch (e) {\n console.error(\"Calling callDnaInfo() on \" + zomeName + \" failed. Make sure `get_dna_info()` is implemented in your zome code. Error: \")\n console.error({ e })\n return Promise.reject(e)\n }\n }\n\n\n // /** TODO once we have getDnaDefinition() api */\n // dumpAllZomes() {\n // // FIXME get DNA DEF\n // for (const zomeName of dnaDef) {\n // this.dumpLogs(zomeName)\n // }\n // }\n\n /** */\n dumpLogs(zomeName?: ZomeName) {\n let result = [];\n for (const response of this._responseLog) {\n const requestLog = this._requestLog[response.requestIndex];\n if (zomeName && requestLog.request.zome_name != zomeName) {\n continue;\n }\n const startTime= prettyDate(new Date(requestLog.requestTimestamp));\n const waitTime = prettyDuration(new Date(requestLog.executionTimestamp - requestLog.requestTimestamp));\n const duration = prettyDuration(new Date(response.timestamp - requestLog.requestTimestamp));\n const input = requestLog.request.payload instanceof Uint8Array ? encodeHashToBase64(requestLog.request.payload) : requestLog.request.payload;\n const output = anyToB64(response.failure ? response.failure : response.success);\n const log = zomeName\n ? { startTime, fnName: requestLog.request.fn_name, input, output, duration, waitTime }\n : { startTime, zomeName: requestLog.request.zome_name, fnName: requestLog.request.fn_name, input, output, duration, waitTime }\n result.push(log);\n }\n console.warn(`Dumping logs for cell \"${this._appProxy.getLocations(this.cell.id)}\"`)\n if (zomeName) {\n console.warn(` - For zome \"${zomeName}\"`);\n }\n console.table(result)\n\n /** Parse signal self-call logs */\n //console.log(this._appProxy.signalLogs)\n const startCalls: [Timestamp, CellIdStr, SystemSignalProtocolVariantSelfCallStart][] = this._appProxy.signalLogs\n .filter(([ts, cellId, signal, isSystem]) => isSystem && (signal.payload as Object)[\"System\"].type == \"SelfCallStart\")\n .map(([ts, cellId, signal, isSystem]) => [ts, cellId, (signal.payload as Object)[\"System\"]])\n\n const endCalls: [Timestamp, CellIdStr, SystemSignalProtocolVariantSelfCallEnd][] = this._appProxy.signalLogs\n .filter(([ts, cellId, signal, isSystem]) => isSystem && (signal.payload as Object)[\"System\"].type == \"SelfCallEnd\")\n .map(([ts, cellId, signal, isSystem]) => [ts, cellId, (signal.payload as Object)[\"System\"]])\n\n\n let sigResults = [];\n for (const [startTs, startId, startSignal] of startCalls) {\n const index = endCalls.findIndex(([ts, cellId, signal]) => ts >= startTs && startId == cellId && startSignal.fnName == signal.fnName)\n if (index == -1) {\n continue;\n }\n const first = endCalls.splice(index, 1)[0];\n const [endTs, _cId, endSignal] = first;\n const duration = prettyDuration(new Date(endTs - startTs));\n const log = { startTime: startTs, zomeName: endSignal.zomeName, fnName: endSignal.fnName, succeeded: endSignal.succeeded, duration }\n sigResults.push(log);\n }\n\n console.table(sigResults)\n }\n\n\n}\n\n"]}
1
+ {"version":3,"file":"CellProxy.js","sourceRoot":"","sources":["../src/CellProxy.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AppSignal,\n AppSignalCb,\n CallZomeRequest,\n CapSecret,\n encodeHashToBase64,\n Timestamp,\n ZomeName\n} from \"@holochain/client\";\nimport {anyToB64, prettyDate, prettyDuration} from \"./utils\";\nimport {CellMixin, Empty} from \"./mixins\";\nimport {Cell} from \"./cell\";\nimport {CellIdStr, DnaInfo, EntryDefsCallbackResult, ZomeInfo} from \"./types\";\nimport {Mutex, withTimeout} from \"async-mutex\";\nimport MutexInterface from \"async-mutex/lib/MutexInterface\";\nimport {\n AppProxy,\n SignalUnsubscriber,\n SystemSignalProtocol, SystemSignalProtocolVariantPostCommitEnd,\n SystemSignalProtocolVariantSelfCallEnd,\n SystemSignalProtocolVariantSelfCallStart\n} from \"./AppProxy\";\n\n\nexport interface RequestLog {\n request: CallZomeRequest,\n timeout: number,\n requestTimestamp: number,\n executionTimestamp: number,\n}\n\nexport interface ResponseLog {\n success?: unknown,\n failure?: unknown,\n timestamp: number,\n requestIndex: number;\n}\n\n\nexport type Cb = () => Promise<unknown>\n\n/**\n * Proxy for a running DNA.\n * It logs and queues ZomeCalls.\n * It holds a reference to its AppProxy and its Cell.\n * This class is expected to be used by ZomeProxies.\n */\nexport class CellProxy extends CellMixin(Empty) {\n\n /** Ctor */\n constructor(\n private _appProxy: AppProxy,\n cell: Cell,\n //public readonly dnaDef: MyDnaDef,\n defaultTimeout?: number) {\n super();\n this._cell = cell;\n console.log(`CellProxy.ctor`, cell);\n this.defaultTimeout = defaultTimeout ? defaultTimeout : 10 * 1000;\n this._callMutex = withTimeout(new Mutex(), this.defaultTimeout);\n\n ///*const _unsub =*/ this.addSignalHandler((sig) => this.blockSelfCall(sig));\n /*const _unsub =*/ this.addSignalHandler((sig) => this.blockUntilPostCommit(sig));\n }\n\n\n /** Have a PostCommitEnd release the Mutex */\n private _postCommitRelease?;\n private _postCommitReleaseEntryType?: string;\n protected async blockUntilPostCommit(signal: AppSignal) {\n //console.log(\"blockUntilPostCommit()\", signal, this._appProxy.isSystemSignal(signal) , this._postCommitReleaseEntryType, !!this._postCommitRelease);\n if (!this._appProxy.isSystemSignal(signal) || !this._postCommitRelease || !this._postCommitReleaseEntryType) {\n return;\n }\n const sys = (signal.payload as Object)[\"System\"] as SystemSignalProtocol;\n if (sys.type !== \"PostCommitEnd\") {\n return;\n }\n const end = sys as SystemSignalProtocolVariantPostCommitEnd;\n if (!end.succeeded) {\n this.dumpSignals();\n this.dumpLogs(signal.zome_name);\n }\n if (end.entry_type !== this._postCommitReleaseEntryType) {\n return;\n }\n /** Release */\n //console.log(\"blockUntilPostCommit() RELEASE\");\n this._postCommitRelease();\n delete this._postCommitRelease;\n delete this._postCommitReleaseEntryType;\n }\n\n\n /** Have a self call acquire & the call Mutex */\n private _selfCallRelease?;\n protected async blockSelfCall(signal: AppSignal) {\n if (!this._appProxy.isSystemSignal(signal)) {\n return;\n }\n\n const sys = (signal.payload as Object)[\"System\"] as SystemSignalProtocol;\n if (sys.type == \"SelfCallStart\") {\n console.log(\"\")\n /** Acquire lock */\n try {\n this._callMutex.acquire().then((r) => this._selfCallRelease = r)\n } catch (e) {\n console.error(\"A Zome self call is initialted during a writing zome call\", e);\n }\n }\n if (sys.type == \"SelfCallEnd\" && this._selfCallRelease) {\n /** Release */\n this._selfCallRelease();\n delete this._selfCallRelease;\n const end = sys as SystemSignalProtocolVariantSelfCallEnd;\n if (!end.succeeded) {\n this.dumpSignals();\n this.dumpLogs(end.zome_name);\n }\n }\n }\n\n\n /** -- Fields -- */\n\n defaultTimeout: number;\n protected _callMutex: MutexInterface;\n\n\n\n /** append only logs */\n private _requestLog: RequestLog[] = []\n private _responseLog: ResponseLog[] = []\n\n\n /** -- Methods -- */\n\n /** */\n addSignalHandler(handler: AppSignalCb): SignalUnsubscriber {\n return this._appProxy.addSignalHandler(handler, this.cell.hcl().toString());\n }\n\n\n /** */\n dumpSignals() {\n this._appProxy.dumpSignals(this.cell.id);\n }\n\n /** Pass call request to conductor proxy and log it */\n async executeZomeCall(reqLog: RequestLog): Promise<ResponseLog> {\n reqLog.executionTimestamp = Date.now();\n const requestIndex = this._requestLog.length;\n this._requestLog.push(reqLog);\n try {\n const response = await this._appProxy.callZome(reqLog.request, reqLog.timeout);\n const respLog = { requestIndex, success: response, timestamp: Date.now() };\n this._responseLog.push(respLog);\n return respLog;\n } catch (e) {\n const respLog = { requestIndex, failure: e, timestamp: Date.now() }\n this._responseLog.push(respLog);\n return respLog;\n }\n }\n\n\n /** Pass call request to conductor proxy and log it */\n logCallTimedout(reqLog: RequestLog): ResponseLog {\n reqLog.executionTimestamp = Date.now();\n const requestIndex = this._requestLog.length;\n this._requestLog.push(reqLog);\n const respLog = { requestIndex, failure: \"Waiting for Mutex timed-out\", timestamp: Date.now() }\n this._responseLog.push(respLog);\n return respLog;\n }\n\n\n /**\n * callZome() with Mutex (for calls that writes to source-chain)\n * TODO: Implement call queue instead of mutex?\n */\n async callZomeBlockPostCommit(entryType: string, zome_name: ZomeName, fn_name: string, payload: any, cap_secret: CapSecret | null, timeout?: number): Promise<unknown> {\n timeout = timeout? timeout : this.defaultTimeout;\n const req = {\n cap_secret, zome_name, fn_name, payload,\n cell_id: this.cell.id,\n provenance: this.cell.id[1],\n } as CallZomeRequest;\n const log = { request: req, timeout, requestTimestamp: Date.now() } as RequestLog;\n\n /** Acquire lock */\n try {\n this._postCommitRelease = await this._callMutex.acquire();\n this._postCommitReleaseEntryType = entryType;\n } catch(e) {\n console.warn(\"Waiting for callZomeBlockPostCommit mutex timed-out\", e);\n this.logCallTimedout(log)\n return Promise.reject(\"Waiting for callZomeBlockPostCommit mutex timed-out\");\n }\n /** Execute */\n const respLog = await this.executeZomeCall(log);\n return respLog.success;\n }\n\n\n /**\n * callZome() with Mutex (for calls that writes to source-chain)\n * TODO: Implement call queue instead of mutex?\n */\n async callZomeBlocking(zome_name: ZomeName, fn_name: string, payload: any, cap_secret: CapSecret | null, timeout?: number): Promise<unknown> {\n timeout = timeout? timeout : this.defaultTimeout;\n const req = {\n cap_secret, zome_name, fn_name, payload,\n cell_id: this.cell.id,\n provenance: this.cell.id[1],\n } as CallZomeRequest;\n const log = { request: req, timeout, requestTimestamp: Date.now() } as RequestLog;\n\n /** Acquire lock */\n let release;\n try {\n release = await this._callMutex.acquire();\n } catch(e) {\n console.warn(\"Waiting for callZomeBlocking mutex timed-out\", e);\n this.logCallTimedout(log)\n return Promise.reject(\"Waiting for callZomeBlocking mutex timed-out\");\n }\n /** Execute */\n const respLog = await this.executeZomeCall(log);\n /** Release */\n release();\n if (respLog.failure) {\n this.dumpSignals();\n this.dumpLogs(zome_name);\n return Promise.reject(respLog.failure)\n }\n return respLog.success;\n }\n\n\n /** */\n async callZome(zome_name: ZomeName, fn_name: string, payload: any, cap_secret: CapSecret | null, timeout?: number): Promise<unknown> {\n timeout = timeout? timeout : this.defaultTimeout;\n const req = {\n cap_secret, zome_name, fn_name, payload,\n cell_id: this.cell.id,\n provenance: this.cell.id[1],\n } as CallZomeRequest;\n const log = { request: req, timeout, requestTimestamp: Date.now() } as RequestLog;\n try {\n await this._callMutex.waitForUnlock();\n } catch(e) {\n console.warn(\"Waiting for callZome mutex timed-out\", e);\n this.logCallTimedout(log);\n return Promise.reject(\"Waiting for callZome mutex timed-out\");\n }\n const respLog = await this.executeZomeCall(log);\n if (respLog.failure) {\n this.dumpSignals();\n this.dumpLogs(zome_name);\n return Promise.reject(respLog.failure)\n }\n return respLog.success;\n }\n\n\n /**\n * Calls the `entry_defs()` zome function and\n * Returns an array of all the zome's AppEntryNames and Visibility, i.e. (AppEntryName, isPublic)[]\n */\n async callEntryDefs(zomeName: ZomeName): Promise<[string, boolean][]> {\n //console.log(\"callEntryDefs()\", zomeName)\n try {\n const entryDefs = await this.callZome(zomeName, \"entry_defs\", null, null, 10 * 1000) as EntryDefsCallbackResult; // Need big timeout since holochain is slow when receiving simultaneous calls from multiple happs\n //console.debug(\"getEntryDefs() for \" + this.zomeName + \" result:\")\n //console.log({entryDefs})\n let result: [string, boolean][] = []\n for (const def of entryDefs.Defs) {\n const name = def.id.App;\n result.push([name, def.visibility.hasOwnProperty('Public')])\n }\n //console.log({result})\n return result;\n } catch (e) {\n console.error(\"Calling getEntryDefs() on \" + zomeName + \" failed: \")\n console.error({ e })\n return Promise.reject(e)\n }\n }\n\n\n\n /**\n * Calls the `zome_info()` zome function\n */\n async callZomeInfo(zomeName: ZomeName): Promise<ZomeInfo> {\n console.log(\"callZomeInfo()\", zomeName)\n try {\n const zome_info = await this.callZome(zomeName, \"get_zome_info\", null, null, 10 * 100) as ZomeInfo;\n //console.debug(\"callZomeInfo() for \" + zomeName + \" result:\")\n //console.log({zome_info})\n return zome_info;\n } catch (e) {\n console.error(\"Calling callZomeInfo() on \" + zomeName + \" failed. Make sure `get_zome_info()` is implemented in your zome code. Error: \")\n console.error({ e })\n return Promise.reject(e)\n }\n }\n\n\n /**\n * Calls the `dna_info()` zome function\n */\n async callDnaInfo(zomeName: ZomeName): Promise<DnaInfo> {\n console.log(\"callDnaInfo()\", zomeName)\n try {\n const dna_info = await this.callZome(zomeName, \"get_dna_info\", null, null, 10 * 100) as DnaInfo;\n //console.debug(\"callDnaInfo() for \" + zomeName + \" result:\")\n //console.log({dna_info})\n return dna_info;\n } catch (e) {\n console.error(\"Calling callDnaInfo() on \" + zomeName + \" failed. Make sure `get_dna_info()` is implemented in your zome code. Error: \")\n console.error({ e })\n return Promise.reject(e)\n }\n }\n\n\n // /** TODO once we have getDnaDefinition() api */\n // dumpAllZomes() {\n // // FIXME get DNA DEF\n // for (const zomeName of dnaDef) {\n // this.dumpLogs(zomeName)\n // }\n // }\n\n /** */\n dumpLogs(zomeName?: ZomeName) {\n let result = [];\n for (const response of this._responseLog) {\n const requestLog = this._requestLog[response.requestIndex];\n if (zomeName && requestLog.request.zome_name != zomeName) {\n continue;\n }\n const startTime= prettyDate(new Date(requestLog.requestTimestamp));\n const waitTime = prettyDuration(new Date(requestLog.executionTimestamp - requestLog.requestTimestamp));\n const duration = prettyDuration(new Date(response.timestamp - requestLog.requestTimestamp));\n const input = requestLog.request.payload instanceof Uint8Array ? encodeHashToBase64(requestLog.request.payload) : requestLog.request.payload;\n const output = anyToB64(response.failure ? response.failure : response.success);\n const log = zomeName\n ? { startTime, fnName: requestLog.request.fn_name, input, output, duration, waitTime }\n : { startTime, zomeName: requestLog.request.zome_name, fnName: requestLog.request.fn_name, input, output, duration, waitTime }\n result.push(log);\n }\n console.warn(`Dumping logs for cell \"${this._appProxy.getLocations(this.cell.id)}\"`)\n if (zomeName) {\n console.warn(` - For zome \"${zomeName}\"`);\n }\n console.table(result)\n\n /** Parse signal self-call logs */\n //console.log(this._appProxy.signalLogs)\n const startCalls: [Timestamp, CellIdStr, SystemSignalProtocolVariantSelfCallStart][] = this._appProxy.signalLogs\n .filter(([ts, cellId, signal, isSystem]) => isSystem && (signal.payload as Object)[\"System\"].type == \"SelfCallStart\")\n .map(([ts, cellId, signal, isSystem]) => [ts, cellId, (signal.payload as Object)[\"System\"]])\n\n const endCalls: [Timestamp, CellIdStr, SystemSignalProtocolVariantSelfCallEnd][] = this._appProxy.signalLogs\n .filter(([ts, cellId, signal, isSystem]) => isSystem && (signal.payload as Object)[\"System\"].type == \"SelfCallEnd\")\n .map(([ts, cellId, signal, isSystem]) => [ts, cellId, (signal.payload as Object)[\"System\"]])\n\n\n let sigResults = [];\n for (const [startTs, startId, startSignal] of startCalls) {\n const index = endCalls.findIndex(([ts, cellId, signal]) => ts >= startTs && startId == cellId && startSignal.fnName == signal.fn_name)\n if (index == -1) {\n continue;\n }\n const first = endCalls.splice(index, 1)[0];\n const [endTs, _cId, endSignal] = first;\n const duration = prettyDuration(new Date(endTs - startTs));\n const log = { startTime: startTs, zomeName: endSignal.zome_name, fnName: endSignal.fn_name, succeeded: endSignal.succeeded, duration }\n sigResults.push(log);\n }\n\n console.table(sigResults)\n }\n\n\n}\n\n"]}
@@ -1,4 +1,5 @@
1
- import { AppApi, AppInfoRequest, AppInfoResponse, AppWebsocket, CallZomeRequest, InstalledAppId, CreateCloneCellRequest, DisableCloneCellRequest, EnableCloneCellRequest, ClonedCell, DnaHashB64, NetworkInfo, AgentPubKeyB64, Timestamp } from "@holochain/client";
1
+ import { AppInfoResponse, AppWebsocket, CallZomeRequest, InstalledAppId, CreateCloneCellRequest, DisableCloneCellRequest, EnableCloneCellRequest, ClonedCell, NetworkInfo, Timestamp, AppClient, AppEvents, AppSignalCb, AppNetworkInfoRequest, NetworkInfoResponse, AdminWebsocket } from "@holochain/client";
2
+ import { UnsubscribeFunction } from "emittery";
2
3
  import { AppProxy } from "./AppProxy";
3
4
  import { CellIdStr } from "./types";
4
5
  /**
@@ -9,30 +10,29 @@ import { CellIdStr } from "./types";
9
10
  * Stores appSignal logs
10
11
  * TODO Implement Singleton per App port?
11
12
  */
12
- export declare class ConductorAppProxy extends AppProxy implements AppApi {
13
+ export declare class ConductorAppProxy extends AppProxy implements AppClient {
13
14
  defaultTimeout: number;
14
15
  /** -- Fields -- */
15
16
  private _appWs;
16
17
  /** -- Getters -- */
17
- /** Check this after connecting since AppWebsocket can shamelessly override the provided args. */
18
- get appIdOfShame(): InstalledAppId | undefined;
18
+ /** -- AppClient (Passthrough to appWebsocket) -- */
19
+ callZome(req: CallZomeRequest, timeout?: number): Promise<unknown>;
20
+ appInfo(): Promise<AppInfoResponse>;
21
+ on<Name extends keyof AppEvents>(eventName: Name | readonly Name[], listener: AppSignalCb): UnsubscribeFunction;
19
22
  createCloneCell(request: CreateCloneCellRequest): Promise<ClonedCell>;
20
- /** -- AppApi (Passthrough to appWebsocket) -- */
21
23
  enableCloneCell(request: EnableCloneCellRequest): Promise<ClonedCell>;
22
24
  disableCloneCell(request: DisableCloneCellRequest): Promise<void>;
23
- appInfo(args: AppInfoRequest): Promise<AppInfoResponse>;
24
- callZome(req: CallZomeRequest, timeout?: number): Promise<unknown>;
25
+ /** */
26
+ networkInfo(args: AppNetworkInfoRequest): Promise<NetworkInfoResponse>;
25
27
  /** Store networkInfo calls */
26
28
  private _lastTimeQueriedMap;
27
29
  private _networkInfoLogs;
28
30
  get networkInfoLogs(): Record<CellIdStr, [Timestamp, NetworkInfo][]>;
29
- /** */
30
- networkInfo(agent: AgentPubKeyB64, dnas: DnaHashB64[]): Promise<Record<DnaHashB64, [Timestamp, NetworkInfo]>>;
31
31
  /** -- Creation -- */
32
32
  /** async Factory */
33
- static new(port_or_socket: number | AppWebsocket, defaultTimeout?: number): Promise<ConductorAppProxy>;
33
+ static new(port_or_socket: number | AppWebsocket, appId: InstalledAppId, adminUrl?: URL, defaultTimeout?: number): Promise<ConductorAppProxy>;
34
34
  /** */
35
35
  private static fromSocket;
36
36
  /** Ctor */
37
- constructor(defaultTimeout: number);
37
+ constructor(defaultTimeout: number, adminWs?: AdminWebsocket);
38
38
  }
@@ -1,4 +1,4 @@
1
- import { AppWebsocket, decodeHashFromBase64, } from "@holochain/client";
1
+ import { AppWebsocket, decodeHashFromBase64, encodeHashToBase64, AdminWebsocket, } from "@holochain/client";
2
2
  import { AppProxy } from "./AppProxy";
3
3
  import { CellIdStr } from "./types";
4
4
  /**
@@ -11,13 +11,23 @@ import { CellIdStr } from "./types";
11
11
  */
12
12
  export class ConductorAppProxy extends AppProxy {
13
13
  /** -- Getters -- */
14
- /** Check this after connecting since AppWebsocket can shamelessly override the provided args. */
15
- get appIdOfShame() { return this._appWs.overrideInstalledAppId; }
14
+ ///** Check this after connecting since AppWebsocket can shamelessly override the provided args. */
15
+ //get appIdOfShame(): InstalledAppId | undefined { return this._appWs.overrideInstalledAppId;}
16
+ /** -- AppClient (Passthrough to appWebsocket) -- */
17
+ async callZome(req, timeout) {
18
+ timeout = timeout ? timeout : this.defaultTimeout;
19
+ return this._appWs.callZome(req, timeout);
20
+ }
21
+ async appInfo() {
22
+ return this._appWs.appInfo();
23
+ }
24
+ on(eventName, listener) {
25
+ return this._appWs.on(eventName, listener);
26
+ }
16
27
  async createCloneCell(request) {
17
28
  //console.log("createCloneCell() called:", request)
18
29
  return this._appWs.createCloneCell(request);
19
30
  }
20
- /** -- AppApi (Passthrough to appWebsocket) -- */
21
31
  async enableCloneCell(request) {
22
32
  //console.log("enableCloneCell() called:", request)
23
33
  return this._appWs.enableCloneCell(request);
@@ -26,31 +36,26 @@ export class ConductorAppProxy extends AppProxy {
26
36
  //console.log("disableCloneCell() called:", request)
27
37
  return this._appWs.disableCloneCell(request);
28
38
  }
29
- async appInfo(args) {
30
- return this._appWs.appInfo(args);
31
- }
32
- async callZome(req, timeout) {
33
- timeout = timeout ? timeout : this.defaultTimeout;
34
- return this._appWs.callZome(req, timeout);
35
- }
36
- get networkInfoLogs() { return this._networkInfoLogs; }
39
+ // async networkInfo(args: AppNetworkInfoRequest): Promise<NetworkInfoResponse> {
40
+ // return this._appWs!.networkInfo(args);
41
+ // }
37
42
  /** */
38
- async networkInfo(agent, dnas) {
39
- const hashs = dnas.map((b64) => decodeHashFromBase64(b64));
43
+ async networkInfo(args) {
44
+ const agent = encodeHashToBase64(this._appWs.myPubKey);
40
45
  /* Call networkInfo */
41
46
  const response = await this._appWs.networkInfo({
42
- agent_pub_key: decodeHashFromBase64(agent),
43
- dnas: hashs,
47
+ dnas: args.dnas,
44
48
  last_time_queried: this._lastTimeQueriedMap[agent]
45
49
  });
46
50
  this._lastTimeQueriedMap[agent] = Date.now();
47
51
  /* Convert result */
48
52
  let i = 0;
49
- let result = {};
53
+ //let result = {}
50
54
  for (const netInfo of response) {
51
- result[dnas[i]] = [this._lastTimeQueriedMap[agent], netInfo];
55
+ const dnaHash = encodeHashToBase64(args.dnas[i]);
56
+ //result[dnaHash] = [this._lastTimeQueriedMap[agent], netInfo];
52
57
  /* Store */
53
- const cellIdStr = CellIdStr(decodeHashFromBase64(dnas[i]), decodeHashFromBase64(agent));
58
+ const cellIdStr = CellIdStr(args.dnas[i], decodeHashFromBase64(agent));
54
59
  if (!this._networkInfoLogs[cellIdStr]) {
55
60
  this._networkInfoLogs[cellIdStr] = [];
56
61
  }
@@ -58,25 +63,29 @@ export class ConductorAppProxy extends AppProxy {
58
63
  /* */
59
64
  i += 1;
60
65
  }
61
- return result;
66
+ return response;
62
67
  }
68
+ get networkInfoLogs() { return this._networkInfoLogs; }
63
69
  /** -- Creation -- */
64
70
  /** async Factory */
65
- static async new(port_or_socket, defaultTimeout) {
71
+ static async new(port_or_socket, appId, adminUrl, defaultTimeout) {
72
+ const timeout = defaultTimeout ? defaultTimeout : 10 * 1000;
66
73
  if (typeof port_or_socket == 'object') {
67
- return ConductorAppProxy.fromSocket(port_or_socket);
74
+ return ConductorAppProxy.fromSocket(port_or_socket, timeout);
68
75
  }
69
76
  else {
70
- const timeout = defaultTimeout ? defaultTimeout : 10 * 1000;
71
77
  let wsUrl = new URL(`ws://localhost:${port_or_socket}`);
72
78
  try {
73
- let conductor = new ConductorAppProxy(timeout);
74
- /** AppWebsocket */
75
- const appWs = await AppWebsocket.connect({ url: wsUrl, defaultTimeout: timeout });
76
- /** AppAgentWebsocket */
77
- // const appAgentWs = await AppAgentWebsocket.connect(`ws://localhost:${process.env.HC_APP_PORT}`, "playground");
78
- // console.log(appAgentWs.appWebsocket);
79
- // const appWs = await appAgentWs.appWebsocket;
79
+ let token;
80
+ let adminWs;
81
+ if (adminUrl) {
82
+ adminWs = await AdminWebsocket.connect({ url: adminUrl });
83
+ console.log({ adminWs });
84
+ const issued = await adminWs.issueAppAuthenticationToken({ installed_app_id: appId });
85
+ token = issued.token;
86
+ }
87
+ let conductor = new ConductorAppProxy(timeout, adminWs);
88
+ const appWs = await AppWebsocket.connect({ url: wsUrl, defaultTimeout: timeout, token });
80
89
  conductor._appWs = appWs;
81
90
  conductor._appWs.on('signal', (sig) => { conductor.onSignal(sig); });
82
91
  return conductor;
@@ -88,9 +97,9 @@ export class ConductorAppProxy extends AppProxy {
88
97
  }
89
98
  }
90
99
  /** */
91
- static async fromSocket(appWebsocket) {
100
+ static async fromSocket(appWebsocket, defaultTimeout) {
92
101
  try {
93
- let conductor = new ConductorAppProxy(appWebsocket.defaultTimeout);
102
+ let conductor = new ConductorAppProxy(defaultTimeout);
94
103
  conductor._appWs = appWebsocket;
95
104
  conductor._appWs.on('signal', (sig) => { conductor.onSignal(sig); });
96
105
  return conductor;
@@ -101,8 +110,8 @@ export class ConductorAppProxy extends AppProxy {
101
110
  }
102
111
  }
103
112
  /** Ctor */
104
- /*protected*/ constructor(defaultTimeout) {
105
- super(defaultTimeout);
113
+ /*protected*/ constructor(defaultTimeout, adminWs) {
114
+ super(defaultTimeout, adminWs);
106
115
  this.defaultTimeout = defaultTimeout;
107
116
  /** Store networkInfo calls */
108
117
  this._lastTimeQueriedMap = {};
@@ -1 +1 @@
1
- {"version":3,"file":"ConductorAppProxy.js","sourceRoot":"","sources":["../src/ConductorAppProxy.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AppApi,\n AppInfoRequest,\n AppInfoResponse,\n AppWebsocket,\n CallZomeRequest,\n InstalledAppId,\n CreateCloneCellRequest,\n DisableCloneCellRequest,\n EnableCloneCellRequest,\n ClonedCell, decodeHashFromBase64, DnaHashB64, NetworkInfo, NetworkInfoRequest, AgentPubKeyB64, Timestamp,\n} from \"@holochain/client\";\nimport {AppProxy} from \"./AppProxy\";\nimport {CellIdStr} from \"./types\";\n\n\n/**\n * Creates, connects and holds an appWebsocket.\n * Creates and holds Cell proxies for this appWebsocket.\n * Maintains a mapping between CellIds and HCLs\n * Handles SignalHandlers per HCL\n * Stores appSignal logs\n * TODO Implement Singleton per App port?\n */\nexport class ConductorAppProxy extends AppProxy implements AppApi {\n\n /** -- Fields -- */\n\n private _appWs!: AppWebsocket;\n\n\n /** -- Getters -- */\n\n /** Check this after connecting since AppWebsocket can shamelessly override the provided args. */\n get appIdOfShame(): InstalledAppId | undefined { return this._appWs.overrideInstalledAppId;}\n\n\n async createCloneCell(request: CreateCloneCellRequest): Promise<ClonedCell> {\n //console.log(\"createCloneCell() called:\", request)\n return this._appWs!.createCloneCell(request);\n }\n\n /** -- AppApi (Passthrough to appWebsocket) -- */\n\n async enableCloneCell(request: EnableCloneCellRequest): Promise<ClonedCell> {\n //console.log(\"enableCloneCell() called:\", request)\n return this._appWs!.enableCloneCell(request);\n }\n\n async disableCloneCell(request: DisableCloneCellRequest): Promise<void> {\n //console.log(\"disableCloneCell() called:\", request)\n return this._appWs!.disableCloneCell(request);\n }\n\n async appInfo(args: AppInfoRequest): Promise<AppInfoResponse> {\n return this._appWs!.appInfo(args);\n }\n\n async callZome(req: CallZomeRequest, timeout?: number): Promise<unknown> {\n timeout = timeout ? timeout : this.defaultTimeout\n return this._appWs.callZome(req, timeout)\n }\n\n\n /** Store networkInfo calls */\n private _lastTimeQueriedMap: Record<AgentPubKeyB64, Timestamp> = {};\n private _networkInfoLogs: Record<CellIdStr, [Timestamp, NetworkInfo][]> = {};\n\n get networkInfoLogs(): Record<CellIdStr, [Timestamp, NetworkInfo][]> {return this._networkInfoLogs;}\n\n /** */\n async networkInfo(agent: AgentPubKeyB64, dnas: DnaHashB64[]): Promise<Record<DnaHashB64, [Timestamp, NetworkInfo]>> {\n const hashs = dnas.map((b64) => decodeHashFromBase64(b64));\n /* Call networkInfo */\n const response = await this._appWs.networkInfo({\n agent_pub_key: decodeHashFromBase64(agent),\n dnas: hashs,\n last_time_queried: this._lastTimeQueriedMap[agent]} as NetworkInfoRequest);\n this._lastTimeQueriedMap[agent] = Date.now();\n\n /* Convert result */\n let i = 0;\n let result = {}\n for (const netInfo of response) {\n result[dnas[i]] = [this._lastTimeQueriedMap[agent], netInfo];\n /* Store */\n const cellIdStr = CellIdStr(decodeHashFromBase64(dnas[i]), decodeHashFromBase64(agent));\n if (!this._networkInfoLogs[cellIdStr]) {\n this._networkInfoLogs[cellIdStr] = [];\n }\n this._networkInfoLogs[cellIdStr].push([this._lastTimeQueriedMap[agent], netInfo])\n /* */\n i += 1;\n }\n return result;\n }\n\n\n/** -- Creation -- */\n\n /** async Factory */\n static async new(port_or_socket: number | AppWebsocket, defaultTimeout?: number): Promise<ConductorAppProxy> {\n if (typeof port_or_socket == 'object') {\n return ConductorAppProxy.fromSocket(port_or_socket);\n } else {\n const timeout = defaultTimeout ? defaultTimeout : 10 * 1000;\n let wsUrl = new URL(`ws://localhost:${port_or_socket}`);\n try {\n let conductor = new ConductorAppProxy(timeout);\n\n /** AppWebsocket */\n const appWs = await AppWebsocket.connect({url: wsUrl, defaultTimeout: timeout});\n\n /** AppAgentWebsocket */\n // const appAgentWs = await AppAgentWebsocket.connect(`ws://localhost:${process.env.HC_APP_PORT}`, \"playground\");\n // console.log(appAgentWs.appWebsocket);\n // const appWs = await appAgentWs.appWebsocket;\n\n conductor._appWs = appWs;\n conductor._appWs.on('signal', (sig) => {conductor.onSignal(sig)});\n return conductor;\n } catch (e) {\n console.error(\"ConductorAppProxy initialization failed\", e)\n return Promise.reject(\"ConductorAppProxy initialization failed\");\n }\n }\n }\n\n\n /** */\n private static async fromSocket(appWebsocket: AppWebsocket): Promise<ConductorAppProxy> {\n try {\n let conductor = new ConductorAppProxy(appWebsocket.defaultTimeout);\n conductor._appWs = appWebsocket;\n conductor._appWs.on('signal', (sig) => {conductor.onSignal(sig)})\n return conductor;\n } catch (e) {\n console.error(\"ConductorAppProxy initialization failed\", e)\n return Promise.reject(\"ConductorAppProxy initialization failed\");\n }\n }\n\n\n /** Ctor */\n /*protected*/ constructor(public defaultTimeout: number) {\n super(defaultTimeout);\n }\n\n}\n\n"]}
1
+ {"version":3,"file":"ConductorAppProxy.js","sourceRoot":"","sources":["../src/ConductorAppProxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAOZ,oBAAoB,EAWpB,kBAAkB,EAElB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,OAAO,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AAGlC;;;;;;;GAOG;AACH,MAAM,OAAO,iBAAkB,SAAQ,QAAQ;IAO7C,oBAAoB;IAEpB,mGAAmG;IACnG,8FAA8F;IAG9F,oDAAoD;IAEpD,KAAK,CAAC,QAAQ,CAAC,GAAoB,EAAE,OAAgB;QACnD,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAA;QACjD,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAC3C,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,CAAC,MAAO,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC;IAED,EAAE,CACA,SAAiC,EACjC,QAAqB;QAErB,OAAO,IAAI,CAAC,MAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAA+B;QACnD,mDAAmD;QACnD,OAAO,IAAI,CAAC,MAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAA+B;QACnD,mDAAmD;QACnD,OAAO,IAAI,CAAC,MAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAgC;QACrD,oDAAoD;QACpD,OAAO,IAAI,CAAC,MAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,iFAAiF;IACjF,2CAA2C;IAC3C,IAAI;IAGJ,MAAM;IACN,KAAK,CAAC,WAAW,CAAC,IAA2B;QAC3C,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvD,sBAAsB;QACtB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YAC7C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,iBAAiB,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;SAAuB,CAAC,CAAC;QAC7E,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7C,oBAAoB;QACpB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,iBAAiB;QACjB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,+DAA+D;YAC/D,WAAW;YACX,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;YACvE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE;gBACrC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;aACvC;YACD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;YACjF,KAAK;YACL,CAAC,IAAI,CAAC,CAAC;SACR;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAQD,IAAI,eAAe,KAAmD,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAA,CAAC;IAItG,qBAAqB;IAEnB,oBAAoB;IACpB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,cAAqC,EAAE,KAAqB,EAAE,QAAc,EAAE,cAAuB;QACpH,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC;QAC5D,IAAI,OAAO,cAAc,IAAI,QAAQ,EAAE;YACrC,OAAQ,iBAAiB,CAAC,UAAU,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;SAC/D;aAAM;YACL,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,kBAAkB,cAAc,EAAE,CAAC,CAAC;YACxD,IAAI;gBACF,IAAI,KAAK,CAAC;gBACV,IAAI,OAAuB,CAAC;gBAC5B,IAAI,QAAQ,EAAE;oBACZ,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,EAAC,GAAG,EAAE,QAAQ,EAAC,CAAC,CAAC;oBACxD,OAAO,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,CAAC;oBACvB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,2BAA2B,CAAC,EAAC,gBAAgB,EAAE,KAAK,EAAC,CAAC,CAAC;oBACpF,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;iBACtB;gBACD,IAAI,SAAS,GAAG,IAAI,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACxD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,EAAC,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC;gBACvF,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC;gBACzB,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,GAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA,CAAA,CAAC,CAAC,CAAC;gBAClE,OAAO,SAAS,CAAC;aAClB;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,CAAC,CAAC,CAAA;gBAC3D,OAAO,OAAO,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAC;aAClE;SACF;IACH,CAAC;IAGD,MAAM;IACE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,YAA0B,EAAE,cAAsB;QAChF,IAAI;YACF,IAAI,SAAS,GAAG,IAAI,iBAAiB,CAAC,cAAc,CAAC,CAAC;YACtD,SAAS,CAAC,MAAM,GAAG,YAAY,CAAC;YAChC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,GAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA,CAAA,CAAC,CAAC,CAAA;YACjE,OAAO,SAAS,CAAC;SAClB;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,CAAC,CAAC,CAAA;YAC3D,OAAO,OAAO,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAC;SAClE;IACH,CAAC;IAGD,WAAW;IACX,aAAa,CAAC,YAAmB,cAAsB,EAAE,OAAwB;QAC/E,KAAK,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QADA,mBAAc,GAAd,cAAc,CAAQ;QAtDvD,8BAA8B;QACtB,wBAAmB,GAAsC,EAAE,CAAC;QAC5D,qBAAgB,GAAkD,EAAE,CAAC;IAsD7E,CAAC;CAEF","sourcesContent":["import {\n AppInfoResponse,\n AppWebsocket,\n CallZomeRequest,\n InstalledAppId,\n CreateCloneCellRequest,\n DisableCloneCellRequest,\n EnableCloneCellRequest,\n ClonedCell,\n decodeHashFromBase64,\n DnaHashB64,\n NetworkInfo,\n NetworkInfoRequest,\n AgentPubKeyB64,\n Timestamp,\n AppClient,\n AppEvents,\n AppSignalCb,\n AppNetworkInfoRequest,\n NetworkInfoResponse,\n encodeHashToBase64,\n AppAuthenticationToken,\n AdminWebsocket,\n} from \"@holochain/client\";\nimport { UnsubscribeFunction } from \"emittery\";\nimport {AppProxy} from \"./AppProxy\";\nimport {CellIdStr} from \"./types\";\n\n\n/**\n * Creates, connects and holds an appWebsocket.\n * Creates and holds Cell proxies for this appWebsocket.\n * Maintains a mapping between CellIds and HCLs\n * Handles SignalHandlers per HCL\n * Stores appSignal logs\n * TODO Implement Singleton per App port?\n */\nexport class ConductorAppProxy extends AppProxy implements AppClient {\n\n /** -- Fields -- */\n\n private _appWs!: AppWebsocket;\n\n\n /** -- Getters -- */\n\n ///** Check this after connecting since AppWebsocket can shamelessly override the provided args. */\n //get appIdOfShame(): InstalledAppId | undefined { return this._appWs.overrideInstalledAppId;}\n\n\n /** -- AppClient (Passthrough to appWebsocket) -- */\n\n async callZome(req: CallZomeRequest, timeout?: number): Promise<unknown> {\n timeout = timeout ? timeout : this.defaultTimeout\n return this._appWs.callZome(req, timeout)\n }\n\n async appInfo(): Promise<AppInfoResponse> {\n return this._appWs!.appInfo();\n }\n\n on<Name extends keyof AppEvents>(\n eventName: Name | readonly Name[],\n listener: AppSignalCb\n ): UnsubscribeFunction {\n return this._appWs!.on(eventName, listener);\n }\n\n async createCloneCell(request: CreateCloneCellRequest): Promise<ClonedCell> {\n //console.log(\"createCloneCell() called:\", request)\n return this._appWs!.createCloneCell(request);\n }\n\n async enableCloneCell(request: EnableCloneCellRequest): Promise<ClonedCell> {\n //console.log(\"enableCloneCell() called:\", request)\n return this._appWs!.enableCloneCell(request);\n }\n\n async disableCloneCell(request: DisableCloneCellRequest): Promise<void> {\n //console.log(\"disableCloneCell() called:\", request)\n return this._appWs!.disableCloneCell(request);\n }\n\n // async networkInfo(args: AppNetworkInfoRequest): Promise<NetworkInfoResponse> {\n // return this._appWs!.networkInfo(args);\n // }\n\n\n /** */\n async networkInfo(args: AppNetworkInfoRequest): Promise<NetworkInfoResponse> {\n const agent = encodeHashToBase64(this._appWs.myPubKey);\n /* Call networkInfo */\n const response = await this._appWs.networkInfo({\n dnas: args.dnas,\n last_time_queried: this._lastTimeQueriedMap[agent]} as NetworkInfoRequest);\n this._lastTimeQueriedMap[agent] = Date.now();\n\n /* Convert result */\n let i = 0;\n //let result = {}\n for (const netInfo of response) {\n const dnaHash = encodeHashToBase64(args.dnas[i]);\n //result[dnaHash] = [this._lastTimeQueriedMap[agent], netInfo];\n /* Store */\n const cellIdStr = CellIdStr(args.dnas[i], decodeHashFromBase64(agent));\n if (!this._networkInfoLogs[cellIdStr]) {\n this._networkInfoLogs[cellIdStr] = [];\n }\n this._networkInfoLogs[cellIdStr].push([this._lastTimeQueriedMap[agent], netInfo])\n /* */\n i += 1;\n }\n return response;\n }\n\n\n\n /** Store networkInfo calls */\n private _lastTimeQueriedMap: Record<AgentPubKeyB64, Timestamp> = {};\n private _networkInfoLogs: Record<CellIdStr, [Timestamp, NetworkInfo][]> = {};\n\n get networkInfoLogs(): Record<CellIdStr, [Timestamp, NetworkInfo][]> {return this._networkInfoLogs;}\n\n\n\n/** -- Creation -- */\n\n /** async Factory */\n static async new(port_or_socket: number | AppWebsocket, appId: InstalledAppId, adminUrl?: URL, defaultTimeout?: number): Promise<ConductorAppProxy> {\n const timeout = defaultTimeout ? defaultTimeout : 10 * 1000;\n if (typeof port_or_socket == 'object') {\n return ConductorAppProxy.fromSocket(port_or_socket, timeout);\n } else {\n let wsUrl = new URL(`ws://localhost:${port_or_socket}`);\n try {\n let token;\n let adminWs: AdminWebsocket;\n if (adminUrl) {\n adminWs = await AdminWebsocket.connect({url: adminUrl});\n console.log({adminWs});\n const issued = await adminWs.issueAppAuthenticationToken({installed_app_id: appId});\n token = issued.token;\n }\n let conductor = new ConductorAppProxy(timeout, adminWs);\n const appWs = await AppWebsocket.connect({url: wsUrl, defaultTimeout: timeout, token});\n conductor._appWs = appWs;\n conductor._appWs.on('signal', (sig) => {conductor.onSignal(sig)});\n return conductor;\n } catch (e) {\n console.error(\"ConductorAppProxy initialization failed\", e)\n return Promise.reject(\"ConductorAppProxy initialization failed\");\n }\n }\n }\n\n\n /** */\n private static async fromSocket(appWebsocket: AppWebsocket, defaultTimeout: number): Promise<ConductorAppProxy> {\n try {\n let conductor = new ConductorAppProxy(defaultTimeout);\n conductor._appWs = appWebsocket;\n conductor._appWs.on('signal', (sig) => {conductor.onSignal(sig)})\n return conductor;\n } catch (e) {\n console.error(\"ConductorAppProxy initialization failed\", e)\n return Promise.reject(\"ConductorAppProxy initialization failed\");\n }\n }\n\n\n /** Ctor */\n /*protected*/ constructor(public defaultTimeout: number, adminWs?: AdminWebsocket) {\n super(defaultTimeout, adminWs);\n }\n\n}\n\n"]}
@@ -1,15 +1,19 @@
1
- import { AppApi, AppInfoRequest, AppInfoResponse, CallZomeRequest, DisableCloneCellRequest, EnableCloneCellRequest, ClonedCell } from "@holochain/client";
1
+ import { AppInfoResponse, CallZomeRequest, DisableCloneCellRequest, EnableCloneCellRequest, ClonedCell, AppClient, AppEvents, AppSignalCb, AppCreateCloneCellRequest, CreateCloneCellResponse, AppNetworkInfoRequest, NetworkInfoResponse } from "@holochain/client";
2
+ import { UnsubscribeFunction } from "emittery";
2
3
  import { AppProxy } from "./AppProxy";
3
4
  /**
4
5
  *
5
6
  */
6
- export declare class ExternalAppProxy extends AppProxy implements AppApi {
7
- private _appApi;
7
+ export declare class ExternalAppProxy extends AppProxy implements AppClient {
8
+ private _appClient;
8
9
  /** Ctor */
9
- constructor(_appApi: AppApi, defaultTimeout: number);
10
- /** -- AppApi (Passthrough to external AppApi) -- */
10
+ constructor(_appClient: AppClient, defaultTimeout: number);
11
+ /** -- AppClient (Passthrough to external AppClient) -- */
12
+ callZome(req: CallZomeRequest, timeout?: number): Promise<unknown>;
13
+ on<Name extends keyof AppEvents>(eventName: Name | readonly Name[], listener: AppSignalCb): UnsubscribeFunction;
14
+ appInfo(): Promise<AppInfoResponse>;
15
+ createCloneCell(request: AppCreateCloneCellRequest): Promise<CreateCloneCellResponse>;
11
16
  enableCloneCell(request: EnableCloneCellRequest): Promise<ClonedCell>;
12
17
  disableCloneCell(request: DisableCloneCellRequest): Promise<void>;
13
- appInfo(args: AppInfoRequest): Promise<AppInfoResponse>;
14
- callZome(req: CallZomeRequest, timeout?: number): Promise<unknown>;
18
+ networkInfo(args: AppNetworkInfoRequest): Promise<NetworkInfoResponse>;
15
19
  }
@@ -4,25 +4,34 @@ import { AppProxy } from "./AppProxy";
4
4
  */
5
5
  export class ExternalAppProxy extends AppProxy {
6
6
  /** Ctor */
7
- /*protected*/ constructor(_appApi, defaultTimeout) {
7
+ /*protected*/ constructor(_appClient, defaultTimeout) {
8
8
  super(defaultTimeout);
9
- this._appApi = _appApi;
9
+ this._appClient = _appClient;
10
+ }
11
+ /** -- AppClient (Passthrough to external AppClient) -- */
12
+ //get myPubKey(): AgentPubKey { return this._appClient.myPubKey}
13
+ //get installedAppId(): InstalledAppId { return this._appClient.installedAppId}
14
+ async callZome(req, timeout) {
15
+ timeout = timeout ? timeout : this.defaultTimeout;
16
+ return this._appClient.callZome(req, timeout);
17
+ }
18
+ on(eventName, listener) {
19
+ return this._appClient.on(eventName, listener);
20
+ }
21
+ async appInfo() {
22
+ return this._appClient.appInfo();
23
+ }
24
+ async createCloneCell(request) {
25
+ return this._appClient.createCloneCell(request);
10
26
  }
11
- /** -- AppApi (Passthrough to external AppApi) -- */
12
27
  async enableCloneCell(request) {
13
- //console.log("enableCloneCell() called:", request)
14
- return this._appApi.enableCloneCell(request);
28
+ return this._appClient.enableCloneCell(request);
15
29
  }
16
30
  async disableCloneCell(request) {
17
- //console.log("disableCloneCell() called:", request)
18
- return this._appApi.disableCloneCell(request);
19
- }
20
- async appInfo(args) {
21
- return this._appApi.appInfo(args);
31
+ return this._appClient.disableCloneCell(request);
22
32
  }
23
- async callZome(req, timeout) {
24
- timeout = timeout ? timeout : this.defaultTimeout;
25
- return this._appApi.callZome(req, timeout);
33
+ networkInfo(args) {
34
+ return this._appClient.networkInfo(args);
26
35
  }
27
36
  }
28
37
  //# sourceMappingURL=ExternalAppProxy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExternalAppProxy.js","sourceRoot":"","sources":["../src/ExternalAppProxy.ts"],"names":[],"mappings":"AASA,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AAGpC;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,QAAQ;IAE5C,WAAW;IACX,aAAa,CAAC,YAAoB,OAAe,EAAE,cAAsB;QACvE,KAAK,CAAC,cAAc,CAAC,CAAC;QADU,YAAO,GAAP,OAAO,CAAQ;IAEjD,CAAC;IAID,oDAAoD;IAEpD,KAAK,CAAC,eAAe,CAAC,OAA+B;QACnD,mDAAmD;QACnD,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAgC;QACrD,oDAAoD;QACpD,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,IAAoB;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAoB,EAAE,OAAgB;QACnD,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAA;QACjD,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAC5C,CAAC;CAGF","sourcesContent":["import {\n AppApi,\n AppInfoRequest,\n AppInfoResponse,\n CallZomeRequest,\n DisableCloneCellRequest,\n EnableCloneCellRequest,\n ClonedCell,\n} from \"@holochain/client\";\nimport {AppProxy} from \"./AppProxy\";\n\n\n/**\n *\n */\nexport class ExternalAppProxy extends AppProxy implements AppApi {\n\n /** Ctor */\n /*protected*/ constructor(private _appApi: AppApi, defaultTimeout: number) {\n super(defaultTimeout);\n }\n\n\n\n /** -- AppApi (Passthrough to external AppApi) -- */\n\n async enableCloneCell(request: EnableCloneCellRequest): Promise<ClonedCell> {\n //console.log(\"enableCloneCell() called:\", request)\n return this._appApi.enableCloneCell(request);\n }\n\n async disableCloneCell(request: DisableCloneCellRequest): Promise<void> {\n //console.log(\"disableCloneCell() called:\", request)\n return this._appApi.disableCloneCell(request);\n }\n async appInfo(args: AppInfoRequest): Promise<AppInfoResponse> {\n return this._appApi.appInfo(args);\n }\n\n async callZome(req: CallZomeRequest, timeout?: number): Promise<unknown> {\n timeout = timeout ? timeout : this.defaultTimeout\n return this._appApi.callZome(req, timeout)\n }\n\n\n}\n\n"]}
1
+ {"version":3,"file":"ExternalAppProxy.js","sourceRoot":"","sources":["../src/ExternalAppProxy.ts"],"names":[],"mappings":"AAcA,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AAIpC;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,QAAQ;IAE5C,WAAW;IACX,aAAa,CAAC,YAAoB,UAAqB,EAAE,cAAsB;QAC7E,KAAK,CAAC,cAAc,CAAC,CAAC;QADU,eAAU,GAAV,UAAU,CAAW;IAEvD,CAAC;IAID,0DAA0D;IAE1D,gEAAgE;IAChE,+EAA+E;IAE/E,KAAK,CAAC,QAAQ,CAAC,GAAoB,EAAE,OAAgB;QACnD,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAA;QACjD,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAC/C,CAAC;IAED,EAAE,CACA,SAAiC,EACjC,QAAqB;QAErB,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAkC;QACtD,OAAO,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAA+B;QACnD,OAAO,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAgC;QACrD,OAAO,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,WAAW,CAAC,IAA2B;QACrC,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;CAEF","sourcesContent":["import {\n AppInfoResponse,\n CallZomeRequest,\n DisableCloneCellRequest,\n EnableCloneCellRequest,\n ClonedCell,\n AppClient,\n AppEvents,\n AppSignalCb,\n AppCreateCloneCellRequest,\n CreateCloneCellResponse,\n AppNetworkInfoRequest, NetworkInfoResponse, AgentPubKeyB64, InstalledAppId,\n} from \"@holochain/client\";\nimport { UnsubscribeFunction } from \"emittery\";\nimport {AppProxy} from \"./AppProxy\";\nimport {AgentPubKey} from \"@holochain/client/lib/types\";\n\n\n/**\n *\n */\nexport class ExternalAppProxy extends AppProxy implements AppClient {\n\n /** Ctor */\n /*protected*/ constructor(private _appClient: AppClient, defaultTimeout: number) {\n super(defaultTimeout);\n }\n\n\n\n /** -- AppClient (Passthrough to external AppClient) -- */\n\n //get myPubKey(): AgentPubKey { return this._appClient.myPubKey}\n //get installedAppId(): InstalledAppId { return this._appClient.installedAppId}\n\n async callZome(req: CallZomeRequest, timeout?: number): Promise<unknown> {\n timeout = timeout ? timeout : this.defaultTimeout\n return this._appClient.callZome(req, timeout)\n }\n\n on<Name extends keyof AppEvents>(\n eventName: Name | readonly Name[],\n listener: AppSignalCb\n ): UnsubscribeFunction {\n return this._appClient.on(eventName, listener);\n }\n\n async appInfo(): Promise<AppInfoResponse> {\n return this._appClient.appInfo();\n }\n\n async createCloneCell(request: AppCreateCloneCellRequest): Promise<CreateCloneCellResponse> {\n return this._appClient.createCloneCell(request);\n }\n\n async enableCloneCell(request: EnableCloneCellRequest): Promise<ClonedCell> {\n return this._appClient.enableCloneCell(request);\n }\n\n async disableCloneCell(request: DisableCloneCellRequest): Promise<void> {\n return this._appClient.disableCloneCell(request);\n }\n\n networkInfo(args: AppNetworkInfoRequest): Promise<NetworkInfoResponse> {\n return this._appClient.networkInfo(args);\n }\n\n}\n\n"]}
@@ -28,6 +28,8 @@ export declare abstract class ZomeProxy extends ZomeProxy_base {
28
28
  protected call(fnName: FunctionName, payload: any, maybeSecret?: CapSecret, timeout?: number): Promise<any>;
29
29
  /** Helper for calling a zome function on its zome */
30
30
  protected callBlocking(fnName: FunctionName, payload: any, maybeSecret?: CapSecret, timeout?: number): Promise<any>;
31
+ /** Helper for calling a zome function on its zome */
32
+ protected callZomeBlockPostCommit(entryType: string, fnName: FunctionName, payload: any, maybeSecret?: CapSecret, timeout?: number): Promise<any>;
31
33
  /** */
32
34
  zomeInfo(): Promise<ZomeInfo>;
33
35
  /** */
package/dist/ZomeProxy.js CHANGED
@@ -48,6 +48,15 @@ export class ZomeProxy extends CellMixin(ZomeSpecific) {
48
48
  const cap_secret = maybeSecret ? maybeSecret : null;
49
49
  return this._cellProxy.callZomeBlocking(this.zomeName, fnName, payload, cap_secret, timeout);
50
50
  }
51
+ /** Helper for calling a zome function on its zome */
52
+ async callZomeBlockPostCommit(entryType, fnName, payload, maybeSecret, timeout) {
53
+ //console.log("ZomeProxy.call", this.zomeName)
54
+ if (!this.constructor.FN_NAMES.includes(fnName)) {
55
+ return Promise.reject(`Function "${fnName}()" not part of zome "${this.zomeName}"`);
56
+ }
57
+ const cap_secret = maybeSecret ? maybeSecret : null;
58
+ return this._cellProxy.callZomeBlockPostCommit(entryType, this.zomeName, fnName, payload, cap_secret, timeout);
59
+ }
51
60
  /** */
52
61
  async zomeInfo() {
53
62
  return this._cellProxy.callZomeInfo(this.zomeName);
@@ -1 +1 @@
1
- {"version":3,"file":"ZomeProxy.js","sourceRoot":"","sources":["../src/ZomeProxy.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAE,YAAY,EAAC,MAAM,UAAU,CAAC;AAOjD;;;GAGG;AACH,MAAM,OAAgB,SAAU,SAAQ,SAAS,CAAC,YAAY,CAAC;IAE7D,WAAW;IACX,YAAsB,UAAqB,EAAE,QAAmB;QAC9D,KAAK,EAAE,CAAC;QADY,eAAU,GAAV,UAAU,CAAW;QAEzC,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;SAC1B;aAAM;YACL,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;gBACzB,MAAM,KAAK,CAAC,6CAA6C,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aACpF;SACF;QACD,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;IAC/B,CAAC;IAGD,4BAA4B;IAC5B,0BAA0B;IAC1B,+BAA+B;IAC/B,6BAA6B;IAC7B,KAAK;IACL,qHAAqH;IACrH,uCAAuC;IACvC,IAAI;IAEJ,qDAAqD;IAC3C,KAAK,CAAC,IAAI,CAAC,MAAoB,EAAE,OAAY,EAAE,WAAuB,EAAE,OAAgB;QAChG,8CAA8C;QAC9C,IAAI,CAAE,IAAI,CAAC,WAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YACxD,OAAO,OAAO,CAAC,MAAM,CAAC,aAAa,MAAM,yBAAyB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;SACrF;QACD,MAAM,UAAU,GAAG,WAAW;YAC5B,CAAC,CAAC,WAAW;YACb,uBAAuB;YACvB,mCAAmC;YACnC,CAAC,CAAC,IAAI,CAAC;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACvF,CAAC;IAED,qDAAqD;IAC3C,KAAK,CAAC,YAAY,CAAC,MAAoB,EAAE,OAAY,EAAE,WAAuB,EAAE,OAAgB;QACxG,8CAA8C;QAC9C,IAAI,CAAE,IAAI,CAAC,WAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YACxD,OAAO,OAAO,CAAC,MAAM,CAAC,aAAa,MAAM,yBAAyB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;SACrF;QACD,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;QACpD,OAAO,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC/F,CAAC;IAGD,MAAM;IACN,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,MAAM;IACN,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED,MAAM;IACN,KAAK,CAAC,aAAa,CAAC,QAAkB;QACpC,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;CACF","sourcesContent":["import {CapSecret, FunctionName, ZomeName} from \"@holochain/client\";\nimport {CellMixin, ZomeSpecific} from \"./mixins\";\nimport {CellProxy} from \"./CellProxy\";\nimport {DnaInfo, ZomeInfo} from \"./types\";\n\nexport type ZomeProxyConstructor = {new(cellProxy: CellProxy, zomeName?: ZomeName): ZomeProxy} & typeof ZomeSpecific;\n\n\n/**\n * ABC for representing the zome function bindings of a Zome.\n * It holds the zomeName and reference to a CellProxy.\n */\nexport abstract class ZomeProxy extends CellMixin(ZomeSpecific) {\n\n /** Ctor */\n constructor(protected _cellProxy: CellProxy, zomeName?: ZomeName) {\n super();\n if (zomeName) {\n this.zomeName = zomeName;\n } else {\n if (!this.defaultZomeName) {\n throw Error(\"zomeName not defined in ZomeProxy subclass \" + this.constructor.name);\n }\n }\n this._cell = _cellProxy.cell;\n }\n\n\n // private _signingProps?: {\n // capSecret: CapSecret;\n // keyPair: nacl.SignKeyPair;\n // signingKey: AgentPubKey;\n // };\n // setSigningProps(signingProps: { capSecret: CapSecret; keyPair: nacl.SignKeyPair; signingKey: AgentPubKey}): void {\n // this._signingProps = signingProps;\n // }\n\n /** Helper for calling a zome function on its zome */\n protected async call(fnName: FunctionName, payload: any, maybeSecret?: CapSecret, timeout?: number): Promise<any> {\n //console.log(\"ZomeProxy.call\", this.zomeName)\n if (!(this.constructor as any).FN_NAMES.includes(fnName)) {\n return Promise.reject(`Function \"${fnName}()\" not part of zome \"${this.zomeName}\"`);\n }\n const cap_secret = maybeSecret\n ? maybeSecret\n // : this._signingProps\n // ? this._signingProps.capSecret\n : null;\n return this._cellProxy.callZome(this.zomeName, fnName, payload, cap_secret, timeout);\n }\n\n /** Helper for calling a zome function on its zome */\n protected async callBlocking(fnName: FunctionName, payload: any, maybeSecret?: CapSecret, timeout?: number): Promise<any> {\n //console.log(\"ZomeProxy.call\", this.zomeName)\n if (!(this.constructor as any).FN_NAMES.includes(fnName)) {\n return Promise.reject(`Function \"${fnName}()\" not part of zome \"${this.zomeName}\"`);\n }\n const cap_secret = maybeSecret ? maybeSecret : null;\n return this._cellProxy.callZomeBlocking(this.zomeName, fnName, payload, cap_secret, timeout);\n }\n\n\n /** */\n async zomeInfo(): Promise<ZomeInfo> {\n return this._cellProxy.callZomeInfo(this.zomeName);\n }\n\n /** */\n async dnaInfo(): Promise<DnaInfo> {\n return this._cellProxy.callDnaInfo(this.zomeName);\n }\n\n /** */\n async callEntryDefs(zomeName: ZomeName): Promise<[string, boolean][]> {\n return this._cellProxy.callEntryDefs(zomeName);\n }\n}\n"]}
1
+ {"version":3,"file":"ZomeProxy.js","sourceRoot":"","sources":["../src/ZomeProxy.ts"],"names":[],"mappings":"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","sourcesContent":["import {CapSecret, FunctionName, ZomeName} from \"@holochain/client\";\nimport {CellMixin, ZomeSpecific} from \"./mixins\";\nimport {CellProxy} from \"./CellProxy\";\nimport {DnaInfo, ZomeInfo} from \"./types\";\n\nexport type ZomeProxyConstructor = {new(cellProxy: CellProxy, zomeName?: ZomeName): ZomeProxy} & typeof ZomeSpecific;\n\n\n/**\n * ABC for representing the zome function bindings of a Zome.\n * It holds the zomeName and reference to a CellProxy.\n */\nexport abstract class ZomeProxy extends CellMixin(ZomeSpecific) {\n\n /** Ctor */\n constructor(protected _cellProxy: CellProxy, zomeName?: ZomeName) {\n super();\n if (zomeName) {\n this.zomeName = zomeName;\n } else {\n if (!this.defaultZomeName) {\n throw Error(\"zomeName not defined in ZomeProxy subclass \" + this.constructor.name);\n }\n }\n this._cell = _cellProxy.cell;\n }\n\n\n // private _signingProps?: {\n // capSecret: CapSecret;\n // keyPair: nacl.SignKeyPair;\n // signingKey: AgentPubKey;\n // };\n // setSigningProps(signingProps: { capSecret: CapSecret; keyPair: nacl.SignKeyPair; signingKey: AgentPubKey}): void {\n // this._signingProps = signingProps;\n // }\n\n\n /** Helper for calling a zome function on its zome */\n protected async call(fnName: FunctionName, payload: any, maybeSecret?: CapSecret, timeout?: number): Promise<any> {\n //console.log(\"ZomeProxy.call\", this.zomeName)\n if (!(this.constructor as any).FN_NAMES.includes(fnName)) {\n return Promise.reject(`Function \"${fnName}()\" not part of zome \"${this.zomeName}\"`);\n }\n const cap_secret = maybeSecret\n ? maybeSecret\n // : this._signingProps\n // ? this._signingProps.capSecret\n : null;\n return this._cellProxy.callZome(this.zomeName, fnName, payload, cap_secret, timeout);\n }\n\n\n /** Helper for calling a zome function on its zome */\n protected async callBlocking(fnName: FunctionName, payload: any, maybeSecret?: CapSecret, timeout?: number): Promise<any> {\n //console.log(\"ZomeProxy.call\", this.zomeName)\n if (!(this.constructor as any).FN_NAMES.includes(fnName)) {\n return Promise.reject(`Function \"${fnName}()\" not part of zome \"${this.zomeName}\"`);\n }\n const cap_secret = maybeSecret ? maybeSecret : null;\n return this._cellProxy.callZomeBlocking(this.zomeName, fnName, payload, cap_secret, timeout);\n }\n\n\n /** Helper for calling a zome function on its zome */\n protected async callZomeBlockPostCommit(entryType: string, fnName: FunctionName, payload: any, maybeSecret?: CapSecret, timeout?: number): Promise<any> {\n //console.log(\"ZomeProxy.call\", this.zomeName)\n if (!(this.constructor as any).FN_NAMES.includes(fnName)) {\n return Promise.reject(`Function \"${fnName}()\" not part of zome \"${this.zomeName}\"`);\n }\n const cap_secret = maybeSecret ? maybeSecret : null;\n return this._cellProxy.callZomeBlockPostCommit(entryType, this.zomeName, fnName, payload, cap_secret, timeout);\n }\n\n\n /** */\n async zomeInfo(): Promise<ZomeInfo> {\n return this._cellProxy.callZomeInfo(this.zomeName);\n }\n\n /** */\n async dnaInfo(): Promise<DnaInfo> {\n return this._cellProxy.callDnaInfo(this.zomeName);\n }\n\n /** */\n async callEntryDefs(zomeName: ZomeName): Promise<[string, boolean][]> {\n return this._cellProxy.callEntryDefs(zomeName);\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ddd-qc/cell-proxy",
3
- "version": "0.23.1",
3
+ "version": "0.24.0",
4
4
  "description": "Proxy classes and helpers for managing a Holochain AppWebsocket",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -27,7 +27,7 @@
27
27
  "typescript": "~5.2.0"
28
28
  },
29
29
  "dependencies": {
30
- "@holochain/client": "^0.17.0-dev.3",
30
+ "@holochain/client": "^0.18.0-dev.1",
31
31
  "async-mutex": "0.4.0"
32
32
  }
33
33
  }