@milaboratories/pl-middle-layer 1.37.3 → 1.37.5
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/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +41 -15
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1751 -1472
- package/dist/index.mjs.map +1 -1
- package/dist/mutator/context_export.d.ts +2 -2
- package/dist/mutator/context_export.d.ts.map +1 -1
- package/dist/mutator/template/render_template.d.ts +2 -2
- package/dist/mutator/template/render_template.d.ts.map +1 -1
- package/dist/network_check/network_check.d.ts +40 -0
- package/dist/network_check/network_check.d.ts.map +1 -0
- package/dist/network_check/network_check.test.d.ts.map +1 -0
- package/dist/network_check/pings.d.ts +32 -0
- package/dist/network_check/pings.d.ts.map +1 -0
- package/dist/network_check/template.d.ts +33 -0
- package/dist/network_check/template.d.ts.map +1 -0
- package/dist/network_check/template.test.d.ts +2 -0
- package/dist/network_check/template.test.d.ts.map +1 -0
- package/dist/network_check/test_utils.d.ts +6 -0
- package/dist/network_check/test_utils.d.ts.map +1 -0
- package/dist/pool/driver.d.ts +10 -1
- package/dist/pool/driver.d.ts.map +1 -1
- package/package.json +9 -9
- package/src/index.ts +1 -1
- package/src/mutator/template/render_template.ts +2 -2
- package/src/{network_check.test.ts → network_check/network_check.test.ts} +3 -3
- package/src/network_check/network_check.ts +369 -0
- package/src/network_check/pings.ts +154 -0
- package/src/network_check/template.test.ts +83 -0
- package/src/network_check/template.ts +330 -0
- package/src/network_check/test_utils.ts +9 -0
- package/src/pool/driver.ts +21 -5
- package/dist/network_check.d.ts +0 -29
- package/dist/network_check.d.ts.map +0 -1
- package/dist/network_check.test.d.ts.map +0 -1
- package/src/network_check.ts +0 -329
- /package/dist/{network_check.test.d.ts → network_check/network_check.test.d.ts} +0 -0
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
import type { FieldId, FieldRef, PlClient, ResourceData } from '@milaboratories/pl-client';
|
|
2
|
+
import { type PlTransaction, ContinuePolling, field, isNotNullResourceId, isNullResourceId, Pl, poll, toGlobalFieldId } from '@milaboratories/pl-client';
|
|
3
|
+
import { createRenderTemplate } from '../mutator/template/render_template';
|
|
4
|
+
import { Templates as SdkTemplates } from '@platforma-sdk/workflow-tengo';
|
|
5
|
+
import type { TemplateSpecAny } from '../model/template_spec';
|
|
6
|
+
import { loadTemplate, prepareTemplateSpec } from '../mutator/template/template_loading';
|
|
7
|
+
import type { ClientDownload, LsDriver } from '@milaboratories/pl-drivers';
|
|
8
|
+
import { ImportFileHandleUploadData, uploadBlob, type ClientUpload } from '@milaboratories/pl-drivers';
|
|
9
|
+
import { notEmpty, type MiLogger } from '@milaboratories/ts-helpers';
|
|
10
|
+
import type { ResourceInfo } from '@milaboratories/pl-tree';
|
|
11
|
+
import { text } from 'node:stream/consumers';
|
|
12
|
+
import path from 'node:path';
|
|
13
|
+
import fs from 'node:fs/promises';
|
|
14
|
+
import os from 'node:os';
|
|
15
|
+
import { randomBytes } from 'node:crypto';
|
|
16
|
+
|
|
17
|
+
export interface TemplateReport {
|
|
18
|
+
ok: boolean;
|
|
19
|
+
message: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Uploads `hello-world` template and checks the output is correct. */
|
|
23
|
+
export async function uploadTemplate(logger: MiLogger, pl: PlClient, name: string): Promise<TemplateReport> {
|
|
24
|
+
try {
|
|
25
|
+
const gotGreeting = await runUploadTemplate(logger, pl, name);
|
|
26
|
+
if (gotGreeting !== `Hello, ${name}`) {
|
|
27
|
+
return { ok: false, message: `Template uploading failed: expected: ${name}, got: ${gotGreeting}` };
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return { ok: true, message: `Template uploading succeeded: ${gotGreeting}` };
|
|
31
|
+
} catch (e: unknown) {
|
|
32
|
+
return { ok: false, message: `Template uploading failed: error occurred: ${e}` };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export async function runUploadTemplate(
|
|
37
|
+
logger: MiLogger,
|
|
38
|
+
pl: PlClient,
|
|
39
|
+
name: string,
|
|
40
|
+
): Promise<string> {
|
|
41
|
+
const greeting = await runTemplate(
|
|
42
|
+
pl,
|
|
43
|
+
SdkTemplates['check_network.upload_template'],
|
|
44
|
+
true,
|
|
45
|
+
(tx) => ({
|
|
46
|
+
name: tx.createValue(Pl.JsonObject, JSON.stringify(name)),
|
|
47
|
+
}),
|
|
48
|
+
['greeting'],
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
try {
|
|
52
|
+
return JSON.parse(notEmpty((await getFieldValue(pl, greeting.greeting)).data?.toString()));
|
|
53
|
+
} finally {
|
|
54
|
+
await deleteFields(pl, Object.values(greeting));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** Uploads a file to the backend and checks the output is a Blob resource. */
|
|
59
|
+
export async function uploadFile(
|
|
60
|
+
logger: MiLogger,
|
|
61
|
+
lsDriver: LsDriver,
|
|
62
|
+
uploadClient: ClientUpload,
|
|
63
|
+
pl: PlClient,
|
|
64
|
+
filePath: string,
|
|
65
|
+
): Promise<TemplateReport> {
|
|
66
|
+
try {
|
|
67
|
+
const gotBlob = await runUploadFile(logger, lsDriver, uploadClient, pl, filePath);
|
|
68
|
+
|
|
69
|
+
if (gotBlob.type.name !== 'Blob') {
|
|
70
|
+
return { ok: false, message: `File uploading failed: ${gotBlob.type.name}` };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return { ok: true, message: `File uploading succeeded: ${gotBlob.type.name}` };
|
|
74
|
+
} catch (e: unknown) {
|
|
75
|
+
return { ok: false, message: `File uploading failed: error occurred: ${e}` };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export async function runUploadFile(
|
|
80
|
+
logger: MiLogger,
|
|
81
|
+
lsDriver: LsDriver,
|
|
82
|
+
uploadClient: ClientUpload,
|
|
83
|
+
pl: PlClient,
|
|
84
|
+
filePath: string,
|
|
85
|
+
): Promise<ResourceInfo> {
|
|
86
|
+
const handle = await lsDriver.getLocalFileHandle(filePath);
|
|
87
|
+
const result = await runTemplate(
|
|
88
|
+
pl,
|
|
89
|
+
SdkTemplates['check_network.upload_blob'],
|
|
90
|
+
true,
|
|
91
|
+
(tx) => ({
|
|
92
|
+
file: tx.createValue(Pl.JsonObject, JSON.stringify(handle)),
|
|
93
|
+
}),
|
|
94
|
+
['progress', 'file'],
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
try {
|
|
98
|
+
const progress = await getFieldValue(pl, result.progress);
|
|
99
|
+
|
|
100
|
+
await uploadBlob(
|
|
101
|
+
logger,
|
|
102
|
+
uploadClient,
|
|
103
|
+
progress,
|
|
104
|
+
ImportFileHandleUploadData.parse(JSON.parse(notEmpty(progress.data?.toString()))),
|
|
105
|
+
() => false,
|
|
106
|
+
{
|
|
107
|
+
nPartsWithThisUploadSpeed: 10,
|
|
108
|
+
nPartsToIncreaseUpload: 10,
|
|
109
|
+
currentSpeed: 10,
|
|
110
|
+
maxSpeed: 10,
|
|
111
|
+
},
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
return await getFieldValue(pl, result.file);
|
|
115
|
+
} finally {
|
|
116
|
+
await deleteFields(pl, Object.values(result));
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** Uploads a file to the backend and then tries to download it back. */
|
|
121
|
+
export async function downloadFile(
|
|
122
|
+
logger: MiLogger,
|
|
123
|
+
pl: PlClient,
|
|
124
|
+
lsDriver: LsDriver,
|
|
125
|
+
uploadClient: ClientUpload,
|
|
126
|
+
downloadClient: ClientDownload,
|
|
127
|
+
filePath: string,
|
|
128
|
+
fileContent: string,
|
|
129
|
+
): Promise<TemplateReport> {
|
|
130
|
+
try {
|
|
131
|
+
const gotFileContent = await runDownloadFile(logger, pl, lsDriver, uploadClient, downloadClient, filePath);
|
|
132
|
+
|
|
133
|
+
if (gotFileContent !== fileContent) {
|
|
134
|
+
return { ok: false, message: `File downloading failed: expected: ${fileContent}, got: ${gotFileContent}` };
|
|
135
|
+
}
|
|
136
|
+
return { ok: true, message: `File downloading succeeded: ${gotFileContent}` };
|
|
137
|
+
} catch (e: unknown) {
|
|
138
|
+
return { ok: false, message: `File downloading failed: error occurred: ${e}` };
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export async function runDownloadFile(
|
|
143
|
+
logger: MiLogger,
|
|
144
|
+
pl: PlClient,
|
|
145
|
+
lsDriver: LsDriver,
|
|
146
|
+
uploadClient: ClientUpload,
|
|
147
|
+
downloadClient: ClientDownload,
|
|
148
|
+
filePath: string,
|
|
149
|
+
) {
|
|
150
|
+
const handle = await lsDriver.getLocalFileHandle(filePath);
|
|
151
|
+
|
|
152
|
+
const outputs = await runTemplate(
|
|
153
|
+
pl,
|
|
154
|
+
SdkTemplates['check_network.download_blob'],
|
|
155
|
+
true,
|
|
156
|
+
(tx) => ({ file: tx.createValue(Pl.JsonObject, JSON.stringify(handle)) }),
|
|
157
|
+
['progress', 'file'],
|
|
158
|
+
);
|
|
159
|
+
|
|
160
|
+
try {
|
|
161
|
+
const progress = await getFieldValue(pl, outputs.progress);
|
|
162
|
+
|
|
163
|
+
await uploadBlob(
|
|
164
|
+
logger,
|
|
165
|
+
uploadClient,
|
|
166
|
+
progress,
|
|
167
|
+
ImportFileHandleUploadData.parse(JSON.parse(notEmpty(progress.data?.toString()))),
|
|
168
|
+
() => false,
|
|
169
|
+
{
|
|
170
|
+
nPartsWithThisUploadSpeed: 1,
|
|
171
|
+
nPartsToIncreaseUpload: 1,
|
|
172
|
+
currentSpeed: 1,
|
|
173
|
+
maxSpeed: 1,
|
|
174
|
+
},
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
const fileInfo = await getFieldValue(pl, outputs.file);
|
|
178
|
+
const { content } = await downloadClient.downloadBlob(fileInfo);
|
|
179
|
+
|
|
180
|
+
return await text(content);
|
|
181
|
+
} finally {
|
|
182
|
+
await deleteFields(pl, Object.values(outputs));
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/** Runs Go's hello-world binary. */
|
|
187
|
+
export async function softwareCheck(pl: PlClient): Promise<TemplateReport> {
|
|
188
|
+
try {
|
|
189
|
+
const gotGreeting = await runSoftware(pl);
|
|
190
|
+
|
|
191
|
+
if (gotGreeting !== 'Hello from go binary\n') {
|
|
192
|
+
return { ok: false, message: `Software check failed: got: ${gotGreeting}` };
|
|
193
|
+
}
|
|
194
|
+
return { ok: true, message: `Software check succeeded: ${gotGreeting}` };
|
|
195
|
+
} catch (e: unknown) {
|
|
196
|
+
return { ok: false, message: `Software check failed: error occurred: ${e}` };
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
export async function runSoftware(pl: PlClient): Promise<string> {
|
|
201
|
+
const result = await runTemplate(
|
|
202
|
+
pl,
|
|
203
|
+
SdkTemplates['check_network.run_hello_world'],
|
|
204
|
+
true,
|
|
205
|
+
(_: PlTransaction) => ({}),
|
|
206
|
+
['greeting'],
|
|
207
|
+
);
|
|
208
|
+
|
|
209
|
+
try {
|
|
210
|
+
return notEmpty((await getFieldValue(pl, result.greeting)).data?.toString());
|
|
211
|
+
} finally {
|
|
212
|
+
await deleteFields(pl, Object.values(result));
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/** Runs Python hello-world. */
|
|
217
|
+
export async function pythonSoftware(pl: PlClient, name: string): Promise<TemplateReport> {
|
|
218
|
+
try {
|
|
219
|
+
const gotGreeting = await runPythonSoftware(pl, name);
|
|
220
|
+
|
|
221
|
+
if (gotGreeting !== `Hello, ${name}!\n`) {
|
|
222
|
+
return { ok: false, message: `Python software check failed: got: ${gotGreeting}` };
|
|
223
|
+
}
|
|
224
|
+
return { ok: true, message: `Python software check succeeded: ${gotGreeting}` };
|
|
225
|
+
} catch (e: unknown) {
|
|
226
|
+
return { ok: false, message: `Python software check failed: error occurred: ${e}` };
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export async function runPythonSoftware(pl: PlClient, name: string): Promise<string> {
|
|
231
|
+
const result = await runTemplate(
|
|
232
|
+
pl,
|
|
233
|
+
SdkTemplates['check_network.run_hello_world_py'],
|
|
234
|
+
true,
|
|
235
|
+
(tx) => ({ name: tx.createValue(Pl.JsonObject, JSON.stringify(name)) }),
|
|
236
|
+
['greeting'],
|
|
237
|
+
);
|
|
238
|
+
|
|
239
|
+
try {
|
|
240
|
+
return notEmpty((await getFieldValue(pl, result.greeting)).data?.toString());
|
|
241
|
+
} finally {
|
|
242
|
+
await deleteFields(pl, Object.values(result));
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/** Creates a big temporary file with random content. */
|
|
247
|
+
export async function createBigTempFile(): Promise<{ filePath: string }> {
|
|
248
|
+
const filePath = path.join(os.tmpdir(), `check-network-big-temp-${Date.now()}.bin`);
|
|
249
|
+
const fileSize = 20 * 1024 * 1024; // 20 MiB
|
|
250
|
+
|
|
251
|
+
const fileContent = randomBytes(fileSize);
|
|
252
|
+
|
|
253
|
+
await fs.appendFile(filePath, fileContent);
|
|
254
|
+
|
|
255
|
+
return { filePath };
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/** Creates a temporarly file we could use for uploading and downloading. */
|
|
259
|
+
export async function createTempFile(): Promise<{ filePath: string; fileContent: string }> {
|
|
260
|
+
const filePath = path.join(os.tmpdir(), `check-network-temp-${Date.now()}.txt`);
|
|
261
|
+
|
|
262
|
+
const fileContent = 'Hello, world! ' + new Date().toISOString();
|
|
263
|
+
await fs.writeFile(filePath, fileContent);
|
|
264
|
+
|
|
265
|
+
return { filePath, fileContent };
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/** Creates a template and RenderTemplate resources, gets all resources from outputs.
|
|
269
|
+
* Throws a error if any of the outputs failed.
|
|
270
|
+
*/
|
|
271
|
+
async function runTemplate(
|
|
272
|
+
client: PlClient,
|
|
273
|
+
tpl: TemplateSpecAny,
|
|
274
|
+
ephemeral: boolean,
|
|
275
|
+
inputs: (tx: PlTransaction) => Pl.PlRecord,
|
|
276
|
+
outputs: string[],
|
|
277
|
+
): Promise<Record<string, FieldId>> {
|
|
278
|
+
return await client.withWriteTx('TemplateRender', async (tx) => {
|
|
279
|
+
const preparedTemplate = await prepareTemplateSpec(tpl);
|
|
280
|
+
const tplResource = loadTemplate(tx, preparedTemplate);
|
|
281
|
+
|
|
282
|
+
const outputFields: Record<string, FieldRef> = createRenderTemplate(
|
|
283
|
+
tx, tplResource, ephemeral, inputs(tx), outputs,
|
|
284
|
+
);
|
|
285
|
+
|
|
286
|
+
const outputsIds: Record<string, FieldId> = {};
|
|
287
|
+
|
|
288
|
+
for (const output of outputs) {
|
|
289
|
+
const fieldRef = field(client.clientRoot, output);
|
|
290
|
+
tx.createField(fieldRef, 'Dynamic', outputFields[output]);
|
|
291
|
+
outputsIds[output] = await toGlobalFieldId(fieldRef);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
await tx.commit();
|
|
295
|
+
|
|
296
|
+
return outputsIds;
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/** Gets a resource from field's value or throws a error. */
|
|
301
|
+
async function getFieldValue(
|
|
302
|
+
client: PlClient,
|
|
303
|
+
fieldId: FieldId,
|
|
304
|
+
): Promise<ResourceData> {
|
|
305
|
+
// We could also do polling with pl-tree, but it seemed like an overkill,
|
|
306
|
+
// that's why we have a simple polling here.
|
|
307
|
+
|
|
308
|
+
return await poll(client, async (tx) => {
|
|
309
|
+
const field = await tx.tx.getField(fieldId);
|
|
310
|
+
if (isNotNullResourceId(field.error)) {
|
|
311
|
+
const err = await tx.tx.getResourceData(field.error, true);
|
|
312
|
+
throw new Error(`getFieldValue of "${fieldId.fieldName}" field failed: ${err.data}`);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
if (isNullResourceId(field.value)) {
|
|
316
|
+
throw new ContinuePolling();
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
return await tx.tx.getResourceData(field.value, true);
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
async function deleteFields(client: PlClient, fieldIds: FieldId[]) {
|
|
324
|
+
await client.withWriteTx('DeleteFields', async (tx) => {
|
|
325
|
+
for (const fieldId of fieldIds) {
|
|
326
|
+
tx.resetField(fieldId);
|
|
327
|
+
}
|
|
328
|
+
await tx.commit();
|
|
329
|
+
});
|
|
330
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function testCredentials() {
|
|
2
|
+
expect(process.env.PL_ADDRESS).not.toBeUndefined();
|
|
3
|
+
|
|
4
|
+
return {
|
|
5
|
+
plEndpoint: process.env.PL_ADDRESS!,
|
|
6
|
+
plUser: process.env.PL_TEST_USER, // maybe undefined
|
|
7
|
+
plPassword: process.env.PL_TEST_PASSWORD, // maybe undefined
|
|
8
|
+
};
|
|
9
|
+
}
|
package/src/pool/driver.ts
CHANGED
|
@@ -84,7 +84,7 @@ function migrateFilters(filters: PTableRecordFilter[]): PTableRecordFilter[] {
|
|
|
84
84
|
const bigintReplacer = (_: string, v: unknown) => (typeof v === 'bigint' ? v.toString() : v);
|
|
85
85
|
|
|
86
86
|
class PFrameHolder implements PFrameInternal.PFrameDataSource, Disposable {
|
|
87
|
-
public readonly pFrame: PFrameInternal.
|
|
87
|
+
public readonly pFrame: PFrameInternal.PFrameV5;
|
|
88
88
|
private readonly blobIdToResource = new Map<string, ResourceInfo>();
|
|
89
89
|
private readonly blobHandleComputables = new Map<
|
|
90
90
|
string,
|
|
@@ -174,7 +174,7 @@ class PFrameHolder implements PFrameInternal.PFrameDataSource, Disposable {
|
|
|
174
174
|
|
|
175
175
|
class PTableHolder implements Disposable {
|
|
176
176
|
constructor(
|
|
177
|
-
public readonly table: Promise<PFrameInternal.
|
|
177
|
+
public readonly table: Promise<PFrameInternal.PTableV4>,
|
|
178
178
|
) {}
|
|
179
179
|
|
|
180
180
|
[Symbol.dispose](): void {
|
|
@@ -219,6 +219,21 @@ export interface InternalPFrameDriver extends SdkPFrameDriver {
|
|
|
219
219
|
request: UniqueValuesRequest,
|
|
220
220
|
signal?: AbortSignal
|
|
221
221
|
): Promise<UniqueValuesResponse>;
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Retrieve the data from the table. To retrieve only data required, it can be
|
|
225
|
+
* sliced both horizontally ({@link columnIndices}) and vertically
|
|
226
|
+
* ({@link range}).
|
|
227
|
+
*
|
|
228
|
+
* @param columnIndices unified indices of columns to be retrieved
|
|
229
|
+
* @param range optionally limit the range of records to retrieve
|
|
230
|
+
* */
|
|
231
|
+
getData(
|
|
232
|
+
handle: PTableHandle,
|
|
233
|
+
columnIndices: number[],
|
|
234
|
+
range: TableRange | undefined,
|
|
235
|
+
signal?: AbortSignal,
|
|
236
|
+
): Promise<PTableVector[]>;
|
|
222
237
|
}
|
|
223
238
|
|
|
224
239
|
export class PFrameDriver implements InternalPFrameDriver {
|
|
@@ -421,7 +436,7 @@ export class PFrameDriver implements InternalPFrameDriver {
|
|
|
421
436
|
}).then(async (table) => {
|
|
422
437
|
try {
|
|
423
438
|
const spec = table.getSpec();
|
|
424
|
-
const data = await this.concurrencyLimiter.run(async () => await table.getData([...spec.keys()]));
|
|
439
|
+
const data = await this.concurrencyLimiter.run(async () => await table.getData([...spec.keys()], undefined, signal));
|
|
425
440
|
return spec.map((spec, i) => ({
|
|
426
441
|
spec: spec,
|
|
427
442
|
data: data[i],
|
|
@@ -467,10 +482,11 @@ export class PFrameDriver implements InternalPFrameDriver {
|
|
|
467
482
|
public async getData(
|
|
468
483
|
handle: PTableHandle,
|
|
469
484
|
columnIndices: number[],
|
|
470
|
-
range
|
|
485
|
+
range: TableRange | undefined,
|
|
486
|
+
signal?: AbortSignal,
|
|
471
487
|
): Promise<PTableVector[]> {
|
|
472
488
|
const pTable = await this.pTables.getByKey(handle).table;
|
|
473
|
-
return await this.concurrencyLimiter.run(async () => await pTable.getData(columnIndices, range));
|
|
489
|
+
return await this.concurrencyLimiter.run(async () => await pTable.getData(columnIndices, range, signal));
|
|
474
490
|
}
|
|
475
491
|
}
|
|
476
492
|
|
package/dist/network_check.d.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/** A utility to check network problems and gather statistics.
|
|
2
|
-
* It's useful when we cannot connect to the server of a company
|
|
3
|
-
* because of security reasons,
|
|
4
|
-
* but they can send us and their DevOps team this report. */
|
|
5
|
-
export interface CheckNetworkOpts {
|
|
6
|
-
/** Platforma Backend pings options. */
|
|
7
|
-
pingCheckDurationMs: number;
|
|
8
|
-
pingTimeoutMs: number;
|
|
9
|
-
maxPingsPerSecond: number;
|
|
10
|
-
/** An options for CDN and block registry. */
|
|
11
|
-
httpTimeoutMs: number;
|
|
12
|
-
/** Block registry pings options. */
|
|
13
|
-
blockRegistryDurationMs: number;
|
|
14
|
-
maxRegistryChecksPerSecond: number;
|
|
15
|
-
blockRegistryUrl: string;
|
|
16
|
-
blockGARegistryUrl: string;
|
|
17
|
-
blockOverviewPath: string;
|
|
18
|
-
blockUiPath: string;
|
|
19
|
-
/** CDN for auto-update pings options. */
|
|
20
|
-
autoUpdateCdnDurationMs: number;
|
|
21
|
-
maxAutoUpdateCdnChecksPerSecond: number;
|
|
22
|
-
autoUpdateCdnUrl: string;
|
|
23
|
-
bodyLimit: number;
|
|
24
|
-
}
|
|
25
|
-
/** Checks connectivity to Platforma Backend, to block registry
|
|
26
|
-
* and to auto-update CDN,
|
|
27
|
-
* and generates a string report. */
|
|
28
|
-
export declare function checkNetwork(plCredentials: string, optsOverrides?: Partial<CheckNetworkOpts>): Promise<string>;
|
|
29
|
-
//# sourceMappingURL=network_check.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"network_check.d.ts","sourceRoot":"","sources":["../src/network_check.ts"],"names":[],"mappings":"AAAA;;;6DAG6D;AAqB7D,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAE1B,6CAA6C;IAC7C,aAAa,EAAE,MAAM,CAAC;IAEtB,oCAAoC;IACpC,uBAAuB,EAAE,MAAM,CAAC;IAChC,0BAA0B,EAAE,MAAM,CAAC;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IAEpB,yCAAyC;IACzC,uBAAuB,EAAE,MAAM,CAAC;IAChC,+BAA+B,EAAE,MAAM,CAAC;IACxC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAwCD;;oCAEoC;AACpC,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,EACrB,aAAa,GAAE,OAAO,CAAC,gBAAgB,CAAM,GAC5C,OAAO,CAAC,MAAM,CAAC,CAmGjB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"network_check.test.d.ts","sourceRoot":"","sources":["../src/network_check.test.ts"],"names":[],"mappings":""}
|