@restatedev/restate-sdk 0.7.3-worker → 0.8.1

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 (231) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +29 -51
  3. package/dist/clients/workflow_client.d.ts +77 -0
  4. package/dist/clients/workflow_client.d.ts.map +1 -0
  5. package/dist/clients/workflow_client.js +172 -0
  6. package/dist/clients/workflow_client.js.map +1 -0
  7. package/dist/connection/buffered_connection.js +44 -0
  8. package/dist/connection/buffered_connection.js.map +1 -0
  9. package/dist/connection/connection.js +13 -0
  10. package/dist/connection/connection.js.map +1 -0
  11. package/dist/connection/embedded_connection.js +59 -0
  12. package/dist/connection/embedded_connection.js.map +1 -0
  13. package/dist/connection/http_connection.js +203 -0
  14. package/dist/connection/http_connection.js.map +1 -0
  15. package/dist/connection/lambda_connection.js +58 -0
  16. package/dist/connection/lambda_connection.js.map +1 -0
  17. package/dist/{restate_context.d.ts → context.d.ts} +239 -170
  18. package/dist/context.d.ts.map +1 -0
  19. package/dist/context.js +113 -0
  20. package/dist/context.js.map +1 -0
  21. package/dist/{restate_context_impl.d.ts → context_impl.d.ts} +26 -30
  22. package/dist/context_impl.d.ts.map +1 -0
  23. package/dist/context_impl.js +439 -0
  24. package/dist/context_impl.js.map +1 -0
  25. package/dist/embedded/api.d.ts +2 -2
  26. package/dist/embedded/api.d.ts.map +1 -1
  27. package/dist/embedded/api.js +35 -0
  28. package/dist/embedded/api.js.map +1 -0
  29. package/dist/embedded/handler.d.ts +2 -2
  30. package/dist/embedded/handler.d.ts.map +1 -1
  31. package/dist/embedded/handler.js +26 -0
  32. package/dist/embedded/handler.js.map +1 -0
  33. package/dist/embedded/http2_remote.js +91 -0
  34. package/dist/embedded/http2_remote.js.map +1 -0
  35. package/dist/embedded/invocation.d.ts.map +1 -1
  36. package/dist/embedded/invocation.js +94 -0
  37. package/dist/embedded/invocation.js.map +1 -0
  38. package/dist/endpoint/endpoint_impl.d.ts +35 -0
  39. package/dist/endpoint/endpoint_impl.d.ts.map +1 -0
  40. package/dist/endpoint/endpoint_impl.js +405 -0
  41. package/dist/endpoint/endpoint_impl.js.map +1 -0
  42. package/dist/endpoint/http2_handler.d.ts +11 -0
  43. package/dist/endpoint/http2_handler.d.ts.map +1 -0
  44. package/dist/endpoint/http2_handler.js +119 -0
  45. package/dist/endpoint/http2_handler.js.map +1 -0
  46. package/dist/endpoint/lambda_handler.d.ts +15 -0
  47. package/dist/endpoint/lambda_handler.d.ts.map +1 -0
  48. package/dist/endpoint/lambda_handler.js +144 -0
  49. package/dist/endpoint/lambda_handler.js.map +1 -0
  50. package/dist/endpoint.d.ts +161 -0
  51. package/dist/endpoint.d.ts.map +1 -0
  52. package/dist/endpoint.js +22 -0
  53. package/dist/endpoint.js.map +1 -0
  54. package/dist/generated/dev/restate/events.js +371 -0
  55. package/dist/generated/dev/restate/events.js.map +1 -0
  56. package/dist/generated/dev/restate/ext.js +215 -0
  57. package/dist/generated/dev/restate/ext.js.map +1 -0
  58. package/dist/generated/google/protobuf/descriptor.js +6676 -0
  59. package/dist/generated/google/protobuf/descriptor.js.map +1 -0
  60. package/dist/generated/google/protobuf/empty.js +107 -0
  61. package/dist/generated/google/protobuf/empty.js.map +1 -0
  62. package/dist/generated/google/protobuf/struct.js +754 -0
  63. package/dist/generated/google/protobuf/struct.js.map +1 -0
  64. package/dist/generated/proto/discovery.js +364 -0
  65. package/dist/generated/proto/discovery.js.map +1 -0
  66. package/dist/generated/proto/dynrpc.js +668 -0
  67. package/dist/generated/proto/dynrpc.js.map +1 -0
  68. package/dist/generated/proto/javascript.d.ts +13 -0
  69. package/dist/generated/proto/javascript.d.ts.map +1 -1
  70. package/dist/generated/proto/javascript.js +416 -0
  71. package/dist/generated/proto/javascript.js.map +1 -0
  72. package/dist/generated/proto/protocol.d.ts +43 -0
  73. package/dist/generated/proto/protocol.d.ts.map +1 -1
  74. package/dist/generated/proto/protocol.js +2641 -0
  75. package/dist/generated/proto/protocol.js.map +1 -0
  76. package/dist/generated/proto/services.js +1535 -0
  77. package/dist/generated/proto/services.js.map +1 -0
  78. package/dist/generated/proto/test.js +321 -0
  79. package/dist/generated/proto/test.js.map +1 -0
  80. package/dist/invocation.d.ts +4 -1
  81. package/dist/invocation.d.ts.map +1 -1
  82. package/dist/invocation.js +157 -0
  83. package/dist/invocation.js.map +1 -0
  84. package/dist/io/decoder.d.ts +1 -0
  85. package/dist/io/decoder.d.ts.map +1 -1
  86. package/dist/io/decoder.js +140 -0
  87. package/dist/io/decoder.js.map +1 -0
  88. package/dist/io/encoder.d.ts +1 -2
  89. package/dist/io/encoder.d.ts.map +1 -1
  90. package/dist/io/encoder.js +68 -0
  91. package/dist/io/encoder.js.map +1 -0
  92. package/dist/journal.d.ts +13 -4
  93. package/dist/journal.d.ts.map +1 -1
  94. package/dist/journal.js +405 -0
  95. package/dist/journal.js.map +1 -0
  96. package/dist/local_state_store.d.ts +5 -3
  97. package/dist/local_state_store.d.ts.map +1 -1
  98. package/dist/local_state_store.js +82 -0
  99. package/dist/local_state_store.js.map +1 -0
  100. package/dist/logger.d.ts +19 -0
  101. package/dist/logger.d.ts.map +1 -0
  102. package/dist/logger.js +90 -0
  103. package/dist/logger.js.map +1 -0
  104. package/dist/promise_combinator_tracker.d.ts +29 -0
  105. package/dist/promise_combinator_tracker.d.ts.map +1 -0
  106. package/dist/promise_combinator_tracker.js +128 -0
  107. package/dist/promise_combinator_tracker.js.map +1 -0
  108. package/dist/public_api.d.ts +5 -5
  109. package/dist/public_api.d.ts.map +1 -1
  110. package/dist/public_api.js +60 -0
  111. package/dist/public_api.js.map +1 -0
  112. package/dist/state_machine.d.ts +19 -12
  113. package/dist/state_machine.d.ts.map +1 -1
  114. package/dist/state_machine.js +437 -0
  115. package/dist/state_machine.js.map +1 -0
  116. package/dist/types/errors.d.ts +12 -3
  117. package/dist/types/errors.d.ts.map +1 -1
  118. package/dist/types/errors.js +273 -0
  119. package/dist/types/errors.js.map +1 -0
  120. package/dist/types/grpc.d.ts +6 -4
  121. package/dist/types/grpc.d.ts.map +1 -1
  122. package/dist/types/grpc.js +81 -0
  123. package/dist/types/grpc.js.map +1 -0
  124. package/dist/types/protocol.d.ts +9 -5
  125. package/dist/types/protocol.d.ts.map +1 -1
  126. package/dist/types/protocol.js +147 -0
  127. package/dist/types/protocol.js.map +1 -0
  128. package/dist/types/router.d.ts +8 -8
  129. package/dist/types/router.d.ts.map +1 -1
  130. package/dist/types/router.js +36 -0
  131. package/dist/types/router.js.map +1 -0
  132. package/dist/types/types.d.ts +1 -0
  133. package/dist/types/types.d.ts.map +1 -1
  134. package/dist/types/types.js +138 -0
  135. package/dist/types/types.js.map +1 -0
  136. package/dist/utils/{assumpsions.d.ts → assumptions.d.ts} +1 -1
  137. package/dist/utils/{assumpsions.d.ts.map → assumptions.d.ts.map} +1 -1
  138. package/dist/utils/assumptions.js +101 -0
  139. package/dist/utils/assumptions.js.map +1 -0
  140. package/dist/utils/message_logger.d.ts +28 -0
  141. package/dist/utils/message_logger.d.ts.map +1 -0
  142. package/dist/utils/message_logger.js +88 -0
  143. package/dist/utils/message_logger.js.map +1 -0
  144. package/dist/utils/promises.d.ts +15 -0
  145. package/dist/utils/promises.d.ts.map +1 -0
  146. package/dist/utils/promises.js +67 -0
  147. package/dist/utils/promises.js.map +1 -0
  148. package/dist/utils/public_utils.js +49 -0
  149. package/dist/utils/public_utils.js.map +1 -0
  150. package/dist/utils/rand.d.ts +1 -1
  151. package/dist/utils/rand.d.ts.map +1 -1
  152. package/dist/utils/rand.js +114 -0
  153. package/dist/utils/rand.js.map +1 -0
  154. package/dist/utils/utils.d.ts +1 -10
  155. package/dist/utils/utils.d.ts.map +1 -1
  156. package/dist/utils/utils.js +122 -0
  157. package/dist/utils/utils.js.map +1 -0
  158. package/dist/workflows/workflow.d.ts +101 -0
  159. package/dist/workflows/workflow.d.ts.map +1 -0
  160. package/dist/workflows/workflow.js +80 -0
  161. package/dist/workflows/workflow.js.map +1 -0
  162. package/dist/workflows/workflow_state_service.d.ts +35 -0
  163. package/dist/workflows/workflow_state_service.d.ts.map +1 -0
  164. package/dist/workflows/workflow_state_service.js +201 -0
  165. package/dist/workflows/workflow_state_service.js.map +1 -0
  166. package/dist/workflows/workflow_wrapper_service.d.ts +10 -0
  167. package/dist/workflows/workflow_wrapper_service.d.ts.map +1 -0
  168. package/dist/workflows/workflow_wrapper_service.js +264 -0
  169. package/dist/workflows/workflow_wrapper_service.js.map +1 -0
  170. package/package.json +38 -39
  171. package/src/clients/workflow_client.ts +290 -0
  172. package/src/connection/buffered_connection.ts +47 -0
  173. package/src/connection/connection.ts +34 -0
  174. package/src/connection/embedded_connection.ts +62 -0
  175. package/src/connection/http_connection.ts +228 -0
  176. package/src/connection/lambda_connection.ts +69 -0
  177. package/src/context.ts +633 -0
  178. package/src/context_impl.ts +721 -0
  179. package/src/embedded/api.ts +57 -0
  180. package/src/embedded/handler.ts +36 -0
  181. package/src/embedded/http2_remote.ts +103 -0
  182. package/src/embedded/invocation.ts +126 -0
  183. package/src/endpoint/endpoint_impl.ts +623 -0
  184. package/src/endpoint/http2_handler.ts +151 -0
  185. package/src/endpoint/lambda_handler.ts +181 -0
  186. package/src/endpoint.ts +187 -0
  187. package/src/generated/dev/restate/events.ts +430 -0
  188. package/src/generated/dev/restate/ext.ts +238 -0
  189. package/src/generated/google/protobuf/descriptor.ts +7889 -0
  190. package/src/generated/google/protobuf/empty.ts +150 -0
  191. package/src/generated/google/protobuf/struct.ts +878 -0
  192. package/src/generated/proto/discovery.ts +423 -0
  193. package/src/generated/proto/dynrpc.ts +768 -0
  194. package/src/generated/proto/javascript.ts +488 -0
  195. package/src/generated/proto/protocol.ts +3091 -0
  196. package/src/generated/proto/services.ts +1834 -0
  197. package/src/generated/proto/test.ts +387 -0
  198. package/src/invocation.ts +212 -0
  199. package/src/io/decoder.ts +171 -0
  200. package/src/io/encoder.ts +72 -0
  201. package/src/journal.ts +537 -0
  202. package/src/local_state_store.ts +94 -0
  203. package/src/logger.ts +121 -0
  204. package/src/promise_combinator_tracker.ts +191 -0
  205. package/src/public_api.ts +53 -0
  206. package/src/state_machine.ts +635 -0
  207. package/src/types/errors.ts +297 -0
  208. package/src/types/grpc.ts +97 -0
  209. package/src/types/protocol.ts +201 -0
  210. package/src/types/router.ts +118 -0
  211. package/src/types/types.ts +160 -0
  212. package/src/utils/assumptions.ts +131 -0
  213. package/src/utils/message_logger.ts +112 -0
  214. package/src/utils/promises.ts +118 -0
  215. package/src/utils/public_utils.ts +91 -0
  216. package/src/utils/rand.ts +142 -0
  217. package/src/utils/utils.ts +178 -0
  218. package/src/workflows/workflow.ts +178 -0
  219. package/src/workflows/workflow_state_service.ts +299 -0
  220. package/src/workflows/workflow_wrapper_service.ts +314 -0
  221. package/dist/cloudflare_bundle.js +0 -27387
  222. package/dist/restate_context.d.ts.map +0 -1
  223. package/dist/restate_context_impl.d.ts.map +0 -1
  224. package/dist/server/base_restate_server.d.ts +0 -32
  225. package/dist/server/base_restate_server.d.ts.map +0 -1
  226. package/dist/server/restate_lambda_handler.d.ts +0 -104
  227. package/dist/server/restate_lambda_handler.d.ts.map +0 -1
  228. package/dist/server/restate_server.d.ts +0 -97
  229. package/dist/server/restate_server.d.ts.map +0 -1
  230. package/dist/utils/logger.d.ts +0 -60
  231. package/dist/utils/logger.d.ts.map +0 -1
