@ic-reactor/react 3.5.1 → 3.7.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.
Files changed (125) hide show
  1. package/README.md +28 -9
  2. package/dist/auth/authentication-manager.d.ts +66 -0
  3. package/dist/auth/authentication-manager.d.ts.map +1 -0
  4. package/dist/auth/authentication-manager.js +458 -0
  5. package/dist/auth/authentication-manager.js.map +1 -0
  6. package/dist/auth/constants.d.ts +18 -0
  7. package/dist/auth/constants.d.ts.map +1 -0
  8. package/dist/auth/constants.js +18 -0
  9. package/dist/auth/constants.js.map +1 -0
  10. package/dist/auth/createIdentityAttributeHooks.d.ts +14 -0
  11. package/dist/auth/createIdentityAttributeHooks.d.ts.map +1 -0
  12. package/dist/auth/createIdentityAttributeHooks.js +54 -0
  13. package/dist/auth/createIdentityAttributeHooks.js.map +1 -0
  14. package/dist/auth/identity-attributes-manager.d.ts +19 -0
  15. package/dist/auth/identity-attributes-manager.d.ts.map +1 -0
  16. package/dist/auth/identity-attributes-manager.js +94 -0
  17. package/dist/auth/identity-attributes-manager.js.map +1 -0
  18. package/dist/auth/identity-attributes.d.ts +19 -0
  19. package/dist/auth/identity-attributes.d.ts.map +1 -0
  20. package/dist/auth/identity-attributes.js +170 -0
  21. package/dist/auth/identity-attributes.js.map +1 -0
  22. package/dist/auth/index.d.ts +8 -0
  23. package/dist/auth/index.d.ts.map +1 -0
  24. package/dist/auth/index.js +8 -0
  25. package/dist/auth/index.js.map +1 -0
  26. package/dist/auth/types.d.ts +75 -0
  27. package/dist/auth/types.d.ts.map +1 -0
  28. package/dist/auth/types.js +2 -0
  29. package/dist/auth/types.js.map +1 -0
  30. package/dist/createActorHooks.d.ts +12 -12
  31. package/dist/createActorHooks.d.ts.map +1 -1
  32. package/dist/createActorHooks.js.map +1 -1
  33. package/dist/createInfiniteQuery.d.ts +32 -32
  34. package/dist/createInfiniteQuery.d.ts.map +1 -1
  35. package/dist/createInfiniteQuery.js +6 -6
  36. package/dist/createInfiniteQuery.js.map +1 -1
  37. package/dist/createMutation.d.ts +12 -1
  38. package/dist/createMutation.d.ts.map +1 -1
  39. package/dist/createMutation.js +11 -0
  40. package/dist/createMutation.js.map +1 -1
  41. package/dist/createQuery.d.ts +12 -2
  42. package/dist/createQuery.d.ts.map +1 -1
  43. package/dist/createQuery.js +15 -5
  44. package/dist/createQuery.js.map +1 -1
  45. package/dist/createSuspenseInfiniteQuery.d.ts +31 -31
  46. package/dist/createSuspenseInfiniteQuery.d.ts.map +1 -1
  47. package/dist/createSuspenseInfiniteQuery.js +6 -6
  48. package/dist/createSuspenseInfiniteQuery.js.map +1 -1
  49. package/dist/createSuspenseQuery.d.ts +2 -2
  50. package/dist/createSuspenseQuery.d.ts.map +1 -1
  51. package/dist/createSuspenseQuery.js.map +1 -1
  52. package/dist/defineReactor.d.ts +74 -0
  53. package/dist/defineReactor.d.ts.map +1 -0
  54. package/dist/defineReactor.js +75 -0
  55. package/dist/defineReactor.js.map +1 -0
  56. package/dist/{createAuthHooks.d.ts → hooks/createAuthHooks.d.ts} +6 -13
  57. package/dist/hooks/createAuthHooks.d.ts.map +1 -0
  58. package/dist/{createAuthHooks.js → hooks/createAuthHooks.js} +12 -57
  59. package/dist/hooks/createAuthHooks.js.map +1 -0
  60. package/dist/hooks/index.d.ts +2 -0
  61. package/dist/hooks/index.d.ts.map +1 -1
  62. package/dist/hooks/index.js +2 -0
  63. package/dist/hooks/index.js.map +1 -1
  64. package/dist/hooks/useActorInfiniteQuery.d.ts +9 -9
  65. package/dist/hooks/useActorInfiniteQuery.d.ts.map +1 -1
  66. package/dist/hooks/useActorInfiniteQuery.js +3 -1
  67. package/dist/hooks/useActorInfiniteQuery.js.map +1 -1
  68. package/dist/hooks/useActorMethod.d.ts +17 -17
  69. package/dist/hooks/useActorMethod.d.ts.map +1 -1
  70. package/dist/hooks/useActorMethod.js.map +1 -1
  71. package/dist/hooks/useActorMutation.d.ts +18 -7
  72. package/dist/hooks/useActorMutation.d.ts.map +1 -1
  73. package/dist/hooks/useActorMutation.js +11 -0
  74. package/dist/hooks/useActorMutation.js.map +1 -1
  75. package/dist/hooks/useActorQuery.d.ts +8 -8
  76. package/dist/hooks/useActorQuery.d.ts.map +1 -1
  77. package/dist/hooks/useActorQuery.js.map +1 -1
  78. package/dist/hooks/useActorSuspenseInfiniteQuery.d.ts +9 -9
  79. package/dist/hooks/useActorSuspenseInfiniteQuery.d.ts.map +1 -1
  80. package/dist/hooks/useActorSuspenseInfiniteQuery.js +3 -1
  81. package/dist/hooks/useActorSuspenseInfiniteQuery.js.map +1 -1
  82. package/dist/hooks/useActorSuspenseQuery.d.ts +8 -8
  83. package/dist/hooks/useActorSuspenseQuery.d.ts.map +1 -1
  84. package/dist/hooks/useActorSuspenseQuery.js.map +1 -1
  85. package/dist/index.d.ts +2 -1
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +2 -1
  88. package/dist/index.js.map +1 -1
  89. package/dist/types.d.ts +24 -24
  90. package/dist/types.d.ts.map +1 -1
  91. package/dist/utils.d.ts +3 -0
  92. package/dist/utils.d.ts.map +1 -1
  93. package/dist/utils.js +10 -2
  94. package/dist/utils.js.map +1 -1
  95. package/llms.txt +48 -0
  96. package/package.json +28 -22
  97. package/src/auth/authentication-manager.ts +519 -0
  98. package/src/auth/constants.ts +25 -0
  99. package/src/auth/createIdentityAttributeHooks.ts +83 -0
  100. package/src/auth/identity-attributes-manager.ts +127 -0
  101. package/src/auth/identity-attributes.ts +270 -0
  102. package/src/auth/index.ts +7 -0
  103. package/src/auth/types.ts +88 -0
  104. package/src/createActorHooks.ts +81 -49
  105. package/src/createInfiniteQuery.ts +153 -97
  106. package/src/createMutation.ts +34 -18
  107. package/src/createQuery.ts +92 -48
  108. package/src/createSuspenseInfiniteQuery.ts +165 -114
  109. package/src/createSuspenseQuery.ts +67 -41
  110. package/src/defineReactor.test.ts +70 -0
  111. package/src/defineReactor.ts +150 -0
  112. package/src/{createAuthHooks.ts → hooks/createAuthHooks.ts} +17 -98
  113. package/src/hooks/index.ts +4 -0
  114. package/src/hooks/useActorInfiniteQuery.ts +44 -30
  115. package/src/hooks/useActorMethod.ts +62 -53
  116. package/src/hooks/useActorMutation.ts +47 -30
  117. package/src/hooks/useActorQuery.ts +36 -32
  118. package/src/hooks/useActorSuspenseInfiniteQuery.ts +56 -30
  119. package/src/hooks/useActorSuspenseQuery.ts +42 -32
  120. package/src/index.ts +3 -1
  121. package/src/types.ts +76 -71
  122. package/src/utils.test.ts +14 -0
  123. package/src/utils.ts +15 -2
  124. package/dist/createAuthHooks.d.ts.map +0 -1
  125. package/dist/createAuthHooks.js.map +0 -1
