@hotmeshio/hotmesh 0.0.52 → 0.0.54

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 (134) hide show
  1. package/README.md +22 -18
  2. package/build/index.d.ts +1 -2
  3. package/build/index.js +1 -3
  4. package/build/modules/enums.d.ts +8 -3
  5. package/build/modules/enums.js +16 -8
  6. package/build/modules/errors.d.ts +58 -20
  7. package/build/modules/errors.js +90 -33
  8. package/build/package.json +7 -2
  9. package/build/services/activities/activity.d.ts +8 -0
  10. package/build/services/activities/activity.js +63 -14
  11. package/build/services/activities/await.js +6 -6
  12. package/build/services/activities/cycle.d.ts +2 -2
  13. package/build/services/activities/cycle.js +5 -5
  14. package/build/services/activities/hook.js +9 -5
  15. package/build/services/activities/interrupt.d.ts +3 -3
  16. package/build/services/activities/interrupt.js +15 -6
  17. package/build/services/activities/signal.d.ts +2 -2
  18. package/build/services/activities/signal.js +4 -4
  19. package/build/services/activities/trigger.d.ts +5 -2
  20. package/build/services/activities/trigger.js +34 -4
  21. package/build/services/activities/worker.js +6 -6
  22. package/build/services/compiler/deployer.js +33 -5
  23. package/build/services/compiler/validator.d.ts +2 -0
  24. package/build/services/compiler/validator.js +5 -1
  25. package/build/services/durable/client.d.ts +7 -1
  26. package/build/services/durable/client.js +57 -38
  27. package/build/services/durable/exporter.d.ts +27 -81
  28. package/build/services/durable/exporter.js +153 -325
  29. package/build/services/durable/handle.d.ts +13 -8
  30. package/build/services/durable/handle.js +61 -48
  31. package/build/services/durable/index.d.ts +0 -2
  32. package/build/services/durable/index.js +0 -2
  33. package/build/services/durable/schemas/factory.d.ts +33 -0
  34. package/build/services/durable/schemas/factory.js +2356 -0
  35. package/build/services/durable/search.js +8 -8
  36. package/build/services/durable/worker.js +117 -25
  37. package/build/services/durable/workflow.d.ts +67 -52
  38. package/build/services/durable/workflow.js +322 -306
  39. package/build/services/engine/index.d.ts +2 -2
  40. package/build/services/engine/index.js +5 -2
  41. package/build/services/exporter/index.d.ts +2 -4
  42. package/build/services/exporter/index.js +4 -5
  43. package/build/services/hotmesh/index.d.ts +2 -2
  44. package/build/services/hotmesh/index.js +2 -2
  45. package/build/services/mapper/index.d.ts +6 -2
  46. package/build/services/mapper/index.js +6 -2
  47. package/build/services/pipe/functions/array.d.ts +2 -10
  48. package/build/services/pipe/functions/array.js +30 -28
  49. package/build/services/pipe/functions/conditional.d.ts +1 -0
  50. package/build/services/pipe/functions/conditional.js +3 -0
  51. package/build/services/pipe/functions/date.d.ts +1 -0
  52. package/build/services/pipe/functions/date.js +4 -0
  53. package/build/services/pipe/functions/index.d.ts +2 -0
  54. package/build/services/pipe/functions/index.js +2 -0
  55. package/build/services/pipe/functions/logical.d.ts +5 -0
  56. package/build/services/pipe/functions/logical.js +12 -0
  57. package/build/services/pipe/functions/object.d.ts +3 -0
  58. package/build/services/pipe/functions/object.js +25 -7
  59. package/build/services/pipe/index.d.ts +20 -3
  60. package/build/services/pipe/index.js +82 -16
  61. package/build/services/router/index.js +14 -3
  62. package/build/services/serializer/index.d.ts +3 -2
  63. package/build/services/serializer/index.js +11 -4
  64. package/build/services/store/clients/ioredis.js +6 -6
  65. package/build/services/store/clients/redis.js +7 -7
  66. package/build/services/store/index.d.ts +2 -0
  67. package/build/services/store/index.js +4 -1
  68. package/build/services/stream/clients/ioredis.js +8 -8
  69. package/build/services/stream/clients/redis.js +1 -1
  70. package/build/types/activity.d.ts +60 -5
  71. package/build/types/durable.d.ts +183 -36
  72. package/build/types/error.d.ts +48 -0
  73. package/build/types/error.js +2 -0
  74. package/build/types/exporter.d.ts +35 -7
  75. package/build/types/index.d.ts +4 -3
  76. package/build/types/job.d.ts +93 -6
  77. package/build/types/pipe.d.ts +81 -3
  78. package/build/types/stream.d.ts +61 -1
  79. package/build/types/stream.js +4 -0
  80. package/index.ts +1 -2
  81. package/modules/enums.ts +16 -8
  82. package/modules/errors.ts +139 -34
  83. package/package.json +7 -2
  84. package/services/activities/activity.ts +63 -14
  85. package/services/activities/await.ts +6 -6
  86. package/services/activities/cycle.ts +7 -6
  87. package/services/activities/hook.ts +12 -5
  88. package/services/activities/interrupt.ts +19 -9
  89. package/services/activities/signal.ts +6 -5
  90. package/services/activities/trigger.ts +43 -6
  91. package/services/activities/worker.ts +7 -7
  92. package/services/compiler/deployer.ts +33 -6
  93. package/services/compiler/validator.ts +7 -3
  94. package/services/durable/client.ts +49 -22
  95. package/services/durable/exporter.ts +162 -349
  96. package/services/durable/handle.ts +66 -53
  97. package/services/durable/index.ts +0 -2
  98. package/services/durable/schemas/factory.ts +2358 -0
  99. package/services/durable/search.ts +8 -8
  100. package/services/durable/worker.ts +128 -29
  101. package/services/durable/workflow.ts +371 -322
  102. package/services/engine/index.ts +8 -3
  103. package/services/exporter/index.ts +10 -12
  104. package/services/hotmesh/index.ts +4 -3
  105. package/services/mapper/index.ts +6 -2
  106. package/services/pipe/functions/array.ts +24 -37
  107. package/services/pipe/functions/conditional.ts +4 -0
  108. package/services/pipe/functions/date.ts +6 -0
  109. package/services/pipe/functions/index.ts +7 -5
  110. package/services/pipe/functions/logical.ts +11 -0
  111. package/services/pipe/functions/object.ts +26 -7
  112. package/services/pipe/index.ts +99 -21
  113. package/services/quorum/index.ts +1 -3
  114. package/services/router/index.ts +14 -3
  115. package/services/serializer/index.ts +12 -5
  116. package/services/store/clients/ioredis.ts +6 -6
  117. package/services/store/clients/redis.ts +7 -7
  118. package/services/store/index.ts +4 -1
  119. package/services/stream/clients/ioredis.ts +8 -8
  120. package/services/stream/clients/redis.ts +1 -1
  121. package/types/activity.ts +87 -15
  122. package/types/durable.ts +263 -75
  123. package/types/error.ts +52 -0
  124. package/types/exporter.ts +43 -9
  125. package/types/index.ts +14 -8
  126. package/types/job.ts +157 -36
  127. package/types/pipe.ts +84 -3
  128. package/types/stream.ts +82 -23
  129. package/build/services/durable/factory.d.ts +0 -17
  130. package/build/services/durable/factory.js +0 -817
  131. package/build/services/durable/meshos.d.ts +0 -127
  132. package/build/services/durable/meshos.js +0 -380
  133. package/services/durable/factory.ts +0 -818
  134. package/services/durable/meshos.ts +0 -441
