@azure/search-documents 11.3.0-beta.5 → 11.3.0-beta.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/CHANGELOG.md +11 -0
- package/dist/index.js +660 -464
- package/dist/index.js.map +1 -1
- package/dist-esm/src/constants.js +1 -1
- package/dist-esm/src/constants.js.map +1 -1
- package/dist-esm/src/generated/data/models/index.js +2 -2
- package/dist-esm/src/generated/data/models/index.js.map +1 -1
- package/dist-esm/src/generated/data/searchClientContext.js +1 -1
- package/dist-esm/src/generated/data/searchClientContext.js.map +1 -1
- package/dist-esm/src/generated/service/models/index.js +2 -0
- package/dist-esm/src/generated/service/models/index.js.map +1 -1
- package/dist-esm/src/generated/service/models/mappers.js +47 -0
- package/dist-esm/src/generated/service/models/mappers.js.map +1 -1
- package/dist-esm/src/generated/service/searchServiceClientContext.js +1 -1
- package/dist-esm/src/generated/service/searchServiceClientContext.js.map +1 -1
- package/dist-esm/src/geographyPoint.js +1 -1
- package/dist-esm/src/geographyPoint.js.map +1 -1
- package/dist-esm/src/index.js +4 -4
- package/dist-esm/src/index.js.map +1 -1
- package/dist-esm/src/indexDocumentsBatch.js +1 -1
- package/dist-esm/src/indexDocumentsBatch.js.map +1 -1
- package/dist-esm/src/indexModels.js.map +1 -1
- package/dist-esm/src/odataMetadataPolicy.js +1 -1
- package/dist-esm/src/odataMetadataPolicy.js.map +1 -1
- package/dist-esm/src/searchApiKeyCredentialPolicy.js +1 -1
- package/dist-esm/src/searchApiKeyCredentialPolicy.js.map +1 -1
- package/dist-esm/src/searchClient.js +39 -27
- package/dist-esm/src/searchClient.js.map +1 -1
- package/dist-esm/src/searchIndexClient.js +38 -26
- package/dist-esm/src/searchIndexClient.js.map +1 -1
- package/dist-esm/src/searchIndexerClient.js +44 -32
- package/dist-esm/src/searchIndexerClient.js.map +1 -1
- package/dist-esm/src/searchIndexingBufferedSender.js +10 -10
- package/dist-esm/src/searchIndexingBufferedSender.js.map +1 -1
- package/dist-esm/src/serialization.js +5 -5
- package/dist-esm/src/serialization.js.map +1 -1
- package/dist-esm/src/serviceModels.js.map +1 -1
- package/dist-esm/src/serviceUtils.js +23 -18
- package/dist-esm/src/serviceUtils.js.map +1 -1
- package/dist-esm/src/synonymMapHelper.js +1 -1
- package/dist-esm/src/synonymMapHelper.js.map +1 -1
- package/dist-esm/src/tracing.js +1 -1
- package/dist-esm/src/tracing.js.map +1 -1
- package/package.json +13 -25
- package/types/search-documents.d.ts +60 -9
|
@@ -36,7 +36,12 @@ export class SearchIndexerClient {
|
|
|
36
36
|
/**
|
|
37
37
|
* The API version to use when communicating with the service.
|
|
38
38
|
*/
|
|
39
|
-
this.
|
|
39
|
+
this.serviceVersion = utils.defaultServiceVersion;
|
|
40
|
+
/**
|
|
41
|
+
* The API version to use when communicating with the service.
|
|
42
|
+
* @deprecated use {@Link serviceVersion} instead
|
|
43
|
+
*/
|
|
44
|
+
this.apiVersion = utils.defaultServiceVersion;
|
|
40
45
|
this.endpoint = endpoint;
|
|
41
46
|
const libInfo = `azsdk-js-search-documents/${SDK_VERSION}`;
|
|
42
47
|
if (!options.userAgentOptions) {
|
|
@@ -57,18 +62,25 @@ export class SearchIndexerClient {
|
|
|
57
62
|
"OData-MaxVersion",
|
|
58
63
|
"OData-Version",
|
|
59
64
|
"Prefer",
|
|
60
|
-
"throttle-reason"
|
|
61
|
-
]
|
|
62
|
-
}
|
|
65
|
+
"throttle-reason",
|
|
66
|
+
],
|
|
67
|
+
},
|
|
63
68
|
});
|
|
64
|
-
let apiVersion = this.apiVersion;
|
|
65
69
|
if (options.apiVersion) {
|
|
66
|
-
if (!
|
|
70
|
+
if (!utils.serviceVersions.includes(options.apiVersion)) {
|
|
67
71
|
throw new Error(`Invalid Api Version: ${options.apiVersion}`);
|
|
68
72
|
}
|
|
69
|
-
|
|
73
|
+
this.serviceVersion = options.apiVersion;
|
|
74
|
+
this.apiVersion = options.apiVersion;
|
|
75
|
+
}
|
|
76
|
+
if (options.serviceVersion) {
|
|
77
|
+
if (!utils.serviceVersions.includes(options.serviceVersion)) {
|
|
78
|
+
throw new Error(`Invalid Service Version: ${options.serviceVersion}`);
|
|
79
|
+
}
|
|
80
|
+
this.serviceVersion = options.serviceVersion;
|
|
81
|
+
this.apiVersion = options.serviceVersion;
|
|
70
82
|
}
|
|
71
|
-
this.client = new GeneratedClient(this.endpoint,
|
|
83
|
+
this.client = new GeneratedClient(this.endpoint, this.serviceVersion, internalClientPipelineOptions);
|
|
72
84
|
if (isTokenCredential(credential)) {
|
|
73
85
|
this.client.pipeline.addPolicy(bearerTokenAuthenticationPolicy({ credential, scopes: utils.DEFAULT_SEARCH_SCOPE }));
|
|
74
86
|
}
|
|
@@ -90,7 +102,7 @@ export class SearchIndexerClient {
|
|
|
90
102
|
catch (e) {
|
|
91
103
|
span.setStatus({
|
|
92
104
|
code: SpanStatusCode.ERROR,
|
|
93
|
-
message: e.message
|
|
105
|
+
message: e.message,
|
|
94
106
|
});
|
|
95
107
|
throw e;
|
|
96
108
|
}
|
|
@@ -111,7 +123,7 @@ export class SearchIndexerClient {
|
|
|
111
123
|
catch (e) {
|
|
112
124
|
span.setStatus({
|
|
113
125
|
code: SpanStatusCode.ERROR,
|
|
114
|
-
message: e.message
|
|
126
|
+
message: e.message,
|
|
115
127
|
});
|
|
116
128
|
throw e;
|
|
117
129
|
}
|
|
@@ -132,7 +144,7 @@ export class SearchIndexerClient {
|
|
|
132
144
|
catch (e) {
|
|
133
145
|
span.setStatus({
|
|
134
146
|
code: SpanStatusCode.ERROR,
|
|
135
|
-
message: e.message
|
|
147
|
+
message: e.message,
|
|
136
148
|
});
|
|
137
149
|
throw e;
|
|
138
150
|
}
|
|
@@ -153,7 +165,7 @@ export class SearchIndexerClient {
|
|
|
153
165
|
catch (e) {
|
|
154
166
|
span.setStatus({
|
|
155
167
|
code: SpanStatusCode.ERROR,
|
|
156
|
-
message: e.message
|
|
168
|
+
message: e.message,
|
|
157
169
|
});
|
|
158
170
|
throw e;
|
|
159
171
|
}
|
|
@@ -174,7 +186,7 @@ export class SearchIndexerClient {
|
|
|
174
186
|
catch (e) {
|
|
175
187
|
span.setStatus({
|
|
176
188
|
code: SpanStatusCode.ERROR,
|
|
177
|
-
message: e.message
|
|
189
|
+
message: e.message,
|
|
178
190
|
});
|
|
179
191
|
throw e;
|
|
180
192
|
}
|
|
@@ -195,7 +207,7 @@ export class SearchIndexerClient {
|
|
|
195
207
|
catch (e) {
|
|
196
208
|
span.setStatus({
|
|
197
209
|
code: SpanStatusCode.ERROR,
|
|
198
|
-
message: e.message
|
|
210
|
+
message: e.message,
|
|
199
211
|
});
|
|
200
212
|
throw e;
|
|
201
213
|
}
|
|
@@ -217,7 +229,7 @@ export class SearchIndexerClient {
|
|
|
217
229
|
catch (e) {
|
|
218
230
|
span.setStatus({
|
|
219
231
|
code: SpanStatusCode.ERROR,
|
|
220
|
-
message: e.message
|
|
232
|
+
message: e.message,
|
|
221
233
|
});
|
|
222
234
|
throw e;
|
|
223
235
|
}
|
|
@@ -239,7 +251,7 @@ export class SearchIndexerClient {
|
|
|
239
251
|
catch (e) {
|
|
240
252
|
span.setStatus({
|
|
241
253
|
code: SpanStatusCode.ERROR,
|
|
242
|
-
message: e.message
|
|
254
|
+
message: e.message,
|
|
243
255
|
});
|
|
244
256
|
throw e;
|
|
245
257
|
}
|
|
@@ -261,7 +273,7 @@ export class SearchIndexerClient {
|
|
|
261
273
|
catch (e) {
|
|
262
274
|
span.setStatus({
|
|
263
275
|
code: SpanStatusCode.ERROR,
|
|
264
|
-
message: e.message
|
|
276
|
+
message: e.message,
|
|
265
277
|
});
|
|
266
278
|
throw e;
|
|
267
279
|
}
|
|
@@ -283,7 +295,7 @@ export class SearchIndexerClient {
|
|
|
283
295
|
catch (e) {
|
|
284
296
|
span.setStatus({
|
|
285
297
|
code: SpanStatusCode.ERROR,
|
|
286
|
-
message: e.message
|
|
298
|
+
message: e.message,
|
|
287
299
|
});
|
|
288
300
|
throw e;
|
|
289
301
|
}
|
|
@@ -305,7 +317,7 @@ export class SearchIndexerClient {
|
|
|
305
317
|
catch (e) {
|
|
306
318
|
span.setStatus({
|
|
307
319
|
code: SpanStatusCode.ERROR,
|
|
308
|
-
message: e.message
|
|
320
|
+
message: e.message,
|
|
309
321
|
});
|
|
310
322
|
throw e;
|
|
311
323
|
}
|
|
@@ -327,7 +339,7 @@ export class SearchIndexerClient {
|
|
|
327
339
|
catch (e) {
|
|
328
340
|
span.setStatus({
|
|
329
341
|
code: SpanStatusCode.ERROR,
|
|
330
|
-
message: e.message
|
|
342
|
+
message: e.message,
|
|
331
343
|
});
|
|
332
344
|
throw e;
|
|
333
345
|
}
|
|
@@ -350,7 +362,7 @@ export class SearchIndexerClient {
|
|
|
350
362
|
catch (e) {
|
|
351
363
|
span.setStatus({
|
|
352
364
|
code: SpanStatusCode.ERROR,
|
|
353
|
-
message: e.message
|
|
365
|
+
message: e.message,
|
|
354
366
|
});
|
|
355
367
|
throw e;
|
|
356
368
|
}
|
|
@@ -373,7 +385,7 @@ export class SearchIndexerClient {
|
|
|
373
385
|
catch (e) {
|
|
374
386
|
span.setStatus({
|
|
375
387
|
code: SpanStatusCode.ERROR,
|
|
376
|
-
message: e.message
|
|
388
|
+
message: e.message,
|
|
377
389
|
});
|
|
378
390
|
throw e;
|
|
379
391
|
}
|
|
@@ -396,7 +408,7 @@ export class SearchIndexerClient {
|
|
|
396
408
|
catch (e) {
|
|
397
409
|
span.setStatus({
|
|
398
410
|
code: SpanStatusCode.ERROR,
|
|
399
|
-
message: e.message
|
|
411
|
+
message: e.message,
|
|
400
412
|
});
|
|
401
413
|
throw e;
|
|
402
414
|
}
|
|
@@ -423,7 +435,7 @@ export class SearchIndexerClient {
|
|
|
423
435
|
catch (e) {
|
|
424
436
|
span.setStatus({
|
|
425
437
|
code: SpanStatusCode.ERROR,
|
|
426
|
-
message: e.message
|
|
438
|
+
message: e.message,
|
|
427
439
|
});
|
|
428
440
|
throw e;
|
|
429
441
|
}
|
|
@@ -450,7 +462,7 @@ export class SearchIndexerClient {
|
|
|
450
462
|
catch (e) {
|
|
451
463
|
span.setStatus({
|
|
452
464
|
code: SpanStatusCode.ERROR,
|
|
453
|
-
message: e.message
|
|
465
|
+
message: e.message,
|
|
454
466
|
});
|
|
455
467
|
throw e;
|
|
456
468
|
}
|
|
@@ -477,7 +489,7 @@ export class SearchIndexerClient {
|
|
|
477
489
|
catch (e) {
|
|
478
490
|
span.setStatus({
|
|
479
491
|
code: SpanStatusCode.ERROR,
|
|
480
|
-
message: e.message
|
|
492
|
+
message: e.message,
|
|
481
493
|
});
|
|
482
494
|
throw e;
|
|
483
495
|
}
|
|
@@ -499,7 +511,7 @@ export class SearchIndexerClient {
|
|
|
499
511
|
catch (e) {
|
|
500
512
|
span.setStatus({
|
|
501
513
|
code: SpanStatusCode.ERROR,
|
|
502
|
-
message: e.message
|
|
514
|
+
message: e.message,
|
|
503
515
|
});
|
|
504
516
|
throw e;
|
|
505
517
|
}
|
|
@@ -520,7 +532,7 @@ export class SearchIndexerClient {
|
|
|
520
532
|
catch (e) {
|
|
521
533
|
span.setStatus({
|
|
522
534
|
code: SpanStatusCode.ERROR,
|
|
523
|
-
message: e.message
|
|
535
|
+
message: e.message,
|
|
524
536
|
});
|
|
525
537
|
throw e;
|
|
526
538
|
}
|
|
@@ -541,7 +553,7 @@ export class SearchIndexerClient {
|
|
|
541
553
|
catch (e) {
|
|
542
554
|
span.setStatus({
|
|
543
555
|
code: SpanStatusCode.ERROR,
|
|
544
|
-
message: e.message
|
|
556
|
+
message: e.message,
|
|
545
557
|
});
|
|
546
558
|
throw e;
|
|
547
559
|
}
|
|
@@ -559,13 +571,13 @@ export class SearchIndexerClient {
|
|
|
559
571
|
try {
|
|
560
572
|
await this.client.indexers.resetDocs(indexerName, Object.assign(Object.assign({}, updatedOptions), { keysOrIds: {
|
|
561
573
|
documentKeys: updatedOptions.documentKeys,
|
|
562
|
-
datasourceDocumentIds: updatedOptions.datasourceDocumentIds
|
|
574
|
+
datasourceDocumentIds: updatedOptions.datasourceDocumentIds,
|
|
563
575
|
} }));
|
|
564
576
|
}
|
|
565
577
|
catch (e) {
|
|
566
578
|
span.setStatus({
|
|
567
579
|
code: SpanStatusCode.ERROR,
|
|
568
|
-
message: e.message
|
|
580
|
+
message: e.message,
|
|
569
581
|
});
|
|
570
582
|
throw e;
|
|
571
583
|
}
|
|
@@ -587,7 +599,7 @@ export class SearchIndexerClient {
|
|
|
587
599
|
catch (e) {
|
|
588
600
|
span.setStatus({
|
|
589
601
|
code: SpanStatusCode.ERROR,
|
|
590
|
-
message: e.message
|
|
602
|
+
message: e.message,
|
|
591
603
|
});
|
|
592
604
|
throw e;
|
|
593
605
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchIndexerClient.js","sourceRoot":"","sources":["../../src/searchIndexerClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { KeyCredential, TokenCredential, isTokenCredential } from \"@azure/core-auth\";\nimport { CommonClientOptions, InternalClientPipelineOptions } from \"@azure/core-client\";\nimport { bearerTokenAuthenticationPolicy } from \"@azure/core-rest-pipeline\";\nimport { SpanStatusCode } from \"@azure/core-tracing\";\nimport { SDK_VERSION } from \"./constants\";\nimport { SearchIndexerStatus } from \"./generated/service/models\";\nimport { SearchServiceClient as GeneratedClient } from \"./generated/service/searchServiceClient\";\nimport { logger } from \"./logger\";\nimport { createSearchApiKeyCredentialPolicy } from \"./searchApiKeyCredentialPolicy\";\nimport {\n CreateOrUpdateSkillsetOptions,\n CreateSkillsetOptions,\n DeleteSkillsetOptions,\n GetSkillSetOptions,\n ListSkillsetsOptions,\n SearchIndexerSkillset,\n ListIndexersOptions,\n CreateIndexerOptions,\n GetIndexerOptions,\n CreateorUpdateIndexerOptions,\n DeleteIndexerOptions,\n GetIndexerStatusOptions,\n ResetIndexerOptions,\n RunIndexerOptions,\n ListDataSourceConnectionsOptions,\n SearchIndexer,\n SearchIndexerDataSourceConnection,\n CreateDataSourceConnectionOptions,\n DeleteDataSourceConnectionOptions,\n GetDataSourceConnectionOptions,\n CreateorUpdateDataSourceConnectionOptions,\n ResetDocumentsOptions,\n ResetSkillsOptions\n} from \"./serviceModels\";\nimport * as utils from \"./serviceUtils\";\nimport { createSpan } from \"./tracing\";\nimport { createOdataMetadataPolicy } from \"./odataMetadataPolicy\";\n\n/**\n * Client options used to configure Cognitive Search API requests.\n */\nexport interface SearchIndexerClientOptions extends CommonClientOptions {\n /**\n * The API version to use when communicating with the service.\n */\n apiVersion?: string;\n}\n\n/**\n * Class to perform operations to manage\n * (create, update, list/delete)\n * indexers, datasources & skillsets.\n */\nexport class SearchIndexerClient {\n /**\n * The API version to use when communicating with the service.\n */\n public readonly apiVersion: string = \"2020-06-30-Preview\";\n\n /**\n * The endpoint of the search service\n */\n public readonly endpoint: string;\n\n /**\n * @internal\n * @hidden\n * A reference to the auto-generated SearchServiceClient\n */\n private readonly client: GeneratedClient;\n\n /**\n * Creates an instance of SearchIndexerClient.\n *\n * Example usage:\n * ```ts\n * const { SearchIndexerClient, AzureKeyCredential } = require(\"@azure/search-documents\");\n *\n * const client = new SearchIndexerClient(\n * \"<endpoint>\",\n * new AzureKeyCredential(\"<Admin Key>\");\n * );\n * ```\n * @param endpoint - The endpoint of the search service\n * @param credential - Used to authenticate requests to the service.\n * @param options - Used to configure the Search client.\n */\n constructor(\n endpoint: string,\n credential: KeyCredential | TokenCredential,\n options: SearchIndexerClientOptions = {}\n ) {\n this.endpoint = endpoint;\n\n const libInfo = `azsdk-js-search-documents/${SDK_VERSION}`;\n if (!options.userAgentOptions) {\n options.userAgentOptions = {};\n }\n if (options.userAgentOptions.userAgentPrefix) {\n options.userAgentOptions.userAgentPrefix = `${options.userAgentOptions.userAgentPrefix} ${libInfo}`;\n } else {\n options.userAgentOptions.userAgentPrefix = libInfo;\n }\n\n const internalClientPipelineOptions: InternalClientPipelineOptions = {\n ...options,\n ...{\n loggingOptions: {\n logger: logger.info,\n additionalAllowedHeaderNames: [\n \"elapsed-time\",\n \"Location\",\n \"OData-MaxVersion\",\n \"OData-Version\",\n \"Prefer\",\n \"throttle-reason\"\n ]\n }\n }\n };\n\n let apiVersion = this.apiVersion;\n\n if (options.apiVersion) {\n if (![\"2020-06-30\", \"2021-04-30-Preview\"].includes(options.apiVersion)) {\n throw new Error(`Invalid Api Version: ${options.apiVersion}`);\n }\n apiVersion = options.apiVersion;\n }\n\n this.client = new GeneratedClient(this.endpoint, apiVersion, internalClientPipelineOptions);\n\n if (isTokenCredential(credential)) {\n this.client.pipeline.addPolicy(\n bearerTokenAuthenticationPolicy({ credential, scopes: utils.DEFAULT_SEARCH_SCOPE })\n );\n } else {\n this.client.pipeline.addPolicy(createSearchApiKeyCredentialPolicy(credential));\n }\n\n this.client.pipeline.addPolicy(createOdataMetadataPolicy(\"minimal\"));\n }\n\n /**\n * Retrieves a list of existing indexers in the service.\n * @param options - Options to the list indexers operation.\n */\n public async listIndexers(options: ListIndexersOptions = {}): Promise<Array<SearchIndexer>> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-listIndexers\", options);\n try {\n const result = await this.client.indexers.list(updatedOptions);\n return result.indexers.map(utils.generatedSearchIndexerToPublicSearchIndexer);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Retrieves a list of names of existing indexers in the service.\n * @param options - Options to the list indexers operation.\n */\n public async listIndexersNames(options: ListIndexersOptions = {}): Promise<Array<string>> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-listIndexersNames\", options);\n try {\n const result = await this.client.indexers.list({\n ...updatedOptions,\n select: \"name\"\n });\n return result.indexers.map((idx) => idx.name);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Retrieves a list of existing data sources in the service.\n * @param options - Options to the list indexers operation.\n */\n public async listDataSourceConnections(\n options: ListDataSourceConnectionsOptions = {}\n ): Promise<Array<SearchIndexerDataSourceConnection>> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexerClient-listDataSourceConnections\",\n options\n );\n try {\n const result = await this.client.dataSources.list(updatedOptions);\n return result.dataSources.map(utils.generatedDataSourceToPublicDataSource);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Retrieves a list of names of existing data sources in the service.\n * @param options - Options to the list indexers operation.\n */\n public async listDataSourceConnectionsNames(\n options: ListDataSourceConnectionsOptions = {}\n ): Promise<Array<string>> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexerClient-listDataSourceConnectionsNames\",\n options\n );\n try {\n const result = await this.client.dataSources.list({\n ...updatedOptions,\n select: \"name\"\n });\n return result.dataSources.map((ds) => ds.name);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Retrieves a list of existing Skillsets in the service.\n * @param options - Options to the list Skillsets operation.\n */\n public async listSkillsets(\n options: ListSkillsetsOptions = {}\n ): Promise<Array<SearchIndexerSkillset>> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-listSkillsets\", options);\n try {\n const result = await this.client.skillsets.list(updatedOptions);\n return result.skillsets.map(utils.generatedSkillsetToPublicSkillset);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Retrieves a list of names of existing Skillsets in the service.\n * @param options - Options to the list Skillsets operation.\n */\n public async listSkillsetsNames(options: ListSkillsetsOptions = {}): Promise<Array<string>> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-listSkillsetsNames\", options);\n try {\n const result = await this.client.skillsets.list({\n ...updatedOptions,\n select: \"name\"\n });\n return result.skillsets.map((sks) => sks.name);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Retrieves information about an Indexer.\n * @param indexerName - The name of the Indexer.\n * @param options - Additional optional arguments.\n */\n public async getIndexer(\n indexerName: string,\n options: GetIndexerOptions = {}\n ): Promise<SearchIndexer> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-getIndexer\", options);\n try {\n const result = await this.client.indexers.get(indexerName, updatedOptions);\n return utils.generatedSearchIndexerToPublicSearchIndexer(result);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Retrieves information about a DataSource\n * @param dataSourceName - The name of the DataSource\n * @param options - Additional optional arguments\n */\n public async getDataSourceConnection(\n dataSourceConnectionName: string,\n options: GetDataSourceConnectionOptions = {}\n ): Promise<SearchIndexerDataSourceConnection> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexerClient-getDataSourceConnection\",\n options\n );\n try {\n const result = await this.client.dataSources.get(dataSourceConnectionName, updatedOptions);\n return utils.generatedDataSourceToPublicDataSource(result);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Retrieves information about an Skillset.\n * @param indexName - The name of the Skillset.\n * @param options - Additional optional arguments.\n */\n public async getSkillset(\n skillsetName: string,\n options: GetSkillSetOptions = {}\n ): Promise<SearchIndexerSkillset> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-getSkillset\", options);\n try {\n const result = await this.client.skillsets.get(skillsetName, updatedOptions);\n return utils.generatedSkillsetToPublicSkillset(result);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Creates a new indexer in a search service.\n * @param indexer - The indexer definition to create in a search service.\n * @param options - Additional optional arguments.\n */\n public async createIndexer(\n indexer: SearchIndexer,\n options: CreateIndexerOptions = {}\n ): Promise<SearchIndexer> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-createIndexer\", options);\n try {\n const result = await this.client.indexers.create(\n utils.publicSearchIndexerToGeneratedSearchIndexer(indexer),\n updatedOptions\n );\n return utils.generatedSearchIndexerToPublicSearchIndexer(result);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Creates a new dataSource in a search service.\n * @param dataSourceConnection - The dataSource definition to create in a search service.\n * @param options - Additional optional arguments.\n */\n public async createDataSourceConnection(\n dataSourceConnection: SearchIndexerDataSourceConnection,\n options: CreateDataSourceConnectionOptions = {}\n ): Promise<SearchIndexerDataSourceConnection> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexerClient-createDataSourceConnection\",\n options\n );\n try {\n const result = await this.client.dataSources.create(\n utils.publicDataSourceToGeneratedDataSource(dataSourceConnection),\n updatedOptions\n );\n return utils.generatedDataSourceToPublicDataSource(result);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Creates a new skillset in a search service.\n * @param skillset - The skillset containing one or more skills to create in a search service.\n * @param options - Additional optional arguments.\n */\n public async createSkillset(\n skillset: SearchIndexerSkillset,\n options: CreateSkillsetOptions = {}\n ): Promise<SearchIndexerSkillset> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-createSkillset\", options);\n try {\n const result = await this.client.skillsets.create(\n utils.publicSkillsetToGeneratedSkillset(skillset),\n updatedOptions\n );\n return utils.generatedSkillsetToPublicSkillset(result);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Creates a new indexer or modifies an existing one.\n * @param indexer - The information describing the indexer to be created/updated.\n * @param options - Additional optional arguments.\n */\n public async createOrUpdateIndexer(\n indexer: SearchIndexer,\n options: CreateorUpdateIndexerOptions = {}\n ): Promise<SearchIndexer> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexerClient-createOrUpdateIndexer\",\n options\n );\n try {\n const etag = options.onlyIfUnchanged ? indexer.etag : undefined;\n\n const result = await this.client.indexers.createOrUpdate(\n indexer.name,\n utils.publicSearchIndexerToGeneratedSearchIndexer(indexer),\n {\n ...updatedOptions,\n ifMatch: etag,\n skipIndexerResetRequirementForCache: options.skipIndexerResetRequirementForCache,\n disableCacheReprocessingChangeDetection: options.disableCacheReprocessingChangeDetection\n }\n );\n return utils.generatedSearchIndexerToPublicSearchIndexer(result);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Creates a new datasource or modifies an existing one.\n * @param dataSourceConnection - The information describing the datasource to be created/updated.\n * @param options - Additional optional arguments.\n */\n public async createOrUpdateDataSourceConnection(\n dataSourceConnection: SearchIndexerDataSourceConnection,\n options: CreateorUpdateDataSourceConnectionOptions = {}\n ): Promise<SearchIndexerDataSourceConnection> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexerClient-createOrUpdateDataSourceConnection\",\n options\n );\n try {\n const etag = options.onlyIfUnchanged ? dataSourceConnection.etag : undefined;\n\n const result = await this.client.dataSources.createOrUpdate(\n dataSourceConnection.name,\n utils.publicDataSourceToGeneratedDataSource(dataSourceConnection),\n {\n ...updatedOptions,\n ifMatch: etag,\n skipIndexerResetRequirementForCache: options.skipIndexerResetRequirementForCache\n }\n );\n return utils.generatedDataSourceToPublicDataSource(result);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Creates a new Skillset or modifies an existing one.\n * @param skillset - The information describing the index to be created.\n * @param options - Additional optional arguments.\n */\n public async createOrUpdateSkillset(\n skillset: SearchIndexerSkillset,\n options: CreateOrUpdateSkillsetOptions = {}\n ): Promise<SearchIndexerSkillset> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexerClient-createOrUpdateSkillset\",\n options\n );\n try {\n const etag = options.onlyIfUnchanged ? skillset.etag : undefined;\n\n const result = await this.client.skillsets.createOrUpdate(\n skillset.name,\n utils.publicSkillsetToGeneratedSkillset(skillset),\n {\n ...updatedOptions,\n ifMatch: etag,\n skipIndexerResetRequirementForCache: options.skipIndexerResetRequirementForCache,\n disableCacheReprocessingChangeDetection: options.disableCacheReprocessingChangeDetection\n }\n );\n\n return utils.generatedSkillsetToPublicSkillset(result);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Deletes an existing indexer.\n * @param indexer - Indexer/Name of the indexer to delete.\n * @param options - Additional optional arguments.\n */\n public async deleteIndexer(\n indexer: string | SearchIndexer,\n options: DeleteIndexerOptions = {}\n ): Promise<void> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-deleteIndexer\", options);\n try {\n const indexerName: string = typeof indexer === \"string\" ? indexer : indexer.name;\n const etag =\n typeof indexer === \"string\"\n ? undefined\n : options.onlyIfUnchanged\n ? indexer.etag\n : undefined;\n\n await this.client.indexers.delete(indexerName, {\n ...updatedOptions,\n ifMatch: etag\n });\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Deletes an existing datasource.\n * @param dataSource - Datasource/Name of the datasource to delete.\n * @param options - Additional optional arguments.\n */\n public async deleteDataSourceConnection(\n dataSourceConnection: string | SearchIndexerDataSourceConnection,\n options: DeleteDataSourceConnectionOptions = {}\n ): Promise<void> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexerClient-deleteDataSourceConnection\",\n options\n );\n try {\n const dataSourceConnectionName: string =\n typeof dataSourceConnection === \"string\" ? dataSourceConnection : dataSourceConnection.name;\n const etag =\n typeof dataSourceConnection === \"string\"\n ? undefined\n : options.onlyIfUnchanged\n ? dataSourceConnection.etag\n : undefined;\n\n await this.client.dataSources.delete(dataSourceConnectionName, {\n ...updatedOptions,\n ifMatch: etag\n });\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Deletes an existing Skillset.\n * @param skillset - Skillset/Name of the Skillset to delete.\n * @param options - Additional optional arguments.\n */\n public async deleteSkillset(\n skillset: string | SearchIndexerSkillset,\n options: DeleteSkillsetOptions = {}\n ): Promise<void> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-deleteSkillset\", options);\n try {\n const skillsetName: string = typeof skillset === \"string\" ? skillset : skillset.name;\n const etag =\n typeof skillset === \"string\"\n ? undefined\n : options.onlyIfUnchanged\n ? skillset.etag\n : undefined;\n\n await this.client.skillsets.delete(skillsetName, {\n ...updatedOptions,\n ifMatch: etag\n });\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Returns the current status and execution history of an indexer.\n * @param indexerName - The name of the indexer.\n * @param options - Additional optional arguments.\n */\n public async getIndexerStatus(\n indexerName: string,\n options: GetIndexerStatusOptions = {}\n ): Promise<SearchIndexerStatus> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-getIndexerStatus\", options);\n try {\n const result = await this.client.indexers.getStatus(indexerName, updatedOptions);\n return result;\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Resets the change tracking state associated with an indexer.\n * @param indexerName - The name of the indexer to reset.\n * @param options - Additional optional arguments.\n */\n public async resetIndexer(indexerName: string, options: ResetIndexerOptions = {}): Promise<void> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-resetIndexer\", options);\n try {\n await this.client.indexers.reset(indexerName, updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Runs an indexer on-demand.\n * @param indexerName - The name of the indexer to run.\n * @param options - Additional optional arguments.\n */\n public async runIndexer(indexerName: string, options: RunIndexerOptions = {}): Promise<void> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-runIndexer\", options);\n try {\n await this.client.indexers.run(indexerName, updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Resets specific documents in the datasource to be selectively re-ingested by the indexer.\n * @param indexerName - The name of the indexer to reset documents for.\n * @param options - Additional optional arguments.\n */\n public async resetDocuments(\n indexerName: string,\n options: ResetDocumentsOptions = {}\n ): Promise<void> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-resetDocs\", options);\n try {\n await this.client.indexers.resetDocs(indexerName, {\n ...updatedOptions,\n keysOrIds: {\n documentKeys: updatedOptions.documentKeys,\n datasourceDocumentIds: updatedOptions.datasourceDocumentIds\n }\n });\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Reset an existing skillset in a search service.\n * @param skillsetName - The name of the skillset to reset.\n * @param skillNames - The names of skills to reset.\n * @param options - The options parameters.\n */\n public async resetSkills(skillsetName: string, options: ResetSkillsOptions = {}): Promise<void> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-resetSkills\", options);\n try {\n await this.client.skillsets.resetSkills(\n skillsetName,\n { skillNames: options.skillNames },\n updatedOptions\n );\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"searchIndexerClient.js","sourceRoot":"","sources":["../../src/searchIndexerClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { KeyCredential, TokenCredential, isTokenCredential } from \"@azure/core-auth\";\nimport { CommonClientOptions, InternalClientPipelineOptions } from \"@azure/core-client\";\nimport { bearerTokenAuthenticationPolicy } from \"@azure/core-rest-pipeline\";\nimport { SpanStatusCode } from \"@azure/core-tracing\";\nimport { SDK_VERSION } from \"./constants\";\nimport { SearchIndexerStatus } from \"./generated/service/models\";\nimport { SearchServiceClient as GeneratedClient } from \"./generated/service/searchServiceClient\";\nimport { logger } from \"./logger\";\nimport { createSearchApiKeyCredentialPolicy } from \"./searchApiKeyCredentialPolicy\";\nimport {\n CreateOrUpdateSkillsetOptions,\n CreateSkillsetOptions,\n DeleteSkillsetOptions,\n GetSkillSetOptions,\n ListSkillsetsOptions,\n SearchIndexerSkillset,\n ListIndexersOptions,\n CreateIndexerOptions,\n GetIndexerOptions,\n CreateorUpdateIndexerOptions,\n DeleteIndexerOptions,\n GetIndexerStatusOptions,\n ResetIndexerOptions,\n RunIndexerOptions,\n ListDataSourceConnectionsOptions,\n SearchIndexer,\n SearchIndexerDataSourceConnection,\n CreateDataSourceConnectionOptions,\n DeleteDataSourceConnectionOptions,\n GetDataSourceConnectionOptions,\n CreateorUpdateDataSourceConnectionOptions,\n ResetDocumentsOptions,\n ResetSkillsOptions,\n} from \"./serviceModels\";\nimport * as utils from \"./serviceUtils\";\nimport { createSpan } from \"./tracing\";\nimport { createOdataMetadataPolicy } from \"./odataMetadataPolicy\";\n\n/**\n * Client options used to configure Cognitive Search API requests.\n */\nexport interface SearchIndexerClientOptions extends CommonClientOptions {\n /**\n * The API version to use when communicating with the service.\n * @deprecated use {@Link serviceVersion} instead\n */\n apiVersion?: string;\n\n /**\n * The service version to use when communicating with the service.\n */\n serviceVersion?: string;\n}\n\n/**\n * Class to perform operations to manage\n * (create, update, list/delete)\n * indexers, datasources & skillsets.\n */\nexport class SearchIndexerClient {\n /**\n * The API version to use when communicating with the service.\n */\n public readonly serviceVersion: string = utils.defaultServiceVersion;\n\n /**\n * The API version to use when communicating with the service.\n * @deprecated use {@Link serviceVersion} instead\n */\n public readonly apiVersion: string = utils.defaultServiceVersion;\n\n /**\n * The endpoint of the search service\n */\n public readonly endpoint: string;\n\n /**\n * @internal\n * @hidden\n * A reference to the auto-generated SearchServiceClient\n */\n private readonly client: GeneratedClient;\n\n /**\n * Creates an instance of SearchIndexerClient.\n *\n * Example usage:\n * ```ts\n * const { SearchIndexerClient, AzureKeyCredential } = require(\"@azure/search-documents\");\n *\n * const client = new SearchIndexerClient(\n * \"<endpoint>\",\n * new AzureKeyCredential(\"<Admin Key>\");\n * );\n * ```\n * @param endpoint - The endpoint of the search service\n * @param credential - Used to authenticate requests to the service.\n * @param options - Used to configure the Search client.\n */\n constructor(\n endpoint: string,\n credential: KeyCredential | TokenCredential,\n options: SearchIndexerClientOptions = {}\n ) {\n this.endpoint = endpoint;\n\n const libInfo = `azsdk-js-search-documents/${SDK_VERSION}`;\n if (!options.userAgentOptions) {\n options.userAgentOptions = {};\n }\n if (options.userAgentOptions.userAgentPrefix) {\n options.userAgentOptions.userAgentPrefix = `${options.userAgentOptions.userAgentPrefix} ${libInfo}`;\n } else {\n options.userAgentOptions.userAgentPrefix = libInfo;\n }\n\n const internalClientPipelineOptions: InternalClientPipelineOptions = {\n ...options,\n ...{\n loggingOptions: {\n logger: logger.info,\n additionalAllowedHeaderNames: [\n \"elapsed-time\",\n \"Location\",\n \"OData-MaxVersion\",\n \"OData-Version\",\n \"Prefer\",\n \"throttle-reason\",\n ],\n },\n },\n };\n\n if (options.apiVersion) {\n if (!utils.serviceVersions.includes(options.apiVersion)) {\n throw new Error(`Invalid Api Version: ${options.apiVersion}`);\n }\n this.serviceVersion = options.apiVersion;\n this.apiVersion = options.apiVersion;\n }\n\n if (options.serviceVersion) {\n if (!utils.serviceVersions.includes(options.serviceVersion)) {\n throw new Error(`Invalid Service Version: ${options.serviceVersion}`);\n }\n this.serviceVersion = options.serviceVersion;\n this.apiVersion = options.serviceVersion;\n }\n\n this.client = new GeneratedClient(\n this.endpoint,\n this.serviceVersion,\n internalClientPipelineOptions\n );\n\n if (isTokenCredential(credential)) {\n this.client.pipeline.addPolicy(\n bearerTokenAuthenticationPolicy({ credential, scopes: utils.DEFAULT_SEARCH_SCOPE })\n );\n } else {\n this.client.pipeline.addPolicy(createSearchApiKeyCredentialPolicy(credential));\n }\n\n this.client.pipeline.addPolicy(createOdataMetadataPolicy(\"minimal\"));\n }\n\n /**\n * Retrieves a list of existing indexers in the service.\n * @param options - Options to the list indexers operation.\n */\n public async listIndexers(options: ListIndexersOptions = {}): Promise<Array<SearchIndexer>> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-listIndexers\", options);\n try {\n const result = await this.client.indexers.list(updatedOptions);\n return result.indexers.map(utils.generatedSearchIndexerToPublicSearchIndexer);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Retrieves a list of names of existing indexers in the service.\n * @param options - Options to the list indexers operation.\n */\n public async listIndexersNames(options: ListIndexersOptions = {}): Promise<Array<string>> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-listIndexersNames\", options);\n try {\n const result = await this.client.indexers.list({\n ...updatedOptions,\n select: \"name\",\n });\n return result.indexers.map((idx) => idx.name);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Retrieves a list of existing data sources in the service.\n * @param options - Options to the list indexers operation.\n */\n public async listDataSourceConnections(\n options: ListDataSourceConnectionsOptions = {}\n ): Promise<Array<SearchIndexerDataSourceConnection>> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexerClient-listDataSourceConnections\",\n options\n );\n try {\n const result = await this.client.dataSources.list(updatedOptions);\n return result.dataSources.map(utils.generatedDataSourceToPublicDataSource);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Retrieves a list of names of existing data sources in the service.\n * @param options - Options to the list indexers operation.\n */\n public async listDataSourceConnectionsNames(\n options: ListDataSourceConnectionsOptions = {}\n ): Promise<Array<string>> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexerClient-listDataSourceConnectionsNames\",\n options\n );\n try {\n const result = await this.client.dataSources.list({\n ...updatedOptions,\n select: \"name\",\n });\n return result.dataSources.map((ds) => ds.name);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Retrieves a list of existing Skillsets in the service.\n * @param options - Options to the list Skillsets operation.\n */\n public async listSkillsets(\n options: ListSkillsetsOptions = {}\n ): Promise<Array<SearchIndexerSkillset>> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-listSkillsets\", options);\n try {\n const result = await this.client.skillsets.list(updatedOptions);\n return result.skillsets.map(utils.generatedSkillsetToPublicSkillset);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Retrieves a list of names of existing Skillsets in the service.\n * @param options - Options to the list Skillsets operation.\n */\n public async listSkillsetsNames(options: ListSkillsetsOptions = {}): Promise<Array<string>> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-listSkillsetsNames\", options);\n try {\n const result = await this.client.skillsets.list({\n ...updatedOptions,\n select: \"name\",\n });\n return result.skillsets.map((sks) => sks.name);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Retrieves information about an Indexer.\n * @param indexerName - The name of the Indexer.\n * @param options - Additional optional arguments.\n */\n public async getIndexer(\n indexerName: string,\n options: GetIndexerOptions = {}\n ): Promise<SearchIndexer> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-getIndexer\", options);\n try {\n const result = await this.client.indexers.get(indexerName, updatedOptions);\n return utils.generatedSearchIndexerToPublicSearchIndexer(result);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Retrieves information about a DataSource\n * @param dataSourceName - The name of the DataSource\n * @param options - Additional optional arguments\n */\n public async getDataSourceConnection(\n dataSourceConnectionName: string,\n options: GetDataSourceConnectionOptions = {}\n ): Promise<SearchIndexerDataSourceConnection> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexerClient-getDataSourceConnection\",\n options\n );\n try {\n const result = await this.client.dataSources.get(dataSourceConnectionName, updatedOptions);\n return utils.generatedDataSourceToPublicDataSource(result);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Retrieves information about an Skillset.\n * @param indexName - The name of the Skillset.\n * @param options - Additional optional arguments.\n */\n public async getSkillset(\n skillsetName: string,\n options: GetSkillSetOptions = {}\n ): Promise<SearchIndexerSkillset> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-getSkillset\", options);\n try {\n const result = await this.client.skillsets.get(skillsetName, updatedOptions);\n return utils.generatedSkillsetToPublicSkillset(result);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Creates a new indexer in a search service.\n * @param indexer - The indexer definition to create in a search service.\n * @param options - Additional optional arguments.\n */\n public async createIndexer(\n indexer: SearchIndexer,\n options: CreateIndexerOptions = {}\n ): Promise<SearchIndexer> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-createIndexer\", options);\n try {\n const result = await this.client.indexers.create(\n utils.publicSearchIndexerToGeneratedSearchIndexer(indexer),\n updatedOptions\n );\n return utils.generatedSearchIndexerToPublicSearchIndexer(result);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Creates a new dataSource in a search service.\n * @param dataSourceConnection - The dataSource definition to create in a search service.\n * @param options - Additional optional arguments.\n */\n public async createDataSourceConnection(\n dataSourceConnection: SearchIndexerDataSourceConnection,\n options: CreateDataSourceConnectionOptions = {}\n ): Promise<SearchIndexerDataSourceConnection> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexerClient-createDataSourceConnection\",\n options\n );\n try {\n const result = await this.client.dataSources.create(\n utils.publicDataSourceToGeneratedDataSource(dataSourceConnection),\n updatedOptions\n );\n return utils.generatedDataSourceToPublicDataSource(result);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Creates a new skillset in a search service.\n * @param skillset - The skillset containing one or more skills to create in a search service.\n * @param options - Additional optional arguments.\n */\n public async createSkillset(\n skillset: SearchIndexerSkillset,\n options: CreateSkillsetOptions = {}\n ): Promise<SearchIndexerSkillset> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-createSkillset\", options);\n try {\n const result = await this.client.skillsets.create(\n utils.publicSkillsetToGeneratedSkillset(skillset),\n updatedOptions\n );\n return utils.generatedSkillsetToPublicSkillset(result);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Creates a new indexer or modifies an existing one.\n * @param indexer - The information describing the indexer to be created/updated.\n * @param options - Additional optional arguments.\n */\n public async createOrUpdateIndexer(\n indexer: SearchIndexer,\n options: CreateorUpdateIndexerOptions = {}\n ): Promise<SearchIndexer> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexerClient-createOrUpdateIndexer\",\n options\n );\n try {\n const etag = options.onlyIfUnchanged ? indexer.etag : undefined;\n\n const result = await this.client.indexers.createOrUpdate(\n indexer.name,\n utils.publicSearchIndexerToGeneratedSearchIndexer(indexer),\n {\n ...updatedOptions,\n ifMatch: etag,\n skipIndexerResetRequirementForCache: options.skipIndexerResetRequirementForCache,\n disableCacheReprocessingChangeDetection: options.disableCacheReprocessingChangeDetection,\n }\n );\n return utils.generatedSearchIndexerToPublicSearchIndexer(result);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Creates a new datasource or modifies an existing one.\n * @param dataSourceConnection - The information describing the datasource to be created/updated.\n * @param options - Additional optional arguments.\n */\n public async createOrUpdateDataSourceConnection(\n dataSourceConnection: SearchIndexerDataSourceConnection,\n options: CreateorUpdateDataSourceConnectionOptions = {}\n ): Promise<SearchIndexerDataSourceConnection> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexerClient-createOrUpdateDataSourceConnection\",\n options\n );\n try {\n const etag = options.onlyIfUnchanged ? dataSourceConnection.etag : undefined;\n\n const result = await this.client.dataSources.createOrUpdate(\n dataSourceConnection.name,\n utils.publicDataSourceToGeneratedDataSource(dataSourceConnection),\n {\n ...updatedOptions,\n ifMatch: etag,\n skipIndexerResetRequirementForCache: options.skipIndexerResetRequirementForCache,\n }\n );\n return utils.generatedDataSourceToPublicDataSource(result);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Creates a new Skillset or modifies an existing one.\n * @param skillset - The information describing the index to be created.\n * @param options - Additional optional arguments.\n */\n public async createOrUpdateSkillset(\n skillset: SearchIndexerSkillset,\n options: CreateOrUpdateSkillsetOptions = {}\n ): Promise<SearchIndexerSkillset> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexerClient-createOrUpdateSkillset\",\n options\n );\n try {\n const etag = options.onlyIfUnchanged ? skillset.etag : undefined;\n\n const result = await this.client.skillsets.createOrUpdate(\n skillset.name,\n utils.publicSkillsetToGeneratedSkillset(skillset),\n {\n ...updatedOptions,\n ifMatch: etag,\n skipIndexerResetRequirementForCache: options.skipIndexerResetRequirementForCache,\n disableCacheReprocessingChangeDetection: options.disableCacheReprocessingChangeDetection,\n }\n );\n\n return utils.generatedSkillsetToPublicSkillset(result);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Deletes an existing indexer.\n * @param indexer - Indexer/Name of the indexer to delete.\n * @param options - Additional optional arguments.\n */\n public async deleteIndexer(\n indexer: string | SearchIndexer,\n options: DeleteIndexerOptions = {}\n ): Promise<void> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-deleteIndexer\", options);\n try {\n const indexerName: string = typeof indexer === \"string\" ? indexer : indexer.name;\n const etag =\n typeof indexer === \"string\"\n ? undefined\n : options.onlyIfUnchanged\n ? indexer.etag\n : undefined;\n\n await this.client.indexers.delete(indexerName, {\n ...updatedOptions,\n ifMatch: etag,\n });\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Deletes an existing datasource.\n * @param dataSource - Datasource/Name of the datasource to delete.\n * @param options - Additional optional arguments.\n */\n public async deleteDataSourceConnection(\n dataSourceConnection: string | SearchIndexerDataSourceConnection,\n options: DeleteDataSourceConnectionOptions = {}\n ): Promise<void> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexerClient-deleteDataSourceConnection\",\n options\n );\n try {\n const dataSourceConnectionName: string =\n typeof dataSourceConnection === \"string\" ? dataSourceConnection : dataSourceConnection.name;\n const etag =\n typeof dataSourceConnection === \"string\"\n ? undefined\n : options.onlyIfUnchanged\n ? dataSourceConnection.etag\n : undefined;\n\n await this.client.dataSources.delete(dataSourceConnectionName, {\n ...updatedOptions,\n ifMatch: etag,\n });\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Deletes an existing Skillset.\n * @param skillset - Skillset/Name of the Skillset to delete.\n * @param options - Additional optional arguments.\n */\n public async deleteSkillset(\n skillset: string | SearchIndexerSkillset,\n options: DeleteSkillsetOptions = {}\n ): Promise<void> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-deleteSkillset\", options);\n try {\n const skillsetName: string = typeof skillset === \"string\" ? skillset : skillset.name;\n const etag =\n typeof skillset === \"string\"\n ? undefined\n : options.onlyIfUnchanged\n ? skillset.etag\n : undefined;\n\n await this.client.skillsets.delete(skillsetName, {\n ...updatedOptions,\n ifMatch: etag,\n });\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Returns the current status and execution history of an indexer.\n * @param indexerName - The name of the indexer.\n * @param options - Additional optional arguments.\n */\n public async getIndexerStatus(\n indexerName: string,\n options: GetIndexerStatusOptions = {}\n ): Promise<SearchIndexerStatus> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-getIndexerStatus\", options);\n try {\n const result = await this.client.indexers.getStatus(indexerName, updatedOptions);\n return result;\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Resets the change tracking state associated with an indexer.\n * @param indexerName - The name of the indexer to reset.\n * @param options - Additional optional arguments.\n */\n public async resetIndexer(indexerName: string, options: ResetIndexerOptions = {}): Promise<void> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-resetIndexer\", options);\n try {\n await this.client.indexers.reset(indexerName, updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Runs an indexer on-demand.\n * @param indexerName - The name of the indexer to run.\n * @param options - Additional optional arguments.\n */\n public async runIndexer(indexerName: string, options: RunIndexerOptions = {}): Promise<void> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-runIndexer\", options);\n try {\n await this.client.indexers.run(indexerName, updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Resets specific documents in the datasource to be selectively re-ingested by the indexer.\n * @param indexerName - The name of the indexer to reset documents for.\n * @param options - Additional optional arguments.\n */\n public async resetDocuments(\n indexerName: string,\n options: ResetDocumentsOptions = {}\n ): Promise<void> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-resetDocs\", options);\n try {\n await this.client.indexers.resetDocs(indexerName, {\n ...updatedOptions,\n keysOrIds: {\n documentKeys: updatedOptions.documentKeys,\n datasourceDocumentIds: updatedOptions.datasourceDocumentIds,\n },\n });\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Reset an existing skillset in a search service.\n * @param skillsetName - The name of the skillset to reset.\n * @param skillNames - The names of skills to reset.\n * @param options - The options parameters.\n */\n public async resetSkills(skillsetName: string, options: ResetSkillsOptions = {}): Promise<void> {\n const { span, updatedOptions } = createSpan(\"SearchIndexerClient-resetSkills\", options);\n try {\n await this.client.skillsets.resetSkills(\n skillsetName,\n { skillNames: options.skillNames },\n updatedOptions\n );\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n}\n"]}
|
|
@@ -75,14 +75,14 @@ export class SearchIndexingBufferedSender {
|
|
|
75
75
|
this.batchObject.upload(documents);
|
|
76
76
|
this.emitter.emit("batchAdded", {
|
|
77
77
|
action: "upload",
|
|
78
|
-
documents
|
|
78
|
+
documents,
|
|
79
79
|
});
|
|
80
80
|
return this.internalFlush(false, updatedOptions);
|
|
81
81
|
}
|
|
82
82
|
catch (e) {
|
|
83
83
|
span.setStatus({
|
|
84
84
|
code: SpanStatusCode.ERROR,
|
|
85
|
-
message: e.message
|
|
85
|
+
message: e.message,
|
|
86
86
|
});
|
|
87
87
|
throw e;
|
|
88
88
|
}
|
|
@@ -102,14 +102,14 @@ export class SearchIndexingBufferedSender {
|
|
|
102
102
|
this.batchObject.merge(documents);
|
|
103
103
|
this.emitter.emit("batchAdded", {
|
|
104
104
|
action: "merge",
|
|
105
|
-
documents
|
|
105
|
+
documents,
|
|
106
106
|
});
|
|
107
107
|
return this.internalFlush(false, updatedOptions);
|
|
108
108
|
}
|
|
109
109
|
catch (e) {
|
|
110
110
|
span.setStatus({
|
|
111
111
|
code: SpanStatusCode.ERROR,
|
|
112
|
-
message: e.message
|
|
112
|
+
message: e.message,
|
|
113
113
|
});
|
|
114
114
|
throw e;
|
|
115
115
|
}
|
|
@@ -129,14 +129,14 @@ export class SearchIndexingBufferedSender {
|
|
|
129
129
|
this.batchObject.mergeOrUpload(documents);
|
|
130
130
|
this.emitter.emit("batchAdded", {
|
|
131
131
|
action: "mergeOrUpload",
|
|
132
|
-
documents
|
|
132
|
+
documents,
|
|
133
133
|
});
|
|
134
134
|
return this.internalFlush(false, updatedOptions);
|
|
135
135
|
}
|
|
136
136
|
catch (e) {
|
|
137
137
|
span.setStatus({
|
|
138
138
|
code: SpanStatusCode.ERROR,
|
|
139
|
-
message: e.message
|
|
139
|
+
message: e.message,
|
|
140
140
|
});
|
|
141
141
|
throw e;
|
|
142
142
|
}
|
|
@@ -156,14 +156,14 @@ export class SearchIndexingBufferedSender {
|
|
|
156
156
|
this.batchObject.delete(documents);
|
|
157
157
|
this.emitter.emit("batchAdded", {
|
|
158
158
|
action: "delete",
|
|
159
|
-
documents
|
|
159
|
+
documents,
|
|
160
160
|
});
|
|
161
161
|
return this.internalFlush(false, updatedOptions);
|
|
162
162
|
}
|
|
163
163
|
catch (e) {
|
|
164
164
|
span.setStatus({
|
|
165
165
|
code: SpanStatusCode.ERROR,
|
|
166
|
-
message: e.message
|
|
166
|
+
message: e.message,
|
|
167
167
|
});
|
|
168
168
|
throw e;
|
|
169
169
|
}
|
|
@@ -186,7 +186,7 @@ export class SearchIndexingBufferedSender {
|
|
|
186
186
|
catch (e) {
|
|
187
187
|
span.setStatus({
|
|
188
188
|
code: SpanStatusCode.ERROR,
|
|
189
|
-
message: e.message
|
|
189
|
+
message: e.message,
|
|
190
190
|
});
|
|
191
191
|
throw e;
|
|
192
192
|
}
|
|
@@ -257,7 +257,7 @@ export class SearchIndexingBufferedSender {
|
|
|
257
257
|
// Cut the payload size to half
|
|
258
258
|
const splitActionsArray = [
|
|
259
259
|
actionsToSend.slice(0, actionsToSend.length / 2),
|
|
260
|
-
actionsToSend.slice(actionsToSend.length / 2, actionsToSend.length)
|
|
260
|
+
actionsToSend.slice(actionsToSend.length / 2, actionsToSend.length),
|
|
261
261
|
];
|
|
262
262
|
this.initialBatchActionCount = splitActionsArray[0].length; // So, we do not want 413 happening again and again
|
|
263
263
|
for (const actions of splitActionsArray) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchIndexingBufferedSender.js","sourceRoot":"","sources":["../../src/searchIndexingBufferedSender.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { IndexDocumentsBatch } from \"./indexDocumentsBatch\";\nimport {\n IndexDocumentsAction,\n SearchIndexingBufferedSenderOptions,\n SearchIndexingBufferedSenderUploadDocumentsOptions,\n SearchIndexingBufferedSenderMergeDocumentsOptions,\n SearchIndexingBufferedSenderMergeOrUploadDocumentsOptions,\n SearchIndexingBufferedSenderDeleteDocumentsOptions,\n SearchIndexingBufferedSenderFlushDocumentsOptions,\n IndexDocumentsOptions\n} from \"./indexModels\";\nimport { IndexDocumentsResult } from \"./generated/data/models\";\nimport { OperationOptions } from \"@azure/core-client\";\nimport EventEmitter from \"events\";\nimport { createSpan } from \"./tracing\";\nimport { SpanStatusCode } from \"@azure/core-tracing\";\nimport { delay } from \"./serviceUtils\";\nimport { getRandomIntegerInclusive } from \"./serviceUtils\";\nimport { RestError } from \"@azure/core-rest-pipeline\";\n\n/**\n * Index Documents Client\n */\nexport interface IndexDocumentsClient<T> {\n /**\n * Perform a set of index modifications (upload, merge, mergeOrUpload, delete)\n * for the given set of documents.\n *\n * @param batch - An array of actions to perform on the index.\n * @param options - Additional options.\n */\n indexDocuments(\n batch: IndexDocumentsBatch<T>,\n options: IndexDocumentsOptions\n ): Promise<IndexDocumentsResult>;\n}\n\n/**\n * Default Batch Size\n */\nexport const DEFAULT_BATCH_SIZE: number = 512;\n/**\n * Default window flush interval\n */\nexport const DEFAULT_FLUSH_WINDOW: number = 60000;\n/**\n * Default number of times to retry.\n */\nexport const DEFAULT_RETRY_COUNT: number = 3;\n/**\n * Default retry delay.\n */\nexport const DEFAULT_RETRY_DELAY: number = 800;\n/**\n * Default Max Delay between retries.\n */\nexport const DEFAULT_MAX_RETRY_DELAY: number = 60000;\n\n/**\n * Class used to perform buffered operations against a search index,\n * including adding, updating, and removing them.\n */\nexport class SearchIndexingBufferedSender<T> {\n /**\n * Search Client used to call the underlying IndexBatch operations.\n */\n private client: IndexDocumentsClient<T>;\n /**\n * Indicates if autoFlush is enabled.\n */\n private autoFlush: boolean;\n /**\n * Interval between flushes (in milliseconds).\n */\n private flushWindowInMs: number;\n /**\n * Delay between retries\n */\n private throttlingDelayInMs: number;\n /**\n * Maximum number of Retries\n */\n private maxRetriesPerAction: number;\n /**\n * Max Delay between retries\n */\n private maxThrottlingDelayInMs: number;\n /**\n * Size of the batch.\n */\n private initialBatchActionCount: number;\n /**\n * Batch object used to complete the service call.\n */\n private batchObject: IndexDocumentsBatch<T>;\n /**\n * Clean up for the timer\n */\n private cleanupTimer?: () => void;\n /**\n * Event emitter/publisher used in the Buffered Sender\n */\n private readonly emitter = new EventEmitter();\n /**\n * Method to retrieve the document key\n */\n private documentKeyRetriever: (document: T) => string;\n\n /**\n * Creates a new instance of SearchIndexingBufferedSender.\n *\n * @param client - Search Client used to call the underlying IndexBatch operations.\n * @param options - Options to modify auto flush.\n *\n */\n constructor(\n client: IndexDocumentsClient<T>,\n documentKeyRetriever: (document: T) => string,\n options: SearchIndexingBufferedSenderOptions = {}\n ) {\n this.client = client;\n this.documentKeyRetriever = documentKeyRetriever;\n // General Configuration properties\n this.autoFlush = options.autoFlush ?? true;\n this.initialBatchActionCount = options.initialBatchActionCount ?? DEFAULT_BATCH_SIZE;\n this.flushWindowInMs = options.flushWindowInMs ?? DEFAULT_FLUSH_WINDOW;\n // Retry specific configuration properties\n this.throttlingDelayInMs = options.throttlingDelayInMs ?? DEFAULT_FLUSH_WINDOW;\n this.maxRetriesPerAction = options.maxRetriesPerAction ?? DEFAULT_RETRY_COUNT;\n this.maxThrottlingDelayInMs = options.maxThrottlingDelayInMs ?? DEFAULT_MAX_RETRY_DELAY;\n\n this.batchObject = new IndexDocumentsBatch<T>();\n if (this.autoFlush) {\n const interval = setInterval(() => this.flush(), this.flushWindowInMs);\n interval?.unref();\n this.cleanupTimer = () => {\n clearInterval(interval);\n };\n }\n }\n\n /**\n * Uploads the documents/Adds the documents to the upload queue.\n *\n * @param documents - Documents to be uploaded.\n * @param options - Upload options.\n */\n public async uploadDocuments(\n documents: T[],\n options: SearchIndexingBufferedSenderUploadDocumentsOptions = {}\n ): Promise<void> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexingBufferedSender-uploadDocuments\",\n options\n );\n try {\n this.batchObject.upload(documents);\n this.emitter.emit(\"batchAdded\", {\n action: \"upload\",\n documents\n });\n return this.internalFlush(false, updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Merges the documents/Adds the documents to the merge queue.\n *\n * @param documents - Documents to be merged.\n * @param options - Upload options.\n */\n public async mergeDocuments(\n documents: T[],\n options: SearchIndexingBufferedSenderMergeDocumentsOptions = {}\n ): Promise<void> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexingBufferedSender-mergeDocuments\",\n options\n );\n try {\n this.batchObject.merge(documents);\n this.emitter.emit(\"batchAdded\", {\n action: \"merge\",\n documents\n });\n return this.internalFlush(false, updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Merges/Uploads the documents/Adds the documents to the merge/upload queue.\n *\n * @param documents - Documents to be merged/uploaded.\n * @param options - Upload options.\n */\n public async mergeOrUploadDocuments(\n documents: T[],\n options: SearchIndexingBufferedSenderMergeOrUploadDocumentsOptions = {}\n ): Promise<void> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexingBufferedSender-mergeOrUploadDocuments\",\n options\n );\n try {\n this.batchObject.mergeOrUpload(documents);\n this.emitter.emit(\"batchAdded\", {\n action: \"mergeOrUpload\",\n documents\n });\n return this.internalFlush(false, updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Deletes the documents/Adds the documents to the delete queue.\n *\n * @param documents - Documents to be deleted.\n * @param options - Upload options.\n */\n public async deleteDocuments(\n documents: T[],\n options: SearchIndexingBufferedSenderDeleteDocumentsOptions = {}\n ): Promise<void> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexingBufferedSender-deleteDocuments\",\n options\n );\n try {\n this.batchObject.delete(documents);\n this.emitter.emit(\"batchAdded\", {\n action: \"delete\",\n documents\n });\n return this.internalFlush(false, updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Flushes the queue manually.\n *\n * @param options - Flush options.\n */\n public async flush(\n options: SearchIndexingBufferedSenderFlushDocumentsOptions = {}\n ): Promise<void> {\n const { span, updatedOptions } = createSpan(\"SearchIndexingBufferedSender-flush\", options);\n try {\n if (this.batchObject.actions.length > 0) {\n return this.internalFlush(true, updatedOptions);\n }\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * If using autoFlush: true, call this to cleanup the autoflush timer.\n */\n public async dispose(): Promise<void> {\n if (this.batchObject.actions.length > 0) {\n await this.internalFlush(true);\n }\n if (this.cleanupTimer) {\n this.cleanupTimer();\n }\n }\n\n /**\n * Attach Batch Added Event\n *\n * @param event - Event to be emitted\n * @param listener - Event Listener\n */\n public on(event: \"batchAdded\", listener: (e: { action: string; documents: T[] }) => void): void;\n /**\n * Attach Batch Sent Event\n *\n * @param event - Event to be emitted\n * @param listener - Event Listener\n */\n public on(event: \"beforeDocumentSent\", listener: (e: IndexDocumentsAction<T>) => void): void;\n /**\n * Attach Batch Succeeded Event\n *\n * @param event - Event to be emitted\n * @param listener - Event Listener\n */\n public on(event: \"batchSucceeded\", listener: (e: IndexDocumentsResult) => void): void;\n /**\n * Attach Batch Failed Event\n *\n * @param event - Event to be emitted\n * @param listener - Event Listener\n */\n public on(event: \"batchFailed\", listener: (e: RestError) => void): void;\n public on(\n event: \"batchAdded\" | \"beforeDocumentSent\" | \"batchSucceeded\" | \"batchFailed\" | \"batchResizing\",\n listener: (e: any) => void\n ): void {\n this.emitter.on(event, listener);\n }\n\n /**\n * Detach Batch Added Event\n *\n * @param event - Event to be emitted\n * @param listener - Event Listener\n */\n public off(event: \"batchAdded\", listener: (e: { action: string; documents: T[] }) => void): void;\n /**\n * Detach Batch Sent Event\n *\n * @param event - Event to be emitted\n * @param listener - Event Listener\n */\n public off(event: \"beforeDocumentSent\", listener: (e: IndexDocumentsAction<T>) => void): void;\n /**\n * Detach Batch Succeeded Event\n *\n * @param event - Event to be emitted\n * @param listener - Event Listener\n */\n public off(event: \"batchSucceeded\", listener: (e: IndexDocumentsResult) => void): void;\n /**\n * Detach Batch Failed Event\n *\n * @param event - Event to be emitted\n * @param listener - Event Listener\n */\n public off(event: \"batchFailed\", listener: (e: RestError) => void): void;\n public off(\n event: \"batchAdded\" | \"beforeDocumentSent\" | \"batchSucceeded\" | \"batchFailed\",\n listener: (e: any) => void\n ): void {\n this.emitter.removeListener(event, listener);\n }\n\n private isBatchReady(): boolean {\n return this.batchObject.actions.length >= this.initialBatchActionCount;\n }\n\n private async internalFlush(force: boolean, options: OperationOptions = {}): Promise<void> {\n if (force || (this.autoFlush && this.isBatchReady())) {\n // Split it\n const actions: IndexDocumentsAction<T>[] = this.batchObject.actions;\n this.batchObject = new IndexDocumentsBatch<T>();\n while (actions.length > 0) {\n const actionsToSend = actions.splice(0, this.initialBatchActionCount);\n const { batchToSubmit, submitLater } = this.pruneActions(actionsToSend);\n actions.unshift(...submitLater);\n await this.submitDocuments(batchToSubmit, options);\n }\n }\n }\n\n private pruneActions(\n batch: IndexDocumentsAction<T>[]\n ): { batchToSubmit: IndexDocumentsAction<T>[]; submitLater: IndexDocumentsAction<T>[] } {\n const hashSet: Set<string> = new Set<string>();\n const resultBatch: IndexDocumentsAction<T>[] = [];\n const pruned: IndexDocumentsAction<T>[] = [];\n\n for (const document of batch) {\n const key = this.documentKeyRetriever((document as unknown) as T);\n if (hashSet.has(key)) {\n pruned.push(document);\n } else {\n hashSet.add(key);\n resultBatch.push(document);\n }\n }\n return { batchToSubmit: resultBatch, submitLater: pruned };\n }\n\n private async submitDocuments(\n actionsToSend: IndexDocumentsAction<T>[],\n options: OperationOptions,\n retryAttempt: number = 1\n ): Promise<void> {\n try {\n for (const action of actionsToSend) {\n this.emitter.emit(\"beforeDocumentSent\", action);\n }\n const result = await this.client.indexDocuments(\n new IndexDocumentsBatch<T>(actionsToSend),\n options\n );\n // raise success event\n this.emitter.emit(\"batchSucceeded\", result);\n } catch (e) {\n if (e.statusCode && e.statusCode === 413 && actionsToSend.length > 1) {\n // Cut the payload size to half\n const splitActionsArray = [\n actionsToSend.slice(0, actionsToSend.length / 2),\n actionsToSend.slice(actionsToSend.length / 2, actionsToSend.length)\n ];\n this.initialBatchActionCount = splitActionsArray[0].length; // So, we do not want 413 happening again and again\n for (const actions of splitActionsArray) {\n await this.submitDocuments(actions, options);\n }\n } else if (this.isRetryAbleError(e) && retryAttempt <= this.maxRetriesPerAction) {\n // Exponentially increase the delay each time\n const exponentialDelay = this.throttlingDelayInMs * Math.pow(2, retryAttempt);\n // Don't let the delay exceed the maximum\n const clampedExponentialDelay = Math.min(this.maxThrottlingDelayInMs, exponentialDelay);\n // Allow the final value to have some \"jitter\" (within 50% of the delay size) so\n // that retries across multiple clients don't occur simultaneously.\n const delayWithJitter =\n clampedExponentialDelay / 2 + getRandomIntegerInclusive(0, clampedExponentialDelay / 2);\n await delay(delayWithJitter);\n await this.submitDocuments(actionsToSend, options, retryAttempt + 1);\n } else {\n this.emitter.emit(\"batchFailed\", e);\n throw e;\n }\n }\n }\n\n private isRetryAbleError(e: any): boolean {\n return e.statusCode && (e.statusCode === 422 || e.statusCode === 409 || e.statusCode === 503);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"searchIndexingBufferedSender.js","sourceRoot":"","sources":["../../src/searchIndexingBufferedSender.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { IndexDocumentsBatch } from \"./indexDocumentsBatch\";\nimport {\n IndexDocumentsAction,\n SearchIndexingBufferedSenderOptions,\n SearchIndexingBufferedSenderUploadDocumentsOptions,\n SearchIndexingBufferedSenderMergeDocumentsOptions,\n SearchIndexingBufferedSenderMergeOrUploadDocumentsOptions,\n SearchIndexingBufferedSenderDeleteDocumentsOptions,\n SearchIndexingBufferedSenderFlushDocumentsOptions,\n IndexDocumentsOptions,\n} from \"./indexModels\";\nimport { IndexDocumentsResult } from \"./generated/data/models\";\nimport { OperationOptions } from \"@azure/core-client\";\nimport EventEmitter from \"events\";\nimport { createSpan } from \"./tracing\";\nimport { SpanStatusCode } from \"@azure/core-tracing\";\nimport { delay } from \"./serviceUtils\";\nimport { getRandomIntegerInclusive } from \"./serviceUtils\";\nimport { RestError } from \"@azure/core-rest-pipeline\";\n\n/**\n * Index Documents Client\n */\nexport interface IndexDocumentsClient<T> {\n /**\n * Perform a set of index modifications (upload, merge, mergeOrUpload, delete)\n * for the given set of documents.\n *\n * @param batch - An array of actions to perform on the index.\n * @param options - Additional options.\n */\n indexDocuments(\n batch: IndexDocumentsBatch<T>,\n options: IndexDocumentsOptions\n ): Promise<IndexDocumentsResult>;\n}\n\n/**\n * Default Batch Size\n */\nexport const DEFAULT_BATCH_SIZE: number = 512;\n/**\n * Default window flush interval\n */\nexport const DEFAULT_FLUSH_WINDOW: number = 60000;\n/**\n * Default number of times to retry.\n */\nexport const DEFAULT_RETRY_COUNT: number = 3;\n/**\n * Default retry delay.\n */\nexport const DEFAULT_RETRY_DELAY: number = 800;\n/**\n * Default Max Delay between retries.\n */\nexport const DEFAULT_MAX_RETRY_DELAY: number = 60000;\n\n/**\n * Class used to perform buffered operations against a search index,\n * including adding, updating, and removing them.\n */\nexport class SearchIndexingBufferedSender<T> {\n /**\n * Search Client used to call the underlying IndexBatch operations.\n */\n private client: IndexDocumentsClient<T>;\n /**\n * Indicates if autoFlush is enabled.\n */\n private autoFlush: boolean;\n /**\n * Interval between flushes (in milliseconds).\n */\n private flushWindowInMs: number;\n /**\n * Delay between retries\n */\n private throttlingDelayInMs: number;\n /**\n * Maximum number of Retries\n */\n private maxRetriesPerAction: number;\n /**\n * Max Delay between retries\n */\n private maxThrottlingDelayInMs: number;\n /**\n * Size of the batch.\n */\n private initialBatchActionCount: number;\n /**\n * Batch object used to complete the service call.\n */\n private batchObject: IndexDocumentsBatch<T>;\n /**\n * Clean up for the timer\n */\n private cleanupTimer?: () => void;\n /**\n * Event emitter/publisher used in the Buffered Sender\n */\n private readonly emitter = new EventEmitter();\n /**\n * Method to retrieve the document key\n */\n private documentKeyRetriever: (document: T) => string;\n\n /**\n * Creates a new instance of SearchIndexingBufferedSender.\n *\n * @param client - Search Client used to call the underlying IndexBatch operations.\n * @param options - Options to modify auto flush.\n *\n */\n constructor(\n client: IndexDocumentsClient<T>,\n documentKeyRetriever: (document: T) => string,\n options: SearchIndexingBufferedSenderOptions = {}\n ) {\n this.client = client;\n this.documentKeyRetriever = documentKeyRetriever;\n // General Configuration properties\n this.autoFlush = options.autoFlush ?? true;\n this.initialBatchActionCount = options.initialBatchActionCount ?? DEFAULT_BATCH_SIZE;\n this.flushWindowInMs = options.flushWindowInMs ?? DEFAULT_FLUSH_WINDOW;\n // Retry specific configuration properties\n this.throttlingDelayInMs = options.throttlingDelayInMs ?? DEFAULT_FLUSH_WINDOW;\n this.maxRetriesPerAction = options.maxRetriesPerAction ?? DEFAULT_RETRY_COUNT;\n this.maxThrottlingDelayInMs = options.maxThrottlingDelayInMs ?? DEFAULT_MAX_RETRY_DELAY;\n\n this.batchObject = new IndexDocumentsBatch<T>();\n if (this.autoFlush) {\n const interval = setInterval(() => this.flush(), this.flushWindowInMs);\n interval?.unref();\n this.cleanupTimer = () => {\n clearInterval(interval);\n };\n }\n }\n\n /**\n * Uploads the documents/Adds the documents to the upload queue.\n *\n * @param documents - Documents to be uploaded.\n * @param options - Upload options.\n */\n public async uploadDocuments(\n documents: T[],\n options: SearchIndexingBufferedSenderUploadDocumentsOptions = {}\n ): Promise<void> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexingBufferedSender-uploadDocuments\",\n options\n );\n try {\n this.batchObject.upload(documents);\n this.emitter.emit(\"batchAdded\", {\n action: \"upload\",\n documents,\n });\n return this.internalFlush(false, updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Merges the documents/Adds the documents to the merge queue.\n *\n * @param documents - Documents to be merged.\n * @param options - Upload options.\n */\n public async mergeDocuments(\n documents: T[],\n options: SearchIndexingBufferedSenderMergeDocumentsOptions = {}\n ): Promise<void> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexingBufferedSender-mergeDocuments\",\n options\n );\n try {\n this.batchObject.merge(documents);\n this.emitter.emit(\"batchAdded\", {\n action: \"merge\",\n documents,\n });\n return this.internalFlush(false, updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Merges/Uploads the documents/Adds the documents to the merge/upload queue.\n *\n * @param documents - Documents to be merged/uploaded.\n * @param options - Upload options.\n */\n public async mergeOrUploadDocuments(\n documents: T[],\n options: SearchIndexingBufferedSenderMergeOrUploadDocumentsOptions = {}\n ): Promise<void> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexingBufferedSender-mergeOrUploadDocuments\",\n options\n );\n try {\n this.batchObject.mergeOrUpload(documents);\n this.emitter.emit(\"batchAdded\", {\n action: \"mergeOrUpload\",\n documents,\n });\n return this.internalFlush(false, updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Deletes the documents/Adds the documents to the delete queue.\n *\n * @param documents - Documents to be deleted.\n * @param options - Upload options.\n */\n public async deleteDocuments(\n documents: T[],\n options: SearchIndexingBufferedSenderDeleteDocumentsOptions = {}\n ): Promise<void> {\n const { span, updatedOptions } = createSpan(\n \"SearchIndexingBufferedSender-deleteDocuments\",\n options\n );\n try {\n this.batchObject.delete(documents);\n this.emitter.emit(\"batchAdded\", {\n action: \"delete\",\n documents,\n });\n return this.internalFlush(false, updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Flushes the queue manually.\n *\n * @param options - Flush options.\n */\n public async flush(\n options: SearchIndexingBufferedSenderFlushDocumentsOptions = {}\n ): Promise<void> {\n const { span, updatedOptions } = createSpan(\"SearchIndexingBufferedSender-flush\", options);\n try {\n if (this.batchObject.actions.length > 0) {\n return this.internalFlush(true, updatedOptions);\n }\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * If using autoFlush: true, call this to cleanup the autoflush timer.\n */\n public async dispose(): Promise<void> {\n if (this.batchObject.actions.length > 0) {\n await this.internalFlush(true);\n }\n if (this.cleanupTimer) {\n this.cleanupTimer();\n }\n }\n\n /**\n * Attach Batch Added Event\n *\n * @param event - Event to be emitted\n * @param listener - Event Listener\n */\n public on(event: \"batchAdded\", listener: (e: { action: string; documents: T[] }) => void): void;\n /**\n * Attach Batch Sent Event\n *\n * @param event - Event to be emitted\n * @param listener - Event Listener\n */\n public on(event: \"beforeDocumentSent\", listener: (e: IndexDocumentsAction<T>) => void): void;\n /**\n * Attach Batch Succeeded Event\n *\n * @param event - Event to be emitted\n * @param listener - Event Listener\n */\n public on(event: \"batchSucceeded\", listener: (e: IndexDocumentsResult) => void): void;\n /**\n * Attach Batch Failed Event\n *\n * @param event - Event to be emitted\n * @param listener - Event Listener\n */\n public on(event: \"batchFailed\", listener: (e: RestError) => void): void;\n public on(\n event: \"batchAdded\" | \"beforeDocumentSent\" | \"batchSucceeded\" | \"batchFailed\" | \"batchResizing\",\n listener: (e: any) => void\n ): void {\n this.emitter.on(event, listener);\n }\n\n /**\n * Detach Batch Added Event\n *\n * @param event - Event to be emitted\n * @param listener - Event Listener\n */\n public off(event: \"batchAdded\", listener: (e: { action: string; documents: T[] }) => void): void;\n /**\n * Detach Batch Sent Event\n *\n * @param event - Event to be emitted\n * @param listener - Event Listener\n */\n public off(event: \"beforeDocumentSent\", listener: (e: IndexDocumentsAction<T>) => void): void;\n /**\n * Detach Batch Succeeded Event\n *\n * @param event - Event to be emitted\n * @param listener - Event Listener\n */\n public off(event: \"batchSucceeded\", listener: (e: IndexDocumentsResult) => void): void;\n /**\n * Detach Batch Failed Event\n *\n * @param event - Event to be emitted\n * @param listener - Event Listener\n */\n public off(event: \"batchFailed\", listener: (e: RestError) => void): void;\n public off(\n event: \"batchAdded\" | \"beforeDocumentSent\" | \"batchSucceeded\" | \"batchFailed\",\n listener: (e: any) => void\n ): void {\n this.emitter.removeListener(event, listener);\n }\n\n private isBatchReady(): boolean {\n return this.batchObject.actions.length >= this.initialBatchActionCount;\n }\n\n private async internalFlush(force: boolean, options: OperationOptions = {}): Promise<void> {\n if (force || (this.autoFlush && this.isBatchReady())) {\n // Split it\n const actions: IndexDocumentsAction<T>[] = this.batchObject.actions;\n this.batchObject = new IndexDocumentsBatch<T>();\n while (actions.length > 0) {\n const actionsToSend = actions.splice(0, this.initialBatchActionCount);\n const { batchToSubmit, submitLater } = this.pruneActions(actionsToSend);\n actions.unshift(...submitLater);\n await this.submitDocuments(batchToSubmit, options);\n }\n }\n }\n\n private pruneActions(batch: IndexDocumentsAction<T>[]): {\n batchToSubmit: IndexDocumentsAction<T>[];\n submitLater: IndexDocumentsAction<T>[];\n } {\n const hashSet: Set<string> = new Set<string>();\n const resultBatch: IndexDocumentsAction<T>[] = [];\n const pruned: IndexDocumentsAction<T>[] = [];\n\n for (const document of batch) {\n const key = this.documentKeyRetriever(document as unknown as T);\n if (hashSet.has(key)) {\n pruned.push(document);\n } else {\n hashSet.add(key);\n resultBatch.push(document);\n }\n }\n return { batchToSubmit: resultBatch, submitLater: pruned };\n }\n\n private async submitDocuments(\n actionsToSend: IndexDocumentsAction<T>[],\n options: OperationOptions,\n retryAttempt: number = 1\n ): Promise<void> {\n try {\n for (const action of actionsToSend) {\n this.emitter.emit(\"beforeDocumentSent\", action);\n }\n const result = await this.client.indexDocuments(\n new IndexDocumentsBatch<T>(actionsToSend),\n options\n );\n // raise success event\n this.emitter.emit(\"batchSucceeded\", result);\n } catch (e) {\n if (e.statusCode && e.statusCode === 413 && actionsToSend.length > 1) {\n // Cut the payload size to half\n const splitActionsArray = [\n actionsToSend.slice(0, actionsToSend.length / 2),\n actionsToSend.slice(actionsToSend.length / 2, actionsToSend.length),\n ];\n this.initialBatchActionCount = splitActionsArray[0].length; // So, we do not want 413 happening again and again\n for (const actions of splitActionsArray) {\n await this.submitDocuments(actions, options);\n }\n } else if (this.isRetryAbleError(e) && retryAttempt <= this.maxRetriesPerAction) {\n // Exponentially increase the delay each time\n const exponentialDelay = this.throttlingDelayInMs * Math.pow(2, retryAttempt);\n // Don't let the delay exceed the maximum\n const clampedExponentialDelay = Math.min(this.maxThrottlingDelayInMs, exponentialDelay);\n // Allow the final value to have some \"jitter\" (within 50% of the delay size) so\n // that retries across multiple clients don't occur simultaneously.\n const delayWithJitter =\n clampedExponentialDelay / 2 + getRandomIntegerInclusive(0, clampedExponentialDelay / 2);\n await delay(delayWithJitter);\n await this.submitDocuments(actionsToSend, options, retryAttempt + 1);\n } else {\n this.emitter.emit(\"batchFailed\", e);\n throw e;\n }\n }\n }\n\n private isRetryAbleError(e: any): boolean {\n return e.statusCode && (e.statusCode === 422 || e.statusCode === 409 || e.statusCode === 503);\n }\n}\n"]}
|