1
1
import { Code } from '$lib/error/knownErrors' ;
2
- import { isReduxError } from '$lib/state/reduxError' ;
3
- import { getCookie } from '$lib/utils/cookies' ;
4
- import { invoke as invokeTauri } from '@tauri-apps/api/core' ;
5
- import { listen as listenTauri } from '@tauri-apps/api/event' ;
6
- import type { EventCallback , EventName } from '@tauri-apps/api/event' ;
7
-
8
- type ServerResonse < T > =
9
- | {
10
- type : 'success' ;
11
- subject : T ;
12
- }
13
- | {
14
- type : 'error' ;
15
- subject : unknown ;
16
- } ;
17
2
18
3
export class UserError extends Error {
19
4
code ! : Code ;
@@ -40,104 +25,3 @@ export function getUserErrorCode(error: unknown): Code | undefined {
40
25
const userError = UserError . fromError ( error ) ;
41
26
return userError . code ;
42
27
}
43
-
44
- export async function invoke < T > ( command : string , params : Record < string , unknown > = { } ) : Promise < T > {
45
- // This commented out code can be used to delay/reject an api call
46
- // return new Promise<T>((resolve, reject) => {
47
- // if (command.startsWith('apply')) {
48
- // setTimeout(() => {
49
- // reject('testing the error page');
50
- // }, 500);
51
- // } else {
52
- // resolve(invokeTauri<T>(command, params));
53
- // }
54
- // }).catch((reason) => {
55
- // const userError = UserError.fromError(reason);
56
- // console.error(`ipc->${command}: ${JSON.stringify(params)}`, userError);
57
- // throw userError;
58
- // });
59
-
60
- try {
61
- if ( import . meta. env . VITE_BUILD_TARGET === 'web' ) {
62
- const response = await fetch ( `http://${ getWebUrl ( ) } ` , {
63
- method : 'POST' ,
64
- headers : {
65
- 'Content-Type' : 'application/json'
66
- } ,
67
- body : JSON . stringify ( { command, params } )
68
- } ) ;
69
- const out : ServerResonse < T > = await response . json ( ) ;
70
- if ( out . type === 'success' ) {
71
- return out . subject ;
72
- } else {
73
- if ( isReduxError ( out . subject ) ) {
74
- console . error ( `ipc->${ command } : ${ JSON . stringify ( params ) } ` , out . subject ) ;
75
- }
76
- throw out . subject ;
77
- }
78
- } else {
79
- return await invokeTauri < T > ( command , params ) ;
80
- }
81
- } catch ( error : unknown ) {
82
- if ( isReduxError ( error ) ) {
83
- console . error ( `ipc->${ command } : ${ JSON . stringify ( params ) } ` , error ) ;
84
- }
85
- throw error ;
86
- }
87
- }
88
-
89
- let webListener : WebListener | undefined ;
90
-
91
- export function listen < T > ( event : EventName , handle : EventCallback < T > ) {
92
- if ( import . meta. env . VITE_BUILD_TARGET === 'web' ) {
93
- if ( ! webListener ) {
94
- webListener = new WebListener ( ) ;
95
- }
96
-
97
- // TODO: Listening in electron
98
- return webListener . listen ( { name : event , handle } ) ;
99
- } else {
100
- const unlisten = listenTauri ( event , handle ) ;
101
- return async ( ) => await unlisten . then ( ( unlistenFn ) => unlistenFn ( ) ) ;
102
- }
103
- }
104
-
105
- class WebListener {
106
- private socket : WebSocket | undefined ;
107
- private count = 0 ;
108
- private handlers : { name : EventName ; handle : EventCallback < any > } [ ] = [ ] ;
109
-
110
- listen ( handler : { name : EventName ; handle : EventCallback < any > } ) : ( ) => Promise < void > {
111
- this . handlers . push ( handler ) ;
112
- this . count ++ ;
113
- if ( ! this . socket ) {
114
- this . socket = new WebSocket ( `ws://${ getWebUrl ( ) } /ws` ) ;
115
- this . socket . addEventListener ( 'message' , ( event ) => {
116
- const data : { name : string ; payload : any } = JSON . parse ( event . data ) ;
117
- for ( const handler of this . handlers ) {
118
- if ( handler . name === data . name ) {
119
- // The id is an artifact from tauri, we don't use it so
120
- // I've used a random value
121
- handler . handle ( { event : data . name , payload : data . payload , id : 69 } ) ;
122
- }
123
- }
124
- } ) ;
125
- }
126
-
127
- // This needs to be async just so it's the same API as the tauri version
128
- return async ( ) => {
129
- this . handlers = this . handlers . filter ( ( h ) => h !== handler ) ;
130
- this . count -- ;
131
- if ( this . count === 0 ) {
132
- this . socket ?. close ( ) ;
133
- this . socket = undefined ;
134
- }
135
- } ;
136
- }
137
- }
138
-
139
- function getWebUrl ( ) : string {
140
- const host = getCookie ( 'butlerHost' ) || import . meta. env . VITE_BUTLER_HOST || 'localhost' ;
141
- const port = getCookie ( 'butlerPort' ) || import . meta. env . VITE_BUTLER_PORT || '6978' ;
142
- return `${ host } :${ port } ` ;
143
- }
0 commit comments