@vampgg/utils 1.0.0-beta.1 → 1.0.0-beta.3

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.
@@ -1,8 +1,7 @@
1
1
  import { Message } from "./bebop.mjs";
2
- import { createEventIterator } from "./create-event-iterator.mjs";
3
- import { Deadline, Metadata, MethodType, TempoError, TempoStatusCode, TempoUtil, stringifyCredential } from "@tempojs/common";
4
- import { EventEmitter } from "tseep";
5
- import { BaseRouter, ServerContext, TempoRouterConfiguration } from "@tempojs/server";
2
+ import { RouterCore } from "./router-core.mjs";
3
+ import { Metadata, TempoError, TempoStatusCode } from "@tempojs/common";
4
+ import { BaseRouter, TempoRouterConfiguration } from "@tempojs/server";
6
5
  //#region src/ws-router.ts
7
6
  /**
8
7
  * Client-metadata keys under which {@link TempoWsRouter.process} exposes the
@@ -30,66 +29,23 @@ function encodeServerStreamFrame(opts) {
30
29
  })));
31
30
  }
32
31
  var TempoWsRouter = class extends BaseRouter {
33
- events = new EventEmitter();
34
- clientStreams = /* @__PURE__ */ new Map();
32
+ core;
35
33
  serverStreams = /* @__PURE__ */ new Map();
36
34
  _streamEncodeCache = /* @__PURE__ */ new WeakMap();
