nmtjs 0.15.3 → 0.16.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/dist/cli.js.map +1 -1
  2. package/dist/codegen.js.map +1 -1
  3. package/dist/config.js.map +1 -1
  4. package/dist/entrypoints/main.js.map +1 -1
  5. package/dist/entrypoints/thread.js.map +1 -1
  6. package/dist/entrypoints/worker.js.map +1 -1
  7. package/dist/index.d.ts +32 -21
  8. package/dist/index.js +8 -6
  9. package/dist/index.js.map +1 -1
  10. package/dist/runtime/application/index.d.ts +1 -5
  11. package/dist/runtime/application/index.js +1 -5
  12. package/dist/runtime/application/index.js.map +1 -1
  13. package/dist/runtime/enums.d.ts +1 -12
  14. package/dist/runtime/enums.js +3 -20
  15. package/dist/runtime/enums.js.map +1 -1
  16. package/dist/runtime/hooks.d.ts +1 -4
  17. package/dist/runtime/hooks.js +1 -3
  18. package/dist/runtime/hooks.js.map +1 -1
  19. package/dist/runtime/index.d.ts +3 -5
  20. package/dist/runtime/index.js +3 -5
  21. package/dist/runtime/index.js.map +1 -1
  22. package/dist/runtime/injectables.d.ts +10 -10
  23. package/dist/runtime/injectables.js +6 -6
  24. package/dist/runtime/injectables.js.map +1 -1
  25. package/dist/runtime/jobs/job.d.ts +4 -4
  26. package/dist/runtime/jobs/job.js.map +1 -1
  27. package/dist/runtime/jobs/manager.js.map +1 -1
  28. package/dist/runtime/jobs/router.d.ts +31 -13
  29. package/dist/runtime/jobs/router.js +14 -11
  30. package/dist/runtime/jobs/router.js.map +1 -1
  31. package/dist/runtime/jobs/runner.d.ts +1 -1
  32. package/dist/runtime/jobs/runner.js +1 -1
  33. package/dist/runtime/jobs/runner.js.map +1 -1
  34. package/dist/runtime/jobs/step.js.map +1 -1
  35. package/dist/runtime/metrics/server.js +21 -9
  36. package/dist/runtime/metrics/server.js.map +1 -1
  37. package/dist/runtime/plugin.d.ts +2 -8
  38. package/dist/runtime/plugin.js +1 -3
  39. package/dist/runtime/plugin.js.map +1 -1
  40. package/dist/runtime/runtime.d.ts +2 -2
  41. package/dist/runtime/runtime.js +1 -2
  42. package/dist/runtime/runtime.js.map +1 -1
  43. package/dist/runtime/scheduler/index.js.map +1 -1
  44. package/dist/runtime/server/applications.js.map +1 -1
  45. package/dist/runtime/server/config.d.ts +8 -19
  46. package/dist/runtime/server/config.js +2 -3
  47. package/dist/runtime/server/config.js.map +1 -1
  48. package/dist/runtime/server/environment.js.map +1 -1
  49. package/dist/runtime/server/error-policy.js.map +1 -1
  50. package/dist/runtime/server/hmr-coordinator.js.map +1 -1
  51. package/dist/runtime/server/jobs.d.ts +7 -11
  52. package/dist/runtime/server/jobs.js +45 -71
  53. package/dist/runtime/server/jobs.js.map +1 -1
  54. package/dist/runtime/server/lifecycle.js.map +1 -1
  55. package/dist/runtime/server/managed-worker.js.map +1 -1
  56. package/dist/runtime/server/pool-manager.js.map +1 -1
  57. package/dist/runtime/server/proxy.js.map +1 -1
  58. package/dist/runtime/server/server.js.map +1 -1
  59. package/dist/runtime/server/worker-pool.js.map +1 -1
  60. package/dist/runtime/store/index.js.map +1 -1
  61. package/dist/runtime/{pubsub → subscription}/manager.d.ts +15 -14
  62. package/dist/runtime/{pubsub → subscription}/manager.js +59 -8
  63. package/dist/runtime/subscription/manager.js.map +1 -0
  64. package/dist/runtime/subscription/redis.d.ts +18 -0
  65. package/dist/runtime/{pubsub → subscription}/redis.js +37 -14
  66. package/dist/runtime/subscription/redis.js.map +1 -0
  67. package/dist/runtime/types.d.ts +2 -10
  68. package/dist/runtime/workers/application.d.ts +4 -7
  69. package/dist/runtime/workers/application.js +9 -4
  70. package/dist/runtime/workers/application.js.map +1 -1
  71. package/dist/runtime/workers/base.d.ts +2 -2
  72. package/dist/runtime/workers/base.js +5 -5
  73. package/dist/runtime/workers/base.js.map +1 -1
  74. package/dist/runtime/workers/job.js +2 -1
  75. package/dist/runtime/workers/job.js.map +1 -1
  76. package/dist/vite/builder.js.map +1 -1
  77. package/dist/vite/config.js.map +1 -1
  78. package/dist/vite/plugins.js.map +1 -1
  79. package/dist/vite/runners/worker.js.map +1 -1
  80. package/dist/vite/server.js.map +1 -1
  81. package/dist/vite/servers/main.js.map +1 -1
  82. package/dist/vite/servers/worker.js.map +1 -1
  83. package/package.json +19 -23
  84. package/src/index.ts +14 -8
  85. package/src/runtime/application/index.ts +1 -5
  86. package/src/runtime/enums.ts +2 -14
  87. package/src/runtime/hooks.ts +1 -5
  88. package/src/runtime/index.ts +4 -5
  89. package/src/runtime/injectables.ts +18 -20
  90. package/src/runtime/jobs/job.ts +1 -2
  91. package/src/runtime/jobs/router.ts +52 -24
  92. package/src/runtime/jobs/runner.ts +2 -2
  93. package/src/runtime/metrics/server.ts +21 -18
  94. package/src/runtime/plugin.ts +2 -13
  95. package/src/runtime/runtime.ts +2 -4
  96. package/src/runtime/server/config.ts +12 -18
  97. package/src/runtime/server/jobs.ts +59 -88
  98. package/src/runtime/{pubsub → subscription}/manager.ts +118 -26
  99. package/src/runtime/subscription/redis.ts +157 -0
  100. package/src/runtime/types.ts +2 -11
  101. package/src/runtime/workers/application.ts +29 -17
  102. package/src/runtime/workers/base.ts +7 -7
  103. package/src/runtime/workers/job.ts +3 -6
  104. package/dist/runtime/application/api/api.d.ts +0 -50
  105. package/dist/runtime/application/api/api.js +0 -196
  106. package/dist/runtime/application/api/api.js.map +0 -1
  107. package/dist/runtime/application/api/constants.d.ts +0 -14
  108. package/dist/runtime/application/api/constants.js +0 -8
  109. package/dist/runtime/application/api/constants.js.map +0 -1
  110. package/dist/runtime/application/api/filters.d.ts +0 -14
  111. package/dist/runtime/application/api/filters.js +0 -11
  112. package/dist/runtime/application/api/filters.js.map +0 -1
  113. package/dist/runtime/application/api/guards.d.ts +0 -16
  114. package/dist/runtime/application/api/guards.js +0 -11
  115. package/dist/runtime/application/api/guards.js.map +0 -1
  116. package/dist/runtime/application/api/index.d.ts +0 -9
  117. package/dist/runtime/application/api/index.js +0 -10
  118. package/dist/runtime/application/api/index.js.map +0 -1
  119. package/dist/runtime/application/api/logging.d.ts +0 -19
  120. package/dist/runtime/application/api/logging.js +0 -77
  121. package/dist/runtime/application/api/logging.js.map +0 -1
  122. package/dist/runtime/application/api/middlewares.d.ts +0 -14
  123. package/dist/runtime/application/api/middlewares.js +0 -12
  124. package/dist/runtime/application/api/middlewares.js.map +0 -1
  125. package/dist/runtime/application/api/procedure.d.ts +0 -67
  126. package/dist/runtime/application/api/procedure.js +0 -50
  127. package/dist/runtime/application/api/procedure.js.map +0 -1
  128. package/dist/runtime/application/api/router.d.ts +0 -80
  129. package/dist/runtime/application/api/router.js +0 -50
  130. package/dist/runtime/application/api/router.js.map +0 -1
  131. package/dist/runtime/application/api/types.d.ts +0 -38
  132. package/dist/runtime/application/api/types.js +0 -2
  133. package/dist/runtime/application/api/types.js.map +0 -1
  134. package/dist/runtime/application/config.d.ts +0 -26
  135. package/dist/runtime/application/config.js +0 -21
  136. package/dist/runtime/application/config.js.map +0 -1
  137. package/dist/runtime/application/constants.d.ts +0 -2
  138. package/dist/runtime/application/constants.js +0 -2
  139. package/dist/runtime/application/constants.js.map +0 -1
  140. package/dist/runtime/application/hook.d.ts +0 -19
  141. package/dist/runtime/application/hook.js +0 -11
  142. package/dist/runtime/application/hook.js.map +0 -1
  143. package/dist/runtime/application/hooks.d.ts +0 -3
  144. package/dist/runtime/application/hooks.js +0 -4
  145. package/dist/runtime/application/hooks.js.map +0 -1
  146. package/dist/runtime/jobs/ui.d.ts +0 -3
  147. package/dist/runtime/jobs/ui.js +0 -20
  148. package/dist/runtime/jobs/ui.js.map +0 -1
  149. package/dist/runtime/pubsub/manager.js.map +0 -1
  150. package/dist/runtime/pubsub/redis.d.ts +0 -16
  151. package/dist/runtime/pubsub/redis.js.map +0 -1
  152. package/src/runtime/application/api/api.ts +0 -274
  153. package/src/runtime/application/api/constants.ts +0 -22
  154. package/src/runtime/application/api/filters.ts +0 -39
  155. package/src/runtime/application/api/guards.ts +0 -42
  156. package/src/runtime/application/api/index.ts +0 -9
  157. package/src/runtime/application/api/logging.ts +0 -110
  158. package/src/runtime/application/api/middlewares.ts +0 -37
  159. package/src/runtime/application/api/procedure.ts +0 -231
  160. package/src/runtime/application/api/router.ts +0 -220
  161. package/src/runtime/application/api/types.ts +0 -138
  162. package/src/runtime/application/config.ts +0 -69
  163. package/src/runtime/application/constants.ts +0 -4
  164. package/src/runtime/application/hook.ts +0 -51
  165. package/src/runtime/application/hooks.ts +0 -3
  166. package/src/runtime/jobs/ui.ts +0 -27
  167. package/src/runtime/pubsub/redis.ts +0 -106