@@ -0,0 +1,405 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2023-2024 - Restate Software, Inc., Restate GmbH
4
+ *
5
+ * This file is part of the Restate SDK for Node.js/TypeScript,
6
+ * which is released under the MIT license.
7
+ *
8
+ * You can find a copy of the license in file LICENSE in the root
9
+ * directory of this repository or package, or at
10
+ * https://github.com/restatedev/sdk-typescript/blob/main/LICENSE
11
+ */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.NewExecutionState = exports.JournalEntry = exports.Journal = void 0;
37
+ const p = __importStar(require("./types/protocol"));
38
+ const protocol_1 = require("./generated/proto/protocol");
39
+ const protocol_2 = require("./types/protocol");
40
+ const utils_1 = require("./utils/utils");
41
+ const types_1 = require("./types/types");
42
+ const errors_1 = require("./types/errors");
43
+ const promises_1 = require("./utils/promises");
44
+ const RESOLVED = Promise.resolve(undefined);
45
+ class Journal {
46
+ invocation;
47
+ state = NewExecutionState.REPLAYING;
48
+ userCodeJournalIndex = 0;
49
+ // Journal entries waiting for arrival of runtime completion
50
+ // 0 = root promise of the method invocation
51
+ pendingJournalEntries = new Map();
52
+ constructor(invocation) {
53
+ this.invocation = invocation;
54
+ const inputMessage = invocation.replayEntries.get(0);
55
+ if (!inputMessage ||
56
+ inputMessage.messageType !== protocol_2.POLL_INPUT_STREAM_ENTRY_MESSAGE_TYPE) {
57
+ throw errors_1.RetryableError.protocolViolation("First message of replay entries needs to be PollInputStreamMessage");
58
+ }
59
+ this.handleInputMessage(inputMessage.message);
60
+ }
61
+ handleInputMessage(m) {
62
+ if (this.invocation.nbEntriesToReplay === 1) {
63
+ this.transitionState(NewExecutionState.PROCESSING);
64
+ }
65
+ const rootEntry = new JournalEntry(p.POLL_INPUT_STREAM_ENTRY_MESSAGE_TYPE, m);
66
+ this.pendingJournalEntries.set(0, rootEntry);
67
+ }
68
+ handleUserSideMessage(messageType, message
69
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
70
+ ) {
71
+ this.incrementUserCodeIndex();
72
+ switch (this.state) {
73
+ case NewExecutionState.REPLAYING: {
74
+ const replayEntry = this.invocation.replayEntries.get(this.userCodeJournalIndex);
75
+ if (replayEntry === undefined) {
76
+ throw errors_1.RetryableError.internal(`Illegal state: no replay message was received for the entry at journal index ${this.userCodeJournalIndex}`);
77
+ }
78
+ const journalEntry = new JournalEntry(messageType, message);
79
+ this.handleReplay(this.userCodeJournalIndex, replayEntry, journalEntry);
80
+ return journalEntry.completablePromise.promise;
81
+ }
82
+ case NewExecutionState.PROCESSING: {
83
+ switch (messageType) {
84
+ case p.SUSPENSION_MESSAGE_TYPE:
85
+ case p.OUTPUT_STREAM_ENTRY_MESSAGE_TYPE: {
86
+ this.handleClosingMessage(messageType, message);
87
+ return RESOLVED;
88
+ }
89
+ case p.SET_STATE_ENTRY_MESSAGE_TYPE:
90
+ case p.CLEAR_STATE_ENTRY_MESSAGE_TYPE:
91
+ case p.CLEAR_ALL_STATE_ENTRY_MESSAGE_TYPE:
92
+ case p.COMPLETE_AWAKEABLE_ENTRY_MESSAGE_TYPE:
93
+ case p.BACKGROUND_INVOKE_ENTRY_MESSAGE_TYPE: {
94
+ // Do not need completion
95
+ return RESOLVED;
96
+ }
97
+ case p.GET_STATE_ENTRY_MESSAGE_TYPE: {
98
+ const getStateMsg = message;
99
+ if (getStateMsg.value !== undefined ||
100
+ getStateMsg.empty !== undefined) {
101
+ // State was eagerly filled by the local state store
102
+ return Promise.resolve(getStateMsg.value || getStateMsg.empty);
103
+ }
104
+ else {
105
+ // Need to retrieve state by going to the runtime.
106
+ return this.appendJournalEntry(messageType, message);
107
+ }
108
+ }
109
+ case p.GET_STATE_KEYS_ENTRY_MESSAGE_TYPE: {
110
+ const getStateMsg = message;
111
+ if (getStateMsg.value !== undefined) {
112
+ // State was eagerly filled by the local state store
113
+ return Promise.resolve(getStateMsg.value);
114
+ }
115
+ else {
116
+ // Need to retrieve state by going to the runtime.
117
+ return this.appendJournalEntry(messageType, message);
118
+ }
119
+ }
120
+ default: {
121
+ return this.appendJournalEntry(messageType, message);
122
+ }
123
+ }
124
+ }
125
+ case NewExecutionState.CLOSED: {
126
+ // We cannot do anything anymore because an output was already sent back
127
+ // This should actually never happen because the state is only transitioned to closed if the root promise is resolved/rejected
128
+ // So no more user messages can come in...
129
+ // - Print warning log and continue...
130
+ //TODO received user-side message but state machine is closed
131
+ return RESOLVED;
132
+ }
133
+ default: {
134
+ throw errors_1.RetryableError.protocolViolation("Did not receive input message before other messages.");
135
+ }
136
+ }
137
+ }
138
+ isUnResolved(index) {
139
+ const journalEntry = this.pendingJournalEntries.get(index);
140
+ return journalEntry !== undefined;
141
+ }
142
+ handleRuntimeCompletionMessage(m) {
143
+ // Get message at that entryIndex in pendingJournalEntries
144
+ const journalEntry = this.pendingJournalEntries.get(m.entryIndex);
145
+ if (journalEntry === undefined) {
146
+ //TODO received completion message but there is no pending promise for that index
147
+ return;
148
+ }
149
+ if (m.value !== undefined) {
150
+ if (journalEntry.messageType === protocol_2.GET_STATE_KEYS_ENTRY_MESSAGE_TYPE) {
151
+ // In case of get state keys we expect the parsed message
152
+ journalEntry.completablePromise.resolve(protocol_1.GetStateKeysEntryMessage_StateKeys.decode(m.value));
153
+ this.pendingJournalEntries.delete(m.entryIndex);
154
+ }
155
+ else {
156
+ journalEntry.completablePromise.resolve(m.value);
157
+ this.pendingJournalEntries.delete(m.entryIndex);
158
+ }
159
+ }
160
+ else if (m.failure !== undefined) {
161
+ // we do all completions with Terminal Errors, because failures triggered by those exceptions
162
+ // when the bubble up would otherwise lead to re-tries, deterministic replay, re-throwing, and
163
+ // thus an infinite loop that keeps replay-ing but never makes progress
164
+ // these failures here consequently need to cause terminal failures, unless caught and handled
165
+ // by the handler code
166
+ journalEntry.completablePromise.reject((0, errors_1.failureToError)(m.failure, true));
167
+ this.pendingJournalEntries.delete(m.entryIndex);
168
+ }
169
+ else if (m.empty !== undefined) {
170
+ journalEntry.completablePromise.resolve(m.empty);
171
+ this.pendingJournalEntries.delete(m.entryIndex);
172
+ }
173
+ else {
174
+ //TODO completion message without a value/failure/empty
175
+ }
176
+ }
177
+ handleEntryAckMessage(m) {
178
+ // Get message at that entryIndex in pendingJournalEntries
179
+ const journalEntry = this.pendingJournalEntries.get(m.entryIndex);
180
+ if (journalEntry === undefined) {
181
+ return;
182
+ }
183
+ // Just needs an ack
184
+ journalEntry.completablePromise.resolve(undefined);
185
+ this.pendingJournalEntries.delete(m.entryIndex);
186
+ }
187
+ handleReplay(journalIndex, replayMessage, journalEntry) {
188
+ // Do the journal mismatch check
189
+ const match = this.checkJournalMatch(replayMessage.messageType, replayMessage.message, journalEntry.messageType, journalEntry.message);
190
+ // Journal mismatch check failedf
191
+ if (!match) {
192
+ throw errors_1.RetryableError.journalMismatch(journalIndex, replayMessage, journalEntry);
193
+ }
194
+ // If journal mismatch check passed
195
+ /*
196
+ - Else if the runtime replay message contains a completion
197
+ - If the completion is a value
198
+ - Return the resolved user code promise with the value
199
+ - Else if the completion is a failure
200
+ - Return the rejected user code promise with the failure as Error
201
+ - Else if the completion is an Empty message
202
+ - Return the resolved user code promise with the Empty message
203
+ - Remove the journal entry
204
+ - Else the replayed message was uncompleted
205
+ - Create the user code promise
206
+ - Add message to the pendingJournalEntries
207
+ - Return the user code promise
208
+ */
209
+ switch (journalEntry.messageType) {
210
+ case protocol_2.SUSPENSION_MESSAGE_TYPE:
211
+ case protocol_2.OUTPUT_STREAM_ENTRY_MESSAGE_TYPE: {
212
+ this.handleClosingMessage(journalEntry.messageType, journalEntry.message);
213
+ break;
214
+ }
215
+ case protocol_2.GET_STATE_ENTRY_MESSAGE_TYPE: {
216
+ const getStateMsg = replayMessage.message;
217
+ this.resolveResult(journalIndex, journalEntry, getStateMsg.value || getStateMsg.empty, getStateMsg.failure);
218
+ break;
219
+ }
220
+ case protocol_2.GET_STATE_KEYS_ENTRY_MESSAGE_TYPE: {
221
+ const getStateMsg = replayMessage.message;
222
+ this.resolveResult(journalIndex, journalEntry, getStateMsg.value, getStateMsg.failure);
223
+ break;
224
+ }
225
+ case protocol_2.INVOKE_ENTRY_MESSAGE_TYPE: {
226
+ const invokeMsg = replayMessage.message;
227
+ this.resolveResult(journalIndex, journalEntry, invokeMsg.value, invokeMsg.failure);
228
+ break;
229
+ }
230
+ case protocol_2.SLEEP_ENTRY_MESSAGE_TYPE: {
231
+ const sleepMsg = replayMessage.message;
232
+ this.resolveResult(journalIndex, journalEntry, sleepMsg.empty, sleepMsg.failure);
233
+ break;
234
+ }
235
+ case protocol_2.AWAKEABLE_ENTRY_MESSAGE_TYPE: {
236
+ const awakeableMsg = replayMessage.message;
237
+ this.resolveResult(journalIndex, journalEntry, awakeableMsg.value, awakeableMsg.failure);
238
+ break;
239
+ }
240
+ case protocol_2.SIDE_EFFECT_ENTRY_MESSAGE_TYPE: {
241
+ const sideEffectMsg = replayMessage.message;
242
+ if (sideEffectMsg.value !== undefined) {
243
+ this.resolveResult(journalIndex, journalEntry, (0, utils_1.jsonDeserialize)(sideEffectMsg.value.toString()));
244
+ }
245
+ else if (sideEffectMsg.failure !== undefined) {
246
+ this.resolveResult(journalIndex, journalEntry, undefined, sideEffectMsg.failure.failure, sideEffectMsg.failure.terminal);
247
+ }
248
+ else {
249
+ // A side effect can have a void return type
250
+ // If it was replayed, then it is acked, so we should resolve it.
251
+ journalEntry.completablePromise.resolve(undefined);
252
+ this.pendingJournalEntries.delete(journalIndex);
253
+ }
254
+ break;
255
+ }
256
+ case protocol_2.SET_STATE_ENTRY_MESSAGE_TYPE:
257
+ case protocol_2.CLEAR_STATE_ENTRY_MESSAGE_TYPE:
258
+ case protocol_2.CLEAR_ALL_STATE_ENTRY_MESSAGE_TYPE:
259
+ case protocol_2.COMPLETE_AWAKEABLE_ENTRY_MESSAGE_TYPE:
260
+ case protocol_2.BACKGROUND_INVOKE_ENTRY_MESSAGE_TYPE:
261
+ case protocol_2.COMBINATOR_ENTRY_MESSAGE: {
262
+ // Do not need a completion. So if the match has passed then the entry can be deleted.
263
+ journalEntry.completablePromise.resolve(undefined);
264
+ this.pendingJournalEntries.delete(journalIndex);
265
+ break;
266
+ }
267
+ default: {
268
+ // TODO received replay message of unknown type
269
+ }
270
+ }
271
+ }
272
+ resolveResult(journalIndex, journalEntry, value, failure, failureWouldBeTerminal) {
273
+ if (value !== undefined) {
274
+ journalEntry.completablePromise.resolve(value);
275
+ this.pendingJournalEntries.delete(journalIndex);
276
+ }
277
+ else if (failure !== undefined) {
278
+ const error = (0, errors_1.failureToError)(failure, failureWouldBeTerminal ?? true);
279
+ journalEntry.completablePromise.reject(error);
280
+ this.pendingJournalEntries.delete(journalIndex);
281
+ }
282
+ else {
283
+ this.pendingJournalEntries.set(journalIndex, journalEntry);
284
+ }
285
+ }
286
+ handleClosingMessage(messageType, message) {
287
+ this.transitionState(NewExecutionState.CLOSED);
288
+ const rootJournalEntry = this.pendingJournalEntries.get(0);
289
+ if (rootJournalEntry === undefined) {
290
+ // We have no other option than to throw an error here
291
+ // Because without the root promise we cannot resolve the method or continue
292
+ throw errors_1.RetryableError.internal("Illegal state: No root journal entry found to resolve with output stream message");
293
+ }
294
+ this.pendingJournalEntries.delete(0);
295
+ rootJournalEntry.completablePromise.resolve(new types_1.Message(messageType, message));
296
+ }
297
+ checkJournalMatch(runtimeMsgType, runtimeMsg, userCodeMsgType, userCodeMsg) {
298
+ if (runtimeMsgType === userCodeMsgType) {
299
+ const equalityFct = utils_1.equalityCheckers.get(runtimeMsgType);
300
+ if (equalityFct === undefined) {
301
+ // TODO no equality function was defined for the message type
302
+ return true;
303
+ }
304
+ return equalityFct(runtimeMsg, userCodeMsg);
305
+ }
306
+ else {
307
+ return false;
308
+ }
309
+ }
310
+ // To get the indices that need to be completed with suspension
311
+ getCompletableIndices() {
312
+ // return all entries except for the root entry
313
+ return [...this.pendingJournalEntries.entries()]
314
+ .filter((el) => el[0] !== 0)
315
+ .map((el) => el[0]);
316
+ }
317
+ transitionState(newExecState) {
318
+ // If the state is already closed then you cannot transition anymore
319
+ if (this.state === NewExecutionState.CLOSED &&
320
+ newExecState !== NewExecutionState.CLOSED) {
321
+ // do nothing
322
+ return;
323
+ }
324
+ else {
325
+ this.state = newExecState;
326
+ return;
327
+ }
328
+ }
329
+ incrementUserCodeIndex() {
330
+ this.userCodeJournalIndex++;
331
+ if (this.userCodeJournalIndex === this.invocation.nbEntriesToReplay &&
332
+ this.state === NewExecutionState.REPLAYING) {
333
+ this.transitionState(NewExecutionState.PROCESSING);
334
+ }
335
+ }
336
+ /**
337
+ * Read the next replay entry
338
+ */
339
+ readNextReplayEntry() {
340
+ this.incrementUserCodeIndex();
341
+ return this.invocation.replayEntries.get(this.userCodeJournalIndex);
342
+ }
343
+ /**
344
+ * Append journal entry. This won't increment the journal index.
345
+ */
346
+ appendJournalEntry(messageType, message) {
347
+ const journalEntry = new JournalEntry(messageType, message);
348
+ this.pendingJournalEntries.set(this.userCodeJournalIndex, journalEntry);
349
+ return journalEntry.completablePromise.promise;
350
+ }
351
+ isClosed() {
352
+ return this.state === NewExecutionState.CLOSED;
353
+ }
354
+ isProcessing() {
355
+ return this.state === NewExecutionState.PROCESSING;
356
+ }
357
+ isReplaying() {
358
+ return this.state === NewExecutionState.REPLAYING;
359
+ }
360
+ getUserCodeJournalIndex() {
361
+ return this.userCodeJournalIndex;
362
+ }
363
+ close() {
364
+ this.transitionState(NewExecutionState.CLOSED);
365
+ }
366
+ outputMsgWasReplayed() {
367
+ // Check if the last message of the replay entries is an output message
368
+ const lastEntry = this.invocation.replayEntries.get(this.invocation.nbEntriesToReplay - 1);
369
+ return (lastEntry && lastEntry.messageType === protocol_2.OUTPUT_STREAM_ENTRY_MESSAGE_TYPE);
370
+ }
371
+ // We use this for side effects.
372
+ // The restate context needs to know if the user-defined fct needs to be executed or not.
373
+ // It needs to know this before it can craft the message and call this.stateMachine.handleUserSideMessage(...)
374
+ // so before the index got incremented and the state got transitioned.
375
+ // So we cannot use isReplaying().
376
+ // So we need to check in the journal if the next entry (= our side effect) will be replayed or not.
377
+ nextEntryWillBeReplayed() {
378
+ return this.userCodeJournalIndex + 1 < this.invocation.nbEntriesToReplay;
379
+ }
380
+ }
381
+ exports.Journal = Journal;
382
+ class JournalEntry {
383
+ messageType;
384
+ message;
385
+ completablePromise;
386
+ constructor(messageType, message) {
387
+ this.messageType = messageType;
388
+ this.message = message;
389
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
390
+ this.completablePromise = new promises_1.CompletablePromise();
391
+ }
392
+ }
393
+ exports.JournalEntry = JournalEntry;
394
+ // "WAITING_FOR_START" before receiving start message
395
+ // "WAITING_FOR_REPLAY" when waiting for all replay entries to arrive from the runtime
396
+ // "REPLAYING" when receiving input stream message
397
+ // "PROCESSING" when both sides have finished replaying
398
+ // "CLOSED" when input stream connection channel gets closed
399
+ var NewExecutionState;
400
+ (function (NewExecutionState) {
401
+ NewExecutionState["REPLAYING"] = "REPLAYING";
402
+ NewExecutionState["PROCESSING"] = "PROCESSING";
403
+ NewExecutionState["CLOSED"] = "CLOSED";
404
+ })(NewExecutionState = exports.NewExecutionState || (exports.NewExecutionState = {}));
405
+ //# sourceMappingURL=journal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal.js","sourceRoot":"","sources":["../src/journal.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,oDAAsC;AACtC,yDAGoC;AACpC,+CA0B0B;AAC1B,yCAAkE;AAClE,yCAAwC;AAGxC,2CAAgE;AAChE,+CAAsD;AAEtD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAE5C,MAAa,OAAO;IASG;IARb,KAAK,GAAG,iBAAiB,CAAC,SAAS,CAAC;IAEpC,oBAAoB,GAAG,CAAC,CAAC;IAEjC,4DAA4D;IAC5D,4CAA4C;IACpC,qBAAqB,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEhE,YAAqB,UAA4B;QAA5B,eAAU,GAAV,UAAU,CAAkB;QAC/C,MAAM,YAAY,GAAG,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrD,IACE,CAAC,YAAY;YACb,YAAY,CAAC,WAAW,KAAK,+CAAoC,EACjE;YACA,MAAM,uBAAc,CAAC,iBAAiB,CACpC,oEAAoE,CACrE,CAAC;SACH;QACD,IAAI,CAAC,kBAAkB,CACrB,YAAY,CAAC,OAAsC,CACpD,CAAC;IACJ,CAAC;IAED,kBAAkB,CAAC,CAAgC;QACjD,IAAI,IAAI,CAAC,UAAU,CAAC,iBAAiB,KAAK,CAAC,EAAE;YAC3C,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;SACpD;QAED,MAAM,SAAS,GAAG,IAAI,YAAY,CAChC,CAAC,CAAC,oCAAoC,EACtC,CAAC,CACF,CAAC;QAEF,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC/C,CAAC;IAEM,qBAAqB,CAC1B,WAAmB,EACnB,OAAuC;IACvC,8DAA8D;;QAE9D,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE9B,QAAQ,IAAI,CAAC,KAAK,EAAE;YAClB,KAAK,iBAAiB,CAAC,SAAS,CAAC,CAAC;gBAChC,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,CACnD,IAAI,CAAC,oBAAoB,CAC1B,CAAC;gBACF,IAAI,WAAW,KAAK,SAAS,EAAE;oBAC7B,MAAM,uBAAc,CAAC,QAAQ,CAC3B,gFAAgF,IAAI,CAAC,oBAAoB,EAAE,CAC5G,CAAC;iBACH;gBAED,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBAC5D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;gBACxE,OAAO,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC;aAChD;YACD,KAAK,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBACjC,QAAQ,WAAW,EAAE;oBACnB,KAAK,CAAC,CAAC,uBAAuB,CAAC;oBAC/B,KAAK,CAAC,CAAC,gCAAgC,CAAC,CAAC;wBACvC,IAAI,CAAC,oBAAoB,CACvB,WAAW,EACX,OAA2D,CAC5D,CAAC;wBACF,OAAO,QAAQ,CAAC;qBACjB;oBACD,KAAK,CAAC,CAAC,4BAA4B,CAAC;oBACpC,KAAK,CAAC,CAAC,8BAA8B,CAAC;oBACtC,KAAK,CAAC,CAAC,kCAAkC,CAAC;oBAC1C,KAAK,CAAC,CAAC,qCAAqC,CAAC;oBAC7C,KAAK,CAAC,CAAC,oCAAoC,CAAC,CAAC;wBAC3C,yBAAyB;wBACzB,OAAO,QAAQ,CAAC;qBACjB;oBACD,KAAK,CAAC,CAAC,4BAA4B,CAAC,CAAC;wBACnC,MAAM,WAAW,GAAG,OAA+B,CAAC;wBACpD,IACE,WAAW,CAAC,KAAK,KAAK,SAAS;4BAC/B,WAAW,CAAC,KAAK,KAAK,SAAS,EAC/B;4BACA,oDAAoD;4BACpD,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;yBAChE;6BAAM;4BACL,kDAAkD;4BAClD,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;yBACtD;qBACF;oBACD,KAAK,CAAC,CAAC,iCAAiC,CAAC,CAAC;wBACxC,MAAM,WAAW,GAAG,OAAmC,CAAC;wBACxD,IAAI,WAAW,CAAC,KAAK,KAAK,SAAS,EAAE;4BACnC,oDAAoD;4BACpD,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;yBAC3C;6BAAM;4BACL,kDAAkD;4BAClD,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;yBACtD;qBACF;oBACD,OAAO,CAAC,CAAC;wBACP,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;qBACtD;iBACF;aACF;YACD,KAAK,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC7B,wEAAwE;gBACxE,8HAA8H;gBAC9H,0CAA0C;gBAC1C,sCAAsC;gBACtC,6DAA6D;gBAC7D,OAAO,QAAQ,CAAC;aACjB;YACD,OAAO,CAAC,CAAC;gBACP,MAAM,uBAAc,CAAC,iBAAiB,CACpC,sDAAsD,CACvD,CAAC;aACH;SACF;IACH,CAAC;IAEM,YAAY,CAAC,KAAa;QAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3D,OAAO,YAAY,KAAK,SAAS,CAAC;IACpC,CAAC;IAEM,8BAA8B,CAAC,CAAoB;QACxD,0DAA0D;QAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAElE,IAAI,YAAY,KAAK,SAAS,EAAE;YAC9B,iFAAiF;YACjF,OAAO;SACR;QAED,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE;YACzB,IAAI,YAAY,CAAC,WAAW,KAAK,4CAAiC,EAAE;gBAClE,yDAAyD;gBACzD,YAAY,CAAC,kBAAkB,CAAC,OAAO,CACrC,6CAAkC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CACnD,CAAC;gBACF,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;aACjD;iBAAM;gBACL,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACjD,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;aACjD;SACF;aAAM,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,EAAE;YAClC,6FAA6F;YAC7F,8FAA8F;YAC9F,uEAAuE;YACvE,8FAA8F;YAC9F,sBAAsB;YACtB,YAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAA,uBAAc,EAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;YACxE,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;SACjD;aAAM,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE;YAChC,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACjD,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;SACjD;aAAM;YACL,uDAAuD;SACxD;IACH,CAAC;IAEM,qBAAqB,CAAC,CAAkB;QAC7C,0DAA0D;QAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAElE,IAAI,YAAY,KAAK,SAAS,EAAE;YAC9B,OAAO;SACR;QAED,oBAAoB;QACpB,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;IAEO,YAAY,CAClB,YAAoB,EACpB,aAAsB,EACtB,YAA0B;QAE1B,gCAAgC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAClC,aAAa,CAAC,WAAW,EACzB,aAAa,CAAC,OAAO,EACrB,YAAY,CAAC,WAAW,EACxB,YAAY,CAAC,OAAO,CACrB,CAAC;QAEF,iCAAiC;QACjC,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,uBAAc,CAAC,eAAe,CAClC,YAAY,EACZ,aAAa,EACb,YAAY,CACb,CAAC;SACH;QAED,mCAAmC;QACnC;;;;;;;;;;;;;WAaG;QACH,QAAQ,YAAY,CAAC,WAAW,EAAE;YAChC,KAAK,kCAAuB,CAAC;YAC7B,KAAK,2CAAgC,CAAC,CAAC;gBACrC,IAAI,CAAC,oBAAoB,CACvB,YAAY,CAAC,WAAW,EACxB,YAAY,CAAC,OAAuD,CACrE,CAAC;gBACF,MAAM;aACP;YACD,KAAK,uCAA4B,CAAC,CAAC;gBACjC,MAAM,WAAW,GAAG,aAAa,CAAC,OAA+B,CAAC;gBAClE,IAAI,CAAC,aAAa,CAChB,YAAY,EACZ,YAAY,EACZ,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,KAAK,EACtC,WAAW,CAAC,OAAO,CACpB,CAAC;gBACF,MAAM;aACP;YACD,KAAK,4CAAiC,CAAC,CAAC;gBACtC,MAAM,WAAW,GAAG,aAAa,CAAC,OAAmC,CAAC;gBACtE,IAAI,CAAC,aAAa,CAChB,YAAY,EACZ,YAAY,EACZ,WAAW,CAAC,KAAK,EACjB,WAAW,CAAC,OAAO,CACpB,CAAC;gBACF,MAAM;aACP;YACD,KAAK,oCAAyB,CAAC,CAAC;gBAC9B,MAAM,SAAS,GAAG,aAAa,CAAC,OAA6B,CAAC;gBAC9D,IAAI,CAAC,aAAa,CAChB,YAAY,EACZ,YAAY,EACZ,SAAS,CAAC,KAAK,EACf,SAAS,CAAC,OAAO,CAClB,CAAC;gBACF,MAAM;aACP;YACD,KAAK,mCAAwB,CAAC,CAAC;gBAC7B,MAAM,QAAQ,GAAG,aAAa,CAAC,OAA4B,CAAC;gBAC5D,IAAI,CAAC,aAAa,CAChB,YAAY,EACZ,YAAY,EACZ,QAAQ,CAAC,KAAK,EACd,QAAQ,CAAC,OAAO,CACjB,CAAC;gBACF,MAAM;aACP;YACD,KAAK,uCAA4B,CAAC,CAAC;gBACjC,MAAM,YAAY,GAAG,aAAa,CAAC,OAAgC,CAAC;gBACpE,IAAI,CAAC,aAAa,CAChB,YAAY,EACZ,YAAY,EACZ,YAAY,CAAC,KAAK,EAClB,YAAY,CAAC,OAAO,CACrB,CAAC;gBACF,MAAM;aACP;YACD,KAAK,yCAA8B,CAAC,CAAC;gBACnC,MAAM,aAAa,GAAG,aAAa,CAAC,OAAiC,CAAC;gBACtE,IAAI,aAAa,CAAC,KAAK,KAAK,SAAS,EAAE;oBACrC,IAAI,CAAC,aAAa,CAChB,YAAY,EACZ,YAAY,EACZ,IAAA,uBAAe,EAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAChD,CAAC;iBACH;qBAAM,IAAI,aAAa,CAAC,OAAO,KAAK,SAAS,EAAE;oBAC9C,IAAI,CAAC,aAAa,CAChB,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,aAAa,CAAC,OAAO,CAAC,OAAO,EAC7B,aAAa,CAAC,OAAO,CAAC,QAAQ,CAC/B,CAAC;iBACH;qBAAM;oBACL,4CAA4C;oBAC5C,iEAAiE;oBACjE,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;oBACnD,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;iBACjD;gBACD,MAAM;aACP;YACD,KAAK,uCAA4B,CAAC;YAClC,KAAK,yCAA8B,CAAC;YACpC,KAAK,6CAAkC,CAAC;YACxC,KAAK,gDAAqC,CAAC;YAC3C,KAAK,+CAAoC,CAAC;YAC1C,KAAK,mCAAwB,CAAC,CAAC;gBAC7B,sFAAsF;gBACtF,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACnD,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAChD,MAAM;aACP;YACD,OAAO,CAAC,CAAC;gBACP,+CAA+C;aAChD;SACF;IACH,CAAC;IAED,aAAa,CACX,YAAoB,EACpB,YAA0B,EAC1B,KAAoB,EACpB,OAA6B,EAC7B,sBAAgC;QAEhC,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;SACjD;aAAM,IAAI,OAAO,KAAK,SAAS,EAAE;YAChC,MAAM,KAAK,GAAG,IAAA,uBAAc,EAAC,OAAO,EAAE,sBAAsB,IAAI,IAAI,CAAC,CAAC;YACtE,YAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;SACjD;aAAM;YACL,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;SAC5D;IACH,CAAC;IAED,oBAAoB,CAClB,WAAmB,EACnB,OAAqD;QAErD,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE3D,IAAI,gBAAgB,KAAK,SAAS,EAAE;YAClC,sDAAsD;YACtD,4EAA4E;YAC5E,MAAM,uBAAc,CAAC,QAAQ,CAC3B,kFAAkF,CACnF,CAAC;SACH;QAED,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACrC,gBAAgB,CAAC,kBAAkB,CAAC,OAAO,CACzC,IAAI,eAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAClC,CAAC;IACJ,CAAC;IAEO,iBAAiB,CACvB,cAAsB,EACtB,UAA0C,EAC1C,eAAuB,EACvB,WAA2C;QAE3C,IAAI,cAAc,KAAK,eAAe,EAAE;YACtC,MAAM,WAAW,GAAG,wBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACzD,IAAI,WAAW,KAAK,SAAS,EAAE;gBAC7B,6DAA6D;gBAC7D,OAAO,IAAI,CAAC;aACb;YACD,OAAO,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;SAC7C;aAAM;YACL,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAED,+DAA+D;IACxD,qBAAqB;QAC1B,+CAA+C;QAC/C,OAAO,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,CAAC;aAC7C,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;aAC3B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAEO,eAAe,CAAC,YAA+B;QACrD,oEAAoE;QACpE,IACE,IAAI,CAAC,KAAK,KAAK,iBAAiB,CAAC,MAAM;YACvC,YAAY,KAAK,iBAAiB,CAAC,MAAM,EACzC;YACA,aAAa;YACb,OAAO;SACR;aAAM;YACL,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;YAC1B,OAAO;SACR;IACH,CAAC;IAED,sBAAsB;QACpB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IACE,IAAI,CAAC,oBAAoB,KAAK,IAAI,CAAC,UAAU,CAAC,iBAAiB;YAC/D,IAAI,CAAC,KAAK,KAAK,iBAAiB,CAAC,SAAS,EAC1C;YACA,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;SACpD;IACH,CAAC;IAED;;OAEG;IACI,mBAAmB;QACxB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACI,kBAAkB,CACvB,WAAmB,EACnB,OAAuC;QAEvC,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC5D,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;QACxE,OAAO,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC;IACjD,CAAC;IAEM,QAAQ;QACb,OAAO,IAAI,CAAC,KAAK,KAAK,iBAAiB,CAAC,MAAM,CAAC;IACjD,CAAC;IAEM,YAAY;QACjB,OAAO,IAAI,CAAC,KAAK,KAAK,iBAAiB,CAAC,UAAU,CAAC;IACrD,CAAC;IAEM,WAAW;QAChB,OAAO,IAAI,CAAC,KAAK,KAAK,iBAAiB,CAAC,SAAS,CAAC;IACpD,CAAC;IAEM,uBAAuB;QAC5B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAEM,oBAAoB;QACzB,uEAAuE;QACvE,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,CACjD,IAAI,CAAC,UAAU,CAAC,iBAAiB,GAAG,CAAC,CACtC,CAAC;QACF,OAAO,CACL,SAAS,IAAI,SAAS,CAAC,WAAW,KAAK,2CAAgC,CACxE,CAAC;IACJ,CAAC;IAED,gCAAgC;IAChC,yFAAyF;IACzF,8GAA8G;IAC9G,sEAAsE;IACtE,kCAAkC;IAClC,oGAAoG;IACpG,uBAAuB;QACrB,OAAO,IAAI,CAAC,oBAAoB,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;IAC3E,CAAC;CACF;AA7cD,0BA6cC;AAED,MAAa,YAAY;IAIZ;IACA;IAJJ,kBAAkB,CAA8B;IAEvD,YACW,WAAmB,EACnB,OAAuC;QADvC,gBAAW,GAAX,WAAW,CAAQ;QACnB,YAAO,GAAP,OAAO,CAAgC;QAEhD,8DAA8D;QAC9D,IAAI,CAAC,kBAAkB,GAAG,IAAI,6BAAkB,EAAO,CAAC;IAC1D,CAAC;CACF;AAVD,oCAUC;AAED,qDAAqD;AACrD,sFAAsF;AACtF,kDAAkD;AAClD,uDAAuD;AACvD,4DAA4D;AAC5D,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,4CAAuB,CAAA;IACvB,8CAAyB,CAAA;IACzB,sCAAiB,CAAA;AACnB,CAAC,EAJW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAI5B"}
@@ -1,13 +1,15 @@
1
1
  /// <reference types="node" />