@@ -136,7 +136,10 @@ export class SerializerService {
136
136
  let shortKey = abbreviationMap.get(key) || key;
137
137
  const shortDimensionalKey = `${shortKey}${dimensionalIndex}`;
138
138
  result[shortDimensionalKey] = source[key];
139
- }
139
+ } else if (!(key in result) && this.isLiteralKeyType(key)) {
140
+ //mark (-) and search (_)
141
+ result[key] = source[key];
142
+ }
140
143
  }
141
144
  };
142
145
  for (let id of ids) {
@@ -148,6 +151,10 @@ export class SerializerService {
148
151
  return result;
149
152
  }
150
153
 
154
+ isLiteralKeyType(key: string): boolean {
155
+ return key.startsWith('-') || key.startsWith('_');
156
+ }
157
+
151
158
  decompress(document: StringStringType, ids: string[]): StringStringType {
152
159
  if (this.symKeys.size === 0) {
153
160
  return document;
@@ -179,7 +186,7 @@ export class SerializerService {
179
186
  stringify(document: Record<string, any>): StringStringType {
180
187
  let result: StringStringType = {};
181
188
  for (let key in document) {
182
- let value = this.toString(document[key]);
189
+ let value = SerializerService.toString(document[key]);
183
190
  if (value) {
184
191
  if (/^:*[a-zA-Z]{2}$/.test(value)) {
185
192
  value = ':' + value;
@@ -203,13 +210,13 @@ export class SerializerService {
203
210
  if (value?.length === 2 && this.symValMaps.has(value)) {
204
211
  value = this.symValMaps.get(value);
205
212
  }
206
- result[key] = this.fromString(value);
213
+ result[key] = SerializerService.fromString(value);
207
214
  }
208
215
  }
209
216
  return result;
210
217
  }
211
218
 
212
- toString(value: any): string|undefined {
219
+ static toString(value: any): string|undefined {
213
220
  switch (typeof value) {
214
221
  case 'string':
215
222
  break;
@@ -232,7 +239,7 @@ export class SerializerService {
232
239
  return value;
233
240
  }
234
241
 
235
- fromString(value: string|undefined): any {
242
+ static fromString(value: string|undefined): any {
236
243
  if (typeof value !== 'string') return undefined;
237
244
  const prefix = value.slice(0, 2);
238
245
  const rest = value.slice(2);
@@ -77,7 +77,7 @@ class IORedisStoreService extends StoreService<RedisClientType, RedisMultiType>
77
77
  try {
78
78
  return await (multi || this.redisClient).xadd(key, id, messageId, messageValue);
79
79
  } catch (error) {
80
- this.logger.error(`Error publishing 'xadd'; key: ${key}`, { error });
80
+ this.logger.error(`Error publishing 'xadd'; key: ${key}`, { ...error });
81
81
  throw error;
82
82
  }
83
83
  }
@@ -93,7 +93,7 @@ class IORedisStoreService extends StoreService<RedisClientType, RedisMultiType>
93
93
  try {
94
94
  return await this.redisClient.xpending(key, group, start, end, count, consumer);
95
95
  } catch (error) {
96
- this.logger.error(`Error in retrieving pending messages for [stream ${key}], [group ${group}]`, { error });
96
+ this.logger.error(`Error in retrieving pending messages for [stream ${key}], [group ${group}]`, { ...error });
97
97
  throw error;
98
98
  }
99
99
  }
@@ -109,7 +109,7 @@ class IORedisStoreService extends StoreService<RedisClientType, RedisMultiType>
109
109
  try {
110
110
  return await this.redisClient.xclaim(key, group, consumer, minIdleTime, id, ...args) as unknown as ReclaimedMessageType;
111
111
  } catch (error) {
112
- this.logger.error(`Error in claiming message with id: ${id} in group: ${group} for key: ${key}`, { error });
112
+ this.logger.error(`Error in claiming message with id: ${id} in group: ${group} for key: ${key}`, { ...error });
113
113
  throw error;
114
114
  }
115
115
  }
@@ -118,7 +118,7 @@ class IORedisStoreService extends StoreService<RedisClientType, RedisMultiType>
118
118
  try {
119
119
  return await (multi || this.redisClient).xack(key, group, id);
120
120
  } catch (error) {
121
- this.logger.error(`Error in acknowledging messages in group: ${group} for key: ${key}`, { error });
121
+ this.logger.error(`Error in acknowledging messages in group: ${group} for key: ${key}`, { ...error });
122
122
  throw error;
123
123
  }
124
124
  }
@@ -127,7 +127,7 @@ class IORedisStoreService extends StoreService<RedisClientType, RedisMultiType>
127
127
  try {
128
128
  return await (multi || this.redisClient).xdel(key, id);
129
129
  } catch (error) {
130
- this.logger.error(`Error in deleting messages with id: ${id} for key: ${key}`, { error });
130
+ this.logger.error(`Error in deleting messages with id: ${id} for key: ${key}`, { ...error });
131
131
  throw error;
132
132
  }
133
133
  }
@@ -136,7 +136,7 @@ class IORedisStoreService extends StoreService<RedisClientType, RedisMultiType>
136
136
  try {
137
137
  return await (multi || this.redisClient).xlen(key);
138
138
  } catch (error) {
139
- this.logger.error(`Error getting stream depth: ${key}`, { error });
139
+ this.logger.error(`Error getting stream depth: ${key}`, { ...error });
140
140
  throw error;
141
141
  }
142
142
  }
@@ -89,7 +89,7 @@ class RedisStoreService extends StoreService<RedisClientType, RedisMultiType> {
89
89
  return (await this.redisClient.sendCommand(['XGROUP', 'CREATE', key, groupName, id, ...args])) === 1;
90
90
  } catch (error) {
91
91
  const streamType = mkStream === 'MKSTREAM' ? 'with MKSTREAM' : 'without MKSTREAM';
92
- this.logger.debug(`x-group-error ${streamType} for key: ${key} and group: ${groupName}`, { error });
92
+ this.logger.debug(`x-group-error ${streamType} for key: ${key} and group: ${groupName}`, { ...error });
93
93
  throw error;
94
94
  }
95
95
  }
@@ -102,7 +102,7 @@ class RedisStoreService extends StoreService<RedisClientType, RedisMultiType> {
102
102
  try {
103
103
  return await (multi || this.redisClient).XADD(key, id, { [args[0]]: args[1] });
104
104
  } catch (error) {
105
- this.logger.error(`Error publishing 'xadd'; key: ${key}`, { error });
105
+ this.logger.error(`Error publishing 'xadd'; key: ${key}`, { ...error });
106
106
  throw error;
107
107
  }
108
108
  }
@@ -123,7 +123,7 @@ class RedisStoreService extends StoreService<RedisClientType, RedisMultiType> {
123
123
  if (consumer) args.push(consumer);
124
124
  return await this.redisClient.sendCommand(['XPENDING', ...args]);
125
125
  } catch (error) {
126
- this.logger.error(`Error in retrieving pending messages for group: ${group} in key: ${key}`, { error });
126
+ this.logger.error(`Error in retrieving pending messages for group: ${group} in key: ${key}`, { ...error });
127
127
  throw error;
128
128
  }
129
129
  }
@@ -139,7 +139,7 @@ class RedisStoreService extends StoreService<RedisClientType, RedisMultiType> {
139
139
  try {
140
140
  return await this.redisClient.sendCommand(['XCLAIM', key, group, consumer, minIdleTime.toString(), id, ...args]) as unknown as ReclaimedMessageType;
141
141
  } catch (error) {
142
- this.logger.error(`Error in claiming message with id: ${id} in group: ${group} for key: ${key}`, { error });
142
+ this.logger.error(`Error in claiming message with id: ${id} in group: ${group} for key: ${key}`, { ...error });
143
143
  throw error;
144
144
  }
145
145
  }
@@ -153,7 +153,7 @@ class RedisStoreService extends StoreService<RedisClientType, RedisMultiType> {
153
153
  return await this.redisClient[this.commands.xack](key, group, id);
154
154
  }
155
155
  } catch (error) {
156
- this.logger.error(`Error in acknowledging messages in group: ${group} for key: ${key}`, { error });
156
+ this.logger.error(`Error in acknowledging messages in group: ${group} for key: ${key}`, { ...error });
157
157
  throw error;
158
158
  }
159
159
  }
@@ -167,7 +167,7 @@ class RedisStoreService extends StoreService<RedisClientType, RedisMultiType> {
167
167
  return await this.redisClient[this.commands.xdel](key, id);
168
168
  }
169
169
  } catch (error) {
170
- this.logger.error(`Error in deleting messages with ids: ${id} for key: ${key}`, { error });
170
+ this.logger.error(`Error in deleting messages with ids: ${id} for key: ${key}`, { ...error });
171
171
  throw error;
172
172
  }
