@ddd-qc/cell-proxy 0.27.6 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/dist/AppProxy.d.ts +9 -45
  2. package/dist/AppProxy.d.ts.map +1 -0
  3. package/dist/AppProxy.js +23 -91
  4. package/dist/AppProxy.js.map +1 -1
  5. package/dist/CellProxy.d.ts +1 -37
  6. package/dist/CellProxy.d.ts.map +1 -0
  7. package/dist/CellProxy.js +4 -71
  8. package/dist/CellProxy.js.map +1 -1
  9. package/dist/ConductorAppProxy.d.ts +2 -19
  10. package/dist/ConductorAppProxy.d.ts.map +1 -0
  11. package/dist/ConductorAppProxy.js +15 -41
  12. package/dist/ConductorAppProxy.js.map +1 -1
  13. package/dist/ExternalAppProxy.d.ts +1 -5
  14. package/dist/ExternalAppProxy.d.ts.map +1 -0
  15. package/dist/ExternalAppProxy.js +1 -8
  16. package/dist/ExternalAppProxy.js.map +1 -1
  17. package/dist/ZomeProxy.d.ts +4 -15
  18. package/dist/ZomeProxy.d.ts.map +1 -0
  19. package/dist/ZomeProxy.js +0 -17
  20. package/dist/ZomeProxy.js.map +1 -1
  21. package/dist/cell.d.ts +1 -11
  22. package/dist/cell.d.ts.map +1 -0
  23. package/dist/cell.js +0 -14
  24. package/dist/cell.js.map +1 -1
  25. package/dist/datum-map.d.ts +2 -6
  26. package/dist/datum-map.d.ts.map +1 -0
  27. package/dist/datum-map.js +0 -12
  28. package/dist/datum-map.js.map +1 -1
  29. package/dist/hash.d.ts +2 -21
  30. package/dist/hash.d.ts.map +1 -0
  31. package/dist/hash.js +19 -51
  32. package/dist/hash.js.map +1 -1
  33. package/dist/hcl.d.ts +2 -15
  34. package/dist/hcl.d.ts.map +1 -0
  35. package/dist/hcl.js +1 -14
  36. package/dist/hcl.js.map +1 -1
  37. package/dist/holochain-id-map.d.ts +2 -1
  38. package/dist/holochain-id-map.d.ts.map +1 -0
  39. package/dist/holochain-id-map.js +0 -17
  40. package/dist/holochain-id-map.js.map +1 -1
  41. package/dist/index.d.ts +1 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/mixins.d.ts +2 -13
  44. package/dist/mixins.d.ts.map +1 -0
  45. package/dist/mixins.js +1 -13
  46. package/dist/mixins.js.map +1 -1
  47. package/dist/pretty.d.ts +1 -4
  48. package/dist/pretty.d.ts.map +1 -0
  49. package/dist/pretty.js +0 -4
  50. package/dist/pretty.js.map +1 -1
  51. package/dist/types.d.ts +1 -11
  52. package/dist/types.d.ts.map +1 -0
  53. package/dist/types.js +1 -10
  54. package/dist/types.js.map +1 -1
  55. package/dist/utils.d.ts +3 -10
  56. package/dist/utils.d.ts.map +1 -0
  57. package/dist/utils.js +11 -11
  58. package/dist/utils.js.map +1 -1
  59. package/dist/zomeSignals.integrity.d.ts +1 -0
  60. package/dist/zomeSignals.integrity.d.ts.map +1 -0
  61. package/dist/zomeSignals.integrity.js +1 -1
  62. package/dist/zomeSignals.integrity.js.map +1 -1
  63. package/dist/zomeSignals.types.d.ts +1 -5
  64. package/dist/zomeSignals.types.d.ts.map +1 -0
  65. package/dist/zomeSignals.types.js +0 -4
  66. package/dist/zomeSignals.types.js.map +1 -1
  67. package/package.json +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CellProxy.d.ts","sourceRoot":"","sources":["../src/CellProxy.ts"],"names":[],"mappings":"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"}
package/dist/CellProxy.js CHANGED
@@ -3,28 +3,17 @@ import { SignalType } from "./types";
3
3
  import { Mutex, withTimeout } from "async-mutex";
4
4
  import { prettyDate, prettyDuration } from "./pretty";
5
5
  import { anyToB64, intoAnyId } from "./hash";
