Skip to content

Commit 82d39e2

Browse files
AndrejsAndrejs
authored andcommitted
fix(app): filter out shared worker requests from the service worker GET API requests cache
1 parent 9a580a1 commit 82d39e2

File tree

4 files changed

+38
-22
lines changed

4 files changed

+38
-22
lines changed

src/services/QueueManager/QueueManager.ts

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,47 @@
11
import {
22
BehaviorSubject,
3-
map,
4-
timeout,
5-
throwError,
6-
of,
7-
catchError,
83
EMPTY,
94
Observable,
10-
mergeMap,
5+
catchError,
6+
combineLatest,
117
debounceTime,
12-
merge,
13-
tap,
14-
interval,
158
filter,
16-
combineLatest,
17-
withLatestFrom,
9+
interval,
10+
map,
11+
merge,
12+
mergeMap,
13+
of,
1814
share,
15+
throwError,
16+
timeout,
17+
withLatestFrom,
1918
} from 'rxjs';
2019

2120
import * as R from 'ramda';
2221

23-
import { fetchIpfsContent } from 'src/services/ipfs/utils/utils-ipfs';
2422
import { CybIpfsNode, IpfsContentSource } from 'src/services/ipfs/types';
23+
import { fetchIpfsContent } from 'src/services/ipfs/utils/utils-ipfs';
2524
import { ParticleCid } from 'src/types/base';
2625

2726
import { promiseToObservable } from '../../utils/rxjs/helpers';
2827

2928
import type {
3029
QueueItem,
31-
QueueItemResult,
30+
QueueItemAsyncResult,
3231
QueueItemCallback,
3332
QueueItemOptions,
34-
QueueStats,
33+
QueueItemResult,
3534
QueueSource,
36-
QueueItemAsyncResult,
3735
} from './types';
3836

3937
import { QueueStrategy } from './QueueStrategy';
4038

41-
import { QueueItemTimeoutError } from './QueueItemTimeoutError';
39+
import { enqueueParticleSave } from '../backend/channels/BackendQueueChannel/backendQueueSenders';
4240
import BroadcastChannelSender from '../backend/channels/BroadcastChannelSender';
4341
import { RuneEngine } from '../scripting/engine';
4442
import { postProcessIpfContent } from '../scripting/services/postProcessing';
45-
import { enqueueParticleSave } from '../backend/channels/BackendQueueChannel/backendQueueSenders';
43+
import { QueueItemTimeoutError } from './QueueItemTimeoutError';
44+
import { CustomHeaders, XCybSourceValues } from './constants';
4645

4746
const QUEUE_DEBOUNCE_MS = 33;
4847
const CONNECTION_KEEPER_RETRY_MS = 5000;
@@ -75,7 +74,7 @@ const strategies = {
7574
helia: new QueueStrategy(
7675
{
7776
db: { timeout: 5000, maxConcurrentExecutions: 999 },
78-
node: { timeout: 6 * 1000, maxConcurrentExecutions: 50 }, //TODO: set to 60
77+
node: { timeout: 6 * 1000, maxConcurrentExecutions: 50 }, // TODO: set to 60
7978
gateway: { timeout: 3 * 1000, maxConcurrentExecutions: 11 },
8079
},
8180
['db', 'node', 'gateway']
@@ -175,6 +174,9 @@ class QueueManager {
175174
return fetchIpfsContent(cid, source, {
176175
controller,
177176
node: this.node,
177+
headers: {
178+
[CustomHeaders.XCybSource]: XCybSourceValues.sharedWorker,
179+
},
178180
}).then(async (content) => {
179181
const result = content
180182
? await postProcessIpfContent(item, content, this.rune!, this)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/* eslint-disable import/prefer-default-export */
2+
export const CustomHeaders = {
3+
XCybSource: 'X-Cyb-Source',
4+
};
5+
6+
export enum XCybSourceValues {
7+
sharedWorker = 'shared-worker',
8+
}

src/services/ipfs/utils/utils-ipfs.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ const fetchIPFSContentFromNode = async (
101101
}
102102
default: {
103103
// Get sample of content
104-
const { value: firstChunk, done } = await node
104+
const { value: firstChunk } = await node
105105
.cat(cid, { signal, length: 2048, offset: 0 })
106106
[Symbol.asyncIterator]()
107107
.next();
@@ -162,7 +162,8 @@ const fetchIPFSContentFromNode = async (
162162
const fetchIPFSContentFromGateway = async (
163163
cid: string,
164164
node?: IpfsNode,
165-
controller?: AbortController
165+
controller?: AbortController,
166+
headers?: Record<string, string>
166167
): Promise<IPFSContentMaybe> => {
167168
// fetch META only from external node(toooo slow), TODO: fetch meta from cybernode
168169
const isExternalNode = node?.nodeType === 'external';
@@ -178,6 +179,7 @@ const fetchIPFSContentFromGateway = async (
178179
const response = await fetch(contentUrl, {
179180
method: 'GET',
180181
signal: controller?.signal,
182+
headers,
181183
});
182184
if (response && response.body) {
183185
// fetch doesn't provide any headers in our case :(
@@ -221,14 +223,15 @@ const fetchIPFSContentFromGateway = async (
221223
type fetchContentOptions = {
222224
controller?: AbortController;
223225
node?: IpfsNode;
226+
headers?: Record<string, string>;
224227
};
225228

226229
async function fetchIpfsContent(
227230
cid: string,
228231
source: IpfsContentSource,
229232
options: fetchContentOptions
230233
): Promise<IPFSContentMaybe> {
231-
const { node, controller } = options;
234+
const { node, controller, headers } = options;
232235

233236
try {
234237
switch (source) {
@@ -237,7 +240,7 @@ async function fetchIpfsContent(
237240
case 'node':
238241
return fetchIPFSContentFromNode(cid, node, controller);
239242
case 'gateway':
240-
return fetchIPFSContentFromGateway(cid, node, controller);
243+
return fetchIPFSContentFromGateway(cid, node, controller, headers);
241244
default:
242245
return undefined;
243246
}

src/services/service-worker/service-worker.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { matchPrecache, precacheAndRoute } from 'workbox-precaching';
44
import { registerRoute } from 'workbox-routing';
55
import { CacheFirst, NetworkFirst } from 'workbox-strategies';
66
import { ExpirationPlugin } from 'workbox-expiration';
7+
import { CustomHeaders, XCybSourceValues } from '../QueueManager/constants';
78

89
declare const self: ServiceWorkerGlobalScope;
910

@@ -68,6 +69,8 @@ registerRoute(
6869
({ request }) =>
6970
request.method === 'GET' &&
7071
request.destination !== 'document' &&
72+
request.headers.get(CustomHeaders.XCybSource) !==
73+
XCybSourceValues.sharedWorker &&
7174
!(
7275
request.destination === 'image' ||
7376
request.destination === 'style' ||

0 commit comments

Comments
 (0)