@alwaysmeticulous/record 2.94.0 → 2.95.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.
package/dist/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export { recordSession } from "./record/record";
2
+ export { recordLoginFlowSession } from "./record/record-login-flow";
2
3
  export { bootstrapPage as bootstrapRecordingPage } from "./record/record.utils";
package/dist/index.js CHANGED
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.bootstrapRecordingPage = exports.recordSession = void 0;
3
+ exports.bootstrapRecordingPage = exports.recordLoginFlowSession = exports.recordSession = void 0;
4
4
  var record_1 = require("./record/record");
5
5
  Object.defineProperty(exports, "recordSession", { enumerable: true, get: function () { return record_1.recordSession; } });
6
+ var record_login_flow_1 = require("./record/record-login-flow");
7
+ Object.defineProperty(exports, "recordLoginFlowSession", { enumerable: true, get: function () { return record_login_flow_1.recordLoginFlowSession; } });
6
8
  var record_utils_1 = require("./record/record.utils");
7
9
  Object.defineProperty(exports, "bootstrapRecordingPage", { enumerable: true, get: function () { return record_utils_1.bootstrapPage; } });
8
10
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,0CAAgD;AAAvC,uGAAA,aAAa,OAAA;AACtB,sDAAgF;AAAvE,sHAAA,aAAa,OAA0B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,0CAAgD;AAAvC,uGAAA,aAAa,OAAA;AACtB,gEAAoE;AAA3D,2HAAA,sBAAsB,OAAA;AAC/B,sDAAgF;AAAvE,sHAAA,aAAa,OAA0B"}
@@ -0,0 +1,5 @@
1
+ export declare const DEFAULT_UPLOAD_INTERVAL_MS = 1000;
2
+ export declare const DEFAULT_NAVIGATION_TIMEOUT_MS = 120000;
3
+ export declare const INITIAL_METICULOUS_RECORD_DOCS_URL = "https://app.meticulous.ai/docs/recording-a-test";
4
+ export declare const INITIAL_METICULOUS_RECORD_LOGIN_FLOW_DOCS_URL = "https://app.meticulous.ai/docs/recording-a-login-flow";
5
+ export declare const METICULOUS_RECORD_LOGIN_FLOW_SAVING_DOCS_URL = "https://app.meticulous.ai/docs/recording-a-login-flow-saving";
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.METICULOUS_RECORD_LOGIN_FLOW_SAVING_DOCS_URL = exports.INITIAL_METICULOUS_RECORD_LOGIN_FLOW_DOCS_URL = exports.INITIAL_METICULOUS_RECORD_DOCS_URL = exports.DEFAULT_NAVIGATION_TIMEOUT_MS = exports.DEFAULT_UPLOAD_INTERVAL_MS = void 0;
4
+ exports.DEFAULT_UPLOAD_INTERVAL_MS = 1000; // 1 second
5
+ exports.DEFAULT_NAVIGATION_TIMEOUT_MS = 120000; // 2 minutes
6
+ exports.INITIAL_METICULOUS_RECORD_DOCS_URL = "https://app.meticulous.ai/docs/recording-a-test";
7
+ // Initial page shown when recording a login flow session.
8
+ exports.INITIAL_METICULOUS_RECORD_LOGIN_FLOW_DOCS_URL = "https://app.meticulous.ai/docs/recording-a-login-flow";
9
+ // Page shown while saving a login flow session recording.
10
+ exports.METICULOUS_RECORD_LOGIN_FLOW_SAVING_DOCS_URL = "https://app.meticulous.ai/docs/recording-a-login-flow-saving";
11
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/record/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,0BAA0B,GAAG,IAAK,CAAC,CAAC,WAAW;AAE/C,QAAA,6BAA6B,GAAG,MAAO,CAAC,CAAC,YAAY;AAErD,QAAA,kCAAkC,GAC7C,iDAAiD,CAAC;AAEpD,0DAA0D;AAC7C,QAAA,6CAA6C,GACxD,uDAAuD,CAAC;AAE1D,0DAA0D;AAC7C,QAAA,4CAA4C,GACvD,8DAA8D,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { RecordLoginFlowSessionFn } from "@alwaysmeticulous/common";
2
+ export declare const LOGIN_FLOW_SESSION_RECORDING_SOURCE = "cli-login-flow";
3
+ export declare const LOGIN_FLOW_DATA_SESSION_RECORDING_SOURCE = "cli-login-flow-application-storage";
4
+ export declare const recordLoginFlowSession: RecordLoginFlowSessionFn;
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.recordLoginFlowSession = exports.LOGIN_FLOW_DATA_SESSION_RECORDING_SOURCE = exports.LOGIN_FLOW_SESSION_RECORDING_SOURCE = void 0;
7
+ const common_1 = require("@alwaysmeticulous/common");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const loglevel_1 = __importDefault(require("loglevel"));
10
+ const puppeteer_1 = require("puppeteer");
11
+ const constants_1 = require("./constants");
12
+ const record_utils_1 = require("./record.utils");
13
+ const expose_new_recording_callback_1 = require("./utils/expose-new-recording-callback");
14
+ const inject_finish_recording_frame_1 = require("./utils/inject-finish-recording-frame");
15
+ const print_warning_1 = require("./utils/print-warning");
16
+ exports.LOGIN_FLOW_SESSION_RECORDING_SOURCE = "cli-login-flow";
17
+ exports.LOGIN_FLOW_DATA_SESSION_RECORDING_SOURCE = "cli-login-flow-application-storage";
18
+ const bootstrapLoginFlowRecordingPage = async ({ page, recordingToken, recordingSnippet, earlyNetworkRecorderSnippet, uploadIntervalMs, captureHttpOnlyCookies, recordingSource, bypassCSP, }) => {
19
+ page.setDefaultNavigationTimeout(constants_1.DEFAULT_NAVIGATION_TIMEOUT_MS); // 2 minutes
20
+ if (bypassCSP) {
21
+ await page.setBypassCSP(true);
22
+ }
23
+ await (0, record_utils_1.bootstrapPage)({
24
+ page,
25
+ recordingToken,
26
+ appCommitHash: "unknown",
27
+ recordingSnippet,
28
+ earlyNetworkRecorderSnippet,
29
+ uploadIntervalMs: uploadIntervalMs || constants_1.DEFAULT_UPLOAD_INTERVAL_MS,
30
+ captureHttpOnlyCookies: captureHttpOnlyCookies !== null && captureHttpOnlyCookies !== void 0 ? captureHttpOnlyCookies : true,
31
+ recordingSource,
32
+ });
33
+ };
34
+ const recordLoginFlowSession = async ({ recordingToken, devTools, bypassCSP, recordingSnippet, earlyNetworkRecorderSnippet, width, height, uploadIntervalMs, captureHttpOnlyCookies, }) => {
35
+ const logger = loglevel_1.default.getLogger(common_1.METICULOUS_LOGGER_NAME);
36
+ logger.info("Opening browser...");
37
+ const defaultViewport = width && height ? { width, height } : null;
38
+ const browser = await (0, puppeteer_1.launch)({
39
+ defaultViewport,
40
+ headless: false,
41
+ devtools: devTools || false,
42
+ });
43
+ const context = await browser.createIncognitoBrowserContext();
44
+ await Promise.all((await browser.pages()).map((page) => page.close()));
45
+ const loginFlowPage = await context.newPage();
46
+ await bootstrapLoginFlowRecordingPage({
47
+ page: loginFlowPage,
48
+ recordingToken,
49
+ recordingSnippet,
50
+ earlyNetworkRecorderSnippet,
51
+ uploadIntervalMs,
52
+ captureHttpOnlyCookies,
53
+ bypassCSP,
54
+ recordingSource: exports.LOGIN_FLOW_SESSION_RECORDING_SOURCE,
55
+ });
56
+ let isRecordingComplete = false;
57
+ let onDataSessionSaved = false;
58
+ let startedLoginSessionRecording = false;
59
+ const recordingCompleteCallback = (0, common_1.defer)();
60
+ loginFlowPage.on("close", () => {
61
+ if (!isRecordingComplete) {
62
+ (0, print_warning_1.printPageClosedWarning)();
63
+ // Resolve the callback only if the page is closed before the recording is complete.
64
+ // Cases where the page is closed after the recording is complete are handled
65
+ // in the `__meticulousFinishRecording` callback.
66
+ recordingCompleteCallback.resolve();
67
+ }
68
+ });
69
+ // Expose login page functions
70
+ await (0, expose_new_recording_callback_1.exposeNewRecordingCallback)(loginFlowPage, () => {
71
+ startedLoginSessionRecording = true;
72
+ });
73
+ await loginFlowPage.exposeFunction("__meticulousFinishRecording", async () => {
74
+ const loginDataPage = await context.newPage();
75
+ const finalLoginUrl = loginFlowPage.url();
76
+ loginDataPage.on("close", () => {
77
+ if (!onDataSessionSaved) {
78
+ (0, print_warning_1.printPageClosedWarning)();
79
+ }
80
+ });
81
+ try {
82
+ const recordingSavingScreenPage = await context.newPage();
83
+ await recordingSavingScreenPage.goto(constants_1.METICULOUS_RECORD_LOGIN_FLOW_SAVING_DOCS_URL);
84
+ // Flush any pending payloads from the main login flow recording page and close it
85
+ await loginFlowPage.evaluate(() => {
86
+ var _a, _b;
87
+ (_b = (_a = window.__meticulous) === null || _a === void 0 ? void 0 : _a.flushPendingPayloads) === null || _b === void 0 ? void 0 : _b.call(_a);
88
+ });
89
+ isRecordingComplete = true;
90
+ await loginFlowPage.close();
91
+ await bootstrapLoginFlowRecordingPage({
92
+ page: loginDataPage,
93
+ recordingToken,
94
+ recordingSnippet,
95
+ earlyNetworkRecorderSnippet,
96
+ uploadIntervalMs: uploadIntervalMs,
97
+ captureHttpOnlyCookies: captureHttpOnlyCookies,
98
+ bypassCSP,
99
+ recordingSource: exports.LOGIN_FLOW_DATA_SESSION_RECORDING_SOURCE,
100
+ });
101
+ // Navigate to the final login flow url and flush any pending payloads
102
+ await loginDataPage.goto(finalLoginUrl, { waitUntil: "networkidle0" });
103
+ await loginDataPage.evaluate(() => {
104
+ var _a, _b;
105
+ (_b = (_a = window.__meticulous) === null || _a === void 0 ? void 0 : _a.flushPendingPayloads) === null || _b === void 0 ? void 0 : _b.call(_a);
106
+ });
107
+ onDataSessionSaved = true;
108
+ await loginDataPage.close();
109
+ }
110
+ catch (error) {
111
+ logger.error(error);
112
+ }
113
+ finally {
114
+ recordingCompleteCallback.resolve();
115
+ }
116
+ });
117
+ await (0, inject_finish_recording_frame_1.injectFinishRecordingFrame)(loginFlowPage, "__meticulousFinishRecording");
118
+ await loginFlowPage.goto(constants_1.INITIAL_METICULOUS_RECORD_LOGIN_FLOW_DOCS_URL);
119
+ // Wait for the recording to complete or the page to close.
120
+ await recordingCompleteCallback.promise;
121
+ if (!loginFlowPage.isClosed()) {
122
+ await loginFlowPage.close();
123
+ }
124
+ await context.close();
125
+ await browser.close();
126
+ if (!onDataSessionSaved || !isRecordingComplete) {
127
+ throw new Error("Recording of login flow failed");
128
+ }
129
+ if (!startedLoginSessionRecording) {
130
+ (0, print_warning_1.printNoLoginSessionRecordedWarning)();
131
+ throw new Error("Recording of login flow failed");
132
+ }
133
+ // Print green success message
134
+ logger.info(chalk_1.default.green.bold("Recording complete!") +
135
+ "\n" +
136
+ chalk_1.default.green.bold("Return to https://app.meticulous.ai to finish setting up your project."));
137
+ };
138
+ exports.recordLoginFlowSession = recordLoginFlowSession;
139
+ //# sourceMappingURL=record-login-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-login-flow.js","sourceRoot":"","sources":["../../src/record/record-login-flow.ts"],"names":[],"mappings":"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"}
@@ -32,16 +32,14 @@ const path_1 = require("path");
32
32
  const common_1 = require("@alwaysmeticulous/common");