173
173
  }
@@ -181,7 +181,7 @@ class RedisStoreService extends StoreService<RedisClientType, RedisMultiType> {
181
181
  return await this.redisClient.XLEN(key);
182
182
  }
183
183
  } catch (error) {
184
- this.logger.error(`Error getting stream depth: ${key}`, { error });
184
+ this.logger.error(`Error getting stream depth: ${key}`, { ...error });
185
185
  throw error;
186
186
  }
187
187
  }
@@ -977,6 +977,8 @@ abstract class StoreService<T, U extends AbstractRedisClient> {
977
977
  * This method is called by the engine and not by an activity and is
978
978
  * followed by a call to execute job completion/cleanup tasks
979
979
  * associated with a job completion event.
980
+ *
981
+ * Todo: move most of this logic to the engine (too much logic for the store)
980
982
  */
981
983
  async interrupt(topic: string, jobId: string, options: JobInterruptOptions = {}): Promise<void> {
982
984
  try {
@@ -1004,8 +1006,9 @@ abstract class StoreService<T, U extends AbstractRedisClient> {
1004
1006
 
1005
1007
  //persists the standard 410 error (job is `gone`)
1006
1008
  const err = JSON.stringify({
1007
- code: HMSH_CODE_INTERRUPT,
1009
+ code: options.code ?? HMSH_CODE_INTERRUPT,
1008
1010
  message: options.reason ?? `job [${jobId}] interrupted`,
1011
+ stack: options.stack ?? '',
1009
1012
  job_id: jobId
1010
1013
  });
1011
1014
 
@@ -51,7 +51,7 @@ class IORedisStreamService extends StreamService<RedisClientType, RedisMultiType
51
51
  try {
52
52
  return await (multi || this.redisClient).xadd(key, id, messageId, messageValue);
53
53
  } catch (error) {
54
- this.logger.error(`Error publishing 'xadd'; key: ${key}`, { error });
54
+ this.logger.error(`Error publishing 'xadd'; key: ${key}`, { ...error });
55
55
  throw error;
56
56
  }
57
57
  }
@@ -80,7 +80,7 @@ class IORedisStreamService extends StreamService<RedisClientType, RedisMultiType
80
80
  id
81
81
  );
82
82
  } catch (error) {
83
- this.logger.error(`Error reading stream data [Stream ${streamName}] [Group ${groupName}]`, { error });
83
+ this.logger.error(`Error reading stream data [Stream ${streamName}] [Group ${groupName}]`, { ...error });
84
84
  throw error;
85
85
  }
86
86
  }
