@intuned/runtime-dev 1.3.18-interface.13 → 1.3.18-interface.15

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 (60) hide show
  1. package/.babelrc +27 -0
  2. package/.claude/settings.local.json +7 -0
  3. package/.eslintignore +10 -0
  4. package/.eslintrc.js +39 -0
  5. package/InterfaceTemplate/__utils.ts +3 -1
  6. package/WebTemplate.zip +0 -0
  7. package/package.json +19 -73
  8. package/template.tsconfig.json +11 -0
  9. package/tsconfig.eslint.json +5 -0
  10. package/tsconfig.json +25 -0
  11. package/tsup.config.ts +11 -0
  12. package/typedoc.json +49 -0
  13. package/dist/commands/api/run.d.ts +0 -8
  14. package/dist/commands/api/run.js +0 -2094
  15. package/dist/commands/auth-sessions/load.d.ts +0 -1
  16. package/dist/commands/auth-sessions/load.js +0 -1559
  17. package/dist/commands/auth-sessions/run-check.d.ts +0 -1
  18. package/dist/commands/auth-sessions/run-check.js +0 -1964
  19. package/dist/commands/auth-sessions/run-create.d.ts +0 -1
  20. package/dist/commands/auth-sessions/run-create.js +0 -1968
  21. package/dist/commands/browser/save-state.d.ts +0 -1
  22. package/dist/commands/browser/save-state.js +0 -108
  23. package/dist/commands/browser/start-browser.d.ts +0 -1
  24. package/dist/commands/browser/start-browser.js +0 -67
  25. package/dist/commands/build.d.ts +0 -2
  26. package/dist/commands/build.js +0 -203
  27. package/dist/commands/common/tsNodeImport.d.ts +0 -5
  28. package/dist/commands/common/tsNodeImport.js +0 -82
  29. package/dist/commands/get-headless-user-agent.d.ts +0 -2
  30. package/dist/commands/get-headless-user-agent.js +0 -354
  31. package/dist/commands/interface/run.d.ts +0 -3
  32. package/dist/commands/interface/run.js +0 -2084
  33. package/dist/commands/intuned-cli/main.d.ts +0 -2
  34. package/dist/commands/intuned-cli/main.js +0 -5403
  35. package/dist/commands/ts-check.d.ts +0 -1
  36. package/dist/commands/ts-check.js +0 -158
  37. package/dist/common/assets/browser_scripts.js +0 -2580
  38. package/dist/common/asyncLocalStorage/index.d.ts +0 -17
  39. package/dist/common/asyncLocalStorage/index.js +0 -41
  40. package/dist/common/binStartupScript.d.ts +0 -2
  41. package/dist/common/binStartupScript.js +0 -152
  42. package/dist/common/cleanEnvironmentVariables.d.ts +0 -3
  43. package/dist/common/cleanEnvironmentVariables.js +0 -38
  44. package/dist/common/constants.d.ts +0 -13
  45. package/dist/common/constants.js +0 -59
  46. package/dist/common/contextStorageStateHelpers.d.ts +0 -24
  47. package/dist/common/contextStorageStateHelpers.js +0 -108
  48. package/dist/common/jwtTokenManager.d.ts +0 -19
  49. package/dist/common/jwtTokenManager.js +0 -180
  50. package/dist/common/runApi/index.d.ts +0 -11
  51. package/dist/common/runApi/index.js +0 -1873
  52. package/dist/common/settingsSchema.d.ts +0 -540
  53. package/dist/common/settingsSchema.js +0 -92
  54. package/dist/common/telemetry.d.ts +0 -6
  55. package/dist/common/telemetry.js +0 -63
  56. package/dist/export.d-BAUMB-lG.d.ts +0 -140
  57. package/dist/index.d.ts +0 -6
  58. package/dist/index.js +0 -808
  59. package/dist/runtime/index.d.ts +0 -168
  60. package/dist/runtime/index.js +0 -801
