@coveo/push-api-client 2.6.5 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/dist/APICore.js +43 -0
  2. package/dist/APICore.js.map +1 -0
  3. package/dist/definitions/APICore.d.ts +11 -0
  4. package/dist/definitions/{source/catalog.stream.spec.d.ts → help/urlUtils.spec.d.ts} +0 -0
  5. package/dist/definitions/source/batchUploadDocumentsFromFile.spec.d.ts +1 -0
  6. package/dist/definitions/source/catalog.d.ts +1 -0
  7. package/dist/definitions/source/documentUploader.d.ts +3 -2
  8. package/dist/definitions/source/documentUploader.spec.d.ts +1 -0
  9. package/dist/definitions/source/push.d.ts +5 -5
  10. package/dist/definitions/uploadStrategy/fileContainerStrategy.d.ts +4 -4
  11. package/dist/definitions/uploadStrategy/fileContainerStrategy.spec.d.ts +1 -0
  12. package/dist/definitions/uploadStrategy/streamChunkStrategy.d.ts +4 -4
  13. package/dist/definitions/uploadStrategy/streamChunkStrategy.spec.d.ts +1 -0
  14. package/dist/docs/assets/search.js +1 -1
  15. package/dist/docs/classes/AnySecurityIdentityBuilder.html +4 -4
  16. package/dist/docs/classes/CatalogSource.html +24 -17
  17. package/dist/docs/classes/DocumentBuilder.html +28 -28
  18. package/dist/docs/classes/FieldAnalyser.html +12 -12
  19. package/dist/docs/classes/GroupSecurityIdentityBuilder.html +5 -5
  20. package/dist/docs/classes/PushSource.html +40 -43
  21. package/dist/docs/classes/UserSecurityIdentityBuilder.html +5 -5
  22. package/dist/docs/classes/VirtualGroupSecurityIdentityBuilder.html +5 -5
  23. package/dist/docs/classes/errors.FieldTypeInconsistencyError.html +3 -3
  24. package/dist/docs/classes/errors.InvalidDocument.html +3 -3
  25. package/dist/docs/classes/errors.InvalidPermanentId.html +3 -3
  26. package/dist/docs/classes/errors.NotAFileError.html +3 -3
  27. package/dist/docs/classes/errors.NotAJsonFileError.html +3 -3
  28. package/dist/docs/classes/errors.PrivilegeError.html +4 -4
  29. package/dist/docs/classes/errors.UnsupportedAttribute.html +3 -3
  30. package/dist/docs/classes/errors.UnsupportedFieldError.html +6 -6
  31. package/dist/docs/enums/PlatformEnvironment.html +5 -5
  32. package/dist/docs/functions/parseAndGetDocumentBuilderFromJSONDocument.html +1 -1
  33. package/dist/docs/interfaces/BatchUpdateDocuments.html +3 -3
  34. package/dist/docs/interfaces/Document.html +14 -14
  35. package/dist/docs/interfaces/SecurityIdentity.html +4 -4
  36. package/dist/docs/interfaces/SecurityIdentityBuilder.html +2 -2
  37. package/dist/docs/interfaces/UploadBatchCallbackData.html +5 -5
  38. package/dist/docs/modules/errors.html +1 -1
  39. package/dist/docs/types/BatchUpdateDocumentsFromFiles.html +1 -1
  40. package/dist/docs/types/CompressionType.html +1 -1
  41. package/dist/docs/types/FailedUploadCallback.html +1 -1
  42. package/dist/docs/types/Metadata.html +1 -1
  43. package/dist/docs/types/MetadataValue.html +1 -1
  44. package/dist/docs/types/PlatformUrlOptions.html +1 -1
  45. package/dist/docs/types/SecurityIdentityType.html +1 -1
  46. package/dist/docs/types/SuccessfulUploadCallback.html +1 -1
  47. package/dist/docs/types/Transformer.html +1 -1
  48. package/dist/docs/variables/BuiltInTransformers.html +1 -1
  49. package/dist/docs/variables/Source.html +1 -1
  50. package/dist/fieldAnalyser/fieldAnalyser.spec.js +0 -1
  51. package/dist/fieldAnalyser/fieldAnalyser.spec.js.map +1 -1
  52. package/dist/fieldAnalyser/fieldsUtils.spec.js +35 -3
  53. package/dist/fieldAnalyser/fieldsUtils.spec.js.map +1 -1
  54. package/dist/help/urlUtils.spec.js +42 -0
  55. package/dist/help/urlUtils.spec.js.map +1 -0
  56. package/dist/source/batchUploadDocumentsFromFile.spec.js +146 -0
  57. package/dist/source/batchUploadDocumentsFromFile.spec.js.map +1 -0
  58. package/dist/source/catalog.js +4 -5
  59. package/dist/source/catalog.js.map +1 -1
  60. package/dist/source/catalog.spec.js +20 -199
  61. package/dist/source/catalog.spec.js.map +1 -1
  62. package/dist/source/documentUploader.js +2 -3
  63. package/dist/source/documentUploader.js.map +1 -1
  64. package/dist/source/documentUploader.spec.js +119 -0
  65. package/dist/source/documentUploader.spec.js.map +1 -0
  66. package/dist/source/push.js +7 -11
  67. package/dist/source/push.js.map +1 -1
  68. package/dist/source/push.spec.js +91 -270
  69. package/dist/source/push.spec.js.map +1 -1
  70. package/dist/uploadStrategy/fileContainerStrategy.js +4 -5
  71. package/dist/uploadStrategy/fileContainerStrategy.js.map +1 -1
  72. package/dist/uploadStrategy/fileContainerStrategy.spec.js +87 -0
  73. package/dist/uploadStrategy/fileContainerStrategy.spec.js.map +1 -0
  74. package/dist/uploadStrategy/streamChunkStrategy.js +5 -6
  75. package/dist/uploadStrategy/streamChunkStrategy.js.map +1 -1
  76. package/dist/uploadStrategy/streamChunkStrategy.spec.js +82 -0
  77. package/dist/uploadStrategy/streamChunkStrategy.spec.js.map +1 -0
  78. package/package.json +2 -1
  79. package/dist/__stub__/largeDocuments/documentGenerator.js +0 -22
  80. package/dist/__stub__/largeDocuments/documentGenerator.js.map +0 -1
  81. package/dist/definitions/__stub__/largeDocuments/documentGenerator.d.ts +0 -12
  82. package/dist/definitions/help/axiosUtils.d.ts +0 -2
  83. package/dist/help/axiosUtils.js +0 -12
  84. package/dist/help/axiosUtils.js.map +0 -1
  85. package/dist/source/catalog.stream.spec.js +0 -238
  86. package/dist/source/catalog.stream.spec.js.map +0 -1
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.StreamChunkStrategy = void 0;
4
- const axios_1 = require("axios");
5
4
  const url_1 = require("url");
