@api-client/core 0.3.3 → 0.3.6
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/build/browser.d.ts +3 -0
- package/build/browser.js +9 -0
- package/build/browser.js.map +1 -1
- package/build/index.d.ts +11 -2
- package/build/index.js +20 -2
- package/build/index.js.map +1 -1
- package/build/src/lib/fs/Fs.d.ts +52 -0
- package/build/src/lib/fs/Fs.js +245 -0
- package/build/src/lib/fs/Fs.js.map +1 -0
- package/build/src/lib/timers/Timers.d.ts +5 -0
- package/build/src/lib/timers/Timers.js +10 -0
- package/build/src/lib/timers/Timers.js.map +1 -0
- package/build/src/mocking/ProjectMock.d.ts +13 -0
- package/build/src/mocking/ProjectMock.js +16 -0
- package/build/src/mocking/ProjectMock.js.map +1 -0
- package/build/src/mocking/lib/Request.d.ts +32 -0
- package/build/src/mocking/lib/Request.js +63 -0
- package/build/src/mocking/lib/Request.js.map +1 -0
- package/build/src/mocking/lib/Response.d.ts +33 -0
- package/build/src/mocking/lib/Response.js +79 -0
- package/build/src/mocking/lib/Response.js.map +1 -0
- package/build/src/models/ErrorResponse.d.ts +5 -4
- package/build/src/models/ErrorResponse.js +18 -5
- package/build/src/models/ErrorResponse.js.map +1 -1
- package/build/src/models/SerializableError.d.ts +30 -0
- package/build/src/models/SerializableError.js +63 -0
- package/build/src/models/SerializableError.js.map +1 -0
- package/build/src/runtime/http-engine/ArcEngine.js +8 -4
- package/build/src/runtime/http-engine/ArcEngine.js.map +1 -1
- package/build/src/runtime/http-engine/HttpEngine.d.ts +3 -3
- package/build/src/runtime/http-engine/HttpEngine.js +3 -3
- package/build/src/runtime/http-engine/HttpEngine.js.map +1 -1
- package/build/src/runtime/http-engine/NodeEngine.js +9 -4
- package/build/src/runtime/http-engine/NodeEngine.js.map +1 -1
- package/build/src/runtime/http-engine/NodeEngineDirect.js +8 -2
- package/build/src/runtime/http-engine/NodeEngineDirect.js.map +1 -1
- package/build/src/runtime/node/BaseRunner.d.ts +21 -0
- package/build/src/runtime/node/BaseRunner.js +27 -0
- package/build/src/runtime/node/BaseRunner.js.map +1 -0
- package/build/src/runtime/node/ProjectParallelRunner.d.ts +81 -0
- package/build/src/runtime/node/ProjectParallelRunner.js +173 -0
- package/build/src/runtime/node/ProjectParallelRunner.js.map +1 -0
- package/build/src/runtime/node/ProjectRequestRunner.d.ts +125 -0
- package/build/src/runtime/node/ProjectRequestRunner.js +185 -0
- package/build/src/runtime/node/ProjectRequestRunner.js.map +1 -0
- package/build/src/runtime/node/ProjectRunner.d.ts +166 -64
- package/build/src/runtime/node/ProjectRunner.js +191 -139
- package/build/src/runtime/node/ProjectRunner.js.map +1 -1
- package/build/src/runtime/node/ProjectRunnerWorker.d.ts +1 -0
- package/build/src/runtime/node/ProjectRunnerWorker.js +58 -0
- package/build/src/runtime/node/ProjectRunnerWorker.js.map +1 -0
- package/build/src/runtime/node/ProjectSerialRunner.d.ts +11 -0
- package/build/src/runtime/node/ProjectSerialRunner.js +34 -0
- package/build/src/runtime/node/ProjectSerialRunner.js.map +1 -0
- package/build/src/runtime/reporters/ProjectRunCliReporter.d.ts +7 -0
- package/build/src/runtime/reporters/ProjectRunCliReporter.js +73 -0
- package/build/src/runtime/reporters/ProjectRunCliReporter.js.map +1 -0
- package/build/src/runtime/reporters/Reporter.d.ts +62 -0
- package/build/src/runtime/reporters/Reporter.js +98 -0
- package/build/src/runtime/reporters/Reporter.js.map +1 -0
- package/build/src/testing/TestCliHelper.d.ts +23 -0
- package/build/src/testing/TestCliHelper.js +71 -0
- package/build/src/testing/TestCliHelper.js.map +1 -0
- package/build/src/testing/getPort.d.ts +52 -0
- package/build/src/testing/getPort.js +169 -0
- package/build/src/testing/getPort.js.map +1 -0
- package/package.json +2 -1
- package/src/data/DataReader.ts +11 -0
- package/src/data/DataUtils.ts +108 -0
- package/src/data/JmesparthReader.ts +26 -0
- package/src/data/Json2Xml.ts +190 -0
- package/src/data/JsonReader.ts +41 -0
- package/src/data/PayloadPointer.ts +48 -0
- package/src/data/RequestDataExtractor.ts +133 -0
- package/src/data/UrlEncodedReader.ts +20 -0
- package/src/data/XmlReader.ts +103 -0
- package/src/events/BaseEvents.ts +259 -0
- package/src/events/CustomEvent.ts +27 -0
- package/src/events/EventTypes.ts +19 -0
- package/src/events/Events.ts +19 -0
- package/src/events/authorization/AuthorizationEventTypes.ts +22 -0
- package/src/events/authorization/AuthorizationEvents.ts +61 -0
- package/src/events/cookies/CookieEventTypes.ts +13 -0
- package/src/events/cookies/CookieEvents.ts +157 -0
- package/src/events/encryption/EncryptionEventTypes.ts +4 -0
- package/src/events/encryption/EncryptionEvents.ts +51 -0
- package/src/events/environment/EnvironmentEventTypes.ts +3 -0
- package/src/events/environment/EnvironmentEvents.ts +24 -0
- package/src/events/models/ClientCertificateEvents.ts +87 -0
- package/src/events/models/ModelEventTypes.ts +47 -0
- package/src/events/models/ModelEvents.ts +7 -0
- package/src/events/models/ProjectEvents.ts +331 -0
- package/src/events/process/ProcessEventTypes.ts +5 -0
- package/src/events/process/ProcessEvents.ts +76 -0
- package/src/events/readme.md +22 -0
- package/src/events/reporting/ReportingEventTypes.ts +3 -0
- package/src/events/reporting/ReportingEvents.ts +28 -0
- package/src/events/telemetry/TelemetryEventTypes.ts +10 -0
- package/src/events/telemetry/TelemetryEvents.ts +156 -0
- package/src/lib/cookies/Cookie.ts +312 -0
- package/src/lib/cookies/Cookies.ts +326 -0
- package/src/lib/cookies/Utils.ts +168 -0
- package/src/lib/fs/Fs.ts +258 -0
- package/src/lib/headers/Headers.ts +219 -0
- package/src/lib/logging/DefaultLogger.ts +19 -0
- package/src/lib/logging/DummyLogger.ts +21 -0
- package/src/lib/logging/Logger.ts +16 -0
- package/src/lib/timers/Timers.ts +9 -0
- package/src/lib/transformers/PayloadSerializer.ts +332 -0
- package/src/lib/transformers/Utils.ts +18 -0
- package/src/lib/uuid.ts +40 -0
- package/src/mocking/LegacyInterfaces.ts +52 -0
- package/src/mocking/LegacyMock.ts +37 -0
- package/src/mocking/ProjectMock.ts +20 -0
- package/src/mocking/legacy/Authorization.ts +39 -0
- package/src/mocking/legacy/Certificates.ts +145 -0
- package/src/mocking/legacy/Cookies.ts +51 -0
- package/src/mocking/legacy/HostRules.ts +43 -0
- package/src/mocking/legacy/Http.ts +236 -0
- package/src/mocking/legacy/HttpResponse.ts +106 -0
- package/src/mocking/legacy/RestApi.ts +68 -0
- package/src/mocking/legacy/Urls.ts +44 -0
- package/src/mocking/legacy/Variables.ts +53 -0
- package/src/mocking/lib/Request.ts +85 -0
- package/src/mocking/lib/Response.ts +101 -0
- package/src/models/ArcResponse.ts +166 -0
- package/src/models/Authorization.ts +481 -0
- package/src/models/AuthorizationData.ts +60 -0
- package/src/models/Backend.ts +107 -0
- package/src/models/ClientCertificate.ts +68 -0
- package/src/models/Environment.ts +279 -0
- package/src/models/ErrorResponse.ts +113 -0
- package/src/models/HistoryIndex.ts +76 -0
- package/src/models/HistoryRequest.ts +28 -0
- package/src/models/HostRule.ts +163 -0
- package/src/models/HttpCookie.ts +285 -0
- package/src/models/HttpProject.ts +1294 -0
- package/src/models/HttpProjectListItem.ts +23 -0
- package/src/models/HttpRequest.ts +124 -0
- package/src/models/HttpResponse.ts +143 -0
- package/src/models/License.ts +113 -0
- package/src/models/ProjectDefinitionProperty.ts +40 -0
- package/src/models/ProjectFolder.ts +439 -0
- package/src/models/ProjectItem.ts +135 -0
- package/src/models/ProjectParent.ts +113 -0
- package/src/models/ProjectRequest.ts +277 -0
- package/src/models/ProjectSchema.ts +202 -0
- package/src/models/Property.ts +423 -0
- package/src/models/Provider.ts +98 -0
- package/src/models/README.md +20 -0
- package/src/models/Request.ts +452 -0
- package/src/models/RequestActions.ts +163 -0
- package/src/models/RequestAuthorization.ts +115 -0
- package/src/models/RequestConfig.ts +317 -0
- package/src/models/RequestLog.ts +159 -0
- package/src/models/RequestTime.ts +108 -0
- package/src/models/RequestUiMeta.ts +258 -0
- package/src/models/RequestsSize.ts +65 -0
- package/src/models/ResponseAuthorization.ts +104 -0
- package/src/models/ResponseRedirect.ts +158 -0
- package/src/models/RevisionInfo.ts +37 -0
- package/src/models/SentRequest.ts +125 -0
- package/src/models/SerializableError.ts +80 -0
- package/src/models/SerializablePayload.ts +68 -0
- package/src/models/Server.ts +153 -0
- package/src/models/Thing.ts +110 -0
- package/src/models/Url.ts +90 -0
- package/src/models/User.ts +120 -0
- package/src/models/WebApi.ts +234 -0
- package/src/models/WebApiIndex.ts +122 -0
- package/src/models/Workspace.ts +182 -0
- package/src/models/actions/Action.ts +213 -0
- package/src/models/actions/ActionView.ts +40 -0
- package/src/models/actions/Condition.ts +207 -0
- package/src/models/actions/ConditionView.ts +42 -0
- package/src/models/actions/Enums.ts +29 -0
- package/src/models/actions/RunnableAction.ts +144 -0
- package/src/models/actions/runnable/DeleteCookieAction.ts +113 -0
- package/src/models/actions/runnable/Runnable.ts +9 -0
- package/src/models/actions/runnable/SetCookieAction.ts +216 -0
- package/src/models/actions/runnable/SetVariableAction.ts +81 -0
- package/src/models/legacy/DataExport.ts +172 -0
- package/src/models/legacy/Normalizer.ts +110 -0
- package/src/models/legacy/actions/Actions.ts +269 -0
- package/src/models/legacy/authorization/Authorization.ts +572 -0
- package/src/models/legacy/models/ApiTypes.ts +202 -0
- package/src/models/legacy/models/ArcLegacyProject.ts +39 -0
- package/src/models/legacy/models/AuthData.ts +17 -0
- package/src/models/legacy/models/ClientCertificate.ts +95 -0
- package/src/models/legacy/models/Cookies.ts +52 -0
- package/src/models/legacy/models/HostRule.ts +35 -0
- package/src/models/legacy/models/RestApi.ts +49 -0
- package/src/models/legacy/models/UrlHistory.ts +37 -0
- package/src/models/legacy/models/Variable.ts +43 -0
- package/src/models/legacy/models/base.d.ts +95 -0
- package/src/models/legacy/request/ArcRequest.ts +405 -0
- package/src/models/legacy/request/ArcResponse.ts +177 -0
- package/src/models/legacy/request/HistoryData.ts +47 -0
- package/src/models/legacy/request/Legacy.ts +45 -0
- package/src/models/legacy/request/RequestBody.ts +87 -0
- package/src/models/transformers/ArcDexieTransformer.ts +323 -0
- package/src/models/transformers/ArcLegacyNormalizer.ts +85 -0
- package/src/models/transformers/ArcLegacyTransformer.ts +200 -0
- package/src/models/transformers/ArcPouchTransformer.ts +184 -0
- package/src/models/transformers/BaseTransformer.ts +116 -0
- package/src/models/transformers/ImportUtils.ts +141 -0
- package/src/models/transformers/LegacyDataExportToApiProject.ts +76 -0
- package/src/models/transformers/LegacyExportProcessor.ts +252 -0
- package/src/models/transformers/PostmanBackupTransformer.ts +306 -0
- package/src/models/transformers/PostmanDataTransformer.ts +50 -0
- package/src/models/transformers/PostmanTransformer.ts +106 -0
- package/src/models/transformers/PostmanV21Transformer.ts +311 -0
- package/src/models/transformers/PostmanV2Transformer.ts +308 -0
- package/src/models/transformers/har.ts +865 -0
- package/src/runtime/actions/ActionRunner.ts +83 -0
- package/src/runtime/actions/ConditionRunner.ts +194 -0
- package/src/runtime/actions/RunnableCondition.ts +57 -0
- package/src/runtime/actions/runnable/ActionRunnable.ts +19 -0
- package/src/runtime/actions/runnable/DeleteCookieRunnable.ts +39 -0
- package/src/runtime/actions/runnable/SetCookieRunnable.ts +92 -0
- package/src/runtime/actions/runnable/SetVariableRunnable.ts +53 -0
- package/src/runtime/http-engine/ArcEngine.ts +1068 -0
- package/src/runtime/http-engine/FormData.ts +85 -0
- package/src/runtime/http-engine/HttpEngine.ts +874 -0
- package/src/runtime/http-engine/HttpErrorCodes.ts +270 -0
- package/src/runtime/http-engine/NodeEngine.ts +792 -0
- package/src/runtime/http-engine/NodeEngineDirect.ts +482 -0
- package/src/runtime/http-engine/PayloadSupport.ts +84 -0
- package/src/runtime/http-engine/RequestUtils.ts +164 -0
- package/src/runtime/http-engine/ntlm/Des.ts +345 -0
- package/src/runtime/http-engine/ntlm/MD4.ts +135 -0
- package/src/runtime/http-engine/ntlm/NtlmAuth.ts +186 -0
- package/src/runtime/http-engine/ntlm/NtlmMessage.ts +57 -0
- package/src/runtime/modules/BasicAuthCache.ts +133 -0
- package/src/runtime/modules/ExecutionResponse.ts +4 -0
- package/src/runtime/modules/ModulesRegistry.ts +136 -0
- package/src/runtime/modules/RequestAuthorization.ts +110 -0
- package/src/runtime/modules/RequestCookies.ts +145 -0
- package/src/runtime/node/BaseRunner.ts +29 -0
- package/src/runtime/node/ProjectParallelRunner.ts +234 -0
- package/src/runtime/node/ProjectRequestRunner.ts +281 -0
- package/src/runtime/node/ProjectRunner.ts +374 -0
- package/src/runtime/node/ProjectRunnerWorker.ts +62 -0
- package/src/runtime/node/ProjectSerialRunner.ts +36 -0
- package/src/runtime/node/RequestFactory.ts +422 -0
- package/src/runtime/node/VariablesStore.ts +25 -0
- package/src/runtime/reporters/ProjectRunCliReporter.ts +79 -0
- package/src/runtime/reporters/Reporter.ts +142 -0
- package/src/runtime/store/StoreSdk.ts +838 -0
- package/src/runtime/variables/Cache.ts +53 -0
- package/src/runtime/variables/EvalFunctions.ts +132 -0
- package/src/runtime/variables/ProjectVariables.ts +6 -0
- package/src/runtime/variables/VariablesProcessor.ts +543 -0
- package/src/runtime/variables/VariablesTokenizer.ts +55 -0
- package/src/testing/TestCliHelper.ts +76 -0
- package/src/testing/getPort.ts +212 -0
- package/build/src/runtime/http-engine/Errors.d.ts +0 -10
- package/build/src/runtime/http-engine/Errors.js +0 -14
- package/build/src/runtime/http-engine/Errors.js.map +0 -1
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { Property, IProperty } from './Property.js';
|
|
2
|
+
import { Server, IServer } from './Server.js';
|
|
3
|
+
import { IThing, Thing, Kind as ThingKind } from './Thing.js';
|
|
4
|
+
import v4 from '../lib/uuid.js';
|
|
5
|
+
import { ARCVariable } from './legacy/models/Variable.js';
|
|
6
|
+
|
|
7
|
+
export interface IEnvironmentCloneOptions {
|
|
8
|
+
/**
|
|
9
|
+
* By default it revalidates (re-creates) keys in the environment.
|
|
10
|
+
* Set this to true to not make any changes to the keys.
|
|
11
|
+
*/
|
|
12
|
+
withoutRevalidate?: boolean;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* A project environment definition.
|
|
17
|
+
*/
|
|
18
|
+
export interface IEnvironment {
|
|
19
|
+
kind: 'ARC#Environment';
|
|
20
|
+
/**
|
|
21
|
+
* The identifier of the environment.
|
|
22
|
+
*/
|
|
23
|
+
key: string;
|
|
24
|
+
/**
|
|
25
|
+
* The environment's meta info.
|
|
26
|
+
*/
|
|
27
|
+
info: IThing;
|
|
28
|
+
/**
|
|
29
|
+
* The server's definition for the environment.
|
|
30
|
+
* When a server is defined for the environment then all request that have no
|
|
31
|
+
* absolute URL will inherit this server configuration.
|
|
32
|
+
*/
|
|
33
|
+
server?: IServer;
|
|
34
|
+
/**
|
|
35
|
+
* The variables added to this project.
|
|
36
|
+
* It overrides application defined variables.
|
|
37
|
+
*/
|
|
38
|
+
variables: IProperty[];
|
|
39
|
+
/**
|
|
40
|
+
* When set this configuration does not allow to be extended by the parent object's environment configuration.
|
|
41
|
+
* By default an environment can be extended by the parent object's values.
|
|
42
|
+
*/
|
|
43
|
+
encapsulated?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* The security to be applied to all requests that are going to this environment.
|
|
46
|
+
*/
|
|
47
|
+
security?: unknown;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export const Kind = 'ARC#Environment';
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* An environment is applied to a project or a folder.
|
|
54
|
+
* It consists of a list of variables and a server configuration.
|
|
55
|
+
* This allows to apply the runtime configuration just by changing the environment.
|
|
56
|
+
*/
|
|
57
|
+
export class Environment {
|
|
58
|
+
kind = Kind;
|
|
59
|
+
key = '';
|
|
60
|
+
/**
|
|
61
|
+
* The name of the environment.
|
|
62
|
+
*/
|
|
63
|
+
info: Thing = new Thing({ kind: ThingKind });
|
|
64
|
+
/**
|
|
65
|
+
* The variables added to this project.
|
|
66
|
+
* It overrides application defined variables.
|
|
67
|
+
*/
|
|
68
|
+
variables: Property[] = [];
|
|
69
|
+
/**
|
|
70
|
+
* The server's definition for the environment.
|
|
71
|
+
* When a server is defined for the environment then all request that have no
|
|
72
|
+
* absolute URL will inherit this server configuration.
|
|
73
|
+
*/
|
|
74
|
+
server?: Server;
|
|
75
|
+
/**
|
|
76
|
+
* When set this configuration does not allow to be extended by the parent object's environment configuration.
|
|
77
|
+
* By default an environment can be extended by the parent object's values.
|
|
78
|
+
*
|
|
79
|
+
* When encapsulation is disabled you can, for example, skip server definition and only overwrite variables.
|
|
80
|
+
*/
|
|
81
|
+
encapsulated = false;
|
|
82
|
+
/**
|
|
83
|
+
* The security to be applied to all requests that are going to this server.
|
|
84
|
+
*/
|
|
85
|
+
security?: unknown;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Creates a new Environment object from a name.
|
|
89
|
+
*
|
|
90
|
+
* @param name The name to set.
|
|
91
|
+
*/
|
|
92
|
+
static fromName(name: string): Environment {
|
|
93
|
+
const key = v4();
|
|
94
|
+
const info = new Thing({ kind: ThingKind, name });
|
|
95
|
+
const definition = new Environment({
|
|
96
|
+
key,
|
|
97
|
+
kind: Kind,
|
|
98
|
+
info: info.toJSON(),
|
|
99
|
+
variables: [],
|
|
100
|
+
});
|
|
101
|
+
return definition;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
static fromLegacyVariables(name: string, variables: ARCVariable[]): Environment {
|
|
105
|
+
const key = v4();
|
|
106
|
+
const info = new Thing({ kind: ThingKind, name });
|
|
107
|
+
const definition = new Environment({
|
|
108
|
+
key,
|
|
109
|
+
kind: Kind,
|
|
110
|
+
info: info.toJSON(),
|
|
111
|
+
variables: [],
|
|
112
|
+
});
|
|
113
|
+
variables.forEach((i) => {
|
|
114
|
+
const name = i.variable || i.name;
|
|
115
|
+
const property = Property.fromApiType(i);
|
|
116
|
+
property.name = name;
|
|
117
|
+
definition.variables.push(property);
|
|
118
|
+
});
|
|
119
|
+
return definition;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* @param input The environment definition used to restore the state.
|
|
124
|
+
*/
|
|
125
|
+
constructor(input?: string|IEnvironment) {
|
|
126
|
+
let init: IEnvironment;
|
|
127
|
+
if (typeof input === 'string') {
|
|
128
|
+
init = JSON.parse(input);
|
|
129
|
+
} else if (typeof input === 'object') {
|
|
130
|
+
init = input;
|
|
131
|
+
} else {
|
|
132
|
+
init = {
|
|
133
|
+
kind: Kind,
|
|
134
|
+
key: v4(),
|
|
135
|
+
info: {
|
|
136
|
+
kind: ThingKind,
|
|
137
|
+
name: '',
|
|
138
|
+
},
|
|
139
|
+
variables: [],
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
this.new(init);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Creates a new environment clearing anything that is so far defined.
|
|
147
|
+
*
|
|
148
|
+
* Note, this throws an error when the environment is not an ARC environment.
|
|
149
|
+
*/
|
|
150
|
+
new(init: IEnvironment): void {
|
|
151
|
+
if (!Environment.isEnvironment(init)) {
|
|
152
|
+
throw new Error(`Not an ARC environment.`);
|
|
153
|
+
}
|
|
154
|
+
const { key=v4(), variables, info, server, encapsulated=false, security } = init;
|
|
155
|
+
this.kind = Kind;
|
|
156
|
+
this.key = key;
|
|
157
|
+
this.encapsulated = encapsulated;
|
|
158
|
+
this.security = security;
|
|
159
|
+
if (Array.isArray(variables)) {
|
|
160
|
+
this.variables = variables.map(i => new Property(i))
|
|
161
|
+
} else {
|
|
162
|
+
this.variables = [];
|
|
163
|
+
}
|
|
164
|
+
if (server) {
|
|
165
|
+
this.server = new Server(server);
|
|
166
|
+
} else {
|
|
167
|
+
this.server = undefined;
|
|
168
|
+
}
|
|
169
|
+
if (info) {
|
|
170
|
+
this.info = new Thing(info);
|
|
171
|
+
} else {
|
|
172
|
+
this.info = new Thing({ kind: ThingKind, name: '' });
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Checks whether the input is a definition of a environment.
|
|
178
|
+
*/
|
|
179
|
+
static isEnvironment(input: unknown): boolean {
|
|
180
|
+
const typed = input as IEnvironment;
|
|
181
|
+
if (!input || typed.kind !== Kind) {
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
toJSON(): IEnvironment {
|
|
188
|
+
const { variables=[], encapsulated=false, server } = this;
|
|
189
|
+
const result: IEnvironment = {
|
|
190
|
+
kind: Kind,
|
|
191
|
+
key: this.key,
|
|
192
|
+
info: this.info.toJSON(),
|
|
193
|
+
variables: variables.map((v) => v.toJSON()),
|
|
194
|
+
encapsulated,
|
|
195
|
+
};
|
|
196
|
+
if (server) {
|
|
197
|
+
result.server = server.toJSON();
|
|
198
|
+
}
|
|
199
|
+
if (this.security) {
|
|
200
|
+
result.security = this.security;
|
|
201
|
+
}
|
|
202
|
+
return result;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
addVariable(name: string, value: unknown): Property;
|
|
206
|
+
addVariable(variable: IProperty): Property;
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Adds a new variable to the list of variables.
|
|
210
|
+
* It makes sure the variables property is initialized.
|
|
211
|
+
*/
|
|
212
|
+
addVariable(variableOrName: IProperty|string, value?: unknown): Property {
|
|
213
|
+
if (!Array.isArray(this.variables)) {
|
|
214
|
+
this.variables = [];
|
|
215
|
+
}
|
|
216
|
+
let prop: Property;
|
|
217
|
+
if (typeof variableOrName === 'string') {
|
|
218
|
+
prop = Property.fromType(variableOrName, value);
|
|
219
|
+
} else {
|
|
220
|
+
prop = new Property(variableOrName);
|
|
221
|
+
}
|
|
222
|
+
this.variables.push(prop);
|
|
223
|
+
return prop;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Reads the server configuration.
|
|
228
|
+
* @param force When set then it creates a server instance when missing.
|
|
229
|
+
*/
|
|
230
|
+
getServer(force?: boolean): Server|undefined {
|
|
231
|
+
if (!this.server && !force) {
|
|
232
|
+
return undefined;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
if (!this.server) {
|
|
236
|
+
this.server = new Server();
|
|
237
|
+
}
|
|
238
|
+
return this.server;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Adds a new server definition.
|
|
243
|
+
* @param uri The base URI to create the server from
|
|
244
|
+
*/
|
|
245
|
+
addServer(uri: string): Server;
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Adds a new server definition.
|
|
249
|
+
* @param info The server definition.
|
|
250
|
+
*/
|
|
251
|
+
addServer(info: IServer): Server;
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Adds a new server definition.
|
|
255
|
+
* @param uriOrInfo Either URI to create the server from or the definition of the server.
|
|
256
|
+
*/
|
|
257
|
+
addServer(uriOrInfo: string | IServer): Server {
|
|
258
|
+
let srv: Server;
|
|
259
|
+
if (typeof uriOrInfo === 'string') {
|
|
260
|
+
srv = Server.fromUri(uriOrInfo);
|
|
261
|
+
} else {
|
|
262
|
+
srv = new Server(uriOrInfo);
|
|
263
|
+
}
|
|
264
|
+
this.server = srv;
|
|
265
|
+
return srv;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Makes a copy of this environment
|
|
270
|
+
* @param opts Cloning options.
|
|
271
|
+
*/
|
|
272
|
+
clone(opts: IEnvironmentCloneOptions = {}): Environment {
|
|
273
|
+
const copy = new Environment(this.toJSON());
|
|
274
|
+
if (!opts.withoutRevalidate) {
|
|
275
|
+
copy.key = v4();
|
|
276
|
+
}
|
|
277
|
+
return copy;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { IHttpResponse, HttpResponse, Kind } from './HttpResponse.js';
|
|
2
|
+
import { ErrorResponse as LegacyErrorResponse } from './legacy/request/ArcResponse.js';
|
|
3
|
+
import { PayloadSerializer } from '../lib/transformers/PayloadSerializer.js';
|
|
4
|
+
import { Normalizer } from './legacy/Normalizer.js';
|
|
5
|
+
import { SerializableError, ISerializedError } from './SerializableError.js';
|
|
6
|
+
|
|
7
|
+
export interface IErrorResponse extends IHttpResponse {
|
|
8
|
+
/**
|
|
9
|
+
* An error associated with the response
|
|
10
|
+
*/
|
|
11
|
+
error: string | ISerializedError;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export class ErrorResponse extends HttpResponse {
|
|
15
|
+
/**
|
|
16
|
+
* An error associated with the response
|
|
17
|
+
*/
|
|
18
|
+
error = new SerializableError('Unknown error');
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @returns The same Error or new Error instance when passed string.
|
|
22
|
+
*/
|
|
23
|
+
static ensureError(error: string | Error | SerializableError): SerializableError {
|
|
24
|
+
if (typeof error === 'string') {
|
|
25
|
+
return new SerializableError(error);
|
|
26
|
+
}
|
|
27
|
+
if (error.name === 'SerializableError') {
|
|
28
|
+
return error as SerializableError;
|
|
29
|
+
}
|
|
30
|
+
return new SerializableError(error);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @param error The error message or Error object to use.
|
|
35
|
+
*/
|
|
36
|
+
static fromError(error: Error | SerializableError | string): ErrorResponse {
|
|
37
|
+
const err = ErrorResponse.ensureError(error);
|
|
38
|
+
return new ErrorResponse({
|
|
39
|
+
kind: Kind,
|
|
40
|
+
status: 0,
|
|
41
|
+
error: err,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
static async fromLegacy(input: LegacyErrorResponse): Promise<ErrorResponse> {
|
|
46
|
+
const init: IErrorResponse = {
|
|
47
|
+
kind: Kind,
|
|
48
|
+
status: input.status || 0,
|
|
49
|
+
error: input.error ? ErrorResponse.ensureError(input.error) : new SerializableError('Unknown error'),
|
|
50
|
+
};
|
|
51
|
+
if (input.headers) {
|
|
52
|
+
init.headers = input.headers;
|
|
53
|
+
}
|
|
54
|
+
if (input.statusText) {
|
|
55
|
+
init.statusText = input.statusText;
|
|
56
|
+
}
|
|
57
|
+
if (input.payload) {
|
|
58
|
+
const orig = Normalizer.restoreTransformedPayload(input.payload);
|
|
59
|
+
if (orig) {
|
|
60
|
+
init.payload = await PayloadSerializer.serialize(orig);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return new ErrorResponse(init);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* @param input The request definition used to restore the state.
|
|
68
|
+
*/
|
|
69
|
+
constructor(input?: string|IErrorResponse) {
|
|
70
|
+
super(input);
|
|
71
|
+
let init: IErrorResponse;
|
|
72
|
+
if (typeof input === 'string') {
|
|
73
|
+
init = JSON.parse(input);
|
|
74
|
+
} else if (typeof input === 'object') {
|
|
75
|
+
init = input;
|
|
76
|
+
} else {
|
|
77
|
+
init = {
|
|
78
|
+
kind: Kind,
|
|
79
|
+
status: 0,
|
|
80
|
+
error: new SerializableError('Unknown error'),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
this.new(init);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Creates a new request clearing anything that is so far defined.
|
|
88
|
+
*
|
|
89
|
+
* Note, this throws an error when the object is not an ARC request.
|
|
90
|
+
*/
|
|
91
|
+
new(init: IErrorResponse): void {
|
|
92
|
+
super.new(init);
|
|
93
|
+
if (init.error) {
|
|
94
|
+
if (typeof init.error === 'string') {
|
|
95
|
+
this.error = new SerializableError(init.error);
|
|
96
|
+
} else {
|
|
97
|
+
this.error = new SerializableError();
|
|
98
|
+
this.error.new(init.error);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
toJSON(): IErrorResponse {
|
|
104
|
+
const response = super.toJSON() as IErrorResponse;
|
|
105
|
+
response.error = this.error;
|
|
106
|
+
return response;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
static isErrorResponse(input: unknown): boolean {
|
|
110
|
+
const typed = input as IErrorResponse;
|
|
111
|
+
return !!typed.error;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An object that is stored in ARCs internal store to build history navigation.
|
|
3
|
+
* It does not contain all the history data. Just the ones that are presented in the UI.
|
|
4
|
+
*/
|
|
5
|
+
export interface IHistoryIndex {
|
|
6
|
+
/**
|
|
7
|
+
* Timestamp when the request was last updated.
|
|
8
|
+
*/
|
|
9
|
+
updated: number;
|
|
10
|
+
/**
|
|
11
|
+
* A timestamp of the midnight when the request object was updated
|
|
12
|
+
*/
|
|
13
|
+
midnight: number;
|
|
14
|
+
/**
|
|
15
|
+
* The request URL
|
|
16
|
+
*/
|
|
17
|
+
url: string;
|
|
18
|
+
/**
|
|
19
|
+
* HTTP method name
|
|
20
|
+
*/
|
|
21
|
+
method: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export class HistoryIndex {
|
|
25
|
+
/**
|
|
26
|
+
* Timestamp when the request was last updated.
|
|
27
|
+
*/
|
|
28
|
+
updated = 0;
|
|
29
|
+
/**
|
|
30
|
+
* A timestamp of the midnight when the request object was updated
|
|
31
|
+
*/
|
|
32
|
+
midnight = 0;
|
|
33
|
+
/**
|
|
34
|
+
* The request URL
|
|
35
|
+
*/
|
|
36
|
+
url = '';
|
|
37
|
+
/**
|
|
38
|
+
* HTTP method name
|
|
39
|
+
*/
|
|
40
|
+
method = 'GET';
|
|
41
|
+
|
|
42
|
+
constructor(input?: string|IHistoryIndex) {
|
|
43
|
+
let init: IHistoryIndex;
|
|
44
|
+
if (typeof input === 'string') {
|
|
45
|
+
init = JSON.parse(input);
|
|
46
|
+
} else if (typeof input === 'object') {
|
|
47
|
+
init = input;
|
|
48
|
+
} else {
|
|
49
|
+
init = {
|
|
50
|
+
updated: 0,
|
|
51
|
+
midnight: 0,
|
|
52
|
+
url: '',
|
|
53
|
+
method: 'GET',
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
this.new(init);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
new(init: IHistoryIndex): void {
|
|
60
|
+
const { updated=0, midnight=0, url='', method='GET' } = init;
|
|
61
|
+
this.updated = updated;
|
|
62
|
+
this.midnight = midnight;
|
|
63
|
+
this.url = url;
|
|
64
|
+
this.method = method;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
toJSON(): IHistoryIndex {
|
|
68
|
+
const result: IHistoryIndex = {
|
|
69
|
+
updated: this.updated,
|
|
70
|
+
midnight: this.midnight,
|
|
71
|
+
url: this.url,
|
|
72
|
+
method: this.method,
|
|
73
|
+
};
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { IRequest, Request } from './Request.js';
|
|
2
|
+
|
|
3
|
+
export const Kind = 'ARC#HistoryRequest';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* A class that specializes in processing ARC history request object.
|
|
7
|
+
*/
|
|
8
|
+
export class HistoryRequest extends Request {
|
|
9
|
+
kind = Kind;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Generates an id for a history object
|
|
13
|
+
*/
|
|
14
|
+
generateId(): string {
|
|
15
|
+
const { method='', url='' } = this.expects;
|
|
16
|
+
const d = new Date();
|
|
17
|
+
d.setHours(0, 0, 0, 0);
|
|
18
|
+
const time = d.getTime();
|
|
19
|
+
const encUrl = encodeURIComponent(url);
|
|
20
|
+
return `${time}/${encUrl}/${method}`;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
toJSON(): IRequest {
|
|
24
|
+
const result = super.toJSON();
|
|
25
|
+
result.kind = Kind;
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
export const Kind = 'ARC#HostRule';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* ARC host rule definition.
|
|
5
|
+
*/
|
|
6
|
+
export interface IHostRule {
|
|
7
|
+
kind?: typeof Kind;
|
|
8
|
+
/**
|
|
9
|
+
* The from rule (may contain asterisks)
|
|
10
|
+
*/
|
|
11
|
+
from: string;
|
|
12
|
+
/**
|
|
13
|
+
* replacement value
|
|
14
|
+
*/
|
|
15
|
+
to: string;
|
|
16
|
+
/**
|
|
17
|
+
* if false the rule is ignored
|
|
18
|
+
*/
|
|
19
|
+
enabled?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* optional rule description
|
|
22
|
+
*/
|
|
23
|
+
comment?: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export class HostRule {
|
|
27
|
+
kind = Kind;
|
|
28
|
+
/**
|
|
29
|
+
* The from rule (may contain asterisks)
|
|
30
|
+
*/
|
|
31
|
+
from = '';
|
|
32
|
+
/**
|
|
33
|
+
* replacement value
|
|
34
|
+
*/
|
|
35
|
+
to = '';
|
|
36
|
+
/**
|
|
37
|
+
* if false the rule is ignored
|
|
38
|
+
*/
|
|
39
|
+
enabled?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* optional rule description
|
|
42
|
+
*/
|
|
43
|
+
comment?: string;
|
|
44
|
+
|
|
45
|
+
static fromValues(from: string, to: string ): HostRule {
|
|
46
|
+
const result = new HostRule({
|
|
47
|
+
kind: Kind,
|
|
48
|
+
from,
|
|
49
|
+
to,
|
|
50
|
+
enabled: true,
|
|
51
|
+
});
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* @param input The thing definition used to restore the state.
|
|
57
|
+
*/
|
|
58
|
+
constructor(input?: string | IHostRule) {
|
|
59
|
+
let init: IHostRule;
|
|
60
|
+
if (typeof input === 'string') {
|
|
61
|
+
init = JSON.parse(input);
|
|
62
|
+
} else if (typeof input === 'object') {
|
|
63
|
+
init = input;
|
|
64
|
+
} else {
|
|
65
|
+
init = {
|
|
66
|
+
kind: Kind,
|
|
67
|
+
from: '',
|
|
68
|
+
to: '',
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
this.new(init);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Creates a new thing clearing anything that is so far defined.
|
|
76
|
+
*
|
|
77
|
+
* Note, this throws an error when the server is not an ARC thing.
|
|
78
|
+
*/
|
|
79
|
+
new(init: IHostRule): void {
|
|
80
|
+
if (!HostRule.isHostRule(init)) {
|
|
81
|
+
throw new Error(`Not an ARC HostRule.`);
|
|
82
|
+
}
|
|
83
|
+
const { from='', to='', enabled, comment } = init;
|
|
84
|
+
this.kind = Kind;
|
|
85
|
+
this.from = from;
|
|
86
|
+
this.to = to;
|
|
87
|
+
this.enabled = enabled;
|
|
88
|
+
this.comment = comment;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Checks whether the input is a definition of a host rule.
|
|
93
|
+
*/
|
|
94
|
+
static isHostRule(input: unknown): boolean {
|
|
95
|
+
const typed = input as IHostRule;
|
|
96
|
+
if (input && typed.kind && typed.kind === Kind) {
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
toJSON(): IHostRule {
|
|
103
|
+
const result: IHostRule = {
|
|
104
|
+
kind: Kind,
|
|
105
|
+
from : this.from,
|
|
106
|
+
to : this.to,
|
|
107
|
+
};
|
|
108
|
+
if (typeof this.enabled === 'boolean') {
|
|
109
|
+
result.enabled = this.enabled;
|
|
110
|
+
}
|
|
111
|
+
if (this.comment) {
|
|
112
|
+
result.comment = this.comment;
|
|
113
|
+
}
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Applies `hosts` rules to the URL.
|
|
119
|
+
*
|
|
120
|
+
* @param value An URL to apply the rules to
|
|
121
|
+
* @param rules List of host rules. It is a list of objects containing `from` and `to` properties.
|
|
122
|
+
* @return Evaluated URL with hosts rules.
|
|
123
|
+
*/
|
|
124
|
+
static applyHosts(value: string, rules: HostRule[]): string {
|
|
125
|
+
if (!rules || !rules.length) {
|
|
126
|
+
return value;
|
|
127
|
+
}
|
|
128
|
+
for (let i = 0; i < rules.length; i++) {
|
|
129
|
+
const rule = rules[i];
|
|
130
|
+
const result = HostRule.evaluateRule(value, rule);
|
|
131
|
+
if (result) {
|
|
132
|
+
value = result;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return value;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Evaluates hosts rule and applies it to the `url`.
|
|
140
|
+
* @param {string} url The URL to evaluate
|
|
141
|
+
* @param {HostRule} rule ARC rule definition
|
|
142
|
+
* @return {string} Processed url.
|
|
143
|
+
*/
|
|
144
|
+
static evaluateRule(url: string, rule: HostRule): string | undefined {
|
|
145
|
+
if (!rule || !rule.from || !rule.to) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const re = HostRule.createRuleRe(rule.from);
|
|
149
|
+
if (!re.test(url)) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
return url.replace(re, rule.to);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* @param input Rule body
|
|
157
|
+
* @return Regular expression for the rule.
|
|
158
|
+
*/
|
|
159
|
+
static createRuleRe(input: string): RegExp {
|
|
160
|
+
input = input.replace(/\*/g, '(.*)');
|
|
161
|
+
return new RegExp(input, 'gi');
|
|
162
|
+
}
|
|
163
|
+
}
|