@@ -1,354 +0,0 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __copyProps = (to, from, except, desc) => {
8
- if (from && typeof from === "object" || typeof from === "function") {
9
- for (let key of __getOwnPropNames(from))
10
- if (!__hasOwnProp.call(to, key) && key !== except)
11
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
12
- }
13
- return to;
14
- };
15
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
16
- // If the importer is in node compatibility mode or this is not an ESM
17
- // file that has been converted to a CommonJS file using a Babel-
18
- // compatible transform (i.e. "__esModule" has not been set), then set
19
- // "default" to the CommonJS "module.exports" for node compatibility.
20
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
21
- mod
22
- ));
23
-
24
- // src/commands/get-headless-user-agent.ts
25
- var import_commander = require("commander");
26
- var import_dotenv2 = __toESM(require("dotenv"));
27
-
28
- // src/common/launchBrowser.ts
29
- var playwright = __toESM(require("playwright"));
30
- var import_fs_extra = require("fs-extra");
31
- var fs2 = __toESM(require("fs-extra"));
32
- var import_wait_on = __toESM(require("wait-on"));
33
- var import_child_process = require("child_process");
34
-
35
- // src/commands/common/utils/fileUtils.ts
36
- var fs = __toESM(require("fs-extra"));
37
- var import_dotenv = __toESM(require("dotenv"));
38
- import_dotenv.default.config();
39
-
40
- // src/common/settingsSchema.ts
41
- var z = __toESM(require("zod"));
42
- var baseCaptchaSchema = z.object({
43
- enabled: z.boolean()
44
- });
45
- var customCaptchaSchema = baseCaptchaSchema.extend({
46
- imageLocators: z.array(z.string()).min(1, "At least one image locator is required"),
47
- submitLocators: z.array(z.string()).min(1, "At least one submit locator is required"),
48
- inputLocators: z.array(z.string()).min(1, "At least one input locator is required")
49
- });
50
- var textCaptchaSchema = baseCaptchaSchema.extend({
51
- labelLocators: z.array(z.string()).min(1, "At least one image locator is required"),
52
- submitLocators: z.array(z.string()).min(1, "At least one submit locator is required"),
53
- inputLocators: z.array(z.string()).min(1, "At least one input locator is required")
54
- });
55
- var captchaSolverSolveSettingsSchema = z.object({
56
- autoSolve: z.boolean().default(true),
57
- solveDelay: z.number().min(0).default(2e3),
58
- maxRetries: z.number().min(0).default(3),
59
- timeout: z.number().min(0).default(3e4)
60
- });
61
- var captchaSolverSettingsSchema = z.object({
62
- enabled: z.boolean().default(false),
63
- port: z.number().int().min(1).max(65535).optional(),
64
- cloudflare: baseCaptchaSchema.optional(),
65
- googleRecaptchaV2: baseCaptchaSchema.optional(),
66
- googleRecaptchaV3: baseCaptchaSchema.optional(),
67
- awscaptcha: baseCaptchaSchema.optional(),
68
- hcaptcha: baseCaptchaSchema.optional(),
69
- funcaptcha: baseCaptchaSchema.optional(),
70
- geetest: baseCaptchaSchema.optional(),
71
- lemin: baseCaptchaSchema.optional(),
72
- customCaptcha: customCaptchaSchema.optional(),
73
- text: textCaptchaSchema.optional(),
74
- settings: captchaSolverSolveSettingsSchema.default(
75
- captchaSolverSolveSettingsSchema.parse({})
76
- )
77
- }).default({});
78
- var authSessionsSchema = z.object({
79
- enabled: z.boolean()
80
- }).optional().default({
81
- enabled: false
82
- });
83
- var stealthModeSchema = z.object({
84
- enabled: z.boolean()
85
- }).optional().default({
86
- enabled: false
87
- });
88
- var settingsSchema = z.object({
89
- authSessions: authSessionsSchema,
90
- stealthMode: stealthModeSchema,
91
- captchaSolver: captchaSolverSettingsSchema.optional()
92
- });
93
-
94
- // src/common/constants.ts
95
- var WORKSPACE_ID_ENV_VAR_KEY = "INTUNED_WORKSPACE_ID";
96
- var PROJECT_ID_ENV_VAR_KEY = "INTUNED_PROJECT_ID";
97
- var API_KEY_ENV_VAR_KEY = "INTUNED_API_KEY";
98
- var AUTH_TOKEN_ENV_VAR_KEY = "INTUNED_AUTH_TOKEN";
99
- var API_KEY_HEADER_NAME = "x-api-key";
100
- var CLI_ENV_VAR_KEY = "INTUNED_CLI";
101
-
102
- // src/common/jwtTokenManager.ts
103
- var import_cross_fetch = __toESM(require("cross-fetch"));
104
- var jwt = __toESM(require("jsonwebtoken"));
105
- var import_neverthrow = require("neverthrow");
106
- var JwtTokenManager = class {
107
- constructor(refreshTokenPath) {
108
- this.refreshTokenPath = refreshTokenPath;
109
- this._token = void 0;
110
- }
111
- get token() {
112
- return this._token;
113
- }
114
- // When the token is set, the schedule for renewal is issued automatically
115
- // This is currently being set it two places:
116
- // 1. Whenever the runner starts, initializes it from the environment variable (set whenever the api is run from the authoring IDE)
117
- // 2. Whenever a published api is called to run (/api/run/*), it is set to the token received in the run request.
118
- set token(newToken) {
119
- if (this._token != newToken) {
120
- this._token = newToken;
121
- void this.scheduleTokenRefresh();
122
- }
123
- }
124
- get timeToRefresh() {
125
- if (!this._token) return;
126
- const payload = jwt.decode(this._token);
127
- if (!payload || typeof payload == "string") return;
128
- const expiry = payload.expiry;
129
- if (!expiry || typeof expiry !== "number") return;
130
- const timeWindow = 60 * 1e3;
131
- const timeToRefresh = expiry - Date.now() - timeWindow;
132
- return Math.max(timeToRefresh, timeWindow);
133
- }
134
- async scheduleTokenRefresh() {
135
- if (process.env.RUN_ENVIRONMENT?.toLowerCase() !== "authoring") return;
136
- const timeToRefresh = this.timeToRefresh;
137
- if (timeToRefresh === void 0) return;
138
- if (this.tokenRefreshTimeout) clearTimeout(this.tokenRefreshTimeout);
139
- this.tokenRefreshTimeout = setTimeout(async () => {
140
- const result = await this.refreshToken();
141
- if (result && result.isErr()) {
142
- console.error(`[Internal Error] ${result.error}`);
143
- return;
144
- }
145
- await this.scheduleTokenRefresh();
146
- }, timeToRefresh);
147
- }
148
- async refreshToken() {
149
- if (process.env.RUN_ENVIRONMENT?.toLowerCase() !== "authoring") return;
150
- const res = await this.fetchWithToken(
151
- `${this.backendFunctionsBaseUrl}/${this.refreshTokenPath}`,
152
- {
153
- method: "GET"
154
- }
155
- );
156
- if (res.status === 401) {
157
- return (0, import_neverthrow.err)("Unauthorized");
158
- }
159
- const jsonResult = await import_neverthrow.ResultAsync.fromPromise(
160
- res.json(),
161
- () => "not json"
162
- );
163
- if (jsonResult.isErr()) return;
164
- const newToken = jsonResult.value.token;
165
- if (newToken) this._token = newToken;
166
- }
167
- async fetchWithToken(...[input, init]) {
168
- const headers = new Headers(init?.headers);
169
- const apiKey = process.env[API_KEY_ENV_VAR_KEY];
170
- if (apiKey) {
171
- headers.set(API_KEY_HEADER_NAME, apiKey);
172
- }
173
- const token = process.env[AUTH_TOKEN_ENV_VAR_KEY];
174
- if (token) {
175
- headers.set("Authorization", `Bearer ${token}`);
176
- }
177
- if (this.token !== void 0) {
178
- headers.set("Authorization", `Bearer ${this.token}`);
179
- }
180
- const result = await (0, import_cross_fetch.default)(input, {
181
- ...init,
182
- headers
183
- });
184
- if (result.status === 401 && process.env[CLI_ENV_VAR_KEY] === "true") {
185
- console.warn(
186
- "Unauthorized backend function call - make sure to provision your project to Intuned to set up the correct API credentials.\nRun 'intuned provision' or see https://docs.intunedhq.com/docs/05-references/cli#provision-project for more information."
187
- );
188
- }
189
- return result;
190
- }
191
- get backendFunctionsBaseUrl() {
192
- try {
193
- if (!process.env.FUNCTIONS_DOMAIN) {
194
- throw new Error(
195
- `Cannot call backend function - FUNCTIONS_DOMAIN not set`
196
- );
197
- }
198
- const domain = process.env.FUNCTIONS_DOMAIN;
199
- if (!process.env[WORKSPACE_ID_ENV_VAR_KEY]) {
200
- throw new Error(
201
- `Cannot call backend function - ${WORKSPACE_ID_ENV_VAR_KEY} not set`
202
- );
203
- }
204
- const workspaceId = process.env[WORKSPACE_ID_ENV_VAR_KEY];
205
- if (!process.env[PROJECT_ID_ENV_VAR_KEY] && !process.env.INTUNED_INTEGRATION_ID) {
206
- throw new Error(
207
- `Cannot call backend function - ${PROJECT_ID_ENV_VAR_KEY} or INTUNED_INTEGRATION_ID not set`
208
- );
209
- }
210
- const projectId = process.env.INTUNED_INTEGRATION_ID ?? process.env[PROJECT_ID_ENV_VAR_KEY];
211
- return `${domain}/api/${workspaceId}/functions/${projectId}`;
212
- } catch (e) {
213
- if (process.env[CLI_ENV_VAR_KEY] === "true") {
214
- throw new Error(
215
- `API credentials not set - make sure to provision your project to Intuned to set up the correct API credentials.
216
- Run 'intuned provision' or see https://docs.intunedhq.com/docs/05-references/cli#provision-project for more information.
217
- Original error: ${e.message}`
218
- );
219
- }
220
- }
221
- }
222
- };
223
- var backendFunctionsTokenManager = new JwtTokenManager(
224
- `refreshBackendFunctionsToken`
225
- );
226
- backendFunctionsTokenManager.token = process.env.INTUNED_AUTHORING_SESSION_BACKEND_FUNCTIONS_TOKEN;
227
-
228
- // src/common/extension/intunedExtensionServer.ts
229
- var import_fastify = __toESM(require("fastify"));
230
-
231
- // src/common/extension/types.ts
232
- var import_zod = require("zod");
233
- var captchaTypeSchema = import_zod.z.enum([
234
- "aws",
235
- "cloudflare",
236
- "customcaptcha",
237
- "funcaptcha",
238
- "geetest",
239
- "hcaptcha",
240
- "lemincaptcha",
241
- "recaptcha",
242
- "textcaptcha"
243
- ]);
244
- var captchaStatusSchema = import_zod.z.enum([
245
- "attached",
246
- "solving",
247
- "solved",
248
- "error",
249
- "detached"
250
- ]);
251
- var captchaErrorCodeSchema = import_zod.z.enum([
252
- "HIT_LIMIT",
253
- "MAX_RETRIES",
254
- "UNEXPECTED_SERVER_RESPONSE",
255
- "UNEXPECTED_ERROR"
256
- ]);
257
- var captchaErrorSchema = import_zod.z.object({
258
- code: captchaErrorCodeSchema,
259
- error: import_zod.z.unknown().optional()
260
- });
261
- var captchaBaseSchema = import_zod.z.object({
262
- id: import_zod.z.string().min(1),
263
- tabId: import_zod.z.number().int().positive(),
264
- type: captchaTypeSchema,
265
- retryCount: import_zod.z.number().int().nonnegative().optional()
266
- });
267
- var captchaNonErrorSchema = captchaBaseSchema.extend({
268
- status: captchaStatusSchema.exclude(["error"])
269
- });
270
- var captchaErrorStatusSchema = captchaBaseSchema.extend({
271
- status: import_zod.z.literal("error"),
272
- error: captchaErrorSchema
273
- });
274
- var captchaSchema = import_zod.z.discriminatedUnion("status", [
275
- captchaBaseSchema.extend({
276
- status: import_zod.z.literal("attached")
277
- }),
278
- captchaBaseSchema.extend({
279
- status: import_zod.z.literal("solving")
280
- }),
281
- captchaBaseSchema.extend({
282
- status: import_zod.z.literal("solved")
283
- }),
284
- captchaBaseSchema.extend({
285
- status: import_zod.z.literal("detached")
286
- }),
287
- captchaErrorStatusSchema
288
- ]);
289
-
290
- // src/common/extension/extensionsHelpers.ts
291
- var import_portfinder = require("portfinder");
292
-
293
- // src/common/launchBrowser.ts
294
- var import_util = require("util");
295
- var import_neverthrow2 = require("neverthrow");
296
- var import_zod2 = require("zod");
297
- var execAsync = (0, import_util.promisify)(import_child_process.exec);
298
- async function getBrowserExecutablePath() {
299
- const browserType = getBrowserType();
300
- if (browserType === "brave") {
301
- return await getBraveExecutablePath();
302
- }
303
- }
304
- function getBrowserType() {
305
- if (process.env.BROWSER_TYPE === "brave") {
306
- return "brave";
307
- }
308
- return "chromium";
309
- }
310
- async function getBraveExecutablePath() {
311
- const { stdout } = await execAsync("which brave-browser-stable");
312
- const bravePath = stdout.trim();
313
- if (bravePath.length === 0) {
314
- throw new Error("Brave browser not found");
315
- }
316
- return bravePath;
317
- }
318
- async function getHeadlessUserAgent({
319
- executablePath,
320
- args,
321
- ignoreDefaultArgs
322
- }) {
323
- const browser = await playwright.chromium.launch({
324
- headless: true,
325
- executablePath,
326
- args,
327
- ignoreDefaultArgs
328
- });
329
- const context = await browser.newContext();
330
- const page = await context.newPage();
331
- let userAgent = await page.evaluate(() => navigator.userAgent);
332
- await browser.close();
333
- if (!userAgent || typeof userAgent !== "string") {
334
- return void 0;
335
- }
336
- userAgent = userAgent.replace("HeadlessChrome", "Chrome");
337
- return userAgent;
338
- }
339
-
340
- // src/commands/get-headless-user-agent.ts
341
- import_dotenv2.default.config();
342
- import_commander.program.description("get headless user agent").action(async () => {
343
- try {
344
- console.log(
345
- await getHeadlessUserAgent({
346
- executablePath: await getBrowserExecutablePath()
347
- })
348
- );
349
- } catch (error) {
350
- console.error("Error getting headless user agent:", error);
351
- process.exit(1);
352
- }
353
- });
354
- import_commander.program.parse(process.argv);
@@ -1,3 +0,0 @@
1
- declare function runAutomationCLI<ResultType = any>(importFunction?: (path: string) => Promise<any>): void;
2
-
3
- export { runAutomationCLI };