@resonatehq/sdk 0.6.3 → 0.7.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 (202) hide show
  1. package/README.md +24 -45
  2. package/dist/dev/network.d.ts +16 -0
  3. package/dist/dev/network.d.ts.map +1 -0
  4. package/dist/dev/network.js +89 -0
  5. package/dist/dev/network.js.map +1 -0
  6. package/dist/dev/server.d.ts +87 -0
  7. package/dist/dev/server.d.ts.map +1 -0
  8. package/dist/dev/server.js +891 -0
  9. package/dist/dev/server.js.map +1 -0
  10. package/dist/sim/example-1.d.ts +2 -0
  11. package/dist/sim/example-1.d.ts.map +1 -0
  12. package/dist/sim/example-1.js +94 -0
  13. package/dist/sim/example-1.js.map +1 -0
  14. package/dist/sim/example-2.d.ts +2 -0
  15. package/dist/sim/example-2.d.ts.map +1 -0
  16. package/dist/sim/example-2.js +95 -0
  17. package/dist/sim/example-2.js.map +1 -0
  18. package/dist/sim/example-3.d.ts +2 -0
  19. package/dist/sim/example-3.d.ts.map +1 -0
  20. package/dist/sim/example-3.js +95 -0
  21. package/dist/sim/example-3.js.map +1 -0
  22. package/dist/sim/main.d.ts +14 -0
  23. package/dist/sim/main.d.ts.map +1 -0
  24. package/dist/sim/main.js +206 -0
  25. package/dist/sim/main.js.map +1 -0
  26. package/dist/sim/src/server.d.ts +15 -0
  27. package/dist/sim/src/server.d.ts.map +1 -0
  28. package/dist/sim/src/server.js +85 -0
  29. package/dist/sim/src/server.js.map +1 -0
  30. package/dist/sim/src/simulator.d.ts +65 -0
  31. package/dist/sim/src/simulator.d.ts.map +1 -0
  32. package/dist/sim/src/simulator.js +235 -0
  33. package/dist/sim/src/simulator.js.map +1 -0
  34. package/dist/sim/src/worker.d.ts +22 -0
  35. package/dist/sim/src/worker.d.ts.map +1 -0
  36. package/dist/sim/src/worker.js +175 -0
  37. package/dist/sim/src/worker.js.map +1 -0
  38. package/dist/src/clock.d.ts +11 -0
  39. package/dist/src/clock.d.ts.map +1 -0
  40. package/dist/src/clock.js +17 -0
  41. package/dist/src/clock.js.map +1 -0
  42. package/dist/src/computation.d.ts +40 -0
  43. package/dist/src/computation.d.ts.map +1 -0
  44. package/dist/src/computation.js +225 -0
  45. package/dist/src/computation.js.map +1 -0
  46. package/dist/src/context.d.ts +120 -0
  47. package/dist/src/context.d.ts.map +1 -0
  48. package/dist/src/context.js +288 -0
  49. package/dist/src/context.js.map +1 -0
  50. package/dist/src/coroutine.d.ts +35 -0
  51. package/dist/src/coroutine.d.ts.map +1 -0
  52. package/dist/src/coroutine.js +251 -0
  53. package/dist/src/coroutine.js.map +1 -0
  54. package/dist/src/decorator.d.ts +14 -0
  55. package/dist/src/decorator.d.ts.map +1 -0
  56. package/dist/src/decorator.js +208 -0
  57. package/dist/src/decorator.js.map +1 -0
  58. package/dist/src/handler.d.ts +40 -0
  59. package/dist/src/handler.d.ts.map +1 -0
  60. package/dist/src/handler.js +198 -0
  61. package/dist/src/handler.js.map +1 -0
  62. package/dist/src/heartbeat.d.ts +22 -0
  63. package/dist/src/heartbeat.d.ts.map +1 -0
  64. package/dist/src/heartbeat.js +87 -0
  65. package/dist/src/heartbeat.js.map +1 -0
  66. package/dist/src/index.d.ts +8 -0
  67. package/dist/src/index.d.ts.map +1 -0
  68. package/dist/src/index.js +25 -0
  69. package/dist/src/index.js.map +1 -0
  70. package/dist/src/network/network.d.ts +216 -0
  71. package/dist/src/network/network.d.ts.map +1 -0
  72. package/dist/{core/logger.js → src/network/network.js} +2 -1
  73. package/dist/src/network/network.js.map +1 -0
  74. package/dist/src/network/remote.d.ts +67 -0
  75. package/dist/src/network/remote.d.ts.map +1 -0
  76. package/dist/src/network/remote.js +514 -0
  77. package/dist/src/network/remote.js.map +1 -0
  78. package/dist/src/nursery.d.ts +19 -0
  79. package/dist/src/nursery.d.ts.map +1 -0
  80. package/dist/src/nursery.js +102 -0
  81. package/dist/src/nursery.js.map +1 -0
  82. package/dist/src/processor/processor.d.ts +11 -0
  83. package/dist/src/processor/processor.d.ts.map +1 -0
  84. package/dist/src/processor/processor.js +24 -0
  85. package/dist/src/processor/processor.js.map +1 -0
  86. package/dist/src/promises.d.ts +23 -0
  87. package/dist/src/promises.d.ts.map +1 -0
  88. package/dist/src/promises.js +157 -0
  89. package/dist/src/promises.js.map +1 -0
  90. package/dist/src/registry.d.ts +15 -0
  91. package/dist/src/registry.d.ts.map +1 -0
  92. package/dist/src/registry.js +26 -0
  93. package/dist/src/registry.js.map +1 -0
  94. package/dist/src/resonate-inner.d.ts +45 -0
  95. package/dist/src/resonate-inner.d.ts.map +1 -0
  96. package/dist/src/resonate-inner.js +157 -0
  97. package/dist/src/resonate-inner.js.map +1 -0
  98. package/dist/src/resonate.d.ts +92 -0
  99. package/dist/src/resonate.d.ts.map +1 -0
  100. package/dist/src/resonate.js +240 -0
  101. package/dist/src/resonate.js.map +1 -0
  102. package/dist/src/schedules.d.ts +9 -0
  103. package/dist/src/schedules.d.ts.map +1 -0
  104. package/dist/src/schedules.js +65 -0
  105. package/dist/src/schedules.js.map +1 -0
  106. package/dist/src/tasks.d.ts +9 -0
  107. package/dist/src/tasks.d.ts.map +1 -0
  108. package/dist/src/tasks.js +61 -0
  109. package/dist/src/tasks.js.map +1 -0
  110. package/dist/src/types.d.ts +86 -0
  111. package/dist/src/types.d.ts.map +1 -0
  112. package/dist/src/types.js +14 -0
  113. package/dist/src/types.js.map +1 -0
  114. package/dist/src/util.d.ts +14 -0
  115. package/dist/src/util.d.ts.map +1 -0
  116. package/dist/src/util.js +69 -0
  117. package/dist/src/util.js.map +1 -0
  118. package/dist/tsconfig.build.tsbuildinfo +1 -0
  119. package/package.json +51 -52
  120. package/dist/core/encoder.d.ts +0 -5
  121. package/dist/core/encoder.d.ts.map +0 -1
  122. package/dist/core/encoder.js +0 -3
  123. package/dist/core/encoder.js.map +0 -1
  124. package/dist/core/encoders/base64.d.ts +0 -6
  125. package/dist/core/encoders/base64.d.ts.map +0 -1
  126. package/dist/core/encoders/base64.js +0 -13
  127. package/dist/core/encoders/base64.js.map +0 -1
  128. package/dist/core/encoders/json.d.ts +0 -6
  129. package/dist/core/encoders/json.d.ts.map +0 -1
  130. package/dist/core/encoders/json.js +0 -77
  131. package/dist/core/encoders/json.js.map +0 -1
  132. package/dist/core/errors.d.ts +0 -24
  133. package/dist/core/errors.d.ts.map +0 -1
  134. package/dist/core/errors.js +0 -42
  135. package/dist/core/errors.js.map +0 -1
  136. package/dist/core/logger.d.ts +0 -10
  137. package/dist/core/logger.d.ts.map +0 -1
  138. package/dist/core/logger.js.map +0 -1
  139. package/dist/core/loggers/logger.d.ts +0 -13
  140. package/dist/core/loggers/logger.d.ts.map +0 -1
  141. package/dist/core/loggers/logger.js +0 -48
  142. package/dist/core/loggers/logger.js.map +0 -1
  143. package/dist/core/options.d.ts +0 -160
  144. package/dist/core/options.d.ts.map +0 -1
  145. package/dist/core/options.js +0 -18
  146. package/dist/core/options.js.map +0 -1
  147. package/dist/core/promises/promises.d.ts +0 -210
  148. package/dist/core/promises/promises.d.ts.map +0 -1
  149. package/dist/core/promises/promises.js +0 -300
  150. package/dist/core/promises/promises.js.map +0 -1
  151. package/dist/core/promises/types.d.ts +0 -42
  152. package/dist/core/promises/types.d.ts.map +0 -1
  153. package/dist/core/promises/types.js +0 -70
  154. package/dist/core/promises/types.js.map +0 -1
  155. package/dist/core/retry.d.ts +0 -37
  156. package/dist/core/retry.d.ts.map +0 -1
  157. package/dist/core/retry.js +0 -141
  158. package/dist/core/retry.js.map +0 -1
  159. package/dist/core/schedules/schedules.d.ts +0 -22
  160. package/dist/core/schedules/schedules.d.ts.map +0 -1
  161. package/dist/core/schedules/schedules.js +0 -29
  162. package/dist/core/schedules/schedules.js.map +0 -1
  163. package/dist/core/schedules/types.d.ts +0 -19
  164. package/dist/core/schedules/types.d.ts.map +0 -1
  165. package/dist/core/schedules/types.js +0 -8
  166. package/dist/core/schedules/types.js.map +0 -1
  167. package/dist/core/storage.d.ts +0 -6
  168. package/dist/core/storage.d.ts.map +0 -1
  169. package/dist/core/storage.js +0 -3
  170. package/dist/core/storage.js.map +0 -1
  171. package/dist/core/storages/memory.d.ts +0 -8
  172. package/dist/core/storages/memory.d.ts.map +0 -1
  173. package/dist/core/storages/memory.js +0 -29
  174. package/dist/core/storages/memory.js.map +0 -1
  175. package/dist/core/storages/withTimeout.d.ts +0 -10
  176. package/dist/core/storages/withTimeout.d.ts.map +0 -1
  177. package/dist/core/storages/withTimeout.js +0 -44
  178. package/dist/core/storages/withTimeout.js.map +0 -1
  179. package/dist/core/store.d.ts +0 -142
  180. package/dist/core/store.d.ts.map +0 -1
  181. package/dist/core/store.js +0 -3
  182. package/dist/core/store.js.map +0 -1
  183. package/dist/core/stores/local.d.ts +0 -57
  184. package/dist/core/stores/local.d.ts.map +0 -1
  185. package/dist/core/stores/local.js +0 -405
  186. package/dist/core/stores/local.js.map +0 -1
  187. package/dist/core/stores/remote.d.ts +0 -51
  188. package/dist/core/stores/remote.d.ts.map +0 -1
  189. package/dist/core/stores/remote.js +0 -431
  190. package/dist/core/stores/remote.js.map +0 -1
  191. package/dist/core/utils.d.ts +0 -85
  192. package/dist/core/utils.d.ts.map +0 -1
  193. package/dist/core/utils.js +0 -121
  194. package/dist/core/utils.js.map +0 -1
  195. package/dist/index.d.ts +0 -19
  196. package/dist/index.d.ts.map +0 -1
  197. package/dist/index.js +0 -57
  198. package/dist/index.js.map +0 -1
  199. package/dist/resonate.d.ts +0 -337
  200. package/dist/resonate.d.ts.map +0 -1
  201. package/dist/resonate.js +0 -730
  202. package/dist/resonate.js.map +0 -1