6
5
  const fileContainer_1 = require("../help/fileContainer");
7
6
  /**
@@ -11,9 +10,9 @@ const fileContainer_1 = require("../help/fileContainer");
11
10
  * @implements {UploadStrategy}
12
11
  */
13
12
  class StreamChunkStrategy {
14
- constructor(urlBuilder, documentsAxiosConfig) {
13
+ constructor(urlBuilder, api) {
15
14
  this.urlBuilder = urlBuilder;
16
- this.documentsAxiosConfig = documentsAxiosConfig;
15
+ this.api = api;
17
16
  this._openedStream = null;
18
17
  }
19
18
  async upload(batch) {
@@ -28,7 +27,7 @@ class StreamChunkStrategy {
28
27
  }
29
28
  async openStream() {
30
29
  const openStreamUrl = new url_1.URL(`${this.urlBuilder.baseStreamURL}/open`);
31
- const res = await axios_1.default.post(openStreamUrl.toString(), {}, this.documentsAxiosConfig);
30
+ const res = await this.api.post(openStreamUrl.toString());
32
31
  this._openedStream = res.data;
33
32
  }
34
33
  async closeOpenedStream() {
@@ -36,7 +35,7 @@ class StreamChunkStrategy {
36
35
  return;
37
36
  }
38
37
  const openStreamUrl = new url_1.URL(`${this.urlBuilder.baseStreamURL}/${this._openedStream.streamId}/close`);
39
- const res = await axios_1.default.post(openStreamUrl.toString(), {}, this.documentsAxiosConfig);
38
+ const res = await this.api.post(openStreamUrl.toString());
40
39
  this._openedStream = null;
41
40
  return res.data;
42
41
  }
@@ -46,7 +45,7 @@ class StreamChunkStrategy {
46
45
  }
47
46
  const { streamId } = this._openedStream;
48
47
  const openStreamUrl = new url_1.URL(`${this.urlBuilder.baseStreamURL}/${streamId}/chunk`);
49
- const res = await axios_1.default.post(openStreamUrl.toString(), {}, this.documentsAxiosConfig);
48
+ const res = await this.api.post(openStreamUrl.toString());
50
49
  return res.data;
51
50
  }
52
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"streamChunkStrategy.js","sourceRoot":"","sources":["../../src/uploadStrategy/streamChunkStrategy.ts"],"names":[],"mappings":";;;AAAA,iCAAgD;AAChD,6BAAwB;AAGxB,yDAAmE;AAUnE;;;;;GAKG;AACH,MAAa,mBAAmB;IAE9B,YACU,UAA4B,EAC5B,oBAAwC;QADxC,eAAU,GAAV,UAAU,CAAkB;QAC5B,yBAAoB,GAApB,oBAAoB,CAAoB;QAH1C,kBAAa,GAA0B,IAAI,CAAC;IAIjD,CAAC;IAEG,KAAK,CAAC,MAAM,CAAC,KAA2B;QAC7C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC9C,OAAO,IAAA,4CAA4B,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAEM,KAAK,CAAC,SAAS;QACpB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,UAAU;QACrB,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,UAAU;QACrB,MAAM,aAAa,GAAG,IAAI,SAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,OAAO,CAAC,CAAC;QACvE,MAAM,GAAG,GAAG,MAAM,eAAK,CAAC,IAAI,CAC1B,aAAa,CAAC,QAAQ,EAAE,EACxB,EAAE,EACF,IAAI,CAAC,oBAAoB,CAC1B,CAAC;QAEF,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,iBAAiB;QAC5B,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE;YAC/B,OAAO;SACR;QACD,MAAM,aAAa,GAAG,IAAI,SAAG,CAC3B,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,QAAQ,CACxE,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,eAAK,CAAC,IAAI,CAC1B,aAAa,CAAC,QAAQ,EAAE,EACxB,EAAE,EACF,IAAI,CAAC,oBAAoB,CAC1B,CAAC;QACF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC9B,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE;YAC/B,MAAM,sBAAsB,CAAC;SAC9B;QAED,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAI,CAAC,aAAa,CAAC;QACtC,MAAM,aAAa,GAAG,IAAI,SAAG,CAC3B,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,QAAQ,QAAQ,CACrD,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,eAAK,CAAC,IAAI,CAC1B,aAAa,CAAC,QAAQ,EAAE,EACxB,EAAE,EACF,IAAI,CAAC,oBAAoB,CAC1B,CAAC;QACF,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC;CACF;AAjED,kDAiEC"}
1
+ {"version":3,"file":"streamChunkStrategy.js","sourceRoot":"","sources":["../../src/uploadStrategy/streamChunkStrategy.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAGxB,yDAAmE;AAWnE;;;;;GAKG;AACH,MAAa,mBAAmB;IAE9B,YACU,UAA4B,EAC5B,GAAY;QADZ,eAAU,GAAV,UAAU,CAAkB;QAC5B,QAAG,GAAH,GAAG,CAAS;QAHd,kBAAa,GAA0B,IAAI,CAAC;IAIjD,CAAC;IAEG,KAAK,CAAC,MAAM,CAAC,KAA2B;QAC7C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC9C,OAAO,IAAA,4CAA4B,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAEM,KAAK,CAAC,SAAS;QACpB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,UAAU;QACrB,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,UAAU;QACrB,MAAM,aAAa,GAAG,IAAI,SAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,OAAO,CAAC,CAAC;QACvE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAiB,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE1E,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,iBAAiB;QAC5B,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE;YAC/B,OAAO;SACR;QACD,MAAM,aAAa,GAAG,IAAI,SAAG,CAC3B,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,QAAQ,CACxE,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC9B,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE;YAC/B,MAAM,sBAAsB,CAAC;SAC9B;QAED,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAI,CAAC,aAAa,CAAC;QACtC,MAAM,aAAa,GAAG,IAAI,SAAG,CAC3B,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,QAAQ,QAAQ,CACrD,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAiB,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1E,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC;CACF;AArDD,kDAqDC"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ jest.mock('../APICore');
4
+ jest.mock('../help/fileContainer');
5
+ const platform_client_1 = require("@coveo/platform-client");
6
+ const __1 = require("..");
7
+ const APICore_1 = require("../APICore");
8
+ const environment_1 = require("../environment");
9
+ const fileContainer_1 = require("../help/fileContainer");
10
+ const urlUtils_1 = require("../help/urlUtils");
11
+ const streamChunkStrategy_1 = require("./streamChunkStrategy");
12
+ const mockedAPICore = jest.mocked(APICore_1.APICore);
13
+ const mockedPost = jest.fn();
14
+ const platformOptions = {
15
+ region: platform_client_1.Region.US,
16
+ environment: environment_1.PlatformEnvironment.Prod,
17
+ };
18
+ const documentBatch = {
19
+ addOrUpdate: [
20
+ new __1.DocumentBuilder('https://foo.com', 'Foo'),
21
+ new __1.DocumentBuilder('https://bar.com', 'Bar'),
22
+ ],
23
+ delete: [{ documentId: 'some_id', deleteChildren: false }],
24
+ };
25
+ const fileContainerResponse = {
26
+ uploadUri: 'https://fake.upload.url',
27
+ fileId: 'file_id',
28
+ requiredHeaders: { foo: 'bar' },
29
+ };
30
+ const doMockAPICore = () => {
31
+ mockedAPICore.prototype.post.mockImplementation(mockedPost);
32
+ };
33
+ const doAxiosMockFileContainerResponse = () => ({
34
+ data: fileContainerResponse,
35
+ });
36
+ const doAxiosMockOpenStream = () => ({
37
+ data: {
38
+ streamId: 'the_stream_id',
39
+ },
40
+ });
41
+ const mockSuccessAxiosCalls = () => {
42
+ mockedPost.mockImplementation((url) => {
43
+ if (url.match(/chunk/)) {
44
+ return doAxiosMockFileContainerResponse();
45
+ }
46
+ if (url.match(/stream\/open/)) {
47
+ return doAxiosMockOpenStream();
48
+ }
49
+ return { data: {} };
50
+ });
51
+ };
52
+ describe('StreamChunkStrategy', () => {
53
+ let strategy;
54
+ beforeAll(() => {
55
+ doMockAPICore();
56
+ mockSuccessAxiosCalls();
57
+ });
58
+ beforeEach(async () => {
59
+ const builder = new urlUtils_1.StreamUrlBuilder('source-id', 'org-id', platformOptions);
60
+ strategy = new streamChunkStrategy_1.StreamChunkStrategy(builder, new APICore_1.APICore('access_token'));
61
+ await strategy.preUpload();
62
+ await strategy.upload(documentBatch);
63
+ await strategy.postUpload();
64
+ });
65
+ it('should make 3 post calls', () => {
66
+ expect(mockedPost).toBeCalledTimes(3);
67
+ });
68
+ it('should open a stream', () => {
69
+ expect(mockedPost).toHaveBeenNthCalledWith(1, 'https://api.cloud.coveo.com/push/v1/organizations/org-id/sources/source-id/stream/open');
70
+ });
71
+ it('should request a stream chunk', () => {
72
+ expect(mockedPost).toHaveBeenNthCalledWith(2, 'https://api.cloud.coveo.com/push/v1/organizations/org-id/sources/source-id/stream/the_stream_id/chunk');
73
+ });
74
+ it('should close the opened stream', () => {
75
+ expect(mockedPost).toHaveBeenNthCalledWith(3, 'https://api.cloud.coveo.com/push/v1/organizations/org-id/sources/source-id/stream/the_stream_id/close');
76
+ });
77
+ it('should call #uploadContentToFileContainer with file container and batch', () => {
78
+ expect(fileContainer_1.uploadContentToFileContainer).toHaveBeenCalledTimes(1);
79
+ expect(fileContainer_1.uploadContentToFileContainer).toHaveBeenCalledWith(fileContainerResponse, documentBatch);
80
+ });
81
+ });
82
+ //# sourceMappingURL=streamChunkStrategy.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streamChunkStrategy.spec.js","sourceRoot":"","sources":["../../src/uploadStrategy/streamChunkStrategy.spec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coveo/push-api-client",
3
- "version": "2.6.5",
3
+ "version": "2.7.0",
4
4
  "description": "Push API client",
5
5
  "main": "./dist/index.js",
6
6
  "files": [
@@ -14,6 +14,7 @@
14
14
  "abortcontroller-polyfill": "^1.7.1",
15
15
  "axios": "^0.27.0",
16
16
  "dayjs": "^1.10.4",
17
+ "exponential-backoff": "^3.1.0",
17
18
  "isomorphic-fetch": "^3.0.0"
18
19
  },
19
20
  "devDependencies": {
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateBatmans = void 0;
4
- const batmanCloner = (id) => ({
5
- DocumentId: `https://www.themoviedb.org/movie/${id}`,
6
- data: 'Batman (1989) \n Based on the Character created by Bob Kane. \n EXT. CITYSCAPE - NIGHT \n Gotham City. The City of Tomorrow: stark angles, creeping shadows, dense, crowded, as if hell had erupted through the sidewalks. A dangling fat moon shines overhead. \n At the opposite corner of the roof, some fifteen yards away... at the end of a line, a STRANGE BLACK SILHOUETTE is dropping slowly, implacably, into frame...',
7
- fileExtension: '.txt',
8
- title: 'Batman',
9
- year: 1989,
10
- date: '1989-06-13T12:00:00.000Z',
11
- summary: "The Dark Knight of Gotham City begins his war on crime with his first major enemy being the clownishly homicidal Joker, who has seized control of Gotham's underworld.",
12
- tagline: 'Have you ever danced with the devil in the pale moonlight?',
13
- actors: ['Jack Nicholson', 'Michael Keaton', 'Kim Basinger'],
14
- poster: '//image.tmdb.org/t/p/w185_and_h278_bestv2/kBf3g9crrADGMc2AMAMlLBgSm2h.jpg',
15
- });
16
- const generateBatmans = (batmanCount) => {
17
- return Array(batmanCount)
18
- .fill(null)
19
- .map((_, idx) => batmanCloner(idx));
20
- };
21
- exports.generateBatmans = generateBatmans;
22
- //# sourceMappingURL=documentGenerator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"documentGenerator.js","sourceRoot":"","sources":["../../../src/__stub__/largeDocuments/documentGenerator.ts"],"names":[],"mappings":";;;AAAA,MAAM,YAAY,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC;IACpC,UAAU,EAAE,oCAAoC,EAAE,EAAE;IACpD,IAAI,EAAE,qaAAqa;IAC3a,aAAa,EAAE,MAAM;IACrB,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,0BAA0B;IAChC,OAAO,EACL,wKAAwK;IAC1K,OAAO,EAAE,4DAA4D;IACrE,MAAM,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,CAAC;IAC5D,MAAM,EACJ,2EAA2E;CAC9E,CAAC,CAAC;AAEI,MAAM,eAAe,GAAG,CAAC,WAAmB,EAAE,EAAE;IACrD,OAAO,KAAK,CAAC,WAAW,CAAC;SACtB,IAAI,CAAC,IAAI,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AACxC,CAAC,CAAC;AAJW,QAAA,eAAe,mBAI1B"}
@@ -1,12 +0,0 @@
1
- export declare const generateBatmans: (batmanCount: number) => {
2
- DocumentId: string;
3
- data: string;
4
- fileExtension: string;
5
- title: string;
6
- year: number;
7
- date: string;
8
- summary: string;
9
- tagline: string;
10
- actors: string[];
11
- poster: string;
12
- }[];
@@ -1,2 +0,0 @@
1
- import type { AxiosRequestConfig } from 'axios';
2
- export declare const axiosRequestHeaders: (apikey: string) => AxiosRequestConfig;
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.axiosRequestHeaders = void 0;
4
- const axiosRequestHeaders = (apikey) => {
5
- const authorizationHeader = {
6
- Authorization: `Bearer ${apikey}`,
7
- };
8
- const documentsRequestHeaders = Object.assign(Object.assign({}, authorizationHeader), { 'Content-Type': 'application/json', Accept: 'application/json' });
9
- return { headers: documentsRequestHeaders };
10
- };
11
- exports.axiosRequestHeaders = axiosRequestHeaders;
12
- //# sourceMappingURL=axiosUtils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"axiosUtils.js","sourceRoot":"","sources":["../../src/help/axiosUtils.ts"],"names":[],"mappings":";;;AAEO,MAAM,mBAAmB,GAAG,CAAC,MAAc,EAAsB,EAAE;IACxE,MAAM,mBAAmB,GAAG;QAC1B,aAAa,EAAE,UAAU,MAAM,EAAE;KAClC,CAAC;IAEF,MAAM,uBAAuB,mCACxB,mBAAmB,KACtB,cAAc,EAAE,kBAAkB,EAClC,MAAM,EAAE,kBAAkB,GAC3B,CAAC;IAEF,OAAO,EAAC,OAAO,EAAE,uBAAuB,EAAC,CAAC;AAC5C,CAAC,CAAC;AAZW,QAAA,mBAAmB,uBAY9B"}
@@ -1,238 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- /* eslint-disable node/no-unpublished-import */
4
- jest.mock('@coveo/platform-client');
5
- jest.mock('axios');
6
- jest.mock('../fieldAnalyser/fieldAnalyser');
7
- const platform_client_1 = require("@coveo/platform-client");
8
- const axios_1 = require("axios");
9
- const path_1 = require("path");
10
- const process_1 = require("process");
11
- const catalog_1 = require("./catalog");
12
- const __1 = require("..");
13
- const documentGenerator_1 = require("../__stub__/largeDocuments/documentGenerator");
14
- const fs_1 = require("fs");
15
- const mockAxios = axios_1.default;
16
- const mockedFieldAnalyser = jest.mocked(__1.FieldAnalyser);
17
- const mockedPlatformClient = jest.mocked(platform_client_1.default);
18
- const mockCreateSource = jest.fn();
19
- const mockCreateField = jest.fn();
20
- const mockEvaluate = jest.fn();
21
- const mockAnalyserAdd = jest.fn();
22
- const mockAnalyserReport = jest.fn();
23
- const mockedSuccessCallback = jest.fn();
24
- const mockedErrorCallback = jest.fn();
25
- const pathToStub = (0, path_1.join)((0, process_1.cwd)(), 'src', '__stub__');
26
- const expectedDocumentsHeaders = {
27
- headers: {
28
- Accept: 'application/json',
29
- Authorization: 'Bearer the_key',
30
- 'Content-Type': 'application/json',
31
- },
32
- };
33
- const doAxiosMockFileContainerResponse = () => ({
34
- data: {
35
- uploadUri: 'https://fake.upload.url',
36
- fileId: 'file_id',
37
- requiredHeaders: { foo: 'bar' },
38
- },
39
- });
40
- const doAxiosMockOpenStream = () => ({
41
- data: {
42
- streamId: 'the_stream_id',
43
- },
44
- });
45
- const doMockAxiosPut = () => {
46
- mockAxios.put.mockImplementation(() => Promise.resolve());
47
- };
48
- const doMockPlatformClient = () => {
49
- mockedPlatformClient.mockImplementation(() => ({
50
- privilegeEvaluator: { evaluate: mockEvaluate },
51
- source: {
52
- create: mockCreateSource,
53
- },
54
- field: {
55
- createFields: mockCreateField,
56
- },
57
- }));
58
- };
59
- const doMockFieldAnalyser = () => {
60
- mockedFieldAnalyser.mockImplementation(() => ({
61
- add: mockAnalyserAdd,
62
- report: mockAnalyserReport,
63
- }));
64
- };
65
- const mockSuccessAxiosCalls = () => {
66
- mockAxios.post.mockImplementation((url) => {
67
- if (url.match(/chunk/)) {
68
- return Promise.resolve(doAxiosMockFileContainerResponse());
69
- }
70
- if (url.match(/stream\/open/)) {
71
- return Promise.resolve(doAxiosMockOpenStream());
72
- }
73
- return Promise.resolve({ data: {} });
74
- });
75
- };
76
- const mockFailedChunkAxiosCalls = (err) => {
77
- mockAxios.post.mockImplementation((url) => {
78
- if (url.match(/chunk/)) {
79
- return Promise.reject({ message: err });
80
- }
81
- if (url.match(/stream\/open/)) {
82
- return Promise.resolve(doAxiosMockOpenStream());
83
- }
84
- return Promise.resolve({ data: {} });
85
- });
86
- };
87
- const basicStreamExpectations = () => {
88
- it('should open a stream', async () => {
89
- expect(mockAxios.post).toHaveBeenNthCalledWith(1, 'https://api.cloud.coveo.com/push/v1/organizations/the_org/sources/the_id/stream/open', {}, expectedDocumentsHeaders);
90
- });
91
- it('should request a stream chunk', async () => {
92
- expect(mockAxios.post).toHaveBeenNthCalledWith(2, 'https://api.cloud.coveo.com/push/v1/organizations/the_org/sources/the_id/stream/the_stream_id/chunk', {}, expectedDocumentsHeaders);
93
- });
94
- it('should close a stream', async () => {
95
- expect(mockAxios.post).toHaveBeenLastCalledWith('https://api.cloud.coveo.com/push/v1/organizations/the_org/sources/the_id/stream/the_stream_id/close', {}, expectedDocumentsHeaders);
96
- });
97
- };
98
- describe('CatalogSource - Stream', () => {
99
- let source;
100
- beforeAll(() => {
101
- doMockPlatformClient();
102
- doMockFieldAnalyser();
103
- doMockAxiosPut();
104
- });
105
- beforeEach(() => {
106
- mockEvaluate.mockResolvedValue({ approved: true });
107
- source = new catalog_1.CatalogSource('the_key', 'the_org');
108
- });
109
- describe('when streaming data from a batch', () => {
110
- beforeEach(async () => {
111
- mockSuccessAxiosCalls();
112
- await source.batchStreamDocuments('the_id', {
113
- addOrUpdate: [new __1.DocumentBuilder('uri', 'title')],
114
- delete: [],
115
- }, { createFields: false });
116
- });
117
- afterAll(() => {
118
- mockAxios.post.mockReset();
119
- });
120
- basicStreamExpectations();
121
- });
122
- describe('when streaming data from a file', () => {
123
- beforeEach(async () => {
124
- mockSuccessAxiosCalls();
125
- await source
126
- .batchStreamDocumentsFromFiles('the_id', [(0, path_1.join)(pathToStub, 'mixdocuments')], { createFields: false })
127
- .batch();
128
- });
129
- afterAll(() => {
130
- mockAxios.post.mockReset();
131
- });
132
- basicStreamExpectations();
133
- it('should upload content to stream chunk', async () => {
134
- expect(mockAxios.put).toHaveBeenCalledWith('https://fake.upload.url/', expect.objectContaining({
135
- addOrUpdate: expect.arrayContaining([
136
- expect.objectContaining({
137
- documentId: 'https://www.themoviedb.org/movie/268',
138
- }),
139
- expect.objectContaining({
140
- documentId: 'https://www.themoviedb.org/movie/999',
141
- }),
142
- ]),
143
- delete: expect.arrayContaining([]),
144
- }), {
145
- headers: {
146
- foo: 'bar',
147
- },
148
- maxBodyLength: 256e6,
149
- });
150
- });
151
- });
152
- describe('when streaming large amount of data', () => {
153
- beforeAll(() => {
154
- (0, fs_1.mkdirSync)((0, path_1.join)(pathToStub, 'batman_temp_dir'));
155
- (0, fs_1.writeFileSync)((0, path_1.join)(pathToStub, 'batman_temp_dir', 'mucho_batmans.json'), JSON.stringify((0, documentGenerator_1.generateBatmans)(10e3), null, 2) // Enough batmans so they can be sent in multiple chunks
156
- );
157
- });
158
- beforeEach(async () => {
159
- mockSuccessAxiosCalls();
160
- await source
161
- .batchStreamDocumentsFromFiles('the_id', [(0, path_1.join)(pathToStub, 'batman_temp_dir', 'mucho_batmans.json')], { createFields: false })
162
- .batch();
163
- });
164
- afterAll(() => {
165
- (0, fs_1.rmSync)((0, path_1.join)(pathToStub, 'batman_temp_dir'), {
166
- recursive: true,
167
- });
168
- mockAxios.post.mockReset();
169
- });
170
- basicStreamExpectations();
171
- });
172
- describe('when streaming data from local files', () => {
173
- beforeEach(async () => {
174
- mockSuccessAxiosCalls();
175
- });
176
- afterAll(() => {
177
- mockAxios.post.mockReset();
178
- });
179
- describe('API call expectations', () => {
180
- beforeEach(async () => {
181
- mockSuccessAxiosCalls();
182
- await source
183
- .batchStreamDocumentsFromFiles('the_id', [(0, path_1.join)(pathToStub, 'mixdocuments')], { createFields: false })
184
- .batch();
185
- });
186
- basicStreamExpectations();
187
- it('should upload documents from local file', async () => {
188
- expect(mockAxios.put).toHaveBeenCalledWith('https://fake.upload.url/', expect.objectContaining({
189
- addOrUpdate: expect.arrayContaining([
190
- expect.objectContaining({
191
- documentId: 'https://www.themoviedb.org/movie/268',
192
- }),
193
- expect.objectContaining({
194
- documentId: 'https://www.themoviedb.org/movie/999',
195
- }),
196
- ]),
197
- delete: expect.arrayContaining([]),
198
- }), {
199
- headers: {
200
- foo: 'bar',
201
- },
202
- maxBodyLength: 256e6,
203
- });
204
- });
205
- });
206
- it('should call the callback without error when uploading documents', async () => {
207
- await source
208
- .batchStreamDocumentsFromFiles('the_id', [(0, path_1.join)(pathToStub, 'mixdocuments')], { createFields: false })
209
- .onBatchError(mockedErrorCallback)
210
- .batch();
211
- expect(mockedErrorCallback).not.toHaveBeenCalled();
212
- });
213
- it('should only push JSON files', async () => {
214
- await source
215
- .batchStreamDocumentsFromFiles('the_id', [(0, path_1.join)(pathToStub, 'mixdocuments')], { createFields: false })
216
- .onBatchUpload(mockedSuccessCallback)
217
- .batch();
218
- expect(mockedSuccessCallback).toHaveBeenCalledWith(expect.objectContaining({ files: ['valid.json'] }));
219
- });
220
- it('should call the errorCallback on a failure from the API', async () => {
221
- mockAxios.post.mockReset();
222
- mockFailedChunkAxiosCalls('Error Message');
223
- await source
224
- .batchStreamDocumentsFromFiles('the_id', [(0, path_1.join)(pathToStub, 'mixdocuments')], { createFields: false })
225
- .onBatchError(mockedErrorCallback)
226
- .batch();
227
- expect(mockedErrorCallback).toHaveBeenCalledWith({
228
- message: 'Error Message',
229
- }, expect.anything());
230
- });
231
- it('should throw an error if the path is invalid', () => {
232
- expect(() => source
233
- .batchStreamDocumentsFromFiles('the_id', ['path/to/invalid/document'], { createFields: false })
234
- .batch()).rejects.toThrow("no such file or directory, lstat 'path/to/invalid/document'");
235
- });
236
- });
237
- });
238
- //# sourceMappingURL=catalog.stream.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"catalog.stream.spec.js","sourceRoot":"","sources":["../../src/source/catalog.stream.spec.ts"],"names":[],"mappings":"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"}