ngx-trpc-client 0.0.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/CHANGELOG.md ADDED
@@ -0,0 +1,18 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/).
7
+
8
+ ## [Unreleased]
9
+
10
+ ### Added
11
+
12
+ - Type-safe tRPC client proxy returning RxJS Observables
13
+ - SSR transfer state link for hydration without double-fetching
14
+ - Configurable `serverUrl` for SSR fetch resolution
15
+ - Custom `httpLink` with individual HTTP requests
16
+ - Support for `@trpc/server` v10 and v11
17
+ - Dynamic headers via `TrpcHeaders` signal
18
+ - Analog.js / Nitro compatibility via `$fetch` and env var detection
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 BeGj
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,101 @@
1
+ # ngx-trpc-client
2
+
3
+ Type-safe tRPC client for Angular with RxJS observables and SSR transfer state support.
4
+
5
+ ## Features
6
+
7
+ - End-to-end type safety from your tRPC router to Angular components
8
+ - Returns RxJS Observables, works with `rxResource` and `async` pipe
9
+ - SSR transfer state link prevents double-fetching during hydration
10
+ - Supports both `@trpc/server` v10 and v11
11
+ - Zero dependency on `@trpc/client`
12
+
13
+ ## Installation
14
+
15
+ ```bash
16
+ pnpm add ngx-trpc-client @trpc/server superjson
17
+ ```
18
+
19
+ ## Setup
20
+
21
+ ### 1. Create the tRPC client
22
+
23
+ ```typescript
24
+ // trpc-client.ts
25
+ import { AppRouter } from '../server/trpc/appRouter';
26
+ import { createTrpcClient } from 'ngx-trpc-client';
27
+ import SuperJSON from 'superjson';
28
+
29
+ export const { provideTrpcClient, TrpcClient } = createTrpcClient<AppRouter>({
30
+ url: '/api/trpc',
31
+ options: {
32
+ transformer: SuperJSON,
33
+ },
34
+ });
35
+ ```
36
+
37
+ ### 2. Provide in your app config
38
+
39
+ ```typescript
40
+ // app.config.ts
41
+ import { provideTrpcClient } from './trpc-client';
42
+
43
+ export const appConfig: ApplicationConfig = {
44
+ providers: [
45
+ provideTrpcClient(),
46
+ // ...
47
+ ],
48
+ };
49
+ ```
50
+
51
+ ### 3. Use in components
52
+
53
+ ```typescript
54
+ import { Component, inject } from '@angular/core';
55
+ import { rxResource } from '@angular/core/rxjs-interop';
56
+ import { TrpcClient } from './trpc-client';
57
+
58
+ @Component({ ... })
59
+ export class MyComponent {
60
+ private trpc = inject(TrpcClient);
61
+
62
+ blogs = rxResource({
63
+ stream: () => this.trpc.blog.getBlogs.query(),
64
+ });
65
+ }
66
+ ```
67
+
68
+ ## SSR Configuration
69
+
70
+ For Angular SSR, provide a `serverUrl` so server-side fetches resolve correctly:
71
+
72
+ ```typescript
73
+ export const { provideTrpcClient, TrpcClient } = createTrpcClient<AppRouter>({
74
+ url: '/api/trpc',
75
+ serverUrl: typeof process !== 'undefined'
76
+ ? `http://localhost:${process.env['PORT'] ?? 4200}`
77
+ : undefined,
78
+ options: {
79
+ transformer: SuperJSON,
80
+ },
81
+ });
82
+ ```
83
+
84
+ The built-in transfer state link automatically caches query results during SSR and replays them on the client to prevent double-fetching.
85
+
86
+ ## Dynamic Headers
87
+
88
+ Use `TrpcHeaders` to set headers dynamically (e.g., for authentication):
89
+
90
+ ```typescript
91
+ const { TrpcHeaders, provideTrpcClient, TrpcClient } = createTrpcClient<AppRouter>({
92
+ url: '/api/trpc',
93
+ });
94
+
95
+ // In a service or component:
96
+ TrpcHeaders.set({ authorization: `Bearer ${token}` });
97
+ ```
98
+
99
+ ## License
100
+
101
+ MIT
@@ -0,0 +1,422 @@
1
+ import { InjectionToken, ApplicationRef, APP_BOOTSTRAP_LISTENER, inject, makeStateKey, TransferState, signal } from '@angular/core';
2
+ import { BehaviorSubject, first, switchMap, timer, Observable, isObservable, firstValueFrom } from 'rxjs';
3
+ import superjson from 'superjson';
4
+
5
+ const tRPC_CACHE_STATE = new InjectionToken('TRPC_HTTP_TRANSFER_STATE_CACHE_STATE');
6
+ const provideTrpcCacheState = () => ({
7
+ provide: tRPC_CACHE_STATE,
8
+ useValue: { isCacheActive: new BehaviorSubject(true) },
9
+ });
10
+ const provideTrpcCacheStateStatusManager = () => ({
11
+ provide: APP_BOOTSTRAP_LISTENER,
12
+ multi: true,
13
+ useFactory: () => {
14
+ const appRef = inject(ApplicationRef);
15
+ const cacheState = inject(tRPC_CACHE_STATE);
16
+ return () => {
17
+ // Wait for app to be stable, then add a small delay to ensure
18
+ // all initial tRPC queries have completed before deactivating cache
19
+ appRef.isStable
20
+ .pipe(first((isStable) => isStable), switchMap(() => timer(100)))
21
+ .subscribe(() => cacheState.isCacheActive.next(false));
22
+ };
23
+ },
24
+ deps: [ApplicationRef, tRPC_CACHE_STATE],
25
+ });
26
+
27
+ function makeCacheKey(request) {
28
+ const { type, path, input } = request;
29
+ const encodedParams = Object.entries(input ?? {}).reduce((prev, [key, value]) => prev + `${key}=${JSON.stringify(value)}`, '');
30
+ const key = type + '.' + path + '?' + encodedParams;
31
+ const hash = generateHash(key);
32
+ return makeStateKey(hash);
33
+ }
34
+ function generateHash(value) {
35
+ let hash = 0;
36
+ for (const char of value) {
37
+ hash = (Math.imul(31, hash) + char.charCodeAt(0)) << 0;
38
+ }
39
+ hash += 2147483647 + 1;
40
+ return hash.toString();
41
+ }
42
+ const transferStateLink = () => () => {
43
+ const { isCacheActive } = inject(tRPC_CACHE_STATE);
44
+ const transferState = inject(TransferState);
45
+ const isBrowser = typeof window === 'object';
46
+ return ({ next, op }) => {
47
+ if (op.type !== 'query') {
48
+ return next(op);
49
+ }
50
+ const storeKey = makeCacheKey(op);
51
+ const storeValue = transferState.get(storeKey, null);
52
+ if (isBrowser && storeValue) {
53
+ transferState.remove(storeKey);
54
+ return new Observable((observer) => {
55
+ observer.next(superjson.parse(storeValue));
56
+ observer.complete();
57
+ });
58
+ }
59
+ const shouldCache = !isBrowser || isCacheActive.getValue();
60
+ if (!shouldCache) {
61
+ return next(op);
62
+ }
63
+ return new Observable((observer) => {
64
+ const sub = next(op).subscribe({
65
+ next(value) {
66
+ transferState.set(storeKey, superjson.stringify(value));
67
+ observer.next(value);
68
+ },
69
+ error(err) {
70
+ transferState.remove(storeKey);
71
+ observer.error(err);
72
+ },
73
+ complete() {
74
+ observer.complete();
75
+ },
76
+ });
77
+ return () => sub.unsubscribe();
78
+ });
79
+ };
80
+ };
81
+
82
+ const noop = () => { };
83
+ function createInnerProxy(callback, path) {
84
+ return new Proxy(noop, {
85
+ get(_target, key) {
86
+ if (typeof key !== 'string' || key === 'then') {
87
+ return undefined;
88
+ }
89
+ return createInnerProxy(callback, [...path, key]);
90
+ },
91
+ apply(_target, _thisArg, args) {
92
+ const isApply = path[path.length - 1] === 'apply';
93
+ return callback({
94
+ args: isApply ? (args.length >= 2 ? args[1] : []) : args,
95
+ path: isApply ? path.slice(0, -1) : path,
96
+ });
97
+ },
98
+ });
99
+ }
100
+ function createRecursiveProxy(callback) {
101
+ return createInnerProxy(callback, []);
102
+ }
103
+ function createFlatProxy(callback) {
104
+ return new Proxy(noop, {
105
+ get(_target, name) {
106
+ if (typeof name !== 'string' || name === 'then') {
107
+ return undefined;
108
+ }
109
+ return callback(name);
110
+ },
111
+ });
112
+ }
113
+
114
+ class TRPCClientError extends Error {
115
+ cause;
116
+ shape;
117
+ data;
118
+ meta;
119
+ constructor(message, opts) {
120
+ super(message);
121
+ this.name = 'TRPCClientError';
122
+ this.cause = opts?.cause;
123
+ this.shape = opts?.shape;
124
+ this.data = opts?.shape?.data;
125
+ this.meta = opts?.meta;
126
+ }
127
+ static from(cause, opts) {
128
+ if (cause instanceof TRPCClientError) {
129
+ return cause;
130
+ }
131
+ if (typeof cause === 'object' &&
132
+ cause !== null &&
133
+ 'error' in cause &&
134
+ typeof cause.error === 'object') {
135
+ const errorShape = cause.error;
136
+ return new TRPCClientError(errorShape.message, {
137
+ shape: errorShape,
138
+ meta: opts?.meta,
139
+ });
140
+ }
141
+ if (cause instanceof Error) {
142
+ return new TRPCClientError(cause.message, {
143
+ cause,
144
+ meta: opts?.meta,
145
+ });
146
+ }
147
+ return new TRPCClientError('Unknown error', { meta: opts?.meta });
148
+ }
149
+ }
150
+
151
+ const clientCallTypeMap = {
152
+ query: 'query',
153
+ mutate: 'mutation',
154
+ };
155
+ function createTRPCRxJSClientProxy(client) {
156
+ return createFlatProxy((key) => {
157
+ if (client.hasOwnProperty(key)) {
158
+ return client[key];
159
+ }
160
+ return createRecursiveProxy(({ path, args }) => {
161
+ const pathCopy = [key, ...path];
162
+ const clientCallType = pathCopy.pop();
163
+ const procedureType = clientCallTypeMap[clientCallType];
164
+ const fullPath = pathCopy.join('.');
165
+ return client[procedureType](fullPath, ...args);
166
+ });
167
+ });
168
+ }
169
+ function createTRPCRxJSProxyClient(opts) {
170
+ const client = new TRPCClient(opts);
171
+ return createTRPCRxJSClientProxy(client);
172
+ }
173
+ function createChain(opts) {
174
+ return new Observable((observer) => {
175
+ function execute(index = 0, op = opts.op) {
176
+ const link = opts.links[index];
177
+ if (!link) {
178
+ throw new Error('No more links to execute - did you forget to add an ending link?');
179
+ }
180
+ return link({
181
+ op,
182
+ next(nextOp) {
183
+ return execute(index + 1, nextOp);
184
+ },
185
+ });
186
+ }
187
+ const result$ = execute();
188
+ const sub = result$.subscribe(observer);
189
+ return () => sub.unsubscribe();
190
+ });
191
+ }
192
+ class TRPCClient {
193
+ links;
194
+ runtime;
195
+ requestId;
196
+ constructor(opts) {
197
+ this.requestId = 0;
198
+ const combinedTransformer = (() => {
199
+ const transformer = opts.transformer;
200
+ if (!transformer) {
201
+ return {
202
+ input: {
203
+ serialize: (data) => data,
204
+ deserialize: (data) => data,
205
+ },
206
+ output: {
207
+ serialize: (data) => data,
208
+ deserialize: (data) => data,
209
+ },
210
+ };
211
+ }
212
+ if ('input' in transformer) {
213
+ return transformer;
214
+ }
215
+ return { input: transformer, output: transformer };
216
+ })();
217
+ this.runtime = {
218
+ transformer: {
219
+ serialize: (data) => combinedTransformer.input.serialize(data),
220
+ deserialize: (data) => combinedTransformer.output.deserialize(data),
221
+ },
222
+ combinedTransformer,
223
+ };
224
+ this.links = opts.links.map((link) => link(this.runtime));
225
+ }
226
+ $request({ type, input, path, context = {}, }) {
227
+ const chain$ = createChain({
228
+ links: this.links,
229
+ op: { id: ++this.requestId, type, path, input, context },
230
+ });
231
+ return new Observable((subscriber) => {
232
+ const sub = chain$.subscribe({
233
+ next: (value) => subscriber.next(value.result.data),
234
+ error: (err) => subscriber.error(TRPCClientError.from(err)),
235
+ complete: () => subscriber.complete(),
236
+ });
237
+ return () => sub.unsubscribe();
238
+ });
239
+ }
240
+ query(path, input, opts) {
241
+ return this.$request({
242
+ type: 'query',
243
+ path,
244
+ input,
245
+ context: opts?.context,
246
+ });
247
+ }
248
+ mutation(path, input, opts) {
249
+ return this.$request({
250
+ type: 'mutation',
251
+ path,
252
+ input,
253
+ context: opts?.context,
254
+ });
255
+ }
256
+ }
257
+
258
+ /* eslint-disable @typescript-eslint/no-explicit-any */
259
+ function httpLink(opts) {
260
+ return (runtime) => {
261
+ const { url, headers: headersOpt, fetch: fetchFn = globalThis.fetch } = opts;
262
+ return ({ op }) => {
263
+ return new Observable((subscriber) => {
264
+ const abortController = new AbortController();
265
+ (async () => {
266
+ try {
267
+ const resolvedHeaders = typeof headersOpt === 'function' ? await headersOpt() : (headersOpt ?? {});
268
+ const fetchHeaders = {};
269
+ for (const [key, value] of Object.entries(resolvedHeaders)) {
270
+ if (value !== undefined) {
271
+ fetchHeaders[key] = Array.isArray(value) ? value.join(', ') : value;
272
+ }
273
+ }
274
+ const serializedInput = op.input !== undefined ? runtime.transformer.serialize(op.input) : undefined;
275
+ let response;
276
+ if (op.type === 'query') {
277
+ let queryUrl = `${url}/${op.path}`;
278
+ if (serializedInput !== undefined) {
279
+ queryUrl += `?input=${encodeURIComponent(JSON.stringify(serializedInput))}`;
280
+ }
281
+ response = await fetchFn(queryUrl, {
282
+ method: 'GET',
283
+ headers: fetchHeaders,
284
+ signal: abortController.signal,
285
+ });
286
+ }
287
+ else {
288
+ response = await fetchFn(`${url}/${op.path}`, {
289
+ method: 'POST',
290
+ headers: {
291
+ 'content-type': 'application/json',
292
+ ...fetchHeaders,
293
+ },
294
+ body: serializedInput !== undefined ? JSON.stringify(serializedInput) : undefined,
295
+ signal: abortController.signal,
296
+ });
297
+ }
298
+ const json = await response.json();
299
+ if (!response.ok || 'error' in json) {
300
+ throw TRPCClientError.from(json, {
301
+ meta: { response, responseJSON: json },
302
+ });
303
+ }
304
+ const deserializedData = runtime.transformer.deserialize(json.result.data);
305
+ subscriber.next({
306
+ result: { data: deserializedData },
307
+ context: op.context,
308
+ });
309
+ subscriber.complete();
310
+ }
311
+ catch (err) {
312
+ if (abortController.signal.aborted)
313
+ return;
314
+ subscriber.error(TRPCClientError.from(err));
315
+ }
316
+ })();
317
+ return () => abortController.abort();
318
+ });
319
+ };
320
+ };
321
+ }
322
+
323
+ const tRPC_INJECTION_TOKEN = new InjectionToken('@analogjs/trpc proxy client');
324
+ function createCustomFetch(serverUrl) {
325
+ return (input, init) => {
326
+ if (globalThis.$fetch) {
327
+ return globalThis.$fetch
328
+ .raw(input.toString(), init)
329
+ .catch((e) => {
330
+ throw e;
331
+ })
332
+ .then((response) => ({
333
+ ...response,
334
+ headers: response.headers,
335
+ json: () => Promise.resolve(response._data),
336
+ }));
337
+ }
338
+ if (typeof window === 'undefined') {
339
+ const base = serverUrl ??
340
+ (() => {
341
+ const host = process.env['NITRO_HOST'] ?? process.env['ANALOG_HOST'] ?? 'localhost';
342
+ const port = process.env['NITRO_PORT'] ?? process.env['ANALOG_PORT'] ?? 4205;
343
+ return `http://${host}:${port}`;
344
+ })();
345
+ if (input instanceof Request) {
346
+ input = new Request(base, input);
347
+ }
348
+ else {
349
+ input = new URL(input.toString(), base);
350
+ }
351
+ }
352
+ return fetch(input, init);
353
+ };
354
+ }
355
+ const createTrpcClient = ({ url, serverUrl, options, httpLinkOptions, }) => {
356
+ const TrpcHeaders = signal({}, /* @ts-ignore */
357
+ ...(ngDevMode ? [{ debugName: "TrpcHeaders" }] : /* istanbul ignore next */ []));
358
+ const provideTrpcClient = () => [
359
+ provideTrpcCacheState(),
360
+ provideTrpcCacheStateStatusManager(),
361
+ {
362
+ provide: tRPC_INJECTION_TOKEN,
363
+ useFactory: () => {
364
+ return createTRPCRxJSProxyClient({
365
+ transformer: options?.transformer,
366
+ links: [
367
+ ...(options?.links ?? []),
368
+ transferStateLink(),
369
+ httpLink({
370
+ url: url ?? '',
371
+ headers: () => TrpcHeaders(),
372
+ fetch: createCustomFetch(serverUrl),
373
+ ...(httpLinkOptions ?? {}),
374
+ }),
375
+ ],
376
+ });
377
+ },
378
+ deps: [tRPC_CACHE_STATE, TransferState],
379
+ },
380
+ ];
381
+ const TrpcClient = tRPC_INJECTION_TOKEN;
382
+ return {
383
+ TrpcClient,
384
+ provideTrpcClient,
385
+ TrpcHeaders,
386
+ /** @deprecated use TrpcClient instead */
387
+ tRPCClient: TrpcClient,
388
+ /** @deprecated use provideTrpcClient instead */
389
+ provideTRPCClient: provideTrpcClient,
390
+ /** @deprecated use TrpcHeaders instead */
391
+ tRPCHeaders: TrpcHeaders,
392
+ };
393
+ };
394
+
395
+ async function waitFor(prom) {
396
+ if (isObservable(prom)) {
397
+ prom = firstValueFrom(prom);
398
+ }
399
+ if (typeof Zone === 'undefined') {
400
+ return prom;
401
+ }
402
+ const macroTask = Zone.current.scheduleMacroTask(`AnalogContentResolve-${Math.random()}`, () => {
403
+ /* noop */
404
+ }, {}, () => {
405
+ /* noop */
406
+ });
407
+ return prom.then((p) => {
408
+ macroTask.invoke();
409
+ return p;
410
+ });
411
+ }
412
+
413
+ /*
414
+ * Public API Surface of ngx-trpc-client
415
+ */
416
+
417
+ /**
418
+ * Generated bundle index. Do not edit.
419
+ */
420
+
421
+ export { createTrpcClient, waitFor };
422
+ //# sourceMappingURL=ngx-trpc-client.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngx-trpc-client.mjs","sources":["../../../projects/ngx-trpc-client/src/client/cache-state.ts","../../../projects/ngx-trpc-client/src/client/links/transfer-state-link.ts","../../../projects/ngx-trpc-client/src/client/proxy.ts","../../../projects/ngx-trpc-client/src/client/trpc-error.ts","../../../projects/ngx-trpc-client/src/client/trpc-client.ts","../../../projects/ngx-trpc-client/src/client/http-link.ts","../../../projects/ngx-trpc-client/src/client/client.ts","../../../projects/ngx-trpc-client/src/client/wait-for.ts","../../../projects/ngx-trpc-client/src/public-api.ts","../../../projects/ngx-trpc-client/src/ngx-trpc-client.ts"],"sourcesContent":["import { BehaviorSubject, first } from 'rxjs';\nimport { APP_BOOTSTRAP_LISTENER, ApplicationRef, inject, InjectionToken } from '@angular/core';\nimport { switchMap, timer } from 'rxjs';\nexport const tRPC_CACHE_STATE = new InjectionToken<{\n isCacheActive: BehaviorSubject<boolean>;\n}>('TRPC_HTTP_TRANSFER_STATE_CACHE_STATE');\n\nexport const provideTrpcCacheState = () => ({\n provide: tRPC_CACHE_STATE,\n useValue: { isCacheActive: new BehaviorSubject(true) },\n});\n\nexport const provideTrpcCacheStateStatusManager = () => ({\n provide: APP_BOOTSTRAP_LISTENER,\n multi: true,\n useFactory: () => {\n const appRef = inject(ApplicationRef);\n const cacheState = inject(tRPC_CACHE_STATE);\n\n return () => {\n // Wait for app to be stable, then add a small delay to ensure\n // all initial tRPC queries have completed before deactivating cache\n appRef.isStable\n .pipe(\n first((isStable) => isStable),\n switchMap(() => timer(100)),\n )\n .subscribe(() => cacheState.isCacheActive.next(false));\n };\n },\n deps: [ApplicationRef, tRPC_CACHE_STATE],\n});\n","import { inject, makeStateKey, type StateKey, TransferState } from '@angular/core';\nimport type { AnyRouter } from '@trpc/server';\nimport { Observable } from 'rxjs';\nimport { tRPC_CACHE_STATE } from '../cache-state';\nimport type { TRPCLink, OperationResult, Operation } from '../types';\nimport superjson from 'superjson';\n\nfunction makeCacheKey(request: Operation<unknown>): StateKey<string> {\n const { type, path, input } = request;\n const encodedParams = Object.entries(input ?? {}).reduce(\n (prev, [key, value]) => prev + `${key}=${JSON.stringify(value)}`,\n '',\n );\n const key = type + '.' + path + '?' + encodedParams;\n const hash = generateHash(key);\n return makeStateKey(hash);\n}\n\nfunction generateHash(value: string): string {\n let hash = 0;\n for (const char of value) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) << 0;\n }\n hash += 2147483647 + 1;\n return hash.toString();\n}\n\nexport const transferStateLink =\n <AppRouter extends AnyRouter>(): TRPCLink<AppRouter> =>\n () => {\n const { isCacheActive } = inject(tRPC_CACHE_STATE);\n const transferState = inject(TransferState);\n const isBrowser = typeof window === 'object';\n\n return ({ next, op }) => {\n if (op.type !== 'query') {\n return next(op);\n }\n\n const storeKey = makeCacheKey(op);\n const storeValue = transferState.get(storeKey, null);\n\n if (isBrowser && storeValue) {\n transferState.remove(storeKey);\n return new Observable<OperationResult<unknown>>((observer) => {\n observer.next(superjson.parse(storeValue));\n observer.complete();\n });\n }\n\n const shouldCache = !isBrowser || isCacheActive.getValue();\n\n if (!shouldCache) {\n return next(op);\n }\n\n return new Observable<OperationResult<unknown>>((observer) => {\n const sub = next(op).subscribe({\n next(value) {\n transferState.set(storeKey, superjson.stringify(value));\n observer.next(value);\n },\n error(err) {\n transferState.remove(storeKey);\n observer.error(err);\n },\n complete() {\n observer.complete();\n },\n });\n return () => sub.unsubscribe();\n });\n };\n };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\ninterface ProxyCallbackOptions {\n path: string[];\n args: unknown[];\n}\n\ntype ProxyCallback = (opts: ProxyCallbackOptions) => unknown;\n\nconst noop = () => {};\n\nfunction createInnerProxy(callback: ProxyCallback, path: string[]): unknown {\n return new Proxy(noop, {\n get(_target, key) {\n if (typeof key !== 'string' || key === 'then') {\n return undefined;\n }\n return createInnerProxy(callback, [...path, key]);\n },\n apply(_target, _thisArg, args) {\n const isApply = path[path.length - 1] === 'apply';\n return callback({\n args: isApply ? (args.length >= 2 ? args[1] : []) : args,\n path: isApply ? path.slice(0, -1) : path,\n });\n },\n });\n}\n\nexport function createRecursiveProxy(callback: ProxyCallback): unknown {\n return createInnerProxy(callback, []);\n}\n\nexport function createFlatProxy<TFaux>(callback: (path: string & keyof TFaux) => unknown): TFaux {\n return new Proxy(noop, {\n get(_target, name) {\n if (typeof name !== 'string' || name === 'then') {\n return undefined;\n }\n return callback(name as string & keyof TFaux);\n },\n }) as TFaux;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport interface TRPCErrorShape {\n message: string;\n code: number;\n data: Record<string, unknown>;\n}\n\nexport class TRPCClientError extends Error {\n public override readonly cause: Error | undefined;\n public readonly shape: TRPCErrorShape | undefined;\n public readonly data: Record<string, unknown> | undefined;\n public meta: Record<string, unknown> | undefined;\n\n constructor(\n message: string,\n opts?: {\n cause?: Error;\n shape?: TRPCErrorShape;\n meta?: Record<string, unknown>;\n },\n ) {\n super(message);\n this.name = 'TRPCClientError';\n this.cause = opts?.cause;\n this.shape = opts?.shape;\n this.data = opts?.shape?.data;\n this.meta = opts?.meta;\n }\n\n static from(cause: unknown, opts?: { meta?: Record<string, unknown> }): TRPCClientError {\n if (cause instanceof TRPCClientError) {\n return cause;\n }\n\n if (\n typeof cause === 'object' &&\n cause !== null &&\n 'error' in cause &&\n typeof (cause as any).error === 'object'\n ) {\n const errorShape = (cause as any).error as TRPCErrorShape;\n return new TRPCClientError(errorShape.message, {\n shape: errorShape,\n meta: opts?.meta,\n });\n }\n\n if (cause instanceof Error) {\n return new TRPCClientError(cause.message, {\n cause,\n meta: opts?.meta,\n });\n }\n\n return new TRPCClientError('Unknown error', { meta: opts?.meta });\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {\n AnyMutationProcedure,\n AnyProcedure,\n AnyQueryProcedure,\n AnyRouter,\n CombinedDataTransformer,\n inferProcedureInput,\n inferProcedureOutput,\n ProcedureType,\n} from '@trpc/server';\nimport { Observable } from 'rxjs';\nimport { createFlatProxy, createRecursiveProxy } from './proxy';\nimport { TRPCClientError } from './trpc-error';\nimport type {\n CreateTRPCClientOptions,\n DataTransformerOptions,\n OperationLink,\n OperationResult,\n OperationResultObservable,\n TRPCClientRuntime,\n TRPCRequestOptions,\n TRPCType,\n} from './types';\n\ninterface RouterRecord {\n [key: string]: AnyProcedure | RouterRecord;\n}\n\ntype ProcedureInput<TProcedure extends AnyProcedure> =\n inferProcedureInput<TProcedure> extends void | undefined\n ? [input?: void | undefined]\n : [input: inferProcedureInput<TProcedure>];\n\ntype Resolver<TProcedure extends AnyProcedure> = (\n ...args: ProcedureInput<TProcedure>\n) => Observable<inferProcedureOutput<TProcedure>>;\n\ntype DecorateProcedure<TProcedure extends AnyProcedure> = TProcedure extends AnyQueryProcedure\n ? {\n query: Resolver<TProcedure>;\n }\n : TProcedure extends AnyMutationProcedure\n ? {\n mutate: Resolver<TProcedure>;\n }\n : never;\n\ntype DecoratedProcedureRecord<TProcedures extends RouterRecord> = {\n [TKey in keyof TProcedures]: TProcedures[TKey] extends AnyProcedure\n ? DecorateProcedure<TProcedures[TKey]>\n : TProcedures[TKey] extends AnyRouter\n ? DecoratedProcedureRecord<TProcedures[TKey]['_def']['record']>\n : TProcedures[TKey] extends RouterRecord\n ? DecoratedProcedureRecord<TProcedures[TKey]>\n : never;\n};\n\nconst clientCallTypeMap: Record<keyof DecorateProcedure<any>, ProcedureType> = {\n query: 'query',\n mutate: 'mutation',\n};\n\ntype UntypedClientProperties = 'links' | 'runtime' | 'requestId' | '$request' | 'query' | 'mutation';\n\ntype IntersectionError<TKey extends string> =\n `The property '${TKey}' in your router collides with a built-in method, rename this router or procedure on your backend.`;\n\nexport type CreateTrpcProxyClient<TRouter extends AnyRouter> =\n DecoratedProcedureRecord<TRouter['_def']['record']> extends infer TProcedureRecord\n ? UntypedClientProperties & keyof TProcedureRecord extends never\n ? TProcedureRecord\n : IntersectionError<UntypedClientProperties & keyof TProcedureRecord>\n : never;\n\nfunction createTRPCRxJSClientProxy<TRouter extends AnyRouter>(client: TRPCClient<TRouter>) {\n return createFlatProxy<CreateTrpcProxyClient<TRouter>>((key) => {\n if (client.hasOwnProperty(key)) {\n return (client as any)[key as any];\n }\n return createRecursiveProxy(({ path, args }) => {\n const pathCopy = [key, ...path];\n const clientCallType = pathCopy.pop()! as keyof DecorateProcedure<any>;\n const procedureType = clientCallTypeMap[clientCallType];\n const fullPath = pathCopy.join('.');\n return (client as any)[procedureType](fullPath, ...args);\n });\n });\n}\n\nexport function createTRPCRxJSProxyClient<TRouter extends AnyRouter>(\n opts: CreateTRPCClientOptions<TRouter>,\n) {\n const client = new TRPCClient<TRouter>(opts);\n return createTRPCRxJSClientProxy(client);\n}\n\nfunction createChain<TInput = unknown, TOutput = unknown>(opts: {\n links: OperationLink<AnyRouter, TInput, TOutput>[];\n op: { id: number; type: TRPCType; path: string; input: TInput; context: Record<string, unknown> };\n}): Observable<OperationResult<TOutput>> {\n return new Observable((observer) => {\n function execute(\n index = 0,\n op = opts.op,\n ): OperationResultObservable<TOutput> {\n const link = opts.links[index];\n if (!link) {\n throw new Error('No more links to execute - did you forget to add an ending link?');\n }\n return link({\n op,\n next(nextOp): OperationResultObservable<TOutput> {\n return execute(index + 1, nextOp);\n },\n });\n }\n\n const result$ = execute();\n const sub = result$.subscribe(observer);\n return () => sub.unsubscribe();\n });\n}\n\nclass TRPCClient<TRouter extends AnyRouter> {\n private readonly links: OperationLink<TRouter>[];\n public readonly runtime: TRPCClientRuntime;\n private requestId: number;\n\n constructor(opts: CreateTRPCClientOptions<TRouter>) {\n this.requestId = 0;\n\n const combinedTransformer: CombinedDataTransformer = (() => {\n const transformer = opts.transformer as DataTransformerOptions | undefined;\n if (!transformer) {\n return {\n input: {\n serialize: (data: any) => data,\n deserialize: (data: any) => data,\n },\n output: {\n serialize: (data: any) => data,\n deserialize: (data: any) => data,\n },\n };\n }\n if ('input' in transformer) {\n return transformer as CombinedDataTransformer;\n }\n return { input: transformer, output: transformer };\n })();\n\n this.runtime = {\n transformer: {\n serialize: (data) => combinedTransformer.input.serialize(data),\n deserialize: (data) => combinedTransformer.output.deserialize(data),\n },\n combinedTransformer,\n };\n\n this.links = opts.links.map((link) => link(this.runtime));\n }\n\n private $request<TOutput = unknown>({\n type,\n input,\n path,\n context = {},\n }: {\n type: TRPCType;\n input: unknown;\n path: string;\n context?: Record<string, unknown>;\n }): Observable<TOutput> {\n const chain$ = createChain({\n links: this.links as OperationLink<any, any, any>[],\n op: { id: ++this.requestId, type, path, input, context },\n });\n\n return new Observable<TOutput>((subscriber) => {\n const sub = chain$.subscribe({\n next: (value) => subscriber.next(value.result.data as TOutput),\n error: (err) => subscriber.error(TRPCClientError.from(err)),\n complete: () => subscriber.complete(),\n });\n return () => sub.unsubscribe();\n });\n }\n\n public query(path: string, input?: unknown, opts?: TRPCRequestOptions) {\n return this.$request({\n type: 'query',\n path,\n input,\n context: opts?.context,\n });\n }\n\n public mutation(path: string, input?: unknown, opts?: TRPCRequestOptions) {\n return this.$request({\n type: 'mutation',\n path,\n input,\n context: opts?.context,\n });\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Observable } from 'rxjs';\nimport type { AnyRouter } from '@trpc/server';\nimport type { TRPCLink, TRPCClientRuntime, OperationLink, OperationResult, HTTPHeaders } from './types';\nimport { TRPCClientError } from './trpc-error';\n\nexport interface HttpLinkOptions {\n url: string;\n headers?: HTTPHeaders | (() => HTTPHeaders | Promise<HTTPHeaders>);\n fetch?: typeof globalThis.fetch;\n}\n\nexport function httpLink<TRouter extends AnyRouter>(\n opts: HttpLinkOptions,\n): TRPCLink<TRouter> {\n return (runtime: TRPCClientRuntime): OperationLink<TRouter> => {\n const { url, headers: headersOpt, fetch: fetchFn = globalThis.fetch } = opts;\n\n return ({ op }) => {\n return new Observable<OperationResult<unknown>>((subscriber) => {\n const abortController = new AbortController();\n\n (async () => {\n try {\n const resolvedHeaders: HTTPHeaders =\n typeof headersOpt === 'function' ? await headersOpt() : (headersOpt ?? {});\n\n const fetchHeaders: Record<string, string> = {};\n for (const [key, value] of Object.entries(resolvedHeaders)) {\n if (value !== undefined) {\n fetchHeaders[key] = Array.isArray(value) ? value.join(', ') : value;\n }\n }\n\n const serializedInput =\n op.input !== undefined ? runtime.transformer.serialize(op.input) : undefined;\n\n let response: Response;\n\n if (op.type === 'query') {\n let queryUrl = `${url}/${op.path}`;\n if (serializedInput !== undefined) {\n queryUrl += `?input=${encodeURIComponent(JSON.stringify(serializedInput))}`;\n }\n response = await fetchFn(queryUrl, {\n method: 'GET',\n headers: fetchHeaders,\n signal: abortController.signal,\n });\n } else {\n response = await fetchFn(`${url}/${op.path}`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n ...fetchHeaders,\n },\n body: serializedInput !== undefined ? JSON.stringify(serializedInput) : undefined,\n signal: abortController.signal,\n });\n }\n\n const json = await response.json();\n\n if (!response.ok || 'error' in json) {\n throw TRPCClientError.from(json, {\n meta: { response, responseJSON: json },\n });\n }\n\n const deserializedData = runtime.transformer.deserialize(json.result.data);\n\n subscriber.next({\n result: { data: deserializedData },\n context: op.context,\n });\n subscriber.complete();\n } catch (err) {\n if (abortController.signal.aborted) return;\n subscriber.error(TRPCClientError.from(err));\n }\n })();\n\n return () => abortController.abort();\n });\n };\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\ndeclare const process: { env: Record<string, string | undefined> };\n\nimport { InjectionToken, Provider, signal, TransferState } from '@angular/core';\nimport type { AnyRouter } from '@trpc/server';\nimport { transferStateLink } from './links/transfer-state-link';\nimport {\n provideTrpcCacheState,\n provideTrpcCacheStateStatusManager,\n tRPC_CACHE_STATE,\n} from './cache-state';\nimport { createTRPCRxJSProxyClient } from './trpc-client';\nimport type { CreateTRPCClientOptions, HTTPHeaders } from './types';\nimport { httpLink, type HttpLinkOptions } from './http-link';\n\nexport interface TrpcOptions<T extends AnyRouter> {\n url: string;\n serverUrl?: string;\n options?: Partial<CreateTRPCClientOptions<T>>;\n httpLinkOptions?: Omit<HttpLinkOptions, 'url' | 'headers'>;\n}\n\nexport type TrpcClient<AppRouter extends AnyRouter> = ReturnType<\n typeof createTRPCRxJSProxyClient<AppRouter>\n>;\n\nconst tRPC_INJECTION_TOKEN = new InjectionToken<unknown>('@analogjs/trpc proxy client');\n\nfunction createCustomFetch(serverUrl?: string) {\n return (input: RequestInfo | URL, init?: RequestInit) => {\n if ((globalThis as any).$fetch) {\n return (globalThis as any).$fetch\n .raw(input.toString(), init)\n .catch((e: any) => {\n throw e;\n })\n .then((response: any) => ({\n ...response,\n headers: response.headers,\n json: () => Promise.resolve(response._data),\n }));\n }\n\n if (typeof window === 'undefined') {\n const base =\n serverUrl ??\n (() => {\n const host = process.env['NITRO_HOST'] ?? process.env['ANALOG_HOST'] ?? 'localhost';\n const port = process.env['NITRO_PORT'] ?? process.env['ANALOG_PORT'] ?? 4205;\n return `http://${host}:${port}`;\n })();\n if (input instanceof Request) {\n input = new Request(base, input);\n } else {\n input = new URL(input.toString(), base);\n }\n }\n\n return fetch(input, init);\n };\n}\n\nexport const createTrpcClient = <AppRouter extends AnyRouter>({\n url,\n serverUrl,\n options,\n httpLinkOptions,\n}: TrpcOptions<AppRouter>) => {\n const TrpcHeaders = signal<HTTPHeaders>({});\n const provideTrpcClient = (): Provider[] => [\n provideTrpcCacheState(),\n provideTrpcCacheStateStatusManager(),\n {\n provide: tRPC_INJECTION_TOKEN,\n useFactory: () => {\n return createTRPCRxJSProxyClient<AppRouter>({\n transformer: options?.transformer,\n links: [\n ...(options?.links ?? []),\n transferStateLink(),\n httpLink({\n url: url ?? '',\n headers: () => TrpcHeaders(),\n fetch: createCustomFetch(serverUrl),\n ...(httpLinkOptions ?? {}),\n }),\n ],\n });\n },\n deps: [tRPC_CACHE_STATE, TransferState],\n },\n ];\n const TrpcClient = tRPC_INJECTION_TOKEN as InjectionToken<TrpcClient<AppRouter>>;\n return {\n TrpcClient,\n provideTrpcClient,\n TrpcHeaders,\n /** @deprecated use TrpcClient instead */\n tRPCClient: TrpcClient,\n /** @deprecated use provideTrpcClient instead */\n provideTRPCClient: provideTrpcClient,\n /** @deprecated use TrpcHeaders instead */\n tRPCHeaders: TrpcHeaders,\n };\n};\n","import { firstValueFrom, isObservable, Observable } from 'rxjs';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ndeclare const Zone: any;\n\nexport async function waitFor<T>(prom: Promise<T> | Observable<T>): Promise<T> {\n if (isObservable(prom)) {\n prom = firstValueFrom(prom);\n }\n\n if (typeof Zone === 'undefined') {\n return prom;\n }\n\n const macroTask = Zone.current.scheduleMacroTask(\n `AnalogContentResolve-${Math.random()}`,\n () => {\n /* noop */\n },\n {},\n () => {\n /* noop */\n },\n );\n return prom.then((p: T) => {\n macroTask.invoke();\n return p;\n });\n}\n","/*\n * Public API Surface of ngx-trpc-client\n */\n\nexport * from './client';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "ngx-trpc-client",
3
+ "version": "0.0.1",
4
+ "description": "Type-safe tRPC client for Angular with RxJS observables and SSR transfer state support",
5
+ "license": "MIT",
6
+ "author": "BeGj",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/BeGj/ngx-trpc-client.git"
10
+ },
11
+ "bugs": "https://github.com/BeGj/ngx-trpc-client/issues",
12
+ "homepage": "https://github.com/BeGj/ngx-trpc-client#readme",
13
+ "keywords": [
14
+ "angular",
15
+ "trpc",
16
+ "rxjs",
17
+ "ssr",
18
+ "signals",
19
+ "type-safe"
20
+ ],
21
+ "peerDependencies": {
22
+ "@angular/common": "^20.3.0",
23
+ "@angular/core": "^20.3.0",
24
+ "@trpc/server": "^10.25.0 || ^11.0.0",
25
+ "superjson": "^2.2.1"
26
+ },
27
+ "dependencies": {
28
+ "tslib": "^2.3.0"
29
+ },
30
+ "sideEffects": false,
31
+ "module": "fesm2022/ngx-trpc-client.mjs",
32
+ "typings": "types/ngx-trpc-client.d.ts",
33
+ "exports": {
34
+ "./package.json": {
35
+ "default": "./package.json"
36
+ },
37
+ ".": {
38
+ "types": "./types/ngx-trpc-client.d.ts",
39
+ "default": "./fesm2022/ngx-trpc-client.mjs"
40
+ }
41
+ },
42
+ "type": "module"
43
+ }
@@ -0,0 +1,88 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { InjectionToken, Provider } from '@angular/core';
3
+ import * as ngx_trpc_client from 'ngx-trpc-client';
4
+ import { AnyRouter, CombinedDataTransformer, DataTransformer, AnyProcedure, AnyQueryProcedure, inferProcedureInput, inferProcedureOutput, AnyMutationProcedure } from '@trpc/server';
5
+ import { Observable } from 'rxjs';
6
+
7
+ type TRPCType = 'query' | 'mutation';
8
+ type OperationContext = Record<string, unknown>;
9
+ interface Operation<TInput = unknown> {
10
+ id: number;
11
+ type: TRPCType;
12
+ input: TInput;
13
+ path: string;
14
+ context: OperationContext;
15
+ }
16
+ type HTTPHeaders = Record<string, string[] | string | undefined>;
17
+ interface OperationResult<TOutput = unknown> {
18
+ result: {
19
+ data: TOutput;
20
+ };
21
+ context?: OperationContext;
22
+ }
23
+ type OperationResultObservable<TOutput = unknown> = Observable<OperationResult<TOutput>>;
24
+ type OperationLink<_TRouter extends AnyRouter = AnyRouter, TInput = unknown, TOutput = unknown> = (opts: {
25
+ op: Operation<TInput>;
26
+ next: (op: Operation<TInput>) => OperationResultObservable<TOutput>;
27
+ }) => OperationResultObservable<TOutput>;
28
+ interface TRPCClientRuntime {
29
+ transformer: {
30
+ serialize: (data: any) => any;
31
+ deserialize: (data: any) => any;
32
+ };
33
+ combinedTransformer: CombinedDataTransformer;
34
+ }
35
+ type TRPCLink<TRouter extends AnyRouter> = (runtime: TRPCClientRuntime) => OperationLink<TRouter>;
36
+ type DataTransformerOptions = CombinedDataTransformer | DataTransformer;
37
+ interface CreateTRPCClientOptions<_TRouter extends AnyRouter> {
38
+ transformer?: DataTransformerOptions;
39
+ links: TRPCLink<_TRouter>[];
40
+ }
41
+
42
+ interface RouterRecord {
43
+ [key: string]: AnyProcedure | RouterRecord;
44
+ }
45
+ type ProcedureInput<TProcedure extends AnyProcedure> = inferProcedureInput<TProcedure> extends void | undefined ? [input?: void | undefined] : [input: inferProcedureInput<TProcedure>];
46
+ type Resolver<TProcedure extends AnyProcedure> = (...args: ProcedureInput<TProcedure>) => Observable<inferProcedureOutput<TProcedure>>;
47
+ type DecorateProcedure<TProcedure extends AnyProcedure> = TProcedure extends AnyQueryProcedure ? {
48
+ query: Resolver<TProcedure>;
49
+ } : TProcedure extends AnyMutationProcedure ? {
50
+ mutate: Resolver<TProcedure>;
51
+ } : never;
52
+ type DecoratedProcedureRecord<TProcedures extends RouterRecord> = {
53
+ [TKey in keyof TProcedures]: TProcedures[TKey] extends AnyProcedure ? DecorateProcedure<TProcedures[TKey]> : TProcedures[TKey] extends AnyRouter ? DecoratedProcedureRecord<TProcedures[TKey]['_def']['record']> : TProcedures[TKey] extends RouterRecord ? DecoratedProcedureRecord<TProcedures[TKey]> : never;
54
+ };
55
+ type UntypedClientProperties = 'links' | 'runtime' | 'requestId' | '$request' | 'query' | 'mutation';
56
+ type IntersectionError<TKey extends string> = `The property '${TKey}' in your router collides with a built-in method, rename this router or procedure on your backend.`;
57
+ type CreateTrpcProxyClient<TRouter extends AnyRouter> = DecoratedProcedureRecord<TRouter['_def']['record']> extends infer TProcedureRecord ? UntypedClientProperties & keyof TProcedureRecord extends never ? TProcedureRecord : IntersectionError<UntypedClientProperties & keyof TProcedureRecord> : never;
58
+ declare function createTRPCRxJSProxyClient<TRouter extends AnyRouter>(opts: CreateTRPCClientOptions<TRouter>): CreateTrpcProxyClient<TRouter>;
59
+
60
+ interface HttpLinkOptions {
61
+ url: string;
62
+ headers?: HTTPHeaders | (() => HTTPHeaders | Promise<HTTPHeaders>);
63
+ fetch?: typeof globalThis.fetch;
64
+ }
65
+
66
+ interface TrpcOptions<T extends AnyRouter> {
67
+ url: string;
68
+ serverUrl?: string;
69
+ options?: Partial<CreateTRPCClientOptions<T>>;
70
+ httpLinkOptions?: Omit<HttpLinkOptions, 'url' | 'headers'>;
71
+ }
72
+ type TrpcClient<AppRouter extends AnyRouter> = ReturnType<typeof createTRPCRxJSProxyClient<AppRouter>>;
73
+ declare const createTrpcClient: <AppRouter extends AnyRouter>({ url, serverUrl, options, httpLinkOptions, }: TrpcOptions<AppRouter>) => {
74
+ TrpcClient: InjectionToken<ngx_trpc_client.CreateTrpcProxyClient<AppRouter>>;
75
+ provideTrpcClient: () => Provider[];
76
+ TrpcHeaders: _angular_core.WritableSignal<HTTPHeaders>;
77
+ /** @deprecated use TrpcClient instead */
78
+ tRPCClient: InjectionToken<ngx_trpc_client.CreateTrpcProxyClient<AppRouter>>;
79
+ /** @deprecated use provideTrpcClient instead */
80
+ provideTRPCClient: () => Provider[];
81
+ /** @deprecated use TrpcHeaders instead */
82
+ tRPCHeaders: _angular_core.WritableSignal<HTTPHeaders>;
83
+ };
84
+
85
+ declare function waitFor<T>(prom: Promise<T> | Observable<T>): Promise<T>;
86
+
87
+ export { createTrpcClient, waitFor };
88
+ export type { CreateTrpcProxyClient, TrpcClient, TrpcOptions };