@orpc/standard-server-aws-lambda 1.7.11 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -30,6 +30,7 @@
30
30
  - **🔗 End-to-End Type Safety**: Ensure type-safe inputs, outputs, and errors from client to server.
31
31
  - **📘 First-Class OpenAPI**: Built-in support that fully adheres to the OpenAPI standard.
32
32
  - **📝 Contract-First Development**: Optionally define your API contract before implementation.
33
+ - **🔍 First-Class OpenTelemetry**: Seamlessly integrate with OpenTelemetry for observability.
33
34
  - **⚙️ Framework Integrations**: Seamlessly integrate with TanStack Query (React, Vue, Solid, Svelte, Angular), Pinia Colada, and more.
34
35
  - **🚀 Server Actions**: Fully compatible with React Server Actions on Next.js, TanStack Start, and other platforms.
35
36
  - **🔠 Standard Schema Support**: Works out of the box with Zod, Valibot, ArkType, and other schema validators.
@@ -38,7 +39,6 @@
38
39
  - **📡 SSE & Streaming**: Enjoy full type-safe support for SSE and streaming.
39
40
  - **🌍 Multi-Runtime Support**: Fast and lightweight on Cloudflare, Deno, Bun, Node.js, and beyond.
40
41
  - **🔌 Extendability**: Easily extend functionality with plugins, middleware, and interceptors.
41
- - **🛡️ Reliability**: Well-tested, TypeScript-based, production-ready, and MIT licensed.
42
42
 
43
43
  ## Documentation
44
44
 
