@tetrascience-npm/ts-connectors-sdk 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/CHANGELOG.md +201 -0
  2. package/LICENSE +201 -0
  3. package/README.md +123 -0
  4. package/dist/api-tests/configuration.test.d.ts +2 -0
  5. package/dist/api-tests/configuration.test.d.ts.map +1 -0
  6. package/dist/api-tests/configuration.test.js +49 -0
  7. package/dist/api-tests/configuration.test.js.map +1 -0
  8. package/dist/api-tests/connector-lifetime.test.d.ts +2 -0
  9. package/dist/api-tests/connector-lifetime.test.d.ts.map +1 -0
  10. package/dist/api-tests/connector-lifetime.test.js +64 -0
  11. package/dist/api-tests/connector-lifetime.test.js.map +1 -0
  12. package/dist/api-tests/connector-shutdown.test.d.ts +2 -0
  13. package/dist/api-tests/connector-shutdown.test.d.ts.map +1 -0
  14. package/dist/api-tests/connector-shutdown.test.js +76 -0
  15. package/dist/api-tests/connector-shutdown.test.js.map +1 -0
  16. package/dist/api-tests/fixture/assertions.d.ts +4 -0
  17. package/dist/api-tests/fixture/assertions.d.ts.map +1 -0
  18. package/dist/api-tests/fixture/assertions.js +8 -0
  19. package/dist/api-tests/fixture/assertions.js.map +1 -0
  20. package/dist/api-tests/fixture/config.d.ts +65 -0
  21. package/dist/api-tests/fixture/config.d.ts.map +1 -0
  22. package/dist/api-tests/fixture/config.js +24 -0
  23. package/dist/api-tests/fixture/config.js.map +1 -0
  24. package/dist/api-tests/fixture/connector-api.d.ts +126 -0
  25. package/dist/api-tests/fixture/connector-api.d.ts.map +1 -0
  26. package/dist/api-tests/fixture/connector-api.js +151 -0
  27. package/dist/api-tests/fixture/connector-api.js.map +1 -0
  28. package/dist/api-tests/fixture/connectors/test-connector.d.ts +39 -0
  29. package/dist/api-tests/fixture/connectors/test-connector.d.ts.map +1 -0
  30. package/dist/api-tests/fixture/connectors/test-connector.js +188 -0
  31. package/dist/api-tests/fixture/connectors/test-connector.js.map +1 -0
  32. package/dist/api-tests/fixture/create-http-client.d.ts +6 -0
  33. package/dist/api-tests/fixture/create-http-client.d.ts.map +1 -0
  34. package/dist/api-tests/fixture/create-http-client.js +52 -0
  35. package/dist/api-tests/fixture/create-http-client.js.map +1 -0
  36. package/dist/api-tests/fixture/fixture.d.ts +34 -0
  37. package/dist/api-tests/fixture/fixture.d.ts.map +1 -0
  38. package/dist/api-tests/fixture/fixture.js +62 -0
  39. package/dist/api-tests/fixture/fixture.js.map +1 -0
  40. package/dist/api-tests/fixture/test-connector-factory.d.ts +21 -0
  41. package/dist/api-tests/fixture/test-connector-factory.d.ts.map +1 -0
  42. package/dist/api-tests/fixture/test-connector-factory.js +78 -0
  43. package/dist/api-tests/fixture/test-connector-factory.js.map +1 -0
  44. package/dist/api-tests/label-validation.test.d.ts +2 -0
  45. package/dist/api-tests/label-validation.test.d.ts.map +1 -0
  46. package/dist/api-tests/label-validation.test.js +158 -0
  47. package/dist/api-tests/label-validation.test.js.map +1 -0
  48. package/dist/api-tests/standalone-cloudwatch-logs.test.d.ts +2 -0
  49. package/dist/api-tests/standalone-cloudwatch-logs.test.d.ts.map +1 -0
  50. package/dist/api-tests/standalone-cloudwatch-logs.test.js +32 -0
  51. package/dist/api-tests/standalone-cloudwatch-logs.test.js.map +1 -0
  52. package/dist/api-tests/user-agent.test.d.ts +2 -0
  53. package/dist/api-tests/user-agent.test.d.ts.map +1 -0
  54. package/dist/api-tests/user-agent.test.js +191 -0
  55. package/dist/api-tests/user-agent.test.js.map +1 -0
  56. package/dist/src/api.d.ts +353 -0
  57. package/dist/src/api.d.ts.map +1 -0
  58. package/dist/src/api.js +278 -0
  59. package/dist/src/api.js.map +1 -0
  60. package/dist/src/auth/auth-token-provider.d.ts +7 -0
  61. package/dist/src/auth/auth-token-provider.d.ts.map +1 -0
  62. package/dist/src/auth/auth-token-provider.js +3 -0
  63. package/dist/src/auth/auth-token-provider.js.map +1 -0
  64. package/dist/src/auth/aws-client-provider.d.ts +11 -0
  65. package/dist/src/auth/aws-client-provider.d.ts.map +1 -0
  66. package/dist/src/auth/aws-client-provider.js +3 -0
  67. package/dist/src/auth/aws-client-provider.js.map +1 -0
  68. package/dist/src/auth/aws-env-client-provider.d.ts +20 -0
  69. package/dist/src/auth/aws-env-client-provider.d.ts.map +1 -0
  70. package/dist/src/auth/aws-env-client-provider.js +69 -0
  71. package/dist/src/auth/aws-env-client-provider.js.map +1 -0
  72. package/dist/src/auth/aws-refresh-client-provider.d.ts +26 -0
  73. package/dist/src/auth/aws-refresh-client-provider.d.ts.map +1 -0
  74. package/dist/src/auth/aws-refresh-client-provider.js +111 -0
  75. package/dist/src/auth/aws-refresh-client-provider.js.map +1 -0
  76. package/dist/src/auth/aws-secret-auth-token-provider.d.ts +9 -0
  77. package/dist/src/auth/aws-secret-auth-token-provider.d.ts.map +1 -0
  78. package/dist/src/auth/aws-secret-auth-token-provider.js +58 -0
  79. package/dist/src/auth/aws-secret-auth-token-provider.js.map +1 -0
  80. package/dist/src/auth/index.d.ts +7 -0
  81. package/dist/src/auth/index.d.ts.map +1 -0
  82. package/dist/src/auth/index.js +23 -0
  83. package/dist/src/auth/index.js.map +1 -0
  84. package/dist/src/auth/predefined-auth-token-provider.d.ts +7 -0
  85. package/dist/src/auth/predefined-auth-token-provider.d.ts.map +1 -0
  86. package/dist/src/auth/predefined-auth-token-provider.js +24 -0
  87. package/dist/src/auth/predefined-auth-token-provider.js.map +1 -0
  88. package/dist/src/auth/user-supplied-auth-token-provider.d.ts +7 -0
  89. package/dist/src/auth/user-supplied-auth-token-provider.d.ts.map +1 -0
  90. package/dist/src/auth/user-supplied-auth-token-provider.js +24 -0
  91. package/dist/src/auth/user-supplied-auth-token-provider.js.map +1 -0
  92. package/dist/src/certificates.d.ts +6 -0
  93. package/dist/src/certificates.d.ts.map +1 -0
  94. package/dist/src/certificates.js +88 -0
  95. package/dist/src/certificates.js.map +1 -0
  96. package/dist/src/checksums.d.ts +50 -0
  97. package/dist/src/checksums.d.ts.map +1 -0
  98. package/dist/src/checksums.js +32 -0
  99. package/dist/src/checksums.js.map +1 -0
  100. package/dist/src/config.d.ts +41 -0
  101. package/dist/src/config.d.ts.map +1 -0
  102. package/dist/src/config.js +35 -0
  103. package/dist/src/config.js.map +1 -0
  104. package/dist/src/connector.d.ts +101 -0
  105. package/dist/src/connector.d.ts.map +1 -0
  106. package/dist/src/connector.js +374 -0
  107. package/dist/src/connector.js.map +1 -0
  108. package/dist/src/get-log-event-size.d.ts +3 -0
  109. package/dist/src/get-log-event-size.d.ts.map +1 -0
  110. package/dist/src/get-log-event-size.js +9 -0
  111. package/dist/src/get-log-event-size.js.map +1 -0
  112. package/dist/src/https-proxy-agent.d.ts +15 -0
  113. package/dist/src/https-proxy-agent.d.ts.map +1 -0
  114. package/dist/src/https-proxy-agent.js +31 -0
  115. package/dist/src/https-proxy-agent.js.map +1 -0
  116. package/dist/src/index.d.ts +9 -0
  117. package/dist/src/index.d.ts.map +1 -0
  118. package/dist/src/index.js +25 -0
  119. package/dist/src/index.js.map +1 -0
  120. package/dist/src/logger.d.ts +60 -0
  121. package/dist/src/logger.d.ts.map +1 -0
  122. package/dist/src/logger.js +284 -0
  123. package/dist/src/logger.js.map +1 -0
  124. package/dist/src/manifest.d.ts +4 -0
  125. package/dist/src/manifest.d.ts.map +1 -0
  126. package/dist/src/manifest.js +30 -0
  127. package/dist/src/manifest.js.map +1 -0
  128. package/dist/src/metrics.d.ts +59 -0
  129. package/dist/src/metrics.d.ts.map +1 -0
  130. package/dist/src/metrics.js +125 -0
  131. package/dist/src/metrics.js.map +1 -0
  132. package/dist/src/polling-connector.d.ts +50 -0
  133. package/dist/src/polling-connector.d.ts.map +1 -0
  134. package/dist/src/polling-connector.js +169 -0
  135. package/dist/src/polling-connector.js.map +1 -0
  136. package/dist/src/schemas.d.ts +77 -0
  137. package/dist/src/schemas.d.ts.map +1 -0
  138. package/dist/src/schemas.js +80 -0
  139. package/dist/src/schemas.js.map +1 -0
  140. package/dist/src/streamToString.d.ts +3 -0
  141. package/dist/src/streamToString.d.ts.map +1 -0
  142. package/dist/src/streamToString.js +25 -0
  143. package/dist/src/streamToString.js.map +1 -0
  144. package/dist/src/tdp-client.d.ts +307 -0
  145. package/dist/src/tdp-client.d.ts.map +1 -0
  146. package/dist/src/tdp-client.js +823 -0
  147. package/dist/src/tdp-client.js.map +1 -0
  148. package/dist/src/to-cloudwatch-log-event.d.ts +4 -0
  149. package/dist/src/to-cloudwatch-log-event.d.ts.map +1 -0
  150. package/dist/src/to-cloudwatch-log-event.js +10 -0
  151. package/dist/src/to-cloudwatch-log-event.js.map +1 -0
  152. package/dist/src/types.d.ts +57 -0
  153. package/dist/src/types.d.ts.map +1 -0
  154. package/dist/src/types.js +30 -0
  155. package/dist/src/types.js.map +1 -0
  156. package/dist/src/utils.d.ts +10 -0
  157. package/dist/src/utils.d.ts.map +1 -0
  158. package/dist/src/utils.js +20 -0
  159. package/dist/src/utils.js.map +1 -0
  160. package/dist/test/api.test.d.ts +2 -0
  161. package/dist/test/api.test.d.ts.map +1 -0
  162. package/dist/test/api.test.js +245 -0
  163. package/dist/test/api.test.js.map +1 -0
  164. package/dist/test/auth/aws-env-client-provider.test.d.ts +2 -0
  165. package/dist/test/auth/aws-env-client-provider.test.d.ts.map +1 -0
  166. package/dist/test/auth/aws-env-client-provider.test.js +56 -0
  167. package/dist/test/auth/aws-env-client-provider.test.js.map +1 -0
  168. package/dist/test/auth/aws-refresh-client-provider.test.d.ts +2 -0
  169. package/dist/test/auth/aws-refresh-client-provider.test.d.ts.map +1 -0
  170. package/dist/test/auth/aws-refresh-client-provider.test.js +118 -0
  171. package/dist/test/auth/aws-refresh-client-provider.test.js.map +1 -0
  172. package/dist/test/auth/aws-secret-auth-token-provider.test.d.ts +2 -0
  173. package/dist/test/auth/aws-secret-auth-token-provider.test.d.ts.map +1 -0
  174. package/dist/test/auth/aws-secret-auth-token-provider.test.js +74 -0
  175. package/dist/test/auth/aws-secret-auth-token-provider.test.js.map +1 -0
  176. package/dist/test/auth/predefined-auth-token-provider.test.d.ts +2 -0
  177. package/dist/test/auth/predefined-auth-token-provider.test.d.ts.map +1 -0
  178. package/dist/test/auth/predefined-auth-token-provider.test.js +24 -0
  179. package/dist/test/auth/predefined-auth-token-provider.test.js.map +1 -0
  180. package/dist/test/auth/user-supplied-auth-token-provider.test.d.ts +2 -0
  181. package/dist/test/auth/user-supplied-auth-token-provider.test.d.ts.map +1 -0
  182. package/dist/test/auth/user-supplied-auth-token-provider.test.js +24 -0
  183. package/dist/test/auth/user-supplied-auth-token-provider.test.js.map +1 -0
  184. package/dist/test/certificates.test.d.ts +2 -0
  185. package/dist/test/certificates.test.d.ts.map +1 -0
  186. package/dist/test/certificates.test.js +83 -0
  187. package/dist/test/certificates.test.js.map +1 -0
  188. package/dist/test/checksums.test.d.ts +2 -0
  189. package/dist/test/checksums.test.d.ts.map +1 -0
  190. package/dist/test/checksums.test.js +29 -0
  191. package/dist/test/checksums.test.js.map +1 -0
  192. package/dist/test/connector-shutdown.test.d.ts +2 -0
  193. package/dist/test/connector-shutdown.test.d.ts.map +1 -0
  194. package/dist/test/connector-shutdown.test.js +145 -0
  195. package/dist/test/connector-shutdown.test.js.map +1 -0
  196. package/dist/test/connector.test.d.ts +2 -0
  197. package/dist/test/connector.test.d.ts.map +1 -0
  198. package/dist/test/connector.test.js +286 -0
  199. package/dist/test/connector.test.js.map +1 -0
  200. package/dist/test/healthstatus-enum-values.test.d.ts +2 -0
  201. package/dist/test/healthstatus-enum-values.test.d.ts.map +1 -0
  202. package/dist/test/healthstatus-enum-values.test.js +18 -0
  203. package/dist/test/healthstatus-enum-values.test.js.map +1 -0
  204. package/dist/test/logger.test.d.ts +2 -0
  205. package/dist/test/logger.test.d.ts.map +1 -0
  206. package/dist/test/logger.test.js +301 -0
  207. package/dist/test/logger.test.js.map +1 -0
  208. package/dist/test/manifest.test.d.ts +2 -0
  209. package/dist/test/manifest.test.d.ts.map +1 -0
  210. package/dist/test/manifest.test.js +55 -0
  211. package/dist/test/manifest.test.js.map +1 -0
  212. package/dist/test/polling-connector.test.d.ts +2 -0
  213. package/dist/test/polling-connector.test.d.ts.map +1 -0
  214. package/dist/test/polling-connector.test.js +170 -0
  215. package/dist/test/polling-connector.test.js.map +1 -0
  216. package/dist/test/schemas.test.d.ts +2 -0
  217. package/dist/test/schemas.test.d.ts.map +1 -0
  218. package/dist/test/schemas.test.js +211 -0
  219. package/dist/test/schemas.test.js.map +1 -0
  220. package/dist/test/tdp-client.test.d.ts +2 -0
  221. package/dist/test/tdp-client.test.d.ts.map +1 -0
  222. package/dist/test/tdp-client.test.js +1204 -0
  223. package/dist/test/tdp-client.test.js.map +1 -0
  224. package/dist/test/test-connector/index.d.ts +2 -0
  225. package/dist/test/test-connector/index.d.ts.map +1 -0
  226. package/dist/test/test-connector/index.js +23 -0
  227. package/dist/test/test-connector/index.js.map +1 -0
  228. package/dist/test/test-connector/test-connector.d.ts +7 -0
  229. package/dist/test/test-connector/test-connector.d.ts.map +1 -0
  230. package/dist/test/test-connector/test-connector.js +32 -0
  231. package/dist/test/test-connector/test-connector.js.map +1 -0
  232. package/dist/test/test-utils/api-mocks.d.ts +6 -0
  233. package/dist/test/test-utils/api-mocks.d.ts.map +1 -0
  234. package/dist/test/test-utils/api-mocks.js +19 -0
  235. package/dist/test/test-utils/api-mocks.js.map +1 -0
  236. package/dist/test/test-utils/aws-mocks.d.ts +8 -0
  237. package/dist/test/test-utils/aws-mocks.d.ts.map +1 -0
  238. package/dist/test/test-utils/aws-mocks.js +39 -0
  239. package/dist/test/test-utils/aws-mocks.js.map +1 -0
  240. package/dist/test/test-utils/regex.d.ts +2 -0
  241. package/dist/test/test-utils/regex.d.ts.map +1 -0
  242. package/dist/test/test-utils/regex.js +7 -0
  243. package/dist/test/test-utils/regex.js.map +1 -0
  244. package/dist/test/utils.test.d.ts +2 -0
  245. package/dist/test/utils.test.d.ts.map +1 -0
  246. package/dist/test/utils.test.js +17 -0
  247. package/dist/test/utils.test.js.map +1 -0
  248. package/dist/tsconfig.tsbuildinfo +1 -0
  249. package/dist/vitest.config.d.mts +3 -0
  250. package/dist/vitest.config.d.mts.map +1 -0
  251. package/dist/vitest.config.mjs +20 -0
  252. package/dist/vitest.config.mjs.map +1 -0
  253. package/package.json +133 -0
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.TestConnector = void 0;
16
+ const client_cloudwatch_logs_1 = require("@aws-sdk/client-cloudwatch-logs");
17
+ const async_retry_1 = __importDefault(require("async-retry"));
18
+ const lodash_1 = __importDefault(require("lodash"));
19
+ const uuid_1 = require("uuid");
20
+ const index_js_1 = require("../../../src/index.js");
21
+ class TestConnector extends index_js_1.Connector {
22
+ get isShutdown() {
23
+ return this._isShutdown;
24
+ }
25
+ get updateCounts() {
26
+ return this._updateCounts;
27
+ }
28
+ get configValidationAttempts() {
29
+ return lodash_1.default.cloneDeep(this._configValidationAttempts);
30
+ }
31
+ constructor(tdpClient, options = {}) {
32
+ super(tdpClient, options);
33
+ this.receivedCommands = [];
34
+ this._isShutdown = false;
35
+ this.logEvents = [];
36
+ this.logsClient = new client_cloudwatch_logs_1.CloudWatchLogsClient({});
37
+ this._updateCounts = 0;
38
+ this._configValidationAttempts = [];
39
+ this.commandEventListener = (cmd) => {
40
+ this.receivedCommands.push(cmd);
41
+ };
42
+ this.tdpClient.commands.addListener('command', this.commandEventListener);
43
+ // @ts-expect-error - overriding private method for test purposes
44
+ const originalWriteMethod = this.tdpClient.logger.write;
45
+ // @ts-expect-error - overriding private method for test purposes
46
+ this.tdpClient.logger.write = (event) => {
47
+ originalWriteMethod.call(this.tdpClient.logger, event);
48
+ this.logEvents.push(event);
49
+ };
50
+ }
51
+ getLogEvents() {
52
+ return [...this.logEvents];
53
+ }
54
+ flushReceivedCommands() {
55
+ const commands = this.receivedCommands.splice(0, this.receivedCommands.length);
56
+ return commands;
57
+ }
58
+ getReceivedCommands() {
59
+ const commands = [...this.receivedCommands];
60
+ return commands;
61
+ }
62
+ waitForCommand(action) {
63
+ return __awaiter(this, void 0, void 0, function* () {
64
+ return (0, async_retry_1.default)((bail, attempt) => {
65
+ const command = this.receivedCommands.find((cmd) => cmd.action === action);
66
+ if (!command && attempt < 25) {
67
+ throw new Error(`Command ${action} not received`);
68
+ }
69
+ return command;
70
+ }, { maxTimeout: 5000, retries: 25 });
71
+ });
72
+ }
73
+ shutdown() {
74
+ const _super = Object.create(null, {
75
+ shutdown: { get: () => super.shutdown }
76
+ });
77
+ return __awaiter(this, void 0, void 0, function* () {
78
+ this.tdpClient.commands.removeListener('command', this.commandEventListener);
79
+ yield _super.shutdown.call(this);
80
+ });
81
+ }
82
+ onConnectorUpdated() {
83
+ this._updateCounts++;
84
+ }
85
+ uploadFile(config_1) {
86
+ return __awaiter(this, arguments, void 0, function* (config, opts = {}) {
87
+ var _a;
88
+ const now = Date.now();
89
+ const filepath = `/${config.TEST_RUN_ID}/test-file-${now}.txt`;
90
+ const fileId = (0, uuid_1.v4)();
91
+ const uniqueExternalId = (0, uuid_1.v4)();
92
+ const apiFile = yield this.tdpClient.saveFile({
93
+ filepath,
94
+ uniqueExternalId,
95
+ id: fileId,
96
+ status: index_js_1.ProcessingStatus.PROCESSING,
97
+ });
98
+ const content = `File uploaded at ${now} by test run ${config.TEST_RUN_ID}`;
99
+ try {
100
+ yield this.tdpClient.uploadFile({
101
+ fileId,
102
+ content,
103
+ filepath: apiFile.filepath,
104
+ labels: opts.labels,
105
+ }, (_a = opts.strictMTLValidation) !== null && _a !== void 0 ? _a : false);
106
+ }
107
+ catch (_b) {
108
+ try {
109
+ yield this.tdpClient.saveFile({
110
+ id: fileId,
111
+ uniqueExternalId,
112
+ status: index_js_1.ProcessingStatus.ERROR,
113
+ errorMessage: 'Failed to upload file',
114
+ });
115
+ }
116
+ catch (_c) { }
117
+ return {
118
+ fileId: apiFile.id,
119
+ status: index_js_1.ProcessingStatus.ERROR,
120
+ };
121
+ }
122
+ yield this.tdpClient.saveFile({
123
+ id: fileId,
124
+ uniqueExternalId,
125
+ status: index_js_1.ProcessingStatus.SUCCESS,
126
+ });
127
+ return {
128
+ fileId: apiFile.id,
129
+ status: index_js_1.ProcessingStatus.SUCCESS,
130
+ };
131
+ });
132
+ }
133
+ getCloudwatchLogEvents(minimumLogEventCount) {
134
+ return __awaiter(this, void 0, void 0, function* () {
135
+ return (0, async_retry_1.default)(() => __awaiter(this, void 0, void 0, function* () {
136
+ var _a;
137
+ const logStreamResponse = yield this.logsClient.send(new client_cloudwatch_logs_1.DescribeLogStreamsCommand({
138
+ logGroupName: this.tdpClient.logger.logGroupName,
139
+ logStreamNamePrefix: this.tdpClient.logger.logStreamName,
140
+ }));
141
+ const logStream = (_a = logStreamResponse.logStreams) === null || _a === void 0 ? void 0 : _a[0];
142
+ if (!logStream) {
143
+ throw new Error(`Log stream ${this.tdpClient.logger.logStreamName} not found`);
144
+ }
145
+ const logEventsResponse = yield this.logsClient.send(new client_cloudwatch_logs_1.GetLogEventsCommand({
146
+ logGroupName: this.tdpClient.logger.logGroupName,
147
+ logStreamName: logStream.logStreamName,
148
+ }));
149
+ const logEvents = logEventsResponse.events || [];
150
+ if (logEvents.length < minimumLogEventCount) {
151
+ throw new Error(`Expected at least ${minimumLogEventCount} log events, found ${logEvents.length}`);
152
+ }
153
+ return logEvents.map((e) => JSON.parse(e.message));
154
+ }), { minTimeout: 30 * 1000, maxTimeout: 30 * 1000, retries: 15 });
155
+ });
156
+ }
157
+ validateConfig(config) {
158
+ const errors = [];
159
+ if (!config.username) {
160
+ errors.push({
161
+ name: 'username',
162
+ error: 'Username is required',
163
+ });
164
+ }
165
+ else if (config.username !== 'test') {
166
+ errors.push({
167
+ name: 'username',
168
+ error: 'Invalid username',
169
+ });
170
+ }
171
+ const validationResult = errors.length
172
+ ? {
173
+ valid: false,
174
+ error: 'Invalid configuration',
175
+ fields: errors,
176
+ }
177
+ : {
178
+ valid: true,
179
+ };
180
+ this._configValidationAttempts.push({ config, result: validationResult });
181
+ return validationResult;
182
+ }
183
+ onShutdown() {
184
+ this._isShutdown = true;
185
+ }
186
+ }
187
+ exports.TestConnector = TestConnector;
188
+ //# sourceMappingURL=test-connector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-connector.js","sourceRoot":"","sources":["../../../../api-tests/fixture/connectors/test-connector.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,4EAAuH;AACvH,8DAAgC;AAChC,oDAAuB;AACvB,+BAAoC;AAEpC,oDAW+B;AAQ/B,MAAa,aAAc,SAAQ,oBAAS;IAU1C,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,IAAI,wBAAwB;QAC1B,OAAO,gBAAC,CAAC,SAAS,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACrD,CAAC;IAED,YAAY,SAAoB,EAAE,UAA4B,EAAE;QAC9D,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAtBX,qBAAgB,GAAqB,EAAE,CAAC;QAEjD,gBAAW,GAAG,KAAK,CAAC;QACX,cAAS,GAAe,EAAE,CAAC;QAC3B,eAAU,GAAyB,IAAI,6CAAoB,CAAC,EAAE,CAAC,CAAC;QACzE,kBAAa,GAAW,CAAC,CAAC;QAEjB,8BAAyB,GAAsD,EAAE,CAAC;QAgBjG,IAAI,CAAC,oBAAoB,GAAG,CAAC,GAAG,EAAE,EAAE;YAClC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAE1E,iEAAiE;QACjE,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;QACxD,iEAAiE;QACjE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,KAAe,EAAE,EAAE;YAChD,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACvD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC;IACJ,CAAC;IAED,YAAY;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED,qBAAqB;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC/E,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,mBAAmB;QACjB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC5C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEK,cAAc,CAAC,MAAqB;;YACxC,OAAO,IAAA,qBAAK,EACV,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;gBAChB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;gBAC3E,IAAI,CAAC,OAAO,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;oBAC7B,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,eAAe,CAAC,CAAC;gBACpD,CAAC;gBAED,OAAO,OAAO,CAAC;YACjB,CAAC,EACD,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAClC,CAAC;QACJ,CAAC;KAAA;IAEc,QAAQ;;;;;YACrB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAC7E,MAAM,OAAM,QAAQ,WAAE,CAAC;QACzB,CAAC;KAAA;IAES,kBAAkB;QAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEK,UAAU;6DAAC,MAAmC,EAAE,OAAsB,EAAE;;YAC5E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,WAAW,cAAc,GAAG,MAAM,CAAC;YAC/D,MAAM,MAAM,GAAG,IAAA,SAAM,GAAE,CAAC;YACxB,MAAM,gBAAgB,GAAG,IAAA,SAAM,GAAE,CAAC;YAElC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;gBAC5C,QAAQ;gBACR,gBAAgB;gBAChB,EAAE,EAAE,MAAM;gBACV,MAAM,EAAE,2BAAgB,CAAC,UAAU;aACpC,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,oBAAoB,GAAG,gBAAgB,MAAM,CAAC,WAAW,EAAE,CAAC;YAE5E,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAC7B;oBACE,MAAM;oBACN,OAAO;oBACP,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,EACD,MAAA,IAAI,CAAC,mBAAmB,mCAAI,KAAK,CAClC,CAAC;YACJ,CAAC;YAAC,WAAM,CAAC;gBACP,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;wBAC5B,EAAE,EAAE,MAAM;wBACV,gBAAgB;wBAChB,MAAM,EAAE,2BAAgB,CAAC,KAAK;wBAC9B,YAAY,EAAE,uBAAuB;qBACtC,CAAC,CAAC;gBACL,CAAC;gBAAC,WAAM,CAAC,CAAA,CAAC;gBAEV,OAAO;oBACL,MAAM,EAAE,OAAO,CAAC,EAAE;oBAClB,MAAM,EAAE,2BAAgB,CAAC,KAAK;iBAC/B,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;gBAC5B,EAAE,EAAE,MAAM;gBACV,gBAAgB;gBAChB,MAAM,EAAE,2BAAgB,CAAC,OAAO;aACjC,CAAC,CAAC;YAEH,OAAO;gBACL,MAAM,EAAE,OAAO,CAAC,EAAE;gBAClB,MAAM,EAAE,2BAAgB,CAAC,OAAO;aACjC,CAAC;QACJ,CAAC;KAAA;IAEK,sBAAsB,CAAC,oBAA4B;;YACvD,OAAO,IAAA,qBAAK,EACV,GAAS,EAAE;;gBACT,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAClD,IAAI,kDAAyB,CAAC;oBAC5B,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY;oBAChD,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa;iBACzD,CAAC,CACH,CAAC;gBAEF,MAAM,SAAS,GAAG,MAAA,iBAAiB,CAAC,UAAU,0CAAG,CAAC,CAAC,CAAC;gBACpD,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,YAAY,CAAC,CAAC;gBACjF,CAAC;gBAED,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAClD,IAAI,4CAAmB,CAAC;oBACtB,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY;oBAChD,aAAa,EAAE,SAAS,CAAC,aAAc;iBACxC,CAAC,CACH,CAAC;gBAEF,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,IAAI,EAAE,CAAC;gBACjD,IAAI,SAAS,CAAC,MAAM,GAAG,oBAAoB,EAAE,CAAC;oBAC5C,MAAM,IAAI,KAAK,CAAC,qBAAqB,oBAAoB,sBAAsB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;gBACrG,CAAC;gBAED,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAQ,CAAwC,CAAC,CAAC;YAC7F,CAAC,CAAA,EACD,EAAE,UAAU,EAAE,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAC9D,CAAC;QACJ,CAAC;KAAA;IAEkB,cAAc,CAAC,MAAW;QAC3C,MAAM,MAAM,GAA2B,EAAE,CAAC;QAE1C,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,sBAAsB;aAC9B,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,kBAAkB;aAC1B,CAAC,CAAC;QACL,CAAC;QAED,MAAM,gBAAgB,GAA2B,MAAM,CAAC,MAAM;YAC5D,CAAC,CAAC;gBACE,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,uBAAuB;gBAC9B,MAAM,EAAE,MAAM;aACf;YACH,CAAC,CAAC;gBACE,KAAK,EAAE,IAAI;aACZ,CAAC;QAEN,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAC1E,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAEkB,UAAU;QAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;CACF;AAjMD,sCAiMC"}
@@ -0,0 +1,6 @@
1
+ import { Config } from './config';
2
+ export interface LoginResponseDto {
3
+ token: string;
4
+ }
5
+ export declare const createHttpClient: (config: Config) => Promise<import("axios").AxiosInstance>;
6
+ //# sourceMappingURL=create-http-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-http-client.d.ts","sourceRoot":"","sources":["../../../api-tests/fixture/create-http-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,gBAAgB,WAAkB,MAAM,2CAsCpD,CAAC"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.createHttpClient = void 0;
16
+ const axios_1 = __importDefault(require("axios"));
17
+ const createHttpClient = (config) => __awaiter(void 0, void 0, void 0, function* () {
18
+ const client = axios_1.default.create({
19
+ baseURL: config.API_URL,
20
+ validateStatus: () => true,
21
+ });
22
+ // exchange username and password for auth token for subsequent requests
23
+ const loginResponse = yield client.post('/login', {
24
+ email: config.TEST_USER_EMAIL,
25
+ password: config.TEST_USER_PASSWORD,
26
+ subdomain: config.TENANT,
27
+ });
28
+ // throw if the login failed
29
+ if (loginResponse.status !== 200) {
30
+ throw new Error(
31
+ // eslint-disable-next-line max-len
32
+ `Test User ${config.TEST_USER_EMAIL} Login to tenant ${config.TENANT} failed: ${loginResponse.status} ${loginResponse.statusText}`);
33
+ }
34
+ const authToken = loginResponse.data.token;
35
+ client.interceptors.request.use((httpConfig) => {
36
+ httpConfig.headers['ts-auth-token'] = httpConfig.headers['ts-auth-token'] || authToken;
37
+ httpConfig.headers['x-org-slug'] = httpConfig.headers['x-org-slug'] || config.ORG_SLUG;
38
+ let requestId = httpConfig.headers['ts-request-id'];
39
+ if (!requestId) {
40
+ requestId = `${config.TEST_RUN_ID}:${Date.now()}`;
41
+ httpConfig.headers['ts-request-id'] = requestId;
42
+ }
43
+ else if (!requestId.includes(config.TEST_RUN_ID)) {
44
+ requestId = `${config.TEST_RUN_ID}:${requestId}`;
45
+ httpConfig.headers['ts-request-id'] = requestId;
46
+ }
47
+ return httpConfig;
48
+ });
49
+ return client;
50
+ });
51
+ exports.createHttpClient = createHttpClient;
52
+ //# sourceMappingURL=create-http-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-http-client.js","sourceRoot":"","sources":["../../../api-tests/fixture/create-http-client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kDAA0B;AAQnB,MAAM,gBAAgB,GAAG,CAAO,MAAc,EAAE,EAAE;IACvD,MAAM,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC;QAC1B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI;KAC3B,CAAC,CAAC;IAEH,wEAAwE;IACxE,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,IAAI,CAAmB,QAAQ,EAAE;QAClE,KAAK,EAAE,MAAM,CAAC,eAAe;QAC7B,QAAQ,EAAE,MAAM,CAAC,kBAAkB;QACnC,SAAS,EAAE,MAAM,CAAC,MAAM;KACzB,CAAC,CAAC;IACH,4BAA4B;IAC5B,IAAI,aAAa,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK;QACb,mCAAmC;QACnC,aAAa,MAAM,CAAC,eAAe,oBAAoB,MAAM,CAAC,MAAM,YAAY,aAAa,CAAC,MAAM,IAAI,aAAa,CAAC,UAAU,EAAE,CACnI,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3C,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;QAC7C,UAAU,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,SAAS,CAAC;QACvF,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC;QAEvF,IAAI,SAAS,GAAW,UAAU,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC5D,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,GAAG,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAClD,UAAU,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;QAClD,CAAC;aAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAY,CAAC,EAAE,CAAC;YACpD,SAAS,GAAG,GAAG,MAAM,CAAC,WAAW,IAAI,SAAS,EAAE,CAAC;YACjD,UAAU,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;QAClD,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAA,CAAC;AAtCW,QAAA,gBAAgB,oBAsC3B"}
@@ -0,0 +1,34 @@
1
+ import { AxiosInstance } from 'axios';
2
+ import { Config } from './config';
3
+ import { ConnectorApi } from './connector-api';
4
+ import { TestConnector } from './connectors/test-connector';
5
+ export interface Fixture {
6
+ config: Config;
7
+ http: AxiosInstance;
8
+ connectorApi: ConnectorApi;
9
+ standaloneConnector: TestConnector;
10
+ delay: (seconds: number) => Promise<void>;
11
+ }
12
+ export declare const connectorTest: import("vitest").TestAPI<{
13
+ http: AxiosInstance;
14
+ config: {
15
+ TEST_USER_EMAIL: string;
16
+ TEST_USER_PASSWORD: string;
17
+ TENANT: string;
18
+ API_URL: string;
19
+ ORG_SLUG: string;
20
+ STANDALONE_CONNECTOR_TYPE: string;
21
+ AWS_REGION: string;
22
+ DATALAKE_BUCKET: string;
23
+ STREAM_BUCKET: string;
24
+ TDP_CERTIFICATE_KEY: string;
25
+ KMS_KEY_ID: string;
26
+ OUTBOUND_COMMAND_QUEUE: string;
27
+ TEST_RUN_ID: string;
28
+ DATA_ACQUISITION_LOG_GROUP: string;
29
+ };
30
+ connectorApi: ConnectorApi;
31
+ standaloneConnector: TestConnector;
32
+ delay: (seconds: number) => Promise<void>;
33
+ }>;
34
+ //# sourceMappingURL=fixture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../../api-tests/fixture/fixture.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,OAAO,EAAE,MAAM,EAAc,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAI5D,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,aAAa,CAAC;IACpB,YAAY,EAAE,YAAY,CAAC;IAC3B,mBAAmB,EAAE,aAAa,CAAC;IACnC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAID,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;qBALP,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;EAuBzC,CAAC"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.connectorTest = void 0;
36
+ const timers = __importStar(require("node:timers/promises"));
37
+ const vitest_1 = require("vitest");
38
+ const config_1 = require("./config");
39
+ const connector_api_1 = require("./connector-api");
40
+ const create_http_client_1 = require("./create-http-client");
41
+ const test_connector_factory_1 = require("./test-connector-factory");
42
+ const delay = (seconds) => __awaiter(void 0, void 0, void 0, function* () { return yield timers.setTimeout(seconds * 1000); });
43
+ exports.connectorTest = vitest_1.test.extend({
44
+ config: (_a, use_1) => __awaiter(void 0, [_a, use_1], void 0, function* ({}, use) {
45
+ const config = (0, config_1.loadConfig)();
46
+ yield use(config);
47
+ }),
48
+ http: (_a, use_1) => __awaiter(void 0, [_a, use_1], void 0, function* ({ config }, use) {
49
+ const http = yield (0, create_http_client_1.createHttpClient)(config);
50
+ yield use(http);
51
+ }),
52
+ connectorApi: (_a, use_1) => __awaiter(void 0, [_a, use_1], void 0, function* ({ http, config }, use) {
53
+ const connectorApi = new connector_api_1.ConnectorApi(http, config);
54
+ yield use(connectorApi);
55
+ }),
56
+ standaloneConnector: (_a, use_1) => __awaiter(void 0, [_a, use_1], void 0, function* ({ connectorApi, config, onTestFinished }, use) {
57
+ const { testConnector } = yield (0, test_connector_factory_1.createTestConnector)(connectorApi, config, onTestFinished);
58
+ yield use(testConnector);
59
+ }),
60
+ delay: (_a, use_1) => __awaiter(void 0, [_a, use_1], void 0, function* ({}, use) { return use(delay); }),
61
+ });
62
+ //# sourceMappingURL=fixture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../../api-tests/fixture/fixture.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6DAA+C;AAG/C,mCAA8B;AAE9B,qCAA8C;AAC9C,mDAA+C;AAE/C,6DAAwD;AACxD,qEAA+D;AAU/D,MAAM,KAAK,GAAG,CAAO,OAAe,EAAE,EAAE,kDAAC,OAAA,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA,GAAA,CAAC;AAEpE,QAAA,aAAa,GAAG,aAAI,CAAC,MAAM,CAAU;IAChD,MAAM,EAAE,YAAgB,EAAE,mDAAX,EAAE,EAAE,GAAG;QACpB,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;QAC5B,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC,CAAA;IACD,IAAI,EAAE,YAAiD,EAAE,mDAA5C,EAAE,MAAM,EAAsB,EAAE,GAAQ;QACnD,MAAM,IAAI,GAAG,MAAM,IAAA,qCAAgB,EAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC,CAAA;IACD,YAAY,EAAE,YAAmC,EAAE,mDAA9B,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAQ;QAC7C,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC,CAAA;IACD,mBAAmB,EAAE,YAA2D,EAAE,mDAAtD,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,GAAQ;QAC5E,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,IAAA,4CAAmB,EAAC,YAAY,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;QAC1F,MAAM,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,CAAC,CAAA;IACD,KAAK,EAAE,YAAgB,EAAE,mDAAX,EAAE,EAAE,GAAG,IAAK,OAAA,GAAG,CAAC,KAAK,CAAC,CAAA,GAAA;CACrC,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { OnTestFinishedHandler } from 'vitest';
2
+ import { ConnectorOptions } from '../../src/index.js';
3
+ import { Config } from './config';
4
+ import { ConnectorApi } from './connector-api';
5
+ import { TestConnector } from './connectors/test-connector';
6
+ /**
7
+ * Creates a test connector with all necessary setup including token rotation and TDP client configuration.
8
+ *
9
+ * @param connectorApi - The connector API instance for creating and managing connectors
10
+ * @param config - Configuration object containing all necessary environment settings
11
+ * @param onTestFinished - Callback function to be called when test is finished
12
+ * @param expect - Vitest expect function for assertions
13
+ * @returns Promise that resolves to a configured TestConnector instance
14
+ */
15
+ export declare function createTestConnector(connectorApi: ConnectorApi, config: Config, onTestFinished: (fn: OnTestFinishedHandler) => void, options?: ConnectorOptions & {
16
+ manifestFilePath?: string;
17
+ }): Promise<{
18
+ testConnector: TestConnector;
19
+ connectorId: string;
20
+ }>;
21
+ //# sourceMappingURL=test-connector-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-connector-factory.d.ts","sourceRoot":"","sources":["../../../api-tests/fixture/test-connector-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAA+B,MAAM,oBAAoB,CAAC;AAGnF,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,CAAC,EAAE,EAAE,qBAAqB,KAAK,IAAI,EACnD,OAAO,CAAC,EAAE,gBAAgB,GAAG;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE;;;GA0D3D"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.createTestConnector = createTestConnector;
16
+ const async_retry_1 = __importDefault(require("async-retry"));
17
+ const vitest_1 = require("vitest");
18
+ const index_js_1 = require("../../src/index.js");
19
+ const logger_js_1 = require("../../src/logger.js");
20
+ const tdp_client_js_1 = require("../../src/tdp-client.js");
21
+ const test_connector_1 = require("./connectors/test-connector");
22
+ /**
23
+ * Creates a test connector with all necessary setup including token rotation and TDP client configuration.
24
+ *
25
+ * @param connectorApi - The connector API instance for creating and managing connectors
26
+ * @param config - Configuration object containing all necessary environment settings
27
+ * @param onTestFinished - Callback function to be called when test is finished
28
+ * @param expect - Vitest expect function for assertions
29
+ * @returns Promise that resolves to a configured TestConnector instance
30
+ */
31
+ function createTestConnector(connectorApi, config, onTestFinished, options) {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ const connectorResponse = yield (0, async_retry_1.default)((bail, attempt) => __awaiter(this, void 0, void 0, function* () {
34
+ const res = yield connectorApi.create({
35
+ connectorType: config.STANDALONE_CONNECTOR_TYPE,
36
+ name: 'Test Connector',
37
+ hostType: 'standalone',
38
+ labels: [
39
+ {
40
+ name: 'testRunId',
41
+ value: config.TEST_RUN_ID,
42
+ },
43
+ ],
44
+ }, onTestFinished);
45
+ if (res.status === 400) {
46
+ bail(new Error(`Failed to create connector: ${JSON.stringify(res.data)}`));
47
+ }
48
+ else if (res.status !== 201 && attempt < 5) {
49
+ throw new Error(`Failed to create connector. Attempt ${attempt} failed with status ${res.status}`);
50
+ }
51
+ return res;
52
+ }), { retries: 5 });
53
+ (0, vitest_1.expect)(connectorResponse.status).toBe(201);
54
+ const tokenResponse = yield connectorApi.rotateToken(connectorResponse.data.id);
55
+ (0, vitest_1.expect)(tokenResponse.status).toBe(200);
56
+ // don't flood test output with connector logs
57
+ // @ts-expect-error - override private method
58
+ logger_js_1.Logger.prototype.sendToConsole = () => { };
59
+ process.env['CONNECTOR_TOKEN'] = tokenResponse.data.token;
60
+ const tpdClient = new tdp_client_js_1.TDPClient({
61
+ artifactType: 'connector',
62
+ awsRegion: config.AWS_REGION,
63
+ connectorId: connectorResponse.data.id,
64
+ datalakeBucket: config.DATALAKE_BUCKET,
65
+ streamBucket: config.STREAM_BUCKET,
66
+ tdpCertificateKey: config.TDP_CERTIFICATE_KEY,
67
+ orgSlug: config.ORG_SLUG,
68
+ tdpEndpoint: config.API_URL,
69
+ kmsKeyId: config.KMS_KEY_ID,
70
+ outboundCommandQueue: config.OUTBOUND_COMMAND_QUEUE,
71
+ authTokenProvider: new index_js_1.PredefinedAuthTokenProvider(tokenResponse.data.token),
72
+ manifestFile: options === null || options === void 0 ? void 0 : options.manifestFilePath,
73
+ });
74
+ const testConnector = new test_connector_1.TestConnector(tpdClient, options);
75
+ return { testConnector, connectorId: connectorResponse.data.id };
76
+ });
77
+ }
78
+ //# sourceMappingURL=test-connector-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-connector-factory.js","sourceRoot":"","sources":["../../../api-tests/fixture/test-connector-factory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAmBA,kDA8DC;AAjFD,8DAAgC;AAChC,mCAAuD;AAEvD,iDAAmF;AACnF,mDAA6C;AAC7C,2DAAoD;AAGpD,gEAA4D;AAE5D;;;;;;;;GAQG;AACH,SAAsB,mBAAmB,CACvC,YAA0B,EAC1B,MAAc,EACd,cAAmD,EACnD,OAA0D;;QAE1D,MAAM,iBAAiB,GAAG,MAAM,IAAA,qBAAK,EACnC,CAAO,IAAI,EAAE,OAAO,EAAE,EAAE;YACtB,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,MAAM,CACnC;gBACE,aAAa,EAAE,MAAM,CAAC,yBAAyB;gBAC/C,IAAI,EAAE,gBAAgB;gBACtB,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE;oBACN;wBACE,IAAI,EAAE,WAAW;wBACjB,KAAK,EAAE,MAAM,CAAC,WAAW;qBACnB;iBACT;aACF,EACD,cAAc,CACf,CAAC;YAEF,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,IAAI,CAAC,IAAI,KAAK,CAAC,+BAA+B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7E,CAAC;iBAAM,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CAAC,uCAAuC,OAAO,uBAAuB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YACrG,CAAC;YAED,OAAO,GAAG,CAAC;QACb,CAAC,CAAA,EACD,EAAE,OAAO,EAAE,CAAC,EAAE,CACf,CAAC;QAEF,IAAA,eAAM,EAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE3C,MAAM,aAAa,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChF,IAAA,eAAM,EAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEvC,8CAA8C;QAC9C,6CAA6C;QAC7C,kBAAM,CAAC,SAAS,CAAC,aAAa,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;QAE1C,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAI,yBAAS,CAAC;YAC9B,YAAY,EAAE,WAAW;YACzB,SAAS,EAAE,MAAM,CAAC,UAAU;YAC5B,WAAW,EAAE,iBAAiB,CAAC,IAAI,CAAC,EAAE;YACtC,cAAc,EAAE,MAAM,CAAC,eAAe;YACtC,YAAY,EAAE,MAAM,CAAC,aAAa;YAClC,iBAAiB,EAAE,MAAM,CAAC,mBAAmB;YAC7C,OAAO,EAAE,MAAM,CAAC,QAAQ;YACxB,WAAW,EAAE,MAAM,CAAC,OAAO;YAC3B,QAAQ,EAAE,MAAM,CAAC,UAAU;YAC3B,oBAAoB,EAAE,MAAM,CAAC,sBAAsB;YACnD,iBAAiB,EAAE,IAAI,sCAA2B,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;YAC5E,YAAY,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,gBAAgB;SACxC,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,IAAI,8BAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE5D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IACnE,CAAC;CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=label-validation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label-validation.test.d.ts","sourceRoot":"","sources":["../../api-tests/label-validation.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const async_retry_1 = __importDefault(require("async-retry"));
16
+ const vitest_1 = require("vitest");
17
+ const index_js_1 = require("../src/index.js");
18
+ const types_js_1 = require("../src/types.js");
19
+ const fixture_1 = require("./fixture/fixture");
20
+ const waitForFile = (http, fileId) => __awaiter(void 0, void 0, void 0, function* () {
21
+ return (0, async_retry_1.default)((_, attempt) => __awaiter(void 0, void 0, void 0, function* () {
22
+ const fileResponse = yield http.get(`/v1/fileinfo/file/${fileId}`);
23
+ if (fileResponse.status !== 200 && attempt < 25) {
24
+ throw new Error(`Failed to get file info for file ${fileId}. API returned status ${fileResponse.status}`);
25
+ }
26
+ return fileResponse;
27
+ }), { minTimeout: 700, maxTimeout: 5000, retries: 25 });
28
+ });
29
+ (0, vitest_1.describe)('Label validation', () => {
30
+ let originalSkipCloudwatch;
31
+ (0, vitest_1.beforeAll)(() => {
32
+ originalSkipCloudwatch = process.env['SKIP_CLOUDWATCH'];
33
+ process.env['SKIP_CLOUDWATCH'] = 'true';
34
+ });
35
+ (0, vitest_1.afterAll)(() => {
36
+ if (originalSkipCloudwatch !== undefined) {
37
+ process.env['SKIP_CLOUDWATCH'] = originalSkipCloudwatch;
38
+ }
39
+ else {
40
+ delete process.env['SKIP_CLOUDWATCH'];
41
+ }
42
+ });
43
+ (0, fixture_1.connectorTest)('DAM-T57: Can upload a file with valid labels', (_a) => __awaiter(void 0, [_a], void 0, function* ({ connectorApi, expect, standaloneConnector, config, http }) {
44
+ yield standaloneConnector.start();
45
+ const onlineCheck = yield connectorApi.waitForConnectorToBeOnline(standaloneConnector.connector.id);
46
+ expect(onlineCheck.status).toBe(200);
47
+ expect(onlineCheck.data.networkStatus).toBe('Online');
48
+ if (onlineCheck.data.operatingStatus !== 'RUNNING') {
49
+ const setStatusResponse = yield connectorApi.setStatus(standaloneConnector.connector.id, 'RUNNING');
50
+ expect(setStatusResponse.status).toBe(200);
51
+ const startCommand = yield standaloneConnector.waitForCommand(types_js_1.CommandAction.Start);
52
+ expect(startCommand, 'Expected to receive start command').toBeDefined();
53
+ }
54
+ const uploadResponse = yield standaloneConnector.uploadFile(config, {
55
+ labels: [
56
+ {
57
+ name: 'label1',
58
+ value: 'value1',
59
+ },
60
+ {
61
+ name: 'uploadReason',
62
+ value: `test-upload.${config.TEST_RUN_ID}`,
63
+ },
64
+ ],
65
+ strictMTLValidation: true,
66
+ });
67
+ expect(uploadResponse.fileId).toBeTruthy();
68
+ const fileResponse = yield waitForFile(http, uploadResponse.fileId);
69
+ expect(fileResponse.status).toBe(200);
70
+ expect(fileResponse.data.labels).toEqual(expect.arrayContaining([
71
+ expect.objectContaining({
72
+ name: 'label1',
73
+ value: 'value1',
74
+ id: expect.any(Number),
75
+ }),
76
+ expect.objectContaining({
77
+ name: 'uploadReason',
78
+ value: `test-upload.${config.TEST_RUN_ID}`,
79
+ id: expect.any(Number),
80
+ }),
81
+ ]));
82
+ }));
83
+ (0, fixture_1.connectorTest)('DAM-T58: Fails to upload a file with invalid labels when strictMTLValidation is enabled', (_a) => __awaiter(void 0, [_a], void 0, function* ({ connectorApi, expect, standaloneConnector, config, http }) {
84
+ yield standaloneConnector.start();
85
+ const onlineCheck = yield connectorApi.waitForConnectorToBeOnline(standaloneConnector.connector.id);
86
+ expect(onlineCheck.status).toBe(200);
87
+ expect(onlineCheck.data.networkStatus).toBe('Online');
88
+ if (onlineCheck.data.operatingStatus !== 'RUNNING') {
89
+ const setStatusResponse = yield connectorApi.setStatus(standaloneConnector.connector.id, 'RUNNING');
90
+ expect(setStatusResponse.status).toBe(200);
91
+ const startCommand = yield standaloneConnector.waitForCommand(types_js_1.CommandAction.Start);
92
+ expect(startCommand, 'Expected to receive start command').toBeDefined();
93
+ }
94
+ const uploadResponse = yield standaloneConnector.uploadFile(config, {
95
+ labels: [
96
+ {
97
+ name: '\r\ninvalid value!',
98
+ value: 'value1',
99
+ },
100
+ {
101
+ name: 'a'.repeat(256),
102
+ value: 'value2',
103
+ },
104
+ ],
105
+ strictMTLValidation: true,
106
+ });
107
+ expect(uploadResponse.status).toBe(index_js_1.ProcessingStatus.ERROR);
108
+ const connectorFileResponse = yield connectorApi.getFiles(standaloneConnector.connector.id);
109
+ expect(connectorFileResponse.status).toBe(200);
110
+ const connectorFile = connectorFileResponse.data.files.find((f) => f.id === uploadResponse.fileId);
111
+ expect(connectorFile).toBeDefined();
112
+ expect(connectorFile === null || connectorFile === void 0 ? void 0 : connectorFile.status).not.toBe(index_js_1.ProcessingStatus.SUCCESS);
113
+ const fileResponse = yield waitForFile(http, uploadResponse.fileId);
114
+ expect(fileResponse.status).toBe(404);
115
+ }));
116
+ (0, fixture_1.connectorTest)('DAM-T59: Can upload a file with invalid labels when strictMTLValidation is disabled', (_a) => __awaiter(void 0, [_a], void 0, function* ({ connectorApi, expect, standaloneConnector, config, http }) {
117
+ yield standaloneConnector.start();
118
+ const onlineCheck = yield connectorApi.waitForConnectorToBeOnline(standaloneConnector.connector.id);
119
+ expect(onlineCheck.status).toBe(200);
120
+ expect(onlineCheck.data.networkStatus).toBe('Online');
121
+ if (onlineCheck.data.operatingStatus !== 'RUNNING') {
122
+ const setStatusResponse = yield connectorApi.setStatus(standaloneConnector.connector.id, 'RUNNING');
123
+ expect(setStatusResponse.status).toBe(200);
124
+ const startCommand = yield standaloneConnector.waitForCommand(types_js_1.CommandAction.Start);
125
+ expect(startCommand, 'Expected to receive start command').toBeDefined();
126
+ }
127
+ const uploadResponse = yield standaloneConnector.uploadFile(config, {
128
+ labels: [
129
+ {
130
+ name: '\ntestlabel',
131
+ value: 'value1',
132
+ },
133
+ {
134
+ name: '\r\nanotherlabel',
135
+ value: 'value2',
136
+ },
137
+ ],
138
+ strictMTLValidation: false,
139
+ });
140
+ expect(uploadResponse.fileId).toBeTruthy();
141
+ const fileResponse = yield waitForFile(http, uploadResponse.fileId);
142
+ expect(fileResponse.status).toBe(200);
143
+ expect(fileResponse.data.labels).toEqual(expect.arrayContaining([
144
+ expect.objectContaining({
145
+ // API returns label with leading newline removed
146
+ name: 'testlabel',
147
+ value: 'value1',
148
+ id: expect.any(Number),
149
+ }),
150
+ expect.objectContaining({
151
+ name: 'anotherlabel',
152
+ value: 'value2',
153
+ id: expect.any(Number),
154
+ }),
155
+ ]));
156
+ }));
157
+ });
158
+ //# sourceMappingURL=label-validation.test.js.map