telepact 1.0.0-alpha.241 → 1.0.0-alpha.260
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.
- package/README.md +16 -21
- package/dist/inc/internal.telepact.json +3 -1
- package/dist/index.cjs.js +69 -17
- package/dist/index.esm.js +69 -18
- package/dist/index.iife.js +69 -17
- package/dist/src/MockServer.js +4 -2
- package/dist/src/MockServer.js.map +1 -1
- package/dist/src/Server.d.ts +14 -3
- package/dist/src/Server.js +23 -5
- package/dist/src/Server.js.map +1 -1
- package/dist/src/TelepactError.d.ts +1 -0
- package/dist/src/TelepactError.js +24 -0
- package/dist/src/TelepactError.js.map +1 -1
- package/dist/src/internal/HandleMessage.d.ts +6 -1
- package/dist/src/internal/HandleMessage.js +10 -7
- package/dist/src/internal/HandleMessage.js.map +1 -1
- package/dist/src/internal/ProcessBytes.d.ts +6 -2
- package/dist/src/internal/ProcessBytes.js +5 -5
- package/dist/src/internal/ProcessBytes.js.map +1 -1
- package/dist/src/internal/UnknownError.d.ts +3 -0
- package/dist/src/internal/UnknownError.js +20 -0
- package/dist/src/internal/UnknownError.js.map +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -21,7 +21,7 @@ Server:
|
|
|
21
21
|
```ts
|
|
22
22
|
import * as fs from 'fs';
|
|
23
23
|
import * as path from 'path';
|
|
24
|
-
import { Message, Server, ServerOptions, TelepactSchema, TelepactSchemaFiles } from 'telepact';
|
|
24
|
+
import { FunctionRouter, Message, Server, ServerOptions, TelepactSchema, TelepactSchemaFiles } from 'telepact';
|
|
25
25
|
|
|
26
26
|
const files = new TelepactSchemaFiles('/directory/containing/api/files', fs, path);
|
|
27
27
|
const schema = TelepactSchema.fromFileJsonMap(files.filenamesToJson);
|
|
@@ -29,33 +29,28 @@ const schema = TelepactSchema.fromFileJsonMap(files.filenamesToJson);
|
|
|
29
29
|
// The schema directory may contain multiple *.telepact.yaml and
|
|
30
30
|
// *.telepact.json files. Subdirectories are rejected.
|
|
31
31
|
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
const functionRoutes = {
|
|
33
|
+
'fn.greet': async (functionName: string, requestMessage: Message): Promise<Message> => {
|
|
34
|
+
const argument = requestMessage.body[functionName] as Record<string, any>;
|
|
35
|
+
const subject = argument['subject'];
|
|
36
|
+
return new Message({}, {Ok_: {message: `Hello ${subject}!`}});
|
|
37
|
+
},
|
|
38
|
+
};
|
|
35
39
|
|
|
40
|
+
const options = new ServerOptions();
|
|
41
|
+
// Set this to false when your schema does not define union.Auth_.
|
|
42
|
+
options.authRequired = false;
|
|
43
|
+
options.middleware = async (requestMessage: Message, functionRouter): Promise<Message> => {
|
|
44
|
+
const functionName = requestMessage.getBodyTarget();
|
|
36
45
|
try {
|
|
37
|
-
// Early in the handler, perform any pre-flight "middleware" operations, such as
|
|
38
|
-
// authentication, tracing, or logging.
|
|
39
46
|
log.info("Function started", {function: functionName});
|
|
40
|
-
|
|
41
|
-
// Dispatch request to appropriate function handling code.
|
|
42
|
-
// (This example uses manual dispatching, but you can also use a more advanced pattern.)
|
|
43
|
-
if (functionName == 'fn.greet') {
|
|
44
|
-
var subject = arguments['subject'];
|
|
45
|
-
return new Message({}, {Ok_: {message: `Hello ${subject}!`}});
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
throw new Error('Function not found');
|
|
47
|
+
return await functionRouter.route(requestMessage);
|
|
49
48
|
} finally {
|
|
50
|
-
// At the end the handler, perform any post-flight "middleware" operations
|
|
51
49
|
log.info("Function finished", {function: functionName});
|
|
52
50
|
}
|
|
53
51
|
};
|
|
54
|
-
|
|
55
|
-
const
|
|
56
|
-
// Set this to false when your schema does not define union.Auth_.
|
|
57
|
-
options.authRequired = false;
|
|
58
|
-
const server = new Server(schema, handler, options);
|
|
52
|
+
const functionRouter = new FunctionRouter(functionRoutes);
|
|
53
|
+
const server = new Server(schema, functionRouter, options);
|
|
59
54
|
|
|
60
55
|
// Wire up request/response bytes from your transport of choice
|
|
61
56
|
transport.receive(async (requestBytes: Uint8Array): Promise<Uint8Array> => {
|
package/dist/index.cjs.js
CHANGED
|
@@ -724,6 +724,28 @@ class ClientBinaryEncoder {
|
|
|
724
724
|
}
|
|
725
725
|
}
|
|
726
726
|
|
|
727
|
+
function fillRandomValues(bytes) {
|
|
728
|
+
const cryptoObject = globalThis.crypto;
|
|
729
|
+
if (typeof cryptoObject?.getRandomValues === 'function') {
|
|
730
|
+
cryptoObject.getRandomValues(bytes);
|
|
731
|
+
return;
|
|
732
|
+
}
|
|
733
|
+
for (let i = 0; i < bytes.length; i += 1) {
|
|
734
|
+
bytes[i] = Math.floor(Math.random() * 256);
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
function createCaseId() {
|
|
738
|
+
const cryptoObject = globalThis.crypto;
|
|
739
|
+
if (typeof cryptoObject?.randomUUID === 'function') {
|
|
740
|
+
return cryptoObject.randomUUID();
|
|
741
|
+
}
|
|
742
|
+
const bytes = new Uint8Array(16);
|
|
743
|
+
fillRandomValues(bytes);
|
|
744
|
+
bytes[6] = (bytes[6] & 0x0f) | 0x40;
|
|
745
|
+
bytes[8] = (bytes[8] & 0x3f) | 0x80;
|
|
746
|
+
const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');
|
|
747
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
748
|
+
}
|
|
727
749
|
function toError(error) {
|
|
728
750
|
if (error instanceof Error) {
|
|
729
751
|
return error;
|
|
@@ -738,6 +760,7 @@ function toError(error) {
|
|
|
738
760
|
}
|
|
739
761
|
class TelepactError extends Error {
|
|
740
762
|
kind;
|
|
763
|
+
caseId;
|
|
741
764
|
cause;
|
|
742
765
|
constructor(arg, kind, cause) {
|
|
743
766
|
const resolvedCause = typeof arg === 'string' ? toError(cause) : toError(arg);
|
|
@@ -748,6 +771,7 @@ class TelepactError extends Error {
|
|
|
748
771
|
Object.setPrototypeOf(this, TelepactError.prototype);
|
|
749
772
|
this.name = 'TelepactError';
|
|
750
773
|
this.kind = kind;
|
|
774
|
+
this.caseId = createCaseId();
|
|
751
775
|
this.cause = resolvedCause;
|
|
752
776
|
if (resolvedCause?.stack) {
|
|
753
777
|
this.stack = resolvedCause.stack;
|
|
@@ -1993,13 +2017,17 @@ function getSchemaKey(definition) {
|
|
|
1993
2017
|
throw new Error(`Schema entry has no schema key: ${JSON.stringify(definition)}`);
|
|
1994
2018
|
}
|
|
1995
2019
|
|
|
1996
|
-
|
|
2020
|
+
function buildUnknownErrorMessage(error, headers = {}) {
|
|
2021
|
+
return new Message(headers, { ErrorUnknown_: { caseId: error.caseId } });
|
|
2022
|
+
}
|
|
2023
|
+
|
|
2024
|
+
async function handleMessage(requestMessage, updateHeaders, telepactSchema, middleware, functionRouter, onError, onAuth) {
|
|
1997
2025
|
const responseHeaders = {};
|
|
1998
2026
|
const requestHeaders = requestMessage.headers;
|
|
1999
2027
|
const requestBody = requestMessage.body;
|
|
2000
2028
|
const parsedTelepactSchema = telepactSchema.parsed;
|
|
2001
2029
|
const requestEntry = Object.entries(requestBody)[0];
|
|
2002
|
-
|
|
2030
|
+
updateHeaders?.(requestHeaders);
|
|
2003
2031
|
const requestTargetInit = requestEntry[0];
|
|
2004
2032
|
const requestPayload = requestEntry[1];
|
|
2005
2033
|
let unknownTarget;
|
|
@@ -2037,12 +2065,13 @@ async function handleMessage(requestMessage, overrideHeaders, telepactSchema, ha
|
|
|
2037
2065
|
Object.assign(requestHeaders, authHeaders);
|
|
2038
2066
|
}
|
|
2039
2067
|
catch (error) {
|
|
2068
|
+
const wrapped = new TelepactError(`telepact auth handler failed while handling ${functionName}`, 'handler', error);
|
|
2040
2069
|
try {
|
|
2041
|
-
onError(
|
|
2070
|
+
onError(wrapped);
|
|
2042
2071
|
}
|
|
2043
2072
|
catch (ignored) {
|
|
2044
2073
|
}
|
|
2045
|
-
return
|
|
2074
|
+
return buildUnknownErrorMessage(wrapped, responseHeaders);
|
|
2046
2075
|
}
|
|
2047
2076
|
}
|
|
2048
2077
|
if ('@bin_' in requestHeaders) {
|
|
@@ -2110,16 +2139,17 @@ async function handleMessage(requestMessage, overrideHeaders, telepactSchema, ha
|
|
|
2110
2139
|
}
|
|
2111
2140
|
else {
|
|
2112
2141
|
try {
|
|
2113
|
-
resultMessage = await
|
|
2142
|
+
resultMessage = await middleware(callMessage, functionRouter);
|
|
2114
2143
|
}
|
|
2115
2144
|
catch (e) {
|
|
2145
|
+
const wrapped = new TelepactError(`telepact handler failed while handling ${functionName}`, 'handler', e);
|
|
2116
2146
|
try {
|
|
2117
|
-
onError(
|
|
2147
|
+
onError(wrapped);
|
|
2118
2148
|
}
|
|
2119
2149
|
catch (error) {
|
|
2120
2150
|
// Ignore error
|
|
2121
2151
|
}
|
|
2122
|
-
return
|
|
2152
|
+
return buildUnknownErrorMessage(wrapped, responseHeaders);
|
|
2123
2153
|
}
|
|
2124
2154
|
}
|
|
2125
2155
|
const resultUnion = resultMessage.body;
|
|
@@ -2197,7 +2227,7 @@ function parseRequestMessage(requestMessageBytes, serializer, telepactSchema, on
|
|
|
2197
2227
|
}
|
|
2198
2228
|
}
|
|
2199
2229
|
|
|
2200
|
-
async function processBytes(requestMessageBytes,
|
|
2230
|
+
async function processBytes(requestMessageBytes, updateHeaders, serializer, telepactSchema, onError, onRequest, onResponse, onAuth, middleware, functionRouter) {
|
|
2201
2231
|
try {
|
|
2202
2232
|
const requestMessage = parseRequestMessage(requestMessageBytes, serializer, telepactSchema, onError);
|
|
2203
2233
|
try {
|
|
@@ -2206,7 +2236,7 @@ async function processBytes(requestMessageBytes, overrideHeaders, serializer, te
|
|
|
2206
2236
|
catch (error) {
|
|
2207
2237
|
// Handle error
|
|
2208
2238
|
}
|
|
2209
|
-
const responseMessage = await handleMessage(requestMessage,
|
|
2239
|
+
const responseMessage = await handleMessage(requestMessage, updateHeaders, telepactSchema, middleware, functionRouter, onError, onAuth);
|
|
2210
2240
|
try {
|
|
2211
2241
|
onResponse(responseMessage);
|
|
2212
2242
|
}
|
|
@@ -2227,7 +2257,7 @@ async function processBytes(requestMessageBytes, overrideHeaders, serializer, te
|
|
|
2227
2257
|
catch (error) {
|
|
2228
2258
|
// Handle error
|
|
2229
2259
|
}
|
|
2230
|
-
const unknownResponseBytes = serializer.serialize(
|
|
2260
|
+
const unknownResponseBytes = serializer.serialize(buildUnknownErrorMessage(wrapped));
|
|
2231
2261
|
return { bytes: unknownResponseBytes, headers: {} };
|
|
2232
2262
|
}
|
|
2233
2263
|
return { bytes: responseBytes, headers: responseMessage.headers };
|
|
@@ -2244,7 +2274,7 @@ async function processBytes(requestMessageBytes, overrideHeaders, serializer, te
|
|
|
2244
2274
|
catch (error) {
|
|
2245
2275
|
// Handle error
|
|
2246
2276
|
}
|
|
2247
|
-
const responseBytes = serializer.serialize(
|
|
2277
|
+
const responseBytes = serializer.serialize(buildUnknownErrorMessage(wrapped));
|
|
2248
2278
|
return { bytes: responseBytes, headers: {} };
|
|
2249
2279
|
}
|
|
2250
2280
|
}
|
|
@@ -2320,16 +2350,32 @@ class ServerBase64Encoder extends Base64Encoder {
|
|
|
2320
2350
|
}
|
|
2321
2351
|
}
|
|
2322
2352
|
|
|
2353
|
+
class FunctionRouter {
|
|
2354
|
+
functionRoutes;
|
|
2355
|
+
constructor(functionRoutes) {
|
|
2356
|
+
this.functionRoutes = functionRoutes;
|
|
2357
|
+
}
|
|
2358
|
+
async route(requestMessage) {
|
|
2359
|
+
const functionName = requestMessage.getBodyTarget();
|
|
2360
|
+
const functionRoute = this.functionRoutes[functionName];
|
|
2361
|
+
if (functionRoute === undefined) {
|
|
2362
|
+
throw new Error(`Unknown function: ${functionName}`);
|
|
2363
|
+
}
|
|
2364
|
+
return await functionRoute(functionName, requestMessage);
|
|
2365
|
+
}
|
|
2366
|
+
}
|
|
2323
2367
|
class Server {
|
|
2324
|
-
|
|
2368
|
+
functionRouter;
|
|
2369
|
+
middleware;
|
|
2325
2370
|
onError;
|
|
2326
2371
|
onRequest;
|
|
2327
2372
|
onResponse;
|
|
2328
2373
|
onAuth;
|
|
2329
2374
|
telepactSchema;
|
|
2330
2375
|
serializer;
|
|
2331
|
-
constructor(telepactSchema,
|
|
2332
|
-
this.
|
|
2376
|
+
constructor(telepactSchema, functionRouter, options) {
|
|
2377
|
+
this.functionRouter = functionRouter;
|
|
2378
|
+
this.middleware = options.middleware;
|
|
2333
2379
|
this.onError = options.onError;
|
|
2334
2380
|
this.onRequest = options.onRequest;
|
|
2335
2381
|
this.onResponse = options.onResponse;
|
|
@@ -2343,8 +2389,8 @@ class Server {
|
|
|
2343
2389
|
throw new Error('Unauthenticated server. Either define a `union.Auth_` in your schema or set `options.authRequired` to `false`.');
|
|
2344
2390
|
}
|
|
2345
2391
|
}
|
|
2346
|
-
async process(requestMessageBytes,
|
|
2347
|
-
return await processBytes(requestMessageBytes,
|
|
2392
|
+
async process(requestMessageBytes, updateHeaders) {
|
|
2393
|
+
return await processBytes(requestMessageBytes, updateHeaders, this.serializer, this.telepactSchema, this.onError, this.onRequest, this.onResponse, this.onAuth, this.middleware, this.functionRouter);
|
|
2348
2394
|
}
|
|
2349
2395
|
}
|
|
2350
2396
|
class ServerOptions {
|
|
@@ -2352,6 +2398,7 @@ class ServerOptions {
|
|
|
2352
2398
|
onRequest;
|
|
2353
2399
|
onResponse;
|
|
2354
2400
|
onAuth;
|
|
2401
|
+
middleware;
|
|
2355
2402
|
authRequired;
|
|
2356
2403
|
serialization;
|
|
2357
2404
|
constructor() {
|
|
@@ -2359,6 +2406,7 @@ class ServerOptions {
|
|
|
2359
2406
|
this.onRequest = (m) => { };
|
|
2360
2407
|
this.onResponse = (m) => { };
|
|
2361
2408
|
this.onAuth = (headers) => ({});
|
|
2409
|
+
this.middleware = async (requestMessage, functionRouter) => await functionRouter.route(requestMessage);
|
|
2362
2410
|
this.authRequired = true;
|
|
2363
2411
|
this.serialization = new DefaultSerialization();
|
|
2364
2412
|
}
|
|
@@ -2658,6 +2706,7 @@ var internalTelepact = [
|
|
|
2658
2706
|
{
|
|
2659
2707
|
"///": "The server implementation raised an unknown error.",
|
|
2660
2708
|
ErrorUnknown_: {
|
|
2709
|
+
caseId: "string"
|
|
2661
2710
|
}
|
|
2662
2711
|
},
|
|
2663
2712
|
{
|
|
@@ -11835,8 +11884,10 @@ class MockServer {
|
|
|
11835
11884
|
const serverOptions = new ServerOptions();
|
|
11836
11885
|
serverOptions.onError = options.onError;
|
|
11837
11886
|
serverOptions.authRequired = false;
|
|
11887
|
+
serverOptions.middleware = async (requestMessage) => await this.handle(requestMessage);
|
|
11838
11888
|
const telepactSchema = new TelepactSchema(mockTelepactSchema.original, mockTelepactSchema.full, mockTelepactSchema.parsed, mockTelepactSchema.parsedRequestHeaders, mockTelepactSchema.parsedResponseHeaders);
|
|
11839
|
-
|
|
11889
|
+
const functionRouter = new FunctionRouter({});
|
|
11890
|
+
this.server = new Server(telepactSchema, functionRouter, serverOptions);
|
|
11840
11891
|
}
|
|
11841
11892
|
random;
|
|
11842
11893
|
enableGeneratedDefaultStub;
|
|
@@ -12426,6 +12477,7 @@ exports.Checksum = Checksum;
|
|
|
12426
12477
|
exports.Client = Client;
|
|
12427
12478
|
exports.ClientBinaryStrategy = ClientBinaryStrategy;
|
|
12428
12479
|
exports.ClientOptions = ClientOptions;
|
|
12480
|
+
exports.FunctionRouter = FunctionRouter;
|
|
12429
12481
|
exports.Message = Message;
|
|
12430
12482
|
exports.MockServer = MockServer;
|
|
12431
12483
|
exports.MockServerOptions = MockServerOptions;
|
package/dist/index.esm.js
CHANGED
|
@@ -722,6 +722,28 @@ class ClientBinaryEncoder {
|
|
|
722
722
|
}
|
|
723
723
|
}
|
|
724
724
|
|
|
725
|
+
function fillRandomValues(bytes) {
|
|
726
|
+
const cryptoObject = globalThis.crypto;
|
|
727
|
+
if (typeof cryptoObject?.getRandomValues === 'function') {
|
|
728
|
+
cryptoObject.getRandomValues(bytes);
|
|
729
|
+
return;
|
|
730
|
+
}
|
|
731
|
+
for (let i = 0; i < bytes.length; i += 1) {
|
|
732
|
+
bytes[i] = Math.floor(Math.random() * 256);
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
function createCaseId() {
|
|
736
|
+
const cryptoObject = globalThis.crypto;
|
|
737
|
+
if (typeof cryptoObject?.randomUUID === 'function') {
|
|
738
|
+
return cryptoObject.randomUUID();
|
|
739
|
+
}
|
|
740
|
+
const bytes = new Uint8Array(16);
|
|
741
|
+
fillRandomValues(bytes);
|
|
742
|
+
bytes[6] = (bytes[6] & 0x0f) | 0x40;
|
|
743
|
+
bytes[8] = (bytes[8] & 0x3f) | 0x80;
|
|
744
|
+
const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');
|
|
745
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
746
|
+
}
|
|
725
747
|
function toError(error) {
|
|
726
748
|
if (error instanceof Error) {
|
|
727
749
|
return error;
|
|
@@ -736,6 +758,7 @@ function toError(error) {
|
|
|
736
758
|
}
|
|
737
759
|
class TelepactError extends Error {
|
|
738
760
|
kind;
|
|
761
|
+
caseId;
|
|
739
762
|
cause;
|
|
740
763
|
constructor(arg, kind, cause) {
|
|
741
764
|
const resolvedCause = typeof arg === 'string' ? toError(cause) : toError(arg);
|
|
@@ -746,6 +769,7 @@ class TelepactError extends Error {
|
|
|
746
769
|
Object.setPrototypeOf(this, TelepactError.prototype);
|
|
747
770
|
this.name = 'TelepactError';
|
|
748
771
|
this.kind = kind;
|
|
772
|
+
this.caseId = createCaseId();
|
|
749
773
|
this.cause = resolvedCause;
|
|
750
774
|
if (resolvedCause?.stack) {
|
|
751
775
|
this.stack = resolvedCause.stack;
|
|
@@ -1991,13 +2015,17 @@ function getSchemaKey(definition) {
|
|
|
1991
2015
|
throw new Error(`Schema entry has no schema key: ${JSON.stringify(definition)}`);
|
|
1992
2016
|
}
|
|
1993
2017
|
|
|
1994
|
-
|
|
2018
|
+
function buildUnknownErrorMessage(error, headers = {}) {
|
|
2019
|
+
return new Message(headers, { ErrorUnknown_: { caseId: error.caseId } });
|
|
2020
|
+
}
|
|
2021
|
+
|
|
2022
|
+
async function handleMessage(requestMessage, updateHeaders, telepactSchema, middleware, functionRouter, onError, onAuth) {
|
|
1995
2023
|
const responseHeaders = {};
|
|
1996
2024
|
const requestHeaders = requestMessage.headers;
|
|
1997
2025
|
const requestBody = requestMessage.body;
|
|
1998
2026
|
const parsedTelepactSchema = telepactSchema.parsed;
|
|
1999
2027
|
const requestEntry = Object.entries(requestBody)[0];
|
|
2000
|
-
|
|
2028
|
+
updateHeaders?.(requestHeaders);
|
|
2001
2029
|
const requestTargetInit = requestEntry[0];
|
|
2002
2030
|
const requestPayload = requestEntry[1];
|
|
2003
2031
|
let unknownTarget;
|
|
@@ -2035,12 +2063,13 @@ async function handleMessage(requestMessage, overrideHeaders, telepactSchema, ha
|
|
|
2035
2063
|
Object.assign(requestHeaders, authHeaders);
|
|
2036
2064
|
}
|
|
2037
2065
|
catch (error) {
|
|
2066
|
+
const wrapped = new TelepactError(`telepact auth handler failed while handling ${functionName}`, 'handler', error);
|
|
2038
2067
|
try {
|
|
2039
|
-
onError(
|
|
2068
|
+
onError(wrapped);
|
|
2040
2069
|
}
|
|
2041
2070
|
catch (ignored) {
|
|
2042
2071
|
}
|
|
2043
|
-
return
|
|
2072
|
+
return buildUnknownErrorMessage(wrapped, responseHeaders);
|
|
2044
2073
|
}
|
|
2045
2074
|
}
|
|
2046
2075
|
if ('@bin_' in requestHeaders) {
|
|
@@ -2108,16 +2137,17 @@ async function handleMessage(requestMessage, overrideHeaders, telepactSchema, ha
|
|
|
2108
2137
|
}
|
|
2109
2138
|
else {
|
|
2110
2139
|
try {
|
|
2111
|
-
resultMessage = await
|
|
2140
|
+
resultMessage = await middleware(callMessage, functionRouter);
|
|
2112
2141
|
}
|
|
2113
2142
|
catch (e) {
|
|
2143
|
+
const wrapped = new TelepactError(`telepact handler failed while handling ${functionName}`, 'handler', e);
|
|
2114
2144
|
try {
|
|
2115
|
-
onError(
|
|
2145
|
+
onError(wrapped);
|
|
2116
2146
|
}
|
|
2117
2147
|
catch (error) {
|
|
2118
2148
|
// Ignore error
|
|
2119
2149
|
}
|
|
2120
|
-
return
|
|
2150
|
+
return buildUnknownErrorMessage(wrapped, responseHeaders);
|
|
2121
2151
|
}
|
|
2122
2152
|
}
|
|
2123
2153
|
const resultUnion = resultMessage.body;
|
|
@@ -2195,7 +2225,7 @@ function parseRequestMessage(requestMessageBytes, serializer, telepactSchema, on
|
|
|
2195
2225
|
}
|
|
2196
2226
|
}
|
|
2197
2227
|
|
|
2198
|
-
async function processBytes(requestMessageBytes,
|
|
2228
|
+
async function processBytes(requestMessageBytes, updateHeaders, serializer, telepactSchema, onError, onRequest, onResponse, onAuth, middleware, functionRouter) {
|
|
2199
2229
|
try {
|
|
2200
2230
|
const requestMessage = parseRequestMessage(requestMessageBytes, serializer, telepactSchema, onError);
|
|
2201
2231
|
try {
|
|
@@ -2204,7 +2234,7 @@ async function processBytes(requestMessageBytes, overrideHeaders, serializer, te
|
|
|
2204
2234
|
catch (error) {
|
|
2205
2235
|
// Handle error
|
|
2206
2236
|
}
|
|
2207
|
-
const responseMessage = await handleMessage(requestMessage,
|
|
2237
|
+
const responseMessage = await handleMessage(requestMessage, updateHeaders, telepactSchema, middleware, functionRouter, onError, onAuth);
|
|
2208
2238
|
try {
|
|
2209
2239
|
onResponse(responseMessage);
|
|
2210
2240
|
}
|
|
@@ -2225,7 +2255,7 @@ async function processBytes(requestMessageBytes, overrideHeaders, serializer, te
|
|
|
2225
2255
|
catch (error) {
|
|
2226
2256
|
// Handle error
|
|
2227
2257
|
}
|
|
2228
|
-
const unknownResponseBytes = serializer.serialize(
|
|
2258
|
+
const unknownResponseBytes = serializer.serialize(buildUnknownErrorMessage(wrapped));
|
|
2229
2259
|
return { bytes: unknownResponseBytes, headers: {} };
|
|
2230
2260
|
}
|
|
2231
2261
|
return { bytes: responseBytes, headers: responseMessage.headers };
|
|
@@ -2242,7 +2272,7 @@ async function processBytes(requestMessageBytes, overrideHeaders, serializer, te
|
|
|
2242
2272
|
catch (error) {
|
|
2243
2273
|
// Handle error
|
|
2244
2274
|
}
|
|
2245
|
-
const responseBytes = serializer.serialize(
|
|
2275
|
+
const responseBytes = serializer.serialize(buildUnknownErrorMessage(wrapped));
|
|
2246
2276
|
return { bytes: responseBytes, headers: {} };
|
|
2247
2277
|
}
|
|
2248
2278
|
}
|
|
@@ -2318,16 +2348,32 @@ class ServerBase64Encoder extends Base64Encoder {
|
|
|
2318
2348
|
}
|
|
2319
2349
|
}
|
|
2320
2350
|
|
|
2351
|
+
class FunctionRouter {
|
|
2352
|
+
functionRoutes;
|
|
2353
|
+
constructor(functionRoutes) {
|
|
2354
|
+
this.functionRoutes = functionRoutes;
|
|
2355
|
+
}
|
|
2356
|
+
async route(requestMessage) {
|
|
2357
|
+
const functionName = requestMessage.getBodyTarget();
|
|
2358
|
+
const functionRoute = this.functionRoutes[functionName];
|
|
2359
|
+
if (functionRoute === undefined) {
|
|
2360
|
+
throw new Error(`Unknown function: ${functionName}`);
|
|
2361
|
+
}
|
|
2362
|
+
return await functionRoute(functionName, requestMessage);
|
|
2363
|
+
}
|
|
2364
|
+
}
|
|
2321
2365
|
class Server {
|
|
2322
|
-
|
|
2366
|
+
functionRouter;
|
|
2367
|
+
middleware;
|
|
2323
2368
|
onError;
|
|
2324
2369
|
onRequest;
|
|
2325
2370
|
onResponse;
|
|
2326
2371
|
onAuth;
|
|
2327
2372
|
telepactSchema;
|
|
2328
2373
|
serializer;
|
|
2329
|
-
constructor(telepactSchema,
|
|
2330
|
-
this.
|
|
2374
|
+
constructor(telepactSchema, functionRouter, options) {
|
|
2375
|
+
this.functionRouter = functionRouter;
|
|
2376
|
+
this.middleware = options.middleware;
|
|
2331
2377
|
this.onError = options.onError;
|
|
2332
2378
|
this.onRequest = options.onRequest;
|
|
2333
2379
|
this.onResponse = options.onResponse;
|
|
@@ -2341,8 +2387,8 @@ class Server {
|
|
|
2341
2387
|
throw new Error('Unauthenticated server. Either define a `union.Auth_` in your schema or set `options.authRequired` to `false`.');
|
|
2342
2388
|
}
|
|
2343
2389
|
}
|
|
2344
|
-
async process(requestMessageBytes,
|
|
2345
|
-
return await processBytes(requestMessageBytes,
|
|
2390
|
+
async process(requestMessageBytes, updateHeaders) {
|
|
2391
|
+
return await processBytes(requestMessageBytes, updateHeaders, this.serializer, this.telepactSchema, this.onError, this.onRequest, this.onResponse, this.onAuth, this.middleware, this.functionRouter);
|
|
2346
2392
|
}
|
|
2347
2393
|
}
|
|
2348
2394
|
class ServerOptions {
|
|
@@ -2350,6 +2396,7 @@ class ServerOptions {
|
|
|
2350
2396
|
onRequest;
|
|
2351
2397
|
onResponse;
|
|
2352
2398
|
onAuth;
|
|
2399
|
+
middleware;
|
|
2353
2400
|
authRequired;
|
|
2354
2401
|
serialization;
|
|
2355
2402
|
constructor() {
|
|
@@ -2357,6 +2404,7 @@ class ServerOptions {
|
|
|
2357
2404
|
this.onRequest = (m) => { };
|
|
2358
2405
|
this.onResponse = (m) => { };
|
|
2359
2406
|
this.onAuth = (headers) => ({});
|
|
2407
|
+
this.middleware = async (requestMessage, functionRouter) => await functionRouter.route(requestMessage);
|
|
2360
2408
|
this.authRequired = true;
|
|
2361
2409
|
this.serialization = new DefaultSerialization();
|
|
2362
2410
|
}
|
|
@@ -2656,6 +2704,7 @@ var internalTelepact = [
|
|
|
2656
2704
|
{
|
|
2657
2705
|
"///": "The server implementation raised an unknown error.",
|
|
2658
2706
|
ErrorUnknown_: {
|
|
2707
|
+
caseId: "string"
|
|
2659
2708
|
}
|
|
2660
2709
|
},
|
|
2661
2710
|
{
|
|
@@ -11833,8 +11882,10 @@ class MockServer {
|
|
|
11833
11882
|
const serverOptions = new ServerOptions();
|
|
11834
11883
|
serverOptions.onError = options.onError;
|
|
11835
11884
|
serverOptions.authRequired = false;
|
|
11885
|
+
serverOptions.middleware = async (requestMessage) => await this.handle(requestMessage);
|
|
11836
11886
|
const telepactSchema = new TelepactSchema(mockTelepactSchema.original, mockTelepactSchema.full, mockTelepactSchema.parsed, mockTelepactSchema.parsedRequestHeaders, mockTelepactSchema.parsedResponseHeaders);
|
|
11837
|
-
|
|
11887
|
+
const functionRouter = new FunctionRouter({});
|
|
11888
|
+
this.server = new Server(telepactSchema, functionRouter, serverOptions);
|
|
11838
11889
|
}
|
|
11839
11890
|
random;
|
|
11840
11891
|
enableGeneratedDefaultStub;
|
|
@@ -12420,4 +12471,4 @@ const _internal = {
|
|
|
12420
12471
|
GenerateContext
|
|
12421
12472
|
};
|
|
12422
12473
|
|
|
12423
|
-
export { Checksum, Client, ClientBinaryStrategy, ClientOptions, Message, MockServer, MockServerOptions, MockTelepactSchema, RandomGenerator, SerializationError, Serializer, Server, ServerOptions, TelepactSchema, TelepactSchemaFiles, TelepactSchemaParseError, TestClient, TestClientOptions, _internal, jsonSchema };
|
|
12474
|
+
export { Checksum, Client, ClientBinaryStrategy, ClientOptions, FunctionRouter, Message, MockServer, MockServerOptions, MockTelepactSchema, RandomGenerator, SerializationError, Serializer, Server, ServerOptions, TelepactSchema, TelepactSchemaFiles, TelepactSchemaParseError, TestClient, TestClientOptions, _internal, jsonSchema };
|
package/dist/index.iife.js
CHANGED
|
@@ -722,6 +722,28 @@ var Telepact = (function (exports, msgpackr, crc32) {
|
|
|
722
722
|
}
|
|
723
723
|
}
|
|
724
724
|
|
|
725
|
+
function fillRandomValues(bytes) {
|
|
726
|
+
const cryptoObject = globalThis.crypto;
|
|
727
|
+
if (typeof cryptoObject?.getRandomValues === 'function') {
|
|
728
|
+
cryptoObject.getRandomValues(bytes);
|
|
729
|
+
return;
|
|
730
|
+
}
|
|
731
|
+
for (let i = 0; i < bytes.length; i += 1) {
|
|
732
|
+
bytes[i] = Math.floor(Math.random() * 256);
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
function createCaseId() {
|
|
736
|
+
const cryptoObject = globalThis.crypto;
|
|
737
|
+
if (typeof cryptoObject?.randomUUID === 'function') {
|
|
738
|
+
return cryptoObject.randomUUID();
|
|
739
|
+
}
|
|
740
|
+
const bytes = new Uint8Array(16);
|
|
741
|
+
fillRandomValues(bytes);
|
|
742
|
+
bytes[6] = (bytes[6] & 0x0f) | 0x40;
|
|
743
|
+
bytes[8] = (bytes[8] & 0x3f) | 0x80;
|
|
744
|
+
const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');
|
|
745
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
746
|
+
}
|
|
725
747
|
function toError(error) {
|
|
726
748
|
if (error instanceof Error) {
|
|
727
749
|
return error;
|
|
@@ -736,6 +758,7 @@ var Telepact = (function (exports, msgpackr, crc32) {
|
|
|
736
758
|
}
|
|
737
759
|
class TelepactError extends Error {
|
|
738
760
|
kind;
|
|
761
|
+
caseId;
|
|
739
762
|
cause;
|
|
740
763
|
constructor(arg, kind, cause) {
|
|
741
764
|
const resolvedCause = typeof arg === 'string' ? toError(cause) : toError(arg);
|
|
@@ -746,6 +769,7 @@ var Telepact = (function (exports, msgpackr, crc32) {
|
|
|
746
769
|
Object.setPrototypeOf(this, TelepactError.prototype);
|
|
747
770
|
this.name = 'TelepactError';
|
|
748
771
|
this.kind = kind;
|
|
772
|
+
this.caseId = createCaseId();
|
|
749
773
|
this.cause = resolvedCause;
|
|
750
774
|
if (resolvedCause?.stack) {
|
|
751
775
|
this.stack = resolvedCause.stack;
|
|
@@ -1991,13 +2015,17 @@ var Telepact = (function (exports, msgpackr, crc32) {
|
|
|
1991
2015
|
throw new Error(`Schema entry has no schema key: ${JSON.stringify(definition)}`);
|
|
1992
2016
|
}
|
|
1993
2017
|
|
|
1994
|
-
|
|
2018
|
+
function buildUnknownErrorMessage(error, headers = {}) {
|
|
2019
|
+
return new Message(headers, { ErrorUnknown_: { caseId: error.caseId } });
|
|
2020
|
+
}
|
|
2021
|
+
|
|
2022
|
+
async function handleMessage(requestMessage, updateHeaders, telepactSchema, middleware, functionRouter, onError, onAuth) {
|
|
1995
2023
|
const responseHeaders = {};
|
|
1996
2024
|
const requestHeaders = requestMessage.headers;
|
|
1997
2025
|
const requestBody = requestMessage.body;
|
|
1998
2026
|
const parsedTelepactSchema = telepactSchema.parsed;
|
|
1999
2027
|
const requestEntry = Object.entries(requestBody)[0];
|
|
2000
|
-
|
|
2028
|
+
updateHeaders?.(requestHeaders);
|
|
2001
2029
|
const requestTargetInit = requestEntry[0];
|
|
2002
2030
|
const requestPayload = requestEntry[1];
|
|
2003
2031
|
let unknownTarget;
|
|
@@ -2035,12 +2063,13 @@ var Telepact = (function (exports, msgpackr, crc32) {
|
|
|
2035
2063
|
Object.assign(requestHeaders, authHeaders);
|
|
2036
2064
|
}
|
|
2037
2065
|
catch (error) {
|
|
2066
|
+
const wrapped = new TelepactError(`telepact auth handler failed while handling ${functionName}`, 'handler', error);
|
|
2038
2067
|
try {
|
|
2039
|
-
onError(
|
|
2068
|
+
onError(wrapped);
|
|
2040
2069
|
}
|
|
2041
2070
|
catch (ignored) {
|
|
2042
2071
|
}
|
|
2043
|
-
return
|
|
2072
|
+
return buildUnknownErrorMessage(wrapped, responseHeaders);
|
|
2044
2073
|
}
|
|
2045
2074
|
}
|
|
2046
2075
|
if ('@bin_' in requestHeaders) {
|
|
@@ -2108,16 +2137,17 @@ var Telepact = (function (exports, msgpackr, crc32) {
|
|
|
2108
2137
|
}
|
|
2109
2138
|
else {
|
|
2110
2139
|
try {
|
|
2111
|
-
resultMessage = await
|
|
2140
|
+
resultMessage = await middleware(callMessage, functionRouter);
|
|
2112
2141
|
}
|
|
2113
2142
|
catch (e) {
|
|
2143
|
+
const wrapped = new TelepactError(`telepact handler failed while handling ${functionName}`, 'handler', e);
|
|
2114
2144
|
try {
|
|
2115
|
-
onError(
|
|
2145
|
+
onError(wrapped);
|
|
2116
2146
|
}
|
|
2117
2147
|
catch (error) {
|
|
2118
2148
|
// Ignore error
|
|
2119
2149
|
}
|
|
2120
|
-
return
|
|
2150
|
+
return buildUnknownErrorMessage(wrapped, responseHeaders);
|
|
2121
2151
|
}
|
|
2122
2152
|
}
|
|
2123
2153
|
const resultUnion = resultMessage.body;
|
|
@@ -2195,7 +2225,7 @@ var Telepact = (function (exports, msgpackr, crc32) {
|
|
|
2195
2225
|
}
|
|
2196
2226
|
}
|
|
2197
2227
|
|
|
2198
|
-
async function processBytes(requestMessageBytes,
|
|
2228
|
+
async function processBytes(requestMessageBytes, updateHeaders, serializer, telepactSchema, onError, onRequest, onResponse, onAuth, middleware, functionRouter) {
|
|
2199
2229
|
try {
|
|
2200
2230
|
const requestMessage = parseRequestMessage(requestMessageBytes, serializer, telepactSchema, onError);
|
|
2201
2231
|
try {
|
|
@@ -2204,7 +2234,7 @@ var Telepact = (function (exports, msgpackr, crc32) {
|
|
|
2204
2234
|
catch (error) {
|
|
2205
2235
|
// Handle error
|
|
2206
2236
|
}
|
|
2207
|
-
const responseMessage = await handleMessage(requestMessage,
|
|
2237
|
+
const responseMessage = await handleMessage(requestMessage, updateHeaders, telepactSchema, middleware, functionRouter, onError, onAuth);
|
|
2208
2238
|
try {
|
|
2209
2239
|
onResponse(responseMessage);
|
|
2210
2240
|
}
|
|
@@ -2225,7 +2255,7 @@ var Telepact = (function (exports, msgpackr, crc32) {
|
|
|
2225
2255
|
catch (error) {
|
|
2226
2256
|
// Handle error
|
|
2227
2257
|
}
|
|
2228
|
-
const unknownResponseBytes = serializer.serialize(
|
|
2258
|
+
const unknownResponseBytes = serializer.serialize(buildUnknownErrorMessage(wrapped));
|
|
2229
2259
|
return { bytes: unknownResponseBytes, headers: {} };
|
|
2230
2260
|
}
|
|
2231
2261
|
return { bytes: responseBytes, headers: responseMessage.headers };
|
|
@@ -2242,7 +2272,7 @@ var Telepact = (function (exports, msgpackr, crc32) {
|
|
|
2242
2272
|
catch (error) {
|
|
2243
2273
|
// Handle error
|
|
2244
2274
|
}
|
|
2245
|
-
const responseBytes = serializer.serialize(
|
|
2275
|
+
const responseBytes = serializer.serialize(buildUnknownErrorMessage(wrapped));
|
|
2246
2276
|
return { bytes: responseBytes, headers: {} };
|
|
2247
2277
|
}
|
|
2248
2278
|
}
|
|
@@ -2318,16 +2348,32 @@ var Telepact = (function (exports, msgpackr, crc32) {
|
|
|
2318
2348
|
}
|
|
2319
2349
|
}
|
|
2320
2350
|
|
|
2351
|
+
class FunctionRouter {
|
|
2352
|
+
functionRoutes;
|
|
2353
|
+
constructor(functionRoutes) {
|
|
2354
|
+
this.functionRoutes = functionRoutes;
|
|
2355
|
+
}
|
|
2356
|
+
async route(requestMessage) {
|
|
2357
|
+
const functionName = requestMessage.getBodyTarget();
|
|
2358
|
+
const functionRoute = this.functionRoutes[functionName];
|
|
2359
|
+
if (functionRoute === undefined) {
|
|
2360
|
+
throw new Error(`Unknown function: ${functionName}`);
|
|
2361
|
+
}
|
|
2362
|
+
return await functionRoute(functionName, requestMessage);
|
|
2363
|
+
}
|
|
2364
|
+
}
|
|
2321
2365
|
class Server {
|
|
2322
|
-
|
|
2366
|
+
functionRouter;
|
|
2367
|
+
middleware;
|
|
2323
2368
|
onError;
|
|
2324
2369
|
onRequest;
|
|
2325
2370
|
onResponse;
|
|
2326
2371
|
onAuth;
|
|
2327
2372
|
telepactSchema;
|
|
2328
2373
|
serializer;
|
|
2329
|
-
constructor(telepactSchema,
|
|
2330
|
-
this.
|
|
2374
|
+
constructor(telepactSchema, functionRouter, options) {
|
|
2375
|
+
this.functionRouter = functionRouter;
|
|
2376
|
+
this.middleware = options.middleware;
|
|
2331
2377
|
this.onError = options.onError;
|
|
2332
2378
|
this.onRequest = options.onRequest;
|
|
2333
2379
|
this.onResponse = options.onResponse;
|
|
@@ -2341,8 +2387,8 @@ var Telepact = (function (exports, msgpackr, crc32) {
|
|
|
2341
2387
|
throw new Error('Unauthenticated server. Either define a `union.Auth_` in your schema or set `options.authRequired` to `false`.');
|
|
2342
2388
|
}
|
|
2343
2389
|
}
|
|
2344
|
-
async process(requestMessageBytes,
|
|
2345
|
-
return await processBytes(requestMessageBytes,
|
|
2390
|
+
async process(requestMessageBytes, updateHeaders) {
|
|
2391
|
+
return await processBytes(requestMessageBytes, updateHeaders, this.serializer, this.telepactSchema, this.onError, this.onRequest, this.onResponse, this.onAuth, this.middleware, this.functionRouter);
|
|
2346
2392
|
}
|
|
2347
2393
|
}
|
|
2348
2394
|
class ServerOptions {
|
|
@@ -2350,6 +2396,7 @@ var Telepact = (function (exports, msgpackr, crc32) {
|
|
|
2350
2396
|
onRequest;
|
|
2351
2397
|
onResponse;
|
|
2352
2398
|
onAuth;
|
|
2399
|
+
middleware;
|
|
2353
2400
|
authRequired;
|
|
2354
2401
|
serialization;
|
|
2355
2402
|
constructor() {
|
|
@@ -2357,6 +2404,7 @@ var Telepact = (function (exports, msgpackr, crc32) {
|
|
|
2357
2404
|
this.onRequest = (m) => { };
|
|
2358
2405
|
this.onResponse = (m) => { };
|
|
2359
2406
|
this.onAuth = (headers) => ({});
|
|
2407
|
+
this.middleware = async (requestMessage, functionRouter) => await functionRouter.route(requestMessage);
|
|
2360
2408
|
this.authRequired = true;
|
|
2361
2409
|
this.serialization = new DefaultSerialization();
|
|
2362
2410
|
}
|
|
@@ -2656,6 +2704,7 @@ var Telepact = (function (exports, msgpackr, crc32) {
|
|
|
2656
2704
|
{
|
|
2657
2705
|
"///": "The server implementation raised an unknown error.",
|
|
2658
2706
|
ErrorUnknown_: {
|
|
2707
|
+
caseId: "string"
|
|
2659
2708
|
}
|
|
2660
2709
|
},
|
|
2661
2710
|
{
|
|
@@ -11833,8 +11882,10 @@ var Telepact = (function (exports, msgpackr, crc32) {
|
|
|
11833
11882
|
const serverOptions = new ServerOptions();
|
|
11834
11883
|
serverOptions.onError = options.onError;
|
|
11835
11884
|
serverOptions.authRequired = false;
|
|
11885
|
+
serverOptions.middleware = async (requestMessage) => await this.handle(requestMessage);
|
|
11836
11886
|
const telepactSchema = new TelepactSchema(mockTelepactSchema.original, mockTelepactSchema.full, mockTelepactSchema.parsed, mockTelepactSchema.parsedRequestHeaders, mockTelepactSchema.parsedResponseHeaders);
|
|
11837
|
-
|
|
11887
|
+
const functionRouter = new FunctionRouter({});
|
|
11888
|
+
this.server = new Server(telepactSchema, functionRouter, serverOptions);
|
|
11838
11889
|
}
|
|
11839
11890
|
random;
|
|
11840
11891
|
enableGeneratedDefaultStub;
|
|
@@ -12424,6 +12475,7 @@ var Telepact = (function (exports, msgpackr, crc32) {
|
|
|
12424
12475
|
exports.Client = Client;
|
|
12425
12476
|
exports.ClientBinaryStrategy = ClientBinaryStrategy;
|
|
12426
12477
|
exports.ClientOptions = ClientOptions;
|
|
12478
|
+
exports.FunctionRouter = FunctionRouter;
|
|
12427
12479
|
exports.Message = Message;
|
|
12428
12480
|
exports.MockServer = MockServer;
|
|
12429
12481
|
exports.MockServerOptions = MockServerOptions;
|
package/dist/src/MockServer.js
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
//| limitations under the License.
|
|
15
15
|
//|
|
|
16
16
|
import { TelepactSchema } from './TelepactSchema.js';
|
|
17
|
-
import { Server, ServerOptions as ServerOptions } from './Server.js';
|
|
17
|
+
import { FunctionRouter, Server, ServerOptions as ServerOptions } from './Server.js';
|
|
18
18
|
import { RandomGenerator } from './RandomGenerator.js';
|
|
19
19
|
import { mockHandle } from './internal/mock/MockHandle.js';
|
|
20
20
|
export class MockServer {
|
|
@@ -31,8 +31,10 @@ export class MockServer {
|
|
|
31
31
|
const serverOptions = new ServerOptions();
|
|
32
32
|
serverOptions.onError = options.onError;
|
|
33
33
|
serverOptions.authRequired = false;
|
|
34
|
+
serverOptions.middleware = async (requestMessage) => await this.handle(requestMessage);
|
|
34
35
|
const telepactSchema = new TelepactSchema(mockTelepactSchema.original, mockTelepactSchema.full, mockTelepactSchema.parsed, mockTelepactSchema.parsedRequestHeaders, mockTelepactSchema.parsedResponseHeaders);
|
|
35
|
-
|
|
36
|
+
const functionRouter = new FunctionRouter({});
|
|
37
|
+
this.server = new Server(telepactSchema, functionRouter, serverOptions);
|
|
36
38
|
}
|
|
37
39
|
random;
|
|
38
40
|
enableGeneratedDefaultStub;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MockServer.js","sourceRoot":"","sources":["../../src/MockServer.ts"],"names":[],"mappings":"AAAA,GAAG;AACH,mCAAmC;AACnC,GAAG;AACH,oEAAoE;AACpE,qEAAqE;AACrE,4CAA4C;AAC5C,GAAG;AACH,gDAAgD;AAChD,GAAG;AACH,wEAAwE;AACxE,sEAAsE;AACtE,6EAA6E;AAC7E,wEAAwE;AACxE,mCAAmC;AACnC,GAAG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EAAE,MAAM,EAAE,aAAa,IAAI,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"MockServer.js","sourceRoot":"","sources":["../../src/MockServer.ts"],"names":[],"mappings":"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"}
|
package/dist/src/Server.d.ts
CHANGED
|
@@ -3,22 +3,33 @@ import { Message } from './Message.js';
|
|
|
3
3
|
import { TelepactSchema } from './TelepactSchema.js';
|
|
4
4
|
import { Serialization } from './Serialization.js';
|
|
5
5
|
import { Response } from './Response.js';
|
|
6
|
+
export type FunctionRoute = (functionName: string, requestMessage: Message) => Promise<Message>;
|
|
7
|
+
export type FunctionRoutes = Record<string, FunctionRoute>;
|
|
8
|
+
export type Middleware = (requestMessage: Message, functionRouter: FunctionRouter) => Promise<Message>;
|
|
9
|
+
export type UpdateHeaders = (headers: Record<string, any>) => void;
|
|
10
|
+
export declare class FunctionRouter {
|
|
11
|
+
functionRoutes: FunctionRoutes;
|
|
12
|
+
constructor(functionRoutes: FunctionRoutes);
|
|
13
|
+
route(requestMessage: Message): Promise<Message>;
|
|
14
|
+
}
|
|
6
15
|
export declare class Server {
|
|
7
|
-
|
|
16
|
+
functionRouter: FunctionRouter;
|
|
17
|
+
middleware: Middleware;
|
|
8
18
|
onError: (error: any) => void;
|
|
9
19
|
onRequest: (message: Message) => void;
|
|
10
20
|
onResponse: (message: Message) => void;
|
|
11
21
|
onAuth: (headers: Record<string, any>) => Record<string, any>;
|
|
12
22
|
telepactSchema: TelepactSchema;
|
|
13
23
|
serializer: Serializer;
|
|
14
|
-
constructor(telepactSchema: TelepactSchema,
|
|
15
|
-
process(requestMessageBytes: Uint8Array,
|
|
24
|
+
constructor(telepactSchema: TelepactSchema, functionRouter: FunctionRouter, options: ServerOptions);
|
|
25
|
+
process(requestMessageBytes: Uint8Array, updateHeaders?: UpdateHeaders): Promise<Response>;
|
|
16
26
|
}
|
|
17
27
|
export declare class ServerOptions {
|
|
18
28
|
onError: (error: any) => void;
|
|
19
29
|
onRequest: (message: Message) => void;
|
|
20
30
|
onResponse: (message: Message) => void;
|
|
21
31
|
onAuth: (headers: Record<string, any>) => Record<string, any>;
|
|
32
|
+
middleware: Middleware;
|
|
22
33
|
authRequired: boolean;
|
|
23
34
|
serialization: Serialization;
|
|
24
35
|
constructor();
|
package/dist/src/Server.js
CHANGED
|
@@ -19,16 +19,32 @@ import { ServerBinaryEncoder } from './internal/binary/ServerBinaryEncoder.js';
|
|
|
19
19
|
import { constructBinaryEncoding } from './internal/binary/ConstructBinaryEncoding.js';
|
|
20
20
|
import { processBytes } from './internal/ProcessBytes.js';
|
|
21
21
|
import { ServerBase64Encoder } from './internal/binary/ServerBase64Encoder.js';
|
|
22
|
+
export class FunctionRouter {
|
|
23
|
+
functionRoutes;
|
|
24
|
+
constructor(functionRoutes) {
|
|
25
|
+
this.functionRoutes = functionRoutes;
|
|
26
|
+
}
|
|
27
|
+
async route(requestMessage) {
|
|
28
|
+
const functionName = requestMessage.getBodyTarget();
|
|
29
|
+
const functionRoute = this.functionRoutes[functionName];
|
|
30
|
+
if (functionRoute === undefined) {
|
|
31
|
+
throw new Error(`Unknown function: ${functionName}`);
|
|
32
|
+
}
|
|
33
|
+
return await functionRoute(functionName, requestMessage);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
22
36
|
export class Server {
|
|
23
|
-
|
|
37
|
+
functionRouter;
|
|
38
|
+
middleware;
|
|
24
39
|
onError;
|
|
25
40
|
onRequest;
|
|
26
41
|
onResponse;
|
|
27
42
|
onAuth;
|
|
28
43
|
telepactSchema;
|
|
29
44
|
serializer;
|
|
30
|
-
constructor(telepactSchema,
|
|
31
|
-
this.
|
|
45
|
+
constructor(telepactSchema, functionRouter, options) {
|
|
46
|
+
this.functionRouter = functionRouter;
|
|
47
|
+
this.middleware = options.middleware;
|
|
32
48
|
this.onError = options.onError;
|
|
33
49
|
this.onRequest = options.onRequest;
|
|
34
50
|
this.onResponse = options.onResponse;
|
|
@@ -42,8 +58,8 @@ export class Server {
|
|
|
42
58
|
throw new Error('Unauthenticated server. Either define a `union.Auth_` in your schema or set `options.authRequired` to `false`.');
|
|
43
59
|
}
|
|
44
60
|
}
|
|
45
|
-
async process(requestMessageBytes,
|
|
46
|
-
return await processBytes(requestMessageBytes,
|
|
61
|
+
async process(requestMessageBytes, updateHeaders) {
|
|
62
|
+
return await processBytes(requestMessageBytes, updateHeaders, this.serializer, this.telepactSchema, this.onError, this.onRequest, this.onResponse, this.onAuth, this.middleware, this.functionRouter);
|
|
47
63
|
}
|
|
48
64
|
}
|
|
49
65
|
export class ServerOptions {
|
|
@@ -51,6 +67,7 @@ export class ServerOptions {
|
|
|
51
67
|
onRequest;
|
|
52
68
|
onResponse;
|
|
53
69
|
onAuth;
|
|
70
|
+
middleware;
|
|
54
71
|
authRequired;
|
|
55
72
|
serialization;
|
|
56
73
|
constructor() {
|
|
@@ -58,6 +75,7 @@ export class ServerOptions {
|
|
|
58
75
|
this.onRequest = (m) => { };
|
|
59
76
|
this.onResponse = (m) => { };
|
|
60
77
|
this.onAuth = (headers) => ({});
|
|
78
|
+
this.middleware = async (requestMessage, functionRouter) => await functionRouter.route(requestMessage);
|
|
61
79
|
this.authRequired = true;
|
|
62
80
|
this.serialization = new DefaultSerialization();
|
|
63
81
|
}
|
package/dist/src/Server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Server.js","sourceRoot":"","sources":["../../src/Server.ts"],"names":[],"mappings":"AAAA,GAAG;AACH,mCAAmC;AACnC,GAAG;AACH,oEAAoE;AACpE,qEAAqE;AACrE,4CAA4C;AAC5C,GAAG;AACH,gDAAgD;AAChD,GAAG;AACH,wEAAwE;AACxE,sEAAsE;AACtE,6EAA6E;AAC7E,wEAAwE;AACxE,mCAAmC;AACnC,GAAG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAG/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"Server.js","sourceRoot":"","sources":["../../src/Server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export type TelepactErrorKind = 'parse' | 'validation' | 'serialization' | 'transport' | 'handler';
|
|
2
2
|
export declare class TelepactError extends Error {
|
|
3
3
|
kind?: TelepactErrorKind;
|
|
4
|
+
caseId: string;
|
|
4
5
|
cause?: Error;
|
|
5
6
|
constructor(message: string, kind?: TelepactErrorKind, cause?: unknown);
|
|
6
7
|
constructor(cause: unknown, kind?: TelepactErrorKind);
|
|
@@ -13,6 +13,28 @@
|
|
|
13
13
|
//| See the License for the specific language governing permissions and
|
|
14
14
|
//| limitations under the License.
|
|
15
15
|
//|
|
|
16
|
+
function fillRandomValues(bytes) {
|
|
17
|
+
const cryptoObject = globalThis.crypto;
|
|
18
|
+
if (typeof cryptoObject?.getRandomValues === 'function') {
|
|
19
|
+
cryptoObject.getRandomValues(bytes);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
for (let i = 0; i < bytes.length; i += 1) {
|
|
23
|
+
bytes[i] = Math.floor(Math.random() * 256);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function createCaseId() {
|
|
27
|
+
const cryptoObject = globalThis.crypto;
|
|
28
|
+
if (typeof cryptoObject?.randomUUID === 'function') {
|
|
29
|
+
return cryptoObject.randomUUID();
|
|
30
|
+
}
|
|
31
|
+
const bytes = new Uint8Array(16);
|
|
32
|
+
fillRandomValues(bytes);
|
|
33
|
+
bytes[6] = (bytes[6] & 0x0f) | 0x40;
|
|
34
|
+
bytes[8] = (bytes[8] & 0x3f) | 0x80;
|
|
35
|
+
const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');
|
|
36
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
37
|
+
}
|
|
16
38
|
function toError(error) {
|
|
17
39
|
if (error instanceof Error) {
|
|
18
40
|
return error;
|
|
@@ -27,6 +49,7 @@ function toError(error) {
|
|
|
27
49
|
}
|
|
28
50
|
export class TelepactError extends Error {
|
|
29
51
|
kind;
|
|
52
|
+
caseId;
|
|
30
53
|
cause;
|
|
31
54
|
constructor(arg, kind, cause) {
|
|
32
55
|
const resolvedCause = typeof arg === 'string' ? toError(cause) : toError(arg);
|
|
@@ -37,6 +60,7 @@ export class TelepactError extends Error {
|
|
|
37
60
|
Object.setPrototypeOf(this, TelepactError.prototype);
|
|
38
61
|
this.name = 'TelepactError';
|
|
39
62
|
this.kind = kind;
|
|
63
|
+
this.caseId = createCaseId();
|
|
40
64
|
this.cause = resolvedCause;
|
|
41
65
|
if (resolvedCause?.stack) {
|
|
42
66
|
this.stack = resolvedCause.stack;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TelepactError.js","sourceRoot":"","sources":["../../src/TelepactError.ts"],"names":[],"mappings":"AAAA,GAAG;AACH,mCAAmC;AACnC,GAAG;AACH,oEAAoE;AACpE,qEAAqE;AACrE,4CAA4C;AAC5C,GAAG;AACH,gDAAgD;AAChD,GAAG;AACH,wEAAwE;AACxE,sEAAsE;AACtE,6EAA6E;AAC7E,wEAAwE;AACxE,mCAAmC;AACnC,GAAG;AAIH,SAAS,OAAO,CAAC,KAAc;IAC3B,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,OAAO,aAAc,SAAQ,KAAK;IACpC,IAAI,CAAqB;
|
|
1
|
+
{"version":3,"file":"TelepactError.js","sourceRoot":"","sources":["../../src/TelepactError.ts"],"names":[],"mappings":"AAAA,GAAG;AACH,mCAAmC;AACnC,GAAG;AACH,oEAAoE;AACpE,qEAAqE;AACrE,4CAA4C;AAC5C,GAAG;AACH,gDAAgD;AAChD,GAAG;AACH,wEAAwE;AACxE,sEAAsE;AACtE,6EAA6E;AAC7E,wEAAwE;AACxE,mCAAmC;AACnC,GAAG;AAIH,SAAS,gBAAgB,CAAC,KAAiB;IACvC,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC;IACvC,IAAI,OAAO,YAAY,EAAE,eAAe,KAAK,UAAU,EAAE,CAAC;QACtD,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACpC,OAAO;IACX,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;IAC/C,CAAC;AACL,CAAC;AAED,SAAS,YAAY;IACjB,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC;IACvC,IAAI,OAAO,YAAY,EAAE,UAAU,KAAK,UAAU,EAAE,CAAC;QACjD,OAAO,YAAY,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IACjC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACpC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACpC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrF,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;AAC/G,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC3B,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,OAAO,aAAc,SAAQ,KAAK;IACpC,IAAI,CAAqB;IACzB,MAAM,CAAS;IACN,KAAK,CAAS;IAIvB,YAAY,GAAqB,EAAE,IAAwB,EAAE,KAAe;QACxE,MAAM,aAAa,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9E,MAAM,OAAO,GAAG,OAAO,GAAG,KAAK,QAAQ;YACnC,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,aAAa,EAAE,OAAO,IAAI,gBAAgB,CAAC;QAEjD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;QAErD,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC;QAE3B,IAAI,aAAa,EAAE,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;QACrC,CAAC;IACL,CAAC;CACJ"}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
import { Message } from '../Message.js';
|
|
2
2
|
import { TelepactSchema } from '../TelepactSchema.js';
|
|
3
|
-
|
|
3
|
+
import { UpdateHeaders } from '../Server.js';
|
|
4
|
+
export declare function handleMessage(requestMessage: Message, updateHeaders: UpdateHeaders | undefined, telepactSchema: TelepactSchema, middleware: (requestMessage: Message, functionRouter: {
|
|
5
|
+
route: (message: Message) => Promise<Message>;
|
|
6
|
+
}) => Promise<Message>, functionRouter: {
|
|
7
|
+
route: (message: Message) => Promise<Message>;
|
|
8
|
+
}, onError: (error: Error) => void, onAuth: (headers: Record<string, any>) => Record<string, any>): Promise<Message>;
|
|
@@ -24,13 +24,14 @@ import { ValidateContext } from './validation/ValidateContext.js';
|
|
|
24
24
|
import { serverBase64Decode } from './binary/ServerBase64Decode.js';
|
|
25
25
|
import { getApiDefinitionsWithExamples } from './GetApiDefinitionsWithExamples.js';
|
|
26
26
|
import { TelepactError } from '../TelepactError.js';
|
|
27
|
-
|
|
27
|
+
import { buildUnknownErrorMessage } from './UnknownError.js';
|
|
28
|
+
export async function handleMessage(requestMessage, updateHeaders, telepactSchema, middleware, functionRouter, onError, onAuth) {
|
|
28
29
|
const responseHeaders = {};
|
|
29
30
|
const requestHeaders = requestMessage.headers;
|
|
30
31
|
const requestBody = requestMessage.body;
|
|
31
32
|
const parsedTelepactSchema = telepactSchema.parsed;
|
|
32
33
|
const requestEntry = Object.entries(requestBody)[0];
|
|
33
|
-
|
|
34
|
+
updateHeaders?.(requestHeaders);
|
|
34
35
|
const requestTargetInit = requestEntry[0];
|
|
35
36
|
const requestPayload = requestEntry[1];
|
|
36
37
|
let unknownTarget;
|
|
@@ -68,12 +69,13 @@ export async function handleMessage(requestMessage, overrideHeaders, telepactSch
|
|
|
68
69
|
Object.assign(requestHeaders, authHeaders);
|
|
69
70
|
}
|
|
70
71
|
catch (error) {
|
|
72
|
+
const wrapped = new TelepactError(`telepact auth handler failed while handling ${functionName}`, 'handler', error);
|
|
71
73
|
try {
|
|
72
|
-
onError(
|
|
74
|
+
onError(wrapped);
|
|
73
75
|
}
|
|
74
76
|
catch (ignored) {
|
|
75
77
|
}
|
|
76
|
-
return
|
|
78
|
+
return buildUnknownErrorMessage(wrapped, responseHeaders);
|
|
77
79
|
}
|
|
78
80
|
}
|
|
79
81
|
if ('@bin_' in requestHeaders) {
|
|
@@ -141,16 +143,17 @@ export async function handleMessage(requestMessage, overrideHeaders, telepactSch
|
|
|
141
143
|
}
|
|
142
144
|
else {
|
|
143
145
|
try {
|
|
144
|
-
resultMessage = await
|
|
146
|
+
resultMessage = await middleware(callMessage, functionRouter);
|
|
145
147
|
}
|
|
146
148
|
catch (e) {
|
|
149
|
+
const wrapped = new TelepactError(`telepact handler failed while handling ${functionName}`, 'handler', e);
|
|
147
150
|
try {
|
|
148
|
-
onError(
|
|
151
|
+
onError(wrapped);
|
|
149
152
|
}
|
|
150
153
|
catch (error) {
|
|
151
154
|
// Ignore error
|
|
152
155
|
}
|
|
153
|
-
return
|
|
156
|
+
return buildUnknownErrorMessage(wrapped, responseHeaders);
|
|
154
157
|
}
|
|
155
158
|
}
|
|
156
159
|
const resultUnion = resultMessage.body;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandleMessage.js","sourceRoot":"","sources":["../../../src/internal/HandleMessage.ts"],"names":[],"mappings":"AAAA,GAAG;AACH,mCAAmC;AACnC,GAAG;AACH,oEAAoE;AACpE,qEAAqE;AACrE,4CAA4C;AAC5C,GAAG;AACH,gDAAgD;AAChD,GAAG;AACH,wEAAwE;AACxE,sEAAsE;AACtE,6EAA6E;AAC7E,wEAAwE;AACxE,mCAAmC;AACnC,GAAG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAK/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,EAAE,wCAAwC,EAAE,MAAM,0DAA0D,CAAC;AACpH,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,aAAa,CAC/B,cAAuB,EACvB,
|
|
1
|
+
{"version":3,"file":"HandleMessage.js","sourceRoot":"","sources":["../../../src/internal/HandleMessage.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,13 @@ import { Serializer } from '../Serializer.js';
|
|
|
2
2
|
import { TelepactSchema } from '../TelepactSchema.js';
|
|
3
3
|
import { Message } from '../Message.js';
|
|
4
4
|
import { Response } from '../Response.js';
|
|
5
|
+
import { UpdateHeaders } from '../Server.js';
|
|
5
6
|
export type ErrorHandler = (error: any) => void;
|
|
6
7
|
export type RequestHandler = (message: Message) => void;
|
|
7
8
|
export type ResponseHandler = (message: Message) => void;
|
|
8
9
|
export type AuthHandler = (headers: Record<string, any>) => Record<string, any>;
|
|
9
|
-
export type
|
|
10
|
-
|
|
10
|
+
export type FunctionRouter = {
|
|
11
|
+
route: (message: Message) => Promise<Message>;
|
|
12
|
+
};
|
|
13
|
+
export type Middleware = (requestMessage: Message, functionRouter: FunctionRouter) => Promise<Message>;
|
|
14
|
+
export declare function processBytes(requestMessageBytes: Uint8Array, updateHeaders: UpdateHeaders | undefined, serializer: Serializer, telepactSchema: TelepactSchema, onError: ErrorHandler, onRequest: RequestHandler, onResponse: ResponseHandler, onAuth: AuthHandler, middleware: Middleware, functionRouter: FunctionRouter): Promise<Response>;
|
|
@@ -13,12 +13,12 @@
|
|
|
13
13
|
//| See the License for the specific language governing permissions and
|
|
14
14
|
//| limitations under the License.
|
|
15
15
|
//|
|
|
16
|
-
import { Message } from '../Message.js';
|
|
17
16
|
import { handleMessage } from '../internal/HandleMessage.js';
|
|
18
17
|
import { parseRequestMessage } from '../internal/ParseRequestMessage.js';
|
|
19
18
|
import { SerializationError } from '../SerializationError.js';
|
|
20
19
|
import { TelepactError } from '../TelepactError.js';
|
|
21
|
-
|
|
20
|
+
import { buildUnknownErrorMessage } from './UnknownError.js';
|
|
21
|
+
export async function processBytes(requestMessageBytes, updateHeaders, serializer, telepactSchema, onError, onRequest, onResponse, onAuth, middleware, functionRouter) {
|
|
22
22
|
try {
|
|
23
23
|
const requestMessage = parseRequestMessage(requestMessageBytes, serializer, telepactSchema, onError);
|
|
24
24
|
try {
|
|
@@ -27,7 +27,7 @@ export async function processBytes(requestMessageBytes, overrideHeaders, seriali
|
|
|
27
27
|
catch (error) {
|
|
28
28
|
// Handle error
|
|
29
29
|
}
|
|
30
|
-
const responseMessage = await handleMessage(requestMessage,
|
|
30
|
+
const responseMessage = await handleMessage(requestMessage, updateHeaders, telepactSchema, middleware, functionRouter, onError, onAuth);
|
|
31
31
|
try {
|
|
32
32
|
onResponse(responseMessage);
|
|
33
33
|
}
|
|
@@ -48,7 +48,7 @@ export async function processBytes(requestMessageBytes, overrideHeaders, seriali
|
|
|
48
48
|
catch (error) {
|
|
49
49
|
// Handle error
|
|
50
50
|
}
|
|
51
|
-
const unknownResponseBytes = serializer.serialize(
|
|
51
|
+
const unknownResponseBytes = serializer.serialize(buildUnknownErrorMessage(wrapped));
|
|
52
52
|
return { bytes: unknownResponseBytes, headers: {} };
|
|
53
53
|
}
|
|
54
54
|
return { bytes: responseBytes, headers: responseMessage.headers };
|
|
@@ -65,7 +65,7 @@ export async function processBytes(requestMessageBytes, overrideHeaders, seriali
|
|
|
65
65
|
catch (error) {
|
|
66
66
|
// Handle error
|
|
67
67
|
}
|
|
68
|
-
const responseBytes = serializer.serialize(
|
|
68
|
+
const responseBytes = serializer.serialize(buildUnknownErrorMessage(wrapped));
|
|
69
69
|
return { bytes: responseBytes, headers: {} };
|
|
70
70
|
}
|
|
71
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProcessBytes.js","sourceRoot":"","sources":["../../../src/internal/ProcessBytes.ts"],"names":[],"mappings":"AAAA,GAAG;AACH,mCAAmC;AACnC,GAAG;AACH,oEAAoE;AACpE,qEAAqE;AACrE,4CAA4C;AAC5C,GAAG;AACH,gDAAgD;AAChD,GAAG;AACH,wEAAwE;AACxE,sEAAsE;AACtE,6EAA6E;AAC7E,wEAAwE;AACxE,mCAAmC;AACnC,GAAG;
|
|
1
|
+
{"version":3,"file":"ProcessBytes.js","sourceRoot":"","sources":["../../../src/internal/ProcessBytes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//|
|
|
2
|
+
//| Copyright The Telepact Authors
|
|
3
|
+
//|
|
|
4
|
+
//| Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
//| you may not use this file except in compliance with the License.
|
|
6
|
+
//| You may obtain a copy of the License at
|
|
7
|
+
//|
|
|
8
|
+
//| https://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
//|
|
|
10
|
+
//| Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
//| distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
//| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
//| See the License for the specific language governing permissions and
|
|
14
|
+
//| limitations under the License.
|
|
15
|
+
//|
|
|
16
|
+
import { Message } from '../Message.js';
|
|
17
|
+
export function buildUnknownErrorMessage(error, headers = {}) {
|
|
18
|
+
return new Message(headers, { ErrorUnknown_: { caseId: error.caseId } });
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=UnknownError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnknownError.js","sourceRoot":"","sources":["../../../src/internal/UnknownError.ts"],"names":[],"mappings":"AAAA,GAAG;AACH,mCAAmC;AACnC,GAAG;AACH,oEAAoE;AACpE,qEAAqE;AACrE,4CAA4C;AAC5C,GAAG;AACH,gDAAgD;AAChD,GAAG;AACH,wEAAwE;AACxE,sEAAsE;AACtE,6EAA6E;AAC7E,wEAAwE;AACxE,mCAAmC;AACnC,GAAG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,MAAM,UAAU,wBAAwB,CAAC,KAAoB,EAAE,UAA+B,EAAE;IAC5F,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC7E,CAAC"}
|
package/package.json
CHANGED