33
33
  const loglevel_1 = __importDefault(require("loglevel"));
34
34
  const puppeteer_1 = __importStar(require("puppeteer"));
35
+ const constants_1 = require("./constants");
35
36
  const record_utils_1 = require("./record.utils");
36
- const DEFAULT_UPLOAD_INTERVAL_MS = 1000; // 1 second
37
37
  const COOKIE_FILENAME = "cookies.json";
38
- const recordSession = async ({ browser: browser_, project, recordingToken, appCommitHash, devTools, bypassCSP, recordingSnippet, earlyNetworkRecorderSnippet, width, height, uploadIntervalMs, incognito, cookieDir, debugLogger, onDetectedSession, captureHttpOnlyCookies, }) => {
38
+ const recordSession = async ({ recordingToken, appCommitHash, devTools, bypassCSP, recordingSnippet, earlyNetworkRecorderSnippet, width, height, uploadIntervalMs, incognito, cookieDir, debugLogger, onDetectedSession, captureHttpOnlyCookies, }) => {
39
39
  const logger = loglevel_1.default.getLogger(common_1.METICULOUS_LOGGER_NAME);
40
40
  logger.info("Opening browser...");
41
41
  debugLogger === null || debugLogger === void 0 ? void 0 : debugLogger.log("recordSession options:");
42
42
  debugLogger === null || debugLogger === void 0 ? void 0 : debugLogger.logObject({
43
- browser: !!browser_,
44
- project,
45
43
  recordingToken,
46
44
  appCommitHash,
47
45
  devTools,
@@ -75,18 +73,17 @@ const recordSession = async ({ browser: browser_, project, recordingToken, appCo
75
73
  debugLogger.log(execPath);
76
74
  }
77
75
  const defaultViewport = width && height ? { width, height } : null;
78
- const browser = browser_ ||
79
- (await (0, puppeteer_1.launch)({
80
- defaultViewport,
81
- headless: false,
82
- devtools: devTools || false,
83
- }));
76
+ const browser = await (0, puppeteer_1.launch)({
77
+ defaultViewport,
78
+ headless: false,
79
+ devtools: devTools || false,
80
+ });
84
81
  const context = incognito
85
82
  ? await browser.createIncognitoBrowserContext()
86
83
  : browser.defaultBrowserContext();
87
84
  (await browser.defaultBrowserContext().pages()).forEach((page) => page.close());
88
85
  const page = await context.newPage();
89
- page.setDefaultNavigationTimeout(120000); // 2 minutes
86
+ page.setDefaultNavigationTimeout(constants_1.DEFAULT_NAVIGATION_TIMEOUT_MS); // 2 minutes
90
87
  if (bypassCSP) {
91
88
  await page.setBypassCSP(true);
92
89
  }
@@ -108,10 +105,10 @@ const recordSession = async ({ browser: browser_, project, recordingToken, appCo
108
105
  appCommitHash,
109
106
  recordingSnippet,
110
107
  earlyNetworkRecorderSnippet,
111
- uploadIntervalMs: uploadIntervalMs || DEFAULT_UPLOAD_INTERVAL_MS,
108
+ uploadIntervalMs: uploadIntervalMs || constants_1.DEFAULT_UPLOAD_INTERVAL_MS,
112
109
  captureHttpOnlyCookies: captureHttpOnlyCookies !== null && captureHttpOnlyCookies !== void 0 ? captureHttpOnlyCookies : true,
113
110
  });
114
- page.goto(record_utils_1.INITIAL_METICULOUS_DOCS_URL);
111
+ page.goto(constants_1.INITIAL_METICULOUS_RECORD_DOCS_URL);
115
112
  logger.info("Browser ready");
116
113
  // Collect and show recorded session ids
117
114
  // Also save page cookies if not in incognito context
@@ -121,10 +118,6 @@ const recordSession = async ({ browser: browser_, project, recordingToken, appCo
121
118
  const sessionId = await page.evaluate("window?.__meticulous?.config?.sessionId");
122
119
  if (sessionId && !sessionIds.find((id) => id === sessionId)) {
123
120
  sessionIds.push(sessionId);
124
- const organizationName = encodeURIComponent(project.organization.name);
125
- const projectName = encodeURIComponent(project.name);
126
- const sessionUrl = `https://app.meticulous.ai/projects/${organizationName}/${projectName}/sessions/${sessionId}`;
127
- logger.info(`Recording session: ${sessionUrl}`);
128
121
  if (onDetectedSession) {
129
122
  onDetectedSession(sessionId);
130
123
  }
@@ -1 +1 @@
1
- {"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/record/record.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/record/record.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import { Page } from "puppeteer";
2
- export declare const INITIAL_METICULOUS_DOCS_URL = "https://app.meticulous.ai/docs/recording-a-test";
3
2
  export declare function bootstrapPage({ page, recordingToken, appCommitHash, recordingSnippet, earlyNetworkRecorderSnippet, uploadIntervalMs, captureHttpOnlyCookies, recordingSource, }: {
4
3
  page: Page;
5
4
  recordingToken: string;
@@ -3,12 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.bootstrapPage = exports.INITIAL_METICULOUS_DOCS_URL = void 0;
6
+ exports.bootstrapPage = void 0;
7
7
  const promises_1 = require("fs/promises");
8
8
  const common_1 = require("@alwaysmeticulous/common");
9
9
  const loglevel_1 = __importDefault(require("loglevel"));
10
+ const constants_1 = require("./constants");
10
11
  const provide_cookie_access_1 = require("./utils/provide-cookie-access");
11
- exports.INITIAL_METICULOUS_DOCS_URL = "https://app.meticulous.ai/docs/recording-a-test";
12
12
  // Setup Meticulous recording
13
13
  async function bootstrapPage({ page, recordingToken, appCommitHash, recordingSnippet, earlyNetworkRecorderSnippet, uploadIntervalMs, captureHttpOnlyCookies, recordingSource = "cli", }) {
14
14
  const logger = loglevel_1.default.getLogger(common_1.METICULOUS_LOGGER_NAME);
@@ -21,7 +21,11 @@ async function bootstrapPage({ page, recordingToken, appCommitHash, recordingSni
21
21
  page.on("framenavigated", async (frame) => {
22
22
  try {
23
23
  if (page.mainFrame() === frame) {
24
- if (page.url() === exports.INITIAL_METICULOUS_DOCS_URL) {
24
+ if ([
25
+ constants_1.INITIAL_METICULOUS_RECORD_DOCS_URL,
26
+ constants_1.INITIAL_METICULOUS_RECORD_LOGIN_FLOW_DOCS_URL,
27
+ constants_1.METICULOUS_RECORD_LOGIN_FLOW_SAVING_DOCS_URL,
28
+ ].includes(page.url())) {
25
29
  if (page.mainFrame() === frame) {
26
30
  await frame.evaluate('window["METICULOUS_DISABLED"] = true');
27
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"record.utils.js","sourceRoot":"","sources":["../../src/record/record.utils.ts"],"names":[],"mappings":";;;;;;AAAA,0CAAuC;AACvC,qDAAkE;AAClE,wDAA2B;AAE3B,yEAAoE;AAEvD,QAAA,2BAA2B,GACtC,iDAAiD,CAAC;AAEpD,6BAA6B;AACtB,KAAK,UAAU,aAAa,CAAC,EAClC,IAAI,EACJ,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,2BAA2B,EAC3B,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,GAAG,KAAK,GAUxB;IACC,MAAM,MAAM,GAAG,kBAAG,CAAC,SAAS,CAAC,+BAAsB,CAAC,CAAC;IAErD,MAAM,oBAAoB,GAAG,MAAM,IAAA,mBAAQ,EAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IACtE,MAAM,+BAA+B,GAAG,MAAM,IAAA,mBAAQ,EACpD,2BAA2B,EAC3B,MAAM,CACP,CAAC;IAEF,MAAM,IAAI,CAAC,qBAAqB,CAAC,+BAA+B,CAAC,CAAC;IAClE,IAAI,sBAAsB,EAAE;QAC1B,MAAM,IAAA,2CAAmB,EAAC,IAAI,CAAC,CAAC;KACjC;IAED,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACxC,IAAI;YACF,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,KAAK,EAAE;gBAC9B,IAAI,IAAI,CAAC,GAAG,EAAE,KAAK,mCAA2B,EAAE;oBAC9C,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,KAAK,EAAE;wBAC9B,MAAM,KAAK,CAAC,QAAQ,CAAC,sCAAsC,CAAC,CAAC;qBAC9D;oBACD,OAAO;iBACR;gBACD,MAAM,KAAK,CAAC,QAAQ,CAAC;oDACuB,cAAc;oDACd,aAAa;;qDAEZ,eAAe;sDACd,gBAAgB;;SAE7D,CAAC,CAAC;gBACH,MAAM,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;gBAC3C,OAAO;aACR;YAED,MAAM,KAAK,CAAC,QAAQ,CAAC;;OAEpB,CAAC,CAAC;SACJ;QAAC,OAAO,KAAK,EAAE;YACd,sEAAsE;YACtE,IACE,KAAK,YAAY,KAAK;gBACtB,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,iCAAiC,CAAC,EAC3D;gBACA,OAAO;aACR;YACD,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;gBACtE,OAAO;aACR;YACD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACrB;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAtED,sCAsEC"}
1
+ {"version":3,"file":"record.utils.js","sourceRoot":"","sources":["../../src/record/record.utils.ts"],"names":[],"mappings":";;;;;;AAAA,0CAAuC;AACvC,qDAAkE;AAClE,wDAA2B;AAE3B,2CAIqB;AACrB,yEAAoE;AAEpE,6BAA6B;AACtB,KAAK,UAAU,aAAa,CAAC,EAClC,IAAI,EACJ,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,2BAA2B,EAC3B,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,GAAG,KAAK,GAUxB;IACC,MAAM,MAAM,GAAG,kBAAG,CAAC,SAAS,CAAC,+BAAsB,CAAC,CAAC;IAErD,MAAM,oBAAoB,GAAG,MAAM,IAAA,mBAAQ,EAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IACtE,MAAM,+BAA+B,GAAG,MAAM,IAAA,mBAAQ,EACpD,2BAA2B,EAC3B,MAAM,CACP,CAAC;IAEF,MAAM,IAAI,CAAC,qBAAqB,CAAC,+BAA+B,CAAC,CAAC;IAClE,IAAI,sBAAsB,EAAE;QAC1B,MAAM,IAAA,2CAAmB,EAAC,IAAI,CAAC,CAAC;KACjC;IAED,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACxC,IAAI;YACF,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,KAAK,EAAE;gBAC9B,IACE;oBACE,8CAAkC;oBAClC,yDAA6C;oBAC7C,wDAA4C;iBAC7C,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EACtB;oBACA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,KAAK,EAAE;wBAC9B,MAAM,KAAK,CAAC,QAAQ,CAAC,sCAAsC,CAAC,CAAC;qBAC9D;oBACD,OAAO;iBACR;gBACD,MAAM,KAAK,CAAC,QAAQ,CAAC;oDACuB,cAAc;oDACd,aAAa;;qDAEZ,eAAe;sDACd,gBAAgB;;SAE7D,CAAC,CAAC;gBACH,MAAM,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;gBAC3C,OAAO;aACR;YAED,MAAM,KAAK,CAAC,QAAQ,CAAC;;OAEpB,CAAC,CAAC;SACJ;QAAC,OAAO,KAAK,EAAE;YACd,sEAAsE;YACtE,IACE,KAAK,YAAY,KAAK;gBACtB,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,iCAAiC,CAAC,EAC3D;gBACA,OAAO;aACR;YACD,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;gBACtE,OAAO;aACR;YACD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACrB;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AA5ED,sCA4EC"}
@@ -0,0 +1,5 @@
1
+ import { Page } from "puppeteer";
2
+ export interface BaseMeticulousConfig {
3
+ sessionId: string;
4
+ }
5
+ export declare const exposeNewRecordingCallback: <T extends BaseMeticulousConfig>(page: Page, callback: (config: T) => void) => Promise<void>;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.exposeNewRecordingCallback = void 0;
4
+ const exposeNewRecordingCallback = async (page, callback) => {
5
+ await page.exposeFunction("__meticulous_onBeginRecording", callback);
6
+ };
7
+ exports.exposeNewRecordingCallback = exposeNewRecordingCallback;
8
+ //# sourceMappingURL=expose-new-recording-callback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expose-new-recording-callback.js","sourceRoot":"","sources":["../../../src/record/utils/expose-new-recording-callback.ts"],"names":[],"mappings":";;;AAKO,MAAM,0BAA0B,GAAG,KAAK,EAG7C,IAAU,EACV,QAA6B,EAC7B,EAAE;IACF,MAAM,IAAI,CAAC,cAAc,CAAC,+BAA+B,EAAE,QAAQ,CAAC,CAAC;AACvE,CAAC,CAAC;AAPW,QAAA,0BAA0B,8BAOrC"}
@@ -0,0 +1,5 @@
1
+ import { Page } from "puppeteer";
2
+ /**
3
+ * Injects an iframe that allows the user to finish recording.
4
+ */
5
+ export declare const injectFinishRecordingFrame: (page: Page, callbackFnName: string) => Promise<void>;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.injectFinishRecordingFrame = void 0;
4
+ /**
5
+ * Injects an iframe that allows the user to finish recording.
6
+ */
7
+ const injectFinishRecordingFrame = async (page, callbackFnName) => {
8
+ // Check that callbackFnName is a valid function name
9
+ const typeCheck = await page.evaluate(`typeof window["${callbackFnName}"]`);
10
+ if (typeCheck !== "function") {
11
+ throw new Error("Finish recording callback fn not ready in browser");
12
+ }
13
+ page.on("framenavigated", async (frame) => {
14
+ try {
15
+ if (page.mainFrame() !== frame) {
16
+ return;
17
+ }
18
+ await frame.evaluate((callbackFnName) => {
19
+ window.addEventListener("load", () => {
20
+ const hasFinishRecordingIframe = !!document.getElementById("__meticulous__finish_recording_iframe");
21
+ if (hasFinishRecordingIframe) {
22
+ return;
23
+ }
24
+ const iframe = document.createElement("iframe");
25
+ iframe.style.position = "fixed";
26
+ iframe.style.bottom = "25px";
27
+ iframe.style.right = "25px";
28
+ iframe.style.width = "150px";
29
+ iframe.style.height = "50px";
30
+ iframe.style.border = "1px solid #000000a0";
31
+ iframe.style.boxShadow = "#00000012 5px 5px 5px";
32
+ iframe.style.borderRadius = "5px";
33
+ iframe.style.zIndex = (Math.pow(2, 31) - 1).toString();
34
+ iframe.id = "__meticulous__finish_recording_iframe";
35
+ document.body.appendChild(iframe);
36
+ const iframeDoc = iframe.contentDocument;
37
+ if (!iframeDoc) {
38
+ throw new Error("iframe document not found, this should not happen");
39
+ }
40
+ iframeDoc.open();
41
+ iframeDoc.write(`
42
+ <html>
43
+ <head>
44
+ <style>
45
+ body {
46
+ margin: 0;
47
+ background-color: transparent;
48
+ font-family: sans-serif;
49
+ }
50
+ #finish-recording {
51
+ width: 100%;
52
+ height: 100%;
53
+ border: 0;
54
+ background-color: #e39670;
55
+ cursor: pointer;
56
+ }
57
+ #finish-recording:hover {
58
+ background-color: #e9ab8b;
59
+
60
+ }
61
+ </style>
62
+ <script>
63
+ const finishRecording = () => {
64
+ window["${callbackFnName}"]?.();
65
+ };
66
+ </script>
67
+ </head>
68
+ <body style="margin: 0; background-color: transparent;">
69
+ <button id="finish-recording" onclick="finishRecording()">Finish Recording</button>
70
+ </body>
71
+ </html>
72
+ `);
73
+ iframeDoc.close();
74
+ });
75
+ }, callbackFnName);
76
+ }
77
+ catch (err) {
78
+ console.error(err);
79
+ }
80
+ });
81
+ };
82
+ exports.injectFinishRecordingFrame = injectFinishRecordingFrame;
83
+ //# sourceMappingURL=inject-finish-recording-frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inject-finish-recording-frame.js","sourceRoot":"","sources":["../../../src/record/utils/inject-finish-recording-frame.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACI,MAAM,0BAA0B,GAAG,KAAK,EAC7C,IAAU,EACV,cAAsB,EACP,EAAE;IACjB,qDAAqD;IACrD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,kBAAkB,cAAc,IAAI,CAAC,CAAC;IAC5E,IAAI,SAAS,KAAK,UAAU,EAAE;QAC5B,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;KACtE;IAED,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACxC,IAAI;YACF,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,KAAK,EAAE;gBAC9B,OAAO;aACR;YAED,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC,cAAc,EAAE,EAAE;gBACtC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;oBACnC,MAAM,wBAAwB,GAAG,CAAC,CAAC,QAAQ,CAAC,cAAc,CACxD,uCAAuC,CACxC,CAAC;oBAEF,IAAI,wBAAwB,EAAE;wBAC5B,OAAO;qBACR;oBAED,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;oBAChD,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;oBAChC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;oBAC7B,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;oBAC5B,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;oBAC7B,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;oBAC7B,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,qBAAqB,CAAC;oBAC5C,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,uBAAuB,CAAC;oBACjD,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;oBAClC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;oBACvD,MAAM,CAAC,EAAE,GAAG,uCAAuC,CAAC;oBACpD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;oBAElC,MAAM,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC;oBACzC,IAAI,CAAC,SAAS,EAAE;wBACd,MAAM,IAAI,KAAK,CACb,mDAAmD,CACpD,CAAC;qBACH;oBACD,SAAS,CAAC,IAAI,EAAE,CAAC;oBACjB,SAAS,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;4BAuBE,cAAc;;;;;;;;SAQjC,CAAC,CAAC;oBACD,SAAS,CAAC,KAAK,EAAE,CAAC;gBACpB,CAAC,CAAC,CAAC;YACL,CAAC,EAAE,cAAc,CAAC,CAAC;SACpB;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACpB;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AArFW,QAAA,0BAA0B,8BAqFrC"}
@@ -0,0 +1,3 @@
1
+ export declare const printPageClosedWarning: () => void;
2
+ export declare const printNoLoginSessionRecordedWarning: () => void;
3
+ export declare const printWarning: (message: string) => void;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.printWarning = exports.printNoLoginSessionRecordedWarning = exports.printPageClosedWarning = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const printPageClosedWarning = () => {
9
+ (0, exports.printWarning)("Login flow session recording aborted. " +
10
+ "To complete the recording, please click the 'Finish recording' button.");
11
+ };
12
+ exports.printPageClosedWarning = printPageClosedWarning;
13
+ const printNoLoginSessionRecordedWarning = () => {
14
+ (0, exports.printWarning)("No login flow session was recorded. " +
15
+ "Record your flow by signing in into your application.");
16
+ };
17
+ exports.printNoLoginSessionRecordedWarning = printNoLoginSessionRecordedWarning;
18
+ const printWarning = (message) => {
19
+ const padding = 4; // Add extra padding for visibility
20
+ const paddedMessage = " ".repeat(padding) + message + " ".repeat(padding);
21
+ const border = chalk_1.default.red.bold("-".repeat(paddedMessage.length));
22
+ console.log(border);
23
+ console.log(chalk_1.default.red.bold(paddedMessage));
24
+ console.log(border);
25
+ };
26
+ exports.printWarning = printWarning;
27
+ //# sourceMappingURL=print-warning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"print-warning.js","sourceRoot":"","sources":["../../../src/record/utils/print-warning.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAEnB,MAAM,sBAAsB,GAAG,GAAS,EAAE;IAC/C,IAAA,oBAAY,EACV,wCAAwC;QACtC,wEAAwE,CAC3E,CAAC;AACJ,CAAC,CAAC;AALW,QAAA,sBAAsB,0BAKjC;AAEK,MAAM,kCAAkC,GAAG,GAAS,EAAE;IAC3D,IAAA,oBAAY,EACV,sCAAsC;QACpC,uDAAuD,CAC1D,CAAC;AACJ,CAAC,CAAC;AALW,QAAA,kCAAkC,sCAK7C;AAEK,MAAM,YAAY,GAAG,CAAC,OAAe,EAAQ,EAAE;IACpD,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,mCAAmC;IACtD,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAEhE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC,CAAC;AARW,QAAA,YAAY,gBAQvB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alwaysmeticulous/record",
3
- "version": "2.94.0",
3
+ "version": "2.95.0",
4
4
  "description": "The Meticulous toolkit to record user sessions",
5
5
  "license": "ISC",
6
6
  "main": "dist/index.js",
@@ -20,7 +20,8 @@
20
20
  },
21
21
  "dependencies": {
22
22
  "@alwaysmeticulous/api": "^2.92.0",
23
- "@alwaysmeticulous/common": "^2.92.0",
23
+ "@alwaysmeticulous/common": "^2.95.0",
24
+ "chalk": "^4.1.2",
24
25
  "loglevel": "^1.8.0",
25
26
  "puppeteer": "21.3.8"
26
27
  },
@@ -41,5 +42,5 @@
41
42
  "bugs": {
42
43
  "url": "https://github.com/alwaysmeticulous/meticulous-sdk/issues"
43
44
  },
44
- "gitHead": "4533909b62055176163b30bf29c5f81195593fa7"
45
+ "gitHead": "3f3b227e5c9ba524d06b75719d65150728db558a"
45
46
  }