22 * Import the RTK Query library from Redux Toolkit
33 * @see https://redux-toolkit.js.org/rtk-query/overview
44 */
5- import { createApi , fetchBaseQuery } from '@reduxjs/toolkit/query' ;
5+ import {
6+ createApi ,
7+ FetchArgs ,
8+ fetchBaseQuery ,
9+ FetchBaseQueryError ,
10+ FetchBaseQueryMeta ,
11+ QueryReturnValue ,
12+ } from '@reduxjs/toolkit/query' ;
613
714/**
815 * Import internal modules
@@ -22,13 +29,24 @@ import type {
2229} from './davinci.types.js' ;
2330import type { ContinueNode } from './node.types.js' ;
2431import type { StartNode } from '../types.js' ;
32+ import { initQuery } from './effects/request.effect.utils.js' ;
33+ import { RequestMiddleware } from './effects/request.effect.types.js' ;
34+
35+ type BaseQueryResponse = Promise <
36+ QueryReturnValue < unknown , FetchBaseQueryError , FetchBaseQueryMeta >
37+ > ;
38+
39+ interface Extras {
40+ requestMiddleware : RequestMiddleware [ ] ;
41+ }
2542
2643/**
2744 * @const davinciApi - Define the DaVinci API for Redux state management
2845 * @see https://redux-toolkit.js.org/rtk-query/overview
2946 */
3047export const davinciApi = createApi ( {
3148 reducerPath : 'davinci' ,
49+ // TODO: implement extraOptions for request interceptors: https://stackoverflow.com/a/77569083 & https://stackoverflow.com/a/65129117
3250 baseQuery : fetchBaseQuery ( {
3351 prepareHeaders : ( headers ) => {
3452 headers . set ( 'Accept' , 'application/json' ) ;
@@ -49,14 +67,14 @@ export const davinciApi = createApi({
4967 const state = api . getState ( ) as RootStateWithNode < ContinueNode > ;
5068 const links = state . node . server . _links ;
5169 const requestBody = transformActionRequest ( state . node , params . action ) ;
70+ const requestMiddleware = ( api . extra as Extras ) . requestMiddleware ;
5271
5372 let href = '' ;
5473
5574 if ( links && 'next' in links ) {
5675 href = links [ 'next' ] . href || '' ;
5776 }
58-
59- const response = await baseQuery ( {
77+ const request : FetchArgs = {
6078 // TODO: If we don't have a `next.href`, we should handle this better
6179 url : href ,
6280 credentials : 'include' ,
@@ -67,7 +85,10 @@ export const davinciApi = createApi({
6785 interactionToken : state . node . server . interactionToken ,
6886 } ,
6987 body : JSON . stringify ( requestBody ) ,
70- } ) ;
88+ } ;
89+ const response : BaseQueryResponse = initQuery ( request , 'flow' )
90+ . applyMiddleware ( requestMiddleware )
91+ . applyQuery ( async ( req : FetchArgs ) => await baseQuery ( req ) ) ;
7192
7293 /**
7394 * Returns the original response from DaVinci,
@@ -120,6 +141,7 @@ export const davinciApi = createApi({
120141 async queryFn ( body , api , __ , baseQuery ) {
121142 const state = api . getState ( ) as RootStateWithNode < ContinueNode > ;
122143 const links = state . node . server . _links ;
144+ const requestMiddleware = ( api . extra as Extras ) . requestMiddleware ;
123145
124146 let requestBody ;
125147 let href = '' ;
@@ -134,7 +156,7 @@ export const davinciApi = createApi({
134156 requestBody = body ;
135157 }
136158
137- const response = await baseQuery ( {
159+ const request : FetchArgs = {
138160 url : href ,
139161 credentials : 'include' ,
140162 method : 'POST' ,
@@ -144,7 +166,10 @@ export const davinciApi = createApi({
144166 interactionToken : state . node . server . interactionToken ,
145167 } ,
146168 body : JSON . stringify ( requestBody ) ,
147- } ) ;
169+ } ;
170+ const response : BaseQueryResponse = initQuery ( request , 'next' )
171+ . applyMiddleware ( requestMiddleware )
172+ . applyQuery ( async ( req : FetchArgs ) => await baseQuery ( req ) ) ;
148173
149174 /**
150175 * Returns the original response from DaVinci,
@@ -196,6 +221,7 @@ export const davinciApi = createApi({
196221 * @method queryFn - This is just a wrapper around the fetch call
197222 */
198223 async queryFn ( options , api , __ , baseQuery ) {
224+ const requestMiddleware = ( api . extra as Extras ) . requestMiddleware ;
199225 const state = api . getState ( ) as RootStateWithNode < StartNode > ;
200226
201227 if ( ! state ) {
@@ -236,14 +262,17 @@ export const davinciApi = createApi({
236262 url . search = existingParams . toString ( ) ;
237263 }
238264
239- const response = await baseQuery ( {
265+ const request : FetchArgs = {
240266 url : url . toString ( ) ,
241267 credentials : 'include' ,
242268 method : 'GET' ,
243269 headers : {
244270 'Content-Type' : 'application/x-www-form-urlencoded' ,
245271 } ,
246- } ) ;
272+ } ;
273+ const response : BaseQueryResponse = initQuery ( request , 'start' )
274+ . applyMiddleware ( requestMiddleware )
275+ . applyQuery ( async ( req : FetchArgs ) => await baseQuery ( req ) ) ;
247276
248277 /**
249278 * Returns the original response from DaVinci,
@@ -291,8 +320,9 @@ export const davinciApi = createApi({
291320 } ,
292321 } ) ,
293322 resume : builder . query < unknown , { continueToken : string } > ( {
294- async queryFn ( { continueToken } , _api , _c , baseQuery ) {
323+ async queryFn ( { continueToken } , api , _c , baseQuery ) {
295324 const continueUrl = window . localStorage . getItem ( 'continueUrl' ) || null ;
325+ const requestMiddleware = ( api . extra as Extras ) . requestMiddleware ;
296326
297327 if ( ! continueToken ) {
298328 return {
@@ -319,7 +349,7 @@ export const davinciApi = createApi({
319349 window . localStorage . removeItem ( 'continueUrl' ) ;
320350 }
321351
322- const response = await baseQuery ( {
352+ const request : FetchArgs = {
323353 url : continueUrl ,
324354 credentials : 'include' ,
325355 method : 'POST' ,
@@ -328,7 +358,10 @@ export const davinciApi = createApi({
328358 Authorization : `Bearer ${ continueToken } ` ,
329359 } ,
330360 body : JSON . stringify ( { } ) ,
331- } ) ;
361+ } ;
362+ const response : BaseQueryResponse = initQuery ( request , 'resume' )
363+ . applyMiddleware ( requestMiddleware )
364+ . applyQuery ( async ( req : FetchArgs ) => await baseQuery ( req ) ) ;
332365
333366 return response ;
334367 } ,
@@ -349,7 +382,6 @@ export const davinciApi = createApi({
349382 }
350383
351384 const cacheEntry : DaVinciCacheEntry = api . getCacheEntry ( ) ;
352- console . log ( 'resumed handling repsonse' ) ;
353385 handleResponse ( cacheEntry , api . dispatch , response ?. status || 0 ) ;
354386 } ,
355387 } ) ,
0 commit comments