2
- import { ClearStateEntryMessage, GetStateEntryMessage, SetStateEntryMessage, StartMessage_StateEntry } from "./generated/proto/protocol";
2
+ import { ClearAllStateEntryMessage, ClearStateEntryMessage, GetStateEntryMessage, GetStateKeysEntryMessage, SetStateEntryMessage, StartMessage_StateEntry } from "./generated/proto/protocol";
3
3
  import { Empty } from "./generated/google/protobuf/empty";
4
4
  export declare class LocalStateStore {
5
- readonly isPartial: boolean;
5
+ private isPartial;
6
6
  private state;
7
7
  constructor(isPartial: boolean, state: StartMessage_StateEntry[]);
8
- get(key: string): GetStateEntryMessage;
8
+ tryCompleteGet(key: string, msg: GetStateEntryMessage): boolean;
9
+ tryCompletedGetStateKeys(msg: GetStateKeysEntryMessage): boolean;
9
10
  set<T>(key: string, value: T): SetStateEntryMessage;
10
11
  clear(key: string): ClearStateEntryMessage;
11
12
  add(key: string, result: Buffer | Empty): void;
13
+ clearAll(): ClearAllStateEntryMessage;
12
14
  }
13
15
  //# sourceMappingURL=local_state_store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"local_state_store.d.ts","sourceRoot":"","sources":["../src/local_state_store.ts"],"names":[],"mappings":";AAWA,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAG1D,qBAAa,eAAe;IAGd,QAAQ,CAAC,SAAS,EAAE,OAAO;IAFvC,OAAO,CAAC,KAAK,CAA8B;gBAEtB,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE;IAMlE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB;IA4BtC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,oBAAoB;IASnD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,sBAAsB;IAQ1C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;CAGtD"}
