@resonatehq/sdk 0.9.6 → 0.10.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 (234) hide show
  1. package/README.md +84 -12
  2. package/dist/clock.d.ts.map +1 -0
  3. package/dist/clock.js +12 -0
  4. package/dist/clock.js.map +1 -0
  5. package/dist/codec.d.ts +11 -0
  6. package/dist/codec.d.ts.map +1 -0
  7. package/dist/codec.js +115 -0
  8. package/dist/codec.js.map +1 -0
  9. package/dist/computation.d.ts +40 -0
  10. package/dist/computation.d.ts.map +1 -0
  11. package/dist/computation.js +152 -0
  12. package/dist/computation.js.map +1 -0
  13. package/dist/{src/context.d.ts → context.d.ts} +65 -40
  14. package/dist/context.d.ts.map +1 -0
  15. package/dist/{src/context.js → context.js} +131 -153
  16. package/dist/context.js.map +1 -0
  17. package/dist/core.d.ts +45 -0
  18. package/dist/core.d.ts.map +1 -0
  19. package/dist/core.js +140 -0
  20. package/dist/core.js.map +1 -0
  21. package/dist/coroutine.d.ts +37 -0
  22. package/dist/coroutine.d.ts.map +1 -0
  23. package/dist/coroutine.js +258 -0
  24. package/dist/coroutine.js.map +1 -0
  25. package/dist/{src/decorator.d.ts → decorator.d.ts} +8 -8
  26. package/dist/decorator.d.ts.map +1 -0
  27. package/dist/decorator.js +149 -0
  28. package/dist/decorator.js.map +1 -0
  29. package/dist/encryptor.d.ts +10 -0
  30. package/dist/encryptor.d.ts.map +1 -0
  31. package/dist/encryptor.js +9 -0
  32. package/dist/encryptor.js.map +1 -0
  33. package/dist/{src/exceptions.d.ts → exceptions.d.ts} +4 -1
  34. package/dist/exceptions.d.ts.map +1 -0
  35. package/dist/{src/exceptions.js → exceptions.js} +11 -11
  36. package/dist/exceptions.js.map +1 -0
  37. package/dist/{src/heartbeat.d.ts → heartbeat.d.ts} +5 -3
  38. package/dist/heartbeat.d.ts.map +1 -0
  39. package/dist/heartbeat.js +50 -0
  40. package/dist/heartbeat.js.map +1 -0
  41. package/dist/index.d.ts +21 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +15 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/logger.d.ts +33 -0
  46. package/dist/logger.d.ts.map +1 -0
  47. package/dist/logger.js +54 -0
  48. package/dist/logger.js.map +1 -0
  49. package/dist/network/http.d.ts +82 -0
  50. package/dist/network/http.d.ts.map +1 -0
  51. package/dist/network/http.js +339 -0
  52. package/dist/network/http.js.map +1 -0
  53. package/dist/network/local.d.ts +179 -0
  54. package/dist/network/local.d.ts.map +1 -0
  55. package/dist/network/local.js +1232 -0
  56. package/dist/network/local.js.map +1 -0
  57. package/dist/network/network.d.ts +16 -0
  58. package/dist/network/network.d.ts.map +1 -0
  59. package/dist/network/network.js +2 -0
  60. package/dist/network/network.js.map +1 -0
  61. package/dist/network/types.d.ts +1279 -0
  62. package/dist/network/types.d.ts.map +1 -0
  63. package/dist/network/types.js +919 -0
  64. package/dist/network/types.js.map +1 -0
  65. package/dist/{src/options.d.ts → options.d.ts} +10 -4
  66. package/dist/options.d.ts.map +1 -0
  67. package/dist/options.js +32 -0
  68. package/dist/options.js.map +1 -0
  69. package/dist/promises.d.ts +41 -0
  70. package/dist/promises.d.ts.map +1 -0
  71. package/dist/promises.js +113 -0
  72. package/dist/promises.js.map +1 -0
  73. package/dist/{src/registry.d.ts → registry.d.ts} +1 -1
  74. package/dist/registry.d.ts.map +1 -0
  75. package/dist/{src/registry.js → registry.js} +6 -13
  76. package/dist/registry.js.map +1 -0
  77. package/dist/resonate.d.ts +168 -0
  78. package/dist/resonate.d.ts.map +1 -0
  79. package/dist/resonate.js +488 -0
  80. package/dist/resonate.js.map +1 -0
  81. package/dist/retries.d.ts.map +1 -0
  82. package/dist/{src/retries.js → retries.js} +4 -11
  83. package/dist/retries.js.map +1 -0
  84. package/dist/schedules.d.ts +22 -0
  85. package/dist/schedules.d.ts.map +1 -0
  86. package/dist/schedules.js +65 -0
  87. package/dist/schedules.js.map +1 -0
  88. package/dist/trace.d.ts +79 -0
  89. package/dist/trace.d.ts.map +1 -0
  90. package/dist/trace.js +224 -0
  91. package/dist/trace.js.map +1 -0
  92. package/dist/types.d.ts +21 -0
  93. package/dist/types.d.ts.map +1 -0
  94. package/dist/types.js +2 -0
  95. package/dist/types.js.map +1 -0
  96. package/dist/{src/util.d.ts → util.d.ts} +10 -6
  97. package/dist/util.d.ts.map +1 -0
  98. package/dist/util.js +156 -0
  99. package/dist/util.js.map +1 -0
  100. package/package.json +18 -10
  101. package/dist/dev/network.d.ts +0 -34
  102. package/dist/dev/network.d.ts.map +0 -1
  103. package/dist/dev/network.js +0 -115
  104. package/dist/dev/network.js.map +0 -1
  105. package/dist/dev/server.d.ts +0 -89
  106. package/dist/dev/server.d.ts.map +0 -1
  107. package/dist/dev/server.js +0 -890
  108. package/dist/dev/server.js.map +0 -1
  109. package/dist/sim/example-1.d.ts +0 -2
  110. package/dist/sim/example-1.d.ts.map +0 -1
  111. package/dist/sim/example-1.js +0 -95
  112. package/dist/sim/example-1.js.map +0 -1
  113. package/dist/sim/example-2.d.ts +0 -2
  114. package/dist/sim/example-2.d.ts.map +0 -1
  115. package/dist/sim/example-2.js +0 -97
  116. package/dist/sim/example-2.js.map +0 -1
  117. package/dist/sim/example-3.d.ts +0 -2
  118. package/dist/sim/example-3.d.ts.map +0 -1
  119. package/dist/sim/example-3.js +0 -97
  120. package/dist/sim/example-3.js.map +0 -1
  121. package/dist/sim/main.d.ts +0 -14
  122. package/dist/sim/main.d.ts.map +0 -1
  123. package/dist/sim/main.js +0 -207
  124. package/dist/sim/main.js.map +0 -1
  125. package/dist/sim/src/server.d.ts +0 -15
  126. package/dist/sim/src/server.d.ts.map +0 -1
  127. package/dist/sim/src/server.js +0 -85
  128. package/dist/sim/src/server.js.map +0 -1
  129. package/dist/sim/src/simulator.d.ts +0 -65
  130. package/dist/sim/src/simulator.d.ts.map +0 -1
  131. package/dist/sim/src/simulator.js +0 -236
  132. package/dist/sim/src/simulator.js.map +0 -1
  133. package/dist/sim/src/worker.d.ts +0 -23
  134. package/dist/sim/src/worker.d.ts.map +0 -1
  135. package/dist/sim/src/worker.js +0 -217
  136. package/dist/sim/src/worker.js.map +0 -1
  137. package/dist/src/clock.d.ts.map +0 -1
  138. package/dist/src/clock.js +0 -17
  139. package/dist/src/clock.js.map +0 -1
  140. package/dist/src/computation.d.ts +0 -49
  141. package/dist/src/computation.d.ts.map +0 -1
  142. package/dist/src/computation.js +0 -314
  143. package/dist/src/computation.js.map +0 -1
  144. package/dist/src/context.d.ts.map +0 -1
  145. package/dist/src/context.js.map +0 -1
  146. package/dist/src/core.d.ts +0 -12
  147. package/dist/src/core.d.ts.map +0 -1
  148. package/dist/src/core.js +0 -28
  149. package/dist/src/core.js.map +0 -1
  150. package/dist/src/coroutine.d.ts +0 -42
  151. package/dist/src/coroutine.d.ts.map +0 -1
  152. package/dist/src/coroutine.js +0 -364
  153. package/dist/src/coroutine.js.map +0 -1
  154. package/dist/src/decorator.d.ts.map +0 -1
  155. package/dist/src/decorator.js +0 -220
  156. package/dist/src/decorator.js.map +0 -1
  157. package/dist/src/encoder.d.ts +0 -12
  158. package/dist/src/encoder.d.ts.map +0 -1
  159. package/dist/src/encoder.js +0 -101
  160. package/dist/src/encoder.js.map +0 -1
  161. package/dist/src/encryptor.d.ts +0 -10
  162. package/dist/src/encryptor.d.ts.map +0 -1
  163. package/dist/src/encryptor.js +0 -13
  164. package/dist/src/encryptor.js.map +0 -1
  165. package/dist/src/exceptions.d.ts.map +0 -1
  166. package/dist/src/exceptions.js.map +0 -1
  167. package/dist/src/handler.d.ts +0 -49
  168. package/dist/src/handler.d.ts.map +0 -1
  169. package/dist/src/handler.js +0 -316
  170. package/dist/src/handler.js.map +0 -1
  171. package/dist/src/heartbeat.d.ts.map +0 -1
  172. package/dist/src/heartbeat.js +0 -87
  173. package/dist/src/heartbeat.js.map +0 -1
  174. package/dist/src/index.d.ts +0 -15
  175. package/dist/src/index.d.ts.map +0 -1
  176. package/dist/src/index.js +0 -61
  177. package/dist/src/index.js.map +0 -1
  178. package/dist/src/network/network.d.ts +0 -254
  179. package/dist/src/network/network.d.ts.map +0 -1
  180. package/dist/src/network/network.js +0 -4
  181. package/dist/src/network/network.js.map +0 -1
  182. package/dist/src/network/remote.d.ts +0 -85
  183. package/dist/src/network/remote.d.ts.map +0 -1
  184. package/dist/src/network/remote.js +0 -523
  185. package/dist/src/network/remote.js.map +0 -1
  186. package/dist/src/nursery.d.ts +0 -19
  187. package/dist/src/nursery.d.ts.map +0 -1
  188. package/dist/src/nursery.js +0 -102
  189. package/dist/src/nursery.js.map +0 -1
  190. package/dist/src/options.d.ts.map +0 -1
  191. package/dist/src/options.js +0 -70
  192. package/dist/src/options.js.map +0 -1
  193. package/dist/src/processor/processor.d.ts +0 -12
  194. package/dist/src/processor/processor.d.ts.map +0 -1
  195. package/dist/src/processor/processor.js +0 -43
  196. package/dist/src/processor/processor.js.map +0 -1
  197. package/dist/src/promises.d.ts +0 -54
  198. package/dist/src/promises.d.ts.map +0 -1
  199. package/dist/src/promises.js +0 -169
  200. package/dist/src/promises.js.map +0 -1
  201. package/dist/src/registry.d.ts.map +0 -1
  202. package/dist/src/registry.js.map +0 -1
  203. package/dist/src/resonate-inner.d.ts +0 -60
  204. package/dist/src/resonate-inner.d.ts.map +0 -1
  205. package/dist/src/resonate-inner.js +0 -97
  206. package/dist/src/resonate-inner.js.map +0 -1
  207. package/dist/src/resonate.d.ts +0 -341
  208. package/dist/src/resonate.d.ts.map +0 -1
  209. package/dist/src/resonate.js +0 -591
  210. package/dist/src/resonate.js.map +0 -1
  211. package/dist/src/retries.d.ts.map +0 -1
  212. package/dist/src/retries.js.map +0 -1
  213. package/dist/src/schedules.d.ts +0 -19
  214. package/dist/src/schedules.d.ts.map +0 -1
  215. package/dist/src/schedules.js +0 -85
  216. package/dist/src/schedules.js.map +0 -1
  217. package/dist/src/tasks.d.ts +0 -9
  218. package/dist/src/tasks.d.ts.map +0 -1
  219. package/dist/src/tasks.js +0 -61
  220. package/dist/src/tasks.js.map +0 -1
  221. package/dist/src/tracer.d.ts +0 -23
  222. package/dist/src/tracer.d.ts.map +0 -1
  223. package/dist/src/tracer.js +0 -25
  224. package/dist/src/tracer.js.map +0 -1
  225. package/dist/src/types.d.ts +0 -28
  226. package/dist/src/types.d.ts.map +0 -1
  227. package/dist/src/types.js +0 -11
  228. package/dist/src/types.js.map +0 -1
  229. package/dist/src/util.d.ts.map +0 -1
  230. package/dist/src/util.js +0 -120
  231. package/dist/src/util.js.map +0 -1
  232. package/dist/tsconfig.build.tsbuildinfo +0 -1
  233. /package/dist/{src/clock.d.ts → clock.d.ts} +0 -0
  234. /package/dist/{src/retries.d.ts → retries.d.ts} +0 -0
