Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ulixee
GitHub Repository: ulixee/secret-agent
Path: blob/main/client/lib/ResourceRequest.ts
1028 views
1
import inspectInstanceProperties from 'awaited-dom/base/inspectInstanceProperties';
2
import StateMachine from 'awaited-dom/base/StateMachine';
3
import IResourceHeaders from '@secret-agent/interfaces/IResourceHeaders';
4
import IResourceRequest from '@secret-agent/interfaces/IResourceRequest';
5
import * as Util from 'util';
6
import CoreTab from './CoreTab';
7
8
const { getState, setState } = StateMachine<ResourceRequest, IState>();
9
10
interface IState {
11
coreTab: Promise<CoreTab>;
12
resourceId: number;
13
}
14
15
const propertyKeys: (keyof ResourceRequest)[] = [
16
'headers',
17
'url',
18
'timestamp',
19
'method',
20
'postData',
21
];
22
23
export default class ResourceRequest {
24
public get headers(): Promise<IResourceHeaders> {
25
return getRequestProperty(this, 'headers');
26
}
27
28
public get url(): Promise<string> {
29
return getRequestProperty(this, 'url');
30
}
31
32
public get timestamp(): Promise<Date> {
33
return getRequestProperty(this, 'timestamp').then(x => (x ? new Date(x as number) : null));
34
}
35
36
public get method(): Promise<string> {
37
return getRequestProperty(this, 'method');
38
}
39
40
public get postData(): Promise<any> {
41
return getRequestProperty(this, 'postData');
42
}
43
44
public [Util.inspect.custom](): any {
45
return inspectInstanceProperties(this, propertyKeys as any);
46
}
47
}
48
49
export function createResourceRequest(
50
coreTab: Promise<CoreTab>,
51
resourceId?: number,
52
): ResourceRequest {
53
const request = new ResourceRequest();
54
setState(request, { coreTab, resourceId });
55
return request;
56
}
57
58
function getRequestProperty<T>(
59
container: ResourceRequest,
60
name: keyof IResourceRequest,
61
): Promise<T> {
62
const state = getState(container);
63
const id = state.resourceId;
64
return state.coreTab.then(x => x.getResourceProperty<T>(id, `request.${name}`));
65
}
66
67