@scaleway/sdk 1.9.0 → 1.10.0
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/dist/api/webhosting/v1alpha1/api.gen.js +25 -10
- package/dist/index.cjs +175 -31
- package/dist/index.d.ts +263 -71
- package/dist/index.js +2 -1
- package/dist/internal/interceptors/composer.js +46 -0
- package/dist/internal/interceptors/{request.js → helpers.js} +4 -3
- package/dist/scw/auth.js +3 -1
- package/dist/scw/client-ini-factory.js +71 -2
- package/dist/scw/client.js +3 -4
- package/dist/scw/constants.js +1 -1
- package/dist/scw/fetch/build-fetcher.js +18 -4
- package/dist/scw/fetch/http-interceptors.js +23 -5
- package/package.json +2 -2
- package/dist/internal/interceptors/interceptor.js +0 -13
|
@@ -37,7 +37,9 @@ const withProfile = profile => settings => {
|
|
|
37
37
|
newSettings.defaultZone = profile.defaultZone;
|
|
38
38
|
}
|
|
39
39
|
if (hasAuthenticationSecrets(profile)) {
|
|
40
|
-
newSettings.
|
|
40
|
+
newSettings.interceptors = [{
|
|
41
|
+
request: authenticateWithSecrets(profile)
|
|
42
|
+
}, ...newSettings.interceptors];
|
|
41
43
|
}
|
|
42
44
|
return newSettings;
|
|
43
45
|
};
|
|
@@ -102,4 +104,71 @@ const withUserAgentSuffix = userAgent => settings => ({
|
|
|
102
104
|
userAgent: settings.userAgent ? `${settings.userAgent} ${userAgent}` : userAgent
|
|
103
105
|
});
|
|
104
106
|
|
|
105
|
-
|
|
107
|
+
/**
|
|
108
|
+
* Instantiates the SDK with additional interceptors.
|
|
109
|
+
*
|
|
110
|
+
* @param interceptors - The additional {@link NetworkInterceptors} interceptors
|
|
111
|
+
* @returns A factory {@link ClientConfig}
|
|
112
|
+
*
|
|
113
|
+
* @remarks
|
|
114
|
+
* It doesn't override the existing interceptors, but instead push more to the list.
|
|
115
|
+
* This method should be used in conjunction with the initializer `createAdvancedClient`.
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* ```
|
|
119
|
+
* withAdditionalInterceptors([
|
|
120
|
+
* {
|
|
121
|
+
* request: ({ request }) => {
|
|
122
|
+
* console.log(`Do something with ${JSON.stringify(request)}`)
|
|
123
|
+
* return request
|
|
124
|
+
* },
|
|
125
|
+
* response: ({ response }) => {
|
|
126
|
+
* console.log(`Do something with ${JSON.stringify(response)}`)
|
|
127
|
+
* return response
|
|
128
|
+
* },
|
|
129
|
+
* responseError: async ({
|
|
130
|
+
* request,
|
|
131
|
+
* error,
|
|
132
|
+
* }: {
|
|
133
|
+
* request: Request
|
|
134
|
+
* error: unknown
|
|
135
|
+
* }) => {
|
|
136
|
+
* console.log(
|
|
137
|
+
* `Do something with ${JSON.stringify(request)} and ${JSON.stringify(
|
|
138
|
+
* error,
|
|
139
|
+
* )}`,
|
|
140
|
+
* )
|
|
141
|
+
* throw error // or return Promise.resolve(someData)
|
|
142
|
+
* },
|
|
143
|
+
* },
|
|
144
|
+
* ])
|
|
145
|
+
* ```
|
|
146
|
+
*
|
|
147
|
+
* @public
|
|
148
|
+
*/
|
|
149
|
+
const withAdditionalInterceptors = interceptors => settings => ({
|
|
150
|
+
...settings,
|
|
151
|
+
interceptors: settings.interceptors.concat(interceptors)
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Instantiates the SDK with legacy interceptors.
|
|
156
|
+
*/
|
|
157
|
+
/* eslint-disable deprecation/deprecation */
|
|
158
|
+
const withLegacyInterceptors = () => settings => {
|
|
159
|
+
if (!settings.requestInterceptors && !settings.responseInterceptors) {
|
|
160
|
+
return settings;
|
|
161
|
+
}
|
|
162
|
+
const allInterceptors = settings.interceptors.concat((settings.requestInterceptors ?? []).map(obj => ({
|
|
163
|
+
request: obj
|
|
164
|
+
})), (settings.responseInterceptors ?? []).map(obj => ({
|
|
165
|
+
response: obj
|
|
166
|
+
})));
|
|
167
|
+
return {
|
|
168
|
+
...settings,
|
|
169
|
+
interceptors: allInterceptors
|
|
170
|
+
};
|
|
171
|
+
};
|
|
172
|
+
/* eslint-enable deprecation/deprecation */
|
|
173
|
+
|
|
174
|
+
export { withAdditionalInterceptors, withDefaultPageSize, withHTTPClient, withLegacyInterceptors, withProfile, withUserAgent, withUserAgentSuffix };
|
package/dist/scw/client.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getLogger } from '../internal/logger/index.js';
|
|
2
|
-
import { withProfile } from './client-ini-factory.js';
|
|
2
|
+
import { withLegacyInterceptors, withProfile } from './client-ini-factory.js';
|
|
3
3
|
import { assertValidSettings } from './client-settings.js';
|
|
4
4
|
import { version, userAgent } from './constants.js';
|
|
5
5
|
import { buildFetcher } from './fetch/build-fetcher.js';
|
|
@@ -8,8 +8,7 @@ import { buildFetcher } from './fetch/build-fetcher.js';
|
|
|
8
8
|
const DEFAULT_SETTINGS = {
|
|
9
9
|
apiURL: 'https://api.scaleway.com',
|
|
10
10
|
httpClient: fetch,
|
|
11
|
-
|
|
12
|
-
responseInterceptors: [],
|
|
11
|
+
interceptors: [],
|
|
13
12
|
userAgent
|
|
14
13
|
};
|
|
15
14
|
|
|
@@ -45,7 +44,7 @@ const createAdvancedClient = function () {
|
|
|
45
44
|
for (var _len = arguments.length, configs = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
46
45
|
configs[_key] = arguments[_key];
|
|
47
46
|
}
|
|
48
|
-
const settings = configs.reduce((currentSettings, config) => config(currentSettings), DEFAULT_SETTINGS);
|
|
47
|
+
const settings = configs.concat([withLegacyInterceptors()]).reduce((currentSettings, config) => config(currentSettings), DEFAULT_SETTINGS);
|
|
49
48
|
assertValidSettings(settings);
|
|
50
49
|
getLogger().info(`init Scaleway SDK version ${version}`);
|
|
51
50
|
return {
|
package/dist/scw/constants.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isBrowser } from '../../helpers/is-browser.js';
|
|
2
|
-
import {
|
|
2
|
+
import { composeRequestInterceptors, composeResponseInterceptors, composeResponseErrorInterceptors } from '../../internal/interceptors/composer.js';
|
|
3
3
|
import { obfuscateAuthHeadersEntry } from '../auth.js';
|
|
4
4
|
import { logRequest, logResponse, obfuscateInterceptor } from './http-interceptors.js';
|
|
5
5
|
import { responseParser } from './response-parser.js';
|
|
@@ -44,14 +44,28 @@ const asIs = response => response;
|
|
|
44
44
|
*/
|
|
45
45
|
const buildFetcher = (settings, httpClient) => {
|
|
46
46
|
let requestNumber = 0;
|
|
47
|
-
const prepareRequest = requestId =>
|
|
48
|
-
const prepareResponse = requestId =>
|
|
47
|
+
const prepareRequest = requestId => composeRequestInterceptors([...settings.interceptors.map(obj => obj.request).filter(obj => obj), logRequest(requestId, obfuscateInterceptor(obfuscateAuthHeadersEntry))]);
|
|
48
|
+
const prepareResponse = requestId => composeResponseInterceptors([...settings.interceptors.map(obj => obj.response).filter(obj => obj), logResponse(requestId)]);
|
|
49
|
+
const prepareResponseErrors = () => composeResponseErrorInterceptors(settings.interceptors.map(obj => obj.responseError).filter(obj => obj));
|
|
49
50
|
return async function (request, unwrapper) {
|
|
50
51
|
if (unwrapper === void 0) {
|
|
51
52
|
unwrapper = asIs;
|
|
52
53
|
}
|
|
53
54
|
const requestId = `${requestNumber += 1}`;
|
|
54
|
-
|
|
55
|
+
const reqInterceptors = prepareRequest(requestId);
|
|
56
|
+
const finalRequest = await reqInterceptors(buildRequest(request, settings));
|
|
57
|
+
try {
|
|
58
|
+
const response = await httpClient(finalRequest);
|
|
59
|
+
const resInterceptors = prepareResponse(requestId);
|
|
60
|
+
const finalResponse = await resInterceptors(response);
|
|
61
|
+
const resUnmarshaller = responseParser(unwrapper, request.responseType ?? 'json');
|
|
62
|
+
const unmarshaledResponse = await resUnmarshaller(finalResponse);
|
|
63
|
+
return unmarshaledResponse;
|
|
64
|
+
} catch (err) {
|
|
65
|
+
const resErrorInterceptors = prepareResponseErrors();
|
|
66
|
+
const handledError = await resErrorInterceptors(finalRequest, err);
|
|
67
|
+
return handledError;
|
|
68
|
+
}
|
|
55
69
|
};
|
|
56
70
|
};
|
|
57
71
|
|
|
@@ -35,8 +35,18 @@ class ObfuscatedRequest extends Request {
|
|
|
35
35
|
*
|
|
36
36
|
* @internal
|
|
37
37
|
*/
|
|
38
|
-
const obfuscateInterceptor = obfuscate =>
|
|
39
|
-
|
|
38
|
+
const obfuscateInterceptor = obfuscate => _ref => {
|
|
39
|
+
let {
|
|
40
|
+
request
|
|
41
|
+
} = _ref;
|
|
42
|
+
return new ObfuscatedRequest(request, obfuscate);
|
|
43
|
+
};
|
|
44
|
+
const identity = _ref2 => {
|
|
45
|
+
let {
|
|
46
|
+
request
|
|
47
|
+
} = _ref2;
|
|
48
|
+
return request;
|
|
49
|
+
};
|
|
40
50
|
|
|
41
51
|
/**
|
|
42
52
|
* Creates an interceptor to log the requests.
|
|
@@ -51,10 +61,15 @@ const logRequest = function (identifier, obfuscate) {
|
|
|
51
61
|
if (obfuscate === void 0) {
|
|
52
62
|
obfuscate = identity;
|
|
53
63
|
}
|
|
54
|
-
return async
|
|
64
|
+
return async _ref3 => {
|
|
65
|
+
let {
|
|
66
|
+
request
|
|
67
|
+
} = _ref3;
|
|
55
68
|
if (shouldLog(LevelResolver[getLogger().logLevel], 'debug')) {
|
|
56
69
|
getLogger().debug(`--------------- Scaleway SDK REQUEST ${identifier} ---------------
|
|
57
|
-
${await dumpRequest(await obfuscate(
|
|
70
|
+
${await dumpRequest(await obfuscate({
|
|
71
|
+
request
|
|
72
|
+
}))}
|
|
58
73
|
---------------------------------------------------------`);
|
|
59
74
|
}
|
|
60
75
|
return request;
|
|
@@ -69,7 +84,10 @@ ${await dumpRequest(await obfuscate(request))}
|
|
|
69
84
|
*
|
|
70
85
|
* @internal
|
|
71
86
|
*/
|
|
72
|
-
const logResponse = identifier => async
|
|
87
|
+
const logResponse = identifier => async _ref4 => {
|
|
88
|
+
let {
|
|
89
|
+
response
|
|
90
|
+
} = _ref4;
|
|
73
91
|
if (shouldLog(LevelResolver[getLogger().logLevel], 'debug')) {
|
|
74
92
|
getLogger().debug(`--------------- Scaleway SDK RESPONSE ${identifier} ---------------
|
|
75
93
|
${await dumpResponse(response)}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scaleway/sdk",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.10.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"description": "Scaleway SDK.",
|
|
6
6
|
"keywords": [
|
|
@@ -35,5 +35,5 @@
|
|
|
35
35
|
"bundledDependencies": [
|
|
36
36
|
"@scaleway/random-name"
|
|
37
37
|
],
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "3fcccb0fe3ba944bea778ea0d6bb55273ec01db6"
|
|
39
39
|
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Composes interceptors.
|
|
3
|
-
*
|
|
4
|
-
* @param interceptors - A list of interceptors (that modify an object instance)
|
|
5
|
-
* @returns An async composed interceptor
|
|
6
|
-
*
|
|
7
|
-
* @internal
|
|
8
|
-
*/
|
|
9
|
-
const composeInterceptors = interceptors => async instance => interceptors.reduce(async (asyncResult, interceptor) => interceptor(await asyncResult), new Promise(resolve => {
|
|
10
|
-
resolve(instance);
|
|
11
|
-
}));
|
|
12
|
-
|
|
13
|
-
export { composeInterceptors };
|