@@ -102,10 +102,10 @@ class IORedisStreamService extends StreamService<RedisClientType, RedisMultiType
102
102
  try {
103
103
  return await this.redisClient.call('XPENDING', ...args) as [string, string, number, number][];
104
104
  } catch (error) {
105
- this.logger.error('err, args', { error }, args);
105
+ this.logger.error('err, args', { ...error }, args);
106
106
  }
107
107
  } catch (error) {
108
- this.logger.error(`Error in retrieving pending messages for [stream ${key}], [group ${group}]`, { error });
108
+ this.logger.error(`Error in retrieving pending messages for [stream ${key}], [group ${group}]`, { ...error });
109
109
  throw error;
110
110
  }
111
111
  }
@@ -121,7 +121,7 @@ class IORedisStreamService extends StreamService<RedisClientType, RedisMultiType
121
121
  try {
122
122
  return await this.redisClient.xclaim(key, group, consumer, minIdleTime, id, ...args) as unknown as ReclaimedMessageType;
123
123
  } catch (error) {
124
- this.logger.error(`Error in claiming message with id: ${id} in group: ${group} for key: ${key}`, { error });
124
+ this.logger.error(`Error in claiming message with id: ${id} in group: ${group} for key: ${key}`, { ...error });
125
125
  throw error;
126
126
  }