37
35
  constructor(logger, registry, configuration = new TempoRouterConfiguration(), authInterceptor) {
38
36
  super(logger, registry, configuration, authInterceptor);
39
- }
40
- async setAuthContext(request, context) {
41
- const authHeader = request.authorization;
42
- if (authHeader !== void 0 && this.authInterceptor !== void 0) {
43
- const authContext = await this.authInterceptor.intercept(context, authHeader);
44
- if (authContext !== void 0) context.authContext = authContext;
45
- }
46
- }
47
- async invokeUnaryMethod(request, context, method, contentType) {
48
- await this.setAuthContext(request, context);
49
- if (this.hooks !== void 0) await this.hooks.executeRequestHooks(context);
50
- const requestData = request.data;
51
- const record = this.deserializeRequest(requestData, method, contentType);
52
- if (this.hooks !== void 0) await this.hooks.executeDecodeHooks(context, record);
53
- return await method.invoke(record, context);
54
- }
55
- async invokeClientStreamMethod(request, context, method, contentType) {
56
- await this.setAuthContext(request, context);
57
- if (this.hooks !== void 0) await this.hooks.executeRequestHooks(context);
58
- const messageId = request.messageId;
59
- const stream = this.clientStreams.get(messageId);
60
- if (stream) {
61
- this.events.emit(messageId, request);
62
- return await stream;
63
- }
64
- const generator = () => {
65
- return createEventIterator(({ emit, cancel }) => {
66
- const eventHandler = async (message) => {
67
- if (this.hooks !== void 0) await this.hooks.executeRequestHooks(context);
68
- if (message.status === TempoStatusCode.CANCELLED) {
69
- cancel();
70
- return;
71
- }
72
- const requestData = message.data;
73
- const record = this.deserializeRequest(requestData, method, contentType);
74
- if (this.hooks !== void 0) await this.hooks.executeDecodeHooks(context, record);
75
- emit(record);
76
- };
77
- this.events.on(messageId, eventHandler);
78
- return () => {
79
- this.events.off(messageId, eventHandler);
80
- this.clientStreams.delete(messageId);
81
- };
82
- });
83
- };
84
- const invocation = method.invoke(generator, context);
85
- this.clientStreams.set(messageId, invocation);
86
- this.events.emit(messageId, request);
87
- return await invocation.finally(() => {
88
- this.clientStreams.delete(messageId);
37
+ this.core = new RouterCore({
38
+ logger,
39
+ maxRetryAttempts: this.maxRetryAttempts,
40
+ transmitInternalErrors: this.transmitInternalErrors,
41
+ authInterceptor,
42
+ getMethod: (methodId) => this.registry.getMethod(methodId),
43
+ getHooks: () => this.hooks,
44
+ deserializeRequest: (data, method, contentType) => this.deserializeRequest(data, method, contentType),
45
+ serializeResponse: (record, method, contentType) => this.serializeResponse(record, method, contentType)
89
46
  });
90
47
  }
91
- async invokeServerStreamMethod(request, context, method, contentType) {
92
- await this.setAuthContext(request, context);
48
+ async invokeServerStreamMethod(request, context, method) {
93
49
  const messageId = request.messageId;
94
50
  if (request.status === TempoStatusCode.CANCELLED) {
95
51
  const existing = this.serverStreams.get(messageId);
@@ -101,174 +57,60 @@ var TempoWsRouter = class extends BaseRouter {
101
57
  }
102
58
  return (async function* () {})();
103
59
  }
104
- if (this.hooks !== void 0) await this.hooks.executeRequestHooks(context);
105
- const requestData = request.data;
106
- const record = this.deserializeRequest(requestData, method, contentType);
107
- if (!TempoUtil.isAsyncGeneratorFunction(method.invoke.bind(method))) throw new TempoError(TempoStatusCode.INTERNAL, "service method incorrect: method must be async generator");
108
- if (this.hooks !== void 0) await this.hooks.executeDecodeHooks(context, record);
109
- const invocation = method.invoke(record, context);
60
+ const invocation = await this.core.invokeServerStreamMethod(request, context, method, "bebop");
110
61
  this.serverStreams.set(messageId, invocation);
111
62
  return invocation;
112
63
  }
113
- async invokeDuplexStreamMethod(request, context, method, contentType) {
114
- await this.setAuthContext(request, context);
115
- if (this.hooks !== void 0) await this.hooks.executeRequestHooks(context);
116
- const messageId = request.messageId;
117
- const stream = this.clientStreams.get(messageId);
118
- if (stream) {
119
- this.events.emit(messageId, request);
120
- return stream;
121
- }
122
- if (!TempoUtil.isAsyncGeneratorFunction(method.invoke.bind(method))) throw new TempoError(TempoStatusCode.INTERNAL, "service method incorrect: method must be async generator");
123
- const generator = () => {
124
- return createEventIterator(({ emit, cancel }) => {
125
- const eventHandler = async (message) => {
126
- if (this.hooks !== void 0) await this.hooks.executeRequestHooks(context);
127
- if (message.status === TempoStatusCode.CANCELLED) {
128
- cancel();
129
- return;
130
- }
131
- const requestData = message.data;
132
- const record = this.deserializeRequest(requestData, method, contentType);
133
- if (this.hooks !== void 0) await this.hooks.executeDecodeHooks(context, record);
134
- emit(record);
135
- };
136
- this.events.on(messageId, eventHandler);
137
- this.events.emit(messageId, request);
138
- return () => {
139
- this.events.off(messageId, eventHandler);
140
- this.clientStreams.delete(messageId);
141
- };
142
- });
143
- };
144
- const invocation = method.invoke(generator, context);
145
- this.clientStreams.set(messageId, invocation);
146
- return invocation;
147
- }
148
64
  /**
149
65
  * Tear down all open streams for this connection (driven by the DO socket
150
66
  * close/error lifecycle). Emits a synthetic CANCELLED to each in-flight
151
67
  * client/duplex stream so its generator ends, then clears all listeners.
152
68
  */
153
69
  async closeConnection() {
154
- for (const id of [...this.clientStreams.keys()]) {
155
- this.events.emit(id, Message({
156
- messageId: id,
157
- status: TempoStatusCode.CANCELLED,
158
- data: new Uint8Array()
159
- }));
160
- this.clientStreams.delete(id);
161
- }
70
+ this.core.cancelClientStreams();
162
71
  for (const [id, gen] of [...this.serverStreams]) {
163
72
  this.serverStreams.delete(id);
164
73
  try {
165
74
  await gen.return(void 0);
166
75
  } catch {}
167
76
  }
168
- this.events.removeAllListeners();
77
+ this.core.removeAllListeners();
169
78
  }
170
79
  async process(req, response, env) {
171
80
  if (req.byteLength > this.maxReceiveMessageSize) {
172
81
  this.logger.error(`inbound frame ${req.byteLength}B exceeds maxReceiveMessageSize ${this.maxReceiveMessageSize}B; dropping`);
173
82
  return;
174
83
  }
175
- let request = Message.decode(new Uint8Array(req));
84
+ const request = Message.decode(new Uint8Array(req));
176
85
  const [, ws] = env;
177
- try {
178
- const methodId = request.methodId;
179
- const method = this.registry.getMethod(methodId);
180
- if (!method) throw new TempoError(TempoStatusCode.NOT_FOUND, `no service is registered which contains a method of '${methodId}'`);
181
- const previousAttempts = request.previousAttempts;
182
- if (previousAttempts !== void 0) {
183
- if (previousAttempts > this.maxRetryAttempts) throw new TempoError(TempoStatusCode.RESOURCE_EXHAUSTED, "max retry attempts exceeded");
184
- }
185
- let deadline;
186
- const deadlineHeader = request.deadline;
187
- if (deadlineHeader !== void 0) deadline = Deadline.fromUnixTimestamp(deadlineHeader.valueOf());
188
- if (deadline !== void 0 && deadline.isExpired()) throw new TempoError(TempoStatusCode.DEADLINE_EXCEEDED, "incoming request has already exceeded its deadline");
189
- const outgoingMetadata = new Metadata();
190
- const incomingMetadata = new Metadata();
191
- if (request.messageId !== void 0) incomingMetadata.set(STREAM_MESSAGE_ID_KEY, request.messageId);
192
- if (request.methodId !== void 0) incomingMetadata.set(STREAM_METHOD_ID_KEY, String(request.methodId));
193
- const incomingContext = {
194
- headers: new Headers(),
195
- metadata: incomingMetadata
196
- };
197
- if (deadline !== void 0) incomingContext.deadline = deadline;
198
- const context = new ServerContext(incomingContext, { metadata: outgoingMetadata }, env);
199
- const handleRequest = async () => {
200
- let recordGenerator = void 0;
201
- let record;
202
- switch (method.type) {
203
- case MethodType.Unary:
204
- record = await this.invokeUnaryMethod(request, context, method, "bebop");
205
- break;
206
- case MethodType.ClientStream:
207
- record = await this.invokeClientStreamMethod(request, context, method, "bebop");
208
- break;
209
- case MethodType.ServerStream:
210
- recordGenerator = await this.invokeServerStreamMethod(request, context, method, "bebop");
211
- break;
212
- case MethodType.DuplexStream:
213
- recordGenerator = await this.invokeDuplexStreamMethod(request, context, method, "bebop");
214
- break;
215
- default: throw new TempoError(TempoStatusCode.INTERNAL, "service method incorrect: unknown method type");
216
- }
217
- const outgoingCredential = context.outgoingCredential;
218
- if (outgoingCredential) response.credential = stringifyCredential(outgoingCredential);
219
- response.methodId = request.methodId;
220
- response.messageId = request.messageId;
221
- response.status = TempoStatusCode.OK;
222
- response.timestamp = /* @__PURE__ */ new Date();
223
- if (this.hooks !== void 0) await this.hooks.executeResponseHooks(context);
224
- outgoingMetadata.freeze();
225
- if (outgoingMetadata.size() > 0) response.customMetadata = outgoingMetadata.data;
226
- if (recordGenerator !== void 0) {
227
- const writeFrames = async () => {
228
- for await (const value of recordGenerator) {
229
- let payload = this._streamEncodeCache.get(value);
230
- if (payload === void 0) {
231
- payload = new Uint8Array(this.serializeResponse(value, method, "bebop"));
232
- this._streamEncodeCache.set(value, payload);
233
- }
234
- response.data = payload;
235
- ws.send(new Uint8Array(Message.encode(response)));
236
- }
237
- this.serverStreams.delete(request.messageId);
238
- response.data = new Uint8Array();
239
- response.status = TempoStatusCode.CANCELLED;
240
- ws.send(new Uint8Array(Message.encode(response)));
241
- };
242
- if (deadline) await deadline.executeWithinDeadline(writeFrames);
243
- else await writeFrames();
244
- } else {
245
- if (record === void 0) throw new TempoError(TempoStatusCode.INTERNAL, "service method did not return a record");
246
- const responseData = this.serializeResponse(record, method, "bebop");
247
- response.data = new Uint8Array(responseData);
248
- ws.send(new Uint8Array(Message.encode(response)));
249
- }
250
- };
251
- if (deadline !== void 0) await deadline.executeWithinDeadline(handleRequest);
252
- else await handleRequest();
253
- } catch (e) {
254
- let status = TempoStatusCode.UNKNOWN;
255
- let message = "unknown error";
256
- if (e instanceof TempoError) {
257
- status = e.status;
258
- message = e.message;
259
- if (e.status === TempoStatusCode.INTERNAL && this.transmitInternalErrors !== true) message = "internal error";
260
- if (e.status === TempoStatusCode.INTERNAL) this.logger.critical(e.message, void 0, e);
261
- else this.logger.error(message, void 0, e);
262
- } else if (e instanceof Error) {
263
- message = e.message;
264
- this.logger.error(message, void 0, e);
265
- }
266
- if (e instanceof Error && this.hooks !== void 0) await this.hooks.executeErrorHooks(void 0, e);
267
- this.clientStreams.delete(request.messageId);
268
- response.status = status;
269
- response.msg = message;
270
- ws.send(new Uint8Array(Message.encode(response)));
271
- }
86
+ const send = (message) => {
87
+ ws.send(new Uint8Array(Message.encode(message)));
88
+ };
89
+ await this.core.processRequest(request, response, env, {
90
+ send,
91
+ buildIncomingMetadata: (message) => {
92
+ const incomingMetadata = new Metadata();
93
+ if (message.messageId !== void 0) incomingMetadata.set(STREAM_MESSAGE_ID_KEY, message.messageId);
94
+ if (message.methodId !== void 0) incomingMetadata.set(STREAM_METHOD_ID_KEY, String(message.methodId));
95
+ return incomingMetadata;
96
+ },
97
+ invokeServerStream: (message, context, method) => this.invokeServerStreamMethod(message, context, method),
98
+ writeStreamFrames: (generator, resp, method) => this.core.writeStreamFrames({
99
+ generator,
100
+ response: resp,
101
+ method,
102
+ send,
103
+ serializePayload: (value) => {
104
+ let payload = this._streamEncodeCache.get(value);
105
+ if (payload === void 0) {
106
+ payload = new Uint8Array(this.serializeResponse(value, method, "bebop"));
107
+ this._streamEncodeCache.set(value, payload);
108
+ }
109
+ return payload;
110
+ },
111
+ onEnd: () => this.serverStreams.delete(request.messageId)
112
+ })
113
+ });
272
114
  }
273
115
  handle(_request, _env) {
274
116
  throw new TempoError(TempoStatusCode.UNIMPLEMENTED, "Method not implemented.");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vampgg/utils",
3
- "version": "1.0.0-beta.1",
3
+ "version": "1.0.0-beta.3",
4
4
  "description": "Tempo RPC, Bebop serialization, transports, and async primitives for @vampgg.",
5
5
  "homepage": "https://github.com/sammccord/vamp/tree/main/packages/utils#readme",
6
6
  "bugs": {
@@ -21,16 +21,14 @@
21
21
  "exports": {
22
22
  "./async-queue": "./dist/async-queue.mjs",
23
23
  "./bebop": "./dist/bebop.mjs",
24
+ "./channel-core": "./dist/channel-core.mjs",
24
25
  "./context-logger": "./dist/context-logger.mjs",
25
26
  "./create-duplex-iterator": "./dist/create-duplex-iterator.mjs",
26
27
  "./create-event-iterator": "./dist/create-event-iterator.mjs",
27
- "./debug-logger": "./dist/debug-logger.mjs",
28
- "./error": "./dist/error.mjs",
29
28
  "./extension-channel": "./dist/extension-channel.mjs",
30
29
  "./extension-router": "./dist/extension-router.mjs",
31
- "./memory-storage": "./dist/memory-storage.mjs",
32
30
  "./pino-logger": "./dist/pino-logger.mjs",
33
- "./sync-storage": "./dist/sync-storage.mjs",
31
+ "./router-core": "./dist/router-core.mjs",
34
32
  "./worker-channel": "./dist/worker-channel.mjs",
35
33
  "./worker-router": "./dist/worker-router.mjs",
36
34
  "./ws-channel": "./dist/ws-channel.mjs",
@@ -45,8 +43,6 @@
45
43
  "@tempojs/common": "^0.0.12",
46
44
  "@tempojs/server": "^0.0.12",
47
45
  "bebop": "3.2.3",
48
- "debug": "^4.4.3",
49
- "lodash-es": "^4.17.23",
50
46
  "pino": "^10.3.1",
51
47
  "tseep": "^1.3.1",
52
48
  "webextension-polyfill": "^0.12.0",
@@ -54,8 +50,6 @@
54
50
  },
55
51
  "devDependencies": {
56
52
  "@types/bun": "^1.3.14",
57
- "@types/debug": "^4.1.12",
58
- "@types/lodash-es": "^4.17.12",
59
53
  "@types/node": "^25.5.0",
60
54
  "@types/webextension-polyfill": "^0.12.5",
61
55
  "@typescript/native-preview": "7.0.0-dev.20260315.1",
@@ -1,43 +0,0 @@
1
- import { ContextLogger } from "./context-logger.mjs";
2
- import { ConsoleLogger, TempoLogLevel, TempoLogger } from "@tempojs/common";
3
-
4
- //#region src/debug-logger.d.ts
5
- declare class DebugLogger extends ContextLogger implements ConsoleLogger {
6
- bindings: Record<string, unknown>;
7
- private debuggers;
8
- sourceName: string;
9
- logLevel: TempoLogLevel;
10
- protected readonly children: Set<TempoLogger>;
11
- constructor(sourceName: string, logLevel?: TempoLogLevel, parent?: TempoLogger, bindings?: Record<string, unknown>);
12
- correlate<TLogger extends TempoLogger>(sourceName: string, correlationId: string, asOrphan?: boolean, bindings?: Record<string, unknown>): TLogger;
13
- clone<TLogger extends TempoLogger>(sourceName: string, asOrphan?: boolean, bindings?: Record<string, unknown>): TLogger;
14
- write(level: TempoLogLevel, message: string, data?: Record<string, unknown>, error?: Error): void;
15
- /**
16
- * @inheritDoc
17
- */
18
- trace(message: string, data?: Record<string, unknown>, error?: Error): void;
19
- /**
20
- * @inheritDoc
21
- */
22
- debug(message: string, data?: Record<string, unknown>, error?: Error): void;
23
- /**
24
- * @inheritDoc
25
- */
26
- info(message: string, data?: Record<string, unknown>, error?: Error): void;
27
- /**
28
- * @inheritDoc
29
- */
30
- warn(message: string, data?: Record<string, unknown>, error?: Error): void;
31
- /**
32
- * @inheritDoc
33
- */
34
- error(message: string, data?: Record<string, unknown>, error?: Error): void;
35
- /**
36
- * @inheritDoc
37
- */
38
- critical(message: string, data?: Record<string, unknown>, error?: Error): void;
39
- setLogLevel(level: TempoLogLevel): void;
40
- formatErrorMessage(error: Error, indentLevel?: number): string;
41
- }
42
- //#endregion
43
- export { DebugLogger };
@@ -1,122 +0,0 @@
1
- import { ContextLogger } from "./context-logger.mjs";
2
- import { TempoLogLevel } from "@tempojs/common";
3
- import debug from "debug";
4
- //#region src/debug-logger.ts
5
- var DebugLogger = class DebugLogger extends ContextLogger {
6
- bindings = {};
7
- debuggers;
8
- sourceName;
9
- logLevel;
10
- children = /* @__PURE__ */ new Set();
11
- constructor(sourceName, logLevel = TempoLogLevel.Info, parent, bindings = {}) {
12
- super(sourceName, logLevel, parent, bindings);
13
- this.sourceName = sourceName;
14
- this.logLevel = logLevel;
15
- this.debuggers = {
16
- trace: debug(`${sourceName}:trace`),
17
- debug: debug(`${sourceName}:debug`),
18
- info: debug(`${sourceName}:info`),
19
- warn: debug(`${sourceName}:warn`),
20
- error: debug(`${sourceName}:error`),
21
- critical: debug(`${sourceName}:critical`)
22
- };
23
- }
24
- correlate(sourceName, correlationId, asOrphan, bindings) {
25
- return this.clone(sourceName, asOrphan, {
26
- ...bindings,
27
- correlationId
28
- });
29
- }
30
- clone(sourceName, asOrphan, bindings) {
31
- const logger = new DebugLogger(asOrphan ? sourceName : `${this.sourceName}:${sourceName}`, this.logLevel, asOrphan !== true ? this : void 0, {
32
- ...this.bindings,
33
- ...bindings
34
- });
35
- if (asOrphan !== true) this.children.add(logger);
36
- return logger;
37
- }
38
- write(level, message, data = {}, error) {
39
- if (level < this.logLevel) return;
40
- let logError = "";
41
- if (error) {
42
- logError = `\n${this.formatErrorMessage(error)}`;
43
- data.error = logError;
44
- }
45
- const fullMessage = `${message}${` ${JSON.stringify({
46
- ...this.bindings,
47
- ...data
48
- }, null, 2)}`}`;
49
- switch (level) {
50
- case TempoLogLevel.Trace:
51
- this.debuggers.trace(fullMessage);
52
- break;
53
- case TempoLogLevel.Debug:
54
- this.debuggers.debug(fullMessage);
55
- break;
56
- case TempoLogLevel.Info:
57
- this.debuggers.info(fullMessage);
58
- break;
59
- case TempoLogLevel.Warn:
60
- this.debuggers.warn(fullMessage);
61
- break;
62
- case TempoLogLevel.Error:
63
- this.debuggers.error(fullMessage);
64
- break;
65
- case TempoLogLevel.Critical:
66
- this.debuggers.critical(fullMessage);
67
- break;
68
- }
69
- }
70
- /**
71
- * @inheritDoc
72
- */
73
- trace(message, data, error) {
74
- this.write(TempoLogLevel.Trace, message, data, error);
75
- }
76
- /**
77
- * @inheritDoc
78
- */
79
- debug(message, data, error) {
80
- this.write(TempoLogLevel.Debug, message, data, error);
81
- }
82
- /**
83
- * @inheritDoc
84
- */
85
- info(message, data, error) {
86
- this.write(TempoLogLevel.Info, message, data, error);
87
- }
88
- /**
89
- * @inheritDoc
90
- */
91
- warn(message, data, error) {
92
- this.write(TempoLogLevel.Warn, message, data, error);
93
- }
94
- /**
95
- * @inheritDoc
96
- */
97
- error(message, data, error) {
98
- this.write(TempoLogLevel.Error, message, data, error);
99
- }
100
- /**
101
- * @inheritDoc
102
- */
103
- critical(message, data, error) {
104
- this.write(TempoLogLevel.Critical, message, data, error);
105
- }
106
- setLogLevel(level) {
107
- this.logLevel = level;
108
- }
109
- formatErrorMessage(error, indentLevel = 0) {
110
- const indent = " ".repeat(indentLevel);
111
- const message = error.message || "Unknown error";
112
- const indentedStack = (error.stack || "Stack unavailable").split("\n").map((line) => `${indent}${line}`).join("\n");
113
- let cause = "";
114
- if ("cause" in error) cause = error?.cause instanceof Error ? this.formatErrorMessage(error.cause, indentLevel + 1) : "";
115
- return `
116
- ${indent}Error message: ${message}
117
- ${indentedStack}
118
- ${indent}${cause ? `Cause: ${cause}` : ""}`.trimEnd();
119
- }
120
- };
121
- //#endregion
122
- export { DebugLogger };
package/dist/error.d.mts DELETED
@@ -1,27 +0,0 @@
1
- import { Error } from "./bebop.mjs";
2
- import { TempoError } from "@tempojs/common";
3
-
4
- //#region src/error.d.ts
5
- declare class SystemError<Tag extends string> extends TempoError {
6
- readonly _tag: Tag;
7
- readonly cause: Error;
8
- constructor(tag: Tag, error?: Partial<Omit<Error, "tag">>);
9
- static generic(err: unknown, tag?: ErrorTags, opts?: Partial<Omit<Error, "tag">>): SystemError<ErrorTags>;
10
- }
11
- declare enum ErrorTags {
12
- PgOutage = "PgOutage",
13
- RedisOutage = "RedisOutage",
14
- Unknown = "Unknown",
15
- NeedPermissions = "NeedPermissions",
16
- Validation = "Validation",
17
- Authorization = "Authorization",
18
- GameStateGeneration = "GameStateGeneration",
19
- InvalidPrompt = "InvalidPrompt",
20
- UnknownAIProvider = "UnknownAIProvider",
21
- FailedToStart = "FailedToStart",
22
- Unimplemented = "Unimplemented",
23
- IncompatibleVersion = "IncompatibleVersion",
24
- PingUnacceptable = "PingUnacceptable"
25
- }
26
- //#endregion
27
- export { ErrorTags, SystemError };
package/dist/error.mjs DELETED
@@ -1,49 +0,0 @@
1
- import { TempoError, TempoStatusCode } from "@tempojs/common";
2
- import defaults from "lodash-es/defaults";
3
- //#region src/error.ts
4
- var SystemError = class SystemError extends TempoError {
5
- _tag;
6
- cause;
7
- constructor(tag, error) {
8
- const err = defaults({ ...error }, {
9
- code: TempoStatusCode.UNKNOWN,
10
- stack: "",
11
- msg: "Unknown error occured",
12
- details: /* @__PURE__ */ new Map()
13
- });
14
- const cause = {
15
- ...err,
16
- tag
17
- };
18
- super(err.code, err.msg, cause);
19
- this._tag = tag;
20
- this.cause = cause;
21
- }
22
- static generic(err, tag, opts) {
23
- return new SystemError(tag || "Unknown", {
24
- msg: err instanceof Error ? err.message : "Unknown error occured",
25
- code: err instanceof TempoError ? err.status : TempoStatusCode.INTERNAL,
26
- details: err instanceof Error ? err.cause instanceof Map ? err.cause : /* @__PURE__ */ new Map() : new Map([["cause", JSON.stringify(err?.cause || "")]]),
27
- stack: err?.stack || "",
28
- ...opts
29
- });
30
- }
31
- };
32
- let ErrorTags = /* @__PURE__ */ function(ErrorTags) {
33
- ErrorTags["PgOutage"] = "PgOutage";
34
- ErrorTags["RedisOutage"] = "RedisOutage";
35
- ErrorTags["Unknown"] = "Unknown";
36
- ErrorTags["NeedPermissions"] = "NeedPermissions";
37
- ErrorTags["Validation"] = "Validation";
38
- ErrorTags["Authorization"] = "Authorization";
39
- ErrorTags["GameStateGeneration"] = "GameStateGeneration";
40
- ErrorTags["InvalidPrompt"] = "InvalidPrompt";
41
- ErrorTags["UnknownAIProvider"] = "UnknownAIProvider";
42
- ErrorTags["FailedToStart"] = "FailedToStart";
43
- ErrorTags["Unimplemented"] = "Unimplemented";
44
- ErrorTags["IncompatibleVersion"] = "IncompatibleVersion";
45
- ErrorTags["PingUnacceptable"] = "PingUnacceptable";
46
- return ErrorTags;
47
- }({});
48
- //#endregion
49
- export { ErrorTags, SystemError };
@@ -1,12 +0,0 @@
1
- import { Credential } from "@tempojs/common";
2
- import { CredentialStorage } from "@tempojs/client";
3
-
4
- //#region src/memory-storage.d.ts
5
- declare class MemoryStorageStrategy implements CredentialStorage {
6
- storage: Map<string, string>;
7
- getCredential(key: string): Promise<Credential | undefined>;
8
- storeCredential(key: string, _credential: Credential): Promise<void>;
9
- removeCredential(key: string): Promise<void>;
10
- }
11
- //#endregion
12
- export { MemoryStorageStrategy };
@@ -1,18 +0,0 @@
1
- import { parseCredential, stringifyCredential } from "@tempojs/common";
2
- //#region src/memory-storage.ts
3
- var MemoryStorageStrategy = class {
4
- storage = /* @__PURE__ */ new Map();
5
- async getCredential(key) {
6
- let credentials = this.storage.get(key);
7
- if (!credentials) return void 0;
8
- return parseCredential(credentials);
9
- }
10
- async storeCredential(key, _credential) {
11
- this.storage.set(key, stringifyCredential(_credential));
12
- }
13
- async removeCredential(key) {
14
- this.storage.delete(key);
15
- }
16
- };
17
- //#endregion
18
- export { MemoryStorageStrategy };
@@ -1,11 +0,0 @@
1
- import { Credential } from "@tempojs/common";
2
- import { CredentialStorage } from "@tempojs/client";
3
-
4
- //#region src/sync-storage.d.ts
5
- declare class SyncStorageStrategy implements CredentialStorage {
6
- getCredential(key: string): Promise<Credential | undefined>;
7
- storeCredential(key: string, _credential: Credential): Promise<void>;
8
- removeCredential(key: string): Promise<void>;
9
- }
10
- //#endregion
11
- export { SyncStorageStrategy };
@@ -1,18 +0,0 @@
1
- import { parseCredential, stringifyCredential } from "@tempojs/common";
2
- import { storage } from "webextension-polyfill";
3
- //#region src/sync-storage.ts
4
- var SyncStorageStrategy = class {
5
- async getCredential(key) {
6
- let credentials = await storage.sync.get(key);
7
- if (!credentials[key]) return void 0;
8
- return parseCredential(credentials[key]);
9
- }
10
- async storeCredential(key, _credential) {
11
- await storage.sync.set({ [key]: stringifyCredential(_credential) });
12
- }
13
- async removeCredential(key) {
14
- await storage.sync.remove(key);
15
- }
16
- };
17
- //#endregion
18
- export { SyncStorageStrategy };