1
+ {"version":3,"file":"local_state_store.d.ts","sourceRoot":"","sources":["../src/local_state_store.ts"],"names":[],"mappings":";AAWA,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,oBAAoB,EACpB,wBAAwB,EAExB,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAG1D,qBAAa,eAAe;IAGd,OAAO,CAAC,SAAS;IAF7B,OAAO,CAAC,KAAK,CAA8B;gBAEvB,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE;IAOjE,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,oBAAoB,GAAG,OAAO;IAuB/D,wBAAwB,CAAC,GAAG,EAAE,wBAAwB,GAAG,OAAO;IAWhE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,oBAAoB;IASnD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,sBAAsB;IAQ1C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAI9C,QAAQ,IAAI,yBAAyB;CAK7C"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2023-2024 - Restate Software, Inc., Restate GmbH
4
+ *
5
+ * This file is part of the Restate SDK for Node.js/TypeScript,
6
+ * which is released under the MIT license.
7
+ *
8
+ * You can find a copy of the license in file LICENSE in the root
9
+ * directory of this repository or package, or at
10
+ * https://github.com/restatedev/sdk-typescript/blob/main/LICENSE
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.LocalStateStore = void 0;
14
+ const protocol_1 = require("./generated/proto/protocol");
15
+ const empty_1 = require("./generated/google/protobuf/empty");
16
+ const utils_1 = require("./utils/utils");
17
+ class LocalStateStore {
18
+ isPartial;
19
+ state;
20
+ constructor(isPartial, state) {
21
+ this.isPartial = isPartial;
22
+ this.state = new Map(state.map(({ key, value }) => [key.toString(), value]));
23
+ }
24
+ // Returns true if completed
25
+ tryCompleteGet(key, msg) {
26
+ const stateEntry = this.state.get(key);
27
+ if (stateEntry === undefined) {
28
+ if (this.isPartial) {
29
+ // Partial eager state, so retrieve state from the runtime
30
+ return false;
31
+ }
32
+ else {
33
+ // Complete eager state, so state entry is null
34
+ msg.empty = empty_1.Empty.create({});
35
+ return true;
36
+ }
37
+ }
38
+ if (stateEntry instanceof Buffer) {
39
+ msg.value = stateEntry;
40
+ }
41
+ else {
42
+ // stateEntry is Empty
43
+ msg.empty = stateEntry;
44
+ }
45
+ return true;
46
+ }
47
+ // Returns true if completed
48
+ tryCompletedGetStateKeys(msg) {
49
+ if (this.isPartial) {
50
+ return false;
51
+ }
52
+ msg.value = protocol_1.GetStateKeysEntryMessage_StateKeys.create({
53
+ keys: Array.from(this.state.keys()).map((b) => Buffer.from(b)),
54
+ });
55
+ return true;
56
+ }
57
+ set(key, value) {
58
+ const bytes = Buffer.from((0, utils_1.jsonSerialize)(value));
59
+ this.state.set(key, bytes);
60
+ return protocol_1.SetStateEntryMessage.create({
61
+ key: Buffer.from(key, "utf8"),
62
+ value: bytes,
63
+ });
64
+ }
65
+ clear(key) {
66
+ this.state.set(key, empty_1.Empty.create({}));
67
+ return protocol_1.ClearStateEntryMessage.create({ key: Buffer.from(key) });
68
+ }
69
+ // When a GetState request does not have a local entry and we have partial state,
70
+ // then the request goes to the runtime.
71
+ // When we get the response of the runtime, we add the state to the localStateStore.
72
+ add(key, result) {
73
+ this.state.set(key, result);
74
+ }
75
+ clearAll() {
76
+ this.state.clear();
77
+ this.isPartial = false;
78
+ return {};
79
+ }
80
+ }
81
+ exports.LocalStateStore = LocalStateStore;
82
+ //# sourceMappingURL=local_state_store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local_state_store.js","sourceRoot":"","sources":["../src/local_state_store.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAEH,yDAQoC;AACpC,6DAA0D;AAC1D,yCAA8C;AAE9C,MAAa,eAAe;IAGN;IAFZ,KAAK,CAA8B;IAE3C,YAAoB,SAAkB,EAAE,KAAgC;QAApD,cAAS,GAAT,SAAS,CAAS;QACpC,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAClB,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC,CACvD,CAAC;IACJ,CAAC;IAED,4BAA4B;IACrB,cAAc,CAAC,GAAW,EAAE,GAAyB;QAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,UAAU,KAAK,SAAS,EAAE;YAC5B,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,0DAA0D;gBAC1D,OAAO,KAAK,CAAC;aACd;iBAAM;gBACL,+CAA+C;gBAC/C,GAAG,CAAC,KAAK,GAAG,aAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC7B,OAAO,IAAI,CAAC;aACb;SACF;QAED,IAAI,UAAU,YAAY,MAAM,EAAE;YAChC,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC;SACxB;aAAM;YACL,sBAAsB;YACtB,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC;SACxB;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4BAA4B;IACrB,wBAAwB,CAAC,GAA6B;QAC3D,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,OAAO,KAAK,CAAC;SACd;QAED,GAAG,CAAC,KAAK,GAAG,6CAAkC,CAAC,MAAM,CAAC;YACpD,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC/D,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,GAAG,CAAI,GAAW,EAAE,KAAQ;QACjC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAA,qBAAa,EAAC,KAAK,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,OAAO,+BAAoB,CAAC,MAAM,CAAC;YACjC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;YAC7B,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,GAAW;QACtB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,aAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACtC,OAAO,iCAAsB,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,iFAAiF;IACjF,wCAAwC;IACxC,oFAAoF;IAC7E,GAAG,CAAC,GAAW,EAAE,MAAsB;QAC5C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC;IAEM,QAAQ;QACb,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAtED,0CAsEC"}
@@ -0,0 +1,19 @@
1
+ /// <reference types="node" />
2
+ export declare class LoggerContext {
3
+ readonly invocationId: string;
4
+ readonly additionalContext?: {
5
+ [name: string]: string;
6
+ } | undefined;
7
+ readonly fqMethodName: string;
8
+ constructor(invocationId: string, packageName: string, serviceName: string, methodName: string, additionalContext?: {
9
+ [name: string]: string;
10
+ } | undefined);
11
+ }
12
+ export declare function createRestateConsole(context?: LoggerContext, filter?: () => boolean): Console;
13
+ /**
14
+ * This is a simple console without contextual info.
15
+ *
16
+ * This should be used only in cases where no contextual info is available.
17
+ */
18
+ export declare const rlog: Console;
19
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";AAcA,qBAAa,aAAa;IAItB,QAAQ,CAAC,YAAY,EAAE,MAAM;IAI7B,QAAQ,CAAC,iBAAiB,CAAC;;;IAP7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;gBAGnB,YAAY,EAAE,MAAM,EAC7B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EACT,iBAAiB,CAAC;;iBAA4B;CAM1D;AAeD,wBAAgB,oBAAoB,CAClC,OAAO,CAAC,EAAE,aAAa,EACvB,MAAM,CAAC,EAAE,MAAM,OAAO,GACrB,OAAO,CAmET;AAED;;;;GAIG;AACH,eAAO,MAAM,IAAI,SAAyB,CAAC"}
package/dist/logger.js ADDED
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2023-2024 - Restate Software, Inc., Restate GmbH
4
+ *
5
+ * This file is part of the Restate SDK for Node.js/TypeScript,
6
+ * which is released under the MIT license.
7
+ *
8
+ * You can find a copy of the license in file LICENSE in the root
9
+ * directory of this repository or package, or at
10
+ * https://github.com/restatedev/sdk-typescript/blob/main/LICENSE
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.rlog = exports.createRestateConsole = exports.LoggerContext = void 0;
14
+ /* eslint-disable @typescript-eslint/no-explicit-any */
15
+ /* eslint-disable no-console */
16
+ class LoggerContext {
17
+ invocationId;
18
+ additionalContext;
19
+ fqMethodName;
20
+ constructor(invocationId, packageName, serviceName, methodName, additionalContext) {
21
+ this.invocationId = invocationId;
22
+ this.additionalContext = additionalContext;
23
+ this.fqMethodName = packageName
24
+ ? `${packageName}.${serviceName}/${methodName}`
25
+ : `${serviceName}/${methodName}`;
26
+ }
27
+ }
28
+ exports.LoggerContext = LoggerContext;
29
+ function formatLogPrefix(context) {
30
+ if (context === undefined) {
31
+ return "[restate] ";
32
+ }
33
+ let prefix = `[restate] [${context.fqMethodName}][${context.invocationId}]`;
34
+ if (context.additionalContext !== undefined) {
35
+ for (const [k, v] of Object.entries(context.additionalContext)) {
36
+ prefix = prefix + `[${k}: ${v}]`;
37
+ }
38
+ }
39
+ return prefix;
40
+ }
41
+ function createRestateConsole(context, filter) {
42
+ const prefix = formatLogPrefix(context);
43
+ const restate_logger = Object.create(console);
44
+ const shouldLog = filter ?? (() => true);
45
+ restate_logger.log = (message, ...optionalParams) => {
46
+ if (!shouldLog()) {
47
+ return;
48
+ }
49
+ console.log(prefix + `[${new Date().toISOString()}] LOG: ` + message, ...optionalParams);
50
+ };
51
+ restate_logger.info = (message, ...optionalParams) => {
52
+ if (!shouldLog()) {
53
+ return;
54
+ }
55
+ console.info(prefix + `[${new Date().toISOString()}] INFO: ` + message, ...optionalParams);
56
+ };
57
+ restate_logger.warn = (message, ...optionalParams) => {
58
+ if (!shouldLog()) {
59
+ return;
60
+ }
61
+ console.warn(prefix + `[${new Date().toISOString()}] WARN: ` + message, ...optionalParams);
62
+ };
63
+ restate_logger.error = (message, ...optionalParams) => {
64
+ if (!shouldLog()) {
65
+ return;
66
+ }
67
+ console.error(prefix + `[${new Date().toISOString()}] ERROR: ` + message, ...optionalParams);
68
+ };
69
+ restate_logger.debug = (message, ...optionalParams) => {
70
+ if (!shouldLog()) {
71
+ return;
72
+ }
73
+ console.debug(prefix + `[${new Date().toISOString()}] DEBUG: ` + message, ...optionalParams);
74
+ };
75
+ restate_logger.trace = (message, ...optionalParams) => {
76
+ if (!shouldLog()) {
77
+ return;
78
+ }
79
+ console.trace(prefix + `[${new Date().toISOString()}] TRACE: ` + message, ...optionalParams);
80
+ };
81
+ return restate_logger;
82
+ }
83
+ exports.createRestateConsole = createRestateConsole;
84
+ /**
85
+ * This is a simple console without contextual info.
86
+ *
87
+ * This should be used only in cases where no contextual info is available.
88
+ */
89
+ exports.rlog = createRestateConsole();
90
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}