@restatedev/restate-sdk-cloudflare-workers 1.9.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/_virtual/rolldown_runtime.cjs +25 -0
- package/dist/common_api.cjs +25 -0
- package/dist/common_api.d.cts +30 -0
- package/dist/common_api.d.cts.map +1 -0
- package/dist/common_api.d.ts +30 -0
- package/dist/common_api.d.ts.map +1 -0
- package/dist/common_api.js +19 -0
- package/dist/common_api.js.map +1 -0
- package/dist/context.cjs +29 -0
- package/dist/context.d.cts +699 -0
- package/dist/context.d.cts.map +1 -0
- package/dist/context.d.ts +699 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +29 -0
- package/dist/context.js.map +1 -0
- package/dist/context_impl.cjs +441 -0
- package/dist/context_impl.js +440 -0
- package/dist/context_impl.js.map +1 -0
- package/dist/endpoint/components.cjs +257 -0
- package/dist/endpoint/components.js +253 -0
- package/dist/endpoint/components.js.map +1 -0
- package/dist/endpoint/endpoint.cjs +117 -0
- package/dist/endpoint/endpoint.js +118 -0
- package/dist/endpoint/endpoint.js.map +1 -0
- package/dist/endpoint/fetch_endpoint.cjs +41 -0
- package/dist/endpoint/fetch_endpoint.d.cts +39 -0
- package/dist/endpoint/fetch_endpoint.d.cts.map +1 -0
- package/dist/endpoint/fetch_endpoint.d.ts +39 -0
- package/dist/endpoint/fetch_endpoint.d.ts.map +1 -0
- package/dist/endpoint/fetch_endpoint.js +42 -0
- package/dist/endpoint/fetch_endpoint.js.map +1 -0
- package/dist/endpoint/handlers/fetch.cjs +21 -0
- package/dist/endpoint/handlers/fetch.js +21 -0
- package/dist/endpoint/handlers/fetch.js.map +1 -0
- package/dist/endpoint/handlers/generic.cjs +328 -0
- package/dist/endpoint/handlers/generic.js +324 -0
- package/dist/endpoint/handlers/generic.js.map +1 -0
- package/dist/endpoint/handlers/lambda.cjs +93 -0
- package/dist/endpoint/handlers/lambda.js +89 -0
- package/dist/endpoint/handlers/lambda.js.map +1 -0
- package/dist/endpoint/lambda_endpoint.cjs +36 -0
- package/dist/endpoint/lambda_endpoint.d.cts +26 -0
- package/dist/endpoint/lambda_endpoint.d.cts.map +1 -0
- package/dist/endpoint/lambda_endpoint.d.ts +26 -0
- package/dist/endpoint/lambda_endpoint.d.ts.map +1 -0
- package/dist/endpoint/lambda_endpoint.js +37 -0
- package/dist/endpoint/lambda_endpoint.js.map +1 -0
- package/dist/endpoint/node_endpoint.cjs +101 -0
- package/dist/endpoint/node_endpoint.js +99 -0
- package/dist/endpoint/node_endpoint.js.map +1 -0
- package/dist/endpoint/types.d.cts +61 -0
- package/dist/endpoint/types.d.cts.map +1 -0
- package/dist/endpoint/types.d.ts +61 -0
- package/dist/endpoint/types.d.ts.map +1 -0
- package/dist/endpoint/withOptions.cjs +15 -0
- package/dist/endpoint/withOptions.js +15 -0
- package/dist/endpoint/withOptions.js.map +1 -0
- package/dist/endpoint.d.cts +112 -0
- package/dist/endpoint.d.cts.map +1 -0
- package/dist/endpoint.d.ts +112 -0
- package/dist/endpoint.d.ts.map +1 -0
- package/dist/fetch.cjs +83 -0
- package/dist/fetch.d.cts +52 -0
- package/dist/fetch.d.cts.map +1 -0
- package/dist/fetch.d.ts +52 -0
- package/dist/fetch.d.ts.map +1 -0
- package/dist/{esm/src/fetch.js → fetch.js} +15 -18
- package/dist/fetch.js.map +1 -0
- package/dist/index.cjs +48 -0
- package/dist/index.d.cts +9 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +7 -0
- package/dist/io.cjs +48 -0
- package/dist/io.js +48 -0
- package/dist/io.js.map +1 -0
- package/dist/lambda.cjs +74 -0
- package/dist/lambda.d.cts +32 -0
- package/dist/lambda.d.cts.map +1 -0
- package/dist/lambda.d.ts +32 -0
- package/dist/lambda.d.ts.map +1 -0
- package/dist/lambda.js +35 -0
- package/dist/lambda.js.map +1 -0
- package/dist/logging/console_logger_transport.cjs +54 -0
- package/dist/logging/console_logger_transport.js +54 -0
- package/dist/logging/console_logger_transport.js.map +1 -0
- package/dist/logging/logger.cjs +43 -0
- package/dist/logging/logger.js +44 -0
- package/dist/logging/logger.js.map +1 -0
- package/dist/logging/logger_transport.cjs +42 -0
- package/dist/logging/logger_transport.d.cts +57 -0
- package/dist/logging/logger_transport.d.cts.map +1 -0
- package/dist/logging/logger_transport.d.ts +57 -0
- package/dist/logging/logger_transport.d.ts.map +1 -0
- package/dist/logging/logger_transport.js +40 -0
- package/dist/logging/logger_transport.js.map +1 -0
- package/dist/node.cjs +90 -0
- package/dist/node.d.cts +51 -0
- package/dist/node.d.cts.map +1 -0
- package/dist/node.d.ts +51 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +50 -0
- package/dist/node.js.map +1 -0
- package/dist/package.cjs +11 -0
- package/dist/package.js +6 -0
- package/dist/package.js.map +1 -0
- package/dist/promises.cjs +234 -0
- package/dist/promises.js +226 -0
- package/dist/promises.js.map +1 -0
- package/dist/types/errors.cjs +110 -0
- package/dist/types/errors.d.cts +71 -0
- package/dist/types/errors.d.cts.map +1 -0
- package/dist/types/errors.d.ts +71 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +102 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/rpc.cjs +425 -0
- package/dist/types/rpc.d.cts +580 -0
- package/dist/types/rpc.d.cts.map +1 -0
- package/dist/types/rpc.d.ts +580 -0
- package/dist/types/rpc.d.ts.map +1 -0
- package/dist/types/rpc.js +406 -0
- package/dist/types/rpc.js.map +1 -0
- package/dist/user_agent.cjs +7 -0
- package/dist/user_agent.js +8 -0
- package/dist/user_agent.js.map +1 -0
- package/dist/utils/completable_promise.cjs +22 -0
- package/dist/utils/completable_promise.js +22 -0
- package/dist/utils/completable_promise.js.map +1 -0
- package/dist/utils/rand.cjs +72 -0
- package/dist/utils/rand.js +71 -0
- package/dist/utils/rand.js.map +1 -0
- package/dist/utils/streams.cjs +14 -0
- package/dist/utils/streams.js +13 -0
- package/dist/utils/streams.js.map +1 -0
- package/package.json +30 -52
- package/dist/esm/src/common_api.d.ts +0 -37
- package/dist/esm/src/common_api.d.ts.map +0 -1
- package/dist/esm/src/common_api.js +0 -32
- package/dist/esm/src/common_api.js.map +0 -1
- package/dist/esm/src/context.d.ts +0 -695
- package/dist/esm/src/context.d.ts.map +0 -1
- package/dist/esm/src/context.js +0 -87
- package/dist/esm/src/context.js.map +0 -1
- package/dist/esm/src/context_impl.d.ts +0 -69
- package/dist/esm/src/context_impl.d.ts.map +0 -1
- package/dist/esm/src/context_impl.js +0 -592
- package/dist/esm/src/context_impl.js.map +0 -1
- package/dist/esm/src/endpoint/components.d.ts +0 -97
- package/dist/esm/src/endpoint/components.d.ts.map +0 -1
- package/dist/esm/src/endpoint/components.js +0 -343
- package/dist/esm/src/endpoint/components.js.map +0 -1
- package/dist/esm/src/endpoint/discovery.d.ts +0 -184
- package/dist/esm/src/endpoint/discovery.d.ts.map +0 -1
- package/dist/esm/src/endpoint/discovery.js +0 -8
- package/dist/esm/src/endpoint/discovery.js.map +0 -1
- package/dist/esm/src/endpoint/endpoint.d.ts +0 -39
- package/dist/esm/src/endpoint/endpoint.d.ts.map +0 -1
- package/dist/esm/src/endpoint/endpoint.js +0 -155
- package/dist/esm/src/endpoint/endpoint.js.map +0 -1
- package/dist/esm/src/endpoint/fetch_endpoint.d.ts +0 -49
- package/dist/esm/src/endpoint/fetch_endpoint.d.ts.map +0 -1
- package/dist/esm/src/endpoint/fetch_endpoint.js +0 -49
- package/dist/esm/src/endpoint/fetch_endpoint.js.map +0 -1
- package/dist/esm/src/endpoint/handlers/fetch.d.ts +0 -5
- package/dist/esm/src/endpoint/handlers/fetch.d.ts.map +0 -1
- package/dist/esm/src/endpoint/handlers/fetch.js +0 -31
- package/dist/esm/src/endpoint/handlers/fetch.js.map +0 -1
- package/dist/esm/src/endpoint/handlers/generic.d.ts +0 -56
- package/dist/esm/src/endpoint/handlers/generic.d.ts.map +0 -1
- package/dist/esm/src/endpoint/handlers/generic.js +0 -447
- package/dist/esm/src/endpoint/handlers/generic.js.map +0 -1
- package/dist/esm/src/endpoint/handlers/lambda.d.ts +0 -10
- package/dist/esm/src/endpoint/handlers/lambda.d.ts.map +0 -1
- package/dist/esm/src/endpoint/handlers/lambda.js +0 -142
- package/dist/esm/src/endpoint/handlers/lambda.js.map +0 -1
- package/dist/esm/src/endpoint/lambda_endpoint.d.ts +0 -30
- package/dist/esm/src/endpoint/lambda_endpoint.d.ts.map +0 -1
- package/dist/esm/src/endpoint/lambda_endpoint.js +0 -48
- package/dist/esm/src/endpoint/lambda_endpoint.js.map +0 -1
- package/dist/esm/src/endpoint/node_endpoint.d.ts +0 -16
- package/dist/esm/src/endpoint/node_endpoint.d.ts.map +0 -1
- package/dist/esm/src/endpoint/node_endpoint.js +0 -111
- package/dist/esm/src/endpoint/node_endpoint.js.map +0 -1
- package/dist/esm/src/endpoint/types.d.ts +0 -55
- package/dist/esm/src/endpoint/types.d.ts.map +0 -1
- package/dist/esm/src/endpoint/types.js +0 -2
- package/dist/esm/src/endpoint/types.js.map +0 -1
- package/dist/esm/src/endpoint/withOptions.d.ts +0 -4
- package/dist/esm/src/endpoint/withOptions.d.ts.map +0 -1
- package/dist/esm/src/endpoint/withOptions.js +0 -19
- package/dist/esm/src/endpoint/withOptions.js.map +0 -1
- package/dist/esm/src/endpoint.d.ts +0 -108
- package/dist/esm/src/endpoint.d.ts.map +0 -1
- package/dist/esm/src/endpoint.js +0 -12
- package/dist/esm/src/endpoint.js.map +0 -1
- package/dist/esm/src/fetch.d.ts +0 -43
- package/dist/esm/src/fetch.d.ts.map +0 -1
- package/dist/esm/src/fetch.js.map +0 -1
- package/dist/esm/src/generated/version.d.ts +0 -2
- package/dist/esm/src/generated/version.d.ts.map +0 -1
- package/dist/esm/src/generated/version.js +0 -2
- package/dist/esm/src/generated/version.js.map +0 -1
- package/dist/esm/src/io.d.ts +0 -24
- package/dist/esm/src/io.d.ts.map +0 -1
- package/dist/esm/src/io.js +0 -73
- package/dist/esm/src/io.js.map +0 -1
- package/dist/esm/src/lambda.d.ts +0 -23
- package/dist/esm/src/lambda.d.ts.map +0 -1
- package/dist/esm/src/lambda.js +0 -37
- package/dist/esm/src/lambda.js.map +0 -1
- package/dist/esm/src/logging/console_logger_transport.d.ts +0 -5
- package/dist/esm/src/logging/console_logger_transport.d.ts.map +0 -1
- package/dist/esm/src/logging/console_logger_transport.js +0 -94
- package/dist/esm/src/logging/console_logger_transport.js.map +0 -1
- package/dist/esm/src/logging/logger.d.ts +0 -10
- package/dist/esm/src/logging/logger.d.ts.map +0 -1
- package/dist/esm/src/logging/logger.js +0 -57
- package/dist/esm/src/logging/logger.js.map +0 -1
- package/dist/esm/src/logging/logger_transport.d.ts +0 -52
- package/dist/esm/src/logging/logger_transport.d.ts.map +0 -1
- package/dist/esm/src/logging/logger_transport.js +0 -55
- package/dist/esm/src/logging/logger_transport.js.map +0 -1
- package/dist/esm/src/node.d.ts +0 -39
- package/dist/esm/src/node.d.ts.map +0 -1
- package/dist/esm/src/node.js +0 -52
- package/dist/esm/src/node.js.map +0 -1
- package/dist/esm/src/promises.d.ts +0 -111
- package/dist/esm/src/promises.d.ts.map +0 -1
- package/dist/esm/src/promises.js +0 -314
- package/dist/esm/src/promises.js.map +0 -1
- package/dist/esm/src/public_api.d.ts +0 -2
- package/dist/esm/src/public_api.d.ts.map +0 -1
- package/dist/esm/src/public_api.js +0 -12
- package/dist/esm/src/public_api.js.map +0 -1
- package/dist/esm/src/types/errors.d.ts +0 -74
- package/dist/esm/src/types/errors.d.ts.map +0 -1
- package/dist/esm/src/types/errors.js +0 -128
- package/dist/esm/src/types/errors.js.map +0 -1
- package/dist/esm/src/types/rpc.d.ts +0 -620
- package/dist/esm/src/types/rpc.d.ts.map +0 -1
- package/dist/esm/src/types/rpc.js +0 -577
- package/dist/esm/src/types/rpc.js.map +0 -1
- package/dist/esm/src/user_agent.d.ts +0 -2
- package/dist/esm/src/user_agent.d.ts.map +0 -1
- package/dist/esm/src/user_agent.js +0 -13
- package/dist/esm/src/user_agent.js.map +0 -1
- package/dist/esm/src/utils/completable_promise.d.ts +0 -9
- package/dist/esm/src/utils/completable_promise.d.ts.map +0 -1
- package/dist/esm/src/utils/completable_promise.js +0 -30
- package/dist/esm/src/utils/completable_promise.js.map +0 -1
- package/dist/esm/src/utils/rand.d.ts +0 -13
- package/dist/esm/src/utils/rand.d.ts.map +0 -1
- package/dist/esm/src/utils/rand.js +0 -109
- package/dist/esm/src/utils/rand.js.map +0 -1
- package/dist/esm/src/utils/streams.d.ts +0 -3
- package/dist/esm/src/utils/streams.d.ts.map +0 -1
- package/dist/esm/src/utils/streams.js +0 -20
- package/dist/esm/src/utils/streams.js.map +0 -1
- package/dist/esm/tsconfig.tsbuildinfo +0 -1
- /package/dist/{esm/src/endpoint → endpoint}/handlers/vm/sdk_shared_core_wasm_bindings.d.ts +0 -0
- /package/dist/{esm/src/endpoint → endpoint}/handlers/vm/sdk_shared_core_wasm_bindings.js +0 -0
- /package/dist/{esm/src/endpoint → endpoint}/handlers/vm/sdk_shared_core_wasm_bindings_bg.js +0 -0
- /package/dist/{esm/src/endpoint → endpoint}/handlers/vm/sdk_shared_core_wasm_bindings_bg.wasm +0 -0
- /package/dist/{esm/src/endpoint → endpoint}/handlers/vm/sdk_shared_core_wasm_bindings_bg.wasm.d.ts +0 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { HandlerWrapper } from "../types/rpc.js";
|
|
2
|
+
import { ServiceComponent, VirtualObjectComponent, WorkflowComponent } from "./components.js";
|
|
3
|
+
import { LogSource } from "../logging/logger_transport.js";
|
|
4
|
+
import { createLogger } from "../logging/logger.js";
|
|
5
|
+
import { defaultLoggerTransport } from "../logging/console_logger_transport.js";
|
|
6
|
+
|
|
7
|
+
//#region src/endpoint/endpoint.ts
|
|
8
|
+
function isServiceDefinition(m) {
|
|
9
|
+
return m && m.service !== void 0;
|
|
10
|
+
}
|
|
11
|
+
function isObjectDefinition(m) {
|
|
12
|
+
return m && m.object !== void 0;
|
|
13
|
+
}
|
|
14
|
+
function isWorkflowDefinition(m) {
|
|
15
|
+
return m && m.workflow !== void 0;
|
|
16
|
+
}
|
|
17
|
+
var EndpointBuilder = class {
|
|
18
|
+
serviceDefinitions = /* @__PURE__ */ new Map();
|
|
19
|
+
loggerTransport = defaultLoggerTransport;
|
|
20
|
+
keySet = [];
|
|
21
|
+
defaultServiceOptions = {};
|
|
22
|
+
journalValueCodecProvider;
|
|
23
|
+
bind(definition) {
|
|
24
|
+
if (definition.name.indexOf("/") !== -1) throw new Error("service name must not contain any slash '/'");
|
|
25
|
+
this.serviceDefinitions.set(definition.name, definition);
|
|
26
|
+
}
|
|
27
|
+
addIdentityKeys(...keys) {
|
|
28
|
+
this.keySet.push(...keys);
|
|
29
|
+
}
|
|
30
|
+
setDefaultServiceOptions(options) {
|
|
31
|
+
this.defaultServiceOptions = options;
|
|
32
|
+
}
|
|
33
|
+
setLogger(newLogger) {
|
|
34
|
+
this.loggerTransport = newLogger;
|
|
35
|
+
}
|
|
36
|
+
setJournalValueCodecProvider(codecProvider) {
|
|
37
|
+
this.journalValueCodecProvider = codecProvider;
|
|
38
|
+
}
|
|
39
|
+
build() {
|
|
40
|
+
const rlog = createLogger(this.loggerTransport, LogSource.SYSTEM);
|
|
41
|
+
const components = /* @__PURE__ */ new Map();
|
|
42
|
+
for (const [name, definition] of this.serviceDefinitions) if (isServiceDefinition(definition)) {
|
|
43
|
+
const { name: name$1, service } = definition;
|
|
44
|
+
if (!service) throw new TypeError(`no service implementation found.`);
|
|
45
|
+
components.set(name$1, buildServiceComponent(name$1, service, definition, this.defaultServiceOptions));
|
|
46
|
+
} else if (isObjectDefinition(definition)) {
|
|
47
|
+
const { name: name$1, object } = definition;
|
|
48
|
+
if (!object) throw new TypeError(`no object implementation found.`);
|
|
49
|
+
components.set(name$1, buildVirtualObjectComponent(name$1, object, definition, this.defaultServiceOptions));
|
|
50
|
+
} else if (isWorkflowDefinition(definition)) {
|
|
51
|
+
const { name: name$1, workflow } = definition;
|
|
52
|
+
if (!workflow) throw new TypeError(`no workflow implementation found.`);
|
|
53
|
+
components.set(name$1, buildWorkflowComponent(name$1, workflow, definition, this.defaultServiceOptions));
|
|
54
|
+
} else throw new TypeError(`cannot bind ${name}, can only bind a service or a virtual object or a workflow definition`);
|
|
55
|
+
const discoveryMetadata = computeDiscovery(components);
|
|
56
|
+
return {
|
|
57
|
+
keySet: this.keySet,
|
|
58
|
+
loggerTransport: this.loggerTransport,
|
|
59
|
+
rlog,
|
|
60
|
+
components,
|
|
61
|
+
discoveryMetadata,
|
|
62
|
+
journalValueCodec: this.journalValueCodecProvider ? this.journalValueCodecProvider() : void 0
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
function computeDiscovery(components) {
|
|
67
|
+
return {
|
|
68
|
+
minProtocolVersion: 5,
|
|
69
|
+
maxProtocolVersion: 6,
|
|
70
|
+
services: [...components.values()].map((c) => c.discovery())
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function buildServiceComponent(name, router, definition, defaultServiceOptions) {
|
|
74
|
+
if (name.indexOf("/") !== -1) throw new Error("service name must not contain any slash '/'");
|
|
75
|
+
const component = new ServiceComponent(name, definition.description, definition.metadata, {
|
|
76
|
+
...defaultServiceOptions,
|
|
77
|
+
...definition?.options
|
|
78
|
+
});
|
|
79
|
+
for (const [route, handler] of Object.entries(router)) {
|
|
80
|
+
const wrapper = HandlerWrapper.fromHandler(handler);
|
|
81
|
+
if (!wrapper) throw new TypeError(`${route} is not a restate handler.`);
|
|
82
|
+
wrapper.bindInstance(router);
|
|
83
|
+
component.add(route, wrapper);
|
|
84
|
+
}
|
|
85
|
+
return component;
|
|
86
|
+
}
|
|
87
|
+
function buildVirtualObjectComponent(name, router, definition, defaultServiceOptions) {
|
|
88
|
+
if (name.indexOf("/") !== -1) throw new Error("service name must not contain any slash '/'");
|
|
89
|
+
const component = new VirtualObjectComponent(name, definition.description, definition.metadata, {
|
|
90
|
+
...defaultServiceOptions,
|
|
91
|
+
...definition?.options
|
|
92
|
+
});
|
|
93
|
+
for (const [route, handler] of Object.entries(router)) {
|
|
94
|
+
const wrapper = HandlerWrapper.fromHandler(handler);
|
|
95
|
+
if (!wrapper) throw new TypeError(`${route} is not a restate handler.`);
|
|
96
|
+
wrapper.bindInstance(router);
|
|
97
|
+
component.add(route, wrapper);
|
|
98
|
+
}
|
|
99
|
+
return component;
|
|
100
|
+
}
|
|
101
|
+
function buildWorkflowComponent(name, workflow, definition, defaultServiceOptions) {
|
|
102
|
+
if (name.indexOf("/") !== -1) throw new Error("service name must not contain any slash '/'");
|
|
103
|
+
const component = new WorkflowComponent(name, definition.description, definition.metadata, {
|
|
104
|
+
...defaultServiceOptions,
|
|
105
|
+
...definition?.options
|
|
106
|
+
});
|
|
107
|
+
for (const [route, handler] of Object.entries(workflow)) {
|
|
108
|
+
const wrapper = HandlerWrapper.fromHandler(handler);
|
|
109
|
+
if (!wrapper) throw new TypeError(`${route} is not a restate handler.`);
|
|
110
|
+
wrapper.bindInstance(workflow);
|
|
111
|
+
component.add(route, wrapper);
|
|
112
|
+
}
|
|
113
|
+
return component;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
//#endregion
|
|
117
|
+
export { EndpointBuilder };
|
|
118
|
+
//# sourceMappingURL=endpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint.js","names":["name"],"sources":["../../src/endpoint/endpoint.ts"],"sourcesContent":["/*\n * Copyright (c) 2023-2024 - Restate Software, Inc., Restate GmbH\n *\n * This file is part of the Restate SDK for Node.js/TypeScript,\n * which is released under the MIT license.\n *\n * You can find a copy of the license in file LICENSE in the root\n * directory of this repository or package, or at\n * https://github.com/restatedev/sdk-typescript/blob/main/LICENSE\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type {\n JournalValueCodec,\n ServiceDefinition,\n VirtualObjectDefinition,\n WorkflowDefinition,\n} from \"@restatedev/restate-sdk-core\";\n\nimport type {\n ObjectOptions,\n ServiceOptions,\n WorkflowOptions,\n} from \"../types/rpc.js\";\nimport { HandlerWrapper } from \"../types/rpc.js\";\nimport type { Component } from \"./components.js\";\nimport {\n ServiceComponent,\n VirtualObjectComponent,\n WorkflowComponent,\n} from \"./components.js\";\nimport type * as discovery from \"./discovery.js\";\nimport { defaultLoggerTransport } from \"../logging/console_logger_transport.js\";\nimport {\n type LoggerTransport,\n LogSource,\n} from \"../logging/logger_transport.js\";\nimport type { Logger } from \"../logging/logger.js\";\nimport { createLogger } from \"../logging/logger.js\";\nimport type { DefaultServiceOptions } from \"../endpoint.js\";\n\nfunction isServiceDefinition<P extends string, M>(\n m: Record<string, any>\n): m is ServiceDefinition<P, M> & { service: M } {\n return m && m.service !== undefined;\n}\n\nfunction isObjectDefinition<P extends string, M>(\n m: Record<string, any>\n): m is VirtualObjectDefinition<P, M> & { object: M } {\n return m && m.object !== undefined;\n}\n\nfunction isWorkflowDefinition<P extends string, M>(\n m: Record<string, any>\n): m is WorkflowDefinition<P, M> & { workflow: M } {\n return m && m.workflow !== undefined;\n}\n\n/**\n * Services can have additional information that is not part of the definition.\n * For example a description or metadata.\n */\ntype ServiceAuxInfo = {\n description?: string;\n metadata?: Record<string, any>;\n options?: ServiceOptions | ObjectOptions | WorkflowOptions;\n};\n\nexport type Endpoint = {\n loggerTransport: LoggerTransport;\n components: Map<string, Component>;\n keySet: string[];\n /**\n * This is a simple console without contextual info.\n *\n * This should be used only in cases where no contextual info is available.\n */\n rlog: Logger;\n /**\n * All discovery metadata, except protocol mode provided by the node/fetch/lambda endpoint implementations\n */\n discoveryMetadata: Omit<discovery.Endpoint, \"protocolMode\">;\n\n /**\n * Codec provider to use for journal values.\n */\n journalValueCodec?: Promise<JournalValueCodec>;\n};\n\nexport class EndpointBuilder {\n private readonly serviceDefinitions: Map<\n string,\n | ServiceDefinition<string, any>\n | VirtualObjectDefinition<string, any>\n | WorkflowDefinition<string, any>\n > = new Map();\n private loggerTransport: LoggerTransport = defaultLoggerTransport;\n private keySet: string[] = [];\n private defaultServiceOptions: DefaultServiceOptions = {};\n private journalValueCodecProvider?: () => Promise<JournalValueCodec>;\n\n public bind<P extends string, M>(\n definition:\n | ServiceDefinition<P, M>\n | VirtualObjectDefinition<P, M>\n | WorkflowDefinition<P, M>\n ) {\n // Validate service name\n if (definition.name.indexOf(\"/\") !== -1) {\n throw new Error(\"service name must not contain any slash '/'\");\n }\n\n this.serviceDefinitions.set(definition.name, definition);\n }\n\n public addIdentityKeys(...keys: string[]) {\n this.keySet.push(...keys);\n }\n\n public setDefaultServiceOptions(options: DefaultServiceOptions) {\n this.defaultServiceOptions = options;\n }\n\n public setLogger(newLogger: LoggerTransport) {\n this.loggerTransport = newLogger;\n }\n\n public setJournalValueCodecProvider(\n codecProvider: () => Promise<JournalValueCodec>\n ) {\n this.journalValueCodecProvider = codecProvider;\n }\n\n public build(): Endpoint {\n const rlog = createLogger(this.loggerTransport, LogSource.SYSTEM);\n\n // Build the components\n const components = new Map<string, Component>();\n for (const [name, definition] of this.serviceDefinitions) {\n if (isServiceDefinition(definition)) {\n const { name, service } = definition;\n if (!service) {\n throw new TypeError(`no service implementation found.`);\n }\n components.set(\n name,\n buildServiceComponent(\n name,\n service,\n definition as ServiceAuxInfo,\n this.defaultServiceOptions\n )\n );\n } else if (isObjectDefinition(definition)) {\n const { name, object } = definition;\n if (!object) {\n throw new TypeError(`no object implementation found.`);\n }\n components.set(\n name,\n buildVirtualObjectComponent(\n name,\n object,\n definition as ServiceAuxInfo,\n this.defaultServiceOptions\n )\n );\n } else if (isWorkflowDefinition(definition)) {\n const { name, workflow } = definition;\n if (!workflow) {\n throw new TypeError(`no workflow implementation found.`);\n }\n components.set(\n name,\n buildWorkflowComponent(\n name,\n workflow,\n definition as ServiceAuxInfo,\n this.defaultServiceOptions\n )\n );\n } else {\n throw new TypeError(\n `cannot bind ${name}, can only bind a service or a virtual object or a workflow definition`\n );\n }\n }\n\n // Compute discovery metadata\n const discoveryMetadata = computeDiscovery(components);\n\n return {\n keySet: this.keySet,\n loggerTransport: this.loggerTransport,\n rlog,\n components,\n discoveryMetadata,\n journalValueCodec: this.journalValueCodecProvider\n ? this.journalValueCodecProvider()\n : undefined,\n };\n }\n}\n\nfunction computeDiscovery(\n components: Map<string, Component>\n): discovery.Endpoint {\n return {\n minProtocolVersion: 5,\n maxProtocolVersion: 6,\n services: [...components.values()].map((c) => c.discovery()),\n };\n}\n\nfunction buildServiceComponent(\n name: string,\n router: any,\n definition: ServiceAuxInfo,\n defaultServiceOptions: DefaultServiceOptions\n): ServiceComponent {\n if (name.indexOf(\"/\") !== -1) {\n throw new Error(\"service name must not contain any slash '/'\");\n }\n const component = new ServiceComponent(\n name,\n definition.description,\n definition.metadata,\n {\n ...defaultServiceOptions,\n ...(definition?.options as ServiceOptions),\n }\n );\n\n for (const [route, handler] of Object.entries(\n router as { [s: string]: any }\n )) {\n const wrapper = HandlerWrapper.fromHandler(handler);\n if (!wrapper) {\n throw new TypeError(`${route} is not a restate handler.`);\n }\n wrapper.bindInstance(router);\n component.add(route, wrapper);\n }\n\n return component;\n}\n\nfunction buildVirtualObjectComponent(\n name: string,\n router: any,\n definition: ServiceAuxInfo,\n defaultServiceOptions: DefaultServiceOptions\n): VirtualObjectComponent {\n if (name.indexOf(\"/\") !== -1) {\n throw new Error(\"service name must not contain any slash '/'\");\n }\n const component = new VirtualObjectComponent(\n name,\n definition.description,\n definition.metadata,\n {\n ...defaultServiceOptions,\n ...(definition?.options as ObjectOptions),\n }\n );\n\n for (const [route, handler] of Object.entries(\n router as { [s: string]: any }\n )) {\n const wrapper = HandlerWrapper.fromHandler(handler);\n if (!wrapper) {\n throw new TypeError(`${route} is not a restate handler.`);\n }\n wrapper.bindInstance(router);\n component.add(route, wrapper);\n }\n return component;\n}\n\nfunction buildWorkflowComponent(\n name: string,\n workflow: any,\n definition: ServiceAuxInfo,\n defaultServiceOptions: DefaultServiceOptions\n): WorkflowComponent {\n if (name.indexOf(\"/\") !== -1) {\n throw new Error(\"service name must not contain any slash '/'\");\n }\n const component = new WorkflowComponent(\n name,\n definition.description,\n definition.metadata,\n {\n ...defaultServiceOptions,\n ...(definition?.options as WorkflowOptions),\n }\n );\n\n for (const [route, handler] of Object.entries(\n workflow as { [s: string]: any }\n )) {\n const wrapper = HandlerWrapper.fromHandler(handler);\n if (!wrapper) {\n throw new TypeError(`${route} is not a restate handler.`);\n }\n wrapper.bindInstance(workflow);\n component.add(route, wrapper);\n }\n return component;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
const require_generic = require('./handlers/generic.cjs');
|
|
2
|
+
const require_endpoint = require('./endpoint.cjs');
|
|
3
|
+
const require_fetch = require('./handlers/fetch.cjs');
|
|
4
|
+
|
|
5
|
+
//#region src/endpoint/fetch_endpoint.ts
|
|
6
|
+
var FetchEndpointImpl = class {
|
|
7
|
+
constructor(protocolMode) {
|
|
8
|
+
this.protocolMode = protocolMode;
|
|
9
|
+
}
|
|
10
|
+
builder = new require_endpoint.EndpointBuilder();
|
|
11
|
+
bind(definition) {
|
|
12
|
+
this.builder.bind(definition);
|
|
13
|
+
return this;
|
|
14
|
+
}
|
|
15
|
+
withIdentityV1(...keys) {
|
|
16
|
+
this.builder.addIdentityKeys(...keys);
|
|
17
|
+
return this;
|
|
18
|
+
}
|
|
19
|
+
defaultServiceOptions(options) {
|
|
20
|
+
this.builder.setDefaultServiceOptions(options);
|
|
21
|
+
return this;
|
|
22
|
+
}
|
|
23
|
+
setLogger(newLogger) {
|
|
24
|
+
this.builder.setLogger(newLogger);
|
|
25
|
+
return this;
|
|
26
|
+
}
|
|
27
|
+
bidirectional(set = true) {
|
|
28
|
+
this.protocolMode = set ? "BIDI_STREAM" : "REQUEST_RESPONSE";
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
31
|
+
journalValueCodecProvider(codecProvider) {
|
|
32
|
+
this.builder.setJournalValueCodecProvider(codecProvider);
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
handler() {
|
|
36
|
+
return require_fetch.fetcher(new require_generic.GenericHandler(this.builder.build(), this.protocolMode, {}));
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
//#endregion
|
|
41
|
+
exports.FetchEndpointImpl = FetchEndpointImpl;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import "../logging/logger_transport.cjs";
|
|
2
|
+
import { RestateEndpointBase } from "../endpoint.cjs";
|
|
3
|
+
import { JournalValueCodec, ServiceDefinition, VirtualObjectDefinition, WorkflowDefinition } from "@restatedev/restate-sdk-core";
|
|
4
|
+
|
|
5
|
+
//#region src/endpoint/fetch_endpoint.d.ts
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Generic Fetch encapsulates all the Restate services served by this endpoint.
|
|
9
|
+
*
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* A typical request-response handler would look like this:
|
|
13
|
+
* ```
|
|
14
|
+
* import * as restate from "@restatedev/restate-sdk/fetch";
|
|
15
|
+
*
|
|
16
|
+
* export default restate
|
|
17
|
+
* .endpoint()
|
|
18
|
+
* .bind(myService)
|
|
19
|
+
* .handler();
|
|
20
|
+
* @example
|
|
21
|
+
* A typical bidirectional handler (works with http2 and some http1.1 servers) would look like this:
|
|
22
|
+
* ```
|
|
23
|
+
* import * as restate from "@restatedev/restate-sdk/fetch";
|
|
24
|
+
*
|
|
25
|
+
* export default restate
|
|
26
|
+
* .endpoint()
|
|
27
|
+
* .bidirectional()
|
|
28
|
+
* .bind(myService)
|
|
29
|
+
* .handler();
|
|
30
|
+
*/
|
|
31
|
+
interface FetchEndpoint extends RestateEndpointBase<FetchEndpoint> {
|
|
32
|
+
handler(): {
|
|
33
|
+
fetch: (request: Request, ...extraArgs: unknown[]) => Promise<Response>;
|
|
34
|
+
};
|
|
35
|
+
bidirectional(set?: boolean): FetchEndpoint;
|
|
36
|
+
}
|
|
37
|
+
//#endregion
|
|
38
|
+
export { FetchEndpoint };
|
|
39
|
+
//# sourceMappingURL=fetch_endpoint.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch_endpoint.d.cts","names":[],"sources":["../../src/endpoint/fetch_endpoint.ts"],"sourcesContent":[],"mappings":";;;;;;;AAmDA;;;;;;;;;;;;;;;;;;;;;;;UAAiB,aAAA,SAAsB,oBAAoB;;qBAEtC,qCAAqC,QAAQ;;gCAElC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import "../logging/logger_transport.js";
|
|
2
|
+
import { RestateEndpointBase } from "../endpoint.js";
|
|
3
|
+
import { JournalValueCodec, ServiceDefinition, VirtualObjectDefinition, WorkflowDefinition } from "@restatedev/restate-sdk-core";
|
|
4
|
+
|
|
5
|
+
//#region src/endpoint/fetch_endpoint.d.ts
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Generic Fetch encapsulates all the Restate services served by this endpoint.
|
|
9
|
+
*
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* A typical request-response handler would look like this:
|
|
13
|
+
* ```
|
|
14
|
+
* import * as restate from "@restatedev/restate-sdk/fetch";
|
|
15
|
+
*
|
|
16
|
+
* export default restate
|
|
17
|
+
* .endpoint()
|
|
18
|
+
* .bind(myService)
|
|
19
|
+
* .handler();
|
|
20
|
+
* @example
|
|
21
|
+
* A typical bidirectional handler (works with http2 and some http1.1 servers) would look like this:
|
|
22
|
+
* ```
|
|
23
|
+
* import * as restate from "@restatedev/restate-sdk/fetch";
|
|
24
|
+
*
|
|
25
|
+
* export default restate
|
|
26
|
+
* .endpoint()
|
|
27
|
+
* .bidirectional()
|
|
28
|
+
* .bind(myService)
|
|
29
|
+
* .handler();
|
|
30
|
+
*/
|
|
31
|
+
interface FetchEndpoint extends RestateEndpointBase<FetchEndpoint> {
|
|
32
|
+
handler(): {
|
|
33
|
+
fetch: (request: Request, ...extraArgs: unknown[]) => Promise<Response>;
|
|
34
|
+
};
|
|
35
|
+
bidirectional(set?: boolean): FetchEndpoint;
|
|
36
|
+
}
|
|
37
|
+
//#endregion
|
|
38
|
+
export { FetchEndpoint };
|
|
39
|
+
//# sourceMappingURL=fetch_endpoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch_endpoint.d.ts","names":[],"sources":["../../src/endpoint/fetch_endpoint.ts"],"sourcesContent":[],"mappings":";;;;;;;AAmDA;;;;;;;;;;;;;;;;;;;;;;;UAAiB,aAAA,SAAsB,oBAAoB;;qBAEtC,qCAAqC,QAAQ;;gCAElC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { GenericHandler } from "./handlers/generic.js";
|
|
2
|
+
import { EndpointBuilder } from "./endpoint.js";
|
|
3
|
+
import { fetcher } from "./handlers/fetch.js";
|
|
4
|
+
|
|
5
|
+
//#region src/endpoint/fetch_endpoint.ts
|
|
6
|
+
var FetchEndpointImpl = class {
|
|
7
|
+
constructor(protocolMode) {
|
|
8
|
+
this.protocolMode = protocolMode;
|
|
9
|
+
}
|
|
10
|
+
builder = new EndpointBuilder();
|
|
11
|
+
bind(definition) {
|
|
12
|
+
this.builder.bind(definition);
|
|
13
|
+
return this;
|
|
14
|
+
}
|
|
15
|
+
withIdentityV1(...keys) {
|
|
16
|
+
this.builder.addIdentityKeys(...keys);
|
|
17
|
+
return this;
|
|
18
|
+
}
|
|
19
|
+
defaultServiceOptions(options) {
|
|
20
|
+
this.builder.setDefaultServiceOptions(options);
|
|
21
|
+
return this;
|
|
22
|
+
}
|
|
23
|
+
setLogger(newLogger) {
|
|
24
|
+
this.builder.setLogger(newLogger);
|
|
25
|
+
return this;
|
|
26
|
+
}
|
|
27
|
+
bidirectional(set = true) {
|
|
28
|
+
this.protocolMode = set ? "BIDI_STREAM" : "REQUEST_RESPONSE";
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
31
|
+
journalValueCodecProvider(codecProvider) {
|
|
32
|
+
this.builder.setJournalValueCodecProvider(codecProvider);
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
handler() {
|
|
36
|
+
return fetcher(new GenericHandler(this.builder.build(), this.protocolMode, {}));
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
//#endregion
|
|
41
|
+
export { FetchEndpointImpl };
|
|
42
|
+
//# sourceMappingURL=fetch_endpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch_endpoint.js","names":["protocolMode: ProtocolMode"],"sources":["../../src/endpoint/fetch_endpoint.ts"],"sourcesContent":["/*\n * Copyright (c) 2023-2024 - Restate Software, Inc., Restate GmbH\n *\n * This file is part of the Restate SDK for Node.js/TypeScript,\n * which is released under the MIT license.\n *\n * You can find a copy of the license in file LICENSE in the root\n * directory of this repository or package, or at\n * https://github.com/restatedev/sdk-typescript/blob/main/LICENSE\n */\n\nimport type {\n JournalValueCodec,\n ServiceDefinition,\n VirtualObjectDefinition,\n WorkflowDefinition,\n} from \"@restatedev/restate-sdk-core\";\nimport { EndpointBuilder } from \"./endpoint.js\";\nimport type {\n DefaultServiceOptions,\n RestateEndpointBase,\n} from \"../endpoint.js\";\nimport { GenericHandler } from \"./handlers/generic.js\";\nimport { fetcher } from \"./handlers/fetch.js\";\nimport type { LoggerTransport } from \"../logging/logger_transport.js\";\nimport type { ProtocolMode } from \"./discovery.js\";\n\n/**\n * Generic Fetch encapsulates all the Restate services served by this endpoint.\n *\n *\n * @example\n * A typical request-response handler would look like this:\n * ```\n * import * as restate from \"@restatedev/restate-sdk/fetch\";\n *\n * export default restate\n * .endpoint()\n * .bind(myService)\n * .handler();\n * @example\n * A typical bidirectional handler (works with http2 and some http1.1 servers) would look like this:\n * ```\n * import * as restate from \"@restatedev/restate-sdk/fetch\";\n *\n * export default restate\n * .endpoint()\n * .bidirectional()\n * .bind(myService)\n * .handler();\n */\nexport interface FetchEndpoint extends RestateEndpointBase<FetchEndpoint> {\n handler(): {\n fetch: (request: Request, ...extraArgs: unknown[]) => Promise<Response>;\n };\n bidirectional(set?: boolean): FetchEndpoint;\n}\n\nexport class FetchEndpointImpl implements FetchEndpoint {\n constructor(private protocolMode: ProtocolMode) {}\n private builder: EndpointBuilder = new EndpointBuilder();\n\n public bind<P extends string, M>(\n definition:\n | ServiceDefinition<P, M>\n | VirtualObjectDefinition<P, M>\n | WorkflowDefinition<P, M>\n ): FetchEndpoint {\n this.builder.bind(definition);\n return this;\n }\n\n public withIdentityV1(...keys: string[]): FetchEndpoint {\n this.builder.addIdentityKeys(...keys);\n return this;\n }\n\n public defaultServiceOptions(options: DefaultServiceOptions): FetchEndpoint {\n this.builder.setDefaultServiceOptions(options);\n return this;\n }\n\n public setLogger(newLogger: LoggerTransport): FetchEndpoint {\n this.builder.setLogger(newLogger);\n return this;\n }\n\n public bidirectional(set: boolean = true): FetchEndpoint {\n this.protocolMode = set ? \"BIDI_STREAM\" : \"REQUEST_RESPONSE\";\n return this;\n }\n\n public journalValueCodecProvider(\n codecProvider: () => Promise<JournalValueCodec>\n ): FetchEndpoint {\n this.builder.setJournalValueCodecProvider(codecProvider);\n return this;\n }\n\n handler(): {\n fetch: (request: Request, ...extraArgs: unknown[]) => Promise<Response>;\n } {\n const genericHandler = new GenericHandler(\n this.builder.build(),\n this.protocolMode,\n {}\n );\n return fetcher(genericHandler);\n }\n}\n"],"mappings":";;;;;AA0DA,IAAa,oBAAb,MAAwD;CACtD,YAAY,AAAQA,cAA4B;EAA5B;;CACpB,AAAQ,UAA2B,IAAI,iBAAiB;CAExD,AAAO,KACL,YAIe;AACf,OAAK,QAAQ,KAAK,WAAW;AAC7B,SAAO;;CAGT,AAAO,eAAe,GAAG,MAA+B;AACtD,OAAK,QAAQ,gBAAgB,GAAG,KAAK;AACrC,SAAO;;CAGT,AAAO,sBAAsB,SAA+C;AAC1E,OAAK,QAAQ,yBAAyB,QAAQ;AAC9C,SAAO;;CAGT,AAAO,UAAU,WAA2C;AAC1D,OAAK,QAAQ,UAAU,UAAU;AACjC,SAAO;;CAGT,AAAO,cAAc,MAAe,MAAqB;AACvD,OAAK,eAAe,MAAM,gBAAgB;AAC1C,SAAO;;CAGT,AAAO,0BACL,eACe;AACf,OAAK,QAAQ,6BAA6B,cAAc;AACxD,SAAO;;CAGT,UAEE;AAMA,SAAO,QALgB,IAAI,eACzB,KAAK,QAAQ,OAAO,EACpB,KAAK,cACL,EAAE,CACH,CAC6B"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/endpoint/handlers/fetch.ts
|
|
3
|
+
function fetcher(handler) {
|
|
4
|
+
return { fetch: async (event, ...extraArgs) => {
|
|
5
|
+
const request = {
|
|
6
|
+
url: event.url,
|
|
7
|
+
headers: Object.fromEntries(event.headers.entries()),
|
|
8
|
+
body: event.body,
|
|
9
|
+
extraArgs,
|
|
10
|
+
abortSignal: event.signal
|
|
11
|
+
};
|
|
12
|
+
const resp = await handler.handle(request);
|
|
13
|
+
return new Response(resp.body, {
|
|
14
|
+
status: resp.statusCode,
|
|
15
|
+
headers: resp.headers
|
|
16
|
+
});
|
|
17
|
+
} };
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
//#endregion
|
|
21
|
+
exports.fetcher = fetcher;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/endpoint/handlers/fetch.ts
|
|
2
|
+
function fetcher(handler) {
|
|
3
|
+
return { fetch: async (event, ...extraArgs) => {
|
|
4
|
+
const request = {
|
|
5
|
+
url: event.url,
|
|
6
|
+
headers: Object.fromEntries(event.headers.entries()),
|
|
7
|
+
body: event.body,
|
|
8
|
+
extraArgs,
|
|
9
|
+
abortSignal: event.signal
|
|
10
|
+
};
|
|
11
|
+
const resp = await handler.handle(request);
|
|
12
|
+
return new Response(resp.body, {
|
|
13
|
+
status: resp.statusCode,
|
|
14
|
+
headers: resp.headers
|
|
15
|
+
});
|
|
16
|
+
} };
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
//#endregion
|
|
20
|
+
export { fetcher };
|
|
21
|
+
//# sourceMappingURL=fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.js","names":["request: RestateRequest"],"sources":["../../../src/endpoint/handlers/fetch.ts"],"sourcesContent":["/*\n * Copyright (c) 2023-2024 - Restate Software, Inc., Restate GmbH\n *\n * This file is part of the Restate SDK for Node.js/TypeScript,\n * which is released under the MIT license.\n *\n * You can find a copy of the license in file LICENSE in the root\n * directory of this repository or package, or at\n * https://github.com/restatedev/sdk-typescript/blob/main/LICENSE\n */\n\nimport type { GenericHandler, RestateRequest } from \"./generic.js\";\n\nexport function fetcher(handler: GenericHandler) {\n return {\n fetch: async (\n event: Request,\n ...extraArgs: unknown[]\n ): Promise<Response> => {\n const url = event.url;\n const headers = Object.fromEntries(event.headers.entries());\n\n const request: RestateRequest = {\n url,\n headers,\n body: event.body,\n extraArgs,\n abortSignal: event.signal,\n };\n\n const resp = await handler.handle(request);\n\n return new Response(resp.body, {\n status: resp.statusCode,\n headers: resp.headers,\n });\n },\n };\n}\n"],"mappings":";AAaA,SAAgB,QAAQ,SAAyB;AAC/C,QAAO,EACL,OAAO,OACL,OACA,GAAG,cACmB;EAItB,MAAMA,UAA0B;GAC9B,KAJU,MAAM;GAKhB,SAJc,OAAO,YAAY,MAAM,QAAQ,SAAS,CAAC;GAKzD,MAAM,MAAM;GACZ;GACA,aAAa,MAAM;GACpB;EAED,MAAM,OAAO,MAAM,QAAQ,OAAO,QAAQ;AAE1C,SAAO,IAAI,SAAS,KAAK,MAAM;GAC7B,QAAQ,KAAK;GACb,SAAS,KAAK;GACf,CAAC;IAEL"}
|