playwright-automation-core 1.0.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 (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +225 -0
  3. package/dist/api/api.assertions.d.ts +196 -0
  4. package/dist/api/api.assertions.d.ts.map +1 -0
  5. package/dist/api/api.assertions.js +462 -0
  6. package/dist/api/api.assertions.js.map +1 -0
  7. package/dist/api/api.builder.d.ts +134 -0
  8. package/dist/api/api.builder.d.ts.map +1 -0
  9. package/dist/api/api.builder.js +273 -0
  10. package/dist/api/api.builder.js.map +1 -0
  11. package/dist/api/api.client.d.ts +157 -0
  12. package/dist/api/api.client.d.ts.map +1 -0
  13. package/dist/api/api.client.js +493 -0
  14. package/dist/api/api.client.js.map +1 -0
  15. package/dist/api/index.d.ts +8 -0
  16. package/dist/api/index.d.ts.map +1 -0
  17. package/dist/api/index.js +17 -0
  18. package/dist/api/index.js.map +1 -0
  19. package/dist/core/base.driver.d.ts +130 -0
  20. package/dist/core/base.driver.d.ts.map +1 -0
  21. package/dist/core/base.driver.js +264 -0
  22. package/dist/core/base.driver.js.map +1 -0
  23. package/dist/core/driver.factory.d.ts +120 -0
  24. package/dist/core/driver.factory.d.ts.map +1 -0
  25. package/dist/core/driver.factory.js +222 -0
  26. package/dist/core/driver.factory.js.map +1 -0
  27. package/dist/core/element.actions.d.ts +119 -0
  28. package/dist/core/element.actions.d.ts.map +1 -0
  29. package/dist/core/element.actions.js +379 -0
  30. package/dist/core/element.actions.js.map +1 -0
  31. package/dist/core/hook.manager.d.ts +186 -0
  32. package/dist/core/hook.manager.d.ts.map +1 -0
  33. package/dist/core/hook.manager.js +297 -0
  34. package/dist/core/hook.manager.js.map +1 -0
  35. package/dist/core/index.d.ts +8 -0
  36. package/dist/core/index.d.ts.map +1 -0
  37. package/dist/core/index.js +22 -0
  38. package/dist/core/index.js.map +1 -0
  39. package/dist/index.d.ts +17 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +128 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/mobile/index.d.ts +7 -0
  44. package/dist/mobile/index.d.ts.map +1 -0
  45. package/dist/mobile/index.js +14 -0
  46. package/dist/mobile/index.js.map +1 -0
  47. package/dist/mobile/mobile.assertions.d.ts +146 -0
  48. package/dist/mobile/mobile.assertions.d.ts.map +1 -0
  49. package/dist/mobile/mobile.assertions.js +333 -0
  50. package/dist/mobile/mobile.assertions.js.map +1 -0
  51. package/dist/mobile/mobile.driver.d.ts +297 -0
  52. package/dist/mobile/mobile.driver.d.ts.map +1 -0
  53. package/dist/mobile/mobile.driver.js +808 -0
  54. package/dist/mobile/mobile.driver.js.map +1 -0
  55. package/dist/types/common.types.d.ts +200 -0
  56. package/dist/types/common.types.d.ts.map +1 -0
  57. package/dist/types/common.types.js +3 -0
  58. package/dist/types/common.types.js.map +1 -0
  59. package/dist/types/config.types.d.ts +192 -0
  60. package/dist/types/config.types.d.ts.map +1 -0
  61. package/dist/types/config.types.js +3 -0
  62. package/dist/types/config.types.js.map +1 -0
  63. package/dist/types/driver.types.d.ts +500 -0
  64. package/dist/types/driver.types.d.ts.map +1 -0
  65. package/dist/types/driver.types.js +3 -0
  66. package/dist/types/driver.types.js.map +1 -0
  67. package/dist/types/enums.d.ts +53 -0
  68. package/dist/types/enums.d.ts.map +1 -0
  69. package/dist/types/enums.js +62 -0
  70. package/dist/types/enums.js.map +1 -0
  71. package/dist/types/index.d.ts +8 -0
  72. package/dist/types/index.d.ts.map +1 -0
  73. package/dist/types/index.js +15 -0
  74. package/dist/types/index.js.map +1 -0
  75. package/dist/utils/config.manager.d.ts +144 -0
  76. package/dist/utils/config.manager.d.ts.map +1 -0
  77. package/dist/utils/config.manager.js +473 -0
  78. package/dist/utils/config.manager.js.map +1 -0
  79. package/dist/utils/errors.d.ts +149 -0
  80. package/dist/utils/errors.d.ts.map +1 -0
  81. package/dist/utils/errors.js +290 -0
  82. package/dist/utils/errors.js.map +1 -0
  83. package/dist/utils/helpers.d.ts +124 -0
  84. package/dist/utils/helpers.d.ts.map +1 -0
  85. package/dist/utils/helpers.js +421 -0
  86. package/dist/utils/helpers.js.map +1 -0
  87. package/dist/utils/index.d.ts +9 -0
  88. package/dist/utils/index.d.ts.map +1 -0
  89. package/dist/utils/index.js +78 -0
  90. package/dist/utils/index.js.map +1 -0
  91. package/dist/utils/logger.d.ts +145 -0
  92. package/dist/utils/logger.d.ts.map +1 -0
  93. package/dist/utils/logger.js +235 -0
  94. package/dist/utils/logger.js.map +1 -0
  95. package/dist/utils/wait.utils.d.ts +95 -0
  96. package/dist/utils/wait.utils.d.ts.map +1 -0
  97. package/dist/utils/wait.utils.js +306 -0
  98. package/dist/utils/wait.utils.js.map +1 -0
  99. package/dist/web/index.d.ts +8 -0
  100. package/dist/web/index.d.ts.map +1 -0
  101. package/dist/web/index.js +16 -0
  102. package/dist/web/index.js.map +1 -0
  103. package/dist/web/web.assertions.d.ts +164 -0
  104. package/dist/web/web.assertions.d.ts.map +1 -0
  105. package/dist/web/web.assertions.js +427 -0
  106. package/dist/web/web.assertions.js.map +1 -0
  107. package/dist/web/web.driver.d.ts +174 -0
  108. package/dist/web/web.driver.d.ts.map +1 -0
  109. package/dist/web/web.driver.js +571 -0
  110. package/dist/web/web.driver.js.map +1 -0
  111. package/dist/web/web.page.d.ts +286 -0
  112. package/dist/web/web.page.d.ts.map +1 -0
  113. package/dist/web/web.page.js +570 -0
  114. package/dist/web/web.page.js.map +1 -0
  115. package/package.json +115 -0
@@ -0,0 +1,493 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApiClient = void 0;
4
+ const test_1 = require("@playwright/test");
5
+ const types_1 = require("../types");
6
+ const base_driver_1 = require("../core/base.driver");
7
+ const hook_manager_1 = require("../core/hook.manager");
8
+ const utils_1 = require("../utils");
9
+ /**
10
+ * API Client implementation using Playwright's request context.
11
+ * Provides a clean interface for REST API testing.
12
+ */
13
+ class ApiClient extends base_driver_1.BaseDriver {
14
+ /** Playwright API request context */
15
+ requestContext = null;
16
+ /** API-specific configuration */
17
+ config;
18
+ /** Default headers for all requests */
19
+ defaultHeaders = {};
20
+ /** Hook manager */
21
+ hooks;
22
+ /** Wait utilities for retry logic */
23
+ waitUtils;
24
+ /**
25
+ * Create a new ApiClient instance
26
+ */
27
+ constructor(config, logger) {
28
+ super(types_1.Platform.API, config, logger);
29
+ this.config = config;
30
+ this.hooks = (0, hook_manager_1.getHookManager)();
31
+ this.waitUtils = new utils_1.WaitUtils(this.logger);
32
+ // Set default headers from config
33
+ if (config.headers) {
34
+ this.defaultHeaders = { ...config.headers };
35
+ }
36
+ }
37
+ /**
38
+ * Initialize the API client
39
+ */
40
+ async initialize() {
41
+ if (this.initialized) {
42
+ this.logger.warn("ApiClient already initialized");
43
+ return;
44
+ }
45
+ // Execute before init hooks
46
+ await this.hooks.execute(hook_manager_1.HookEvent.BEFORE_DRIVER_INIT, {
47
+ platform: this.platform,
48
+ data: { config: this.getSafeConfig() },
49
+ });
50
+ try {
51
+ this.logger.info("Initializing ApiClient", {
52
+ baseURL: this.config.baseURL,
53
+ });
54
+ // Create Playwright request context
55
+ this.requestContext = await test_1.request.newContext({
56
+ baseURL: this.config.baseURL,
57
+ extraHTTPHeaders: this.defaultHeaders,
58
+ ignoreHTTPSErrors: this.config.ignoreHTTPSErrors,
59
+ httpCredentials: this.config.httpCredentials,
60
+ proxy: this.config.proxy,
61
+ });
62
+ // Generate session ID and mark initialized
63
+ this.generateSessionId();
64
+ this.markInitialized();
65
+ // Execute after init hooks
66
+ await this.hooks.execute(hook_manager_1.HookEvent.AFTER_DRIVER_INIT, {
67
+ platform: this.platform,
68
+ driverStatus: this.getStatus(),
69
+ data: { baseURL: this.config.baseURL },
70
+ });
71
+ }
72
+ catch (error) {
73
+ const err = error;
74
+ this.logger.error("Failed to initialize ApiClient", {
75
+ error: err.message,
76
+ });
77
+ throw new utils_1.DriverInitializationError(this.platform, `Failed to initialize API client: ${err.message}`, { baseURL: this.config.baseURL });
78
+ }
79
+ }
80
+ /**
81
+ * Get the underlying Playwright request context
82
+ */
83
+ getDriver() {
84
+ this.ensureInitialized("getDriver");
85
+ return this.requestContext;
86
+ }
87
+ /**
88
+ * Get the request context (alias for getDriver)
89
+ */
90
+ getRequestContext() {
91
+ return this.getDriver();
92
+ }
93
+ /**
94
+ * Perform GET request
95
+ */
96
+ async get(endpoint, options = {}) {
97
+ return this.request({
98
+ method: types_1.HttpMethod.GET,
99
+ endpoint,
100
+ options,
101
+ });
102
+ }
103
+ /**
104
+ * Perform POST request
105
+ */
106
+ async post(endpoint, data, options = {}) {
107
+ return this.request({
108
+ method: types_1.HttpMethod.POST,
109
+ endpoint,
110
+ data,
111
+ options,
112
+ });
113
+ }
114
+ /**
115
+ * Perform PUT request
116
+ */
117
+ async put(endpoint, data, options = {}) {
118
+ return this.request({
119
+ method: types_1.HttpMethod.PUT,
120
+ endpoint,
121
+ data,
122
+ options,
123
+ });
124
+ }
125
+ /**
126
+ * Perform PATCH request
127
+ */
128
+ async patch(endpoint, data, options = {}) {
129
+ return this.request({
130
+ method: types_1.HttpMethod.PATCH,
131
+ endpoint,
132
+ data,
133
+ options,
134
+ });
135
+ }
136
+ /**
137
+ * Perform DELETE request
138
+ */
139
+ async delete(endpoint, options = {}) {
140
+ return this.request({
141
+ method: types_1.HttpMethod.DELETE,
142
+ endpoint,
143
+ options,
144
+ });
145
+ }
146
+ /**
147
+ * Perform HEAD request
148
+ */
149
+ async head(endpoint, options = {}) {
150
+ return this.request({
151
+ method: types_1.HttpMethod.HEAD,
152
+ endpoint,
153
+ options,
154
+ });
155
+ }
156
+ /**
157
+ * Perform OPTIONS request
158
+ */
159
+ async options(endpoint, options = {}) {
160
+ return this.request({
161
+ method: types_1.HttpMethod.OPTIONS,
162
+ endpoint,
163
+ options,
164
+ });
165
+ }
166
+ /**
167
+ * Internal request method
168
+ */
169
+ async request(config) {
170
+ this.ensureInitialized("request");
171
+ const { method, endpoint, data, options } = config;
172
+ const url = this.buildUrl(endpoint, options.params);
173
+ const headers = this.buildHeaders(options.headers);
174
+ const timeout = options.timeout ?? this.config.timeout ?? 30000;
175
+ // Execute before request hooks
176
+ await this.hooks.execute(hook_manager_1.HookEvent.BEFORE_REQUEST, {
177
+ platform: this.platform,
178
+ data: { method, url, headers: this.sanitizeHeaders(headers) },
179
+ });
180
+ // Log request
181
+ if (this.config.enableLogging) {
182
+ this.logger.apiRequest(method, url, {
183
+ headers: this.sanitizeHeaders(headers),
184
+ });
185
+ }
186
+ const startTime = Date.now();
187
+ try {
188
+ // Execute request with retry logic
189
+ const response = await this.executeWithRetry(async () => this.executeRequest(method, url, headers, data, timeout, options), options);
190
+ const responseTime = Date.now() - startTime;
191
+ // Parse response
192
+ const apiResponse = await this.parseResponse(response, url, responseTime);
193
+ // Log response
194
+ if (this.config.enableLogging) {
195
+ this.logger.apiResponse(method, url, apiResponse.status, responseTime, {
196
+ ok: apiResponse.ok,
197
+ });
198
+ }
199
+ // Execute after request hooks
200
+ await this.hooks.execute(hook_manager_1.HookEvent.AFTER_REQUEST, {
201
+ platform: this.platform,
202
+ data: {
203
+ method,
204
+ url,
205
+ status: apiResponse.status,
206
+ responseTime,
207
+ ok: apiResponse.ok,
208
+ },
209
+ });
210
+ // Check for failure if failOnStatusCode is true
211
+ if (options.failOnStatusCode !== false && !apiResponse.ok) {
212
+ throw new utils_1.ApiRequestError(method, url, `Request failed with status ${apiResponse.status}`, apiResponse.status, apiResponse.data);
213
+ }
214
+ return apiResponse;
215
+ }
216
+ catch (error) {
217
+ const responseTime = Date.now() - startTime;
218
+ if (error instanceof utils_1.ApiRequestError) {
219
+ throw error;
220
+ }
221
+ const err = error;
222
+ this.logger.error(`API request failed: ${method} ${url}`, {
223
+ error: err.message,
224
+ responseTime,
225
+ });
226
+ throw new utils_1.ApiRequestError(method, url, err.message);
227
+ }
228
+ }
229
+ /**
230
+ * Execute the actual HTTP request
231
+ */
232
+ async executeRequest(method, url, headers, data, timeout, options) {
233
+ const requestOptions = {
234
+ method,
235
+ headers,
236
+ timeout,
237
+ ignoreHTTPSErrors: options.ignoreHTTPSErrors ?? this.config.ignoreHTTPSErrors,
238
+ };
239
+ // Add body for methods that support it
240
+ if (data !== undefined && ["POST", "PUT", "PATCH"].includes(method)) {
241
+ if (options.form) {
242
+ requestOptions.form = options.form;
243
+ }
244
+ else if (options.multipart) {
245
+ // Type assertion for multipart data
246
+ requestOptions.multipart =
247
+ options.multipart;
248
+ }
249
+ else {
250
+ requestOptions.data = data;
251
+ }
252
+ }
253
+ return await this.requestContext.fetch(url, requestOptions);
254
+ }
255
+ /**
256
+ * Execute request with retry logic
257
+ */
258
+ async executeWithRetry(fn, options) {
259
+ const retryCount = options.failOnStatusCode === false ? 0 : this.config.retryCount ?? 0;
260
+ if (retryCount === 0) {
261
+ return await fn();
262
+ }
263
+ return await this.waitUtils.retry(fn, {
264
+ maxRetries: retryCount,
265
+ retryDelay: this.config.retryDelay ?? 1000,
266
+ backoffMultiplier: 1.5,
267
+ });
268
+ }
269
+ /**
270
+ * Parse API response
271
+ */
272
+ async parseResponse(response, url, responseTime) {
273
+ const headers = {};
274
+ const responseHeaders = response.headers();
275
+ for (const [key, value] of Object.entries(responseHeaders)) {
276
+ headers[key] = value;
277
+ }
278
+ let data;
279
+ const contentType = headers["content-type"] || "";
280
+ try {
281
+ if (contentType.includes("application/json")) {
282
+ data = (await response.json());
283
+ }
284
+ else if (contentType.includes("text/")) {
285
+ data = (await response.text());
286
+ }
287
+ else {
288
+ // For binary or unknown content types
289
+ const buffer = await response.body();
290
+ data = buffer;
291
+ }
292
+ }
293
+ catch {
294
+ // If parsing fails, try to get text
295
+ try {
296
+ data = (await response.text());
297
+ }
298
+ catch {
299
+ data = undefined;
300
+ }
301
+ }
302
+ return {
303
+ status: response.status(),
304
+ statusText: response.statusText(),
305
+ headers,
306
+ data,
307
+ responseTime,
308
+ url,
309
+ ok: response.ok(),
310
+ };
311
+ }
312
+ /**
313
+ * Build URL with query parameters
314
+ */
315
+ buildUrl(endpoint, params) {
316
+ const mergedParams = { ...this.config.params, ...params };
317
+ if (Object.keys(mergedParams).length === 0) {
318
+ return endpoint;
319
+ }
320
+ const queryString = new URLSearchParams(mergedParams).toString();
321
+ const separator = endpoint.includes("?") ? "&" : "?";
322
+ return `${endpoint}${separator}${queryString}`;
323
+ }
324
+ /**
325
+ * Build headers for request
326
+ */
327
+ buildHeaders(additionalHeaders) {
328
+ return {
329
+ ...this.defaultHeaders,
330
+ ...additionalHeaders,
331
+ };
332
+ }
333
+ /**
334
+ * Sanitize headers for logging (hide sensitive values)
335
+ */
336
+ sanitizeHeaders(headers) {
337
+ const sensitiveKeys = [
338
+ "authorization",
339
+ "x-api-key",
340
+ "api-key",
341
+ "token",
342
+ "cookie",
343
+ ];
344
+ const sanitized = { ...headers };
345
+ for (const key of Object.keys(sanitized)) {
346
+ if (sensitiveKeys.includes(key.toLowerCase())) {
347
+ sanitized[key] = "***REDACTED***";
348
+ }
349
+ }
350
+ return sanitized;
351
+ }
352
+ /**
353
+ * Set a default header for all requests
354
+ */
355
+ setHeader(key, value) {
356
+ this.defaultHeaders[key] = value;
357
+ this.logger.debug(`Set header: ${key}`);
358
+ }
359
+ /**
360
+ * Remove a default header
361
+ */
362
+ removeHeader(key) {
363
+ delete this.defaultHeaders[key];
364
+ this.logger.debug(`Removed header: ${key}`);
365
+ }
366
+ /**
367
+ * Get all default headers
368
+ */
369
+ getHeaders() {
370
+ return { ...this.defaultHeaders };
371
+ }
372
+ /**
373
+ * Set bearer token for authentication
374
+ */
375
+ setBearerToken(token) {
376
+ this.setHeader("Authorization", `Bearer ${token}`);
377
+ this.logger.debug("Set bearer token");
378
+ }
379
+ /**
380
+ * Clear bearer token
381
+ */
382
+ clearBearerToken() {
383
+ this.removeHeader("Authorization");
384
+ this.logger.debug("Cleared bearer token");
385
+ }
386
+ /**
387
+ * Set basic auth credentials
388
+ */
389
+ setBasicAuth(username, password) {
390
+ const credentials = Buffer.from(`${username}:${password}`).toString("base64");
391
+ this.setHeader("Authorization", `Basic ${credentials}`);
392
+ this.logger.debug("Set basic auth");
393
+ }
394
+ /**
395
+ * Set API key header
396
+ */
397
+ setApiKey(key, headerName = "X-API-Key") {
398
+ this.setHeader(headerName, key);
399
+ this.logger.debug(`Set API key header: ${headerName}`);
400
+ }
401
+ /**
402
+ * Set content type header
403
+ */
404
+ setContentType(contentType) {
405
+ this.setHeader("Content-Type", contentType);
406
+ }
407
+ /**
408
+ * Set accept header
409
+ */
410
+ setAccept(accept) {
411
+ this.setHeader("Accept", accept);
412
+ }
413
+ /**
414
+ * Take screenshot - not applicable for API, returns empty buffer
415
+ */
416
+ async takeScreenshot(_options) {
417
+ this.logger.warn("Screenshots are not supported for API testing");
418
+ return Buffer.from("");
419
+ }
420
+ /**
421
+ * Execute script - not applicable for API
422
+ */
423
+ async executeScript(_script) {
424
+ throw new Error("executeScript is not supported for API testing");
425
+ }
426
+ /**
427
+ * Dispose/quit the API client
428
+ */
429
+ async quit() {
430
+ if (!this.initialized) {
431
+ return;
432
+ }
433
+ // Execute before quit hooks
434
+ await this.hooks.execute(hook_manager_1.HookEvent.BEFORE_DRIVER_QUIT, {
435
+ platform: this.platform,
436
+ driverStatus: this.getStatus(),
437
+ });
438
+ try {
439
+ if (this.requestContext) {
440
+ await this.requestContext.dispose();
441
+ this.requestContext = null;
442
+ }
443
+ await super.quit();
444
+ // Execute after quit hooks
445
+ await this.hooks.execute(hook_manager_1.HookEvent.AFTER_DRIVER_QUIT, {
446
+ platform: this.platform,
447
+ });
448
+ }
449
+ catch (error) {
450
+ this.logger.error("Error during ApiClient quit", {
451
+ error: error.message,
452
+ });
453
+ }
454
+ }
455
+ /**
456
+ * Alias for quit
457
+ */
458
+ async dispose() {
459
+ return this.quit();
460
+ }
461
+ /**
462
+ * Health check - perform a simple GET request
463
+ */
464
+ async healthCheck(endpoint = "/") {
465
+ try {
466
+ const response = await this.get(endpoint, {
467
+ timeout: 5000,
468
+ failOnStatusCode: false,
469
+ });
470
+ return response.ok;
471
+ }
472
+ catch {
473
+ return false;
474
+ }
475
+ }
476
+ /**
477
+ * Get base URL
478
+ */
479
+ getBaseUrl() {
480
+ return this.config.baseURL;
481
+ }
482
+ /**
483
+ * Create a new instance with different base URL
484
+ */
485
+ async withBaseUrl(baseURL) {
486
+ const newConfig = { ...this.config, baseURL };
487
+ const client = new ApiClient(newConfig, this.logger);
488
+ await client.initialize();
489
+ return client;
490
+ }
491
+ }
492
+ exports.ApiClient = ApiClient;
493
+ //# sourceMappingURL=api.client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.client.js","sourceRoot":"","sources":["../../src/api/api.client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * API Module - Playwright-based API testing
3
+ */
4
+ export { ApiClient } from "./api.client";
5
+ export { ApiAssertions, ApiSoftAssertionResult, JsonSchema, } from "./api.assertions";
6
+ export { ApiRequestBuilder, createRequest } from "./api.builder";
7
+ export type { APIRequestContext, APIResponse } from "@playwright/test";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,UAAU,GACX,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGjE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ /**
3
+ * API Module - Playwright-based API testing
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createRequest = exports.ApiRequestBuilder = exports.ApiAssertions = exports.ApiClient = void 0;
7
+ // API Client
8
+ var api_client_1 = require("./api.client");
9
+ Object.defineProperty(exports, "ApiClient", { enumerable: true, get: function () { return api_client_1.ApiClient; } });
10
+ // API Assertions
11
+ var api_assertions_1 = require("./api.assertions");
12
+ Object.defineProperty(exports, "ApiAssertions", { enumerable: true, get: function () { return api_assertions_1.ApiAssertions; } });
13
+ // API Request Builder
14
+ var api_builder_1 = require("./api.builder");
15
+ Object.defineProperty(exports, "ApiRequestBuilder", { enumerable: true, get: function () { return api_builder_1.ApiRequestBuilder; } });
16
+ Object.defineProperty(exports, "createRequest", { enumerable: true, get: function () { return api_builder_1.createRequest; } });
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,aAAa;AACb,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAElB,iBAAiB;AACjB,mDAI0B;AAHxB,+GAAA,aAAa,OAAA;AAKf,sBAAsB;AACtB,6CAAiE;AAAxD,gHAAA,iBAAiB,OAAA;AAAE,4GAAA,aAAa,OAAA"}
@@ -0,0 +1,130 @@
1
+ import { Platform, DriverStatus, ScreenshotOptions, BaseConfig, IDriver } from "../types";
2
+ import { Logger } from "../utils";
3
+ /**
4
+ * Abstract base driver class that all platform drivers must extend.
5
+ * Provides common functionality and enforces consistent API across platforms.
6
+ */
7
+ export declare abstract class BaseDriver implements IDriver {
8
+ /** Platform type */
9
+ protected readonly platform: Platform;
10
+ /** Driver configuration */
11
+ protected config: BaseConfig;
12
+ /** Logger instance */
13
+ protected logger: Logger;
14
+ /** Session ID */
15
+ protected sessionId: string | undefined;
16
+ /** Initialization state */
17
+ protected initialized: boolean;
18
+ /** Session start time */
19
+ protected startTime: Date | undefined;
20
+ /** Implicit wait timeout */
21
+ protected implicitWaitTimeout: number;
22
+ /**
23
+ * Create a new BaseDriver instance
24
+ * @param platform - The platform type (web, api, mobile)
25
+ * @param config - Driver configuration
26
+ * @param logger - Optional logger instance
27
+ */
28
+ constructor(platform: Platform, config: BaseConfig, logger?: Logger);
29
+ /**
30
+ * Initialize the driver - must be implemented by subclasses
31
+ */
32
+ abstract initialize(): Promise<void>;
33
+ /**
34
+ * Get the underlying driver instance - must be implemented by subclasses
35
+ */
36
+ abstract getDriver(): unknown;
37
+ /**
38
+ * Take a screenshot - must be implemented by subclasses
39
+ */
40
+ abstract takeScreenshot(options?: ScreenshotOptions): Promise<Buffer>;
41
+ /**
42
+ * Execute custom script - must be implemented by subclasses
43
+ */
44
+ abstract executeScript<T>(script: string | ((...args: unknown[]) => T), ...args: unknown[]): Promise<T>;
45
+ /**
46
+ * Quit the driver and cleanup - can be overridden by subclasses
47
+ */
48
+ quit(): Promise<void>;
49
+ /**
50
+ * Check if driver is initialized
51
+ */
52
+ isInitialized(): boolean;
53
+ /**
54
+ * Get current platform
55
+ */
56
+ getPlatform(): Platform;
57
+ /**
58
+ * Get session ID
59
+ */
60
+ getSessionId(): string | undefined;
61
+ /**
62
+ * Get driver status
63
+ */
64
+ getStatus(): DriverStatus;
65
+ /**
66
+ * Set implicit wait timeout
67
+ */
68
+ setImplicitWait(timeout: number): Promise<void>;
69
+ /**
70
+ * Get implicit wait timeout
71
+ */
72
+ getImplicitWait(): number;
73
+ /**
74
+ * Get the configuration
75
+ */
76
+ getConfig(): BaseConfig;
77
+ /**
78
+ * Get the logger instance
79
+ */
80
+ getLogger(): Logger;
81
+ /**
82
+ * Ensure driver is initialized, throw error if not
83
+ */
84
+ protected ensureInitialized(operation: string): void;
85
+ /**
86
+ * Generate a new session ID
87
+ */
88
+ protected generateSessionId(): string;
89
+ /**
90
+ * Mark driver as initialized
91
+ */
92
+ protected markInitialized(): void;
93
+ /**
94
+ * Save screenshot to file
95
+ */
96
+ protected saveScreenshot(buffer: Buffer, options?: ScreenshotOptions): Promise<string>;
97
+ /**
98
+ * Generate a unique screenshot filename
99
+ */
100
+ protected generateScreenshotFilename(extension?: string): string;
101
+ /**
102
+ * Get safe config (without sensitive data) for logging
103
+ */
104
+ protected getSafeConfig(): Record<string, unknown>;
105
+ /**
106
+ * Log action start
107
+ */
108
+ protected logActionStart(action: string, details?: Record<string, unknown>): number;
109
+ /**
110
+ * Log action end
111
+ */
112
+ protected logActionEnd(action: string, startTime: number, details?: Record<string, unknown>): void;
113
+ /**
114
+ * Log action failure
115
+ */
116
+ protected logActionFailed(action: string, error: Error, details?: Record<string, unknown>): void;
117
+ /**
118
+ * Execute an action with logging
119
+ */
120
+ protected executeAction<T>(actionName: string, action: () => Promise<T>, details?: Record<string, unknown>): Promise<T>;
121
+ /**
122
+ * Get session duration in milliseconds
123
+ */
124
+ getSessionDuration(): number | undefined;
125
+ /**
126
+ * Get timeout value (config or default)
127
+ */
128
+ protected getTimeout(overrideTimeout?: number): number;
129
+ }
130
+ //# sourceMappingURL=base.driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.driver.d.ts","sourceRoot":"","sources":["../../src/core/base.driver.ts"],"names":[],"mappings":"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"}