@intuned/runtime 1.3.11 → 1.3.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/intuned-get-headless-user-agent +4 -0
- package/dist/commands/get-headless-user-agent.d.ts +1 -0
- package/dist/commands/get-headless-user-agent.js +18 -0
- package/dist/commands/intuned-cli/controller/authSession.d.ts +12 -12
- package/dist/commands/intuned-cli/helpers/auth.d.ts +2 -2
- package/dist/commands/intuned-cli/helpers/errors.d.ts +1 -1
- package/dist/commands/intuned-cli/helpers/errors.js +2 -2
- package/dist/commands/intuned-cli/helpers/intunedJson.d.ts +7 -139
- package/dist/commands/intuned-cli/helpers/intunedJson.js +12 -79
- package/dist/common/binStartupScript.js +8 -5
- package/dist/common/constants.d.ts +2 -0
- package/dist/common/constants.js +4 -2
- package/dist/common/intunedJson.d.ts +229 -0
- package/dist/common/intunedJson.js +133 -0
- package/dist/common/launchBrowser.d.ts +6 -0
- package/dist/common/launchBrowser.js +39 -16
- package/dist/common/runApi/index.js +11 -1
- package/dist/common/runApi/types.d.ts +40 -40
- package/dist/index.d.ts +1 -1
- package/dist/index.js +6 -0
- package/dist/runtime/attemptStore.d.ts +2 -2
- package/dist/runtime/export.d.ts +69 -13
- package/dist/runtime/index.d.ts +1 -0
- package/dist/runtime/index.js +7 -0
- package/dist/runtime/persistentStore.d.ts +2 -0
- package/dist/runtime/persistentStore.js +37 -0
- package/dist/runtime/persistentStore.test.js +101 -0
- package/package.json +3 -1
- package/WebTemplate.zip +0 -0
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type Err, type Ok } from "neverthrow";
|
|
3
|
+
export declare const intunedJsonSchema: z.ZodIntersection<z.ZodObject<{
|
|
4
|
+
projectName: z.ZodOptional<z.ZodString>;
|
|
5
|
+
workspaceId: z.ZodOptional<z.ZodString>;
|
|
6
|
+
metadata: z.ZodCatch<z.ZodOptional<z.ZodObject<{
|
|
7
|
+
defaultJobInput: z.ZodCatch<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>>;
|
|
8
|
+
defaultRunPlaygroundInput: z.ZodCatch<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>>;
|
|
9
|
+
testAuthSessionInput: z.ZodCatch<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>>;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
defaultJobInput?: Record<string, any> | undefined;
|
|
12
|
+
defaultRunPlaygroundInput?: Record<string, any> | undefined;
|
|
13
|
+
testAuthSessionInput?: Record<string, any> | undefined;
|
|
14
|
+
}, {
|
|
15
|
+
defaultJobInput?: unknown;
|
|
16
|
+
defaultRunPlaygroundInput?: unknown;
|
|
17
|
+
testAuthSessionInput?: unknown;
|
|
18
|
+
}>>>;
|
|
19
|
+
stealthMode: z.ZodCatch<z.ZodOptional<z.ZodObject<{
|
|
20
|
+
enabled: z.ZodBoolean;
|
|
21
|
+
}, "strip", z.ZodTypeAny, {
|
|
22
|
+
enabled: boolean;
|
|
23
|
+
}, {
|
|
24
|
+
enabled: boolean;
|
|
25
|
+
}>>>;
|
|
26
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
27
|
+
projectName: z.ZodOptional<z.ZodString>;
|
|
28
|
+
workspaceId: z.ZodOptional<z.ZodString>;
|
|
29
|
+
metadata: z.ZodCatch<z.ZodOptional<z.ZodObject<{
|
|
30
|
+
defaultJobInput: z.ZodCatch<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>>;
|
|
31
|
+
defaultRunPlaygroundInput: z.ZodCatch<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>>;
|
|
32
|
+
testAuthSessionInput: z.ZodCatch<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>>;
|
|
33
|
+
}, "strip", z.ZodTypeAny, {
|
|
34
|
+
defaultJobInput?: Record<string, any> | undefined;
|
|
35
|
+
defaultRunPlaygroundInput?: Record<string, any> | undefined;
|
|
36
|
+
testAuthSessionInput?: Record<string, any> | undefined;
|
|
37
|
+
}, {
|
|
38
|
+
defaultJobInput?: unknown;
|
|
39
|
+
defaultRunPlaygroundInput?: unknown;
|
|
40
|
+
testAuthSessionInput?: unknown;
|
|
41
|
+
}>>>;
|
|
42
|
+
stealthMode: z.ZodCatch<z.ZodOptional<z.ZodObject<{
|
|
43
|
+
enabled: z.ZodBoolean;
|
|
44
|
+
}, "strip", z.ZodTypeAny, {
|
|
45
|
+
enabled: boolean;
|
|
46
|
+
}, {
|
|
47
|
+
enabled: boolean;
|
|
48
|
+
}>>>;
|
|
49
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
50
|
+
projectName: z.ZodOptional<z.ZodString>;
|
|
51
|
+
workspaceId: z.ZodOptional<z.ZodString>;
|
|
52
|
+
metadata: z.ZodCatch<z.ZodOptional<z.ZodObject<{
|
|
53
|
+
defaultJobInput: z.ZodCatch<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>>;
|
|
54
|
+
defaultRunPlaygroundInput: z.ZodCatch<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>>;
|
|
55
|
+
testAuthSessionInput: z.ZodCatch<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>>;
|
|
56
|
+
}, "strip", z.ZodTypeAny, {
|
|
57
|
+
defaultJobInput?: Record<string, any> | undefined;
|
|
58
|
+
defaultRunPlaygroundInput?: Record<string, any> | undefined;
|
|
59
|
+
testAuthSessionInput?: Record<string, any> | undefined;
|
|
60
|
+
}, {
|
|
61
|
+
defaultJobInput?: unknown;
|
|
62
|
+
defaultRunPlaygroundInput?: unknown;
|
|
63
|
+
testAuthSessionInput?: unknown;
|
|
64
|
+
}>>>;
|
|
65
|
+
stealthMode: z.ZodCatch<z.ZodOptional<z.ZodObject<{
|
|
66
|
+
enabled: z.ZodBoolean;
|
|
67
|
+
}, "strip", z.ZodTypeAny, {
|
|
68
|
+
enabled: boolean;
|
|
69
|
+
}, {
|
|
70
|
+
enabled: boolean;
|
|
71
|
+
}>>>;
|
|
72
|
+
}, z.ZodTypeAny, "passthrough">>, z.ZodUnion<[z.ZodObject<{
|
|
73
|
+
authSessions: z.ZodObject<{
|
|
74
|
+
enabled: z.ZodLiteral<false>;
|
|
75
|
+
}, "strip", z.ZodTypeAny, {
|
|
76
|
+
enabled: false;
|
|
77
|
+
}, {
|
|
78
|
+
enabled: false;
|
|
79
|
+
}>;
|
|
80
|
+
apiAccess: z.ZodObject<{
|
|
81
|
+
enabled: z.ZodLiteral<false>;
|
|
82
|
+
}, "strip", z.ZodTypeAny, {
|
|
83
|
+
enabled: false;
|
|
84
|
+
}, {
|
|
85
|
+
enabled: false;
|
|
86
|
+
}>;
|
|
87
|
+
}, "strip", z.ZodTypeAny, {
|
|
88
|
+
authSessions: {
|
|
89
|
+
enabled: false;
|
|
90
|
+
};
|
|
91
|
+
apiAccess: {
|
|
92
|
+
enabled: false;
|
|
93
|
+
};
|
|
94
|
+
}, {
|
|
95
|
+
authSessions: {
|
|
96
|
+
enabled: false;
|
|
97
|
+
};
|
|
98
|
+
apiAccess: {
|
|
99
|
+
enabled: false;
|
|
100
|
+
};
|
|
101
|
+
}>, z.ZodObject<{
|
|
102
|
+
authSessions: z.ZodUnion<[z.ZodObject<{
|
|
103
|
+
enabled: z.ZodLiteral<false>;
|
|
104
|
+
}, "strip", z.ZodTypeAny, {
|
|
105
|
+
enabled: false;
|
|
106
|
+
}, {
|
|
107
|
+
enabled: false;
|
|
108
|
+
}>, z.ZodObject<{
|
|
109
|
+
enabled: z.ZodLiteral<true>;
|
|
110
|
+
type: z.ZodEnum<["MANUAL", "API"]>;
|
|
111
|
+
startUrl: z.ZodOptional<z.ZodString>;
|
|
112
|
+
finishUrl: z.ZodOptional<z.ZodString>;
|
|
113
|
+
}, "strip", z.ZodTypeAny, {
|
|
114
|
+
type: "API" | "MANUAL";
|
|
115
|
+
enabled: true;
|
|
116
|
+
startUrl?: string | undefined;
|
|
117
|
+
finishUrl?: string | undefined;
|
|
118
|
+
}, {
|
|
119
|
+
type: "API" | "MANUAL";
|
|
120
|
+
enabled: true;
|
|
121
|
+
startUrl?: string | undefined;
|
|
122
|
+
finishUrl?: string | undefined;
|
|
123
|
+
}>]>;
|
|
124
|
+
apiAccess: z.ZodObject<{
|
|
125
|
+
enabled: z.ZodLiteral<true>;
|
|
126
|
+
}, "strip", z.ZodTypeAny, {
|
|
127
|
+
enabled: true;
|
|
128
|
+
}, {
|
|
129
|
+
enabled: true;
|
|
130
|
+
}>;
|
|
131
|
+
}, "strip", z.ZodTypeAny, {
|
|
132
|
+
authSessions: {
|
|
133
|
+
enabled: false;
|
|
134
|
+
} | {
|
|
135
|
+
type: "API" | "MANUAL";
|
|
136
|
+
enabled: true;
|
|
137
|
+
startUrl?: string | undefined;
|
|
138
|
+
finishUrl?: string | undefined;
|
|
139
|
+
};
|
|
140
|
+
apiAccess: {
|
|
141
|
+
enabled: true;
|
|
142
|
+
};
|
|
143
|
+
}, {
|
|
144
|
+
authSessions: {
|
|
145
|
+
enabled: false;
|
|
146
|
+
} | {
|
|
147
|
+
type: "API" | "MANUAL";
|
|
148
|
+
enabled: true;
|
|
149
|
+
startUrl?: string | undefined;
|
|
150
|
+
finishUrl?: string | undefined;
|
|
151
|
+
};
|
|
152
|
+
apiAccess: {
|
|
153
|
+
enabled: true;
|
|
154
|
+
};
|
|
155
|
+
}>]>>;
|
|
156
|
+
export type IntunedJson = z.infer<typeof intunedJsonSchema>;
|
|
157
|
+
export declare const intunedSettingsFileNames: readonly ["Intuned.json", "Intuned.jsonc", "Intuned.yaml", "Intuned.yml", "Intuned.toml"];
|
|
158
|
+
export declare function loadIntunedJson(): Promise<Err<never, string> | Ok<{
|
|
159
|
+
projectName?: string | undefined;
|
|
160
|
+
workspaceId?: string | undefined;
|
|
161
|
+
metadata?: {
|
|
162
|
+
defaultJobInput?: Record<string, any> | undefined;
|
|
163
|
+
defaultRunPlaygroundInput?: Record<string, any> | undefined;
|
|
164
|
+
testAuthSessionInput?: Record<string, any> | undefined;
|
|
165
|
+
} | undefined;
|
|
166
|
+
stealthMode?: {
|
|
167
|
+
enabled: boolean;
|
|
168
|
+
} | undefined;
|
|
169
|
+
} & {
|
|
170
|
+
[k: string]: unknown;
|
|
171
|
+
} & ({
|
|
172
|
+
authSessions: {
|
|
173
|
+
enabled: false;
|
|
174
|
+
};
|
|
175
|
+
apiAccess: {
|
|
176
|
+
enabled: false;
|
|
177
|
+
};
|
|
178
|
+
} | {
|
|
179
|
+
authSessions: {
|
|
180
|
+
enabled: false;
|
|
181
|
+
} | {
|
|
182
|
+
type: "API" | "MANUAL";
|
|
183
|
+
enabled: true;
|
|
184
|
+
startUrl?: string | undefined;
|
|
185
|
+
finishUrl?: string | undefined;
|
|
186
|
+
};
|
|
187
|
+
apiAccess: {
|
|
188
|
+
enabled: true;
|
|
189
|
+
};
|
|
190
|
+
}), never>>;
|
|
191
|
+
export declare function getIntunedSettingsFile(): Promise<Ok<{
|
|
192
|
+
name: typeof intunedSettingsFileNames[number];
|
|
193
|
+
path: string;
|
|
194
|
+
parse: (content: string) => any;
|
|
195
|
+
}, never> | Err<never, string>>;
|
|
196
|
+
export declare function getIntunedSettingsFileName(): Promise<Err<never, string> | Ok<"Intuned.json" | "Intuned.jsonc" | "Intuned.yaml" | "Intuned.yml" | "Intuned.toml", never>>;
|
|
197
|
+
export declare function loadIntunedJsonSync(): Err<never, string> | Ok<{
|
|
198
|
+
projectName?: string | undefined;
|
|
199
|
+
workspaceId?: string | undefined;
|
|
200
|
+
metadata?: {
|
|
201
|
+
defaultJobInput?: Record<string, any> | undefined;
|
|
202
|
+
defaultRunPlaygroundInput?: Record<string, any> | undefined;
|
|
203
|
+
testAuthSessionInput?: Record<string, any> | undefined;
|
|
204
|
+
} | undefined;
|
|
205
|
+
stealthMode?: {
|
|
206
|
+
enabled: boolean;
|
|
207
|
+
} | undefined;
|
|
208
|
+
} & {
|
|
209
|
+
[k: string]: unknown;
|
|
210
|
+
} & ({
|
|
211
|
+
authSessions: {
|
|
212
|
+
enabled: false;
|
|
213
|
+
};
|
|
214
|
+
apiAccess: {
|
|
215
|
+
enabled: false;
|
|
216
|
+
};
|
|
217
|
+
} | {
|
|
218
|
+
authSessions: {
|
|
219
|
+
enabled: false;
|
|
220
|
+
} | {
|
|
221
|
+
type: "API" | "MANUAL";
|
|
222
|
+
enabled: true;
|
|
223
|
+
startUrl?: string | undefined;
|
|
224
|
+
finishUrl?: string | undefined;
|
|
225
|
+
};
|
|
226
|
+
apiAccess: {
|
|
227
|
+
enabled: true;
|
|
228
|
+
};
|
|
229
|
+
}), never>;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getIntunedSettingsFile = getIntunedSettingsFile;
|
|
7
|
+
exports.getIntunedSettingsFileName = getIntunedSettingsFileName;
|
|
8
|
+
exports.intunedSettingsFileNames = exports.intunedJsonSchema = void 0;
|
|
9
|
+
exports.loadIntunedJson = loadIntunedJson;
|
|
10
|
+
exports.loadIntunedJsonSync = loadIntunedJsonSync;
|
|
11
|
+
var _path = _interopRequireDefault(require("path"));
|
|
12
|
+
var fs = _interopRequireWildcard(require("fs-extra"));
|
|
13
|
+
var _zod = require("zod");
|
|
14
|
+
var JSONC = _interopRequireWildcard(require("jsonc-parser"));
|
|
15
|
+
var YAML = _interopRequireWildcard(require("yaml"));
|
|
16
|
+
var TOML = _interopRequireWildcard(require("smol-toml"));
|
|
17
|
+
var _neverthrow = require("neverthrow");
|
|
18
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
19
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
20
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
21
|
+
const playwright = undefined;
|
|
22
|
+
const intunedJsonSchema = exports.intunedJsonSchema = _zod.z.object({
|
|
23
|
+
projectName: _zod.z.string().optional(),
|
|
24
|
+
workspaceId: _zod.z.string().optional(),
|
|
25
|
+
metadata: _zod.z.object({
|
|
26
|
+
defaultJobInput: _zod.z.record(_zod.z.any()).optional().catch(undefined),
|
|
27
|
+
defaultRunPlaygroundInput: _zod.z.record(_zod.z.any()).optional().catch(undefined),
|
|
28
|
+
testAuthSessionInput: _zod.z.record(_zod.z.any()).optional().catch(undefined)
|
|
29
|
+
}).optional().catch(undefined),
|
|
30
|
+
stealthMode: _zod.z.object({
|
|
31
|
+
enabled: _zod.z.boolean()
|
|
32
|
+
}).optional().catch(undefined)
|
|
33
|
+
}).passthrough().and(_zod.z.union([_zod.z.object({
|
|
34
|
+
authSessions: _zod.z.object({
|
|
35
|
+
enabled: _zod.z.literal(false)
|
|
36
|
+
}),
|
|
37
|
+
apiAccess: _zod.z.object({
|
|
38
|
+
enabled: _zod.z.literal(false)
|
|
39
|
+
})
|
|
40
|
+
}), _zod.z.object({
|
|
41
|
+
authSessions: _zod.z.union([_zod.z.object({
|
|
42
|
+
enabled: _zod.z.literal(false)
|
|
43
|
+
}), _zod.z.object({
|
|
44
|
+
enabled: _zod.z.literal(true),
|
|
45
|
+
type: _zod.z.enum(["MANUAL", "API"]),
|
|
46
|
+
startUrl: _zod.z.string().optional(),
|
|
47
|
+
finishUrl: _zod.z.string().optional()
|
|
48
|
+
})]),
|
|
49
|
+
apiAccess: _zod.z.object({
|
|
50
|
+
enabled: _zod.z.literal(true)
|
|
51
|
+
})
|
|
52
|
+
})]));
|
|
53
|
+
const intunedSettingsFileNames = exports.intunedSettingsFileNames = ["Intuned.json", "Intuned.jsonc", "Intuned.yaml", "Intuned.yml", "Intuned.toml"];
|
|
54
|
+
async function loadIntunedJson() {
|
|
55
|
+
const settingsFileResult = await getIntunedSettingsFile();
|
|
56
|
+
if (!settingsFileResult.isOk()) {
|
|
57
|
+
return settingsFileResult;
|
|
58
|
+
}
|
|
59
|
+
const settingsFile = settingsFileResult.value;
|
|
60
|
+
const intunedJsonContent = await fs.readFile(settingsFile.path, "utf-8");
|
|
61
|
+
let intunedJson;
|
|
62
|
+
try {
|
|
63
|
+
intunedJson = settingsFile.parse(intunedJsonContent);
|
|
64
|
+
} catch (e) {
|
|
65
|
+
return (0, _neverthrow.err)(`Failed to parse ${settingsFile.name}: ${e.message}`);
|
|
66
|
+
}
|
|
67
|
+
const parseResult = intunedJsonSchema.safeParse(intunedJson);
|
|
68
|
+
if (!parseResult.success) {
|
|
69
|
+
const formattedError = parseResult.error.errors.map(e => `- ${e.path.join(".")}: ${e.message}`).join("\n");
|
|
70
|
+
return (0, _neverthrow.err)(`${settingsFile.name} is not valid:\n${formattedError}\nPlease fix the errors and try again.`);
|
|
71
|
+
}
|
|
72
|
+
return (0, _neverthrow.ok)(parseResult.data);
|
|
73
|
+
}
|
|
74
|
+
const intunedSettingsParsers = {
|
|
75
|
+
"Intuned.json": JSON.parse,
|
|
76
|
+
"Intuned.jsonc": JSONC.parse,
|
|
77
|
+
"Intuned.yaml": YAML.parse,
|
|
78
|
+
"Intuned.yml": YAML.parse,
|
|
79
|
+
"Intuned.toml": TOML.parse
|
|
80
|
+
};
|
|
81
|
+
async function getIntunedSettingsFile() {
|
|
82
|
+
for (const fileName of intunedSettingsFileNames) {
|
|
83
|
+
const filePath = _path.default.join(process.cwd(), fileName);
|
|
84
|
+
if (await fs.exists(filePath)) {
|
|
85
|
+
return (0, _neverthrow.ok)({
|
|
86
|
+
name: fileName,
|
|
87
|
+
path: filePath,
|
|
88
|
+
parse: intunedSettingsParsers[fileName]
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return (0, _neverthrow.err)("No Intuned settings file found.");
|
|
93
|
+
}
|
|
94
|
+
async function getIntunedSettingsFileName() {
|
|
95
|
+
const settingsFileResult = await getIntunedSettingsFile();
|
|
96
|
+
if (!settingsFileResult.isOk()) {
|
|
97
|
+
return settingsFileResult;
|
|
98
|
+
}
|
|
99
|
+
return (0, _neverthrow.ok)(settingsFileResult.value.name);
|
|
100
|
+
}
|
|
101
|
+
function loadIntunedJsonSync() {
|
|
102
|
+
const settingsFileResult = getIntunedSettingsFileSync();
|
|
103
|
+
if (!settingsFileResult.isOk()) {
|
|
104
|
+
return settingsFileResult;
|
|
105
|
+
}
|
|
106
|
+
const settingsFile = settingsFileResult.value;
|
|
107
|
+
const intunedJsonContent = fs.readFileSync(settingsFile.path, "utf-8");
|
|
108
|
+
let intunedJson;
|
|
109
|
+
try {
|
|
110
|
+
intunedJson = settingsFile.parse(intunedJsonContent);
|
|
111
|
+
} catch (e) {
|
|
112
|
+
return (0, _neverthrow.err)(`Failed to parse ${settingsFile.name}: ${e.message}`);
|
|
113
|
+
}
|
|
114
|
+
const parseResult = intunedJsonSchema.safeParse(intunedJson);
|
|
115
|
+
if (!parseResult.success) {
|
|
116
|
+
const formattedError = parseResult.error.errors.map(e => `- ${e.path.join(".")}: ${e.message}`).join("\n");
|
|
117
|
+
return (0, _neverthrow.err)(`${settingsFile.name} is not valid:\n${formattedError}\nPlease fix the errors and try again.`);
|
|
118
|
+
}
|
|
119
|
+
return (0, _neverthrow.ok)(parseResult.data);
|
|
120
|
+
}
|
|
121
|
+
function getIntunedSettingsFileSync() {
|
|
122
|
+
for (const fileName of intunedSettingsFileNames) {
|
|
123
|
+
const filePath = _path.default.join(process.cwd(), fileName);
|
|
124
|
+
if (fs.existsSync(filePath)) {
|
|
125
|
+
return (0, _neverthrow.ok)({
|
|
126
|
+
name: fileName,
|
|
127
|
+
path: filePath,
|
|
128
|
+
parse: intunedSettingsParsers[fileName]
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return (0, _neverthrow.err)("No Intuned settings file found.");
|
|
133
|
+
}
|
|
@@ -21,5 +21,11 @@ export type LaunchChromiumCdpOptions = {
|
|
|
21
21
|
};
|
|
22
22
|
export declare function launchChromium(options: LaunchChromiumStandaloneOptions): Promise<LaunchBrowserResult>;
|
|
23
23
|
export declare function launchChromium(options: LaunchChromiumCdpOptions): Promise<LaunchBrowserResult>;
|
|
24
|
+
export declare function getBrowserExecutablePath(): Promise<string | undefined>;
|
|
24
25
|
export declare function launchBrowser(options: Omit<LaunchChromiumStandaloneOptions, "executablePath"> | LaunchChromiumCdpOptions): Promise<LaunchBrowserResult>;
|
|
25
26
|
export declare function getLocalCdpAddress(port: number): string;
|
|
27
|
+
export declare function getHeadlessUserAgent({ executablePath, args, ignoreDefaultArgs, }: {
|
|
28
|
+
executablePath?: string;
|
|
29
|
+
args?: string[];
|
|
30
|
+
ignoreDefaultArgs?: string[];
|
|
31
|
+
}): Promise<string | undefined>;
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.getBrowserExecutablePath = getBrowserExecutablePath;
|
|
7
|
+
exports.getHeadlessUserAgent = getHeadlessUserAgent;
|
|
6
8
|
exports.getLocalCdpAddress = getLocalCdpAddress;
|
|
7
9
|
exports.launchBrowser = launchBrowser;
|
|
8
10
|
exports.launchChromium = launchChromium;
|
|
@@ -86,10 +88,15 @@ async function launchChromium(options) {
|
|
|
86
88
|
executablePath = undefined;
|
|
87
89
|
}
|
|
88
90
|
}
|
|
91
|
+
const viewport = null;
|
|
92
|
+
const userAgent = process.env.__PLAYWRIGHT_USER_AGENT_OVERRIDE ?? (await getHeadlessUserAgent({
|
|
93
|
+
executablePath
|
|
94
|
+
}));
|
|
89
95
|
const context = await playwright.chromium.launchPersistentContext(userDataDir, {
|
|
96
|
+
userAgent,
|
|
90
97
|
executablePath,
|
|
91
98
|
headless,
|
|
92
|
-
viewport
|
|
99
|
+
viewport,
|
|
93
100
|
proxy,
|
|
94
101
|
downloadsPath,
|
|
95
102
|
args: extraArgs,
|
|
@@ -120,25 +127,20 @@ async function launchChromium(options) {
|
|
|
120
127
|
context
|
|
121
128
|
};
|
|
122
129
|
}
|
|
130
|
+
async function getBrowserExecutablePath() {
|
|
131
|
+
const browserType = getBrowserType();
|
|
132
|
+
if (browserType === "brave") {
|
|
133
|
+
return await getBraveExecutablePath();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
123
136
|
async function launchBrowser(options) {
|
|
124
137
|
if ("cdpAddress" in options) {
|
|
125
138
|
return launchChromium(options);
|
|
126
139
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
return launchChromium(options);
|
|
132
|
-
}
|
|
133
|
-
case "brave":
|
|
134
|
-
{
|
|
135
|
-
const braveExecutablePath = await getBraveExecutablePath();
|
|
136
|
-
return launchChromium({
|
|
137
|
-
...options,
|
|
138
|
-
executablePath: braveExecutablePath
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
}
|
|
140
|
+
return launchChromium({
|
|
141
|
+
...options,
|
|
142
|
+
executablePath: await getBrowserExecutablePath()
|
|
143
|
+
});
|
|
142
144
|
}
|
|
143
145
|
function getBrowserType() {
|
|
144
146
|
if (process.env.BROWSER_TYPE === "brave") {
|
|
@@ -169,4 +171,25 @@ async function waitOnCdpAddress(cdpAddress) {
|
|
|
169
171
|
tcpTimeout: 1000,
|
|
170
172
|
window: 1000
|
|
171
173
|
});
|
|
174
|
+
}
|
|
175
|
+
async function getHeadlessUserAgent({
|
|
176
|
+
executablePath,
|
|
177
|
+
args,
|
|
178
|
+
ignoreDefaultArgs
|
|
179
|
+
}) {
|
|
180
|
+
const browser = await playwright.chromium.launch({
|
|
181
|
+
headless: true,
|
|
182
|
+
executablePath,
|
|
183
|
+
args,
|
|
184
|
+
ignoreDefaultArgs
|
|
185
|
+
});
|
|
186
|
+
const context = await browser.newContext();
|
|
187
|
+
const page = await context.newPage();
|
|
188
|
+
let userAgent = await page.evaluate(() => navigator.userAgent);
|
|
189
|
+
await browser.close();
|
|
190
|
+
if (!userAgent || typeof userAgent !== "string") {
|
|
191
|
+
return undefined;
|
|
192
|
+
}
|
|
193
|
+
userAgent = userAgent.replace("HeadlessChrome", "Chrome");
|
|
194
|
+
return userAgent;
|
|
172
195
|
}
|
|
@@ -44,6 +44,7 @@ Object.keys(_types).forEach(function (key) {
|
|
|
44
44
|
var _formatZodError = require("../formatZodError");
|
|
45
45
|
var _cleanEnvironmentVariables = require("../cleanEnvironmentVariables");
|
|
46
46
|
var _importUsingImportFunction = require("./importUsingImportFunction");
|
|
47
|
+
var _jwtTokenManager = require("../jwtTokenManager");
|
|
47
48
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
48
49
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
49
50
|
function getObjectSizeInBytes(obj) {
|
|
@@ -53,6 +54,10 @@ function getObjectSizeInBytes(obj) {
|
|
|
53
54
|
return new TextEncoder().encode(String(obj)).length;
|
|
54
55
|
}
|
|
55
56
|
}
|
|
57
|
+
function injectRuntimeEnvVars() {
|
|
58
|
+
process.env[_constants.INTUNED_AI_GATEWAY_BASE_URL_ENV_VAR] = `${_jwtTokenManager.backendFunctionsTokenManager.backendFunctionsBaseUrl}/intuned-ai-gateway`;
|
|
59
|
+
process.env[_constants.INTUNED_AI_GATEWAY_API_KEY_ENV_VAR] = _jwtTokenManager.backendFunctionsTokenManager.token ?? process.env[_constants.API_KEY_ENV_VAR_KEY];
|
|
60
|
+
}
|
|
56
61
|
async function runApi({
|
|
57
62
|
abortSignal,
|
|
58
63
|
importFunction,
|
|
@@ -80,6 +85,7 @@ async function runApi({
|
|
|
80
85
|
resolve(abortSymbol);
|
|
81
86
|
});
|
|
82
87
|
});
|
|
88
|
+
injectRuntimeEnvVars();
|
|
83
89
|
async function runAutomation() {
|
|
84
90
|
const validatedModuleResult = await (0, _importUsingImportFunction.importUsingImportFunction)({
|
|
85
91
|
path: name,
|
|
@@ -100,6 +106,7 @@ async function runApi({
|
|
|
100
106
|
apiParameters: params,
|
|
101
107
|
importFunction
|
|
102
108
|
};
|
|
109
|
+
const intunedContext = (0, _asyncLocalStorage.getExecutionContext)();
|
|
103
110
|
const runAutomationWithContext = async (context, page) => {
|
|
104
111
|
async function saveTraceIfNeeded({
|
|
105
112
|
errorMessage
|
|
@@ -148,7 +155,7 @@ async function runApi({
|
|
|
148
155
|
}
|
|
149
156
|
return (0, _neverthrow.ok)({
|
|
150
157
|
result: automationFunctionResult,
|
|
151
|
-
extendedPayloads:
|
|
158
|
+
extendedPayloads: intunedContext?.extendedPayloads,
|
|
152
159
|
session: retrieveSession ? await (0, _contextStorageStateHelpers.getStorageState)(context) : undefined
|
|
153
160
|
});
|
|
154
161
|
} catch (error) {
|
|
@@ -159,6 +166,9 @@ async function runApi({
|
|
|
159
166
|
});
|
|
160
167
|
}
|
|
161
168
|
};
|
|
169
|
+
if (intunedContext?.store) {
|
|
170
|
+
intunedContext.store = {};
|
|
171
|
+
}
|
|
162
172
|
if (runOptions.environment === "standalone") {
|
|
163
173
|
const downloadsPath = (0, _downloadDirectory.getDownloadDirectoryPath)();
|
|
164
174
|
try {
|