@@ -50,6 +50,7 @@ You can find the full documentation [here](https://orpc.unnoq.com).
50
50
  - [@orpc/server](https://www.npmjs.com/package/@orpc/server): Build your API or implement API contract.
51
51
  - [@orpc/client](https://www.npmjs.com/package/@orpc/client): Consume your API on the client with type-safety.
52
52
  - [@orpc/openapi](https://www.npmjs.com/package/@orpc/openapi): Generate OpenAPI specs and handle OpenAPI requests.
53
+ - [@orpc/otel](https://www.npmjs.com/package/@orpc/otel): [OpenTelemetry](https://opentelemetry.io/) integration for observability.
53
54
  - [@orpc/nest](https://www.npmjs.com/package/@orpc/nest): Deeply integrate oRPC with [NestJS](https://nestjs.com/).
54
55
  - [@orpc/react](https://www.npmjs.com/package/@orpc/react): Utilities for integrating oRPC with React and React Server Actions.
55
56
  - [@orpc/tanstack-query](https://www.npmjs.com/package/@orpc/tanstack-query): [TanStack Query](https://tanstack.com/query/latest) integration.
package/dist/index.d.mts CHANGED
@@ -2,6 +2,11 @@ import Stream, { Readable } from 'node:stream';
2
2
  import { StandardBody, StandardHeaders, StandardLazyRequest, StandardResponse } from '@orpc/standard-server';
3
3
  import { ToNodeHttpBodyOptions } from '@orpc/standard-server-node';
4
4
  export { ToEventStreamOptions, toAbortSignal, toEventStream } from '@orpc/standard-server-node';
5
+ import { ToEventIteratorOptions as ToEventIteratorOptions$1 } from '@orpc/standard-server-fetch';
6
+
7
+ interface ToEventIteratorOptions extends ToEventIteratorOptions$1 {
8
+ }
9
+ declare function toEventIterator(body: string | undefined, options?: ToEventIteratorOptions): AsyncIteratorObject<unknown | void, unknown | void, void> & AsyncGenerator<unknown | void, unknown | void, void>;
5
10
 
6
11
  interface APIGatewayProxyEventHeaders {
7
12
  [name: string]: string | undefined;
@@ -37,13 +42,13 @@ interface APIGatewayProxyEventV2 {
37
42
  stageVariables?: APIGatewayProxyEventStageVariables;
38
43
  }
39
44
 
40
- declare function toStandardBody(event: APIGatewayProxyEventV2): Promise<StandardBody>;
45
+ interface ToStandardBodyOptions extends ToEventIteratorOptions {
46
+ }
47
+ declare function toStandardBody(event: APIGatewayProxyEventV2, options?: ToStandardBodyOptions): Promise<StandardBody>;
41
48
  interface ToLambdaBodyOptions extends ToNodeHttpBodyOptions {
42
49
  }
43
50
  declare function toLambdaBody(standardBody: StandardBody, standardHeaders: StandardHeaders, options?: ToLambdaBodyOptions): [body: undefined | string | Readable, headers: StandardHeaders];
44
51
 
45
- declare function toEventIterator(body: string | undefined): AsyncIteratorObject<unknown | void, unknown | void, void> & AsyncGenerator<unknown | void, unknown | void, void>;
46
-
47
52
  declare function toStandardHeaders(headers: APIGatewayProxyEventHeaders, cookies: string[] | undefined): StandardHeaders;
48
53
  declare function toLambdaHeaders(standard: StandardHeaders): [headers: APIGatewayProxyEventHeaders, setCookies: string[]];
49
54
 
@@ -58,4 +63,4 @@ declare function toStandardUrl(event: APIGatewayProxyEventV2): URL;
58
63
  type ResponseStream = Stream.Writable;
59
64
 
60
65
  export { sendStandardResponse, toEventIterator, toLambdaBody, toLambdaHeaders, toStandardBody, toStandardHeaders, toStandardLazyRequest, toStandardUrl };
61
- export type { APIGatewayProxyEventHeaders, APIGatewayProxyEventPathParameters, APIGatewayProxyEventQueryStringParameters, APIGatewayProxyEventStageVariables, APIGatewayProxyEventV2, ResponseStream, SendStandardResponseOptions, ToLambdaBodyOptions };
66
+ export type { APIGatewayProxyEventHeaders, APIGatewayProxyEventPathParameters, APIGatewayProxyEventQueryStringParameters, APIGatewayProxyEventStageVariables, APIGatewayProxyEventV2, ResponseStream, SendStandardResponseOptions, ToEventIteratorOptions, ToLambdaBodyOptions, ToStandardBodyOptions };
package/dist/index.d.ts CHANGED
@@ -2,6 +2,11 @@ import Stream, { Readable } from 'node:stream';
2
2
  import { StandardBody, StandardHeaders, StandardLazyRequest, StandardResponse } from '@orpc/standard-server';
3
3
  import { ToNodeHttpBodyOptions } from '@orpc/standard-server-node';
4
4
  export { ToEventStreamOptions, toAbortSignal, toEventStream } from '@orpc/standard-server-node';
5
+ import { ToEventIteratorOptions as ToEventIteratorOptions$1 } from '@orpc/standard-server-fetch';
6
+
7
+ interface ToEventIteratorOptions extends ToEventIteratorOptions$1 {
8
+ }
9
+ declare function toEventIterator(body: string | undefined, options?: ToEventIteratorOptions): AsyncIteratorObject<unknown | void, unknown | void, void> & AsyncGenerator<unknown | void, unknown | void, void>;
5
10
 
6
11
  interface APIGatewayProxyEventHeaders {
7
12
  [name: string]: string | undefined;
@@ -37,13 +42,13 @@ interface APIGatewayProxyEventV2 {
37
42
  stageVariables?: APIGatewayProxyEventStageVariables;
38
43
  }
39
44
 
40
- declare function toStandardBody(event: APIGatewayProxyEventV2): Promise<StandardBody>;
45
+ interface ToStandardBodyOptions extends ToEventIteratorOptions {
46
+ }
47
+ declare function toStandardBody(event: APIGatewayProxyEventV2, options?: ToStandardBodyOptions): Promise<StandardBody>;
41
48
  interface ToLambdaBodyOptions extends ToNodeHttpBodyOptions {
42
49
  }
43
50
  declare function toLambdaBody(standardBody: StandardBody, standardHeaders: StandardHeaders, options?: ToLambdaBodyOptions): [body: undefined | string | Readable, headers: StandardHeaders];
44
51
 
45
- declare function toEventIterator(body: string | undefined): AsyncIteratorObject<unknown | void, unknown | void, void> & AsyncGenerator<unknown | void, unknown | void, void>;
46
-
47
52
  declare function toStandardHeaders(headers: APIGatewayProxyEventHeaders, cookies: string[] | undefined): StandardHeaders;
48
53
  declare function toLambdaHeaders(standard: StandardHeaders): [headers: APIGatewayProxyEventHeaders, setCookies: string[]];
49
54
 
@@ -58,4 +63,4 @@ declare function toStandardUrl(event: APIGatewayProxyEventV2): URL;
58
63
  type ResponseStream = Stream.Writable;
59
64
 
60
65
  export { sendStandardResponse, toEventIterator, toLambdaBody, toLambdaHeaders, toStandardBody, toStandardHeaders, toStandardLazyRequest, toStandardUrl };
61
- export type { APIGatewayProxyEventHeaders, APIGatewayProxyEventPathParameters, APIGatewayProxyEventQueryStringParameters, APIGatewayProxyEventStageVariables, APIGatewayProxyEventV2, ResponseStream, SendStandardResponseOptions, ToLambdaBodyOptions };
66
+ export type { APIGatewayProxyEventHeaders, APIGatewayProxyEventPathParameters, APIGatewayProxyEventQueryStringParameters, APIGatewayProxyEventStageVariables, APIGatewayProxyEventV2, ResponseStream, SendStandardResponseOptions, ToEventIteratorOptions, ToLambdaBodyOptions, ToStandardBodyOptions };
package/dist/index.mjs CHANGED
@@ -1,13 +1,13 @@
1
1
  import { Buffer } from 'node:buffer';
2
- import { parseEmptyableJSON, toArray, once } from '@orpc/shared';
2
+ import { runWithSpan, parseEmptyableJSON, toArray, once } from '@orpc/shared';
3
3
  import { getFilenameFromContentDisposition, flattenHeader } from '@orpc/standard-server';
4
4
  import { toNodeHttpBody, toAbortSignal } from '@orpc/standard-server-node';
5
5
  export { toAbortSignal, toEventStream } from '@orpc/standard-server-node';
6
6
  import { toEventIterator as toEventIterator$1 } from '@orpc/standard-server-fetch';
7
7
 
8
- function toEventIterator(body) {
8
+ function toEventIterator(body, options = {}) {
9
9
  if (body === void 0) {
10
- return toEventIterator$1(null);
10
+ return toEventIterator$1(null, options);
11
11
  }
12
12
  return toEventIterator$1(
13
13
  new ReadableStream({
@@ -15,34 +15,37 @@ function toEventIterator(body) {
15
15
  controller.enqueue(body);
16
16
  controller.close();
17
17
  }
18
- }).pipeThrough(new TextEncoderStream())
18
+ }).pipeThrough(new TextEncoderStream()),
19
+ options
19
20
  );
20
21
  }
21
22
 
22
- async function toStandardBody(event) {
23
- const contentType = event.headers["content-type"];
24
- const contentDisposition = event.headers["content-disposition"];
25
- if (typeof contentDisposition === "string") {
26
- const fileName = getFilenameFromContentDisposition(contentDisposition) ?? "blob";
27
- return _parseAsFile(event.body, event.isBase64Encoded, fileName, contentType ?? "");
28
- }
29
- if (!contentType || contentType.startsWith("application/json")) {
30
- const text = _parseAsString(event.body, event.isBase64Encoded);
31
- return parseEmptyableJSON(text);
32
- }
33
- if (contentType.startsWith("multipart/form-data")) {
34
- return _parseAsFormData(event.body, event.isBase64Encoded, contentType);
35
- }
36
- if (contentType.startsWith("application/x-www-form-urlencoded")) {
37
- return new URLSearchParams(_parseAsString(event.body, event.isBase64Encoded));
38
- }
39
- if (contentType.startsWith("text/event-stream")) {
40
- return toEventIterator(_parseAsString(event.body, event.isBase64Encoded));
41
- }
42
- if (contentType.startsWith("text/plain")) {
43
- return _parseAsString(event.body, event.isBase64Encoded);
44
- }
45
- return _parseAsFile(event.body, event.isBase64Encoded, "blob", contentType);
23
+ function toStandardBody(event, options = {}) {
24
+ return runWithSpan({ name: "parse_standard_body", signal: options.signal }, async () => {
25
+ const contentType = event.headers["content-type"];
26
+ const contentDisposition = event.headers["content-disposition"];
27
+ if (typeof contentDisposition === "string") {
28
+ const fileName = getFilenameFromContentDisposition(contentDisposition) ?? "blob";
29
+ return _parseAsFile(event.body, event.isBase64Encoded, fileName, contentType ?? "");
30
+ }
31
+ if (!contentType || contentType.startsWith("application/json")) {
32
+ const text = _parseAsString(event.body, event.isBase64Encoded);
33
+ return parseEmptyableJSON(text);
34
+ }
35
+ if (contentType.startsWith("multipart/form-data")) {
36
+ return _parseAsFormData(event.body, event.isBase64Encoded, contentType);
37
+ }
38
+ if (contentType.startsWith("application/x-www-form-urlencoded")) {
39
+ return new URLSearchParams(_parseAsString(event.body, event.isBase64Encoded));
40
+ }
41
+ if (contentType.startsWith("text/event-stream")) {
42
+ return toEventIterator(_parseAsString(event.body, event.isBase64Encoded), options);
43
+ }
44
+ if (contentType.startsWith("text/plain")) {
45
+ return _parseAsString(event.body, event.isBase64Encoded);
46
+ }
47
+ return _parseAsFile(event.body, event.isBase64Encoded, "blob", contentType);
48
+ });
46
49
  }
47
50
  function toLambdaBody(standardBody, standardHeaders, options = {}) {
48
51
  standardHeaders = { ...standardHeaders };
@@ -97,12 +100,13 @@ function toStandardUrl(event) {
97
100
  }
98
101
 
99
102
  function toStandardLazyRequest(event, responseStream) {
103
+ const signal = toAbortSignal(responseStream);
100
104
  return {
101
105
  url: toStandardUrl(event),
102
106
  method: event.requestContext.http.method,
103
107
  headers: toStandardHeaders(event.headers, event.cookies),
104
- signal: toAbortSignal(responseStream),
105
- body: once(() => toStandardBody(event))
108
+ signal,
109
+ body: once(() => toStandardBody(event, { signal }))
106
110
  };
107
111
  }
108
112
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@orpc/standard-server-aws-lambda",
3
3
  "type": "module",
4
- "version": "1.7.11",
4
+ "version": "1.8.1",
5
5
  "license": "MIT",
6
6
  "homepage": "https://orpc.unnoq.com",
7
7
  "repository": {
@@ -23,10 +23,10 @@
23
23
  "dist"
24
24
  ],
25
25
  "dependencies": {
26
- "@orpc/shared": "1.7.11",
27
- "@orpc/standard-server": "1.7.11",
28
- "@orpc/standard-server-fetch": "1.7.11",
29
- "@orpc/standard-server-node": "1.7.11"
26
+ "@orpc/shared": "1.8.1",
27
+ "@orpc/standard-server": "1.8.1",
28
+ "@orpc/standard-server-fetch": "1.8.1",
29
+ "@orpc/standard-server-node": "1.8.1"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@types/aws-lambda": "^8.10.152",