@@ -1 +0,0 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/runtime/application/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC,MAAM,OAAO,gBAAiB,SAAQ,KAAK;CAAG"}
@@ -1,3 +0,0 @@
1
- import type { Queue } from 'bullmq';
2
- export declare function createJobsUI(queues: Queue[]): import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
3
- export type JobsUI = ReturnType<typeof createJobsUI>;
@@ -1,20 +0,0 @@
1
- import { createServer } from 'node:http';
2
- import { createBullBoard } from '@bull-board/api';
3
- import { BullMQAdapter } from '@bull-board/api/bullMQAdapter';
4
- import { H3Adapter } from '@bull-board/h3';
5
- import { createApp, toNodeListener } from 'h3';
6
- export function createJobsUI(queues) {
7
- const app = createApp();
8
- const serverAdapter = new H3Adapter();
9
- createBullBoard({
10
- queues: queues.map((q) => new BullMQAdapter(q, { readOnlyMode: true })),
11
- serverAdapter,
12
- options: {
13
- uiBasePath: new URL('.', import.meta.resolve('@bull-board/ui/package.json')).pathname,
14
- },
15
- });
16
- const router = serverAdapter.registerHandlers();
17
- app.use(router);
18
- return createServer(toNodeListener(app));
19
- }
20
- //# sourceMappingURL=ui.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../src/runtime/jobs/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAGxC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,IAAI,CAAA;AAE9C,MAAM,UAAU,YAAY,CAAC,MAAe,EAAE;IAC5C,MAAM,GAAG,GAAG,SAAS,EAAE,CAAA;IACvB,MAAM,aAAa,GAAG,IAAI,SAAS,EAAE,CAAA;IACrC,eAAe,CAAC;QACd,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACvE,aAAa;QACb,OAAO,EAAE;YACP,UAAU,EAAE,IAAI,GAAG,CACjB,GAAG,EACH,OAAO,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,CACnD,CAAC,QAAQ;SACX;KACF,CAAC,CAAA;IACF,MAAM,MAAM,GAAG,aAAa,CAAC,gBAAgB,EAAE,CAAA;IAC/C,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACf,OAAO,YAAY,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAA;AAAA,CACzC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/runtime/pubsub/manager.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- import EventEmitter from 'node:events';
2
- import type { RuntimePlugin } from '../plugin.ts';
3
- import type { Store } from '../types.ts';
4
- import type { PubSubAdapterEvent, PubSubAdapterType } from './manager.ts';
5
- export declare class RedisPubSubAdapter implements PubSubAdapterType {
6
- protected readonly client: Store;
7
- protected readonly events: EventEmitter<[never]>;
8
- protected readonly listeners: Map<string, number>;
9
- protected subscriberClient?: Store;
10
- constructor(client: Store);
11
- initialize(): Promise<void>;
12
- dispose(): Promise<void>;
13
- publish(channel: string, payload: any): Promise<boolean>;
14
- subscribe(channel: string, signal?: AbortSignal): AsyncGenerator<PubSubAdapterEvent>;
15
- }
16
- export declare const RedisPubSubAdapterPlugin: () => RuntimePlugin;
@@ -1 +0,0 @@
1
- {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../../src/runtime/pubsub/redis.ts"],"names":[],"mappings":"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"}
@@ -1,274 +0,0 @@
1
- import assert from 'node:assert'
2
- import { randomUUID } from 'node:crypto'
3
- import { inspect } from 'node:util'
4
-
5
- import type { Container, Logger } from '@nmtjs/core'
6
- import type {
7
- GatewayApi,
8
- GatewayApiCallOptions,
9
- GatewayApiCallResult,
10
- GatewayConnection,
11
- } from '@nmtjs/gateway'
12
- import { withTimeout } from '@nmtjs/common'
13
- import { IsStreamProcedureContract } from '@nmtjs/contract'
14
- import { Scope } from '@nmtjs/core'
15
- import { isAsyncIterable, rpcStreamAbortSignal } from '@nmtjs/gateway'
16
- import { ErrorCode } from '@nmtjs/protocol'
17
- import { ProtocolError } from '@nmtjs/protocol/server'
18
- import { NeemataTypeError, registerDefaultLocale, type } from '@nmtjs/type'
19
- import { prettifyError } from 'zod/mini'
20
-
21
- import type { kDefaultProcedure as kDefaultProcedureKey } from './constants.ts'
22
- import type { AnyFilter } from './filters.ts'
23
- import type { AnyGuard } from './guards.ts'
24
- import type { AnyMiddleware } from './middlewares.ts'
25
- import type { AnyProcedure } from './procedure.ts'
26
- import type { AnyRouter } from './router.ts'
27
- import type { ApiCallContext } from './types.ts'
28
- import { kDefaultProcedure } from './constants.ts'
29
-
30
- registerDefaultLocale()
31
-
32
- export type ApiCallOptions<T extends AnyProcedure = AnyProcedure> = Readonly<{
33
- callId: string
34
- connection: GatewayConnection
35
- path: AnyRouter[]
36
- procedure: T
37
- container: Container
38
- payload: any
39
- signal: AbortSignal
40
- }>
41
-
42
- export type ApiOptions = {
43
- timeout?: number
44
- container: Container
45
- logger: Logger
46
- procedures: Map<
47
- string | kDefaultProcedureKey,
48
- { procedure: AnyProcedure; path: AnyRouter[] }
49
- >
50
- guards: Set<AnyGuard>
51
- middlewares: Set<AnyMiddleware>
52
- filters: Set<AnyFilter>
53
- }
54
-
55
- export class ApiError extends ProtocolError {
56
- toString() {
57
- return `${this.code} ${this.message}: \n${inspect(this.data, true, 10, false)}`
58
- }
59
- }
60
-
61
- const NotFound = () => new ApiError(ErrorCode.NotFound, 'Procedure not found')
62
-
63
- export class ApplicationApi implements GatewayApi {
64
- constructor(public options: ApiOptions) {}
65
-
66
- find(procedureName: string) {
67
- const procedure = this.options.procedures.get(procedureName)
68
- if (procedure) return procedure
69
-
70
- const fallback = this.options.procedures.get(kDefaultProcedure)
71
- if (fallback) return fallback
72
-
73
- throw NotFound()
74
- }
75
-
76
- async call(options: GatewayApiCallOptions): Promise<GatewayApiCallResult> {
77
- const callId = randomUUID()
78
-
79
- const { payload, container, signal, connection } = options
80
-
81
- const { procedure, path } = this.find(options.procedure)
82
-
83
- options.metadata?.(procedure.metadata)
84
-
85
- const callOptions: ApiCallOptions = Object.freeze({
86
- callId,
87
- payload,
88
- container,
89
- signal,
90
- connection,
91
- procedure,
92
- path,
93
- })
94
-
95
- assert(
96
- container.scope === Scope.Call,
97
- 'Invalid container scope, expected to be Scope.Call',
98
- )
99
-
100
- const timeout = procedure.contract.timeout ?? this.options.timeout
101
- const streamTimeoutSignal = procedure.streamTimeout
102
- ? AbortSignal.timeout(procedure.streamTimeout)
103
- : undefined
104
-
105
- if (streamTimeoutSignal) {
106
- container.provide(rpcStreamAbortSignal, streamTimeoutSignal)
107
- }
108
-
109
- try {
110
- const handle = await this.createProcedureHandler(callOptions)
111
- return timeout
112
- ? await this.withTimeout(handle(payload), timeout)
113
- : await handle(payload)
114
- } catch (error) {
115
- const handled = await this.handleFilters(callOptions, error)
116
- if (handled === error && error instanceof ProtocolError === false) {
117
- const logError = new Error('Unhandled error', { cause: error })
118
- this.options.logger.error(logError)
119
- throw new ApiError(
120
- ErrorCode.InternalServerError,
121
- 'Internal Server Error',
122
- )
123
- }
124
- throw handled
125
- }
126
- }
127
-
128
- private async createProcedureHandler(callOptions: ApiCallOptions) {
129
- const { callId, connection, procedure, container, path } = callOptions
130
-
131
- const callCtx: ApiCallContext = Object.freeze({
132
- callId,
133
- connection,
134
- container,
135
- path,
136
- procedure,
137
- })
138
-
139
- const isIterableProcedure = IsStreamProcedureContract(procedure.contract)
140
- const middlewares = this.resolveMiddlewares(callOptions)
141
-
142
- const handleProcedure = async (payload: any) => {
143
- const middleware = (await middlewares).next().value
144
- if (middleware) {
145
- const next = (...args: any[]) =>
146
- handleProcedure(args.length === 0 ? payload : args[0])
147
- return middleware.handle(middleware.ctx, callCtx, next, payload)
148
- } else {
149
- const input = this.handleInput(procedure, payload)
150
- await this.handleGuards(callOptions, callCtx, input)
151
- const { dependencies, handler } = procedure
152
- const context = await container.createContext(dependencies)
153
- const result = await handler(context, input)
154
- if (isIterableProcedure) {
155
- return this.handleIterableOutput(procedure, result)
156
- } else {
157
- return this.handleOutput(procedure, result)
158
- }
159
- }
160
- }
161
-
162
- return handleProcedure
163
- }
164
-
165
- private async resolveMiddlewares(callOptions: ApiCallOptions) {
166
- const { path, procedure, container } = callOptions
167
- const middlewares = [
168
- ...this.options.middlewares,
169
- ...path.flatMap((router) => [...router.middlewares]),
170
- ...procedure.middlewares,
171
- ]
172
- const result = await Promise.all(
173
- middlewares.map(async (middleware) => {
174
- const ctx = await container.createContext(middleware.dependencies)
175
- return { handle: middleware.handle, ctx }
176
- }),
177
- )
178
- return result[Symbol.iterator]()
179
- }
180
-
181
- private withTimeout(response: any, timeout: number): unknown {
182
- const applyTimeout = response instanceof Promise && timeout > 0
183
- if (!applyTimeout) return response
184
- return withTimeout(
185
- response,
186
- timeout,
187
- new ApiError(ErrorCode.RequestTimeout, 'Request Timeout'),
188
- )
189
- }
190
-
191
- private async handleGuards(
192
- callOptions: ApiCallOptions,
193
- callCtx: ApiCallContext,
194
- payload: any,
195
- ) {
196
- const { path, procedure, container } = callOptions
197
- const guards = [
198
- ...this.options.guards,
199
- ...path.flatMap((router) => [...router.guards]),
200
- ...procedure.guards,
201
- ]
202
- for (const guard of guards) {
203
- const ctx = await container.createContext(guard.dependencies)
204
- const result = await guard.can(
205
- ctx,
206
- Object.freeze({ ...callCtx, payload }),
207
- )
208
- if (result === false) throw new ApiError(ErrorCode.Forbidden)
209
- }
210
- }
211
-
212
- private async handleFilters({ container }: ApiCallOptions, error: any) {
213
- if (this.options.filters.size) {
214
- for (const filter of this.options.filters) {
215
- if (error instanceof filter.errorClass) {
216
- const ctx = await container.createContext(filter.dependencies)
217
- const handledError = await filter.catch(ctx, error)
218
- if (!handledError || handledError instanceof ApiError === false)
219
- continue
220
- return handledError
221
- }
222
- }
223
- }
224
- return error
225
- }
226
-
227
- private handleInput(procedure: AnyProcedure, payload: any) {
228
- if (procedure.contract.input instanceof type.NeverType === false) {
229
- const type = procedure.contract.input
230
- try {
231
- return type.decode(payload)
232
- } catch (error) {
233
- if (error instanceof NeemataTypeError)
234
- throw new ApiError(
235
- ErrorCode.ValidationError,
236
- `Input validation error: \n${prettifyError(error)}`,
237
- error.issues,
238
- )
239
- throw error
240
- }
241
- }
242
- }
243
-
244
- private handleIterableOutput(procedure: AnyProcedure, response: any) {
245
- if (!isAsyncIterable(response))
246
- throw new Error('Response is an async iterable')
247
- const chunkType = procedure.contract.output
248
- if (chunkType instanceof type.NeverType)
249
- throw new Error('Stream procedure must have a defined output type')
250
-
251
- return async function* (onDone?: () => void) {
252
- try {
253
- if (chunkType instanceof type.AnyType === false) {
254
- for await (const chunk of response) {
255
- const encoded = chunkType.encode(chunk)
256
- yield encoded
257
- }
258
- } else {
259
- yield* response
260
- }
261
- } finally {
262
- onDone?.()
263
- }
264
- }
265
- }
266
-
267
- private handleOutput(procedure: AnyProcedure, response: any) {
268
- if (procedure.contract.output instanceof type.NeverType === false) {
269
- const type = procedure.contract.output
270
- return type.encode(response)
271
- }
272
- return undefined
273
- }
274
- }
@@ -1,22 +0,0 @@
1
- export const kProcedure: unique symbol = Symbol.for('neemata:ProcedureKey')
2
- export type kProcedure = typeof kProcedure
3
-
4
- export const kDefaultProcedure: unique symbol = Symbol.for(
5
- 'neemata:DefaultProcedureKey',
6
- )
7
- export type kDefaultProcedure = typeof kDefaultProcedure
8
-
9
- export const kRouter: unique symbol = Symbol.for('neemata:RouterKey')
10
- export type kRouter = typeof kRouter
11
-
12
- export const kRootRouter: unique symbol = Symbol.for('neemata:RootRouterKey')
13
- export type kRootRouter = typeof kRootRouter
14
-
15
- export const kMiddleware: unique symbol = Symbol.for('neemata:MiddlewareKey')
16
- export type kMiddleware = typeof kMiddleware
17
-
18
- export const kGuard: unique symbol = Symbol.for('neemata:GuardKey')
19
- export type kGuard = typeof kGuard
20
-
21
- export const kFilter: unique symbol = Symbol.for('neemata:FilterKey')
22
- export type kFilter = typeof kFilter
@@ -1,39 +0,0 @@
1
- import type { ErrorClass, MaybePromise } from '@nmtjs/common'
2
- import type { Dependant, Dependencies, DependencyContext } from '@nmtjs/core'
3
-
4
- import { kFilter } from './constants.ts'
5
-
6
- export interface Filter<
7
- FilterError extends ErrorClass = ErrorClass,
8
- Deps extends Dependencies = Dependencies,
9
- > extends Dependant<Deps> {
10
- [kFilter]: true
11
- errorClass: FilterError
12
- catch: (
13
- ctx: DependencyContext<Deps>,
14
- error: InstanceType<FilterError>,
15
- ) => MaybePromise<Error>
16
- }
17
-
18
- export type AnyFilter<Error extends ErrorClass = ErrorClass> = Filter<
19
- Error,
20
- any
21
- >
22
-
23
- export function createFilter<
24
- FilterError extends ErrorClass,
25
- Deps extends Dependencies = {},
26
- >(params: {
27
- errorClass: FilterError
28
- dependencies?: Deps
29
- catch: Filter<FilterError, Deps>['catch']
30
- }): Filter<FilterError, Deps> {
31
- const { errorClass, catch: handler, dependencies = {} as Deps } = params
32
-
33
- return Object.freeze({
34
- errorClass,
35
- dependencies,
36
- catch: handler,
37
- [kFilter]: true,
38
- }) as Filter<FilterError, Deps>
39
- }
@@ -1,42 +0,0 @@
1
- import type { MaybePromise } from '@nmtjs/common'
2
- import type { Dependant, Dependencies, DependencyContext } from '@nmtjs/core'
3
-
4
- import type { ApiGuardContext } from './types.ts'
5
- import { kGuard } from './constants.ts'
6
-
7
- export type GuardCanFn<Payload> = (
8
- ctx: DependencyContext<any>,
9
- call: ApiGuardContext<Payload>,
10
- ) => MaybePromise<boolean>
11
-
12
- export type GuardParams<Payload, Deps extends Dependencies> =
13
- | { dependencies?: Deps; can: GuardCanFn<Payload> }
14
- | GuardCanFn<Payload>
15
-
16
- export interface Guard<Payload, Deps extends Dependencies = Dependencies>
17
- extends Dependant<Deps> {
18
- [kGuard]: true
19
- can: GuardCanFn<Payload>
20
- }
21
-
22
- export type AnyGuard<Payload = any> = Guard<Payload, any>
23
-
24
- export function createGuard<Deps extends Dependencies = {}>(
25
- paramsOrHandler: GuardParams<unknown, Deps>,
26
- ): Guard<unknown, Deps> {
27
- const { dependencies = {} as Deps, can } =
28
- typeof paramsOrHandler === 'function'
29
- ? { can: paramsOrHandler }
30
- : paramsOrHandler
31
-
32
- return Object.freeze({ dependencies, can, [kGuard]: true }) as Guard<
33
- unknown,
34
- Deps
35
- >
36
- }
37
-
38
- export function createGuardFactory<T>(): <Deps extends Dependencies = {}>(
39
- paramsOrHandler: GuardParams<T, Deps>,
40
- ) => Guard<T, Deps> {
41
- return createGuard as any
42
- }
@@ -1,9 +0,0 @@
1
- export * from './api.ts'
2
- export * from './constants.ts'
3
- export * from './filters.ts'
4
- export * from './guards.ts'
5
- export * from './logging.ts'
6
- export * from './middlewares.ts'
7
- export * from './procedure.ts'
8
- export * from './router.ts'
9
- export * from './types.ts'
@@ -1,110 +0,0 @@
1
- import type { MaybePromise } from '@nmtjs/common'
2
- import { IsStreamProcedureContract } from '@nmtjs/contract'
3
- import { CoreInjectables, loggerLocalStorage } from '@nmtjs/core'
4
-
5
- import type { ApiCallContext } from './types.ts'
6
- import { createMiddleware } from './middlewares.ts'
7
-
8
- const defaultContext = (options: ApiCallContext, payload: unknown) => {
9
- return {
10
- callId: options.callId,
11
- connection: {
12
- id: options.connection.id,
13
- type: options.connection.type,
14
- transport: options.connection.transport,
15
- protocol: options.connection.protocol,
16
- identity: options.connection.identity,
17
- },
18
- }
19
- }
20
-
21
- export const LoggingCallContextMiddleware = (
22
- cb: (
23
- options: ApiCallContext,
24
- payload: unknown,
25
- ) => MaybePromise<object> = defaultContext,
26
- ) =>
27
- createMiddleware({
28
- handle: async (_, call, next, payload) => {
29
- const loggingContext = await cb(call, payload)
30
- return loggerLocalStorage.run(loggingContext, async () => {
31
- return next()
32
- })
33
- },
34
- })
35
-
36
- export const LoggingCallMiddleware = (
37
- options: {
38
- level?: 'info' | 'debug' | 'trace'
39
- errorLevel?: 'warn' | 'error' | 'fatal'
40
- includePayload?: boolean
41
- includeResponse?: boolean
42
- includeStreamChunks?: boolean
43
- } = {},
44
- ) =>
45
- createMiddleware({
46
- dependencies: { logger: CoreInjectables.logger('RPC') },
47
- handle: async ({ logger }, call, next, payload) => {
48
- const {
49
- includePayload,
50
- includeResponse,
51
- includeStreamChunks,
52
- level,
53
- errorLevel,
54
- } = {
55
- level: 'info' as const,
56
- errorLevel: 'error' as const,
57
- includePayload: true,
58
- includeResponse: true,
59
- includeStreamChunks: true,
60
- ...options,
61
- }
62
-
63
- const logFn = logger[level].bind(logger)
64
- const errorLogFn = logger[errorLevel].bind(logger)
65
-
66
- logFn(
67
- includePayload
68
- ? { procedure: call.procedure.contract.name, payload: payload }
69
- : { procedure: call.procedure.contract.name },
70
- 'RPC call',
71
- )
72
-
73
- const isIterableProcedure = IsStreamProcedureContract(
74
- call.procedure.contract,
75
- )
76
-
77
- try {
78
- const response = await next()
79
- if (includeResponse) {
80
- if (isIterableProcedure) {
81
- logFn({ result: 'success', response: 'Stream' }, 'RPC response')
82
- } else {
83
- logFn({ result: 'success', response }, 'RPC response')
84
- }
85
- } else {
86
- logFn({ result: 'success' }, 'RPC response')
87
- }
88
-
89
- if (isIterableProcedure && includeStreamChunks) {
90
- return async function* (...args: any[]) {
91
- try {
92
- for await (const chunk of response(...args)) {
93
- logFn({ callId: call.callId, chunk }, 'RPC stream chunk')
94
- yield chunk
95
- }
96
- logFn({ callId: call.callId }, 'RPC stream end')
97
- } catch (error) {
98
- errorLogFn({ callId: call.callId, error }, 'RPC stream error')
99
- throw error
100
- }
101
- }
102
- }
103
-
104
- return response
105
- } catch (error) {
106
- errorLogFn({ error }, 'RPC error')
107
- throw error
108
- }
109
- },
110
- })
@@ -1,37 +0,0 @@
1
- import type { MaybePromise } from '@nmtjs/common'
2
- import type { Dependant, Dependencies, DependencyContext } from '@nmtjs/core'
3
-
4
- import type { ApiCallContext } from './types.ts'
5
- import { kMiddleware } from './constants.ts'
6
-
7
- export type MiddlewareNext = (payload?: any) => any
8
-
9
- export interface Middleware<Deps extends Dependencies = Dependencies>
10
- extends Dependant<Deps> {
11
- [kMiddleware]: true
12
- handle: (
13
- ctx: DependencyContext<Deps>,
14
- call: ApiCallContext,
15
- next: MiddlewareNext,
16
- payload: any,
17
- ) => MaybePromise<any>
18
- }
19
-
20
- export type AnyMiddleware = Middleware<any>
21
-
22
- export function createMiddleware<Deps extends Dependencies = {}>(
23
- paramsOrHandler:
24
- | { dependencies?: Deps; handle: Middleware<Deps>['handle'] }
25
- | Middleware<Deps>['handle'],
26
- ): Middleware<Deps> {
27
- const { dependencies = {} as Deps, handle } =
28
- typeof paramsOrHandler === 'function'
29
- ? { handle: paramsOrHandler }
30
- : paramsOrHandler
31
-
32
- return Object.freeze({
33
- dependencies,
34
- handle,
35
- [kMiddleware]: true,
36
- }) as Middleware<Deps>
37
- }