@ddd-qc/cell-proxy 0.24.6 → 0.25.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,7 +1,7 @@
1
1
  import { AdminWebsocket, AppClient, AppEvents, AppInfoResponse, AppNetworkInfoRequest, AppSignal, AppSignalCb, CallZomeRequest, CellId, ClonedCell, CreateCloneCellRequest, DisableCloneCellRequest, EnableCloneCellRequest, InstalledAppId, NetworkInfo, NetworkInfoResponse, Timestamp, ZomeName } from "@holochain/client";
2
2
  import { UnsubscribeFunction } from "emittery";
3
3
  import { CellProxy } from "./CellProxy";
4
- import { BaseRoleName, CellIdStr, CellsForRole, LitHappSignal, RoleCellsMap, SignalPayload, SignalType, SystemSignal } from "./types";
4
+ import { BaseRoleName, CellIdStr, CellsForRole, LitHappSignal, RoleCellsMap } from "./types";
5
5
  import { HCL, HCLString } from "./hcl";
6
6
  import { Cell } from "./cell";
7
7
  import { AgentPubKey } from "@holochain/client/lib/types";
@@ -12,9 +12,10 @@ export interface SignalUnsubscriber {
12
12
  export interface SignalLog {
13
13
  ts: Timestamp;
14
14
  cellId: CellIdStr;
15
- zome_name: string;
16
- type: SignalType;
17
- payload: SignalPayload;
15
+ zomeName: string;
16
+ type: string;
17
+ pulseCount: number;
18
+ zomeSignal: LitHappSignal;
18
19
  }
19
20
  /**
20
21
  * Creates and holds Cell proxies.
@@ -87,30 +88,7 @@ export declare class AppProxy implements AppClient {
87
88
  /** Log all signals received */
88
89
  protected logSignal(signal: AppSignal): void;
89
90
  /** */
90
- determineSignalType(appSignal: AppSignal): [SignalType, unknown | SystemSignal | LitHappSignal];
91
+ intoZomeSignal(appSignal: AppSignal): LitHappSignal | undefined;
91
92
  /** */
92
93
  dumpSignalLogs(canAppSignals: boolean, cellId?: CellId, zomeName?: ZomeName): void;
93
94
  }
94
- /** WARN: must be up-to-date with Rust code */
95
- /** Protocol for notifying the ViewModel (UI) of system level events */
96
- export type SystemSignalProtocolVariantPostCommitStart = {
97
- type: "PostCommitStart";
98
- entry_type: string;
99
- };
100
- export type SystemSignalProtocolVariantPostCommitEnd = {
101
- type: "PostCommitEnd";
102
- entry_type: string;
103
- succeeded: boolean;
104
- };
105
- export type SystemSignalProtocolVariantSelfCallStart = {
106
- type: "SelfCallStart";
107
- zome_name: string;
108
- fnName: string;
109
- };
110
- export type SystemSignalProtocolVariantSelfCallEnd = {
111
- type: "SelfCallEnd";
112
- zome_name: string;
113
- fn_name: string;
114
- succeeded: boolean;
115
- };
116
- export type SystemSignalProtocol = SystemSignalProtocolVariantPostCommitStart | SystemSignalProtocolVariantPostCommitEnd | SystemSignalProtocolVariantSelfCallStart | SystemSignalProtocolVariantSelfCallEnd;
package/dist/AppProxy.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { CellType, encodeHashToBase64, } from "@holochain/client";
2
2
  import { CellProxy } from "./CellProxy";
3
- import { CellIdStr, SignalType } from "./types";
3
+ import { CellIdStr, SignalType, } from "./types";
4
4
  import { areCellsEqual, prettyDate, printAppInfo } from "./utils";
5
5
  import { HCL } from "./hcl";
6
6
  import { Cell } from "./cell";
@@ -276,45 +276,58 @@ export class AppProxy {
276
276
  }
277
277
  /** Log all signals received */
278
278
  logSignal(signal) {
279
- const [signalType, payload] = this.determineSignalType(signal);
280
- //console.log("signal logged", signal, isSystem)
281
- this._signalLogs.push({ ts: Date.now(), cellId: CellIdStr(signal.cell_id), zome_name: signal.zome_name, payload, type: signalType });
279
+ const zomeSignal = this.intoZomeSignal(signal);
280
+ const log = { ts: Date.now(), cellId: CellIdStr(signal.cell_id), zomeName: signal.zome_name, zomeSignal, type: SignalType.Unknown, pulseCount: 1 };
281
+ if (zomeSignal) {
282
+ log.pulseCount = zomeSignal.pulses.length;
283
+ if (zomeSignal.pulses.length == 0) {
284
+ log.type = SignalType.Empty;
285
+ }
286
+ else {
287
+ log.type = SignalType.Zome;
288
+ }
289
+ }
290
+ this._signalLogs.push(log);
282
291
  }
283
292
  /** */