@@ -31,6 +31,7 @@ import type {
31
31
  BaseActor,
32
32
  TransformKey,
33
33
  ReactorReturnOk,
34
+ ReactorQueryData,
34
35
  ReactorReturnErr,
35
36
  } from "@ic-reactor/core"
36
37
  import {
@@ -45,35 +46,35 @@ import {
45
46
  } from "@tanstack/react-query"
46
47
  import { CallConfig } from "@icp-sdk/core/agent"
47
48
  import { NoInfer } from "./types"
48
- import { mergeFactoryQueryKey } from "./utils"
49
+ import { mergeFactoryQueryKey, normalizeQueryData } from "./utils"
49
50
 
50
51
  type SuspenseInfiniteFactoryCallOptions = {
51
52
  queryKey?: QueryKey
52
53
  }
53
54
 
54
55
  type SuspenseInfiniteQueryFactoryFn<
55
- A,
56
- M extends FunctionName<A>,
57
- T extends TransformKey,
56
+ Service,
57
+ Method extends FunctionName<Service>,
58
+ Transform extends TransformKey,
58
59
  TPageParam,
59
- TSelected,
60
+ Selected,
60
61
  > = {
61
62
  (
62
- getArgs: (pageParam: TPageParam) => ReactorArgs<A, M, T>
63
+ getArgs: (pageParam: TPageParam) => ReactorArgs<Service, Method, Transform>
63
64
  ): SuspenseInfiniteQueryResult<
64
- SuspenseInfiniteQueryPageData<A, M, T>,
65
+ SuspenseInfiniteQueryPageData<Service, Method, Transform>,
65
66
  TPageParam,
66
- TSelected,
67
- SuspenseInfiniteQueryError<A, M, T>
67
+ Selected,
68
+ SuspenseInfiniteQueryError<Service, Method, Transform>
68
69
  >
69
70
  (
70
- getArgs: (pageParam: TPageParam) => ReactorArgs<A, M, T>,
71
+ getArgs: (pageParam: TPageParam) => ReactorArgs<Service, Method, Transform>,
71
72
  options?: SuspenseInfiniteFactoryCallOptions
72
73
  ): SuspenseInfiniteQueryResult<
73
- SuspenseInfiniteQueryPageData<A, M, T>,
74
+ SuspenseInfiniteQueryPageData<Service, Method, Transform>,
74
75
  TPageParam,
75
- TSelected,
76
- SuspenseInfiniteQueryError<A, M, T>
76
+ Selected,
77
+ SuspenseInfiniteQueryError<Service, Method, Transform>
77
78
  >
78
79
  }
79
80
 
@@ -83,17 +84,17 @@ type SuspenseInfiniteQueryFactoryFn<
83
84
 
84
85
  /** The raw page data type returned by the query function */
85
86
  export type SuspenseInfiniteQueryPageData<
86
- A = BaseActor,
87
- M extends FunctionName<A> = FunctionName<A>,
88
- T extends TransformKey = "candid",
89
- > = ReactorReturnOk<A, M, T>
87
+ Service = BaseActor,
88
+ Method extends FunctionName<Service> = FunctionName<Service>,
89
+ Transform extends TransformKey = "candid",
90
+ > = ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>
90
91
 
91
92
  /** The error type for infinite queries */
92
93
  export type SuspenseInfiniteQueryError<
93
- A = BaseActor,
94
- M extends FunctionName<A> = FunctionName<A>,
95
- T extends TransformKey = "candid",
96
- > = ReactorReturnErr<A, M, T>
94
+ Service = BaseActor,
95
+ Method extends FunctionName<Service> = FunctionName<Service>,
96
+ Transform extends TransformKey = "candid",
97
+ > = ReactorReturnErr<Service, Method, Transform>
97
98
 
98
99
  // ============================================================================
99
100
  // Configuration Types
@@ -103,49 +104,55 @@ export type SuspenseInfiniteQueryError<
103
104
  * Configuration for createActorSuspenseInfiniteQuery.
104
105
  * Extends InfiniteQueryObserverOptions to accept all React Query options at the create level.
105
106
  *
106
- * @template A - The actor interface type
107
- * @template M - The method name on the actor
108
- * @template T - The transformation key (identity, display, etc.)
107
+ * @template Service - The actor interface type
108
+ * @template Method - The method name on the actor
109
+ * @template Transform - The transformation key (identity, display, etc.)
109
110
  * @template TPageParam - The type of the page parameter
110
- * @template TSelected - The type returned after select transformation
111
+ * @template Selected - The type returned after select transformation
111
112
  */
112
113
  export interface SuspenseInfiniteQueryConfig<
113
- A = BaseActor,
114
- M extends FunctionName<A> = FunctionName<A>,
115
- T extends TransformKey = "candid",
114
+ Service = BaseActor,
115
+ Method extends FunctionName<Service> = FunctionName<Service>,
116
+ Transform extends TransformKey = "candid",
116
117
  TPageParam = unknown,
117
- TSelected = InfiniteData<SuspenseInfiniteQueryPageData<A, M, T>, TPageParam>,
118
+ Selected = InfiniteData<
119
+ SuspenseInfiniteQueryPageData<Service, Method, Transform>,
120
+ TPageParam
121
+ >,
118
122
  > extends Omit<
119
123
  InfiniteQueryObserverOptions<
120
- SuspenseInfiniteQueryPageData<A, M, T>,
121
- SuspenseInfiniteQueryError<A, M, T>,
122
- TSelected,
124
+ SuspenseInfiniteQueryPageData<Service, Method, Transform>,
125
+ SuspenseInfiniteQueryError<Service, Method, Transform>,
126
+ Selected,
123
127
  QueryKey,
124
128
  TPageParam
125
129
  >,
126
130
  "queryKey" | "queryFn"
127
131
  > {
128
132
  /** The method to call on the canister */
129
- functionName: M
133
+ functionName: Method
130
134
  /** Call configuration for the actor method */
131
135
  callConfig?: CallConfig
132
136
  /** Custom query key (optional, auto-generated if not provided) */
133
137
  queryKey?: QueryKey
134
138
  /** Function to get args from page parameter */
135
- getArgs: (pageParam: TPageParam) => ReactorArgs<A, M, T>
139
+ getArgs: (pageParam: TPageParam) => ReactorArgs<Service, Method, Transform>
136
140
  }
137
141
 
138
142
  /**
139
143
  * Configuration for createActorSuspenseInfiniteQueryFactory (without getArgs; provided at call time).
140
144
  */
141
145
  export type SuspenseInfiniteQueryFactoryConfig<
142
- A = BaseActor,
143
- M extends FunctionName<A> = FunctionName<A>,
144
- T extends TransformKey = "candid",
146
+ Service = BaseActor,
147
+ Method extends FunctionName<Service> = FunctionName<Service>,
148
+ Transform extends TransformKey = "candid",
145
149
  TPageParam = unknown,
146
- TSelected = InfiniteData<SuspenseInfiniteQueryPageData<A, M, T>, TPageParam>,
150
+ Selected = InfiniteData<
151
+ SuspenseInfiniteQueryPageData<Service, Method, Transform>,
152
+ TPageParam
153
+ >,
147
154
  > = Omit<
148
- SuspenseInfiniteQueryConfig<A, M, T, TPageParam, TSelected>,
155
+ SuspenseInfiniteQueryConfig<Service, Method, Transform, TPageParam, Selected>,
149
156
  "getArgs"
150
157
  > & {
151
158
  /**
@@ -154,7 +161,7 @@ export type SuspenseInfiniteQueryFactoryConfig<
154
161
  * a stable serializable representation of the logical query identity
155
162
  * (typically excluding pagination/cursor fields).
156
163
  */
157
- getKeyArgs?: (args: ReactorArgs<A, M, T>) => unknown
164
+ getKeyArgs?: (args: ReactorArgs<Service, Method, Transform>) => unknown
158
165
  }
159
166
 
160
167
  // ============================================================================
@@ -167,16 +174,16 @@ export type SuspenseInfiniteQueryFactoryConfig<
167
174
  export interface UseSuspenseInfiniteQueryWithSelect<
168
175
  TPageData,
169
176
  TPageParam,
170
- TSelected = InfiniteData<TPageData, TPageParam>,
177
+ Selected = InfiniteData<TPageData, TPageParam>,
171
178
  TError = Error,
172
179
  > {
173
- // Overload 1: Without select - returns TSelected
180
+ // Overload 1: Without select - returns Selected
174
181
  (
175
182
  options?: Omit<
176
183
  UseSuspenseInfiniteQueryOptions<
177
184
  TPageData,
178
185
  TError,
179
- TSelected,
186
+ Selected,
180
187
  QueryKey,
181
188
  TPageParam
182
189
  >,
@@ -187,10 +194,10 @@ export interface UseSuspenseInfiniteQueryWithSelect<
187
194
  | "getNextPageParam"
188
195
  | "getPreviousPageParam"
189
196
  >
190
- ): UseSuspenseInfiniteQueryResult<TSelected, TError>
197
+ ): UseSuspenseInfiniteQueryResult<Selected, TError>
191
198
 
192
199
  // Overload 2: With select - chains on top and returns TFinal
193
- <TFinal = TSelected>(
200
+ <TFinal = Selected>(
194
201
  options: Omit<
195
202
  UseSuspenseInfiniteQueryOptions<
196
203
  TPageData,
@@ -206,7 +213,7 @@ export interface UseSuspenseInfiniteQueryWithSelect<
206
213
  | "getNextPageParam"
207
214
  | "getPreviousPageParam"
208
215
  > & {
209
- select: (data: TSelected) => TFinal
216
+ select: (data: Selected) => TFinal
210
217
  }
211
218
  ): UseSuspenseInfiniteQueryResult<TFinal, TError>
212
219
  }
@@ -220,23 +227,23 @@ export interface UseSuspenseInfiniteQueryWithSelect<
220
227
  *
221
228
  * @template TPageData - The raw page data type
222
229
  * @template TPageParam - The page parameter type
223
- * @template TSelected - The type after select transformation
230
+ * @template Selected - The type after select transformation
224
231
  * @template TError - The error type
225
232
  */
226
233
  export interface SuspenseInfiniteQueryResult<
227
234
  TPageData,
228
235
  TPageParam,
229
- TSelected = InfiniteData<TPageData, TPageParam>,
236
+ Selected = InfiniteData<TPageData, TPageParam>,
230
237
  TError = Error,
231
238
  > {
232
239
  /** Fetch first page in loader (uses ensureInfiniteQueryData for cache-first) */
233
- fetch: () => Promise<TSelected>
240
+ fetch: () => Promise<Selected>
234
241
 
235
242
  /** React hook for components - supports pagination */
236
243
  useSuspenseInfiniteQuery: UseSuspenseInfiniteQueryWithSelect<
237
244
  TPageData,
238
245
  TPageParam,
239
- TSelected,
246
+ Selected,
240
247
  TError
241
248
  >
242
249
 
@@ -251,8 +258,8 @@ export interface SuspenseInfiniteQueryResult<
251
258
  * Returns undefined if data is not in cache.
252
259
  */
253
260
  getCacheData: {
254
- (): TSelected | undefined
255
- <TFinal>(select: (data: TSelected) => TFinal): TFinal | undefined
261
+ (): Selected | undefined
262
+ <TFinal>(select: (data: Selected) => TFinal): TFinal | undefined
256
263
  }
257
264
  }
258
265
 
@@ -261,22 +268,31 @@ export interface SuspenseInfiniteQueryResult<
261
268
  // ============================================================================
262
269
 
263
270
  const createSuspenseInfiniteQueryImpl = <
264
- A,
265
- M extends FunctionName<A> = FunctionName<A>,
266
- T extends TransformKey = "candid",
271
+ Service,
272
+ Method extends FunctionName<Service> = FunctionName<Service>,
273
+ Transform extends TransformKey = "candid",
267
274
  TPageParam = unknown,
268
- TSelected = InfiniteData<SuspenseInfiniteQueryPageData<A, M, T>, TPageParam>,
275
+ Selected = InfiniteData<
276
+ SuspenseInfiniteQueryPageData<Service, Method, Transform>,
277
+ TPageParam
278
+ >,
269
279
  >(
270
- reactor: Reactor<A, T>,
271
- config: SuspenseInfiniteQueryConfig<A, M, T, TPageParam, TSelected>
280
+ reactor: Reactor<Service, Transform>,
281
+ config: SuspenseInfiniteQueryConfig<
282
+ Service,
283
+ Method,
284
+ Transform,
285
+ TPageParam,
286
+ Selected
287
+ >
272
288
  ): SuspenseInfiniteQueryResult<
273
- SuspenseInfiniteQueryPageData<A, M, T>,
289
+ SuspenseInfiniteQueryPageData<Service, Method, Transform>,
274
290
  TPageParam,
275
- TSelected,
276
- SuspenseInfiniteQueryError<A, M, T>
291
+ Selected,
292
+ SuspenseInfiniteQueryError<Service, Method, Transform>
277
293
  > => {
278
- type TPageData = SuspenseInfiniteQueryPageData<A, M, T>
279
- type TError = SuspenseInfiniteQueryError<A, M, T>
294
+ type TPageData = SuspenseInfiniteQueryPageData<Service, Method, Transform>
295
+ type TError = SuspenseInfiniteQueryError<Service, Method, Transform>
280
296
  type TInfiniteData = InfiniteData<TPageData, TPageParam>
281
297
 
282
298
  const {
@@ -316,7 +332,9 @@ const createSuspenseInfiniteQueryImpl = <
316
332
  args,
317
333
  callConfig,
318
334
  })
319
- return result
335
+ return normalizeQueryData<ReactorReturnOk<Service, Method, Transform>>(
336
+ result as ReactorReturnOk<Service, Method, Transform>
337
+ )
320
338
  }