@@ -1,15 +0,0 @@
1
- import { Server } from "../../dev/server";
2
- import type { StepClock } from "../../src/clock";
3
- import type { Message as NetworkMessage, Request, Response } from "../../src/network/network";
4
- import { Message, Process } from "./simulator";
5
- export declare class ServerProcess extends Process {
6
- readonly iaddr: string;
7
- private clock;
8
- server: Server;
9
- constructor(clock: StepClock, iaddr: string);
10
- tick(tick: number, messages: Message<Request>[]): Message<{
11
- err?: any;
12
- res?: Response;
13
- } | NetworkMessage>[];
14
- }
15
- //# sourceMappingURL=server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../sim/src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,IAAI,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE9F,OAAO,EAAyB,OAAO,EAAE,OAAO,EAAW,MAAM,aAAa,CAAC;AAE/E,qBAAa,aAAc,SAAQ,OAAO;aAMtB,KAAK,EAAE,MAAM;IAL/B,OAAO,CAAC,KAAK,CAAY;IACzB,MAAM,EAAE,MAAM,CAAgB;gBAG5B,KAAK,EAAE,SAAS,EACA,KAAK,EAAE,MAAM;IAM/B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC;QAAE,GAAG,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,cAAc,CAAC,EAAE;CAqC5G"}
@@ -1,85 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.ServerProcess = void 0;
37
- const server_1 = require("../../dev/server");
38
- const util = __importStar(require("../../src/util"));
39
- const simulator_1 = require("./simulator");
40
- class ServerProcess extends simulator_1.Process {
41
- iaddr;
42
- clock;
43
- server = new server_1.Server();
44
- constructor(clock, iaddr) {
45
- super(iaddr);
46
- this.iaddr = iaddr;
47
- this.clock = clock;
48
- }
49
- tick(tick, messages) {
50
- this.log(tick, "[recv]", messages);
51
- const responses = [];
52
- for (const message of messages) {
53
- util.assert(message.target.iaddr === this.iaddr);
54
- if (message.isRequest()) {
55
- let res;
56
- try {
57
- res = { res: this.server.process(message.data, this.clock.time) };
58
- }
59
- catch (err) {
60
- res = { err: err };
61
- }
62
- responses.push(message.resp(res));
63
- }
64
- }
65
- for (const message of this.server.step(this.clock.time)) {
66
- const url = new URL(message.recv);
67
- let target;
68
- if (url.username === "any") {
69
- target = url.pathname === "" ? (0, simulator_1.anycast)(url.hostname) : (0, simulator_1.anycast)(url.hostname, url.pathname.slice(1));
70
- }
71
- else if (url.username === "uni") {
72
- target = (0, simulator_1.unicast)(url.pathname.slice(1));
73
- }
74
- else {
75
- throw new Error(`not handled ${url}`);
76
- }
77
- const msg = new simulator_1.Message((0, simulator_1.unicast)(this.iaddr), target, message.msg, { requ: true });
78
- responses.push(msg);
79
- }
80
- this.log(tick, "[send]", responses);
81
- return responses;
82
- }
83
- }
84
- exports.ServerProcess = ServerProcess;
85
- //# sourceMappingURL=server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../sim/src/server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA0C;AAG1C,qDAAuC;AACvC,2CAA+E;AAE/E,MAAa,aAAc,SAAQ,mBAAO;IAMtB;IALV,KAAK,CAAY;IACzB,MAAM,GAAW,IAAI,eAAM,EAAE,CAAC;IAE9B,YACE,KAAgB,EACA,KAAa;QAE7B,KAAK,CAAC,KAAK,CAAC,CAAC;QAFG,UAAK,GAAL,KAAK,CAAQ;QAG7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,IAAY,EAAE,QAA4B;QAC7C,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEnC,MAAM,SAAS,GAA8D,EAAE,CAAC;QAEhF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;YACjD,IAAI,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;gBACxB,IAAI,GAAkC,CAAC;gBACvC,IAAI,CAAC;oBACH,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpE,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAClB,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;gBACrB,CAAC;gBAED,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACxD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,MAAe,CAAC;YACpB,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;gBAC3B,MAAM,GAAG,GAAG,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,IAAA,mBAAO,EAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAA,mBAAO,EAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACtG,CAAC;iBAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;gBAClC,MAAM,GAAG,IAAA,mBAAO,EAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC;YACxC,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,mBAAO,CAAiB,IAAA,mBAAO,EAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAClG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAjDD,sCAiDC"}
@@ -1,65 +0,0 @@
1
- export declare class Random {
2
- private state;
3
- constructor(seed: number);
4
- random(bound: number): number;
5
- next(): number;
6
- pick<T>(list: T[]): T | undefined;
7
- randint(min: number, max: number): number;
8
- }
9
- export type Address = {
10
- kind: "unicast";
11
- iaddr: string;
12
- } | {
13
- kind: "anycast";
14
- gaddr: string;
15
- iaddr?: string;
16
- };
17
- export declare function unicast(iaddr: string): Address;
18
- export declare function anycast(gaddr: string, iaddr?: string): Address;
19
- export declare class Message<T> {
20
- source: Address;
21
- target: Address;
22
- data: T;
23
- head: Record<string, any>;
24
- constructor(source: Address, target: Address, data: T, head?: Record<string, any>);
25
- isRequest(): boolean;
26
- isResponse(): boolean;
27
- resp<U>(data: U): Message<U>;
28
- }
29
- export declare class Process {
30
- readonly iaddr: string;
31
- readonly gaddr?: string | undefined;
32
- active: boolean;
33
- constructor(iaddr: string, gaddr?: string | undefined);
34
- tick(tick: number, messages: Message<any>[]): Message<any>[];
35
- log(tick: number, ...args: any[]): void;
36
- }
37
- export interface DeliveryOptions {
38
- dropProb?: number;
39
- randomDelay?: number;
40
- duplProb?: number;
41
- deactivateProb?: number;
42
- activateProb?: number;
43
- }
44
- export declare class Simulator {
45
- private prng;
46
- step: number;
47
- private init;
48
- private process;
49
- private network;
50
- outbox: Message<any>[];
51
- deliveryOptions: Required<DeliveryOptions>;
52
- private scheduledRepeat;
53
- private scheduledDelay;
54
- constructor(prng: Random, { dropProb, randomDelay, duplProb, deactivateProb, activateProb }?: DeliveryOptions);
55
- addMessage(message: Message<any>): void;
56
- assertAlways(cond: boolean, msg: string): void;
57
- register(process: Process): void;
58
- more(): boolean;
59
- send(message: Message<any>): void;
60
- tick(): void;
61
- exec(steps: number): void;
62
- repeat(interval: number, fn: () => void): void;
63
- delay(runAt: number, fn: () => void): void;
64
- }
65
- //# sourceMappingURL=simulator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"simulator.d.ts","sourceRoot":"","sources":["../../../sim/src/simulator.ts"],"names":[],"mappings":"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"}
@@ -1,236 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Simulator = exports.Process = exports.Message = exports.Random = void 0;
4
- exports.unicast = unicast;
5
- exports.anycast = anycast;
6
- class Random {
7
- // Internal state of the random number generator (RNG)
8
- state;
9
- constructor(seed) {
10
- // Ensure the seed is treated as an unsigned 32-bit integer
11
- this.state = seed >>> 0;
12
- }
13
- random(bound) {
14
- return this.next() * bound;
15
- }
16
- next() {
17
- // Update the internal state using the LCG formula
18
- this.state = (1664525 * this.state + 1013904223) >>> 0;
19
- // Convert the 32-bit integer to a float in the range [0, 1)
20
- return this.state / 0x100000000; // Equivalent to 2^32
21
- }
22
- pick(list) {
23
- return list[Math.floor(this.next() * list.length)];
24
- }
25
- randint(min, max) {
26
- return Math.floor(this.next() * (max - min + 1)) + min;
27
- }
28
- }
29
- exports.Random = Random;
30
- function unicast(iaddr) {
31
- return { kind: "unicast", iaddr };
32
- }
33
- function anycast(gaddr, iaddr) {
34
- return { kind: "anycast", gaddr, iaddr };
35
- }
36
- class Message {
37
- source;
38
- target;
39
- data;
40
- head;
41
- constructor(source, target, data, head = {}) {
42
- this.source = source;
43
- this.target = target;
44
- this.data = data;
45
- this.head = head;
46
- }
47
- isRequest() {
48
- return this.head.requ;
49
- }
50
- isResponse() {
51
- return this.head.resp;
52
- }
53
- resp(data) {
54
- return new Message(this.target, this.source, data, {
55
- resp: this.head.requ,
56
- correlationId: this.head.correlationId,
57
- });
58
- }
59
- }
60
- exports.Message = Message;
61
- class Process {
62
- iaddr;
63
- gaddr;
64
- active = true;
65
- constructor(iaddr, gaddr) {
66
- this.iaddr = iaddr;
67
- this.gaddr = gaddr;
68
- }
69
- tick(tick, messages) {
70
- throw new Error("not implemented");
71
- }
72
- log(tick, ...args) {
73
- const message = `[tick: ${tick}] [proc: ${this.iaddr}] ${args.map(JSON.stringify)}`;
74
- // Always log to console
75
- console.log(message);
76
- // Only append to the DOM if running in the browser
77
- if (typeof document !== "undefined") {
78
- const logEl = document.createElement("div");
79
- logEl.textContent = message;
80
- document.body.appendChild(logEl);
81
- }
82
- }
83
- }
84
- exports.Process = Process;
85
- class Simulator {
86
- prng;
87
- step = 0;
88
- init = false;
89
- process = [];
90
- network = [];
91
- outbox = [];
92
- deliveryOptions;
93
- scheduledRepeat = [];
94
- scheduledDelay = [];
95
- constructor(prng, { dropProb = 0, randomDelay = 0, duplProb = 0, deactivateProb = 0, activateProb = 0 } = {}) {
96
- process.env.QUEUE_MICROTASK_EVERY_N = Number.MAX_SAFE_INTEGER.toString();
97
- this.prng = prng;
98
- this.deliveryOptions = { dropProb, randomDelay, duplProb, deactivateProb, activateProb };
99
- }
100
- addMessage(message) {
101
- this.network.push(message);
102
- }
103
- assertAlways(cond, msg) {
104
- if (cond)
105
- return; // Early return if assertion passes
106
- console.assert(cond, "Assertion Failed: %s", msg);
107
- console.trace();
108
- if (typeof process !== "undefined" && process.versions.node) {
109
- process.exit(1);
110
- }
111
- }
112
- register(process) {
113
- this.process.push(process);
114
- }
115
- more() {
116
- // Simulator can make progress if it is not initialized or if there are messages in the network
117
- return !this.init || this.network.length > 0;
118
- }
119
- send(message) {
120
- this.network.push(message);
121
- }
122
- tick() {
123
- if (!this.init) {
124
- this.init = true;
125
- }
126
- this.step += 1;
127
- const { deactivateProb, activateProb } = this.deliveryOptions;
128
- if ((deactivateProb > 0 || activateProb > 0) && this.process.length > 0) {
129
- for (const proc of this.process) {
130
- if (proc.active) {
131
- if (this.prng.next() < deactivateProb) {
132
- proc.active = false;
133
- }
134
- }
135
- else {
136
- if (this.prng.next() < activateProb) {
137
- proc.active = true;
138
- }
139
- }
140
- }
141
- }
142
- const retained = [];
143
- const consumed = [];
144
- for (const message of this.network) {
145
- // Drop?
146
- if (this.prng.next() < this.deliveryOptions.dropProb) {
147
- continue;
148
- }
149
- // Delay?
150
- if (this.prng.next() < this.deliveryOptions.randomDelay) {
151
- retained.push(message);
152
- continue;
153
- }
154
- // Deliver now
155
- consumed.push(message);
156
- // Duplicate?
157
- if (this.prng.next() < this.deliveryOptions.duplProb) {
158
- retained.push(message);
159
- }
160
- }
161
- const inboxes = {};
162
- for (const process of this.process) {
163
- inboxes[process.iaddr] = [];
164
- }
165
- for (const message of consumed) {
166
- const target = message.target;
167
- if (target.kind === "unicast") {
168
- if (target.iaddr in inboxes) {
169
- inboxes[target.iaddr].push(message);
170
- }
171
- }
172
- else if (target.kind === "anycast") {
173
- const preference = this.process.find((p) => p.active && p.iaddr === target.iaddr);
174
- if (preference) {
175
- inboxes[preference.iaddr].push(message);
176
- }
177
- else {
178
- const process = this.prng.pick(this.process.filter((p) => p.active && target.gaddr === p.gaddr));
179
- if (process) {
180
- inboxes[process.iaddr].push(message);
181
- }
182
- }
183
- }
184
- else {
185
- throw new Error("unknown target.kind");
186
- }
187
- }
188
- const newMessages = [];
189
- for (const process of this.process) {
190
- if (!process.active) {
191
- continue;
192
- }
193
- for (const msg of process.tick(this.step, inboxes[process.iaddr])) {
194
- if (msg.target.kind === "unicast" && msg.target.iaddr === "environment") {
195
- this.outbox.push(msg);
196
- }
197
- else {
198
- newMessages.push(msg);
199
- }
200
- }
201
- }
202
- this.network = retained.concat(newMessages);
203
- }
204
- exec(steps) {
205
- let i = 0;
206
- while (i < steps) {
207
- for (const task of this.scheduledRepeat) {
208
- if (this.step % task.interval === 0) {
209
- task.fn();
210
- }
211
- }
212
- if (this.scheduledDelay.length > 0) {
213
- const remaining = [];
214
- for (const task of this.scheduledDelay) {
215
- if (task.runAt === this.step) {
216
- task.fn();
217
- }
218
- else if (task.runAt > this.step) {
219
- remaining.push(task);
220
- }
221
- }
222
- this.scheduledDelay = remaining;
223
- }
224
- this.tick();
225
- i++;
226
- }
227
- }
228
- repeat(interval, fn) {
229
- this.scheduledRepeat.push({ interval, fn });
230
- }
231
- delay(runAt, fn) {
232
- this.scheduledDelay.push({ runAt, fn });
233
- }
234
- }
235
- exports.Simulator = Simulator;
236
- //# sourceMappingURL=simulator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"simulator.js","sourceRoot":"","sources":["../../../sim/src/simulator.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- import type { StepClock } from "../../src/clock";
2
- import type { Encoder } from "../../src/encoder";
3
- import type { Message as NetworkMessage, Request, Response } from "../../src/network/network";
4
- import type { Registry } from "../../src/registry";
5
- import { Message, Process, type Random } from "./simulator";
6
- interface DeliveryOptions {
7
- charFlipProb?: number;
8
- }
9
- export declare class WorkerProcess extends Process {
10
- readonly iaddr: string;
11
- readonly gaddr: string;
12
- private clock;
13
- private network;
14
- private registry;
15
- private resonate;
16
- constructor(prng: Random, clock: StepClock, encoder: Encoder, registry: Registry, { charFlipProb }: DeliveryOptions, iaddr: string, gaddr: string);
17
- tick(tick: number, messages: Message<{
18
- err?: any;
19
- res?: Response;
20
- } | NetworkMessage>[]): Message<Request>[];
21
- }
22
- export {};
23
- //# sourceMappingURL=worker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../sim/src/worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAMjD,OAAO,KAAK,EAGV,OAAO,IAAI,cAAc,EACzB,OAAO,EACP,QAAQ,EAET,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAInD,OAAO,EAAgB,OAAO,EAAE,OAAO,EAAE,KAAK,MAAM,EAAW,MAAM,aAAa,CAAC;AAEnF,UAAU,eAAe;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA4JD,qBAAa,aAAc,SAAQ,OAAO;aAYtB,KAAK,EAAE,MAAM;aACb,KAAK,EAAE,MAAM;IAZ/B,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAAgB;gBAG9B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,EAAE,YAAgB,EAAE,EAAE,eAAe,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM;IAyB/B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC;QAAE,GAAG,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,cAAc,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE;CAc5G"}
@@ -1,217 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.WorkerProcess = void 0;
40
- const encryptor_1 = require("../../src/encryptor");
41
- const exceptions_1 = __importDefault(require("../../src/exceptions"));
42
- const handler_1 = require("../../src/handler");
43
- const heartbeat_1 = require("../../src/heartbeat");
44
- const options_1 = require("../../src/options");
45
- const resonate_inner_1 = require("../../src/resonate-inner");
46
- const tracer_1 = require("../../src/tracer");
47
- const util = __importStar(require("../../src/util"));
48
- const simulator_1 = require("./simulator");
49
- class SimulatedMessageSource {
50
- maybeCorruptData;
51
- pid;
52
- group;
53
- unicast;
54
- anycast;
55
- subscriptions = { invoke: [], resume: [], notify: [] };
56
- constructor(iaddr, gaddr, maybeCorruptData) {
57
- this.maybeCorruptData = maybeCorruptData;
58
- this.pid = iaddr;
59
- this.group = gaddr;
60
- this.unicast = `sim://uni@${gaddr}/${iaddr}`;
61
- this.anycast = `sim://any@${gaddr}/${iaddr}`;
62
- }
63
- start() { }
64
- recv(msg) {
65
- for (const callback of this.subscriptions[msg.type]) {
66
- callback(this.maybeCorruptData(msg));
67
- }
68
- }
69
- subscribe(type, callback) {
70
- this.subscriptions[type].push(callback);
71
- }
72
- stop() { }
73
- match(target) {
74
- return `sim://any@${target}`;
75
- }
76
- }
77
- class SimulatedNetwork {
78
- source;
79
- target;
80
- correlationId = 1;
81
- currentTime = 0;
82
- prng;
83
- deliveryOptions;
84
- buffer = [];
85
- callbacks = {};
86
- messageSource;
87
- constructor(iaddr, gaddr, prng, { charFlipProb = 0 }, source, target) {
88
- this.source = source;
89
- this.target = target;
90
- this.prng = prng;
91
- this.deliveryOptions = { charFlipProb };
92
- this.messageSource = new SimulatedMessageSource(iaddr, gaddr, (data) => this.maybeCorruptData(data));
93
- }
94
- start() { }
95
- getMessageSource() {
96
- return this.messageSource;
97
- }
98
- send(req, cb) {
99
- const message = new simulator_1.Message(this.source, this.target, req, {
100
- requ: true,
101
- correlationId: this.correlationId++,
102
- });
103
- const callback = (err, res) => {
104
- if (res !== undefined) {
105
- util.assert(res.kind === req.kind, "res kind must match req kind");
106
- cb(undefined, res);
107
- }
108
- else {
109
- cb(err);
110
- }
111
- };
112
- this.callbacks[message.head.correlationId] = { callback, timeout: this.currentTime + 50000 };
113
- this.buffer.push(message);
114
- }
115
- stop() { }
116
- time(time) {
117
- this.currentTime = time;
118
- // Then, check for timed-out callbacks
119
- for (const key in this.callbacks) {
120
- const cb = this.callbacks[key];
121
- const hasTimedOut = cb.timeout < this.currentTime;
122
- if (hasTimedOut) {
123
- cb.callback(exceptions_1.default.SERVER_ERROR("Request timed out", true));
124
- delete this.callbacks[key];
125
- }
126
- }
127
- }
128
- process(message) {
129
- if (message.isResponse()) {
130
- util.assert(message.source === this.target);
131
- util.assert(message.target === this.source);
132
- const correlationId = message.head?.correlationId;
133
- const entry = correlationId && this.callbacks[correlationId];
134
- if (entry) {
135
- const msg = message;
136
- if (msg.data.err) {
137
- util.assert(msg.data.res === undefined);
138
- entry.callback(msg.data.err);
139
- }
140
- else {
141
- util.assertDefined(msg.data.res);
142
- entry.callback(undefined, this.maybeCorruptData(msg.data.res));
143
- }
144
- delete this.callbacks[correlationId];
145
- }
146
- }
147
- else {
148
- util.assert(message.source.kind === this.target.kind && message.source.iaddr === this.target.iaddr);
149
- this.messageSource.recv(message.data);
150
- }
151
- }
152
- flush() {
153
- // Finally, flush the buffer
154
- const flushed = this.buffer;
155
- this.buffer = [];
156
- return flushed;
157
- }
158
- maybeCorruptData(data) {
159
- // Serialize the data to a string
160
- let jsonStr = JSON.stringify(data);
161
- // Randomly decide whether to corrupt
162
- const shouldCorrupt = this.prng.next() < this.deliveryOptions.charFlipProb;
163
- if (!shouldCorrupt)
164
- return data;
165
- // Pick a random index to corrupt
166
- const idx = Math.floor(this.prng.next() * jsonStr.length);
167
- // Corrupt that character
168
- jsonStr = `${jsonStr.slice(0, idx)}X${jsonStr.slice(idx + 1)}`;
169
- // Return corrupted string, even if it's invalid JSON
170
- return jsonStr;
171
- }
172
- }
173
- class WorkerProcess extends simulator_1.Process {
174
- iaddr;
175
- gaddr;
176
- clock;
177
- network;
178
- registry;
179
- resonate;
180
- constructor(prng, clock, encoder, registry, { charFlipProb = 0 }, iaddr, gaddr) {
181
- super(iaddr, gaddr);
182
- this.iaddr = iaddr;
183
- this.gaddr = gaddr;
184
- this.clock = clock;
185
- this.network = new SimulatedNetwork(iaddr, gaddr, prng, { charFlipProb: 0 }, (0, simulator_1.unicast)(iaddr), (0, simulator_1.unicast)("server"));
186
- this.registry = registry;
187
- const messageSource = this.network.getMessageSource();
188
- this.resonate = new resonate_inner_1.ResonateInner({
189
- unicast: messageSource.unicast,
190
- anycast: messageSource.anycast,
191
- pid: iaddr,
192
- ttl: 5000,
193
- clock: this.clock,
194
- network: this.network,
195
- handler: new handler_1.Handler(this.network, encoder, new encryptor_1.NoopEncryptor()),
196
- messageSource: this.network.getMessageSource(),
197
- registry: registry,
198
- heartbeat: new heartbeat_1.NoopHeartbeat(),
199
- dependencies: new Map(),
200
- optsBuilder: new options_1.OptionsBuilder({ match: messageSource.match, idPrefix: "" }),
201
- verbose: false,
202
- tracer: new tracer_1.NoopTracer(),
203
- });
204
- }
205
- tick(tick, messages) {
206
- this.log(tick, "[recv]", messages);
207
- this.network.time(this.clock.time);
208
- for (const message of messages) {
209
- this.network.process(message);
210
- }
211
- const responses = this.network.flush();
212
- this.log(tick, "[send]", responses);
213
- return responses;
214
- }
215
- }
216
- exports.WorkerProcess = WorkerProcess;
217
- //# sourceMappingURL=worker.js.map