127
127
  }
@@ -130,7 +130,7 @@ class IORedisStreamService extends StreamService<RedisClientType, RedisMultiType
130
130
  try {
131
131
  return await (multi || this.redisClient).xack(key, group, id);
132
132
  } catch (error) {
133
- this.logger.error(`Error in acknowledging messages in group: ${group} for key: ${key}`, { error });
133
+ this.logger.error(`Error in acknowledging messages in group: ${group} for key: ${key}`, { ...error });
134
134
  throw error;
135
135
  }
136
136
  }
@@ -139,7 +139,7 @@ class IORedisStreamService extends StreamService<RedisClientType, RedisMultiType
139
139
  try {
140
140
  return await (multi || this.redisClient).xdel(key, id);
141
141
  } catch (error) {
142
- this.logger.error(`Error in deleting messages with id: ${id} for key: ${key}`, { error });
142
+ this.logger.error(`Error in deleting messages with id: ${id} for key: ${key}`, { ...error });
143
143
  throw error;
144
144
  }
145
145
  }
@@ -148,7 +148,7 @@ class IORedisStreamService extends StreamService<RedisClientType, RedisMultiType
148
148
  try {
149
149
  return await (multi || this.redisClient).xlen(key);
150
150
  } catch (error) {
151
- this.logger.error(`Error getting stream depth: ${key}`, { error });
151
+ this.logger.error(`Error getting stream depth: ${key}`, { ...error });
152
152
  throw error;
153
153
  }