321
339
 
322
340
  // Get infinite query options for fetchInfiniteQuery
@@ -335,21 +353,21 @@ const createSuspenseInfiniteQueryImpl = <
335
353
  })
336
354
 
337
355
  // Fetch function for loaders (cache-first, fetches first page)
338
- const fetch = async (): Promise<TSelected> => {
356
+ const fetch = async (): Promise<Selected> => {
339
357
  // Use ensureInfiniteQueryData to get cached data or fetch if stale
340
358
  const result = await reactor.queryClient.ensureInfiniteQueryData(
341
359
  getInfiniteQueryOptions()
342
360
  )
343
361
 
344
362
  // Result is already InfiniteData format
345
- return select ? select(result) : (result as unknown as TSelected)
363
+ return select ? select(result) : (result as unknown as Selected)
346
364
  }
347
365
 
348
366
  // Implementation
349
367
  const useSuspenseInfiniteQueryHook: UseSuspenseInfiniteQueryWithSelect<
350
368
  TPageData,
351
369
  TPageParam,
352
- TSelected,
370
+ Selected,
353
371
  TError
354
372
  > = (options: any): any => {
355
373
  // Chain the selects: raw -> config.select -> options.select
@@ -385,7 +403,7 @@ const createSuspenseInfiniteQueryImpl = <
385
403
  }
386
404
 
387
405
  // Get data from cache without fetching
388
- const getCacheData = (selectFn?: (data: TSelected) => any) => {
406
+ const getCacheData = (selectFn?: (data: Selected) => any) => {
389
407
  const queryKey = getQueryKey()
390
408
  const cachedRawData = reactor.queryClient.getQueryData(
391
409
  queryKey
@@ -398,7 +416,7 @@ const createSuspenseInfiniteQueryImpl = <
398
416
  // Apply config.select to raw cache data
399
417
  const selectedData = (
400
418
  select ? select(cachedRawData) : cachedRawData
401
- ) as TSelected
419
+ ) as Selected
402
420
 
403
421
  // Apply optional select parameter
404
422
  if (selectFn) {
@@ -422,23 +440,38 @@ const createSuspenseInfiniteQueryImpl = <
422
440
  // ============================================================================
423
441
 
424
442
  export function createSuspenseInfiniteQuery<
425
- A,
426
- T extends TransformKey,
427
- M extends FunctionName<A> = FunctionName<A>,
443
+ Service,
444
+ Transform extends TransformKey,
445
+ Method extends FunctionName<Service> = FunctionName<Service>,
428
446
  TPageParam = unknown,
429
- TSelected = InfiniteData<SuspenseInfiniteQueryPageData<A, M, T>, TPageParam>,
447
+ Selected = InfiniteData<
448
+ SuspenseInfiniteQueryPageData<Service, Method, Transform>,
449
+ TPageParam
450
+ >,
430
451
  >(
431
- reactor: Reactor<A, T>,
432
- config: SuspenseInfiniteQueryConfig<NoInfer<A>, M, T, TPageParam, TSelected>
452
+ reactor: Reactor<Service, Transform>,
453
+ config: SuspenseInfiniteQueryConfig<
454
+ NoInfer<Service>,
455
+ Method,
456
+ Transform,
457
+ TPageParam,
458
+ Selected
459
+ >
433
460
  ): SuspenseInfiniteQueryResult<
434
- SuspenseInfiniteQueryPageData<A, M, T>,
461
+ SuspenseInfiniteQueryPageData<Service, Method, Transform>,
435
462
  TPageParam,
436
- TSelected,
437
- SuspenseInfiniteQueryError<A, M, T>
463
+ Selected,
464
+ SuspenseInfiniteQueryError<Service, Method, Transform>
438
465
  > {
439
466
  return createSuspenseInfiniteQueryImpl(
440
467
  reactor,
441
- config as SuspenseInfiniteQueryConfig<A, M, T, TPageParam, TSelected>
468
+ config as SuspenseInfiniteQueryConfig<
469
+ Service,
470
+ Method,
471
+ Transform,
472
+ TPageParam,
473
+ Selected
474
+ >
442
475
  )
443
476
  }
444
477
 
@@ -450,11 +483,11 @@ export function createSuspenseInfiniteQuery<
450
483
  * Create a suspense infinite query factory that accepts getArgs at call time.
451
484
  * Useful when pagination logic varies by context.
452
485
  *
453
- * @template A - The actor interface type
454
- * @template M - The method name on the actor
455
- * @template T - The transformation key (identity, display, etc.)
486
+ * @template Service - The actor interface type
487
+ * @template Method - The method name on the actor
488
+ * @template Transform - The transformation key (identity, display, etc.)
456
489
  * @template TPageParam - The page parameter type
457
- * @template TSelected - The type returned after select transformation
490
+ * @template Selected - The type returned after select transformation
458
491
  *
459
492
  * @param reactor - The Reactor instance
460
493
  * @param config - Suspense infinite query configuration (without getArgs)
@@ -483,29 +516,38 @@ export function createSuspenseInfiniteQuery<
483
516
  */
484
517
 
485
518
  export function createSuspenseInfiniteQueryFactory<
486
- A,
487
- T extends TransformKey,
488
- M extends FunctionName<A> = FunctionName<A>,
519
+ Service,
520
+ Transform extends TransformKey,
521
+ Method extends FunctionName<Service> = FunctionName<Service>,
489
522
  TPageParam = unknown,
490
- TSelected = InfiniteData<SuspenseInfiniteQueryPageData<A, M, T>, TPageParam>,
523
+ Selected = InfiniteData<
524
+ SuspenseInfiniteQueryPageData<Service, Method, Transform>,
525
+ TPageParam
526
+ >,
491
527
  >(
492
- reactor: Reactor<A, T>,
528
+ reactor: Reactor<Service, Transform>,
493
529
  config: SuspenseInfiniteQueryFactoryConfig<
494
- NoInfer<A>,
495
- M,
496
- T,
530
+ NoInfer<Service>,
531
+ Method,
532
+ Transform,
497
533
  TPageParam,
498
- TSelected
534
+ Selected
499
535
  >
500
- ): SuspenseInfiniteQueryFactoryFn<A, M, T, TPageParam, TSelected> {
536
+ ): SuspenseInfiniteQueryFactoryFn<
537
+ Service,
538
+ Method,
539
+ Transform,
540
+ TPageParam,
541
+ Selected
542
+ > {
501
543
  const factory: SuspenseInfiniteQueryFactoryFn<
502
- A,
503
- M,
504
- T,
544
+ Service,
545
+ Method,
546
+ Transform,
505
547
  TPageParam,
506
- TSelected
548
+ Selected
507
549
  > = (
508
- getArgs: (pageParam: TPageParam) => ReactorArgs<A, M, T>,
550
+ getArgs: (pageParam: TPageParam) => ReactorArgs<Service, Method, Transform>,
509
551
  options?: SuspenseInfiniteFactoryCallOptions
510
552
  ) => {
511
553
  const initialArgs = getArgs(config.initialPageParam)
@@ -516,22 +558,31 @@ export function createSuspenseInfiniteQueryFactory<
516
558
  keyArgs
517
559
  )
518
560
 
519
- return createSuspenseInfiniteQueryImpl<A, M, T, TPageParam, TSelected>(
520
- reactor,
521
- {
522
- ...(({ getKeyArgs: _getKeyArgs, ...rest }) => rest)(
523
- config as SuspenseInfiniteQueryFactoryConfig<
524
- A,
525
- M,
526
- T,
527
- TPageParam,
528
- TSelected
529
- >
530
- ),
531
- queryKey,
532
- getArgs,
533
- } as SuspenseInfiniteQueryConfig<A, M, T, TPageParam, TSelected>
534
- )
561
+ return createSuspenseInfiniteQueryImpl<
562
+ Service,
563
+ Method,
564
+ Transform,
565
+ TPageParam,
566
+ Selected
567
+ >(reactor, {
568
+ ...(({ getKeyArgs: _getKeyArgs, ...rest }) => rest)(
569
+ config as SuspenseInfiniteQueryFactoryConfig<
570
+ Service,
571
+ Method,
572
+ Transform,
573
+ TPageParam,
574
+ Selected
575
+ >
576
+ ),
577
+ queryKey,
578
+ getArgs,
579
+ } as SuspenseInfiniteQueryConfig<
580
+ Service,
581
+ Method,
582
+ Transform,
583
+ TPageParam,
584
+ Selected
585
+ >)
535
586
  }
536
587
 
537
588
  return factory