dcl-catalyst-client 17.0.0 → 17.1.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/client/CatalystClient.d.ts +13 -0
- package/dist/client/CatalystClient.d.ts.map +1 -0
- package/dist/client/CatalystClient.js +74 -0
- package/dist/client/CatalystClient.js.map +1 -0
- package/dist/client/ContentClient.d.ts +28 -0
- package/dist/client/ContentClient.d.ts.map +1 -0
- package/dist/client/ContentClient.js +173 -0
- package/dist/client/ContentClient.js.map +1 -0
- package/dist/client/LambdasClient.d.ts +17 -0
- package/dist/client/LambdasClient.d.ts.map +1 -0
- package/dist/client/LambdasClient.js +115 -0
- package/dist/client/LambdasClient.js.map +1 -0
- package/dist/client/types.d.ts +51 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +3 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/utils/DeploymentBuilder.d.ts +47 -0
- package/dist/client/utils/DeploymentBuilder.d.ts.map +1 -0
- package/dist/client/utils/DeploymentBuilder.js +162 -0
- package/dist/client/utils/DeploymentBuilder.js.map +1 -0
- package/dist/client/utils/Helper.d.ts +62 -0
- package/dist/client/utils/Helper.d.ts.map +1 -0
- package/dist/client/utils/Helper.js +274 -0
- package/dist/client/utils/Helper.js.map +1 -0
- package/dist/client/utils/fetcher.d.ts +3 -0
- package/dist/client/utils/fetcher.d.ts.map +1 -0
- package/dist/client/utils/fetcher.js +16 -0
- package/dist/client/utils/fetcher.js.map +1 -0
- package/dist/client/utils/retry.d.ts +2 -0
- package/dist/client/utils/retry.d.ts.map +1 -0
- package/dist/client/utils/retry.js +26 -0
- package/dist/client/utils/retry.js.map +1 -0
- package/dist/contracts/abi.d.ts +59 -0
- package/dist/contracts/abi.d.ts.map +1 -0
- package/dist/contracts/abi.js +942 -0
- package/dist/contracts/abi.js.map +1 -0
- package/dist/contracts/index.d.ts +19 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +86 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/contracts/types.d.ts +2 -0
- package/dist/contracts/types.d.ts.map +1 -0
- package/dist/contracts/types.js +3 -0
- package/dist/contracts/types.js.map +1 -0
- package/dist/contracts-snapshots/data.d.ts +22 -0
- package/dist/contracts-snapshots/data.d.ts.map +1 -0
- package/dist/contracts-snapshots/data.js +355 -0
- package/dist/contracts-snapshots/data.js.map +1 -0
- package/dist/contracts-snapshots/index.d.ts +6 -0
- package/dist/contracts-snapshots/index.d.ts.map +1 -0
- package/dist/contracts-snapshots/index.js +17 -0
- package/dist/contracts-snapshots/index.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/package.json +7 -3
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +9 -5
- package/.eslintignore +0 -6
- package/.eslintrc.json +0 -13
- package/.github/dependabot.yml +0 -17
- package/.github/workflows/build-and-publish.yml +0 -23
- package/.github/workflows/validate-pr-title.yml +0 -9
- package/.prettierignore +0 -3
- package/.vscode/launch.json +0 -14
- package/.vscode/settings.json +0 -26
- package/coverage/clover.xml +0 -452
- package/coverage/coverage-final.json +0 -11
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -161
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -196
- package/coverage/lcov.info +0 -863
- package/jest.config.js +0 -13
- package/scripts/generate-snapshots.ts +0 -49
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildEntityWithoutNewFiles = exports.buildEntity = exports.buildEntityAndFile = void 0;
|
|
4
|
+
const hashing_1 = require("@dcl/hashing");
|
|
5
|
+
const schemas_1 = require("@dcl/schemas");
|
|
6
|
+
/**
|
|
7
|
+
* Take all the entity's data, build the entity file with it, and calculate its id
|
|
8
|
+
*/
|
|
9
|
+
async function buildEntityAndFile({ type, pointers, timestamp, content, metadata }) {
|
|
10
|
+
var _a;
|
|
11
|
+
// Make sure that there is at least one pointer
|
|
12
|
+
if (pointers.length === 0)
|
|
13
|
+
throw new Error(`All entities must have at least one pointer.`);
|
|
14
|
+
const entity = {
|
|
15
|
+
// default version is V3
|
|
16
|
+
version: 'v3',
|
|
17
|
+
type,
|
|
18
|
+
pointers,
|
|
19
|
+
timestamp,
|
|
20
|
+
content,
|
|
21
|
+
metadata
|
|
22
|
+
};
|
|
23
|
+
// prevent duplicated file names
|
|
24
|
+
if (content) {
|
|
25
|
+
const usedFilenames = new Set();
|
|
26
|
+
for (const a of content) {
|
|
27
|
+
const lowerCasedFileName = a.file.toLowerCase();
|
|
28
|
+
if (usedFilenames.has(lowerCasedFileName)) {
|
|
29
|
+
throw new Error(`Error creating the deployable entity: Decentraland's file system is case insensitive, the file ${JSON.stringify(a.file)} is repeated`);
|
|
30
|
+
}
|
|
31
|
+
usedFilenames.add(lowerCasedFileName);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const entityFile = new TextEncoder().encode(JSON.stringify(entity));
|
|
35
|
+
const entityId = await (0, hashing_1.hashV1)(entityFile);
|
|
36
|
+
const entityWithId = {
|
|
37
|
+
id: entityId,
|
|
38
|
+
...entity
|
|
39
|
+
};
|
|
40
|
+
if (!schemas_1.Entity.validate(entityWithId)) {
|
|
41
|
+
throw new Error('Generated entity is not valid:\n' + ((_a = schemas_1.Entity.validate.errors) === null || _a === void 0 ? void 0 : _a.map(($) => $.message).join('\n')));
|
|
42
|
+
}
|
|
43
|
+
return { entity: entityWithId, entityFile };
|
|
44
|
+
}
|
|
45
|
+
exports.buildEntityAndFile = buildEntityAndFile;
|
|
46
|
+
/**
|
|
47
|
+
* As part of the deployment process, an entity has to be built. In this method, we are building it, based on the data provided.
|
|
48
|
+
* After the entity is built, the user will have to sign the entity id, to prove they are actually who they say they are.
|
|
49
|
+
*/
|
|
50
|
+
async function buildEntity({ type, pointers, files, metadata, timestamp }) {
|
|
51
|
+
// Reorder input
|
|
52
|
+
const contentFiles = Array.from(files ? files : []).map(([key, content]) => ({
|
|
53
|
+
key,
|
|
54
|
+
content
|
|
55
|
+
}));
|
|
56
|
+
// Calculate hashes
|
|
57
|
+
const allInfo = await Promise.all(contentFiles.map(async ({ key, content }) => ({ key, content, hash: await (0, hashing_1.hashV1)(content) })));
|
|
58
|
+
const hashesByKey = new Map(allInfo.map(({ hash, key }) => [key, hash]));
|
|
59
|
+
const filesByHash = new Map(allInfo.map(({ hash, content }) => [hash, content]));
|
|
60
|
+
return buildEntityInternal(type, pointers, {
|
|
61
|
+
hashesByKey,
|
|
62
|
+
filesByHash,
|
|
63
|
+
metadata,
|
|
64
|
+
timestamp
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
exports.buildEntity = buildEntity;
|
|
68
|
+
/**
|
|
69
|
+
* In cases where we don't need upload content files, we can simply generate the new entity.
|
|
70
|
+
* We can still use already uploaded hashes on this new entity.
|
|
71
|
+
*/
|
|
72
|
+
async function buildEntityWithoutNewFiles(fetcher, { contentUrl, type, pointers, hashesByKey, metadata, timestamp }) {
|
|
73
|
+
const givenFilesMaps = (hashesByKey !== null && hashesByKey !== void 0 ? hashesByKey : metadata) ? getHashesByKey(metadata) : undefined;
|
|
74
|
+
// When the old entity has the old hashing algorithm, then the full entity with new hash will need to be deployed.
|
|
75
|
+
if (!!givenFilesMaps && isObsoleteProfile(type, givenFilesMaps)) {
|
|
76
|
+
const files = await downloadAllFiles(fetcher, contentUrl, givenFilesMaps);
|
|
77
|
+
const metadataWithNewHash = await updateMetadata(files, metadata);
|
|
78
|
+
return buildEntity({
|
|
79
|
+
type,
|
|
80
|
+
pointers,
|
|
81
|
+
files,
|
|
82
|
+
metadata: metadataWithNewHash,
|
|
83
|
+
timestamp
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return buildEntityInternal(type, pointers, { hashesByKey, metadata, timestamp });
|
|
87
|
+
}
|
|
88
|
+
exports.buildEntityWithoutNewFiles = buildEntityWithoutNewFiles;
|
|
89
|
+
async function buildEntityInternal(type, pointers, options) {
|
|
90
|
+
// Make sure that there is at least one pointer
|
|
91
|
+
if (pointers.length === 0) {
|
|
92
|
+
throw new Error(`All entities must have at least one pointer.`);
|
|
93
|
+
}
|
|
94
|
+
// Re-organize the hashes
|
|
95
|
+
const hashesByKey = (options === null || options === void 0 ? void 0 : options.hashesByKey) ? options === null || options === void 0 ? void 0 : options.hashesByKey : new Map();
|
|
96
|
+
const entityContent = Array.from(hashesByKey.entries()).map(([key, hash]) => ({
|
|
97
|
+
file: key,
|
|
98
|
+
hash
|
|
99
|
+
}));
|
|
100
|
+
// Calculate timestamp if necessary
|
|
101
|
+
const timestamp = (options === null || options === void 0 ? void 0 : options.timestamp) ? options === null || options === void 0 ? void 0 : options.timestamp : Date.now();
|
|
102
|
+
// Build entity file
|
|
103
|
+
const { entity, entityFile } = await buildEntityAndFile({
|
|
104
|
+
type,
|
|
105
|
+
pointers,
|
|
106
|
+
timestamp,
|
|
107
|
+
content: entityContent,
|
|
108
|
+
metadata: options === null || options === void 0 ? void 0 : options.metadata
|
|
109
|
+
});
|
|
110
|
+
// Add entity file to content files
|
|
111
|
+
const filesByHash = (options === null || options === void 0 ? void 0 : options.filesByHash) ? options.filesByHash : new Map();
|
|
112
|
+
filesByHash.set(entity.id, entityFile);
|
|
113
|
+
return { files: filesByHash, entityId: entity.id };
|
|
114
|
+
}
|
|
115
|
+
function isObsoleteProfile(type, hashesByKey) {
|
|
116
|
+
return type === schemas_1.EntityType.PROFILE && Array.from(hashesByKey).some(([, hash]) => hash.toLowerCase().startsWith('qm'));
|
|
117
|
+
}
|
|
118
|
+
async function fetchArrayBuffer(fetcher, url) {
|
|
119
|
+
const response = await fetcher.fetch(url);
|
|
120
|
+
const buffer = await response.arrayBuffer();
|
|
121
|
+
return new Uint8Array(buffer);
|
|
122
|
+
}
|
|
123
|
+
async function downloadAllFiles(fetcher, contentUrl, hashes) {
|
|
124
|
+
const oldBodyHash = hashes.get('body.png');
|
|
125
|
+
const oldFaceHash = hashes.get('face256.png');
|
|
126
|
+
const bodyUrl = new URL(`${contentUrl}/contents/${oldBodyHash}`).toString();
|
|
127
|
+
const faceUrl = new URL(`${contentUrl}/contents/${oldFaceHash}`).toString();
|
|
128
|
+
const [bodyFileContent, faceFileContent] = await Promise.all([
|
|
129
|
+
fetchArrayBuffer(fetcher, bodyUrl),
|
|
130
|
+
fetchArrayBuffer(fetcher, faceUrl)
|
|
131
|
+
]);
|
|
132
|
+
return new Map([
|
|
133
|
+
['body.png', bodyFileContent],
|
|
134
|
+
['face256.png', faceFileContent]
|
|
135
|
+
]);
|
|
136
|
+
}
|
|
137
|
+
async function updateMetadata(files, metadata) {
|
|
138
|
+
if (!metadata)
|
|
139
|
+
return metadata;
|
|
140
|
+
metadata.avatars = await Promise.all(metadata.avatars.map(async (avatar) => {
|
|
141
|
+
const newSnapshots = { face256: '', body: '' };
|
|
142
|
+
const face256Content = files.get('face256.png');
|
|
143
|
+
if (!!face256Content) {
|
|
144
|
+
newSnapshots['face256'] = await (0, hashing_1.hashV1)(face256Content);
|
|
145
|
+
}
|
|
146
|
+
const bodyContent = files.get('body.png');
|
|
147
|
+
if (!!bodyContent) {
|
|
148
|
+
newSnapshots['body'] = await (0, hashing_1.hashV1)(bodyContent);
|
|
149
|
+
}
|
|
150
|
+
avatar.avatar.snapshots = newSnapshots;
|
|
151
|
+
return avatar;
|
|
152
|
+
}));
|
|
153
|
+
return metadata;
|
|
154
|
+
}
|
|
155
|
+
function getHashesByKey(metadata) {
|
|
156
|
+
const avatar = metadata.avatars[0];
|
|
157
|
+
return new Map([
|
|
158
|
+
['body.png', avatar.avatar.snapshots.body],
|
|
159
|
+
['face256.png', avatar.avatar.snapshots.face256]
|
|
160
|
+
]);
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=DeploymentBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeploymentBuilder.js","sourceRoot":"","sources":["../../../src/client/utils/DeploymentBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { IFetchComponent, RequestOptions } from '@well-known-components/interfaces';
|
|
2
|
+
import type FormData from 'form-data';
|
|
3
|
+
export declare function getCurrentVersion(): string;
|
|
4
|
+
export declare function addModelToFormData(model: any, form: FormData, namespace?: string): FormData;
|
|
5
|
+
/**
|
|
6
|
+
* This method performs one or more fetches to the given server, splitting query params into different queries to avoid exceeding the max length of urls
|
|
7
|
+
*/
|
|
8
|
+
export declare const MAX_URL_LENGTH: number;
|
|
9
|
+
export declare function splitAndFetch<E>({ baseUrl, path, queryParams, fetcher, uniqueBy, options }: Omit<SplitAndFetchParams<E>, 'elementsProperty'>): Promise<E[]>;
|
|
10
|
+
/**
|
|
11
|
+
* This method performs one or more fetches to the given server, splitting query params into different queries to avoid exceeding the max length of urls
|
|
12
|
+
* This method should be used if the result is paginated, and needs to be queries many times
|
|
13
|
+
*/
|
|
14
|
+
export declare function splitAndFetchPaginated<E>({ baseUrl, path, queryParams, elementsProperty, uniqueBy, options, fetcher }: RequiredOne<SplitAndFetchParams<E>, 'uniqueBy'>): Promise<E[]>;
|
|
15
|
+
export declare function splitValuesIntoManyQueryBuilders({ queryParams, baseUrl, path, reservedParams }: SplitIntoQueriesParams): QueryBuilder[];
|
|
16
|
+
export declare function splitValuesIntoManyQueries(parameters: SplitIntoQueriesParams): string[];
|
|
17
|
+
export declare function convertFiltersToQueryParams(filters?: Record<string, any>): Map<string, string[]>;
|
|
18
|
+
export declare function isNode(): boolean;
|
|
19
|
+
export declare function mergeRequestOptions(target: RequestOptions, source?: RequestOptions): RequestOptions;
|
|
20
|
+
/** Remove white spaces and add https if no protocol is specified */
|
|
21
|
+
export declare function sanitizeUrl(url: string): string;
|
|
22
|
+
type RequiredOne<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;
|
|
23
|
+
type QueryParams = {
|
|
24
|
+
name: string;
|
|
25
|
+
values: string[];
|
|
26
|
+
} | Map<string, string[]>;
|
|
27
|
+
type SplitIntoQueriesParams = {
|
|
28
|
+
baseUrl: string;
|
|
29
|
+
path: string;
|
|
30
|
+
queryParams: QueryParams;
|
|
31
|
+
reservedParams?: Map<string, number>;
|
|
32
|
+
};
|
|
33
|
+
type SplitAndFetchParams<E> = {
|
|
34
|
+
baseUrl: string;
|
|
35
|
+
path: string;
|
|
36
|
+
queryParams: QueryParams;
|
|
37
|
+
elementsProperty: string;
|
|
38
|
+
uniqueBy?: keyof E;
|
|
39
|
+
fetcher?: IFetchComponent;
|
|
40
|
+
options?: RequestOptions;
|
|
41
|
+
};
|
|
42
|
+
export declare class QueryBuilder {
|
|
43
|
+
private readonly baseUrl;
|
|
44
|
+
private readonly queryParams;
|
|
45
|
+
private readonly reservedParams;
|
|
46
|
+
private length;
|
|
47
|
+
constructor(baseUrl: string, queryParams?: Map<string, string[]>, reservedParams?: Map<string, number>);
|
|
48
|
+
canAddParam(paramName: string, paramValue: string): boolean;
|
|
49
|
+
addParam(paramName: string, paramValue: string): this;
|
|
50
|
+
canSetParams(paramName: string, paramValues: any[]): boolean;
|
|
51
|
+
/** This action will override whatever configuration there was previously for the given query parameter */
|
|
52
|
+
setParams(paramName: string, paramValues: (string | number)[]): this;
|
|
53
|
+
/** This action will override whatever configuration there was previously for the given query parameter */
|
|
54
|
+
setParam(paramName: string, paramValue: string | number): this;
|
|
55
|
+
toString(): string;
|
|
56
|
+
private calculateUrlLength;
|
|
57
|
+
static clone(queryBuilder: QueryBuilder): QueryBuilder;
|
|
58
|
+
private calculateAddedLength;
|
|
59
|
+
private calculateArrayLength;
|
|
60
|
+
}
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=Helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Helper.d.ts","sourceRoot":"","sources":["../../../src/client/utils/Helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QueryBuilder = exports.sanitizeUrl = exports.mergeRequestOptions = exports.isNode = exports.convertFiltersToQueryParams = exports.splitValuesIntoManyQueries = exports.splitValuesIntoManyQueryBuilders = exports.splitAndFetchPaginated = exports.splitAndFetch = exports.MAX_URL_LENGTH = exports.addModelToFormData = exports.getCurrentVersion = void 0;
|
|
4
|
+
const fetch_component_1 = require("@well-known-components/fetch-component");
|
|
5
|
+
const package_json_1 = require("./../../package.json");
|
|
6
|
+
function getCurrentVersion() {
|
|
7
|
+
return package_json_1.version || package_json_1.commit || 'Unknown';
|
|
8
|
+
}
|
|
9
|
+
exports.getCurrentVersion = getCurrentVersion;
|
|
10
|
+
function addModelToFormData(model, form, namespace = '') {
|
|
11
|
+
for (const propertyName in model) {
|
|
12
|
+
if (!model.hasOwnProperty(propertyName) || model[propertyName] === null || model[propertyName] === undefined)
|
|
13
|
+
continue;
|
|
14
|
+
const formKey = namespace ? `${namespace}[${propertyName}]` : propertyName;
|
|
15
|
+
if (model[propertyName] instanceof Date) {
|
|
16
|
+
form.append(formKey, model[propertyName].toISOString());
|
|
17
|
+
}
|
|
18
|
+
else if (model[propertyName] instanceof Array) {
|
|
19
|
+
model[propertyName].forEach((element, index) => {
|
|
20
|
+
const tempFormKey = `${formKey}[${index}]`;
|
|
21
|
+
addModelToFormData(element, form, tempFormKey);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
else if (typeof model[propertyName] === 'object') {
|
|
25
|
+
addModelToFormData(model[propertyName], form, formKey);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
form.append(formKey, model[propertyName].toString());
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return form;
|
|
32
|
+
}
|
|
33
|
+
exports.addModelToFormData = addModelToFormData;
|
|
34
|
+
function removeDuplicates(array) {
|
|
35
|
+
return Array.from(new Set(array));
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* This method performs one or more fetches to the given server, splitting query params into different queries to avoid exceeding the max length of urls
|
|
39
|
+
*/
|
|
40
|
+
exports.MAX_URL_LENGTH = 2048;
|
|
41
|
+
async function splitAndFetch({ baseUrl, path, queryParams, fetcher, uniqueBy, options }) {
|
|
42
|
+
// Adding default
|
|
43
|
+
fetcher = fetcher ? fetcher : (0, fetch_component_1.createFetchComponent)();
|
|
44
|
+
// Split values into different queries
|
|
45
|
+
const queries = splitValuesIntoManyQueries({ baseUrl, path, queryParams });
|
|
46
|
+
const results = new Map();
|
|
47
|
+
for (const query of queries) {
|
|
48
|
+
// Perform the different queries
|
|
49
|
+
const elements = (await (await fetcher.fetch(query, { ...options, headers: { 'Content-Type': 'application/json' } })).json());
|
|
50
|
+
// Group by unique property (if set), or add all of them to the map
|
|
51
|
+
elements.forEach((element) => results.set(uniqueBy ? element[uniqueBy] : results.size, element));
|
|
52
|
+
}
|
|
53
|
+
// Return results
|
|
54
|
+
return Array.from(results.values());
|
|
55
|
+
}
|
|
56
|
+
exports.splitAndFetch = splitAndFetch;
|
|
57
|
+
const CHARS_LEFT_FOR_OFFSET = 7;
|
|
58
|
+
/**
|
|
59
|
+
* This method performs one or more fetches to the given server, splitting query params into different queries to avoid exceeding the max length of urls
|
|
60
|
+
* This method should be used if the result is paginated, and needs to be queries many times
|
|
61
|
+
*/
|
|
62
|
+
async function splitAndFetchPaginated({ baseUrl, path, queryParams, elementsProperty, uniqueBy, options, fetcher }) {
|
|
63
|
+
// Set default
|
|
64
|
+
fetcher = fetcher ? fetcher : (0, fetch_component_1.createFetchComponent)();
|
|
65
|
+
// Reserve a few chars to send the offset
|
|
66
|
+
const reservedParams = new Map([['offset', CHARS_LEFT_FOR_OFFSET]]);
|
|
67
|
+
// Split values into different queries
|
|
68
|
+
const queries = splitValuesIntoManyQueries({ baseUrl, path, queryParams, reservedParams });
|
|
69
|
+
// Perform the different queries
|
|
70
|
+
const foundElements = new Map();
|
|
71
|
+
let exit = false;
|
|
72
|
+
for (let i = 0; i < queries.length && !exit; i++) {
|
|
73
|
+
let url = queries[i];
|
|
74
|
+
while (url && !exit) {
|
|
75
|
+
try {
|
|
76
|
+
const response = (await fetcher.fetch(url, options)).json();
|
|
77
|
+
const elements = response[elementsProperty];
|
|
78
|
+
elements.forEach((element) => foundElements.set(element[uniqueBy], element));
|
|
79
|
+
const nextRelative = response.pagination.next;
|
|
80
|
+
url = nextRelative ? new URL(nextRelative, url).toString() : undefined;
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
exit = true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return Array.from(foundElements.values());
|
|
88
|
+
}
|
|
89
|
+
exports.splitAndFetchPaginated = splitAndFetchPaginated;
|
|
90
|
+
function splitValuesIntoManyQueryBuilders({ queryParams, baseUrl, path, reservedParams }) {
|
|
91
|
+
const queryParamsMap = 'name' in queryParams ? new Map([[queryParams.name, queryParams.values]]) : queryParams;
|
|
92
|
+
// Check that it makes sent to apply the algorithm
|
|
93
|
+
if (queryParamsMap.size === 0) {
|
|
94
|
+
return [new QueryBuilder(baseUrl + path, queryParamsMap, reservedParams)];
|
|
95
|
+
}
|
|
96
|
+
// Remove duplicates
|
|
97
|
+
const withoutDuplicates = Array.from(queryParamsMap.entries()).map(([name, values]) => [
|
|
98
|
+
name,
|
|
99
|
+
removeDuplicates(values)
|
|
100
|
+
]);
|
|
101
|
+
// Sort params by amount of values
|
|
102
|
+
const sortedByValues = withoutDuplicates.sort(([_, values1], [__, values2]) => values1.length - values2.length);
|
|
103
|
+
// Add all params (except the last one that is the one with the most values) into the url
|
|
104
|
+
const defaultQueryBuilder = new QueryBuilder(baseUrl + path, new Map(), reservedParams);
|
|
105
|
+
for (let i = 0; i < sortedByValues.length - 1; i++) {
|
|
106
|
+
const [paramName, paramValues] = sortedByValues[i];
|
|
107
|
+
if (!defaultQueryBuilder.canSetParams(paramName, paramValues)) {
|
|
108
|
+
throw new Error(`This library can split one query param into many HTTP requests, but it can't split more than one. You will need to do that on the client side.`);
|
|
109
|
+
}
|
|
110
|
+
defaultQueryBuilder.setParams(paramName, paramValues);
|
|
111
|
+
}
|
|
112
|
+
// Prepare everything
|
|
113
|
+
let queryBuilder = QueryBuilder.clone(defaultQueryBuilder);
|
|
114
|
+
const [lastParamName, lastParamValues] = sortedByValues[sortedByValues.length - 1];
|
|
115
|
+
const result = [];
|
|
116
|
+
for (const value of lastParamValues) {
|
|
117
|
+
// Check url length
|
|
118
|
+
if (!queryBuilder.canAddParam(lastParamName, value)) {
|
|
119
|
+
result.push(queryBuilder);
|
|
120
|
+
queryBuilder = QueryBuilder.clone(defaultQueryBuilder);
|
|
121
|
+
}
|
|
122
|
+
queryBuilder.addParam(lastParamName, value);
|
|
123
|
+
}
|
|
124
|
+
// Add current builder one last time
|
|
125
|
+
result.push(queryBuilder);
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
exports.splitValuesIntoManyQueryBuilders = splitValuesIntoManyQueryBuilders;
|
|
129
|
+
function splitValuesIntoManyQueries(parameters) {
|
|
130
|
+
const builders = splitValuesIntoManyQueryBuilders(parameters);
|
|
131
|
+
return builders.map((builder) => builder.toString());
|
|
132
|
+
}
|
|
133
|
+
exports.splitValuesIntoManyQueries = splitValuesIntoManyQueries;
|
|
134
|
+
function convertFiltersToQueryParams(filters) {
|
|
135
|
+
if (!filters) {
|
|
136
|
+
return new Map();
|
|
137
|
+
}
|
|
138
|
+
const entries = Object.entries(filters)
|
|
139
|
+
.filter(([_, value]) => !!value)
|
|
140
|
+
.map(([name, value]) => {
|
|
141
|
+
const newName = name.endsWith('s') ? name.slice(0, -1) : name;
|
|
142
|
+
let newValues;
|
|
143
|
+
// Force coersion of number, boolean, or string into string
|
|
144
|
+
if (Array.isArray(value)) {
|
|
145
|
+
newValues = [...value].filter(isValidQueryParamValue).map((_) => `${_}`);
|
|
146
|
+
}
|
|
147
|
+
else if (isValidQueryParamValue(value)) {
|
|
148
|
+
newValues = [`${value}`];
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
throw new Error('Query params must be either a string, a number, a boolean or an array of the types just mentioned');
|
|
152
|
+
}
|
|
153
|
+
return [newName, newValues];
|
|
154
|
+
})
|
|
155
|
+
.filter(([_, values]) => values.length > 0);
|
|
156
|
+
return new Map(entries);
|
|
157
|
+
}
|
|
158
|
+
exports.convertFiltersToQueryParams = convertFiltersToQueryParams;
|
|
159
|
+
function isNode() {
|
|
160
|
+
return Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';
|
|
161
|
+
}
|
|
162
|
+
exports.isNode = isNode;
|
|
163
|
+
function mergeRequestOptions(target, source) {
|
|
164
|
+
const combinedHeaders = {
|
|
165
|
+
...target === null || target === void 0 ? void 0 : target.headers,
|
|
166
|
+
...source === null || source === void 0 ? void 0 : source.headers
|
|
167
|
+
};
|
|
168
|
+
return {
|
|
169
|
+
...target,
|
|
170
|
+
...source,
|
|
171
|
+
headers: combinedHeaders
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
exports.mergeRequestOptions = mergeRequestOptions;
|
|
175
|
+
function isValidQueryParamValue(value) {
|
|
176
|
+
return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
|
|
177
|
+
}
|
|
178
|
+
/** Remove white spaces and add https if no protocol is specified */
|
|
179
|
+
function sanitizeUrl(url) {
|
|
180
|
+
// Remove empty spaces
|
|
181
|
+
url = url.trim();
|
|
182
|
+
// Add protocol if necessary
|
|
183
|
+
if (!url.startsWith('https://') && !url.startsWith('http://')) {
|
|
184
|
+
url = 'https://' + url;
|
|
185
|
+
}
|
|
186
|
+
// Remove trailing slash if present
|
|
187
|
+
if (url.endsWith('/')) {
|
|
188
|
+
url = url.slice(0, -1);
|
|
189
|
+
}
|
|
190
|
+
return url;
|
|
191
|
+
}
|
|
192
|
+
exports.sanitizeUrl = sanitizeUrl;
|
|
193
|
+
class QueryBuilder {
|
|
194
|
+
constructor(baseUrl, queryParams = new Map(), reservedParams = new Map()) {
|
|
195
|
+
this.baseUrl = baseUrl;
|
|
196
|
+
this.queryParams = queryParams;
|
|
197
|
+
this.reservedParams = reservedParams;
|
|
198
|
+
this.length = this.calculateUrlLength(queryParams, reservedParams);
|
|
199
|
+
}
|
|
200
|
+
canAddParam(paramName, paramValue) {
|
|
201
|
+
return this.length + paramName.length + paramValue.length + 2 < exports.MAX_URL_LENGTH;
|
|
202
|
+
}
|
|
203
|
+
addParam(paramName, paramValue) {
|
|
204
|
+
if (!this.canAddParam(paramName, paramValue)) {
|
|
205
|
+
throw new Error(`You can't add this parameter '${paramName}', since it would exceed the max url length`);
|
|
206
|
+
}
|
|
207
|
+
const queryParam = this.queryParams.get(paramName);
|
|
208
|
+
const values = queryParam ? queryParam : [];
|
|
209
|
+
values.push(paramValue);
|
|
210
|
+
this.queryParams.set(paramName, values);
|
|
211
|
+
this.length += this.calculateAddedLength(paramName, [paramValue]);
|
|
212
|
+
return this;
|
|
213
|
+
}
|
|
214
|
+
canSetParams(paramName, paramValues) {
|
|
215
|
+
const newQueryParams = new Map([...this.queryParams, [paramName, paramValues]]);
|
|
216
|
+
const newLength = this.calculateUrlLength(newQueryParams, this.reservedParams);
|
|
217
|
+
return newLength < exports.MAX_URL_LENGTH;
|
|
218
|
+
}
|
|
219
|
+
/** This action will override whatever configuration there was previously for the given query parameter */
|
|
220
|
+
setParams(paramName, paramValues) {
|
|
221
|
+
if (!this.canSetParams(paramName, paramValues)) {
|
|
222
|
+
throw new Error(`You can't add this parameter '${paramName}', since it would exceed the max url length`);
|
|
223
|
+
}
|
|
224
|
+
this.queryParams.set(paramName, paramValues.map((value) => `${value}`));
|
|
225
|
+
this.length = this.calculateUrlLength(this.queryParams, this.reservedParams);
|
|
226
|
+
return this;
|
|
227
|
+
}
|
|
228
|
+
/** This action will override whatever configuration there was previously for the given query parameter */
|
|
229
|
+
setParam(paramName, paramValue) {
|
|
230
|
+
this.setParams(paramName, [paramValue]);
|
|
231
|
+
return this;
|
|
232
|
+
}
|
|
233
|
+
toString() {
|
|
234
|
+
let url = this.baseUrl;
|
|
235
|
+
let addedParamAlready = false;
|
|
236
|
+
for (const [paramName, paramValues] of this.queryParams) {
|
|
237
|
+
for (const paramValue of paramValues) {
|
|
238
|
+
if (addedParamAlready) {
|
|
239
|
+
url += `&${paramName}=${paramValue}`;
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
url += `?${paramName}=${paramValue}`;
|
|
243
|
+
addedParamAlready = true;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return url;
|
|
248
|
+
}
|
|
249
|
+
calculateUrlLength(queryParams, reservedParams) {
|
|
250
|
+
let length = this.baseUrl.length;
|
|
251
|
+
for (const [paramName, reserved] of reservedParams) {
|
|
252
|
+
if (!this.queryParams.has(paramName)) {
|
|
253
|
+
// We will avoid the reserved parameters that already have a value set
|
|
254
|
+
length += paramName.length + 2 + reserved;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
for (const [paramName, paramValues] of queryParams) {
|
|
258
|
+
length += this.calculateAddedLength(paramName, paramValues);
|
|
259
|
+
}
|
|
260
|
+
return length;
|
|
261
|
+
}
|
|
262
|
+
static clone(queryBuilder) {
|
|
263
|
+
return new QueryBuilder(queryBuilder.baseUrl, new Map(queryBuilder.queryParams), queryBuilder.reservedParams);
|
|
264
|
+
}
|
|
265
|
+
calculateAddedLength(paramName, paramValues) {
|
|
266
|
+
const valuesLength = this.calculateArrayLength(paramValues);
|
|
267
|
+
return valuesLength + (paramName.length + 2) * paramValues.length;
|
|
268
|
+
}
|
|
269
|
+
calculateArrayLength(array) {
|
|
270
|
+
return array.map((value) => `${value}`).reduce((accum, curr) => accum + curr.length, 0);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
exports.QueryBuilder = QueryBuilder;
|
|
274
|
+
//# sourceMappingURL=Helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Helper.js","sourceRoot":"","sources":["../../../src/client/utils/Helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../../src/client/utils/fetcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAkB,MAAM,mCAAmC,CAAA;AAInF,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,eAAe,GAAG,eAAe,CAUrF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.withDefaultHeadersInjection = void 0;
|
|
4
|
+
const Helper_1 = require("./Helper");
|
|
5
|
+
function withDefaultHeadersInjection(fetcher) {
|
|
6
|
+
return {
|
|
7
|
+
fetch: async (url, init) => {
|
|
8
|
+
const optionsWithInjectedClientAgent = (0, Helper_1.mergeRequestOptions)(init ? init : {}, {
|
|
9
|
+
headers: { 'X-Requested-With': (0, Helper_1.getCurrentVersion)() }
|
|
10
|
+
});
|
|
11
|
+
return await fetcher.fetch(url, optionsWithInjectedClientAgent);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
exports.withDefaultHeadersInjection = withDefaultHeadersInjection;
|
|
16
|
+
//# sourceMappingURL=fetcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../../src/client/utils/fetcher.ts"],"names":[],"mappings":";;;AAEA,qCAAiE;AAEjE,SAAgB,2BAA2B,CAAC,OAAwB;IAClE,OAAO;QACL,KAAK,EAAE,KAAK,EAAE,GAA0B,EAAE,IAAqB,EAA+B,EAAE;YAC9F,MAAM,8BAA8B,GAAG,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC3E,OAAO,EAAE,EAAE,kBAAkB,EAAE,IAAA,0BAAiB,GAAE,EAAE;aACrD,CAAC,CAAA;YAEF,OAAO,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,8BAA8B,CAAC,CAAA;QACjE,CAAC;KACF,CAAA;AACH,CAAC;AAVD,kEAUC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../src/client/utils/retry.ts"],"names":[],"mappings":"AAEA,wBAAsB,KAAK,CAAC,CAAC,EAC3B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,CAAC,CAAC,CAmBZ"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.retry = void 0;
|
|
4
|
+
const promises_1 = require("timers/promises");
|
|
5
|
+
async function retry(description, execution, attempts, waitTimeInMs) {
|
|
6
|
+
while (attempts > 0) {
|
|
7
|
+
try {
|
|
8
|
+
return await execution();
|
|
9
|
+
// ^^^^^ never remove this "await" keyword, otherwise this function won't
|
|
10
|
+
// catch the exception and perform the retries
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
attempts--;
|
|
14
|
+
if (attempts > 0) {
|
|
15
|
+
console.info(`Failed to ${description}. Still have ${attempts} attempt/s left. Will try again in ${waitTimeInMs}`);
|
|
16
|
+
await (0, promises_1.setTimeout)(waitTimeInMs, null);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
throw error;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
throw new Error('Please specify more than one attempt for the retry function');
|
|
24
|
+
}
|
|
25
|
+
exports.retry = retry;
|
|
26
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/client/utils/retry.ts"],"names":[],"mappings":";;;AAAA,8CAA4C;AAErC,KAAK,UAAU,KAAK,CACzB,WAAmB,EACnB,SAA2B,EAC3B,QAAgB,EAChB,YAAoB;IAEpB,OAAO,QAAQ,GAAG,CAAC,EAAE;QACnB,IAAI;YACF,OAAO,MAAM,SAAS,EAAE,CAAA;YACxB,6EAA6E;YAC7E,wDAAwD;SACzD;QAAC,OAAO,KAAK,EAAE;YACd,QAAQ,EAAE,CAAA;YACV,IAAI,QAAQ,GAAG,CAAC,EAAE;gBAChB,OAAO,CAAC,IAAI,CACV,aAAa,WAAW,gBAAgB,QAAQ,sCAAsC,YAAY,EAAE,CACrG,CAAA;gBACD,MAAM,IAAA,qBAAU,EAAC,YAAY,EAAE,IAAI,CAAC,CAAA;aACrC;iBAAM;gBACL,MAAM,KAAK,CAAA;aACZ;SACF;KACF;IACD,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAA;AAChF,CAAC;AAxBD,sBAwBC"}
|