File tree Expand file tree Collapse file tree 5 files changed +53
-36
lines changed
Expand file tree Collapse file tree 5 files changed +53
-36
lines changed Original file line number Diff line number Diff line change 11import { HttpMethod } from './drivers/default/enums/httpMethod' ;
22import { Orion } from './orion' ;
3- import { AuthDriver } from './drivers/default/enums/authDriver' ;
43import { AxiosInstance , AxiosRequestConfig , AxiosResponse } from 'axios' ;
54
65export class HttpClient {
7- protected static xsrfTokenFetched : boolean = false ;
86 protected baseUrl : string ;
97 protected client : AxiosInstance ;
108
@@ -19,10 +17,6 @@ export class HttpClient {
1917 params : any = { } ,
2018 data : any = { }
2119 ) : Promise < AxiosResponse > {
22- if ( Orion . getAuthDriver ( ) === AuthDriver . Sanctum ) {
23- await this . prefetchXSRFToken ( ) ;
24- }
25-
2620 const config : AxiosRequestConfig = Object . assign ( Orion . getHttpClientConfig ( ) , {
2721 baseURL : this . baseUrl ,
2822 url,
@@ -37,21 +31,6 @@ export class HttpClient {
3731 return this . client . request ( config ) ;
3832 }
3933
40- public async prefetchXSRFToken ( ) : Promise < void > {
41- if ( HttpClient . xsrfTokenFetched ) {
42- return ;
43- }
44-
45- await this . client
46- . get ( `sanctum/csrf-cookie` , { baseURL : Orion . getHost ( ) } )
47- . then ( ( ) => {
48- HttpClient . xsrfTokenFetched = true ;
49- } )
50- . catch ( ( ) => {
51- HttpClient . xsrfTokenFetched = false ;
52- } ) ;
53- }
54-
5534 public getAxios ( ) : AxiosInstance {
5635 return this . client ;
5736 }
Original file line number Diff line number Diff line change @@ -99,6 +99,18 @@ export class Orion {
9999 return this ;
100100 }
101101
102+ public static async csrf ( ) : Promise < void > {
103+ if ( this . authDriver !== AuthDriver . Sanctum ) {
104+ throw new Error (
105+ `Current auth driver is set to "${ this . authDriver } ". Fetching CSRF cookie can only be used with "sanctum" driver.`
106+ ) ;
107+ }
108+
109+ await Orion . makeHttpClient ( )
110+ . getAxios ( )
111+ . get ( `sanctum/csrf-cookie` , { baseURL : Orion . getHost ( ) } ) ;
112+ }
113+
102114 protected static buildHttpClientConfig ( ) : AxiosRequestConfig {
103115 const config : AxiosRequestConfig = {
104116 withCredentials : Orion . getAuthDriver ( ) === AuthDriver . Sanctum ,
Original file line number Diff line number Diff line change 11import { Orion } from '../../src/orion' ;
22import makeServer from './drivers/default/server' ;
33import { HttpMethod } from '../../src/drivers/default/enums/httpMethod' ;
4- import { AuthDriver } from '../../src/drivers/default/enums/authDriver' ;
54
65let server : any ;
76
@@ -23,18 +22,4 @@ describe('HttpClient tests', () => {
2322 const requests = server . pretender . handledRequests ;
2423 expect ( requests [ 0 ] . requestHeaders [ 'Authorization' ] ) . toStrictEqual ( 'Bearer test' ) ;
2524 } ) ;
26-
27- test ( 'prefetching xsrf token' , async ( ) => {
28- server . schema . posts . create ( { title : 'Test Post' } ) ;
29-
30- Orion . setAuthDriver ( AuthDriver . Sanctum ) ;
31- await Orion . makeHttpClient ( ) . request ( '/posts' , HttpMethod . GET ) ;
32-
33- const requests = server . pretender . handledRequests ;
34- expect ( requests [ 0 ] . url ) . toBe ( 'https://api-mock.test/sanctum/csrf-cookie' ) ;
35- expect ( requests [ 1 ] . url ) . toBe ( 'https://api-mock.test/api/posts' ) ;
36-
37- await Orion . makeHttpClient ( ) . request ( '/posts' , HttpMethod . GET ) ;
38- expect ( requests [ 2 ] . url ) . toBe ( 'https://api-mock.test/api/posts' ) ;
39- } ) ;
4025} ) ;
Original file line number Diff line number Diff line change 1+ import { Orion } from '../../src/orion' ;
2+ import { AuthDriver } from '../../src/drivers/default/enums/authDriver' ;
3+ import makeServer from './drivers/default/server' ;
4+
5+ let server : any ;
6+
7+ beforeEach ( ( ) => {
8+ server = makeServer ( ) ;
9+ } ) ;
10+
11+ afterEach ( ( ) => {
12+ server . shutdown ( ) ;
13+ } ) ;
14+
15+ describe ( 'Orion tests' , ( ) => {
16+ test ( 'fetching csrf cookie' , async ( ) => {
17+ Orion . setAuthDriver ( AuthDriver . Sanctum ) ;
18+
19+ await Orion . csrf ( ) ;
20+
21+ const requests = server . pretender . handledRequests ;
22+ expect ( requests [ 0 ] . url ) . toBe ( 'https://api-mock.test/sanctum/csrf-cookie' ) ;
23+ } ) ;
24+
25+ test ( 'attempting to fetch csrf cookie with invalid driver' , async ( ) => {
26+ Orion . setAuthDriver ( AuthDriver . Passport ) ;
27+
28+ try {
29+ await Orion . csrf ( ) ;
30+ expect ( false ) . toBeTruthy ( ) ;
31+ } catch ( error ) {
32+ expect ( error . message ) . toBe (
33+ `Current auth driver is set to "${ AuthDriver . Passport } ". Fetching CSRF cookie can only be used with "sanctum" driver.`
34+ ) ;
35+ }
36+
37+ const requests = server . pretender . handledRequests ;
38+ expect ( requests ) . toHaveLength ( 0 ) ;
39+ } ) ;
40+ } ) ;
Original file line number Diff line number Diff line change 11import { Orion } from '../../src/orion' ;
22import { AuthDriver } from '../../src/drivers/default/enums/authDriver' ;
33import axios from 'axios' ;
4+ import { HttpMethod } from '../../src/drivers/default/enums/httpMethod' ;
45
56describe ( 'Orion tests' , ( ) => {
67 test ( 'initialization' , ( ) => {
You can’t perform that action at this time.
0 commit comments