@intuned/runtime-dev 0.1.0-test.21 → 0.1.0-test.23

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.
@@ -33,7 +33,7 @@ export async function checkAuthSession({
33
33
 
34
34
  const result = await runApi<boolean>({
35
35
  automationFunction: {
36
- module: await importModule("auth-sessions/check"),
36
+ name: "auth-sessions/check",
37
37
  },
38
38
  runOptions: {
39
39
  environment: "deployed",
@@ -47,6 +47,7 @@ export async function checkAuthSession({
47
47
  },
48
48
  runCheck: false,
49
49
  },
50
+ importFunction: importModule,
50
51
  });
51
52
  if (result.isErr()) {
52
53
  return result.error.apiResponse;
@@ -53,7 +53,7 @@ export async function createAuthSession({
53
53
  unknown
54
54
  >({
55
55
  automationFunction: {
56
- module: await importModule("auth-sessions/create"),
56
+ name: "auth-sessions/create",
57
57
  params: parameters,
58
58
  },
59
59
  tracing: saveTrace
@@ -69,6 +69,7 @@ export async function createAuthSession({
69
69
  },
70
70
  abortSignal: abortController.signal,
71
71
  retrieveSession: true,
72
+ importFunction: importModule,
72
73
  });
73
74
 
74
75
  const result = await createGenerator.next();
@@ -68,7 +68,7 @@ export async function runApi({
68
68
  const resultWithTimeout = await waitWithExtendableTimeout({
69
69
  promise: runApiInternal({
70
70
  automationFunction: {
71
- module: await importModule(`api/${functionName}`),
71
+ name: `api/${functionName}`,
72
72
  params,
73
73
  },
74
74
  auth: isAuthSessionEnabled
@@ -93,6 +93,7 @@ export async function runApi({
93
93
  : { enabled: false },
94
94
  functionsToken,
95
95
  abortSignal: abortController.signal,
96
+ importFunction: importModule,
96
97
  }),
97
98
  initialTimeout: requestTimeout,
98
99
  abortController,
@@ -17,7 +17,6 @@ var _nanoid = require("nanoid");
17
17
  var _chalk = _interopRequireDefault(require("chalk"));
18
18
  var _runApi = require("../../common/runApi");
19
19
  var _tsNodeImport = require("../common/tsNodeImport");
20
- var _fileUtils = require("../common/utils/fileUtils");
21
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
21
  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); }
23
22
  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 && Object.prototype.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; }
@@ -38,11 +37,9 @@ async function executeCLI(apiName, mode, inputData, options) {
38
37
  throw new Error("Auth session is not enabled but auth session provided. To use auth session please enable it in Intuned.json");
39
38
  }
40
39
  }
41
- const apiFilePath = (0, _fileUtils.getFullPathInProject)("api", `${apiName}.ts`);
42
- const runApiModule = await (0, _tsNodeImport.tsNodeImport)(apiFilePath);
43
40
  const runApiResult = await (0, _runApi.runApi)({
44
41
  automationFunction: {
45
- module: runApiModule,
42
+ name: `api/${apiName}`,
46
43
  params: inputData
47
44
  },
48
45
  auth: authSessionPathToUse ? {
@@ -56,7 +53,8 @@ async function executeCLI(apiName, mode, inputData, options) {
56
53
  environment: "ide",
57
54
  cdpAddress: options.cdpAddress,
58
55
  mode
59
- }
56
+ },
57
+ importFunction: _tsNodeImport.tsNodeImport
60
58
  });
61
59
  if (runApiResult.isErr()) {
62
60
  if (runApiResult.error instanceof _runApi.AutomationError) {
@@ -27,10 +27,9 @@ _commander.program.description("run auth session check").option("--cdpAddress <c
27
27
  if (!fs.exists(checkFilePath)) {
28
28
  throw new Error("auth session check file not found");
29
29
  }
30
- const checkModule = await (0, _tsNodeImport.tsNodeImport)(checkFilePath);
31
30
  const runApiResult = await (0, _runApi.runApi)({
32
31
  automationFunction: {
33
- module: checkModule
32
+ name: `${_constants.AUTH_SESSIONS_FOLDER_NAME}/check`
34
33
  },
35
34
  runOptions: {
36
35
  environment: "ide",
@@ -43,7 +42,8 @@ _commander.program.description("run auth session check").option("--cdpAddress <c
43
42
  path: authSessionPath
44
43
  },
45
44
  runCheck: false
46
- }
45
+ },
46
+ importFunction: _tsNodeImport.tsNodeImport
47
47
  });
48
48
  if (runApiResult.isErr()) {
49
49
  throw new Error(runApiResult.error);
@@ -41,11 +41,10 @@ _commander.program.description("run auth session create").option("--cdpAddress <
41
41
  if (!fs.exists(createFilePath)) {
42
42
  throw new Error("auth session create file not found");
43
43
  }
44
- const createModule = await (0, _tsNodeImport.tsNodeImport)(createFilePath);
45
44
  async function runCreate() {
46
45
  const generator = (0, _runApi.runApiGenerator)({
47
46
  automationFunction: {
48
- module: createModule,
47
+ name: `${_constants.AUTH_SESSIONS_FOLDER_NAME}/create`,
49
48
  params: inputData
50
49
  },
51
50
  runOptions: {
@@ -53,7 +52,8 @@ _commander.program.description("run auth session create").option("--cdpAddress <
53
52
  mode,
54
53
  cdpAddress
55
54
  },
56
- retrieveSession: true
55
+ retrieveSession: true,
56
+ importFunction: _tsNodeImport.tsNodeImport
57
57
  });
58
58
  let nextGeneratorParam = undefined;
59
59
  while (true) {
@@ -14,5 +14,5 @@ async function tsNodeImport(apiFilePath) {
14
14
  }
15
15
  });
16
16
  const imported = await (specifier => new Promise(r => r(`${specifier}`)).then(s => _interopRequireWildcard(require(s))))(apiFilePath);
17
- return imported.default;
17
+ return imported;
18
18
  }
@@ -11,17 +11,12 @@ var _enums = require("src/runtime/enums");
11
11
  var _unixSocket = require("../common/utils/unixSocket");
12
12
  var _promises = require("timers/promises");
13
13
  var _jwtTokenManager = require("src/common/jwtTokenManager");
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
14
  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); }
16
15
  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 && Object.prototype.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; }
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
17
  const startRunApiSchema = _zod.default.object({
18
18
  type: _zod.default.literal("start"),
19
19
  parameters: _runApi.runApiParametersSchema.extend({
20
- automationFunction: _runApi.runApiParametersSchema.shape.automationFunction.omit({
21
- module: true
22
- }).extend({
23
- name: _zod.default.string()
24
- }),
25
20
  retrieveSession: _zod.default.boolean(),
26
21
  context: _zod.default.object({
27
22
  jobId: _zod.default.string().optional(),
@@ -127,11 +122,8 @@ function main(importFunction) {
127
122
  if (input.type === "start") {
128
123
  const gen = (0, _runApi.runApiGenerator)({
129
124
  ...input.parameters,
130
- automationFunction: {
131
- ...input.parameters.automationFunction,
132
- module: importFunction ? await importFunction(input.parameters.automationFunction.name) : await (specifier => new Promise(r => r(`${specifier}`)).then(s => _interopRequireWildcard(require(s))))(input.parameters.automationFunction.name)
133
- },
134
- abortSignal: abortController.signal
125
+ abortSignal: abortController.signal,
126
+ importFunction
135
127
  });
136
128
  generator = gen;
137
129
  context = {
@@ -9,4 +9,4 @@ export declare function runApiGenerator<ResultType = any, _YieldType = any, _Nex
9
9
  }): AsyncGenerator<_YieldType, RunApiResult<ResultType, RunApiResultWithSessionOk>, _NextType>;
10
10
  export declare function runApiGenerator<ResultType = any, _YieldType = any, _NextType = any>(params: ExtendedRunApiParameters): AsyncGenerator<_YieldType, RunApiResult<ResultType>, _NextType>;
11
11
  export declare function runApi<ResultType = any>(params: ExtendedRunApiParameters): Promise<RunApiResult<ResultType>>;
12
- export declare function checkAuthSessionWithRetries(page: Page, context: BrowserContext, retries?: number): Promise<Result<boolean, RunAutomationError>>;
12
+ export declare function checkAuthSessionWithRetries(page: Page, context: BrowserContext, importFunction: ExtendedRunApiParameters["importFunction"], retries?: number): Promise<Result<boolean, RunAutomationError>>;
@@ -49,6 +49,7 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
49
49
  async function* runApiGenerator({
50
50
  retrieveSession = false,
51
51
  abortSignal,
52
+ importFunction,
52
53
  ...input
53
54
  }) {
54
55
  let traceStarted = false;
@@ -86,6 +87,26 @@ async function* runApiGenerator({
86
87
  page,
87
88
  context
88
89
  } = await (0, _getPlaywrightConstructs.getPlaywrightConstructsForMode)(mode, cdpAddress, auth === null || auth === void 0 ? void 0 : auth.session));
90
+ let isPageStable = false;
91
+ let retry = 0;
92
+ while (!isPageStable && retry < 10) {
93
+ try {
94
+ await page.locator("html").all();
95
+ isPageStable = true;
96
+ break;
97
+ } catch (error) {
98
+ var _error$message;
99
+ if (error !== null && error !== void 0 && (_error$message = error.message) !== null && _error$message !== void 0 && _error$message.includes("Execution context was destroyed")) {
100
+ await new Promise(resolve => setTimeout(resolve, 200));
101
+ } else {
102
+ throw error;
103
+ }
104
+ }
105
+ retry++;
106
+ }
107
+ if (!isPageStable) {
108
+ return (0, _neverthrow.err)(new _errors.AutomationError("The page is not stable, try to run again"));
109
+ }
89
110
  }
90
111
  const executionContext = (0, _asyncLocalStorage.getExecutionContext)();
91
112
  if (!executionContext) {
@@ -131,7 +152,7 @@ async function* runApiGenerator({
131
152
  return (0, _neverthrow.err)(new _errors.AuthRequiredError());
132
153
  }
133
154
  console.log("Running auth check");
134
- const authCheckResult = await checkAuthSessionWithRetries(page, context, 2);
155
+ const authCheckResult = await checkAuthSessionWithRetries(page, context, importFunction, 2);
135
156
  if (authCheckResult.isErr()) {
136
157
  const error = authCheckResult.error;
137
158
  if (["APINotFoundError", "InvalidAPIError"].includes(error.code)) {
@@ -144,7 +165,7 @@ async function* runApiGenerator({
144
165
  }
145
166
  }
146
167
  const args = [...(automationFunction.params ? [automationFunction.params] : []), page, context];
147
- const validatedModuleResult = await validateModule(automationFunction.module);
168
+ const validatedModuleResult = await importUsingImportFunction(automationFunction.name, importFunction);
148
169
  if (validatedModuleResult.isErr()) {
149
170
  return validatedModuleResult;
150
171
  }
@@ -206,13 +227,13 @@ async function runApi(params) {
206
227
  }
207
228
  return (0, _neverthrow.err)(new _errors.InvalidApiError("Expected API to be async function, got async generator"));
208
229
  }
209
- async function checkAuthSessionWithRetries(page, context, retries = 3) {
230
+ async function checkAuthSessionWithRetries(page, context, importFunction, retries = 3) {
210
231
  if (retries === 0) {
211
232
  return (0, _neverthrow.ok)(false);
212
233
  }
213
234
  let tryNumber = 0;
214
235
  console.log("Checking auth session with retries", `${_constants.AUTH_SESSIONS_FOLDER_NAME}/check`);
215
- const importResult = await validateModule(`${_constants.AUTH_SESSIONS_FOLDER_NAME}/check`);
236
+ const importResult = await importUsingImportFunction(`${_constants.AUTH_SESSIONS_FOLDER_NAME}/check`, importFunction);
216
237
  if (importResult.isErr()) {
217
238
  return (0, _neverthrow.err)(importResult.error);
218
239
  }
@@ -227,21 +248,33 @@ async function checkAuthSessionWithRetries(page, context, retries = 3) {
227
248
  }
228
249
  return (0, _neverthrow.ok)(false);
229
250
  }
230
- async function validateModule(moduleToValidate) {
231
- if (!moduleToValidate || !moduleToValidate.default || !moduleToValidate.default.constructor) {
232
- return (0, _neverthrow.err)(new _errors.InvalidApiError("API file path does not have a default export"));
233
- }
234
- if (moduleToValidate.default.constructor.name === "AsyncGeneratorFunction") {
235
- return (0, _neverthrow.ok)({
236
- type: "async-generator",
237
- generator: moduleToValidate.default
238
- });
239
- }
240
- if (moduleToValidate.default.constructor.name === "AsyncFunction") {
241
- return (0, _neverthrow.ok)({
242
- type: "async",
243
- func: moduleToValidate.default
244
- });
251
+ async function importUsingImportFunction(path, importFunction) {
252
+ try {
253
+ const imported = importFunction ? await importFunction(path) : await (specifier => new Promise(r => r(`${specifier}`)).then(s => _interopRequireWildcard(require(s))))(path);
254
+ if (!imported || !imported.default || !imported.default.constructor) {
255
+ return (0, _neverthrow.err)(new _errors.InvalidApiError("API file path does not have a default export"));
256
+ }
257
+ if (imported.default.constructor.name === "AsyncGeneratorFunction") {
258
+ return (0, _neverthrow.ok)({
259
+ type: "async-generator",
260
+ generator: imported.default
261
+ });
262
+ }
263
+ if (imported.default.constructor.name === "AsyncFunction") {
264
+ return (0, _neverthrow.ok)({
265
+ type: "async",
266
+ func: imported.default
267
+ });
268
+ }
269
+ return (0, _neverthrow.err)(new _errors.InvalidApiError("API file path does not have a default async function/generator export"));
270
+ } catch (error) {
271
+ if (error.message.includes("Unknown variable dynamic import")) {
272
+ return (0, _neverthrow.err)(new _errors.ApiNotFoundError(path));
273
+ }
274
+ if ((error === null || error === void 0 ? void 0 : error.code) === "ERR_MODULE_NOT_FOUND") {
275
+ console.log("API not found", error);
276
+ return (0, _neverthrow.err)(new _errors.ApiNotFoundError(path));
277
+ }
278
+ throw error;
245
279
  }
246
- return (0, _neverthrow.err)(new _errors.InvalidApiError(`API file path does not have a default async function/generator export. Got ${moduleToValidate.default.constructor.name}`));
247
280
  }
@@ -127,23 +127,13 @@ export declare const runApiSessionSchema: z.ZodDiscriminatedUnion<"type", [z.Zod
127
127
  export declare const runApiParametersSchema: z.ZodObject<{
128
128
  functionsToken: z.ZodOptional<z.ZodString>;
129
129
  automationFunction: z.ZodObject<{
130
- module: z.ZodObject<{
131
- default: z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodUnknown>;
132
- }, "strip", z.ZodTypeAny, {
133
- default: (...args: unknown[]) => unknown;
134
- }, {
135
- default: (...args: unknown[]) => unknown;
136
- }>;
130
+ name: z.ZodString;
137
131
  params: z.ZodOptional<z.ZodAny>;
138
132
  }, "strip", z.ZodTypeAny, {
139
- module: {
140
- default: (...args: unknown[]) => unknown;
141
- };
133
+ name: string;
142
134
  params?: any;
143
135
  }, {
144
- module: {
145
- default: (...args: unknown[]) => unknown;
146
- };
136
+ name: string;
147
137
  params?: any;
148
138
  }>;
149
139
  tracing: z.ZodDefault<z.ZodOptional<z.ZodDiscriminatedUnion<"enabled", [z.ZodObject<{
@@ -370,9 +360,7 @@ export declare const runApiParametersSchema: z.ZodObject<{
370
360
  retrieveSession: z.ZodDefault<z.ZodBoolean>;
371
361
  }, "strip", z.ZodTypeAny, {
372
362
  automationFunction: {
373
- module: {
374
- default: (...args: unknown[]) => unknown;
375
- };
363
+ name: string;
376
364
  params?: any;
377
365
  };
378
366
  tracing: {
@@ -428,9 +416,7 @@ export declare const runApiParametersSchema: z.ZodObject<{
428
416
  } | undefined;
429
417
  }, {
430
418
  automationFunction: {
431
- module: {
432
- default: (...args: unknown[]) => unknown;
433
- };
419
+ name: string;
434
420
  params?: any;
435
421
  };
436
422
  functionsToken?: string | undefined;
@@ -489,6 +475,7 @@ export type RunApiSession = z.infer<typeof runApiSessionSchema>;
489
475
  export type RunApiParameters = z.input<typeof runApiParametersSchema>;
490
476
  export type ExtendedRunApiParameters = RunApiParameters & {
491
477
  abortSignal?: AbortSignal;
478
+ importFunction?: (name: string) => Promise<any> | undefined;
492
479
  };
493
480
  export type RunApiResultOk<R = any> = {
494
481
  result: R;
@@ -16,11 +16,7 @@ const runApiSessionSchema = exports.runApiSessionSchema = _zod.default.discrimin
16
16
  const runApiParametersSchema = exports.runApiParametersSchema = _zod.default.object({
17
17
  functionsToken: _zod.default.string().optional(),
18
18
  automationFunction: _zod.default.object({
19
- module: _zod.default.object({
20
- default: _zod.default.function()
21
- }, {
22
- required_error: "API handler must have a default export function"
23
- }),
19
+ name: _zod.default.string(),
24
20
  params: _zod.default.any().optional()
25
21
  }),
26
22
  tracing: _zod.default.discriminatedUnion("enabled", [_zod.default.object({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intuned/runtime-dev",
3
- "version": "0.1.0-test.21",
3
+ "version": "0.1.0-test.23",
4
4
  "description": "Intuned runtime",
5
5
  "exports": {
6
6
  ".": "./dist/index.js",
@@ -94,7 +94,8 @@
94
94
  "typescript": "^5.1.6",
95
95
  "wait-on": "^7.2.0",
96
96
  "zod": "^3.21.4",
97
- "zod-validation-error": "^3.0.3"
97
+ "zod-validation-error": "^3.0.3",
98
+ "ts-node": "^10.9.1"
98
99
  },
99
100
  "devDependencies": {
100
101
  "@babel/cli": "^7.23.4",