@@ -62,48 +62,58 @@ export function runCliSolid(queryEngine: QueryEngineBase, version: string): void
6262 // Add session to query engine context if authenticated
6363 let wrappedQueryEngine = queryEngine ;
6464 if ( session ) {
65- // Create a wrapper that adds the session to all query contexts
66- wrappedQueryEngine = Object . create ( queryEngine ) ;
65+ // Create a proxy that intercepts query methods and adds the session to context
6766 const originalQuery = queryEngine . query . bind ( queryEngine ) ;
6867 const originalQueryBindings = queryEngine . queryBindings . bind ( queryEngine ) ;
6968 const originalQueryQuads = queryEngine . queryQuads . bind ( queryEngine ) ;
7069 const originalQueryBoolean = queryEngine . queryBoolean . bind ( queryEngine ) ;
7170 const originalQueryVoid = queryEngine . queryVoid . bind ( queryEngine ) ;
7271
73- wrappedQueryEngine . query = function ( query : any , context ?: any ) : any {
74- return originalQuery ( query , {
75- ...context ,
76- '@comunica/actor-http-inrupt-solid-client-authn:session' : session ,
77- } ) ;
78- } ;
79-
80- wrappedQueryEngine . queryBindings = function ( query : any , context ?: any ) : any {
81- return originalQueryBindings ( query , {
82- ...context ,
83- '@comunica/actor-http-inrupt-solid-client-authn:session' : session ,
84- } ) ;
85- } ;
86-
87- wrappedQueryEngine . queryQuads = function ( query : any , context ?: any ) : any {
88- return originalQueryQuads ( query , {
89- ...context ,
90- '@comunica/actor-http-inrupt-solid-client-authn:session' : session ,
91- } ) ;
92- } ;
93-
94- wrappedQueryEngine . queryBoolean = function ( query : any , context ?: any ) : any {
95- return originalQueryBoolean ( query , {
96- ...context ,
97- '@comunica/actor-http-inrupt-solid-client-authn:session' : session ,
98- } ) ;
99- } ;
100-
101- wrappedQueryEngine . queryVoid = function ( query : any , context ?: any ) : any {
102- return originalQueryVoid ( query , {
103- ...context ,
104- '@comunica/actor-http-inrupt-solid-client-authn:session' : session ,
105- } ) ;
106- } ;
72+ wrappedQueryEngine = new Proxy ( queryEngine , {
73+ get ( target , prop ) {
74+ if ( prop === 'query' ) {
75+ return function ( query : any , context ?: any ) : any {
76+ return originalQuery ( query , {
77+ ...context ,
78+ '@comunica/actor-http-inrupt-solid-client-authn:session' : session ,
79+ } ) ;
80+ } ;
81+ }
82+ if ( prop === 'queryBindings' ) {
83+ return function ( query : any , context ?: any ) : any {
84+ return originalQueryBindings ( query , {
85+ ...context ,
86+ '@comunica/actor-http-inrupt-solid-client-authn:session' : session ,
87+ } ) ;
88+ } ;
89+ }
90+ if ( prop === 'queryQuads' ) {
91+ return function ( query : any , context ?: any ) : any {
92+ return originalQueryQuads ( query , {
93+ ...context ,
94+ '@comunica/actor-http-inrupt-solid-client-authn:session' : session ,
95+ } ) ;
96+ } ;
97+ }
98+ if ( prop === 'queryBoolean' ) {
99+ return function ( query : any , context ?: any ) : any {
100+ return originalQueryBoolean ( query , {
101+ ...context ,
102+ '@comunica/actor-http-inrupt-solid-client-authn:session' : session ,
103+ } ) ;
104+ } ;
105+ }
106+ if ( prop === 'queryVoid' ) {
107+ return function ( query : any , context ?: any ) : any {
108+ return originalQueryVoid ( query , {
109+ ...context ,
110+ '@comunica/actor-http-inrupt-solid-client-authn:session' : session ,
111+ } ) ;
112+ } ;
113+ }
114+ return Reflect . get ( target , prop ) ;
115+ } ,
116+ } ) ;
107117 }
108118
109119 const server = new SparqlMcpServer (
0 commit comments