@@ -0,0 +1,15 @@
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
@@ -0,0 +1 @@
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,EAAgB,OAAO,EAAE,OAAO,EAAoB,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"}
@@ -0,0 +1,85 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,65 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulator.d.ts","sourceRoot":"","sources":["../../../sim/src/simulator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,235 @@
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
+ this.prng = prng;
97
+ this.deliveryOptions = { dropProb, randomDelay, duplProb, deactivateProb, activateProb };
98
+ }
99
+ addMessage(message) {
100
+ this.network.push(message);
101
+ }
102
+ assertAlways(cond, msg) {
103
+ if (cond)
104
+ return; // Early return if assertion passes
105
+ console.assert(cond, "Assertion Failed: %s", msg);
106
+ console.trace();
107
+ if (typeof process !== "undefined" && process.versions.node) {
108
+ process.exit(1);
109
+ }
110
+ }
111
+ register(process) {
112
+ this.process.push(process);
113
+ }
114
+ more() {
115
+ // Simulator can make progress if it is not initialized or if there are messages in the network
116
+ return !this.init || this.network.length > 0;
117
+ }
118
+ send(message) {
119
+ this.network.push(message);
120
+ }
121
+ tick() {
122
+ if (!this.init) {
123
+ this.init = true;
124
+ }
125
+ this.step += 1;
126
+ const { deactivateProb, activateProb } = this.deliveryOptions;
127
+ if ((deactivateProb > 0 || activateProb > 0) && this.process.length > 0) {
128
+ for (const proc of this.process) {
129
+ if (proc.active) {
130
+ if (this.prng.next() < deactivateProb) {
131
+ proc.active = false;
132
+ }
133
+ }
134
+ else {
135
+ if (this.prng.next() < activateProb) {
136
+ proc.active = true;
137
+ }
138
+ }
139
+ }
140
+ }
141
+ const retained = [];
142
+ const consumed = [];
143
+ for (const message of this.network) {
144
+ // Drop?
145
+ if (this.prng.next() < this.deliveryOptions.dropProb) {
146
+ continue;
147
+ }
148
+ // Delay?
149
+ if (this.prng.next() < this.deliveryOptions.randomDelay) {
150
+ retained.push(message);
151
+ continue;
152
+ }
153
+ // Deliver now
154
+ consumed.push(message);
155
+ // Duplicate?
156
+ if (this.prng.next() < this.deliveryOptions.duplProb) {
157
+ retained.push(message);
158
+ }
159
+ }
160
+ const inboxes = {};
161
+ for (const process of this.process) {
162
+ inboxes[process.iaddr] = [];
163
+ }
164
+ for (const message of consumed) {
165
+ const target = message.target;
166
+ if (target.kind === "unicast") {
167
+ if (target.iaddr in inboxes) {
168
+ inboxes[target.iaddr].push(message);
169
+ }
170
+ }
171
+ else if (target.kind === "anycast") {
172
+ const preference = this.process.find((p) => p.active && p.iaddr === target.iaddr);
173
+ if (preference) {
174
+ inboxes[preference.iaddr].push(message);
175
+ }
176
+ else {
177
+ const process = this.prng.pick(this.process.filter((p) => p.active && target.gaddr === p.gaddr));
178
+ if (process) {
179
+ inboxes[process.iaddr].push(message);
180
+ }
181
+ }
182
+ }
183
+ else {
184
+ throw new Error("unknown target.kind");
185
+ }
186
+ }
187
+ const newMessages = [];
188
+ for (const process of this.process) {
189
+ if (!process.active) {
190
+ continue;
191
+ }
192
+ for (const msg of process.tick(this.step, inboxes[process.iaddr])) {
193
+ if (msg.target.kind === "unicast" && msg.target.iaddr === "environment") {
194
+ this.outbox.push(msg);
195
+ }
196
+ else {
197
+ newMessages.push(msg);
198
+ }
199
+ }
200
+ }
201
+ this.network = retained.concat(newMessages);
202
+ }
203
+ exec(steps) {
204
+ let i = 0;
205
+ while (i < steps) {
206
+ for (const task of this.scheduledRepeat) {
207
+ if (this.step % task.interval === 0) {
208
+ task.fn();
209
+ }
210
+ }
211
+ if (this.scheduledDelay.length > 0) {
212
+ const remaining = [];
213
+ for (const task of this.scheduledDelay) {
214
+ if (task.runAt === this.step) {
215
+ task.fn();
216
+ }
217
+ else if (task.runAt > this.step) {
218
+ remaining.push(task);
219
+ }
220
+ }
221
+ this.scheduledDelay = remaining;
222
+ }
223
+ this.tick();
224
+ i++;
225
+ }
226
+ }
227
+ repeat(interval, fn) {
228
+ this.scheduledRepeat.push({ interval, fn });
229
+ }
230
+ delay(runAt, fn) {
231
+ this.scheduledDelay.push({ runAt, fn });
232
+ }
233
+ }
234
+ exports.Simulator = Simulator;
235
+ //# sourceMappingURL=simulator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulator.js","sourceRoot":"","sources":["../../../sim/src/simulator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { StepClock } from "../../src/clock";
2
+ import type { Message as NetworkMessage, Request, Response } from "../../src/network/network";
3
+ import type { Registry } from "../../src/registry";
4
+ import { Message, Process, type Random } from "./simulator";
5
+ interface DeliveryOptions {
6
+ charFlipProb?: number;
7
+ }
8
+ export declare class WorkerProcess extends Process {
9
+ readonly iaddr: string;
10
+ readonly gaddr: string;
11
+ private clock;
12
+ private network;
13
+ private registry;
14
+ private resonate;
15
+ constructor(prng: Random, clock: StepClock, registry: Registry, { charFlipProb }: DeliveryOptions, iaddr: string, gaddr: string);
16
+ tick(tick: number, messages: Message<{
17
+ err?: any;
18
+ res?: Response;
19
+ } | NetworkMessage>[]): Message<Request>[];
20
+ }
21
+ export {};
22
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../sim/src/worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,KAAK,EAAW,OAAO,IAAI,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAe,MAAM,2BAA2B,CAAC;AACpH,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;AAgHD,qBAAa,aAAc,SAAQ,OAAO;aAWtB,KAAK,EAAE,MAAM;aACb,KAAK,EAAE,MAAM;IAX/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,QAAQ,EAAE,QAAQ,EAClB,EAAE,YAAgB,EAAE,EAAE,eAAe,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM;IAoB/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"}
@@ -0,0 +1,175 @@
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.WorkerProcess = void 0;
37
+ const handler_1 = require("../../src/handler");
38
+ const heartbeat_1 = require("../../src/heartbeat");
39
+ const resonate_inner_1 = require("../../src/resonate-inner");
40
+ const util = __importStar(require("../../src/util"));
41
+ const simulator_1 = require("./simulator");
42
+ class SimulatedNetwork {
43
+ source;
44
+ target;
45
+ correlationId = 1;
46
+ currentTime = 0;
47
+ prng;
48
+ deliveryOptions;
49
+ buffer = [];
50
+ callbacks = {};
51
+ subscriptions = [];
52
+ constructor(prng, { charFlipProb = 0 }, source, target) {
53
+ this.source = source;
54
+ this.target = target;
55
+ this.prng = prng;
56
+ this.deliveryOptions = { charFlipProb };
57
+ }
58
+ send(req, cb) {
59
+ const message = new simulator_1.Message(this.source, this.target, req, {
60
+ requ: true,
61
+ correlationId: this.correlationId++,
62
+ });
63
+ const callback = (err, res) => {
64
+ util.assert(err || (res !== undefined && res.kind === req.kind), "res kind must match req kind");
65
+ cb(err, res);
66
+ };
67
+ this.callbacks[message.head.correlationId] = { callback, timeout: this.currentTime + 5000 };
68
+ this.buffer.push(message);
69
+ }
70
+ recv(msg) {
71
+ for (const callback of this.subscriptions) {
72
+ callback(this.maybeCorruptData(msg));
73
+ }
74
+ }
75
+ subscribe(callback) {
76
+ this.subscriptions.push(callback);
77
+ }
78
+ stop() { }
79
+ time(time) {
80
+ this.currentTime = time;
81
+ // Then, check for timed-out callbacks
82
+ for (const key in this.callbacks) {
83
+ const cb = this.callbacks[key];
84
+ const hasTimedOut = cb.timeout < this.currentTime;
85
+ if (hasTimedOut) {
86
+ cb.callback(true);
87
+ delete this.callbacks[key];
88
+ }
89
+ }
90
+ }
91
+ process(message) {
92
+ if (message.isResponse()) {
93
+ util.assert(message.source === this.target);
94
+ util.assert(message.target === this.source);
95
+ const correlationId = message.head?.correlationId;
96
+ const entry = correlationId && this.callbacks[correlationId];
97
+ if (entry) {
98
+ const msg = message;
99
+ if (msg.data.err) {
100
+ util.assert(msg.data.res === undefined);
101
+ entry.callback(true);
102
+ }
103
+ else {
104
+ util.assertDefined(msg.data.res);
105
+ entry.callback(false, this.maybeCorruptData(msg.data.res));
106
+ }
107
+ delete this.callbacks[correlationId];
108
+ }
109
+ }
110
+ else {
111
+ util.assert(message.source.kind === this.target.kind && message.source.iaddr === this.target.iaddr);
112
+ this.recv(message.data);
113
+ }
114
+ }
115
+ flush() {
116
+ // Finally, flush the buffer
117
+ const flushed = this.buffer;
118
+ this.buffer = [];
119
+ return flushed;
120
+ }
121
+ maybeCorruptData(data) {
122
+ // Serialize the data to a string
123
+ let jsonStr = JSON.stringify(data);
124
+ // Randomly decide whether to corrupt
125
+ const shouldCorrupt = this.prng.next() < this.deliveryOptions.charFlipProb;
126
+ if (!shouldCorrupt)
127
+ return data;
128
+ // Pick a random index to corrupt
129
+ const idx = Math.floor(this.prng.next() * jsonStr.length);
130
+ // Corrupt that character
131
+ jsonStr = `${jsonStr.slice(0, idx)}X${jsonStr.slice(idx + 1)}`;
132
+ // Return corrupted string, even if it's invalid JSON
133
+ return jsonStr;
134
+ }
135
+ }
136
+ class WorkerProcess extends simulator_1.Process {
137
+ iaddr;
138
+ gaddr;
139
+ clock;
140
+ network;
141
+ registry;
142
+ resonate;
143
+ constructor(prng, clock, registry, { charFlipProb = 0 }, iaddr, gaddr) {
144
+ super(iaddr, gaddr);
145
+ this.iaddr = iaddr;
146
+ this.gaddr = gaddr;
147
+ this.clock = clock;
148
+ this.network = new SimulatedNetwork(prng, { charFlipProb: 0 }, (0, simulator_1.unicast)(iaddr), (0, simulator_1.unicast)("server"));
149
+ this.registry = registry;
150
+ this.resonate = new resonate_inner_1.ResonateInner({
151
+ unicast: `sim://uni@${gaddr}/${iaddr}`,
152
+ anycast: `sim://any@${gaddr}/${iaddr}`,
153
+ pid: iaddr,
154
+ ttl: 5000,
155
+ clock: this.clock,
156
+ network: this.network,
157
+ handler: new handler_1.Handler(this.network),
158
+ registry: registry,
159
+ heartbeat: new heartbeat_1.NoopHeartbeat(),
160
+ dependencies: new Map(),
161
+ });
162
+ }
163
+ tick(tick, messages) {
164
+ this.log(tick, "[recv]", messages);
165
+ this.network.time(this.clock.time);
166
+ for (const message of messages) {
167
+ this.network.process(message);
168
+ }
169
+ const responses = this.network.flush();
170
+ this.log(tick, "[send]", responses);
171
+ return responses;
172
+ }
173
+ }
174
+ exports.WorkerProcess = WorkerProcess;
175
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../sim/src/worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export interface Clock {
2
+ now(): number;
3
+ }
4
+ export declare class WallClock {
5
+ now(): number;
6
+ }
7
+ export declare class StepClock {
8
+ time: number;
9
+ now(): number;
10
+ }
11
+ //# sourceMappingURL=clock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock.d.ts","sourceRoot":"","sources":["../../src/clock.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,GAAG,IAAI,MAAM,CAAC;CACf;AAED,qBAAa,SAAS;IACpB,GAAG,IAAI,MAAM;CAGd;AAED,qBAAa,SAAS;IACb,IAAI,SAAK;IAChB,GAAG,IAAI,MAAM;CAGd"}