@wishknish/knishio-client-js 0.8.0 → 0.8.1
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.
- package/README.md +23 -0
- package/dist/client.cjs.js +4 -4
- package/dist/client.cjs.js.map +1 -1
- package/dist/client.es.mjs +297 -273
- package/dist/client.es.mjs.map +1 -1
- package/dist/client.iife.js +16 -16
- package/dist/client.iife.js.map +1 -1
- package/package.json +1 -1
- package/src/KnishIOClient.js +47 -7
- package/src/libraries/urql/UrqlClientWrapper.js +14 -4
package/package.json
CHANGED
package/src/KnishIOClient.js
CHANGED
|
@@ -127,7 +127,8 @@ export default class KnishIOClient {
|
|
|
127
127
|
client = null,
|
|
128
128
|
socket = null,
|
|
129
129
|
serverSdkVersion = 3,
|
|
130
|
-
logging = false
|
|
130
|
+
logging = false,
|
|
131
|
+
defaultRequestPolicy = null
|
|
131
132
|
}) {
|
|
132
133
|
this.initialize({
|
|
133
134
|
uri,
|
|
@@ -135,7 +136,8 @@ export default class KnishIOClient {
|
|
|
135
136
|
socket,
|
|
136
137
|
client,
|
|
137
138
|
serverSdkVersion,
|
|
138
|
-
logging
|
|
139
|
+
logging,
|
|
140
|
+
defaultRequestPolicy
|
|
139
141
|
})
|
|
140
142
|
}
|
|
141
143
|
|
|
@@ -155,11 +157,16 @@ export default class KnishIOClient {
|
|
|
155
157
|
socket = null,
|
|
156
158
|
client = null,
|
|
157
159
|
serverSdkVersion = 3,
|
|
158
|
-
logging = false
|
|
160
|
+
logging = false,
|
|
161
|
+
defaultRequestPolicy = null
|
|
159
162
|
}) {
|
|
160
163
|
this.reset()
|
|
161
164
|
|
|
162
165
|
this.$__logging = logging
|
|
166
|
+
// Client-level urql request policy applied to reads that omit a per-call
|
|
167
|
+
// policy. A long-lived server/sync client set to 'network-only' never serves
|
|
168
|
+
// a stale cache-first read; browser/SPA consumers leave this null (cache-first).
|
|
169
|
+
this.$__defaultRequestPolicy = defaultRequestPolicy
|
|
163
170
|
this.$__authTokenObjects = {}
|
|
164
171
|
this.$__authInProcess = false
|
|
165
172
|
this.abortControllers = new Map()
|
|
@@ -247,6 +254,25 @@ export default class KnishIOClient {
|
|
|
247
254
|
return this.$__serverSdkVersion
|
|
248
255
|
}
|
|
249
256
|
|
|
257
|
+
/**
|
|
258
|
+
* Returns the client-level default urql request policy (or null)
|
|
259
|
+
*
|
|
260
|
+
* @return {string|null}
|
|
261
|
+
*/
|
|
262
|
+
getDefaultRequestPolicy () {
|
|
263
|
+
return this.$__defaultRequestPolicy || null
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Sets the client-level default urql request policy applied to reads that
|
|
268
|
+
* omit a per-call policy (e.g. 'network-only' for a long-lived server client)
|
|
269
|
+
*
|
|
270
|
+
* @param {string|null} policy - 'cache-first'|'cache-only'|'network-only'|'cache-and-network'|null
|
|
271
|
+
*/
|
|
272
|
+
setDefaultRequestPolicy (policy) {
|
|
273
|
+
this.$__defaultRequestPolicy = policy
|
|
274
|
+
}
|
|
275
|
+
|
|
250
276
|
/**
|
|
251
277
|
* Reset common properties
|
|
252
278
|
*/
|
|
@@ -255,6 +281,7 @@ export default class KnishIOClient {
|
|
|
255
281
|
this.$__bundle = ''
|
|
256
282
|
this.remainderWallet = null
|
|
257
283
|
this.$__capabilityCache = {}
|
|
284
|
+
this.$__defaultRequestPolicy = null
|
|
258
285
|
}
|
|
259
286
|
|
|
260
287
|
/**
|
|
@@ -580,7 +607,7 @@ export default class KnishIOClient {
|
|
|
580
607
|
* @param variables
|
|
581
608
|
* @returns {Promise<*>}
|
|
582
609
|
*/
|
|
583
|
-
async executeQuery (query, variables = null) {
|
|
610
|
+
async executeQuery (query, variables = null, context = {}) {
|
|
584
611
|
// Check and refresh authorization token if needed
|
|
585
612
|
// Guard with $__authInProcess to prevent concurrent auth requests
|
|
586
613
|
if (this.$__authToken && this.$__authToken.isExpired() && !this.$__authInProcess) {
|
|
@@ -601,13 +628,25 @@ export default class KnishIOClient {
|
|
|
601
628
|
this.abortControllers.set(queryKey, abortController)
|
|
602
629
|
|
|
603
630
|
try {
|
|
631
|
+
// Apply the client-level default request policy when neither the caller
|
|
632
|
+
// nor the query's own createQueryContext specifies one, so a long-lived
|
|
633
|
+
// server/sync client (defaultRequestPolicy:'network-only') never serves a
|
|
634
|
+
// stale cache-first read. Precedence: a query's own createQueryContext
|
|
635
|
+
// (e.g. ContinuId's network-only, applied in Query.execute's merge) >
|
|
636
|
+
// per-call context.requestPolicy > this client default > urql default.
|
|
637
|
+
const requestContext = { ...context }
|
|
638
|
+
if (this.$__defaultRequestPolicy && !requestContext.requestPolicy) {
|
|
639
|
+
requestContext.requestPolicy = this.$__defaultRequestPolicy
|
|
640
|
+
}
|
|
641
|
+
|
|
604
642
|
// Use the existing query execution method, but add the abort signal
|
|
605
643
|
const result = await query.execute({
|
|
606
644
|
variables,
|
|
607
645
|
context: {
|
|
608
646
|
fetchOptions: {
|
|
609
647
|
signal: abortController.signal
|
|
610
|
-
}
|
|
648
|
+
},
|
|
649
|
+
...requestContext
|
|
611
650
|
}
|
|
612
651
|
})
|
|
613
652
|
|
|
@@ -839,7 +878,8 @@ export default class KnishIOClient {
|
|
|
839
878
|
throughMolecule = false,
|
|
840
879
|
values = null,
|
|
841
880
|
keys = null,
|
|
842
|
-
atomValues = null
|
|
881
|
+
atomValues = null,
|
|
882
|
+
requestPolicy = null
|
|
843
883
|
}) {
|
|
844
884
|
this.log('info', `KnishIOClient::queryMeta() - Querying metaType: ${ metaType }, metaId: ${ metaId }...`)
|
|
845
885
|
|
|
@@ -903,7 +943,7 @@ export default class KnishIOClient {
|
|
|
903
943
|
})
|
|
904
944
|
}
|
|
905
945
|
|
|
906
|
-
return this.executeQuery(query, variables)
|
|
946
|
+
return this.executeQuery(query, variables, requestPolicy ? { requestPolicy } : {})
|
|
907
947
|
}
|
|
908
948
|
|
|
909
949
|
/**
|
|
@@ -68,14 +68,24 @@ class UrqlClientWrapper {
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
async query (request) {
|
|
71
|
-
const { query, variables } = request
|
|
72
|
-
|
|
71
|
+
const { query, variables, context } = request
|
|
72
|
+
// Forward ONLY urql's requestPolicy (e.g. 'network-only') so a long-lived
|
|
73
|
+
// client does not serve stale cache-first reads. We deliberately do NOT
|
|
74
|
+
// forward the whole context: urql REPLACES (not merges) the client-level
|
|
75
|
+
// fetchOptions with any context.fetchOptions (createRequestOperation builds
|
|
76
|
+
// the op context as {...baseOpts, ...opts}), which would drop the
|
|
77
|
+
// X-Auth-Token header set in createUrqlClient and break authentication.
|
|
78
|
+
const opts = (context && context.requestPolicy) ? { requestPolicy: context.requestPolicy } : undefined
|
|
79
|
+
const result = await this.$__client.query(query, variables || {}, opts).toPromise()
|
|
73
80
|
return this.formatResponse(result)
|
|
74
81
|
}
|
|
75
82
|
|
|
76
83
|
async mutate (request) {
|
|
77
|
-
const { mutation, variables } = request
|
|
78
|
-
|
|
84
|
+
const { mutation, variables, context } = request
|
|
85
|
+
// Forward requestPolicy only (see query() — never the whole context, which
|
|
86
|
+
// would clobber the auth-bearing client-level fetchOptions).
|
|
87
|
+
const opts = (context && context.requestPolicy) ? { requestPolicy: context.requestPolicy } : undefined
|
|
88
|
+
const result = await this.$__client.mutation(mutation, variables || {}, opts).toPromise()
|
|
79
89
|
return this.formatResponse(result)
|
|
80
90
|
}
|
|
81
91
|
|