6
- /**
7
- * Proxy for a running DNA.
8
- * It logs and queues ZomeCalls.
9
- * It holds a reference to its AppProxy and its Cell.
10
- * This class is expected to be used by ZomeProxies.
11
- */
12
6
  export class CellProxy extends CellMixin(Empty) {
13
- /** Ctor */
14
- constructor(_appProxy, cell,
15
- //public readonly dnaDef: MyDnaDef,
16
- defaultTimeout) {
7
+ constructor(_appProxy, cell, defaultTimeout) {
17
8
  super();
18
9
  this._appProxy = _appProxy;
19
- /** append only logs */
20
10
  this._requestLog = [];
21
11
  this._responseLog = [];
22
12
  this._cell = cell;
23
13
  console.log(`CellProxy.ctor`, cell);
24
14
  this.defaultTimeout = defaultTimeout ? defaultTimeout : 10 * 1000;
25
15
  this._callMutex = withTimeout(new Mutex(), this.defaultTimeout);
26
- ///*const _unsub =*/ this.addSignalHandler((sig) => this.blockSelfCall(sig));
27
- /*const _unsub =*/ this.addSignalHandler((sig) => this.blockUntilPostCommit(sig));
16
+ this.addSignalHandler((sig) => this.blockUntilPostCommit(sig));
28
17
  }
29
18
  async blockUntilPostCommit(signal) {
30
19
  const zomeSignal = this._appProxy.intoZomeSignal(signal);
@@ -50,7 +39,6 @@ export class CellProxy extends CellMixin(Empty) {
50
39
  if (end.app_entry_type !== this._postCommitReleaseEntryType) {
51
40
  continue;
52
41
  }
53
- /** Release */
54
42
  console.debug("blockUntilPostCommit() RELEASE");
55
43
  this._postCommitRelease();
56
44
  delete this._postCommitRelease;
@@ -67,7 +55,6 @@ export class CellProxy extends CellMixin(Empty) {
67
55
  const sys = pulse.System;
68
56
  if (sys.type == "SelfCallStart") {
69
57
  console.log("");
70
- /** Acquire lock */
71
58
  try {
72
59
  this._callMutex.acquire().then((r) => this._selfCallRelease = r);
73
60
  }
@@ -76,7 +63,6 @@ export class CellProxy extends CellMixin(Empty) {
76
63
  }
77
64
  }
78
65
  if (sys.type == "SelfCallEnd" && this._selfCallRelease) {
79
- /** Release */
80
66
  this._selfCallRelease();
81
67
  delete this._selfCallRelease;
82
68
  const end = sys;
@@ -88,20 +74,15 @@ export class CellProxy extends CellMixin(Empty) {
88
74
  }
89
75
  }
90
76
  }
91
- /** -- Methods -- */
92
- /** */
93
77
  addSignalHandler(handler) {
94
78
  return this._appProxy.addSignalHandler(handler, this.cell.hcl().toString());
95
79
  }
96
- /** */
97
80
  dumpSignalLogs(zomeName, canAppSignals) {
98
81
  this._appProxy.dumpSignalLogs(canAppSignals ? canAppSignals : true, this.cell.address, zomeName);
99
82
  }
100
- /** */
101
83
  get signalLogs() {
102
84
  return this._appProxy.signalLogs.filter((log) => log.cellAddr.equals(this.cell.address));
103
85
  }
104
- /** Pass call request to conductor proxy and log it */
105
86
  async executeZomeCall(reqLog) {
106
87
  reqLog.executionTimestamp = Date.now();
107
88
  const requestIndex = this._requestLog.length;
@@ -118,7 +99,6 @@ export class CellProxy extends CellMixin(Empty) {
118
99
  return respLog;
119
100
  }
120
101
  }
121
- /** Pass call request to conductor proxy and log it */
122
102
  logCallTimedout(reqLog) {
123
103
  reqLog.executionTimestamp = Date.now();
124
104
  const requestIndex = this._requestLog.length;
@@ -127,10 +107,6 @@ export class CellProxy extends CellMixin(Empty) {
127
107
  this._responseLog.push(respLog);
128
108
  return respLog;
129
109
  }
130
- /**
131
- * callZome() with Mutex (for calls that writes to source-chain)
132
- * TODO: Implement call queue instead of mutex?
133
- */
134
110
  async callZomeBlockPostCommit(entryType, zome_name, fn_name, payload, cap_secret, timeout) {
135
111
  timeout = timeout ? timeout : this.defaultTimeout;
136
112
  const req = {
@@ -139,7 +115,6 @@ export class CellProxy extends CellMixin(Empty) {
139
115
  provenance: this.cell.address.agentId.hash,
140
116
  };
141
117
  const log = { request: req, timeout, requestTimestamp: Date.now() };
142
- /** Acquire lock */
143
118
  try {
144
119
  this._postCommitRelease = await this._callMutex.acquire();
145
120
  this._postCommitReleaseEntryType = entryType;
@@ -149,14 +124,9 @@ export class CellProxy extends CellMixin(Empty) {
149
124
  this.logCallTimedout(log);
150
125
  return Promise.reject("Waiting for callZomeBlockPostCommit mutex timed-out");
151
126
  }
152
- /** Execute */
153
127
  const respLog = await this.executeZomeCall(log);
154
128
  return respLog.success;
155
129
  }
156
- /**
157
- * callZome() with Mutex (for calls that writes to source-chain)
158
- * TODO: Implement call queue instead of mutex?
159
- */
160
130
  async callZomeBlocking(zome_name, fn_name, payload, cap_secret, timeout) {
161
131
  timeout = timeout ? timeout : this.defaultTimeout;
162
132
  const req = {
@@ -165,7 +135,6 @@ export class CellProxy extends CellMixin(Empty) {
165
135
  provenance: this.cell.address.agentId.hash,
166
136
  };
167
137
  const log = { request: req, timeout, requestTimestamp: Date.now() };
168
- /** Acquire lock */
169
138
  let release;
170
139
  try {
171
140
  release = await this._callMutex.acquire();
@@ -175,9 +144,7 @@ export class CellProxy extends CellMixin(Empty) {
175
144
  this.logCallTimedout(log);
176
145
  return Promise.reject("Waiting for callZomeBlocking mutex timed-out");
177
146
  }
178
- /** Execute */
179
147
  const respLog = await this.executeZomeCall(log);
180
- /** Release */
181
148
  release();
182
149
  if (respLog.failure) {
183
150
  this.dumpCallLogs(zome_name);
@@ -186,7 +153,6 @@ export class CellProxy extends CellMixin(Empty) {
186
153
  }
187
154
  return respLog.success;
188
155
  }
189
- /** */
190
156
  async callZome(zome_name, fn_name, payload, cap_secret, timeout) {
191
157
  timeout = timeout ? timeout : this.defaultTimeout;
192
158
  const req = {
@@ -211,14 +177,9 @@ export class CellProxy extends CellMixin(Empty) {
211
177
  }
212
178
  return respLog.success;
213
179
  }
214
- /**
215
- * Calls the `entry_defs()` zome function and
216
- * Returns an array of all the zome's AppEntryNames and Visibility, i.e. (AppEntryName, isPublic)[]
217
- */
218
180
  async callEntryDefs(zomeName) {
219
- //console.log("callEntryDefs()", zomeName)
220
181
  try {
221
- const entryDefs = await this.callZome(zomeName, "entry_defs", null, null); // Need big timeout since holochain is slow when receiving simultaneous calls from multiple happs
182
+ const entryDefs = await this.callZome(zomeName, "entry_defs", null, null);
222
183
  console.debug("getEntryDefs() for " + zomeName + " result:");
223
184
  console.log({ entryDefs });
224
185
  let result = {};
@@ -229,7 +190,6 @@ export class CellProxy extends CellMixin(Empty) {
229
190
  }
230
191
  result[name] = def;
231
192
  }
232
- //console.log({result})
233
193
  return result;
234
194
  }
235
195
  catch (e) {
@@ -238,15 +198,10 @@ export class CellProxy extends CellMixin(Empty) {
238
198
  return Promise.reject(e);
239
199
  }
240
200
  }
241
- /**
242
- * Calls the `zome_info()` zome function
243
- */
244
201
  async callZomeInfo(zomeName) {
245
202
  console.log("callZomeInfo()", zomeName);
246
203
  try {
247
204
  const zome_info = await this.callZome(zomeName, "get_zome_info", null, null, 10 * 100);
248
- //console.debug("callZomeInfo() for " + zomeName + " result:")
249
- //console.log({zome_info})
250
205
  return zome_info;
251
206
  }
252
207
  catch (e) {
@@ -255,15 +210,10 @@ export class CellProxy extends CellMixin(Empty) {
255
210
  return Promise.reject(e);
256
211
  }
257
212
  }
258
- /**
259
- * Calls the `dna_info()` zome function
260
- */
261
213
  async callDnaInfo(zomeName) {
262
214
  console.log("callDnaInfo()", zomeName);
263
215
  try {
264
216
  const dna_info = await this.callZome(zomeName, "get_dna_info", null, null, 10 * 100);
265
- //console.debug("callDnaInfo() for " + zomeName + " result:")
266
- //console.log({dna_info})
267
217
  return dna_info;
268
218
  }
269
219
  catch (e) {
@@ -272,35 +222,20 @@ export class CellProxy extends CellMixin(Empty) {
272
222
  return Promise.reject(e);
273
223
  }
274
224
  }
275
- // /** TODO once we have getDnaDefinition() api */
276
- // dumpAllZomes() {
277
- // // FIXME get DNA DEF
278
- // for (const zomeName of dnaDef) {
279
- // this.dumpCallLogs(zomeName)
280
- // }
281
- // }
282
- /** */
283
225
  dumpCallLogs(zomeName) {
284
226
  let result = [];
285
227
  for (const response of this._responseLog) {
286
228
  const requestLog = this._requestLog[response.requestIndex];
287
- if (zomeName && requestLog.request.zome_name != zomeName) {
229
+ if (!requestLog || (zomeName && requestLog.request.zome_name != zomeName)) {
288
230
  continue;
289
231
  }
290
232
  const startTime = prettyDate(new Date(requestLog.requestTimestamp));
291
233
  const waitTime = prettyDuration(new Date(requestLog.executionTimestamp - requestLog.requestTimestamp));
292
234
  const duration = prettyDuration(new Date(response.timestamp - requestLog.requestTimestamp));
293
235
  let input = requestLog.request.payload;
294
- // if (requestLog.request.payload instanceof HoloHash) {
295
- // //console.log("instanceof HoloHash", requestLog.request.payload);
296
- // input = intoAnyId(requestLog.request.payload.toBytes()).print();
297
- // } else {
298
236
  if (requestLog.request.payload instanceof Uint8Array) {
299
- //console.log("instanceof Uint8Array", requestLog.request.payload);
300
237
  input = intoAnyId(requestLog.request.payload).print();
301
238
  }
302
- //}
303
- //const input = requestLog.request.payload instanceof Uint8Array ? enc64(requestLog.request.payload) : requestLog.request.payload;
304
239
  const output = anyToB64(response.failure ? response.failure : response.success);
305
240
  const log = zomeName
306
241
  ? { startTime, fnName: requestLog.request.fn_name, input, output, duration, waitTime }
@@ -312,8 +247,6 @@ export class CellProxy extends CellMixin(Empty) {
312
247
  console.warn(` - For zome "${zomeName}"`);
313
248
  }
314
249
  console.table(result);
315
- /** Parse signal self-call logs */
316
- //console.log(this._appProxy.signalLogs)
317
250
  const zomeSignals = this._appProxy.signalLogs.filter((log) => log.type == SignalType.Zome);
318
251
  const sysSignals = zomeSignals.filter((log) => {
319
252
  const type = Object.keys(log.zomeSignal.pulses[0])[0];
@@ -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 Timestamp,\n ZomeName\n} from \"@holochain/client\";\nimport {CellMixin, Empty} from \"./mixins\";\nimport {Cell} from \"./cell\";\nimport {\n CellIdStr,\n DnaInfo, EntryDef,\n EntryDefsCallbackResult,\n SignalType,\n SystemPulse,\n\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\";\nimport {prettyDate, prettyDuration} from \"./pretty\";\nimport {anyToB64, enc64, intoAnyId} from \"./hash\";\nimport {\n SystemSignalProtocolVariantPostCommitNewEnd,\n SystemSignalProtocolVariantSelfCallEnd,\n SystemSignalProtocolVariantSelfCallStart\n} from \"./zomeSignals.types\";\nimport {Dictionary} from \"./utils\";\n\n\n// /** */\n// export interface EntryDefMat {\n// // index: number\n// id: string,\n// visibility: \"Public\" | \"Private\",\n// requiredValidations: number,\n// cacheAtAgentActivity: boolean,\n// }\n//\n// function materializeEntryDef(def: EntryDef): EntryDefMat {\n// return {\n// id: def.id.App,\n// visibility: def.visibility,\n// requiredValidations: 0, // FIXME\n// cacheAtAgentActivity: false, // FIXME\n// }\n// }\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.address, zomeName);\n }\n\n\n /** */\n get signalLogs() {\n return this._appProxy.signalLogs.filter((log) => log.cellAddr.equals(this.cell.address));\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.address.intoId(),\n provenance: this.cell.address.agentId.hash,\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.address.intoId(),\n provenance: this.cell.address.agentId.hash,\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.address.intoId(),\n provenance: this.cell.address.agentId.hash,\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<Dictionary<EntryDef>> {\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 \" + zomeName + \" result:\")\n console.log({entryDefs})\n let result: Dictionary<EntryDef> = {}\n for (const def of entryDefs.Defs) {\n let name = Object.keys(def.id)[0];\n if (\"App\" in def.id) {\n name = def.id.App;\n }\n result[name] = def;\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 let input = requestLog.request.payload;\n // if (requestLog.request.payload instanceof HoloHash) {\n // //console.log(\"instanceof HoloHash\", requestLog.request.payload);\n // input = intoAnyId(requestLog.request.payload.toBytes()).print();\n // } else {\n if (requestLog.request.payload instanceof Uint8Array) {\n //console.log(\"instanceof Uint8Array\", requestLog.request.payload);\n input = intoAnyId(requestLog.request.payload).print();\n }\n //}\n //const input = requestLog.request.payload instanceof Uint8Array ? enc64(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.address)}\"`)\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.cellAddr.str, (sys as SystemSignalProtocolVariantSelfCallStart)]);\n }\n if(sys.type == \"SelfCallEnd\") {\n endCalls.push([log.ts, log.cellAddr.str, (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"]}
1
+ {"version":3,"file":"CellProxy.js","sourceRoot":"","sources":["../src/CellProxy.ts"],"names":[],"mappings":"AAQA,OAAO,EAAC,SAAS,EAAE,KAAK,EAAC,MAAM,UAAU,CAAC;AAE1C,OAAO,EAIL,UAAU,EAIX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAC,KAAK,EAAE,WAAW,EAAC,MAAM,aAAa,CAAC;AAM/C,OAAO,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,UAAU,CAAC;AACpD,OAAO,EAAC,QAAQ,EAAE,SAAS,EAAC,MAAM,QAAQ,CAAC;AAmD3C,MAAM,OAAO,SAAU,SAAQ,SAAS,CAAC,KAAK,CAAC;IAG7C,YACU,SAAmB,EAC3B,IAAU,EAEV,cAAuB;QACvB,KAAK,EAAE,CAAC;QAJA,cAAS,GAAT,SAAS,CAAU;QA4FrB,gBAAW,GAAiB,EAAE,CAAA;QAC9B,iBAAY,GAAkB,EAAE,CAAA;QAxFtC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC;QAClE,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,IAAI,KAAK,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAG7C,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC;IACpF,CAAC;IAMS,KAAK,CAAC,oBAAoB,CAAC,MAAiB;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACjD,OAAO;QACT,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,UAAU,EAAE,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACjH,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,IAAI,UAAU,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC;YAC5F,OAAO;QACT,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,GAAG,GAAI,KAAqB,CAAC,MAAM,CAAC;YAC1C,IAAI,GAAG,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACpC,SAAS;YACX,CAAC;YACD,MAAM,GAAG,GAAG,GAAkD,CAAC;YAC/D,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;gBACnB,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBACpC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACpC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACxC,CAAC;YACD,IAAI,GAAG,CAAC,cAAc,KAAK,IAAI,CAAC,2BAA2B,EAAE,CAAC;gBAC5D,SAAS;YACX,CAAC;YAED,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAChD,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,kBAAkB,CAAC;YAC/B,OAAO,IAAI,CAAC,2BAA2B,CAAC;YACxC,MAAM;QACR,CAAC;IACH,CAAC;IAKS,KAAK,CAAC,aAAa,CAAC,MAAiB;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;YACtG,OAAO;QACT,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,GAAG,GAAI,KAAqB,CAAC,MAAM,CAAC;YAC1C,IAAI,GAAG,CAAC,IAAI,IAAI,eAAe,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBAEf,IAAI,CAAC;oBACH,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAA;gBAClE,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,CAAC,KAAK,CAAC,2DAA2D,EAAE,CAAC,CAAC,CAAC;gBAChF,CAAC;YACH,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,IAAI,aAAa,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAEvD,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC,gBAAgB,CAAC;gBAC7B,MAAM,GAAG,GAAG,GAA6C,CAAC;gBAC1D,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;oBACnB,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;oBACrC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBACjC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAiBD,gBAAgB,CAAC,OAAoB;QACnC,OAAO,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9E,CAAC;IAID,cAAc,CAAC,QAAmB,EAAE,aAAuB;QACzD,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,aAAa,CAAA,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAClG,CAAC;IAID,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3F,CAAC;IAID,KAAK,CAAC,eAAe,CAAC,MAAkB;QACtC,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAC7C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAC/E,MAAM,OAAO,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC3E,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChC,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;YACnE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChC,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IAID,eAAe,CAAC,MAAkB;QAChC,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAC7C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,OAAO,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,6BAA6B,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;QAC/F,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAOD,KAAK,CAAC,uBAAuB,CAAC,SAAiB,EAAE,SAAmB,EAAE,OAAe,EAAE,OAAY,EAAE,UAA4B,EAAE,OAAgB;QACjJ,OAAO,GAAG,OAAO,CAAA,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;QACjD,MAAM,GAAG,GAAG;YACV,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO;YACvC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACnC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI;SACxB,CAAC;QACrB,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE,EAAgB,CAAC;QAGlF,IAAI,CAAC;YACH,IAAI,CAAC,kBAAkB,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAC1D,IAAI,CAAC,2BAA2B,GAAG,SAAS,CAAC;QAC/C,CAAC;QAAC,OAAM,CAAC,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,qDAAqD,EAAE,CAAC,CAAC,CAAC;YACvE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;YACzB,OAAO,OAAO,CAAC,MAAM,CAAC,qDAAqD,CAAC,CAAC;QAC/E,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC,OAAO,CAAC;IACzB,CAAC;IAOD,KAAK,CAAC,gBAAgB,CAAC,SAAmB,EAAE,OAAe,EAAE,OAAY,EAAE,UAA4B,EAAE,OAAgB;QACvH,OAAO,GAAG,OAAO,CAAA,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;QACjD,MAAM,GAAG,GAAG;YACV,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO;YACvC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACnC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI;SACxB,CAAC;QACrB,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE,EAAgB,CAAC;QAGlF,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAC5C,CAAC;QAAC,OAAM,CAAC,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,8CAA8C,EAAE,CAAC,CAAC,CAAC;YAChE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;YACzB,OAAO,OAAO,CAAC,MAAM,CAAC,8CAA8C,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAEhD,OAAO,EAAE,CAAC;QACV,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAC/B,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACxC,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC;IACzB,CAAC;IAID,KAAK,CAAC,QAAQ,CAAC,SAAmB,EAAE,OAAe,EAAE,OAAY,EAAE,UAA4B,EAAE,OAAgB;QAC/G,OAAO,GAAG,OAAO,CAAA,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;QACjD,MAAM,GAAG,GAAG;YACV,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO;YACvC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACnC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI;SACxB,CAAC;QACrB,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE,EAAgB,CAAC;QAClF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;QACxC,CAAC;QAAC,OAAM,CAAC,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,sCAAsC,EAAE,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAC1B,OAAO,OAAO,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAC/B,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACxC,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC;IACzB,CAAC;IAOD,KAAK,CAAC,aAAa,CAAC,QAAkB;QAEpC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAA4B,CAAC;YACrG,OAAO,CAAC,KAAK,CAAC,qBAAqB,GAAG,QAAQ,GAAG,UAAU,CAAC,CAAA;YAC5D,OAAO,CAAC,GAAG,CAAC,EAAC,SAAS,EAAC,CAAC,CAAA;YACxB,IAAI,MAAM,GAA0B,EAAE,CAAA;YACtC,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;gBACjC,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClC,IAAI,KAAK,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;oBACpB,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;gBACpB,CAAC;gBACD,MAAM,CAAC,IAAK,CAAC,GAAG,GAAG,CAAC;YACtB,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,4BAA4B,GAAG,QAAQ,GAAG,WAAW,CAAC,CAAA;YACpE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;YACpB,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC;IACH,CAAC;IAOD,KAAK,CAAC,YAAY,CAAC,QAAkB;QACnC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAA;QACvC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,CAAa,CAAC;YAGnG,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,4BAA4B,GAAG,QAAQ,GAAG,gFAAgF,CAAC,CAAA;YACzI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;YACpB,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC;IACH,CAAC;IAMD,KAAK,CAAC,WAAW,CAAC,QAAkB;QAClC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;QACtC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,CAAY,CAAC;YAGhG,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,2BAA2B,GAAG,QAAQ,GAAG,+EAA+E,CAAC,CAAA;YACvI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;YACpB,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC;IACH,CAAC;IAYD,YAAY,CAAC,QAAmB;QAC9B,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACzC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC3D,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,IAAI,QAAQ,CAAC,EAAE,CAAC;gBAC1E,SAAS;YACX,CAAC;YACD,MAAM,SAAS,GAAE,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACnE,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,kBAAkB,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACvG,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC5F,IAAI,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC;YAKrC,IAAI,UAAU,CAAC,OAAO,CAAC,OAAO,YAAY,UAAU,EAAE,CAAC;gBAErD,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;YACxD,CAAC;YAGH,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAChF,MAAM,GAAG,GAAG,QAAQ;gBAClB,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE;gBACtF,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA;YAChI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACzF,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,gBAAgB,QAAQ,GAAG,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAKrB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QAC3F,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACvD,IAAI,IAAI,QAAQ,CAAA;QAClB,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAuE,EAAE,CAAC;QAC1F,MAAM,QAAQ,GAAqE,EAAE,CAAC;QACtF,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACrB,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;gBAC5C,MAAM,GAAG,GAAI,KAAqB,CAAC,MAAM,CAAC;gBACxC,IAAG,GAAG,CAAC,IAAI,IAAI,eAAe,EAAE,CAAC;oBAC/B,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAG,GAAgD,CAAC,CAAC,CAAC;gBACjG,CAAC;gBACD,IAAG,GAAG,CAAC,IAAI,IAAI,aAAa,EAAE,CAAC;oBAC7B,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAG,GAA8C,CAAC,CAAC,CAAC;gBAC7F,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,UAAU,EAAE,CAAC;YACzD,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,WAAW,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAA;YACvI,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC;gBAChB,SAAS;YACX,CAAC;YACD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;YAC5C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC;YACvC,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC;YAC3D,MAAM,GAAG,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAA;YACtI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IAC3B,CAAC;CAGF","sourcesContent":["import {\n AppSignal,\n AppSignalCb,\n CallZomeRequest,\n CapSecret,\n Timestamp,\n ZomeName\n} from \"@holochain/client\";\nimport {CellMixin, Empty} from \"./mixins\";\nimport {Cell} from \"./cell\";\nimport {\n CellIdStr,\n DnaInfo, EntryDef,\n EntryDefsCallbackResult,\n SignalType,\n SystemPulse,\n\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\";\nimport {prettyDate, prettyDuration} from \"./pretty\";\nimport {anyToB64, intoAnyId} from \"./hash\";\nimport {\n SystemSignalProtocolVariantPostCommitNewEnd,\n SystemSignalProtocolVariantSelfCallEnd,\n SystemSignalProtocolVariantSelfCallStart\n} from \"./zomeSignals.types\";\nimport {Dictionary} from \"./utils\";\n\n\n// /** */\n// export interface EntryDefMat {\n// // index: number\n// id: string,\n// visibility: \"Public\" | \"Private\",\n// requiredValidations: number,\n// cacheAtAgentActivity: boolean,\n// }\n//\n// function materializeEntryDef(def: EntryDef): EntryDefMat {\n// return {\n// id: def.id.App,\n// visibility: def.visibility,\n// requiredValidations: 0, // FIXME\n// cacheAtAgentActivity: false, // FIXME\n// }\n// }\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?: MutexInterface.Releaser;\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?: MutexInterface.Releaser;\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.address, zomeName);\n }\n\n\n /** */\n get signalLogs() {\n return this._appProxy.signalLogs.filter((log) => log.cellAddr.equals(this.cell.address));\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.address.intoId(),\n provenance: this.cell.address.agentId.hash,\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.address.intoId(),\n provenance: this.cell.address.agentId.hash,\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.address.intoId(),\n provenance: this.cell.address.agentId.hash,\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<Dictionary<EntryDef>> {\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 \" + zomeName + \" result:\")\n console.log({entryDefs})\n let result: Dictionary<EntryDef> = {}\n for (const def of entryDefs.Defs) {\n let name = Object.keys(def.id)[0];\n if (\"App\" in def.id) {\n name = def.id.App;\n }\n result[name!] = def;\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 (!requestLog || (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 let input = requestLog.request.payload;\n // if (requestLog.request.payload instanceof HoloHash) {\n // //console.log(\"instanceof HoloHash\", requestLog.request.payload);\n // input = intoAnyId(requestLog.request.payload.toBytes()).print();\n // } else {\n if (requestLog.request.payload instanceof Uint8Array) {\n //console.log(\"instanceof Uint8Array\", requestLog.request.payload);\n input = intoAnyId(requestLog.request.payload).print();\n }\n //}\n //const input = requestLog.request.payload instanceof Uint8Array ? enc64(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.address)}\"`)\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.cellAddr.str, (sys as SystemSignalProtocolVariantSelfCallStart)]);\n }\n if(sys.type == \"SelfCallEnd\") {\n endCalls.push([log.ts, log.cellAddr.str, (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"]}
@@ -3,37 +3,20 @@ import { UnsubscribeFunction } from "emittery";
3
3
  import { AppProxy } from "./AppProxy";
4
4
  import { CellIdStr } from "./types";
5
5
  import { AgentId } from "./hash";
6
- /**
7
- * Creates, connects and holds an appWebsocket.
8
- * Creates and holds Cell proxies for this appWebsocket.
9
- * Maintains a mapping between CellIds and HCLs
10
- * Handles SignalHandlers per HCL
11
- * Stores appSignal logs
12
- * TODO Implement Singleton per App port?
13
- */
14
6
  export declare class ConductorAppProxy extends AppProxy implements AppClient {
15
- defaultTimeout: number;
16
- /** -- Fields -- */
7
+ constructor(defaultTimeout: number, appId: InstalledAppId, agentId: AgentId, adminWs?: AdminWebsocket);
17
8
  private _appWs;
18
- /** -- Getters -- */
19
- /** -- AppClient (Passthrough to appWebsocket) -- */
20
9
  callZome(req: CallZomeRequest, timeout?: number): Promise<unknown>;
21
10
  appInfo(): Promise<AppInfoResponse>;
22
11
  on<Name extends keyof AppEvents>(eventName: Name | readonly Name[], listener: AppSignalCb): UnsubscribeFunction;
23
12
  createCloneCell(request: CreateCloneCellRequest): Promise<ClonedCell>;
24
13
  enableCloneCell(request: EnableCloneCellRequest): Promise<ClonedCell>;
25
14
  disableCloneCell(request: DisableCloneCellRequest): Promise<void>;
26
- /** */
27
15
  networkInfo(args: AppNetworkInfoRequest): Promise<NetworkInfoResponse>;
28
- /** Store networkInfo calls */
29
16
  private _lastTimeQueriedMap;
30
17
  private _networkInfoLogs;
31
18
  get networkInfoLogs(): Record<CellIdStr, [Timestamp, NetworkInfo][]>;
32
- /** -- Creation -- */
33
- /** async Factory */
34
19
  static new(port_or_socket: number | AppWebsocket, appId: InstalledAppId, adminUrl?: URL, defaultTimeout?: number): Promise<ConductorAppProxy>;
35
- /** */
36
20
  private static fromSocket;
37
- /** Ctor */
38
- constructor(defaultTimeout: number, appId: InstalledAppId, agentId: AgentId, adminWs?: AdminWebsocket);
39
21
  }
22
+ //# sourceMappingURL=ConductorAppProxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConductorAppProxy.d.ts","sourceRoot":"","sources":["../src/ConductorAppProxy.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,YAAY,EACZ,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,UAAU,EACV,WAAW,EAEX,SAAS,EACT,SAAS,EACT,SAAS,EACT,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,OAAO,EAAc,SAAS,EAAC,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAC,OAAO,EAAQ,MAAM,QAAQ,CAAC;AActC,qBAAa,iBAAkB,SAAQ,QAAS,YAAW,SAAS;gBAGxC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,cAAc;IAOnH,OAAO,CAAC,MAAM,CAAgB;IAWf,QAAQ,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKlE,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;IAIzC,EAAE,CAAC,IAAI,SAAS,MAAM,SAAS,EACtC,SAAS,EAAE,IAAI,GAAG,SAAS,IAAI,EAAE,EACjC,QAAQ,EAAE,WAAW,GACpB,mBAAmB;IAIP,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC;IAKrE,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC;IAKrE,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjE,WAAW,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA+BrF,OAAO,CAAC,mBAAmB,CAA2C;IAEtE,OAAO,CAAC,gBAAgB,CAAqD;IAE7E,IAAa,eAAe,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC,CAAgC;WAOhG,GAAG,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;mBAsC9H,UAAU;CAWhC"}
@@ -3,19 +3,12 @@ import { AppProxy } from "./AppProxy";
3
3
  import { CellAddress } from "./types";
4
4
  import { AgentId, DnaId } from "./hash";
5
5
  import { AgentIdMap } from "./holochain-id-map";
6
- /**
7
- * Creates, connects and holds an appWebsocket.
8
- * Creates and holds Cell proxies for this appWebsocket.
9
- * Maintains a mapping between CellIds and HCLs
10
- * Handles SignalHandlers per HCL
11
- * Stores appSignal logs
12
- * TODO Implement Singleton per App port?
13
- */
14
6
  export class ConductorAppProxy extends AppProxy {
15
- /** -- Getters -- */
16
- ///** Check this after connecting since AppWebsocket can shamelessly override the provided args. */
17
- //get appIdOfShame(): InstalledAppId | undefined { return this._appWs.overrideInstalledAppId;}
18
- /** -- AppClient (Passthrough to appWebsocket) -- */
7
+ constructor(defaultTimeout, appId, agentId, adminWs) {
8
+ super(defaultTimeout, appId, agentId, adminWs);
9
+ this._lastTimeQueriedMap = new AgentIdMap();
10
+ this._networkInfoLogs = {};
11
+ }
19
12
  async callZome(req, timeout) {
20
13
  timeout = timeout ? timeout : this.defaultTimeout;
21
14
  return this._appWs.callZome(req, timeout);
@@ -27,49 +20,34 @@ export class ConductorAppProxy extends AppProxy {
27
20
  return this._appWs.on(eventName, listener);
28
21
  }
29
22
  async createCloneCell(request) {
30
- //console.log("createCloneCell() called:", request)
31
23
  return this._appWs.createCloneCell(request);
32
24
  }
33
25
  async enableCloneCell(request) {
34
- //console.log("enableCloneCell() called:", request)
35
26
  return this._appWs.enableCloneCell(request);
36
27
  }
37
28
  async disableCloneCell(request) {
38
- //console.log("disableCloneCell() called:", request)
39
29
  return this._appWs.disableCloneCell(request);
40
30
  }
41
- // async networkInfo(args: AppNetworkInfoRequest): Promise<NetworkInfoResponse> {
42
- // return this._appWs!.networkInfo(args);
43
- // }
44
- /** */
45
31
  async networkInfo(args) {
46
32
  const agentId = new AgentId(this._appWs.myPubKey);
47
- /* Call networkInfo */
48
33
  const response = await this._appWs.networkInfo({
49
34
  dnas: args.dnas,
50
35
  last_time_queried: this._lastTimeQueriedMap.get(agentId)
51
36
  });
52
37
  this._lastTimeQueriedMap.set(agentId, Date.now());
53
- /* Convert result */
54
38
  let i = 0;
55
- //let result = {}
56
39
  for (const netInfo of response) {
57
40
  const dnaId = new DnaId(args.dnas[i]);
58
- //result[dnaHash] = [this._lastTimeQueriedMap[agent], netInfo];
59
- /* Store */
60
41
  const cellAddr = new CellAddress(dnaId, agentId);
61
42
  if (!this._networkInfoLogs[cellAddr.str]) {
62
43
  this._networkInfoLogs[cellAddr.str] = [];
63
44
  }
64
45
  this._networkInfoLogs[cellAddr.str].push([this._lastTimeQueriedMap.get(agentId), netInfo]);
65
- /* */
66
46
  i += 1;
67
47
  }
68
48
  return response;
69
49
  }
70
50
  get networkInfoLogs() { return this._networkInfoLogs; }
71
- /** -- Creation -- */
72
- /** async Factory */
73
51
  static async new(port_or_socket, appId, adminUrl, defaultTimeout) {
74
52
  const timeout = defaultTimeout ? defaultTimeout : 10 * 1000;
75
53
  if (typeof port_or_socket == 'object') {
@@ -78,17 +56,23 @@ export class ConductorAppProxy extends AppProxy {
78
56
  else {
79
57
  let wsUrl = new URL(`ws://localhost:${port_or_socket}`);
80
58
  try {
81
- let token;
82
- let adminWs;
59
+ let token = undefined;
60
+ let adminWs = undefined;
83
61
  if (adminUrl) {
84
62
  adminWs = await AdminWebsocket.connect({ url: adminUrl });
85
63
  console.log({ adminWs });
86
64
  const issued = await adminWs.issueAppAuthenticationToken({ installed_app_id: appId });
87
65
  token = issued.token;
88
66
  }
89
- const appWs = await AppWebsocket.connect({ url: wsUrl, defaultTimeout: timeout, token });
67
+ const options = {
68
+ url: wsUrl,
69
+ defaultTimeout: timeout,
70
+ };
71
+ if (token) {
72
+ options.token = token;
73
+ }
74
+ const appWs = await AppWebsocket.connect(options);
90
75
  const agentId = new AgentId(appWs.myPubKey);
91
- //console.log("appWs.myPubKey", appWs.myPubKey, agentId);
92
76
  let conductor = new ConductorAppProxy(timeout, appId, agentId, adminWs);
93
77
  conductor._appWs = appWs;
94
78
  conductor._appWs.on('signal', (sig) => { conductor.onSignal(sig); });
@@ -100,7 +84,6 @@ export class ConductorAppProxy extends AppProxy {
100
84
  }
101
85
  }
102
86
  }
103
- /** */
104
87
  static async fromSocket(appWebsocket, defaultTimeout) {
105
88
  try {
106
89
  let conductor = new ConductorAppProxy(defaultTimeout, appWebsocket.installedAppId, new AgentId(appWebsocket.myPubKey));
@@ -113,14 +96,5 @@ export class ConductorAppProxy extends AppProxy {
113
96
  return Promise.reject("ConductorAppProxy initialization failed");
114
97
  }
115
98
  }
116
- /** Ctor */
117
- /*protected*/ constructor(defaultTimeout, appId, agentId, adminWs) {
118
- super(defaultTimeout, appId, agentId, adminWs);
119
- this.defaultTimeout = defaultTimeout;
120
- /** Store networkInfo calls */
121
- //private _lastTimeQueriedMap: Record<AgentPubKeyB64, Timestamp> = {};
122
- this._lastTimeQueriedMap = new AgentIdMap();
123
- this._networkInfoLogs = {};
124
- }
125
99
  }
126
100
  //# sourceMappingURL=ConductorAppProxy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConductorAppProxy.js","sourceRoot":"","sources":["../src/ConductorAppProxy.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AppInfoResponse,\n AppWebsocket,\n CallZomeRequest,\n InstalledAppId,\n CreateCloneCellRequest,\n DisableCloneCellRequest,\n EnableCloneCellRequest,\n ClonedCell,\n NetworkInfo,\n NetworkInfoRequest,\n Timestamp,\n AppClient,\n AppEvents,\n AppSignalCb,\n AppNetworkInfoRequest,\n NetworkInfoResponse,\n AdminWebsocket,\n} from \"@holochain/client\";\nimport { UnsubscribeFunction } from \"emittery\";\nimport {AppProxy} from \"./AppProxy\";\nimport {CellAddress, CellIdStr} from \"./types\";\nimport {AgentId, DnaId} from \"./hash\";\nimport {AgentIdMap} from \"./holochain-id-map\";\n\n\n/**\n * Creates, connects and holds an appWebsocket.\n * Creates and holds Cell proxies for this appWebsocket.\n * Maintains a mapping between CellIds and HCLs\n * Handles SignalHandlers per HCL\n * Stores appSignal logs\n * TODO Implement Singleton per App port?\n */\nexport class ConductorAppProxy extends AppProxy implements AppClient {\n\n /** -- Fields -- */\n\n private _appWs!: AppWebsocket;\n\n\n /** -- Getters -- */\n\n ///** Check this after connecting since AppWebsocket can shamelessly override the provided args. */\n //get appIdOfShame(): InstalledAppId | undefined { return this._appWs.overrideInstalledAppId;}\n\n\n /** -- AppClient (Passthrough to appWebsocket) -- */\n\n async callZome(req: CallZomeRequest, timeout?: number): Promise<unknown> {\n timeout = timeout ? timeout : this.defaultTimeout\n return this._appWs.callZome(req, timeout)\n }\n\n async appInfo(): Promise<AppInfoResponse> {\n return this._appWs!.appInfo();\n }\n\n on<Name extends keyof AppEvents>(\n eventName: Name | readonly Name[],\n listener: AppSignalCb\n ): UnsubscribeFunction {\n return this._appWs!.on(eventName, listener);\n }\n\n async createCloneCell(request: CreateCloneCellRequest): Promise<ClonedCell> {\n //console.log(\"createCloneCell() called:\", request)\n return this._appWs!.createCloneCell(request);\n }\n\n async enableCloneCell(request: EnableCloneCellRequest): Promise<ClonedCell> {\n //console.log(\"enableCloneCell() called:\", request)\n return this._appWs!.enableCloneCell(request);\n }\n\n async disableCloneCell(request: DisableCloneCellRequest): Promise<void> {\n //console.log(\"disableCloneCell() called:\", request)\n return this._appWs!.disableCloneCell(request);\n }\n\n // async networkInfo(args: AppNetworkInfoRequest): Promise<NetworkInfoResponse> {\n // return this._appWs!.networkInfo(args);\n // }\n\n\n /** */\n async networkInfo(args: AppNetworkInfoRequest): Promise<NetworkInfoResponse> {\n const agentId = new AgentId(this._appWs.myPubKey);\n /* Call networkInfo */\n const response = await this._appWs.networkInfo({\n dnas: args.dnas,\n last_time_queried: this._lastTimeQueriedMap.get(agentId)\n } as NetworkInfoRequest);\n this._lastTimeQueriedMap.set(agentId, Date.now());\n\n /* Convert result */\n let i = 0;\n //let result = {}\n for (const netInfo of response) {\n const dnaId = new DnaId(args.dnas[i]);\n //result[dnaHash] = [this._lastTimeQueriedMap[agent], netInfo];\n /* Store */\n const cellAddr = new CellAddress(dnaId, agentId);\n if (!this._networkInfoLogs[cellAddr.str]) {\n this._networkInfoLogs[cellAddr.str] = [];\n }\n this._networkInfoLogs[cellAddr.str].push([this._lastTimeQueriedMap.get(agentId), netInfo])\n /* */\n i += 1;\n }\n return response;\n }\n\n\n\n /** Store networkInfo calls */\n //private _lastTimeQueriedMap: Record<AgentPubKeyB64, Timestamp> = {};\n private _lastTimeQueriedMap: AgentIdMap<Timestamp> = new AgentIdMap();\n\n private _networkInfoLogs: Record<CellIdStr, [Timestamp, NetworkInfo][]> = {};\n\n get networkInfoLogs(): Record<CellIdStr, [Timestamp, NetworkInfo][]> {return this._networkInfoLogs;}\n\n\n\n/** -- Creation -- */\n\n /** async Factory */\n static async new(port_or_socket: number | AppWebsocket, appId: InstalledAppId, adminUrl?: URL, defaultTimeout?: number): Promise<ConductorAppProxy> {\n const timeout = defaultTimeout ? defaultTimeout : 10 * 1000;\n if (typeof port_or_socket == 'object') {\n return ConductorAppProxy.fromSocket(port_or_socket, timeout);\n } else {\n let wsUrl = new URL(`ws://localhost:${port_or_socket}`);\n try {\n let token;\n let adminWs: AdminWebsocket;\n if (adminUrl) {\n adminWs = await AdminWebsocket.connect({url: adminUrl});\n console.log({adminWs});\n const issued = await adminWs.issueAppAuthenticationToken({installed_app_id: appId});\n token = issued.token;\n }\n const appWs = await AppWebsocket.connect({url: wsUrl, defaultTimeout: timeout, token});\n const agentId = new AgentId(appWs.myPubKey);\n //console.log(\"appWs.myPubKey\", appWs.myPubKey, agentId);\n let conductor = new ConductorAppProxy(timeout, appId, agentId, adminWs);\n conductor._appWs = appWs;\n conductor._appWs.on('signal', (sig) => {conductor.onSignal(sig)});\n return conductor;\n } catch (e) {\n console.error(\"ConductorAppProxy initialization failed\", e)\n return Promise.reject(\"ConductorAppProxy initialization failed\");\n }\n }\n }\n\n\n /** */\n private static async fromSocket(appWebsocket: AppWebsocket, defaultTimeout: number): Promise<ConductorAppProxy> {\n try {\n let conductor = new ConductorAppProxy(defaultTimeout, appWebsocket.installedAppId, new AgentId(appWebsocket.myPubKey));\n conductor._appWs = appWebsocket;\n conductor._appWs.on('signal', (sig) => {conductor.onSignal(sig)})\n return conductor;\n } catch (e) {\n console.error(\"ConductorAppProxy initialization failed\", e)\n return Promise.reject(\"ConductorAppProxy initialization failed\");\n }\n }\n\n\n /** Ctor */\n /*protected*/ constructor(public defaultTimeout: number, appId: InstalledAppId, agentId: AgentId, adminWs?: AdminWebsocket) {\n super(defaultTimeout, appId, agentId, adminWs);\n }\n\n}\n\n"]}
1
+ {"version":3,"file":"ConductorAppProxy.js","sourceRoot":"","sources":["../src/ConductorAppProxy.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AppInfoResponse,\n AppWebsocket,\n CallZomeRequest,\n InstalledAppId,\n CreateCloneCellRequest,\n DisableCloneCellRequest,\n EnableCloneCellRequest,\n ClonedCell,\n NetworkInfo,\n NetworkInfoRequest,\n Timestamp,\n AppClient,\n AppEvents,\n AppSignalCb,\n AppNetworkInfoRequest,\n NetworkInfoResponse,\n AdminWebsocket,\n} from \"@holochain/client\";\nimport { UnsubscribeFunction } from \"emittery\";\nimport {AppProxy} from \"./AppProxy\";\nimport {CellAddress, CellIdStr} from \"./types\";\nimport {AgentId, DnaId} from \"./hash\";\nimport {AgentIdMap} from \"./holochain-id-map\";\nimport {AppWebsocketConnectionOptions} from \"@holochain/client/lib/api/app/types\";\nimport {AppAuthenticationToken} from \"@holochain/client/lib/api/admin/types\";\n\n\n/**\n * Creates, connects and holds an appWebsocket.\n * Creates and holds Cell proxies for this appWebsocket.\n * Maintains a mapping between CellIds and HCLs\n * Handles SignalHandlers per HCL\n * Stores appSignal logs\n * TODO Implement Singleton per App port?\n */\nexport class ConductorAppProxy extends AppProxy implements AppClient {\n\n /** Ctor */\n /*protected*/ constructor(defaultTimeout: number, appId: InstalledAppId, agentId: AgentId, adminWs?: AdminWebsocket) {\n super(defaultTimeout, appId, agentId, adminWs);\n }\n\n\n /** -- Fields -- */\n\n private _appWs!: AppWebsocket;\n\n\n /** -- Getters -- */\n\n ///** Check this after connecting since AppWebsocket can shamelessly override the provided args. */\n //get appIdOfShame(): InstalledAppId | undefined { return this._appWs.overrideInstalledAppId;}\n\n\n /** -- AppClient (Passthrough to appWebsocket) -- */\n\n override async callZome(req: CallZomeRequest, timeout?: number): Promise<unknown> {\n timeout = timeout ? timeout : this.defaultTimeout\n return this._appWs.callZome(req, timeout)\n }\n\n override async appInfo(): Promise<AppInfoResponse> {\n return this._appWs!.appInfo();\n }\n\n override on<Name extends keyof AppEvents>(\n eventName: Name | readonly Name[],\n listener: AppSignalCb\n ): UnsubscribeFunction {\n return this._appWs!.on(eventName, listener);\n }\n\n override async createCloneCell(request: CreateCloneCellRequest): Promise<ClonedCell> {\n //console.log(\"createCloneCell() called:\", request)\n return this._appWs!.createCloneCell(request);\n }\n\n override async enableCloneCell(request: EnableCloneCellRequest): Promise<ClonedCell> {\n //console.log(\"enableCloneCell() called:\", request)\n return this._appWs!.enableCloneCell(request);\n }\n\n override async disableCloneCell(request: DisableCloneCellRequest): Promise<void> {\n //console.log(\"disableCloneCell() called:\", request)\n return this._appWs!.disableCloneCell(request);\n }\n\n // async networkInfo(args: AppNetworkInfoRequest): Promise<NetworkInfoResponse> {\n // return this._appWs!.networkInfo(args);\n // }\n\n\n /** */\n override async networkInfo(args: AppNetworkInfoRequest): Promise<NetworkInfoResponse> {\n const agentId = new AgentId(this._appWs.myPubKey);\n /* Call networkInfo */\n const response = await this._appWs.networkInfo({\n dnas: args.dnas,\n last_time_queried: this._lastTimeQueriedMap.get(agentId)\n } as NetworkInfoRequest);\n this._lastTimeQueriedMap.set(agentId, Date.now());\n\n /* Convert result */\n let i = 0;\n //let result = {}\n for (const netInfo of response) {\n const dnaId = new DnaId(args.dnas[i]!);\n //result[dnaHash] = [this._lastTimeQueriedMap[agent], netInfo];\n /* Store */\n const cellAddr = new CellAddress(dnaId, agentId);\n if (!this._networkInfoLogs[cellAddr.str]) {\n this._networkInfoLogs[cellAddr.str] = [];\n }\n this._networkInfoLogs[cellAddr.str]!.push([this._lastTimeQueriedMap.get(agentId)!, netInfo])\n /* */\n i += 1;\n }\n return response;\n }\n\n\n\n /** Store networkInfo calls */\n //private _lastTimeQueriedMap: Record<AgentPubKeyB64, Timestamp> = {};\n private _lastTimeQueriedMap: AgentIdMap<Timestamp> = new AgentIdMap();\n\n private _networkInfoLogs: Record<CellIdStr, [Timestamp, NetworkInfo][]> = {};\n\n override get networkInfoLogs(): Record<CellIdStr, [Timestamp, NetworkInfo][]> {return this._networkInfoLogs;}\n\n\n\n/** -- Creation -- */\n\n /** async Factory */\n static async new(port_or_socket: number | AppWebsocket, appId: InstalledAppId, adminUrl?: URL, defaultTimeout?: number): Promise<ConductorAppProxy> {\n const timeout = defaultTimeout ? defaultTimeout : 10 * 1000;\n if (typeof port_or_socket == 'object') {\n return ConductorAppProxy.fromSocket(port_or_socket, timeout);\n } else {\n let wsUrl = new URL(`ws://localhost:${port_or_socket}`);\n try {\n let token: AppAuthenticationToken | undefined = undefined;\n let adminWs: AdminWebsocket | undefined = undefined;\n if (adminUrl) {\n adminWs = await AdminWebsocket.connect({url: adminUrl});\n console.log({adminWs});\n const issued = await adminWs.issueAppAuthenticationToken({installed_app_id: appId});\n token = issued.token;\n }\n const options: AppWebsocketConnectionOptions = {\n url: wsUrl,\n defaultTimeout: timeout,\n };\n if (token) {\n options.token = token;\n }\n const appWs = await AppWebsocket.connect(options);\n const agentId = new AgentId(appWs.myPubKey);\n //console.log(\"appWs.myPubKey\", appWs.myPubKey, agentId);\n let conductor = new ConductorAppProxy(timeout, appId, agentId, adminWs);\n conductor._appWs = appWs;\n conductor._appWs.on('signal', (sig) => {conductor.onSignal(sig)});\n return conductor;\n } catch (e) {\n console.error(\"ConductorAppProxy initialization failed\", e)\n return Promise.reject(\"ConductorAppProxy initialization failed\");\n }\n }\n }\n\n\n /** */\n private static async fromSocket(appWebsocket: AppWebsocket, defaultTimeout: number): Promise<ConductorAppProxy> {\n try {\n let conductor = new ConductorAppProxy(defaultTimeout, appWebsocket.installedAppId, new AgentId(appWebsocket.myPubKey));\n conductor._appWs = appWebsocket;\n conductor._appWs.on('signal', (sig) => {conductor.onSignal(sig)})\n return conductor;\n } catch (e) {\n console.error(\"ConductorAppProxy initialization failed\", e)\n return Promise.reject(\"ConductorAppProxy initialization failed\");\n }\n }\n}\n\n"]}
@@ -1,14 +1,9 @@
1
1
  import { AppInfoResponse, CallZomeRequest, DisableCloneCellRequest, EnableCloneCellRequest, ClonedCell, AppClient, AppEvents, AppSignalCb, AppCreateCloneCellRequest, CreateCloneCellResponse, AppNetworkInfoRequest, NetworkInfoResponse } from "@holochain/client";
2
2
  import { UnsubscribeFunction } from "emittery";
3
3
  import { AppProxy } from "./AppProxy";
4
- /**
5
- *
6
- */
7
4
  export declare class ExternalAppProxy extends AppProxy implements AppClient {
8
5
  private _appClient;
9
- /** Ctor */
10
6
  constructor(_appClient: AppClient, defaultTimeout: number);
11
- /** -- AppClient (Passthrough to external AppClient) -- */
12
7
  callZome(req: CallZomeRequest, timeout?: number): Promise<unknown>;
13
8
  on<Name extends keyof AppEvents>(eventName: Name | readonly Name[], listener: AppSignalCb): UnsubscribeFunction;
14
9
  appInfo(): Promise<AppInfoResponse>;
@@ -17,3 +12,4 @@ export declare class ExternalAppProxy extends AppProxy implements AppClient {
17
12
  disableCloneCell(request: DisableCloneCellRequest): Promise<void>;
18
13
  networkInfo(args: AppNetworkInfoRequest): Promise<NetworkInfoResponse>;
19
14
  }
15
+ //# sourceMappingURL=ExternalAppProxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExternalAppProxy.d.ts","sourceRoot":"","sources":["../src/ExternalAppProxy.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,sBAAsB,EACtB,UAAU,EACV,SAAS,EACT,SAAS,EACT,WAAW,EACX,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EAAE,mBAAmB,EAC3C,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AAOpC,qBAAa,gBAAiB,SAAQ,QAAS,YAAW,SAAS;IAGvC,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM;IAWhE,QAAQ,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKxE,EAAE,CAAC,IAAI,SAAS,MAAM,SAAS,EACtC,SAAS,EAAE,IAAI,GAAG,SAAS,IAAI,EAAE,EACjC,QAAQ,EAAE,WAAW,GACpB,mBAAmB;IAIP,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;IAInC,eAAe,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAIrF,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC;IAIrE,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvE,WAAW,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAIhF"}