284
- determineSignalType(appSignal) {
293
+ intoZomeSignal(appSignal) {
285
294
  if (typeof appSignal.payload !== 'object' || Array.isArray(appSignal.payload) || appSignal.payload === null) {
286
- return [SignalType.Unknown, appSignal.payload];
295
+ return;
287
296
  }
288
297
  const payload = appSignal.payload;
289
298
  if ("pulses" in payload && "from" in payload) {
290
- return [SignalType.LitHapp, appSignal.payload];
291
- }
292
- if ("System" in payload) {
293
- return [SignalType.System, appSignal.payload];
299
+ return appSignal.payload;
294
300
  }
295
- return [SignalType.Unknown, appSignal.payload];
301
+ return;
296
302
  }
297
303
  /** */
298
304
  dumpSignalLogs(canAppSignals, cellId, zomeName) {
299
305
  const me = encodeHashToBase64(this.myPubKey);
300
- let signals = this._signalLogs;
306
+ let logs = this._signalLogs;
301
307
  /** Filter by cell and zome */
302
308
  let cellNames;
303
309
  if (cellId) {
304
310
  const cellStr = CellIdStr(cellId);
305
311
  const hcls = this._hclMap[cellStr];
306
312
  cellNames = hcls.map((hcl) => this.getCellName(hcl));
307
- signals = this._signalLogs
313
+ logs = this._signalLogs
308
314
  .filter((log) => log.cellId == cellStr);
309
315
  if (zomeName) {
310
- signals = this._signalLogs
311
- .filter((log) => log.zome_name == zomeName);
316
+ logs = this._signalLogs
317
+ .filter((log) => log.zomeName == zomeName);
312
318
  }
313
319
  }
314
320
  /** Seperate by type */
315
- const unknownSignals = signals.filter((log) => log.type == SignalType.Unknown);
316
- const sysSignals = signals.filter((log) => log.type == SignalType.System);
317
- const appSignals = signals.filter((log) => log.type == SignalType.LitHapp);
321
+ const unknownSignals = logs.filter((log) => log.type == SignalType.Unknown);
322
+ const zomeSignals = logs.filter((log) => log.type == SignalType.Zome);
323
+ const appSignals = zomeSignals.filter((log) => {
324
+ const type = Object.keys(log.zomeSignal.pulses[0])[0];
325
+ type != "System";
326
+ });
327
+ const sysSignals = zomeSignals.filter((log) => {
328
+ const type = Object.keys(log.zomeSignal.pulses[0])[0];
329
+ type == "System";
330
+ });
318
331
  /** Dump unknown signals */
319
332
  if (unknownSignals.length) {
320
333
  let logs;
@@ -322,43 +335,49 @@ export class AppProxy {
322
335
  console.error(`Unknown signals from zome "${zomeName}": ${unknownSignals.length}`);
323
336
  logs = unknownSignals
324
337
  .map((log) => {
325
- return { timestamp: prettyDate(new Date(log.ts)), payload: log.payload };
338
+ return { timestamp: prettyDate(new Date(log.ts)), payload: log.zomeSignal };
326
339
  });
327
340
  }
328
341
  else {
329
342
  console.error(`Unknown signals: ${unknownSignals.length}`);
330
343
  logs = unknownSignals
331
344
  .map((log) => {
332
- return { timestamp: prettyDate(new Date(log.ts)), zome: log.zome_name, payload: log.payload };
345
+ return { timestamp: prettyDate(new Date(log.ts)), zome: log.zomeName, payload: log.zomeSignal };
333
346
  });
334
347
  }
335
348
  console.table(logs);
336
349
  }
337
350
  /** Dump System signals */
338
- let syslogs;
351
+ let syslogs = [];
339
352
  if (cellNames) {
340
353
  if (zomeName) {
341
354
  console.warn(`Unknown signals from zome "${zomeName}" in cell "${cellNames}"`);
342
- syslogs = sysSignals.map((log) => {
343
- const payload = log.payload.System;
344
- return { timestamp: prettyDate(new Date(log.ts)), payload };
355
+ sysSignals.map((log) => {
356
+ for (const pulse of log.zomeSignal.pulses) {
357
+ const payload = pulse.System;
358
+ syslogs.push({ timestamp: prettyDate(new Date(log.ts)), payload });
359
+ }
345
360
  });
346
361
  }
347
362
  else {
348
363
  console.warn(`System signals from cell "${cellNames}"`);
349
- syslogs = sysSignals.map((log) => {
350
- const payload = log.payload.System;
351
- return { timestamp: prettyDate(new Date(log.ts)), zome: log.zome_name, payload };
364
+ sysSignals.map((log) => {
365
+ for (const pulse of log.zomeSignal.pulses) {
366
+ const payload = pulse.System;
367
+ syslogs.push({ timestamp: prettyDate(new Date(log.ts)), zome: log.zomeName, payload });
368
+ }
352
369
  });
353
370
  }
354
371
  }
355
372
  else {
356
373
  console.warn(`System signals: ${sysSignals.length}`);
357
- syslogs = sysSignals.map((log) => {
374
+ sysSignals.map((log) => {
358
375
  const app = this._hclMap[log.cellId][0].appId;
359
376
  const cell = this._hclMap[log.cellId][0].roleName;
360
- const payload = log.payload.System;
361
- return { timestamp: prettyDate(new Date(log.ts)), app, cell, zome: log.zome_name, payload };
377
+ for (const pulse of log.zomeSignal.pulses) {
378
+ const payload = pulse.System;
379
+ syslogs.push({ timestamp: prettyDate(new Date(log.ts)), app, cell, zome: log.zomeName, payload });
380
+ }
362
381
  });
363
382
  }
364
383
  console.table(syslogs);
@@ -371,17 +390,17 @@ export class AppProxy {
371
390
  if (zomeName) {
372
391
  console.warn(`App signals from zome "${zomeName}" in cell "${cellNames}"`);
373
392
  appLogs = appSignals.map((log) => {
374
- const payload = log.payload;
375
- const from = encodeHashToBase64(payload.from) == me ? "self" : encodeHashToBase64(payload.from);
376
- return { timestamp: prettyDate(new Date(log.ts)), from, count: payload.pulses.length, payload: payload.pulses };
393
+ const pulses = log.zomeSignal.pulses;
394
+ const from = encodeHashToBase64(log.zomeSignal.from) == me ? "self" : encodeHashToBase64(log.zomeSignal.from);
395
+ return { timestamp: prettyDate(new Date(log.ts)), from, count: pulses.length, payload: pulses };
377
396
  });
378
397
  }
379
398
  else {
380
399
  console.warn(`App signals from cell "${cellNames}"`);
381
400
  appLogs = appSignals.map((log) => {
382
- const payload = log.payload;
383
- const from = encodeHashToBase64(payload.from) == me ? "self" : encodeHashToBase64(payload.from);
384
- return { timestamp: prettyDate(new Date(log.ts)), zome: log.zome_name, from, count: payload.pulses.length, payload: payload.pulses };
401
+ const pulses = log.zomeSignal.pulses;
402
+ const from = encodeHashToBase64(log.zomeSignal.from) == me ? "self" : encodeHashToBase64(log.zomeSignal.from);
403
+ return { timestamp: prettyDate(new Date(log.ts)), zome: log.zomeName, from, count: pulses.length, payload: pulses };
385
404
  });
386
405
  }
387
406
  }
@@ -390,9 +409,9 @@ export class AppProxy {
390
409
  appLogs = appSignals.map((log) => {
391
410
  const app = this._hclMap[log.cellId][0].appId;
392
411
  const cell = this._hclMap[log.cellId][0].roleName;
393
- const signal = log.payload;
394
- const from = encodeHashToBase64(signal.from) == me ? "self" : encodeHashToBase64(signal.from);
395
- return { timestamp: prettyDate(new Date(log.ts)), app, cell, zome: log.zome_name, from, count: signal.pulses.length, payload: signal.pulses };
412
+ const pulses = log.zomeSignal.pulses;
413
+ const from = encodeHashToBase64(log.zomeSignal.from) == me ? "self" : encodeHashToBase64(log.zomeSignal.from);
414
+ return { timestamp: prettyDate(new Date(log.ts)), app, cell, zome: log.zomeName, from, count: pulses.length, payload: pulses };
396
415
  });
397
416
  }
398
417
  console.table(appLogs);
@@ -1 +1 @@
1
- {"version":3,"file":"AppProxy.js","sourceRoot":"","sources":["../src/AppProxy.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AdminWebsocket,\n AppClient,\n AppEvents,\n AppInfoResponse,\n AppNetworkInfoRequest,\n AppSignal,\n AppSignalCb,\n CallZomeRequest,\n CellId,\n CellType,\n ClonedCell,\n CreateCloneCellRequest,\n DisableCloneCellRequest,\n EnableCloneCellRequest,\n encodeHashToBase64,\n InstalledAppId,\n NetworkInfo,\n NetworkInfoResponse,\n ProvisionedCell,\n Timestamp, ZomeName,\n} from \"@holochain/client\";\nimport {UnsubscribeFunction} from \"emittery\";\nimport {CellProxy} from \"./CellProxy\";\nimport {\n BaseRoleName,\n CellIdStr,\n CellsForRole,\n LitHappSignal,\n RoleCellsMap,\n SignalPayload,\n SignalType,\n SystemSignal\n} 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\nexport interface SignalLog {\n ts: Timestamp,\n cellId: CellIdStr,\n zome_name: string,\n type: SignalType,\n payload: SignalPayload,\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 logs */\n private _signalLogs: SignalLog[] = [];\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(): SignalLog[] { 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, appId: InstalledAppId, agentId: AgentPubKey, adminWs?: AdminWebsocket) {\n this.defaultTimeout = defaultTimeout;\n this.adminWs = adminWs;\n this.installedAppId = appId;\n this.myPubKey = agentId;\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 [signalType, payload] = this.determineSignalType(signal);\n //console.log(\"signal logged\", signal, isSystem)\n this._signalLogs.push({ts: Date.now(), cellId: CellIdStr(signal.cell_id), zome_name: signal.zome_name, payload, type: signalType})\n }\n\n\n /** */\n determineSignalType(appSignal: AppSignal): [SignalType, unknown | SystemSignal | LitHappSignal] {\n if (typeof appSignal.payload !== 'object' || Array.isArray(appSignal.payload) || appSignal.payload === null) {\n return [SignalType.Unknown, appSignal.payload];\n }\n const payload = appSignal.payload as Object;\n if (\"pulses\" in payload && \"from\" in payload) {\n return [SignalType.LitHapp, appSignal.payload as LitHappSignal];\n }\n if (\"System\" in payload) {\n return [SignalType.System, appSignal.payload as SystemSignal];\n }\n return [SignalType.Unknown, appSignal.payload];\n }\n\n\n /** */\n dumpSignalLogs(canAppSignals: boolean, cellId?: CellId, zomeName?: ZomeName) {\n const me = encodeHashToBase64(this.myPubKey);\n let signals = this._signalLogs;\n /** Filter by cell and zome */\n let cellNames;\n if (cellId) {\n const cellStr = CellIdStr(cellId);\n const hcls = this._hclMap[cellStr];\n cellNames = hcls.map((hcl) => this.getCellName(hcl));\n signals = this._signalLogs\n .filter((log) => log.cellId == cellStr);\n if (zomeName) {\n signals = this._signalLogs\n .filter((log) => log.zome_name == zomeName);\n }\n }\n /** Seperate by type */\n const unknownSignals = signals.filter((log) => log.type == SignalType.Unknown);\n const sysSignals = signals.filter((log) => log.type == SignalType.System);\n const appSignals = signals.filter((log) => log.type == SignalType.LitHapp);\n\n /** Dump unknown signals */\n if (unknownSignals.length) {\n let logs;\n if (zomeName) {\n console.error(`Unknown signals from zome \"${zomeName}\": ${unknownSignals.length}`);\n logs = unknownSignals\n .map((log) => {\n return {timestamp: prettyDate(new Date(log.ts)), payload: log.payload}\n });\n } else {\n console.error(`Unknown signals: ${unknownSignals.length}`);\n logs = unknownSignals\n .map((log) => {\n return {timestamp: prettyDate(new Date(log.ts)), zome: log.zome_name, payload: log.payload}\n });\n }\n console.table(logs);\n }\n\n /** Dump System signals */\n let syslogs;\n if (cellNames) {\n if (zomeName) {\n console.warn(`Unknown signals from zome \"${zomeName}\" in cell \"${cellNames}\"`);\n syslogs = sysSignals.map((log) => {\n const payload = (log.payload as SystemSignal).System;\n return {timestamp: prettyDate(new Date(log.ts)), payload}\n });\n } else {\n console.warn(`System signals from cell \"${cellNames}\"`);\n syslogs = sysSignals.map((log) => {\n const payload = (log.payload as SystemSignal).System;\n return {timestamp: prettyDate(new Date(log.ts)), zome: log.zome_name, payload}\n });\n }\n } else {\n console.warn(`System signals: ${sysSignals.length}`)\n syslogs = sysSignals.map((log) => {\n const app = this._hclMap[log.cellId][0].appId;\n const cell: string = this._hclMap[log.cellId][0].roleName;\n const payload = (log.payload as SystemSignal).System;\n return {timestamp: prettyDate(new Date(log.ts)), app, cell, zome: log.zome_name, payload};\n });\n }\n console.table(syslogs);\n\n /** Dump App signals */\n if (!canAppSignals) {\n return;\n }\n let appLogs;\n if (cellNames) {\n if (zomeName) {\n console.warn(`App signals from zome \"${zomeName}\" in cell \"${cellNames}\"`);\n appLogs = appSignals.map((log) => {\n const payload = log.payload as LitHappSignal;\n const from = encodeHashToBase64(payload.from) == me ? \"self\" : encodeHashToBase64(payload.from);\n return {timestamp: prettyDate(new Date(log.ts)), from, count: payload.pulses.length, payload: payload.pulses}\n });\n } else {\n console.warn(`App signals from cell \"${cellNames}\"`);\n appLogs = appSignals.map((log) => {\n const payload = log.payload as LitHappSignal;\n const from = encodeHashToBase64(payload.from) == me ? \"self\" : encodeHashToBase64(payload.from);\n return {timestamp: prettyDate(new Date(log.ts)), zome: log.zome_name, from, count: payload.pulses.length, payload: payload.pulses}\n });\n }\n } else {\n console.warn(`App signals: ${appSignals.length}`)\n appLogs = appSignals.map((log) => {\n const app = this._hclMap[log.cellId][0].appId;\n const cell: string = this._hclMap[log.cellId][0].roleName;\n const signal = log.payload as LitHappSignal;\n const from = encodeHashToBase64(signal.from) == me? \"self\" : encodeHashToBase64(signal.from);\n return { timestamp: prettyDate(new Date(log.ts)), app, cell, zome: log.zome_name, from, count: signal.pulses.length, payload: signal.pulses};\n });\n }\n console.table(appLogs);\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"]}
1
+ {"version":3,"file":"AppProxy.js","sourceRoot":"","sources":["../src/AppProxy.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AdminWebsocket,\n AppClient,\n AppEvents,\n AppInfoResponse,\n AppNetworkInfoRequest,\n AppSignal,\n AppSignalCb,\n CallZomeRequest,\n CellId,\n CellType,\n ClonedCell,\n CreateCloneCellRequest,\n DisableCloneCellRequest,\n EnableCloneCellRequest,\n encodeHashToBase64,\n InstalledAppId,\n NetworkInfo,\n NetworkInfoResponse,\n ProvisionedCell,\n Timestamp, ZomeName,\n} from \"@holochain/client\";\nimport {UnsubscribeFunction} from \"emittery\";\nimport {CellProxy} from \"./CellProxy\";\nimport {\n BaseRoleName,\n CellIdStr,\n CellsForRole,\n LitHappSignal,\n RoleCellsMap,\n SignalType, SystemPulse,\n} 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\nexport interface SignalLog {\n ts: Timestamp,\n cellId: CellIdStr,\n zomeName: string,\n type: string,\n pulseCount: number,\n zomeSignal: LitHappSignal,\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 logs */\n private _signalLogs: SignalLog[] = [];\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(): SignalLog[] { 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, appId: InstalledAppId, agentId: AgentPubKey, adminWs?: AdminWebsocket) {\n this.defaultTimeout = defaultTimeout;\n this.adminWs = adminWs;\n this.installedAppId = appId;\n this.myPubKey = agentId;\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 zomeSignal = this.intoZomeSignal(signal);\n const log: SignalLog = {ts: Date.now(), cellId: CellIdStr(signal.cell_id), zomeName: signal.zome_name, zomeSignal, type: SignalType.Unknown, pulseCount: 1};\n if (zomeSignal) {\n log.pulseCount = zomeSignal.pulses.length;\n if (zomeSignal.pulses.length == 0) {\n log.type = SignalType.Empty;\n } else {\n log.type = SignalType.Zome;\n }\n }\n this._signalLogs.push(log);\n }\n\n\n /** */\n intoZomeSignal(appSignal: AppSignal): LitHappSignal | undefined {\n if (typeof appSignal.payload !== 'object' || Array.isArray(appSignal.payload) || appSignal.payload === null) {\n return;\n }\n const payload = appSignal.payload as Object;\n if (\"pulses\" in payload && \"from\" in payload) {\n return appSignal.payload as LitHappSignal;\n }\n return;\n }\n\n\n /** */\n dumpSignalLogs(canAppSignals: boolean, cellId?: CellId, zomeName?: ZomeName) {\n const me = encodeHashToBase64(this.myPubKey);\n let logs = this._signalLogs;\n /** Filter by cell and zome */\n let cellNames;\n if (cellId) {\n const cellStr = CellIdStr(cellId);\n const hcls = this._hclMap[cellStr];\n cellNames = hcls.map((hcl) => this.getCellName(hcl));\n logs = this._signalLogs\n .filter((log) => log.cellId == cellStr);\n if (zomeName) {\n logs = this._signalLogs\n .filter((log) => log.zomeName == zomeName);\n }\n }\n /** Seperate by type */\n const unknownSignals = logs.filter((log) => log.type == SignalType.Unknown);\n const zomeSignals = logs.filter((log) => log.type == SignalType.Zome);\n const appSignals = zomeSignals.filter((log) => {\n const type = Object.keys(log.zomeSignal.pulses[0])[0];\n type != \"System\"\n });\n const sysSignals = zomeSignals.filter((log) => {\n const type = Object.keys(log.zomeSignal.pulses[0])[0];\n type == \"System\"\n });\n\n /** Dump unknown signals */\n if (unknownSignals.length) {\n let logs;\n if (zomeName) {\n console.error(`Unknown signals from zome \"${zomeName}\": ${unknownSignals.length}`);\n logs = unknownSignals\n .map((log) => {\n return {timestamp: prettyDate(new Date(log.ts)), payload: log.zomeSignal}\n });\n } else {\n console.error(`Unknown signals: ${unknownSignals.length}`);\n logs = unknownSignals\n .map((log) => {\n return {timestamp: prettyDate(new Date(log.ts)), zome: log.zomeName, payload: log.zomeSignal}\n });\n }\n console.table(logs);\n }\n\n /** Dump System signals */\n let syslogs = [];\n if (cellNames) {\n if (zomeName) {\n console.warn(`Unknown signals from zome \"${zomeName}\" in cell \"${cellNames}\"`);\n sysSignals.map((log) => {\n for (const pulse of log.zomeSignal.pulses) {\n const payload = (pulse as SystemPulse).System;\n syslogs.push({timestamp: prettyDate(new Date(log.ts)), payload});\n }\n });\n } else {\n console.warn(`System signals from cell \"${cellNames}\"`);\n sysSignals.map((log) => {\n for (const pulse of log.zomeSignal.pulses) {\n const payload = (pulse as SystemPulse).System;\n syslogs.push({timestamp: prettyDate(new Date(log.ts)), zome: log.zomeName, payload});\n }\n });\n }\n } else {\n console.warn(`System signals: ${sysSignals.length}`)\n sysSignals.map((log) => {\n const app = this._hclMap[log.cellId][0].appId;\n const cell: string = this._hclMap[log.cellId][0].roleName;\n for (const pulse of log.zomeSignal.pulses) {\n const payload = (pulse as SystemPulse).System;\n syslogs.push({timestamp: prettyDate(new Date(log.ts)), app, cell, zome: log.zomeName, payload});\n }\n });\n }\n console.table(syslogs);\n\n /** Dump App signals */\n if (!canAppSignals) {\n return;\n }\n let appLogs;\n if (cellNames) {\n if (zomeName) {\n console.warn(`App signals from zome \"${zomeName}\" in cell \"${cellNames}\"`);\n appLogs = appSignals.map((log) => {\n const pulses = log.zomeSignal.pulses;\n const from = encodeHashToBase64(log.zomeSignal.from) == me ? \"self\" : encodeHashToBase64(log.zomeSignal.from);\n return {timestamp: prettyDate(new Date(log.ts)), from, count: pulses.length, payload: pulses}\n });\n } else {\n console.warn(`App signals from cell \"${cellNames}\"`);\n appLogs = appSignals.map((log) => {\n const pulses = log.zomeSignal.pulses;\n const from = encodeHashToBase64(log.zomeSignal.from) == me ? \"self\" : encodeHashToBase64(log.zomeSignal.from);\n return {timestamp: prettyDate(new Date(log.ts)), zome: log.zomeName, from, count: pulses.length, payload: pulses}\n });\n }\n } else {\n console.warn(`App signals: ${appSignals.length}`)\n appLogs = appSignals.map((log) => {\n const app = this._hclMap[log.cellId][0].appId;\n const cell: string = this._hclMap[log.cellId][0].roleName;\n const pulses = log.zomeSignal.pulses;\n const from = encodeHashToBase64(log.zomeSignal.from) == me? \"self\" : encodeHashToBase64(log.zomeSignal.from);\n return { timestamp: prettyDate(new Date(log.ts)), app, cell, zome: log.zomeName, from, count: pulses.length, payload: pulses};\n });\n }\n console.table(appLogs);\n }\n}\n\n"]}
package/dist/CellProxy.js CHANGED
@@ -27,53 +27,64 @@ export class CellProxy extends CellMixin(Empty) {
27
27
  /*const _unsub =*/ this.addSignalHandler((sig) => this.blockUntilPostCommit(sig));
28
28
  }
29
29
  async blockUntilPostCommit(signal) {
30
- const [signalType, payload] = this._appProxy.determineSignalType(signal);
31
- //console.log("blockUntilPostCommit()", signalType, payload, this._postCommitReleaseEntryType, !!this._postCommitRelease);
32
- if (signalType != SignalType.System || !this._postCommitRelease || !this._postCommitReleaseEntryType) {
30
+ const zomeSignal = this._appProxy.intoZomeSignal(signal);
31
+ if (!zomeSignal || zomeSignal.pulses.length == 0) {
33
32
  return;
34
33
  }
35
- const sys = payload.System;
36
- if (sys.type !== "PostCommitEnd") {
34
+ console.debug("blockUntilPostCommit()", zomeSignal, this._postCommitReleaseEntryType, !!this._postCommitRelease);
35
+ const signalType = Object.keys(zomeSignal.pulses[0])[0];
36
+ if (signalType != "System" || !this._postCommitRelease || !this._postCommitReleaseEntryType) {
37
37
  return;
38
38
  }
39
- const end = sys;
40
- if (!end.succeeded) {
41
- this.dumpCallLogs(signal.zome_name);
42
- this.dumpSignalLogs(signal.zome_name);
43
- }
44
- if (end.entry_type !== this._postCommitReleaseEntryType) {
45
- return;
39
+ for (const pulse of zomeSignal.pulses) {
40
+ const sys = pulse.System;
41
+ if (sys.type !== "PostCommitNewEnd") {
42
+ continue;
43
+ }
44
+ const end = sys;
45
+ if (!end.succeeded) {
46
+ console.error("System call failed");
47
+ this.dumpCallLogs(signal.zome_name);
48
+ this.dumpSignalLogs(signal.zome_name);
49
+ }
50
+ if (end.app_entry_type !== this._postCommitReleaseEntryType) {
51
+ continue;
52
+ }
53
+ /** Release */
54
+ console.debug("blockUntilPostCommit() RELEASE");
55
+ this._postCommitRelease();
56
+ delete this._postCommitRelease;
57
+ delete this._postCommitReleaseEntryType;
58
+ break;
46
59
  }
47
- /** Release */
48
- //console.log("blockUntilPostCommit() RELEASE");
49
- this._postCommitRelease();
50
- delete this._postCommitRelease;
51
- delete this._postCommitReleaseEntryType;
52
60
  }
53
61
  async blockSelfCall(signal) {
54
- const [signalType, systemSignal] = this._appProxy.determineSignalType(signal);
55
- if (signalType != SignalType.System) {
62
+ const zomeSignal = this._appProxy.intoZomeSignal(signal);
63
+ if (!zomeSignal || zomeSignal.pulses.length == 0 || Object.keys(zomeSignal.pulses[0])[0] != 'System') {
56
64
  return;
57
65
  }
58
- const sys = systemSignal;
59
- if (sys.type == "SelfCallStart") {
60
- console.log("");
61
- /** Acquire lock */
62
- try {
63
- this._callMutex.acquire().then((r) => this._selfCallRelease = r);
66
+ for (const pulse of zomeSignal.pulses) {
67
+ const sys = pulse.System;
68
+ if (sys.type == "SelfCallStart") {
69
+ console.log("");
70
+ /** Acquire lock */
71
+ try {
72
+ this._callMutex.acquire().then((r) => this._selfCallRelease = r);
73
+ }
74
+ catch (e) {
75
+ console.error("A Zome self call is initialted during a writing zome call", e);
76
+ }
64
77
  }
65
- catch (e) {
66
- console.error("A Zome self call is initialted during a writing zome call", e);
67
- }
68
- }
69
- if (sys.type == "SelfCallEnd" && this._selfCallRelease) {
70
- /** Release */
71
- this._selfCallRelease();
72
- delete this._selfCallRelease;
73
- const end = sys;
74
- if (!end.succeeded) {
75
- this.dumpCallLogs(end.zome_name);
76
- this.dumpSignalLogs(end.zome_name);
78
+ if (sys.type == "SelfCallEnd" && this._selfCallRelease) {
79
+ /** Release */
80
+ this._selfCallRelease();
81
+ delete this._selfCallRelease;
82
+ const end = sys;
83
+ if (!end.succeeded) {
84
+ console.error("Call to self failed.");
85
+ this.dumpCallLogs(end.zome_name);
86
+ this.dumpSignalLogs(end.zome_name);
87
+ }
77
88
  }
78
89
  }
79
90
  }
@@ -208,7 +219,7 @@ export class CellProxy extends CellMixin(Empty) {
208
219
  async callEntryDefs(zomeName) {
209
220
  //console.log("callEntryDefs()", zomeName)
210
221
  try {
211
- const entryDefs = await this.callZome(zomeName, "entry_defs", null, null, 10 * 1000); // Need big timeout since holochain is slow when receiving simultaneous calls from multiple happs
222
+ const entryDefs = await this.callZome(zomeName, "entry_defs", null, null); // Need big timeout since holochain is slow when receiving simultaneous calls from multiple happs
212
223
  //console.debug("getEntryDefs() for " + this.zomeName + " result:")
213
224
  //console.log({entryDefs})
214
225
  let result = [];
@@ -291,15 +302,27 @@ export class CellProxy extends CellMixin(Empty) {
291
302
  console.table(result);
292
303
  /** Parse signal self-call logs */
293
304
  //console.log(this._appProxy.signalLogs)
294
- const startCalls = this._appProxy.signalLogs
295
- .filter((log) => log.type == SignalType.System && log.payload.type == "SelfCallStart")
296
- .map((log) => [log.ts, log.cellId, log.payload]);
297
- const endCalls = this._appProxy.signalLogs
298
- .filter((log) => log.type == SignalType.System && log.payload.type == "SelfCallEnd")
299
- .map((log) => [log.ts, log.cellId, log.payload]);
305
+ const zomeSignals = this._appProxy.signalLogs.filter((log) => log.type == SignalType.Zome);
306
+ const sysSignals = zomeSignals.filter((log) => {
307
+ const type = Object.keys(log.zomeSignal.pulses[0])[0];
308
+ type == "System";
309
+ });
310
+ const startCalls = [];
311
+ const endCalls = [];
312
+ sysSignals.map((log) => {
313
+ for (const pulse of log.zomeSignal.pulses) {
314
+ const sys = pulse.System;
315
+ if (sys.type == "SelfCallStart") {
316
+ startCalls.push([log.ts, log.cellId, sys]);
317
+ }
318
+ if (sys.type == "SelfCallEnd") {
319
+ endCalls.push([log.ts, log.cellId, sys]);
320
+ }
321
+ }
322
+ });
300
323
  let sigResults = [];
301
324
  for (const [startTs, startId, startSignal] of startCalls) {
302
- const index = endCalls.findIndex(([ts, cellId, signal]) => ts >= startTs && startId == cellId && startSignal.fnName == signal.fn_name);
325
+ const index = endCalls.findIndex(([ts, cellId, signal]) => ts >= startTs && startId == cellId && startSignal.fn_name == signal.fn_name);
303
326
  if (index == -1) {
304
327
  continue;
305
328
  }
@@ -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, SignalType, SystemSignal, ZomeInfo} from \"./types\";\nimport {Mutex, withTimeout} from \"async-mutex\";\nimport MutexInterface from \"async-mutex/lib/MutexInterface\";\nimport {\n AppProxy,\n SignalUnsubscriber,\n SystemSignalProtocol,\n 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 const [signalType, payload] = this._appProxy.determineSignalType(signal);\n //console.log(\"blockUntilPostCommit()\", signalType, payload, this._postCommitReleaseEntryType, !!this._postCommitRelease);\n if (signalType != SignalType.System || !this._postCommitRelease || !this._postCommitReleaseEntryType) {\n return;\n }\n const sys = (payload as SystemSignal).System;\n if (sys.type !== \"PostCommitEnd\") {\n return;\n }\n const end = sys as SystemSignalProtocolVariantPostCommitEnd;\n if (!end.succeeded) {\n this.dumpCallLogs(signal.zome_name);\n this.dumpSignalLogs(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 const [signalType, systemSignal] = this._appProxy.determineSignalType(signal);\n if (signalType != SignalType.System) {\n return;\n }\n\n const sys = systemSignal 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.dumpCallLogs(end.zome_name);\n this.dumpSignalLogs(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 dumpSignalLogs(zomeName?: ZomeName, canAppSignals?: boolean) {\n this._appProxy.dumpSignalLogs(canAppSignals? canAppSignals : true, this.cell.id, zomeName);\n }\n\n\n /** */\n get signalLogs() {\n const cellStr = CellIdStr(this.cell.id);\n return this._appProxy.signalLogs.filter((log) => log.cellId == cellStr);\n }\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.dumpCallLogs(zome_name);\n this.dumpSignalLogs(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.dumpCallLogs(zome_name);\n this.dumpSignalLogs(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.dumpCallLogs(zomeName)\n // }\n // }\n\n /** */\n dumpCallLogs(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((log) => log.type == SignalType.System && (log.payload as SystemSignalProtocol).type == \"SelfCallStart\")\n .map((log) => [log.ts, log.cellId, (log.payload as SystemSignalProtocolVariantSelfCallStart)])\n\n const endCalls: [Timestamp, CellIdStr, SystemSignalProtocolVariantSelfCallEnd][] = this._appProxy.signalLogs\n .filter((log) => log.type == SignalType.System && (log.payload as SystemSignalProtocol).type == \"SelfCallEnd\")\n .map((log) => [log.ts, log.cellId, (log.payload as SystemSignalProtocolVariantSelfCallEnd)])\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
+ {"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 {\n CellIdStr,\n DnaInfo,\n EntryDefsCallbackResult,\n SignalType,\n SystemPulse,\n SystemSignalProtocol,\n SystemSignalProtocolVariantPostCommitNewEnd,\n SystemSignalProtocolVariantSelfCallEnd,\n SystemSignalProtocolVariantSelfCallStart,\n ZomeInfo\n} from \"./types\";\nimport {Mutex, withTimeout} from \"async-mutex\";\nimport MutexInterface from \"async-mutex/lib/MutexInterface\";\nimport {\n AppProxy,\n SignalUnsubscriber,\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 const zomeSignal = this._appProxy.intoZomeSignal(signal);\n if (!zomeSignal || zomeSignal.pulses.length == 0) {\n return;\n }\n console.debug(\"blockUntilPostCommit()\", zomeSignal, this._postCommitReleaseEntryType, !!this._postCommitRelease);\n const signalType = Object.keys(zomeSignal.pulses[0])[0];\n if (signalType != \"System\" || !this._postCommitRelease || !this._postCommitReleaseEntryType) {\n return;\n }\n for (const pulse of zomeSignal.pulses) {\n const sys = (pulse as SystemPulse).System;\n if (sys.type !== \"PostCommitNewEnd\") {\n continue;\n }\n const end = sys as SystemSignalProtocolVariantPostCommitNewEnd;\n if (!end.succeeded) {\n console.error(\"System call failed\");\n this.dumpCallLogs(signal.zome_name);\n this.dumpSignalLogs(signal.zome_name);\n }\n if (end.app_entry_type !== this._postCommitReleaseEntryType) {\n continue;\n }\n /** Release */\n console.debug(\"blockUntilPostCommit() RELEASE\");\n this._postCommitRelease();\n delete this._postCommitRelease;\n delete this._postCommitReleaseEntryType;\n break;\n }\n }\n\n\n /** Have a self call acquire & the call Mutex */\n private _selfCallRelease?;\n protected async blockSelfCall(signal: AppSignal) {\n const zomeSignal = this._appProxy.intoZomeSignal(signal);\n if (!zomeSignal || zomeSignal.pulses.length == 0 || Object.keys(zomeSignal.pulses[0])[0] != 'System') {\n return;\n }\n for (const pulse of zomeSignal.pulses) {\n const sys = (pulse as SystemPulse).System;\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 console.error(\"Call to self failed.\")\n this.dumpCallLogs(end.zome_name);\n this.dumpSignalLogs(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 dumpSignalLogs(zomeName?: ZomeName, canAppSignals?: boolean) {\n this._appProxy.dumpSignalLogs(canAppSignals? canAppSignals : true, this.cell.id, zomeName);\n }\n\n\n /** */\n get signalLogs() {\n const cellStr = CellIdStr(this.cell.id);\n return this._appProxy.signalLogs.filter((log) => log.cellId == cellStr);\n }\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.dumpCallLogs(zome_name);\n this.dumpSignalLogs(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.dumpCallLogs(zome_name);\n this.dumpSignalLogs(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) 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.dumpCallLogs(zomeName)\n // }\n // }\n\n /** */\n dumpCallLogs(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\n const zomeSignals = this._appProxy.signalLogs.filter((log) => log.type == SignalType.Zome);\n const sysSignals = zomeSignals.filter((log) => {\n const type = Object.keys(log.zomeSignal.pulses[0])[0];\n type == \"System\"\n });\n\n const startCalls: [Timestamp, CellIdStr, SystemSignalProtocolVariantSelfCallStart][] = [];\n const endCalls: [Timestamp, CellIdStr, SystemSignalProtocolVariantSelfCallEnd][] = [];\n sysSignals.map((log) => {\n for (const pulse of log.zomeSignal.pulses) {\n const sys = (pulse as SystemPulse).System;\n if(sys.type == \"SelfCallStart\") {\n startCalls.push([log.ts, log.cellId, (sys as SystemSignalProtocolVariantSelfCallStart)]);\n }\n if(sys.type == \"SelfCallEnd\") {\n endCalls.push([log.ts, log.cellId, (sys as SystemSignalProtocolVariantSelfCallEnd)]);\n }\n }\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.fn_name == 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"]}
package/dist/types.d.ts CHANGED
@@ -1,20 +1,51 @@
1
1
  import { CellId, RoleName, ClonedCell, ProvisionedCell, ZomeName, FunctionName } from "@holochain/client";
2
2
  import { AgentPubKey, DnaHash } from "@holochain/client/lib/types";
3
3
  import { Dictionary } from "./utils";
4
- import { SystemSignalProtocol } from "./AppProxy";
4
+ /** Signal types */
5
5
  export declare enum SignalType {
6
6
  Unknown = "Unknown",
7
- System = "System",
8
- LitHapp = "LitHapp"
7
+ Empty = "Empty",
8
+ Zome = "Zome"
9
9
  }
10
- export type SignalPayload = unknown | SystemSignal | LitHappSignal;
11
- export type SystemSignal = {
10
+ export type SystemPulse = {
12
11
  System: SystemSignalProtocol;
13
12
  };
14
13
  export interface LitHappSignal {
15
14
  from: AgentPubKey;
16
15
  pulses: unknown[];
17
16
  }
17
+ /** Protocol for notifying the ViewModel (UI) of system level events */
18
+ export type SystemSignalProtocolVariantPostCommitNewStart = {
19
+ type: "PostCommitNewStart";
20
+ app_entry_type: string;
21
+ };
22
+ export type SystemSignalProtocolVariantPostCommitNewEnd = {
23
+ type: "PostCommitNewEnd";
24
+ app_entry_type: string;
25
+ succeeded: boolean;
26
+ };
27
+ export type SystemSignalProtocolVariantPostCommitDeleteStart = {
28
+ type: "PostCommitDeleteStart";
29
+ app_entry_type: string;
30
+ };
31
+ export type SystemSignalProtocolVariantPostCommitDeleteEnd = {
32
+ type: "PostCommitDeleteEnd";
33
+ app_entry_type: string;
34
+ succeeded: boolean;
35
+ };
36
+ export type SystemSignalProtocolVariantSelfCallStart = {
37
+ type: "SelfCallStart";
38
+ zome_name: string;
39
+ fn_name: string;
40
+ };
41
+ export type SystemSignalProtocolVariantSelfCallEnd = {
42
+ type: "SelfCallEnd";
43
+ zome_name: string;
44
+ fn_name: string;
45
+ succeeded: boolean;
46
+ };
47
+ export type SystemSignalProtocol = SystemSignalProtocolVariantPostCommitNewStart | SystemSignalProtocolVariantPostCommitNewEnd | SystemSignalProtocolVariantPostCommitDeleteStart | SystemSignalProtocolVariantPostCommitDeleteEnd | SystemSignalProtocolVariantSelfCallStart | SystemSignalProtocolVariantSelfCallEnd;
48
+ /** ---- */
18
49
  export type BaseRoleName = string;
19
50
  export type CloneIndex = number;
20
51
  export type ZomeIndex = number;
package/dist/types.js CHANGED
@@ -1,9 +1,10 @@
1
1
  import { decodeHashFromBase64, encodeHashToBase64, } from "@holochain/client";
2
+ /** Signal types */
2
3
  export var SignalType;
3
4
  (function (SignalType) {
4
5
  SignalType["Unknown"] = "Unknown";
5
- SignalType["System"] = "System";
6
- SignalType["LitHapp"] = "LitHapp";
6
+ SignalType["Empty"] = "Empty";
7
+ SignalType["Zome"] = "Zome";
7
8
  })(SignalType || (SignalType = {}));
8
9
  /** */
9
10
  export function flattenCells(cells) {
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,oBAAoB,EACpB,kBAAkB,GAEnB,MAAM,mBAAmB,CAAC;AAK3B,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,iCAAmB,CAAA;IACnB,+BAAiB,CAAA;IACjB,iCAAmB,CAAA;AACrB,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AAqDD,MAAM;AACN,MAAM,UAAU,YAAY,CAAC,KAAmB;IAC9C,IAAI,GAAG,GAAa,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1F,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC;AACb,CAAC;AAKD,oDAAoD;AACpD,MAAM,UAAU,eAAe,CAAC,YAA0B,EAAE,UAAsB;IAChF,oDAAoD;IACpD,OAAO,EAAE,GAAG,YAAY,GAAG,GAAG,GAAG,UAAU,CAAC;AAC9C,CAAC;AAED,MAAM;AACN,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;QACpB,qDAAqD;QACrD,OAAO,SAAS,CAAC;KAClB;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAe,CAAC,CAAC;AAClE,CAAC;AAOD,MAAM,iBAAiB,GAAG,IAAI,CAAA;AAE9B,MAAM,UAAU,SAAS,CAAC,UAA4B,EAAE,GAAiB;IACvE,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;QAC7B,OAAO,EAAE,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,iBAAiB,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;KACvG;IACD,IAAI,CAAC,GAAG,EAAE;QACR,MAAM,KAAK,CAAC,8CAA8C,CAAC,CAAC;KAC7D;IACD,OAAO,EAAE,GAAG,kBAAkB,CAAC,UAAU,CAAC,GAAG,iBAAiB,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM;AACN,MAAM,UAAU,UAAU,CAAC,GAAc;IACvC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC1C,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;QACpB,MAAM,KAAK,CAAC,8CAA8C,CAAC,CAAC;KAC7D;IACD,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACvE,CAAC","sourcesContent":["import {\n CellId,\n decodeHashFromBase64,\n encodeHashToBase64,\n RoleName, ClonedCell, ProvisionedCell, ZomeName, FunctionName,\n} from \"@holochain/client\";\nimport {AgentPubKey, DnaHash} from \"@holochain/client/lib/types\";\nimport {Dictionary} from \"./utils\";\nimport {SystemSignalProtocol} from \"./AppProxy\";\n\nexport enum SignalType {\n Unknown = \"Unknown\",\n System = \"System\",\n LitHapp = \"LitHapp\",\n}\n\n\nexport type SignalPayload = unknown | SystemSignal | LitHappSignal;\nexport type SystemSignal = {System: SystemSignalProtocol}\nexport interface LitHappSignal {\n from: AgentPubKey,\n pulses: unknown[],\n}\n\nexport type BaseRoleName = string;\nexport type CloneIndex = number;\n\nexport type ZomeIndex = number;\n\nexport type EntryDef = any; // FIXME\nexport type EntryDefsCallbackResult = {Defs: EntryDef[]}\n\nexport type ScopedZomeTypes = [ZomeIndex, number[]][];\n\nexport type ScopedZomeTypesSet = {\n entries: ScopedZomeTypes, // EntryDefIndex\n links: ScopedZomeTypes, // LinkType\n};\n\nexport type ZomeInfo = {\n name: ZomeName,\n id: ZomeIndex,\n properties: Uint8Array,\n entry_defs: EntryDef[],\n extern_fns: FunctionName[],\n zome_types: ScopedZomeTypesSet,\n}\n\n\nexport type DnaInfo = {\n name: string,\n hash: DnaHash,\n properties: Uint8Array,\n zome_names: ZomeName[],\n}\n\n/** */\nexport type CellsForRole = {\n //baseRoleName: BaseRoleName,\n provisioned: ProvisionedCell,\n /** CloneId -> Cell */\n clones: Dictionary<ClonedCell>,\n}\n\n/** BaseRoleName -> RoleCells */\nexport type RoleCellsMap = Dictionary<CellsForRole>;\n\n/** */\nexport function flattenCells(cells: CellsForRole): CellId[] {\n let res: CellId[] = Object.entries(cells.clones).map(([cloneId, clone]) => clone.cell_id);\n res.push(cells.provisioned.cell_id);\n return res;\n}\n\n\n/** -- CloneId -- */\nexport type CloneId = RoleName;\n/** type for string \"<baseRoleName>.<cloneIndex>\" */\nexport function createCloneName(baseRoleName: BaseRoleName, cloneIndex: CloneIndex): string {\n //if (!cloneIndex) return baseRoleName as CloneName;\n return \"\" + baseRoleName + \".\" + cloneIndex;\n}\n\n/** */\nexport function destructureCloneId(cloneId: CloneId): [BaseRoleName, CloneIndex] | undefined {\n const subs = cloneId.split(\".\");\n if (subs.length != 2) {\n //throw Error(`Bad RoleInstance id format: \"${id}\"`);\n return undefined;\n }\n return [subs[0] as BaseRoleName, Number(subs[1]) as CloneIndex];\n}\n\n\n/** -- CellIdStr -- */\n\nexport type CellIdStr = string;\n\nconst CELL_ID_SEPARATOR = \"||\"\n\nexport function CellIdStr(hash_or_id: DnaHash | CellId, key?: AgentPubKey): CellIdStr {\n if (Array.isArray(hash_or_id)) {\n return \"\" + encodeHashToBase64(hash_or_id[0]) + CELL_ID_SEPARATOR + encodeHashToBase64(hash_or_id[1]);\n }\n if (!key) {\n throw Error(\"CellIdStr() failed. AgentPubKey not provided\");\n }\n return \"\" + encodeHashToBase64(hash_or_id) + CELL_ID_SEPARATOR + encodeHashToBase64(key);\n}\n\n/** */\nexport function str2CellId(str: CellIdStr): CellId {\n const subs = str.split(CELL_ID_SEPARATOR);\n if (subs.length != 2) {\n throw Error(\"str2CellId() failed. Bad input string format\");\n }\n return [decodeHashFromBase64(subs[0]), decodeHashFromBase64(subs[1])]\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,oBAAoB,EACpB,kBAAkB,GAEnB,MAAM,mBAAmB,CAAC;AAK3B,mBAAmB;AAEnB,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,iCAAmB,CAAA;IACnB,6BAAe,CAAA;IACf,2BAAa,CAAA;AACf,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AA6FD,MAAM;AACN,MAAM,UAAU,YAAY,CAAC,KAAmB;IAC9C,IAAI,GAAG,GAAa,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1F,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC;AACb,CAAC;AAKD,oDAAoD;AACpD,MAAM,UAAU,eAAe,CAAC,YAA0B,EAAE,UAAsB;IAChF,oDAAoD;IACpD,OAAO,EAAE,GAAG,YAAY,GAAG,GAAG,GAAG,UAAU,CAAC;AAC9C,CAAC;AAED,MAAM;AACN,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;QACpB,qDAAqD;QACrD,OAAO,SAAS,CAAC;KAClB;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAe,CAAC,CAAC;AAClE,CAAC;AAOD,MAAM,iBAAiB,GAAG,IAAI,CAAA;AAE9B,MAAM,UAAU,SAAS,CAAC,UAA4B,EAAE,GAAiB;IACvE,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;QAC7B,OAAO,EAAE,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,iBAAiB,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;KACvG;IACD,IAAI,CAAC,GAAG,EAAE;QACR,MAAM,KAAK,CAAC,8CAA8C,CAAC,CAAC;KAC7D;IACD,OAAO,EAAE,GAAG,kBAAkB,CAAC,UAAU,CAAC,GAAG,iBAAiB,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM;AACN,MAAM,UAAU,UAAU,CAAC,GAAc;IACvC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC1C,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;QACpB,MAAM,KAAK,CAAC,8CAA8C,CAAC,CAAC;KAC7D;IACD,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACvE,CAAC","sourcesContent":["import {\n CellId,\n decodeHashFromBase64,\n encodeHashToBase64,\n RoleName, ClonedCell, ProvisionedCell, ZomeName, FunctionName,\n} from \"@holochain/client\";\nimport {AgentPubKey, DnaHash} from \"@holochain/client/lib/types\";\nimport {Dictionary} from \"./utils\";\n\n\n/** Signal types */\n\nexport enum SignalType {\n Unknown = \"Unknown\",\n Empty = \"Empty\",\n Zome = \"Zome\",\n}\n\n//export type SignalPayload = unknown | LitHappSignal;\nexport type SystemPulse = {System: SystemSignalProtocol}\nexport interface LitHappSignal {\n from: AgentPubKey,\n pulses: unknown[],\n}\n\n/** Protocol for notifying the ViewModel (UI) of system level events */\nexport type SystemSignalProtocolVariantPostCommitNewStart = {\n type: \"PostCommitNewStart\"\n app_entry_type: string\n}\nexport type SystemSignalProtocolVariantPostCommitNewEnd = {\n type: \"PostCommitNewEnd\"\n app_entry_type: string\n succeeded: boolean\n}\nexport type SystemSignalProtocolVariantPostCommitDeleteStart = {\n type: \"PostCommitDeleteStart\"\n app_entry_type: string\n}\nexport type SystemSignalProtocolVariantPostCommitDeleteEnd = {\n type: \"PostCommitDeleteEnd\"\n app_entry_type: string\n succeeded: boolean\n}\nexport type SystemSignalProtocolVariantSelfCallStart = {\n type: \"SelfCallStart\"\n zome_name: string\n fn_name: string\n}\nexport type SystemSignalProtocolVariantSelfCallEnd = {\n type: \"SelfCallEnd\"\n zome_name: string\n fn_name: string\n succeeded: boolean\n}\nexport type SystemSignalProtocol =\n | SystemSignalProtocolVariantPostCommitNewStart\n | SystemSignalProtocolVariantPostCommitNewEnd\n | SystemSignalProtocolVariantPostCommitDeleteStart\n | SystemSignalProtocolVariantPostCommitDeleteEnd\n | SystemSignalProtocolVariantSelfCallStart\n | SystemSignalProtocolVariantSelfCallEnd;\n\n\n/** ---- */\n\nexport type BaseRoleName = string;\nexport type CloneIndex = number;\n\nexport type ZomeIndex = number;\n\nexport type EntryDef = any; // FIXME\nexport type EntryDefsCallbackResult = {Defs: EntryDef[]}\n\nexport type ScopedZomeTypes = [ZomeIndex, number[]][];\n\nexport type ScopedZomeTypesSet = {\n entries: ScopedZomeTypes, // EntryDefIndex\n links: ScopedZomeTypes, // LinkType\n};\n\nexport type ZomeInfo = {\n name: ZomeName,\n id: ZomeIndex,\n properties: Uint8Array,\n entry_defs: EntryDef[],\n extern_fns: FunctionName[],\n zome_types: ScopedZomeTypesSet,\n}\n\n\nexport type DnaInfo = {\n name: string,\n hash: DnaHash,\n properties: Uint8Array,\n zome_names: ZomeName[],\n}\n\n/** */\nexport type CellsForRole = {\n //baseRoleName: BaseRoleName,\n provisioned: ProvisionedCell,\n /** CloneId -> Cell */\n clones: Dictionary<ClonedCell>,\n}\n\n/** BaseRoleName -> RoleCells */\nexport type RoleCellsMap = Dictionary<CellsForRole>;\n\n/** */\nexport function flattenCells(cells: CellsForRole): CellId[] {\n let res: CellId[] = Object.entries(cells.clones).map(([cloneId, clone]) => clone.cell_id);\n res.push(cells.provisioned.cell_id);\n return res;\n}\n\n\n/** -- CloneId -- */\nexport type CloneId = RoleName;\n/** type for string \"<baseRoleName>.<cloneIndex>\" */\nexport function createCloneName(baseRoleName: BaseRoleName, cloneIndex: CloneIndex): string {\n //if (!cloneIndex) return baseRoleName as CloneName;\n return \"\" + baseRoleName + \".\" + cloneIndex;\n}\n\n/** */\nexport function destructureCloneId(cloneId: CloneId): [BaseRoleName, CloneIndex] | undefined {\n const subs = cloneId.split(\".\");\n if (subs.length != 2) {\n //throw Error(`Bad RoleInstance id format: \"${id}\"`);\n return undefined;\n }\n return [subs[0] as BaseRoleName, Number(subs[1]) as CloneIndex];\n}\n\n\n/** -- CellIdStr -- */\n\nexport type CellIdStr = string;\n\nconst CELL_ID_SEPARATOR = \"||\"\n\nexport function CellIdStr(hash_or_id: DnaHash | CellId, key?: AgentPubKey): CellIdStr {\n if (Array.isArray(hash_or_id)) {\n return \"\" + encodeHashToBase64(hash_or_id[0]) + CELL_ID_SEPARATOR + encodeHashToBase64(hash_or_id[1]);\n }\n if (!key) {\n throw Error(\"CellIdStr() failed. AgentPubKey not provided\");\n }\n return \"\" + encodeHashToBase64(hash_or_id) + CELL_ID_SEPARATOR + encodeHashToBase64(key);\n}\n\n/** */\nexport function str2CellId(str: CellIdStr): CellId {\n const subs = str.split(CELL_ID_SEPARATOR);\n if (subs.length != 2) {\n throw Error(\"str2CellId() failed. Bad input string format\");\n }\n return [decodeHashFromBase64(subs[0]), decodeHashFromBase64(subs[1])]\n}\n"]}
package/dist/utils.d.ts CHANGED
@@ -25,8 +25,8 @@ export declare function prettySignalLogs(signalLogs: SignalLog[]): {
25
25
  timestamp: string;
26
26
  dnaHash: string;
27
27
  zome: string;
28
- type: import("./types").SignalType;
29
- payload: unknown;
28
+ type: string;
29
+ payload: import("./types").LitHappSignal;
30
30
  }[];
31
31
  /** */
32
32
  export declare function printAppInfo(appInfo: AppInfo): string;
package/dist/utils.js CHANGED
@@ -58,7 +58,7 @@ export function prettyDate(date) {
58
58
  export function prettySignalLogs(signalLogs) {
59
59
  return signalLogs.map((log) => {
60
60
  const dnaHash = encodeHashToBase64(str2CellId(log.cellId)[0]).slice(-8);
61
- return { timestamp: prettyDate(new Date(log.ts)), dnaHash, zome: log.zome_name, type: log.type, payload: log.payload };
61
+ return { timestamp: prettyDate(new Date(log.ts)), dnaHash, zome: log.zomeName, type: log.type, payload: log.zomeSignal };
62
62
  });
63
63
  }
64
64
  /** */
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {CellId, AppInfo, encodeHashToBase64} from \"@holochain/client\";\nimport {CellType} from \"@holochain/client\";\nimport {intoStem} from \"./cell\";\nimport {BaseRoleName, CellsForRole, str2CellId} from \"./types\";\nimport {SignalLog} from \"./AppProxy\";\n\n\nexport declare type Dictionary<T> = {\n [key: string]: T;\n};\n\n/** */\nexport function areArraysEqual(first: Uint8Array, second: Uint8Array) {\n return first.length === second.length && first.every((value, index) => value === second[index])\n}\n\n/** */\nexport function areCellsEqual(cellA: CellId, cellB: CellId) {\n return areArraysEqual(cellA[0], cellB[0]) && areArraysEqual(cellA[1], cellB[1])\n}\n\n/** */\nexport const delay = (ms: number) => new Promise(r => setTimeout(r, ms))\n\n/** convert Pascal case to snake case */\nexport const snake = str => str[0].toLowerCase() + str.slice(1, str.length).replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`);\n\n/** convert snake case to pascal case */\nexport const pascal = str => str[0].toUpperCase() + str.slice(1, str.length).replace(/_([a-z])/g, letter => `${letter[1].toUpperCase()}`);\n\n\n/**\n * Checks if obj is a Hash or list of hashes and tries to convert it a B64 or list of B64\n */\nexport function anyToB64(obj: any): any {\n /** Check if it's a hash */\n if (obj instanceof Uint8Array) {\n return encodeHashToBase64(obj);\n } else {\n /** Check if it's an array of hashes */\n if (Array.isArray(obj)) {\n const isUint8Array =\n obj.length > 0 &&\n obj.every((value) => {\n return value instanceof Uint8Array;\n });\n if (isUint8Array) {\n let result = [];\n for (const cur of obj) {\n result.push(encodeHashToBase64(cur));\n }\n return result;\n }\n }\n }\n return obj;\n}\n\n/** -- Pretty print -- */\n\nconst zeroPad = (num: number, places: number) => String(num).padStart(places, '0')\n\nexport function prettyDuration(date: Date): string {\n return date.getSeconds() + \".\" + zeroPad(date.getMilliseconds(), 3)\n}\n\n/** */\nexport function prettyDate(date: Date): string {\n return \"\"\n + zeroPad(date.getHours(), 2)\n + \":\" + zeroPad(date.getMinutes(), 2)\n + \":\" + zeroPad(date.getSeconds(), 2)\n + \".\" + zeroPad(date.getMilliseconds(), 3);\n}\n\n\nexport function prettySignalLogs(signalLogs: SignalLog[]) {\n return signalLogs.map((log) => {\n const dnaHash = encodeHashToBase64(str2CellId(log.cellId)[0]).slice(-8);\n return {timestamp: prettyDate(new Date(log.ts)), dnaHash, zome: log.zome_name, type: log.type, payload: log.payload};\n })\n}\n\n\n/** */\nexport function printAppInfo(appInfo: AppInfo): string {\n let print = `Happ \"${appInfo.installed_app_id}\" info: (status: ${JSON.stringify(appInfo.status)})`;\n for (const [roleName, cellInfos] of Object.entries(appInfo.cell_info)) {\n for (const cellInfo of Object.values(cellInfos)) {\n if (CellType.Stem in cellInfo) {\n const stem = intoStem(cellInfo)!;\n print += `\\n - ${roleName}.${stem.name? stem.name : \"unnamed\"}: ${encodeHashToBase64(stem.dna)} (stem)`;\n continue;\n }\n if (CellType.Provisioned in cellInfo) {\n const cell = cellInfo.provisioned;\n print += `\\n - ${roleName}: ${cell.name} | ${encodeHashToBase64(cell.cell_id[0])}`;\n continue;\n }\n if (CellType.Cloned in cellInfo) {\n const cell = cellInfo.cloned;\n print += `\\n - ${roleName}.${cell.clone_id}: ${cell.name} | ${encodeHashToBase64(cell.cell_id[0])}`;\n continue;\n }\n }\n }\n return print;\n}\n\n\n/** */\nexport function printCellsForRole(baseRoleName: BaseRoleName, cells: CellsForRole): string {\n let print = `CellsForRole \"${baseRoleName}\": (${encodeHashToBase64(cells.provisioned.cell_id[1])})\\n`;\n print += ` - Provisioned: ${cells.provisioned.name} | ${encodeHashToBase64(cells.provisioned.cell_id[0])}\\n`;\n print += ` - Clones : ${Object.values(cells.clones).length}\\n`;\n for (const [cloneId, clone] of Object.entries(cells.clones)) {\n print += ` - (${clone.enabled? \"enabled\" : \"disabled\"})${cloneId}: ${clone.name} | ${encodeHashToBase64(clone.cell_id[0])}\\n`;\n }\n return print;\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {CellId, AppInfo, encodeHashToBase64} from \"@holochain/client\";\nimport {CellType} from \"@holochain/client\";\nimport {intoStem} from \"./cell\";\nimport {BaseRoleName, CellsForRole, str2CellId} from \"./types\";\nimport {SignalLog} from \"./AppProxy\";\n\n\nexport declare type Dictionary<T> = {\n [key: string]: T;\n};\n\n/** */\nexport function areArraysEqual(first: Uint8Array, second: Uint8Array) {\n return first.length === second.length && first.every((value, index) => value === second[index])\n}\n\n/** */\nexport function areCellsEqual(cellA: CellId, cellB: CellId) {\n return areArraysEqual(cellA[0], cellB[0]) && areArraysEqual(cellA[1], cellB[1])\n}\n\n/** */\nexport const delay = (ms: number) => new Promise(r => setTimeout(r, ms))\n\n/** convert Pascal case to snake case */\nexport const snake = str => str[0].toLowerCase() + str.slice(1, str.length).replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`);\n\n/** convert snake case to pascal case */\nexport const pascal = str => str[0].toUpperCase() + str.slice(1, str.length).replace(/_([a-z])/g, letter => `${letter[1].toUpperCase()}`);\n\n\n/**\n * Checks if obj is a Hash or list of hashes and tries to convert it a B64 or list of B64\n */\nexport function anyToB64(obj: any): any {\n /** Check if it's a hash */\n if (obj instanceof Uint8Array) {\n return encodeHashToBase64(obj);\n } else {\n /** Check if it's an array of hashes */\n if (Array.isArray(obj)) {\n const isUint8Array =\n obj.length > 0 &&\n obj.every((value) => {\n return value instanceof Uint8Array;\n });\n if (isUint8Array) {\n let result = [];\n for (const cur of obj) {\n result.push(encodeHashToBase64(cur));\n }\n return result;\n }\n }\n }\n return obj;\n}\n\n/** -- Pretty print -- */\n\nconst zeroPad = (num: number, places: number) => String(num).padStart(places, '0')\n\nexport function prettyDuration(date: Date): string {\n return date.getSeconds() + \".\" + zeroPad(date.getMilliseconds(), 3)\n}\n\n/** */\nexport function prettyDate(date: Date): string {\n return \"\"\n + zeroPad(date.getHours(), 2)\n + \":\" + zeroPad(date.getMinutes(), 2)\n + \":\" + zeroPad(date.getSeconds(), 2)\n + \".\" + zeroPad(date.getMilliseconds(), 3);\n}\n\n\nexport function prettySignalLogs(signalLogs: SignalLog[]) {\n return signalLogs.map((log) => {\n const dnaHash = encodeHashToBase64(str2CellId(log.cellId)[0]).slice(-8);\n return {timestamp: prettyDate(new Date(log.ts)), dnaHash, zome: log.zomeName, type: log.type, payload: log.zomeSignal};\n })\n}\n\n\n/** */\nexport function printAppInfo(appInfo: AppInfo): string {\n let print = `Happ \"${appInfo.installed_app_id}\" info: (status: ${JSON.stringify(appInfo.status)})`;\n for (const [roleName, cellInfos] of Object.entries(appInfo.cell_info)) {\n for (const cellInfo of Object.values(cellInfos)) {\n if (CellType.Stem in cellInfo) {\n const stem = intoStem(cellInfo)!;\n print += `\\n - ${roleName}.${stem.name? stem.name : \"unnamed\"}: ${encodeHashToBase64(stem.dna)} (stem)`;\n continue;\n }\n if (CellType.Provisioned in cellInfo) {\n const cell = cellInfo.provisioned;\n print += `\\n - ${roleName}: ${cell.name} | ${encodeHashToBase64(cell.cell_id[0])}`;\n continue;\n }\n if (CellType.Cloned in cellInfo) {\n const cell = cellInfo.cloned;\n print += `\\n - ${roleName}.${cell.clone_id}: ${cell.name} | ${encodeHashToBase64(cell.cell_id[0])}`;\n continue;\n }\n }\n }\n return print;\n}\n\n\n/** */\nexport function printCellsForRole(baseRoleName: BaseRoleName, cells: CellsForRole): string {\n let print = `CellsForRole \"${baseRoleName}\": (${encodeHashToBase64(cells.provisioned.cell_id[1])})\\n`;\n print += ` - Provisioned: ${cells.provisioned.name} | ${encodeHashToBase64(cells.provisioned.cell_id[0])}\\n`;\n print += ` - Clones : ${Object.values(cells.clones).length}\\n`;\n for (const [cloneId, clone] of Object.entries(cells.clones)) {\n print += ` - (${clone.enabled? \"enabled\" : \"disabled\"})${cloneId}: ${clone.name} | ${encodeHashToBase64(clone.cell_id[0])}\\n`;\n }\n return print;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ddd-qc/cell-proxy",
3
- "version": "0.24.6",
3
+ "version": "0.25.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",