154
154
  }
@@ -149,7 +149,7 @@ class RedisStreamService extends StreamService<RedisClientType, RedisMultiType>
149
149
  return await this.redisClient.XLEN(key);
150
150
  }
151
151
  } catch (error) {
152
- this.logger.error(`Error getting stream depth: ${key}`, { error });
152
+ this.logger.error(`Error getting stream depth: ${key}`, { ...error });
153
153
  throw error;
154
154
  }
155
155
  }
package/types/activity.ts CHANGED
@@ -110,32 +110,104 @@ interface SignalActivity extends BaseActivity {
110
110
 
111
111
  interface InterruptActivity extends BaseActivity {
112
112
  type: 'interrupt';
113
- /** Optional Reason; will be used as the error `message` when thrown; NOTE: 410 is the error `code` */
113
+
114
+ /**
115
+ * Optional Reason; will be used as the error `message` when thrown
116
+ * @default 'Job Interrupted'
117
+ */
114
118
  reason?: string;
115
- /** default is `true` (throw JobInterrupted error upon interrupting) */
119
+
120
+ /**
121
+ * throw JobInterrupted error upon interrupting
122
+ * @default true
123
+ */
116
124
  throw?: boolean;
117
- /** TODO: // default is `false` (do not interrupt child jobs) */
125
+
126
+ /**
127
+ * Interrupt child/descendant jobs
128
+ * @default false
129
+ */
118
130
  descend?: boolean;
119
- /** target job id (if not present the current job will be targeted) */
131
+
132
+ /**
133
+ * Target job id (if not present the current job will be targeted)
134
+ */
120
135
  target?: string;
121
- /** topic to publish the interrupt message (if not present the current job topic will be used) */
136
+
137
+ /**
138
+ * Optional topic to publish the interrupt message (if not present the current job topic will be used
139
+ */
122
140
  topic?: string;
141
+
142
+ /**
143
+ * Optional Error Code; will be used as the error `code` when thrown
144
+ * @default 410
145
+ */
146
+ code?: number;
147
+
148
+ /**
149
+ * Optional stack trace
150
+ */
151
+ stack?: string;
123
152
  }
124
153
 
125
154
  type ActivityType = BaseActivity | TriggerActivity | AwaitActivity | WorkerActivity | InterruptActivity | HookActivity | SignalActivity | CycleActivity;
126
155
 
127
156
  type ActivityData = Record<string, any>;
157
+
158
+ /**
159
+ * Type definition for activity metadata.
160
+ */
128
161
  type ActivityMetadata = {
129
- aid: string; //activity_id
130
- atp: string; //activity_type
131
- stp: string; //activity_subtype
132
- ac: string; //GMT created //activity_created
133
- au: string; //GMT updated //activity_updated
134
- err?: string; //stringified error json: {message: string, code: number, error?}
135
- l1s?: string; //open telemetry span context (leg 1)
136
- l2s?: string; //open telemetry span context (leg 2)
137
- dad?: string; //dimensional address
138
- as?: string; //activity status (e.g., 889000001000001)
162
+ /**
163
+ * Unique identifier for the activity.
164
+ */
165
+ aid: string;
166
+
167
+ /**
168
+ * Type of the activity.
169
+ */
170
+ atp: string;
171
+
172
+ /**
173
+ * Subtype of the activity.
174
+ */
175
+ stp: string;
176
+
177
+ /**
178
+ * Timestamp when the activity was created, in GMT.
179
+ */
180
+ ac: string;
181
+
182
+ /**
183
+ * Timestamp when the activity was last updated, in GMT.
184
+ */
185
+ au: string;
186
+
187
+ /**
188
+ * Optional stringified JSON containing error details such as message, code, and an optional error object.
189
+ */
190
+ err?: string;
191
+
192
+ /**
193
+ * OpenTelemetry span context for the first leg of the activity.
194
+ */
195
+ l1s?: string;
196
+
197
+ /**
198
+ * OpenTelemetry span context for the second leg of the activity.
199
+ */
200
+ l2s?: string;
201
+
202
+ /**
203
+ * Dimensional address, used for additional metadata.
204
+ */
205
+ dad?: string;
206
+
207
+ /**
208
+ * Status of the activity, could be codes representing different states.
209
+ */
210
+ as?: string;
139
211
  };
140
212
 
141
213
  type ActivityContext = {