action-lens 1.0.40 → 1.0.41
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.js +10 -21
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +11 -23
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -332,12 +332,11 @@ var import_uuid = require("uuid");
|
|
|
332
332
|
var import_rrweb2 = require("rrweb");
|
|
333
333
|
var import_firestore3 = require("firebase/firestore");
|
|
334
334
|
var import_packer2 = require("@rrweb/packer");
|
|
335
|
-
var import_app2 = require("firebase/app");
|
|
336
335
|
var ActionLensRc = class {
|
|
337
336
|
sessionId = (0, import_uuid.v4)();
|
|
338
337
|
stopFnForStore = null;
|
|
339
338
|
userId = null;
|
|
340
|
-
db =
|
|
339
|
+
db = db;
|
|
341
340
|
prefix = "";
|
|
342
341
|
userData = null;
|
|
343
342
|
projectId = null;
|
|
@@ -348,8 +347,6 @@ var ActionLensRc = class {
|
|
|
348
347
|
userMeta = {};
|
|
349
348
|
metaData = {};
|
|
350
349
|
constructor() {
|
|
351
|
-
const app2 = (0, import_app2.initializeApp)(firebaseConfig);
|
|
352
|
-
this.db = (0, import_firestore3.getFirestore)(app2);
|
|
353
350
|
}
|
|
354
351
|
async init(_userId, projectId, userMeta, metaData = {}, _db = null, prefix = "") {
|
|
355
352
|
try {
|
|
@@ -367,13 +364,14 @@ var ActionLensRc = class {
|
|
|
367
364
|
console.error("userId\u304CNULL\u3067\u3059");
|
|
368
365
|
throw new Error("userId\u304CNULL\u3067\u3059");
|
|
369
366
|
}
|
|
370
|
-
if (!this.db) {
|
|
371
|
-
|
|
372
|
-
console.error("Firestore\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093");
|
|
373
|
-
throw new Error("Firestore\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093");
|
|
374
|
-
}
|
|
367
|
+
if (!this.db && _db) {
|
|
368
|
+
console.error("Firestore\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093");
|
|
375
369
|
this.db = _db;
|
|
376
370
|
}
|
|
371
|
+
if (!this.db) {
|
|
372
|
+
console.error("Firestore\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093");
|
|
373
|
+
throw new Error("Firestore\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093");
|
|
374
|
+
}
|
|
377
375
|
if (!this.projectId) {
|
|
378
376
|
console.error("projectId\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093");
|
|
379
377
|
throw new Error("projectId\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093");
|
|
@@ -441,10 +439,7 @@ var ActionLensRc = class {
|
|
|
441
439
|
hiddenBy: ""
|
|
442
440
|
},
|
|
443
441
|
{ merge: true }
|
|
444
|
-
)
|
|
445
|
-
console.error("Error creating document: ", error);
|
|
446
|
-
throw new Error("\u30E6\u30FC\u30B6\u30FC\u306E\u4F5C\u6210\u306B\u5931\u6557\u3057\u307E\u3057\u305F");
|
|
447
|
-
});
|
|
442
|
+
);
|
|
448
443
|
this.userData = user.data();
|
|
449
444
|
} else {
|
|
450
445
|
this.userData = user.data();
|
|
@@ -463,10 +458,7 @@ var ActionLensRc = class {
|
|
|
463
458
|
updatedBy: this.userId
|
|
464
459
|
},
|
|
465
460
|
{ merge: true }
|
|
466
|
-
)
|
|
467
|
-
console.error("Error updating document: ", error);
|
|
468
|
-
throw new Error("\u30E6\u30FC\u30B6\u30FC\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8ID\u306E\u66F4\u65B0\u306B\u5931\u6557\u3057\u307E\u3057\u305F");
|
|
469
|
-
});
|
|
461
|
+
);
|
|
470
462
|
}
|
|
471
463
|
if (this.userData?.organizationId !== projectData.organizationId) {
|
|
472
464
|
await (0, import_firestore3.setDoc)(
|
|
@@ -480,10 +472,7 @@ var ActionLensRc = class {
|
|
|
480
472
|
updatedBy: this.userId
|
|
481
473
|
},
|
|
482
474
|
{ merge: true }
|
|
483
|
-
)
|
|
484
|
-
console.error("Error updating document: ", error);
|
|
485
|
-
throw new Error("\u30E6\u30FC\u30B6\u30FC\u306E\u7D44\u7E54ID\u306E\u66F4\u65B0\u306B\u5931\u6557\u3057\u307E\u3057\u305F");
|
|
486
|
-
});
|
|
475
|
+
);
|
|
487
476
|
}
|
|
488
477
|
}
|
|
489
478
|
this.startRrwebRecordingForStore();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/player.ts","../src/utils/index.ts","../src/record.ts","../src/utils/date.ts"],"sourcesContent":["export * from \"./player\";\nexport * from \"./record\";\nimport \"./style.css\";\nexport * from \"./utils/date\";\n","import {\n doc,\n collection,\n setDoc,\n addDoc,\n where,\n query,\n getDocs,\n orderBy,\n Firestore,\n getDoc,\n} from \"firebase/firestore\";\nimport {\n ActionRecord,\n ActionRecordSession,\n Project,\n User,\n} from \"@ism-tech/actionlens-type\";\nimport { Replayer } from \"rrweb\";\nimport { db } from \"./utils\"; // dbのインポートパスを適宜変更してください\n\nimport { unpack } from \"@rrweb/packer\";\nexport class ActionLensPlayer {\n replayer: Replayer | null = null;\n overlayContainer: HTMLElement | null = null;\n playerStatus: \"playing\" | \"paused\" | \"stopped\" = \"stopped\";\n targetDivId: string;\n db: Firestore;\n prefix: string;\n userId: string | null = null;\n projectId: string | null = null;\n currentTime: number = 0; // 現在の再生時間\n totalTime: number = 0; // 再生中の時間を保持するための変数\n user: User | null = null; // ユーザーデータを保持するための変数\n private setIntervalId: NodeJS.Timeout | null = null; // setTimeoutのIDを保持するための変数\n\n constructor(\n userId: string,\n targetDivId: string,\n\n _db: Firestore = db,\n prefix: string = \"\"\n ) {\n // 初期化処理が必要であればここに記述\n this.userId = userId;\n this.targetDivId = targetDivId;\n this.db = _db;\n this.prefix = prefix;\n this.initialize(userId);\n }\n\n async initialize(userId: string) {\n const user = await getDoc(doc(this.db, `${this.prefix}user`, userId));\n if (!user.exists()) {\n throw new Error(`User with ID ${userId} does not exist.`);\n }\n const userData = user.data() as User;\n this.user = userData; // ユーザーデータを保持\n this.projectId = userData.projectIds?.[0] || \"\"; // プロジェクトIDを取得\n if (!this.projectId) {\n throw new Error(`Project ID for user ${userId} does not exist.`);\n }\n }\n\n async replayRrwebSession(sessionId: string): Promise<void> {\n try {\n // 1. Firestoreからデータを取得\n\n const q = query(\n collection(this.db, `${this.prefix}ActionRecord`),\n where(\"sessionId\", \"==\", sessionId),\n orderBy(\"timeStamp\", \"asc\")\n );\n\n const querySnapshot = await getDocs(q);\n const events = querySnapshot.docs.map((doc) => {\n const data = doc.data() as ActionRecord;\n return JSON.parse(data.rrwebRecord);\n });\n console.log(\"events\", events);\n if (events.length === 0) {\n console.warn(\n `セッションID ${sessionId} のデータが見つかりませんでした。`\n );\n return;\n }\n\n const targetDiv = document.getElementById(this.targetDivId);\n if (!targetDiv) {\n throw new Error(\n `ID ${this.targetDivId} のdiv要素が見つかりませんでした。`\n );\n }\n\n // クラスを追加\n targetDiv.classList.add(\"replayer-container\");\n\n // 3. Replayerを初期化\n this.replayer = new Replayer(events, {\n unpackFn: unpack,\n root: targetDiv,\n UNSAFE_replayCanvas: false,\n props: {\n autoPlay: true,\n speed: 1,\n mouseTail: true,\n },\n className: \"_replayer-canvas\",\n } as any);\n\n // 4. カスタムイベントのリスナーを追加\n this.replayer.on(\"custom-event\", (event: any) => {\n console.log(\"Custom event:\", event);\n this.handleCustomEvent(event);\n });\n this.replayer.on(\"finish\", () => {\n console.log(\"Replay finished\");\n this.replayer?.pause(0);\n this.playerStatus = \"stopped\";\n this.currentTime = this.replayer?.getCurrentTime() || 0;\n this.endTimeoutTimeline();\n });\n const { totalTime } = this.replayer.getMetaData();\n this.totalTime = totalTime;\n\n // iframeのスタイルを調整\n const iframes = targetDiv.querySelectorAll(\"iframe\");\n iframes.forEach((iframe) => {\n (iframe as HTMLElement).style.transform = \"translate(-50%, -50%)\";\n (iframe as HTMLElement).style.position = \"absolute\";\n (iframe as HTMLElement).style.left = \"50%\";\n (iframe as HTMLElement).style.top = \"50%\";\n });\n // replayer-mouse-tailにposition: absolute; を追加\n const mouseTailElements = document.querySelectorAll(\n \".replayer-mouse-tail\"\n );\n mouseTailElements.forEach((element) => {\n (element as HTMLElement).style.position = \"absolute\";\n (element as HTMLElement).style.left = \"50%\";\n (element as HTMLElement).style.top = \"50%\";\n (element as HTMLElement).style.transform = \"translate(-50%, -50%)\";\n (element as HTMLElement).style.zIndex = \"1000\"; // z-indexを追加\n });\n\n // 5. 再生開始\n\n this.replayer.play();\n this.playerStatus = \"playing\";\n console.log(`セッションID ${sessionId} の再生を開始しました。`);\n this.setTimeoutTimeline();\n } catch (error) {\n console.error(\"再生エラー:\", error);\n throw error;\n }\n }\n\n // カスタムイベントを処理\n private handleCustomEvent(event: any) {\n if (!event.data || !event.data.type) return;\n\n const { timestamp } = event;\n const timeString = new Date(timestamp).toISOString();\n\n switch (event.data.type) {\n case \"console\":\n const { method, args } = event.data;\n this.displayEvent(\n `[${timeString}] Console ${method}: ${args.join(\", \")}`,\n \"console\"\n );\n\n break;\n case \"navigation\":\n const { url } = event.data;\n this.displayEvent(`[${timeString}] Navigation to ${url}`, \"navigation\");\n break;\n case \"performance\":\n const { name, entryType, duration } = event.data;\n this.displayEvent(\n `[${timeString}] Performance ${entryType}: ${name} (${duration}ms)`,\n \"performance\"\n );\n break;\n default:\n console.warn(\"不明なカスタムイベント:\", event.data.type);\n }\n }\n\n // イベントをオーバーレイに表示\n private displayEvent(message: string, eventType: string) {\n if (!this.overlayContainer) return;\n\n const eventDiv = document.createElement(\"div\");\n eventDiv.style.padding = \"5px\";\n eventDiv.style.borderBottom = \"1px solid rgba(255, 255, 255, 0.2)\";\n\n // イベントタイプに応じた色\n const colors: { [key: string]: string } = {\n console: \"#00cc00\",\n navigation: \"#3399ff\",\n performance: \"#ff9900\",\n };\n eventDiv.style.color = colors[eventType] || \"white\";\n\n eventDiv.innerText = message;\n this.overlayContainer.appendChild(eventDiv);\n\n // 最新のイベントが表示されるようスクロール\n this.overlayContainer.scrollTop = this.overlayContainer.scrollHeight;\n\n // 5秒後にフェードアウト\n setTimeout(() => {\n eventDiv.style.transition = \"opacity 1s\";\n eventDiv.style.opacity = \"0\";\n setTimeout(() => eventDiv.remove(), 1000);\n }, 5000);\n }\n setReplayTime(time: number) {\n if (this.replayer) {\n this.replayer.pause(time);\n this.currentTime = time;\n this.playerStatus = \"stopped\";\n }\n }\n\n setTimeoutTimeline() {\n this.setIntervalId = setInterval(() => {\n this.currentTime = this.replayer?.getCurrentTime() || 0;\n }, 10);\n }\n endTimeoutTimeline() {\n if (this.setIntervalId) {\n clearTimeout(this.setIntervalId);\n this.setIntervalId = null;\n }\n }\n\n // 再生を停止\n stopReplay() {\n this.endTimeoutTimeline();\n if (this.replayer) {\n this.replayer.pause();\n this.playerStatus = \"stopped\";\n this.currentTime = this.replayer?.getCurrentTime() || 0;\n }\n }\n restartReplay() {\n this.setTimeoutTimeline();\n if (this.replayer) {\n const offset = this.replayer.getCurrentTime();\n console.log(\"offset\", offset);\n this.replayer.play(offset);\n this.playerStatus = \"playing\";\n this.currentTime = this.replayer?.getCurrentTime() || 0;\n }\n }\n getCurrentTime() {\n if (this.replayer) {\n return this.replayer.getCurrentTime();\n }\n return 0;\n }\n\n resetReplayer() {\n this.endTimeoutTimeline();\n this.playerStatus = \"stopped\";\n this.currentTime = 0;\n\n if (this.replayer) {\n this.replayer.pause();\n this.replayer.destroy();\n this.replayer = null;\n }\n if (this.overlayContainer) {\n this.overlayContainer.remove();\n this.overlayContainer = null;\n }\n }\n async fetchProjectList() {\n try {\n if (!this.userId) {\n console.warn(\"User ID is not initialized.\");\n return [];\n }\n if (!this.user) {\n this.user = (\n await getDoc(doc(this.db, `${this.prefix}user`, this.userId))\n ).data() as User;\n if (!this.user) {\n console.warn(`User with ID ${this.userId} does not exist.`);\n\n return [];\n }\n }\n const projectIds = this.user.projectIds || [];\n if (projectIds.length === 0) {\n console.warn(\"No project IDs found for the user.\");\n return [];\n }\n const promise = projectIds.flatMap(async (projectId) => {\n const projectDoc = await getDoc(\n doc(this.db, `${this.prefix}project`, projectId)\n );\n if (!projectDoc.exists()) {\n console.warn(`Project with ID ${projectId} does not exist.`);\n return null;\n }\n return projectDoc.data() as Project;\n });\n const projectPromises: (Project | null)[] = await Promise.all(promise);\n return projectPromises.filter((project) => project !== null);\n } catch (e) {\n console.error(\"プロジェクトリストの取得エラー:\", e);\n throw e;\n }\n }\n async fetchSessionList(projectId: string) {\n try {\n const q = query(\n collection(this.db, `${this.prefix}ActionRecordSession`),\n where(\"projectId\", \"==\", projectId),\n orderBy(\"startTime\", \"desc\")\n );\n const usersStore: { [userId: string]: User } = {};\n\n const querySnapshot = await getDocs(q);\n const promise = querySnapshot.docs.map(async (_doc) => {\n const data = _doc.data() as ActionRecordSession;\n if (!usersStore[data.userId]) {\n usersStore[data.userId] = (\n await getDoc(doc(this.db, `${this.prefix}user`, data.userId))\n ).data() as User;\n }\n\n return { ...data, userData: usersStore[data.userId] };\n });\n const sessions: (ActionRecordSession & { userData: User })[] =\n await Promise.all(promise);\n console.log(sessions);\n\n return sessions;\n } catch (error) {\n console.error(\"セッションリストの取得エラー:\", error);\n throw error;\n }\n }\n}\n","import { initializeApp } from \"firebase/app\";\nimport { getFirestore } from \"firebase/firestore\";\n\nexport const firebaseConfig = {\n apiKey: \"AIzaSyCxreoOZivnjFIh2mJ6WXjS3ieQ11wsDW8\",\n authDomain: \"actionlens-b14ae.firebaseapp.com\",\n projectId: \"actionlens-b14ae\",\n storageBucket: \"actionlens-b14ae.firebasestorage.app\",\n messagingSenderId: \"36086339210\",\n appId: \"1:36086339210:web:36e16e8778aadd8c58ff73\",\n};\n\n// Initialize Firebase\nconst app = initializeApp(firebaseConfig);\n\nexport const db = getFirestore(app);\n","import { v4 as uuidv4 } from \"uuid\";\nimport { record, Replayer } from \"rrweb\";\nimport {\n Firestore,\n doc,\n setDoc,\n collection,\n getDoc,\n getFirestore,\n} from \"firebase/firestore\";\nimport { ActionRecord, Project, User } from \"@ism-tech/actionlens-type\";\nimport { firebaseConfig } from \"./utils/index\";\nimport { pack } from \"@rrweb/packer\";\nimport { initializeApp } from \"firebase/app\";\nexport class ActionLensRc {\n sessionId: string = uuidv4();\n stopFnForStore: any = null;\n userId: string | null = null;\n db: Firestore | null = null;\n prefix: string = \"\";\n userData: User | null = null;\n projectId: string | null = null;\n projectData: Project | null = null;\n organizationId: string | null = null;\n originalUserId: string | null = null; // 元のユーザーID(外部システムのIDなど)\n userMeta: { name?: string; email?: string } = {};\n metaData: Record<string, any> = {};\n constructor() {\n const app = initializeApp(firebaseConfig);\n\n this.db = getFirestore(app);\n }\n\n async init(\n _userId: string | null,\n projectId: string | null,\n userMeta: { name: string; email: string },\n metaData: Record<string, any> = {},\n _db: Firestore | null = null,\n prefix: string = \"\"\n ) {\n try {\n this.originalUserId = _userId; // 元のユーザーIDを保存\n console.log(\"ActionLensRc開始\");\n if (!projectId) {\n console.error(\"projectIdがNULLです\");\n throw new Error(\"projectIdがNULLです\");\n }\n this.projectId = projectId;\n\n this.prefix = prefix;\n this.userMeta = userMeta;\n this.metaData = metaData;\n\n if (!_userId) {\n console.error(\"userIdがNULLです\");\n throw new Error(\"userIdがNULLです\");\n }\n\n if (!this.db) {\n if (!_db) {\n console.error(\"Firestoreが初期化されていません\");\n throw new Error(\"Firestoreが初期化されていません\");\n }\n this.db = _db;\n }\n\n if (!this.projectId) {\n console.error(\"projectIdが設定されていません\");\n throw new Error(\"projectIdが設定されていません\");\n }\n const _doc = await getDoc(\n doc(collection(this.db, `${this.prefix}project`), this.projectId)\n );\n this.projectData = _doc.data() as Project;\n const projectData = this.projectData;\n this.organizationId = projectData?.organizationId || \"\";\n\n if (!this.projectData) {\n await setDoc(\n doc(collection(this.db, `${this.prefix}project`), this.projectId),\n {\n id: this.projectId,\n name: this.projectId,\n organizationId: \"\",\n isActivate: false, // デフォルトでアクティブに設定\n createAt: new Date(),\n updateAt: new Date(),\n createdBy: this.originalUserId,\n updatedBy: this.originalUserId,\n } as Project,\n { merge: true }\n );\n throw new Error(\"プロジェクトが存在しません\");\n }\n if (!this.projectData?.isActivate) {\n console.warn(\"プロジェクトは非アクティブです。録画を開始できません。\");\n throw new Error(\n \"プロジェクトは非アクティブです。録画を開始できません。\"\n );\n }\n this.userId = projectData.organizationId + \"-\" + this.originalUserId;\n this.prefix = this.prefix;\n this.projectId = this.projectId;\n const user = await getDoc(\n doc(collection(this.db, `${this.prefix}user`), this.userId)\n );\n\n if (!this.db) {\n console.error(\"Firestoreが初期化されていません\");\n throw new Error(\"Firestoreが初期化されていません\");\n }\n\n const userData = user.data() as User;\n\n if (!userData.id || !user.exists()) {\n await setDoc(\n doc(\n collection(this.db, `${this.prefix}user`),\n projectData.organizationId + \"-\" + this.originalUserId\n ),\n {\n ...(this.userMeta || {}),\n metaData: this.metaData,\n id: this.userId,\n originalUserId: this.originalUserId,\n type: \"customer\",\n organizationId: projectData?.organizationId || \"\",\n projectIds: [this.projectId],\n createAt: new Date(),\n updateAt: new Date(),\n createdBy: this.userId,\n updatedBy: this.userId,\n hidden: false,\n hiddenBy: \"\",\n } as User,\n { merge: true }\n ).catch((error) => {\n console.error(\"Error creating document: \", error);\n\n throw new Error(\"ユーザーの作成に失敗しました\");\n });\n this.userData = user.data() as User;\n } else {\n this.userData = user.data() as User;\n\n if (!this.userData?.projectIds?.includes(this.projectId || \"\")) {\n await setDoc(\n doc(\n collection(this.db, `${this.prefix}user`),\n projectData.organizationId + \"-\" + this.originalUserId\n ),\n {\n projectIds: [\n ...(this.userData?.projectIds || []),\n this.projectId,\n ],\n updateAt: new Date(),\n updatedBy: this.userId,\n } as Partial<User>,\n { merge: true }\n ).catch((error) => {\n console.error(\"Error updating document: \", error);\n throw new Error(\"ユーザーのプロジェクトIDの更新に失敗しました\");\n });\n }\n\n if (this.userData?.organizationId !== projectData.organizationId) {\n await setDoc(\n doc(\n collection(this.db, `${this.prefix}user`),\n projectData.organizationId + \"-\" + this.originalUserId\n ),\n {\n organizationId: projectData.organizationId\n ? projectData.organizationId\n : this.userData?.organizationId,\n updateAt: new Date(),\n updatedBy: this.userId,\n } as Partial<User>,\n { merge: true }\n ).catch((error) => {\n console.error(\"Error updating document: \", error);\n throw new Error(\"ユーザーの組織IDの更新に失敗しました\");\n });\n }\n }\n\n this.startRrwebRecordingForStore();\n this.startConsoleRecording();\n // this.startTimelineRecording();\n return;\n } catch (error) {\n console.error(\"初期化中にエラーが発生しました:\", error);\n throw error;\n }\n }\n\n // コンソールログをキャプチャ\n startConsoleRecording() {\n try {\n const originalConsole = { ...console };\n const consoleMethods = [\n \"log\",\n \"info\",\n \"warn\",\n \"error\",\n \"debug\",\n \"trace\",\n \"assert\",\n \"clear\",\n \"context\",\n \"count\",\n \"countReset\",\n \"createTask\",\n \"debug\",\n \"dir\",\n \"dirxml\",\n \"error\",\n \"group\",\n \"groupCollapsed\",\n \"groupEnd\",\n \"memory\",\n \"profile\",\n \"profileEnd\",\n \"table\",\n \"time\",\n \"timeEnd\",\n \"timeLog\",\n \"timeStamp\",\n ] as const;\n\n consoleMethods.forEach((method) => {\n // 型安全なオーバーライド\n (console as any)[method] = (...args: any[]) => {\n // 元のメソッドを呼び出し\n (originalConsole as any)[method](...args);\n\n record.addCustomEvent(\"console\", { method: \"log\", args });\n };\n });\n } catch (error) {\n console.error(\"コンソール録画エラー:\", error);\n throw error;\n }\n }\n\n // タイムライン(ナビゲーションとパフォーマンス)をキャプチャ\n startTimelineRecording() {\n try {\n const userId = this.userId || \"unknown\";\n const sessionId = this.sessionId;\n const db = this.db;\n const prefix = this.prefix;\n // ナビゲーション履歴(popstateイベント)\n window.addEventListener(\"popstate\", (event) => {\n if (!db) {\n console.error(\"Firestoreが初期化されていません\");\n return;\n }\n\n record.addCustomEvent(\"navigation\", {\n url: window.location.href,\n state: event.state,\n });\n });\n\n // パフォーマンスエントリ\n if (window.performance) {\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n record.addCustomEvent(\"performance\", {\n name: entry.name,\n entryType: entry.entryType,\n startTime: entry.startTime,\n duration: entry.duration,\n });\n }\n });\n\n observer.observe({ entryTypes: [\"resource\", \"navigation\", \"paint\"] });\n }\n } catch (error) {\n console.error(\"タイムライン録画エラー:\", error);\n throw error;\n }\n }\n\n async startRrwebRecordingForStore() {\n try {\n if (this.stopFnForStore) return;\n\n const _sessionId = this.sessionId;\n const userId = this.userId || \"unknown\";\n const originalUserId = this.originalUserId || \"\";\n const db = this.db;\n const prefix = this.prefix;\n if (!db) {\n console.error(\"Firestoreが初期化されていません\");\n return;\n }\n // rrwebの録画を開始\n // このセッションの開始時間を記録\n const ActionRecordSessionRef = doc(\n collection(db, `${prefix}ActionRecordSession`),\n _sessionId\n );\n await setDoc(ActionRecordSessionRef, {\n id: _sessionId,\n startTime: new Date(),\n endTime: new Date(),\n userId,\n projectId: this.projectId || \"\",\n organizationId: this.projectData?.organizationId || \"\",\n createAt: new Date(),\n updateAt: new Date(),\n createdBy: userId,\n updatedBy: userId,\n });\n // rrwebの録画を開始 済み\n const _updateActionRecordSession = () => this.updateActionRecordSession();\n this.stopFnForStore = record({\n packFn: pack,\n collectFonts: true,\n inlineImages: false,\n sampling: {\n canvas: 500,\n mousemove: true,\n mousemoveCallback: 500,\n },\n emit(event) {\n const newDocRef = doc(collection(db, `${prefix}ActionRecord`));\n const record: ActionRecord = {\n id: newDocRef.id,\n timeStamp: new Date(),\n userId,\n originalUserId,\n type: \"rrweb\",\n sessionId: _sessionId,\n rrwebRecord: JSON.stringify(event),\n createAt: new Date(),\n updateAt: new Date(),\n hidden: false,\n createdBy: userId,\n updatedBy: userId,\n hiddenBy: \"\",\n };\n\n setDoc(newDocRef, record).catch((error) => {\n console.error(\"Error saving rrweb event: \", error);\n });\n _updateActionRecordSession();\n },\n recordCanvas: false,\n });\n } catch (error) {\n console.error(\"rrweb録画エラー:\", error);\n throw error;\n }\n }\n\n stopRrwebRecordingForStore() {\n try {\n if (this.stopFnForStore) {\n this.stopFnForStore();\n this.stopFnForStore = null;\n }\n } catch (error) {\n console.error(\"rrweb録画停止エラー:\", error);\n throw error;\n }\n }\n updateActionRecordSession() {\n try {\n if (!this.db || !this.sessionId || !this.userId) {\n console.error(\n \"Firestoreが初期化されていません、またはsessionId、userIdが設定されていません\"\n );\n return;\n }\n const ActionRecordSessionRef = doc(\n collection(this.db, `${this.prefix}ActionRecordSession`),\n this.sessionId\n );\n setDoc(\n ActionRecordSessionRef,\n {\n endTime: new Date(),\n updateAt: new Date(),\n updatedBy: this.userId,\n },\n { merge: true }\n ).catch((error) => {\n console.error(\"Error updating ActionRecordSession: \", error);\n });\n } catch (error) {\n console.error(\"ActionRecordSession更新エラー:\", error);\n throw error;\n }\n }\n}\n\nexport const ActionLens = new ActionLensRc();\n","import { Timestamp } from \"firebase/firestore\";\n// import { copy } from \"copy-anything\";\n/** Timestampの時はDateへの変更 */\nexport function convertTimestampToDate(\n timestamp: Timestamp | Date | null\n): Date | null {\n if (!timestamp) return null;\n /** string の場合(本来は来ないはずなのに) */\n if (typeof timestamp === \"string\") {\n const _string = new Date(timestamp);\n // console.log('convertTimestampToDate-string:', _string)\n if (isNaN(_string.getTime())) {\n return null;\n }\n return _string;\n }\n if (\"_seconds\" in timestamp && timestamp?._seconds) {\n return new Date(Number(timestamp._seconds) * 1000);\n }\n /** timestampの場合 */\n if (timestamp instanceof Timestamp) {\n const _timestamp = timestamp.toDate();\n // console.log('convertTimestampToDate-timestamp:', _timestamp)\n return _timestamp;\n }\n /** Dateの場合 */\n if (timestamp instanceof Date) {\n const _date = timestamp;\n // console.log('convertTimestampToDate-date:', _date)\n return _date;\n }\n // console.log('convertTimestampToDate-type:', typeof timestamp)\n // console.log('convertTimestampToDate-else:', timestamp)\n return timestamp;\n}\n\n/**\n * 時間を文字に変換\n * @param payload Date | Timestamp | string | null\n * @param format YYYY/MM/DD hh:mm:ss\n */\nexport const dateFormat = (\n payload:\n | Date\n | Timestamp\n | string\n | number\n | null\n | undefined\n | {\n _seconds: number;\n _nanoseconds: number;\n },\n format: string = \"YYYY/MM/DD\"\n) => {\n let date = payload;\n if (!date) return \"\";\n if (typeof date === \"string\") {\n if (date.length === 8 && /^\\d{8}$/.test(date)) {\n // 'YYYYMMDD'形式の対応\n const strYear = Number(date.slice(0, 4));\n const strMonth = Number(date.slice(4, 6)) - 1; // 月は0始まり\n const strDate = Number(date.slice(6, 8));\n date = new Date(strYear, strMonth, strDate);\n } else if (!/^(\\d{4}).([0-1]\\d).([0-3]\\d).*$/.test(date)) {\n return \"error\";\n } else {\n const strYear = Number(date.slice(0, 4));\n const strMonth = Number(date.slice(5, 7)) - 1;\n const strDate = Number(date.slice(8, 10));\n date = new Date(strYear, strMonth, strDate);\n }\n }\n if (typeof date === \"number\") {\n date = new Date(date);\n }\n if (isTimestamp(date)) {\n date = date.toDate();\n }\n if (date.hasOwnProperty(\"_seconds\") && date.hasOwnProperty(\"_nanoseconds\")) {\n date = new Date(\n // @ts-ignore\n date._seconds * 1000 + Math.floor(date._nanoseconds / 1000000)\n );\n }\n\n date = new Date(date as Date);\n\n format = format.replace(/YYYY/g, date.getFullYear().toString());\n format = format.replace(/MM/g, (\"0\" + (date.getMonth() + 1)).slice(-2));\n format = format.replace(/DD/g, (\"0\" + date.getDate()).slice(-2));\n format = format.replace(/hh/g, (\"0\" + date.getHours()).slice(-2));\n format = format.replace(/mm/g, (\"0\" + date.getMinutes()).slice(-2));\n format = format.replace(/ss/g, (\"0\" + date.getSeconds()).slice(-2));\n format = format.replace(/SSS/g, (\"00\" + date.getMilliseconds()).slice(-3));\n format = format.replace(\n /aaa/g,\n [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"][date.getDay()]\n );\n // if (format.includes('-')) {\n // console.log('「-」includes warning')\n // }\n\n return format;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst isTimestamp = (payload: any): payload is Timestamp => {\n return payload.toDate !== undefined;\n};\n"],"mappings":"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","names":["import_firestore","doc","import_rrweb","import_firestore","import_packer","import_app","uuidv4","app","db","record","import_firestore"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/player.ts","../src/utils/index.ts","../src/record.ts","../src/utils/date.ts"],"sourcesContent":["export * from \"./player\";\nexport * from \"./record\";\nimport \"./style.css\";\nexport * from \"./utils/date\";\n","import {\n doc,\n collection,\n setDoc,\n addDoc,\n where,\n query,\n getDocs,\n orderBy,\n Firestore,\n getDoc,\n} from \"firebase/firestore\";\nimport {\n ActionRecord,\n ActionRecordSession,\n Project,\n User,\n} from \"@ism-tech/actionlens-type\";\nimport { Replayer } from \"rrweb\";\nimport { db } from \"./utils\"; // dbのインポートパスを適宜変更してください\n\nimport { unpack } from \"@rrweb/packer\";\nexport class ActionLensPlayer {\n replayer: Replayer | null = null;\n overlayContainer: HTMLElement | null = null;\n playerStatus: \"playing\" | \"paused\" | \"stopped\" = \"stopped\";\n targetDivId: string;\n db: Firestore;\n prefix: string;\n userId: string | null = null;\n projectId: string | null = null;\n currentTime: number = 0; // 現在の再生時間\n totalTime: number = 0; // 再生中の時間を保持するための変数\n user: User | null = null; // ユーザーデータを保持するための変数\n private setIntervalId: NodeJS.Timeout | null = null; // setTimeoutのIDを保持するための変数\n\n constructor(\n userId: string,\n targetDivId: string,\n\n _db: Firestore = db,\n prefix: string = \"\"\n ) {\n // 初期化処理が必要であればここに記述\n this.userId = userId;\n this.targetDivId = targetDivId;\n this.db = _db;\n this.prefix = prefix;\n this.initialize(userId);\n }\n\n async initialize(userId: string) {\n const user = await getDoc(doc(this.db, `${this.prefix}user`, userId));\n if (!user.exists()) {\n throw new Error(`User with ID ${userId} does not exist.`);\n }\n const userData = user.data() as User;\n this.user = userData; // ユーザーデータを保持\n this.projectId = userData.projectIds?.[0] || \"\"; // プロジェクトIDを取得\n if (!this.projectId) {\n throw new Error(`Project ID for user ${userId} does not exist.`);\n }\n }\n\n async replayRrwebSession(sessionId: string): Promise<void> {\n try {\n // 1. Firestoreからデータを取得\n\n const q = query(\n collection(this.db, `${this.prefix}ActionRecord`),\n where(\"sessionId\", \"==\", sessionId),\n orderBy(\"timeStamp\", \"asc\")\n );\n\n const querySnapshot = await getDocs(q);\n const events = querySnapshot.docs.map((doc) => {\n const data = doc.data() as ActionRecord;\n return JSON.parse(data.rrwebRecord);\n });\n console.log(\"events\", events);\n if (events.length === 0) {\n console.warn(\n `セッションID ${sessionId} のデータが見つかりませんでした。`\n );\n return;\n }\n\n const targetDiv = document.getElementById(this.targetDivId);\n if (!targetDiv) {\n throw new Error(\n `ID ${this.targetDivId} のdiv要素が見つかりませんでした。`\n );\n }\n\n // クラスを追加\n targetDiv.classList.add(\"replayer-container\");\n\n // 3. Replayerを初期化\n this.replayer = new Replayer(events, {\n unpackFn: unpack,\n root: targetDiv,\n UNSAFE_replayCanvas: false,\n props: {\n autoPlay: true,\n speed: 1,\n mouseTail: true,\n },\n className: \"_replayer-canvas\",\n } as any);\n\n // 4. カスタムイベントのリスナーを追加\n this.replayer.on(\"custom-event\", (event: any) => {\n console.log(\"Custom event:\", event);\n this.handleCustomEvent(event);\n });\n this.replayer.on(\"finish\", () => {\n console.log(\"Replay finished\");\n this.replayer?.pause(0);\n this.playerStatus = \"stopped\";\n this.currentTime = this.replayer?.getCurrentTime() || 0;\n this.endTimeoutTimeline();\n });\n const { totalTime } = this.replayer.getMetaData();\n this.totalTime = totalTime;\n\n // iframeのスタイルを調整\n const iframes = targetDiv.querySelectorAll(\"iframe\");\n iframes.forEach((iframe) => {\n (iframe as HTMLElement).style.transform = \"translate(-50%, -50%)\";\n (iframe as HTMLElement).style.position = \"absolute\";\n (iframe as HTMLElement).style.left = \"50%\";\n (iframe as HTMLElement).style.top = \"50%\";\n });\n // replayer-mouse-tailにposition: absolute; を追加\n const mouseTailElements = document.querySelectorAll(\n \".replayer-mouse-tail\"\n );\n mouseTailElements.forEach((element) => {\n (element as HTMLElement).style.position = \"absolute\";\n (element as HTMLElement).style.left = \"50%\";\n (element as HTMLElement).style.top = \"50%\";\n (element as HTMLElement).style.transform = \"translate(-50%, -50%)\";\n (element as HTMLElement).style.zIndex = \"1000\"; // z-indexを追加\n });\n\n // 5. 再生開始\n\n this.replayer.play();\n this.playerStatus = \"playing\";\n console.log(`セッションID ${sessionId} の再生を開始しました。`);\n this.setTimeoutTimeline();\n } catch (error) {\n console.error(\"再生エラー:\", error);\n throw error;\n }\n }\n\n // カスタムイベントを処理\n private handleCustomEvent(event: any) {\n if (!event.data || !event.data.type) return;\n\n const { timestamp } = event;\n const timeString = new Date(timestamp).toISOString();\n\n switch (event.data.type) {\n case \"console\":\n const { method, args } = event.data;\n this.displayEvent(\n `[${timeString}] Console ${method}: ${args.join(\", \")}`,\n \"console\"\n );\n\n break;\n case \"navigation\":\n const { url } = event.data;\n this.displayEvent(`[${timeString}] Navigation to ${url}`, \"navigation\");\n break;\n case \"performance\":\n const { name, entryType, duration } = event.data;\n this.displayEvent(\n `[${timeString}] Performance ${entryType}: ${name} (${duration}ms)`,\n \"performance\"\n );\n break;\n default:\n console.warn(\"不明なカスタムイベント:\", event.data.type);\n }\n }\n\n // イベントをオーバーレイに表示\n private displayEvent(message: string, eventType: string) {\n if (!this.overlayContainer) return;\n\n const eventDiv = document.createElement(\"div\");\n eventDiv.style.padding = \"5px\";\n eventDiv.style.borderBottom = \"1px solid rgba(255, 255, 255, 0.2)\";\n\n // イベントタイプに応じた色\n const colors: { [key: string]: string } = {\n console: \"#00cc00\",\n navigation: \"#3399ff\",\n performance: \"#ff9900\",\n };\n eventDiv.style.color = colors[eventType] || \"white\";\n\n eventDiv.innerText = message;\n this.overlayContainer.appendChild(eventDiv);\n\n // 最新のイベントが表示されるようスクロール\n this.overlayContainer.scrollTop = this.overlayContainer.scrollHeight;\n\n // 5秒後にフェードアウト\n setTimeout(() => {\n eventDiv.style.transition = \"opacity 1s\";\n eventDiv.style.opacity = \"0\";\n setTimeout(() => eventDiv.remove(), 1000);\n }, 5000);\n }\n setReplayTime(time: number) {\n if (this.replayer) {\n this.replayer.pause(time);\n this.currentTime = time;\n this.playerStatus = \"stopped\";\n }\n }\n\n setTimeoutTimeline() {\n this.setIntervalId = setInterval(() => {\n this.currentTime = this.replayer?.getCurrentTime() || 0;\n }, 10);\n }\n endTimeoutTimeline() {\n if (this.setIntervalId) {\n clearTimeout(this.setIntervalId);\n this.setIntervalId = null;\n }\n }\n\n // 再生を停止\n stopReplay() {\n this.endTimeoutTimeline();\n if (this.replayer) {\n this.replayer.pause();\n this.playerStatus = \"stopped\";\n this.currentTime = this.replayer?.getCurrentTime() || 0;\n }\n }\n restartReplay() {\n this.setTimeoutTimeline();\n if (this.replayer) {\n const offset = this.replayer.getCurrentTime();\n console.log(\"offset\", offset);\n this.replayer.play(offset);\n this.playerStatus = \"playing\";\n this.currentTime = this.replayer?.getCurrentTime() || 0;\n }\n }\n getCurrentTime() {\n if (this.replayer) {\n return this.replayer.getCurrentTime();\n }\n return 0;\n }\n\n resetReplayer() {\n this.endTimeoutTimeline();\n this.playerStatus = \"stopped\";\n this.currentTime = 0;\n\n if (this.replayer) {\n this.replayer.pause();\n this.replayer.destroy();\n this.replayer = null;\n }\n if (this.overlayContainer) {\n this.overlayContainer.remove();\n this.overlayContainer = null;\n }\n }\n async fetchProjectList() {\n try {\n if (!this.userId) {\n console.warn(\"User ID is not initialized.\");\n return [];\n }\n if (!this.user) {\n this.user = (\n await getDoc(doc(this.db, `${this.prefix}user`, this.userId))\n ).data() as User;\n if (!this.user) {\n console.warn(`User with ID ${this.userId} does not exist.`);\n\n return [];\n }\n }\n const projectIds = this.user.projectIds || [];\n if (projectIds.length === 0) {\n console.warn(\"No project IDs found for the user.\");\n return [];\n }\n const promise = projectIds.flatMap(async (projectId) => {\n const projectDoc = await getDoc(\n doc(this.db, `${this.prefix}project`, projectId)\n );\n if (!projectDoc.exists()) {\n console.warn(`Project with ID ${projectId} does not exist.`);\n return null;\n }\n return projectDoc.data() as Project;\n });\n const projectPromises: (Project | null)[] = await Promise.all(promise);\n return projectPromises.filter((project) => project !== null);\n } catch (e) {\n console.error(\"プロジェクトリストの取得エラー:\", e);\n throw e;\n }\n }\n async fetchSessionList(projectId: string) {\n try {\n const q = query(\n collection(this.db, `${this.prefix}ActionRecordSession`),\n where(\"projectId\", \"==\", projectId),\n orderBy(\"startTime\", \"desc\")\n );\n const usersStore: { [userId: string]: User } = {};\n\n const querySnapshot = await getDocs(q);\n const promise = querySnapshot.docs.map(async (_doc) => {\n const data = _doc.data() as ActionRecordSession;\n if (!usersStore[data.userId]) {\n usersStore[data.userId] = (\n await getDoc(doc(this.db, `${this.prefix}user`, data.userId))\n ).data() as User;\n }\n\n return { ...data, userData: usersStore[data.userId] };\n });\n const sessions: (ActionRecordSession & { userData: User })[] =\n await Promise.all(promise);\n console.log(sessions);\n\n return sessions;\n } catch (error) {\n console.error(\"セッションリストの取得エラー:\", error);\n throw error;\n }\n }\n}\n","import { initializeApp } from \"firebase/app\";\nimport { getFirestore } from \"firebase/firestore\";\n\nexport const firebaseConfig = {\n apiKey: \"AIzaSyCxreoOZivnjFIh2mJ6WXjS3ieQ11wsDW8\",\n authDomain: \"actionlens-b14ae.firebaseapp.com\",\n projectId: \"actionlens-b14ae\",\n storageBucket: \"actionlens-b14ae.firebasestorage.app\",\n messagingSenderId: \"36086339210\",\n appId: \"1:36086339210:web:36e16e8778aadd8c58ff73\",\n};\n\n// Initialize Firebase\nconst app = initializeApp(firebaseConfig);\n\nexport const db = getFirestore(app);\n","import { v4 as uuidv4 } from \"uuid\";\nimport { record, Replayer } from \"rrweb\";\nimport {\n Firestore,\n doc,\n setDoc,\n collection,\n getDoc,\n getFirestore,\n} from \"firebase/firestore\";\nimport { ActionRecord, Project, User } from \"@ism-tech/actionlens-type\";\nimport { db } from \"./utils/index\";\nimport { pack } from \"@rrweb/packer\";\nimport { initializeApp } from \"firebase/app\";\nexport class ActionLensRc {\n sessionId: string = uuidv4();\n stopFnForStore: any = null;\n userId: string | null = null;\n db: Firestore | null = db;\n prefix: string = \"\";\n userData: User | null = null;\n projectId: string | null = null;\n projectData: Project | null = null;\n organizationId: string | null = null;\n originalUserId: string | null = null; // 元のユーザーID(外部システムのIDなど)\n userMeta: { name?: string; email?: string } = {};\n metaData: Record<string, any> = {};\n constructor() {}\n\n async init(\n _userId: string | null,\n projectId: string | null,\n userMeta: { name: string; email: string },\n metaData: Record<string, any> = {},\n _db: Firestore | null = null,\n prefix: string = \"\"\n ) {\n try {\n this.originalUserId = _userId; // 元のユーザーIDを保存\n console.log(\"ActionLensRc開始\");\n if (!projectId) {\n console.error(\"projectIdがNULLです\");\n throw new Error(\"projectIdがNULLです\");\n }\n this.projectId = projectId;\n\n this.prefix = prefix;\n this.userMeta = userMeta;\n this.metaData = metaData;\n\n if (!_userId) {\n console.error(\"userIdがNULLです\");\n throw new Error(\"userIdがNULLです\");\n }\n\n if (!this.db && _db) {\n console.error(\"Firestoreが初期化されていません\");\n this.db = _db;\n }\n if (!this.db) {\n console.error(\"Firestoreが初期化されていません\");\n throw new Error(\"Firestoreが初期化されていません\");\n }\n\n if (!this.projectId) {\n console.error(\"projectIdが設定されていません\");\n throw new Error(\"projectIdが設定されていません\");\n }\n const _doc = await getDoc(\n doc(collection(this.db, `${this.prefix}project`), this.projectId)\n );\n this.projectData = _doc.data() as Project;\n const projectData = this.projectData;\n this.organizationId = projectData?.organizationId || \"\";\n\n if (!this.projectData) {\n await setDoc(\n doc(collection(this.db, `${this.prefix}project`), this.projectId),\n {\n id: this.projectId,\n name: this.projectId,\n organizationId: \"\",\n isActivate: false, // デフォルトでアクティブに設定\n createAt: new Date(),\n updateAt: new Date(),\n createdBy: this.originalUserId,\n updatedBy: this.originalUserId,\n } as Project,\n { merge: true }\n );\n throw new Error(\"プロジェクトが存在しません\");\n }\n if (!this.projectData?.isActivate) {\n console.warn(\"プロジェクトは非アクティブです。録画を開始できません。\");\n throw new Error(\n \"プロジェクトは非アクティブです。録画を開始できません。\"\n );\n }\n this.userId = projectData.organizationId + \"-\" + this.originalUserId;\n this.prefix = this.prefix;\n this.projectId = this.projectId;\n const user = await getDoc(\n doc(collection(this.db, `${this.prefix}user`), this.userId)\n );\n\n if (!this.db) {\n console.error(\"Firestoreが初期化されていません\");\n throw new Error(\"Firestoreが初期化されていません\");\n }\n\n const userData = user.data() as User;\n\n if (!userData.id || !user.exists()) {\n await setDoc(\n doc(\n collection(this.db, `${this.prefix}user`),\n projectData.organizationId + \"-\" + this.originalUserId\n ),\n {\n ...(this.userMeta || {}),\n metaData: this.metaData,\n id: this.userId,\n originalUserId: this.originalUserId,\n type: \"customer\",\n organizationId: projectData?.organizationId || \"\",\n projectIds: [this.projectId],\n createAt: new Date(),\n updateAt: new Date(),\n createdBy: this.userId,\n updatedBy: this.userId,\n hidden: false,\n hiddenBy: \"\",\n } as User,\n { merge: true }\n );\n this.userData = user.data() as User;\n } else {\n this.userData = user.data() as User;\n\n if (!this.userData?.projectIds?.includes(this.projectId || \"\")) {\n await setDoc(\n doc(\n collection(this.db, `${this.prefix}user`),\n projectData.organizationId + \"-\" + this.originalUserId\n ),\n {\n projectIds: [\n ...(this.userData?.projectIds || []),\n this.projectId,\n ],\n updateAt: new Date(),\n updatedBy: this.userId,\n } as Partial<User>,\n { merge: true }\n );\n }\n\n if (this.userData?.organizationId !== projectData.organizationId) {\n await setDoc(\n doc(\n collection(this.db, `${this.prefix}user`),\n projectData.organizationId + \"-\" + this.originalUserId\n ),\n {\n organizationId: projectData.organizationId\n ? projectData.organizationId\n : this.userData?.organizationId,\n updateAt: new Date(),\n updatedBy: this.userId,\n } as Partial<User>,\n { merge: true }\n );\n }\n }\n\n this.startRrwebRecordingForStore();\n this.startConsoleRecording();\n // this.startTimelineRecording();\n return;\n } catch (error) {\n console.error(\"初期化中にエラーが発生しました:\", error);\n throw error;\n }\n }\n\n // コンソールログをキャプチャ\n startConsoleRecording() {\n try {\n const originalConsole = { ...console };\n const consoleMethods = [\n \"log\",\n \"info\",\n \"warn\",\n \"error\",\n \"debug\",\n \"trace\",\n \"assert\",\n \"clear\",\n \"context\",\n \"count\",\n \"countReset\",\n \"createTask\",\n \"debug\",\n \"dir\",\n \"dirxml\",\n \"error\",\n \"group\",\n \"groupCollapsed\",\n \"groupEnd\",\n \"memory\",\n \"profile\",\n \"profileEnd\",\n \"table\",\n \"time\",\n \"timeEnd\",\n \"timeLog\",\n \"timeStamp\",\n ] as const;\n\n consoleMethods.forEach((method) => {\n // 型安全なオーバーライド\n (console as any)[method] = (...args: any[]) => {\n // 元のメソッドを呼び出し\n (originalConsole as any)[method](...args);\n\n record.addCustomEvent(\"console\", { method: \"log\", args });\n };\n });\n } catch (error) {\n console.error(\"コンソール録画エラー:\", error);\n throw error;\n }\n }\n\n // タイムライン(ナビゲーションとパフォーマンス)をキャプチャ\n startTimelineRecording() {\n try {\n const userId = this.userId || \"unknown\";\n const sessionId = this.sessionId;\n const db = this.db;\n const prefix = this.prefix;\n // ナビゲーション履歴(popstateイベント)\n window.addEventListener(\"popstate\", (event) => {\n if (!db) {\n console.error(\"Firestoreが初期化されていません\");\n return;\n }\n\n record.addCustomEvent(\"navigation\", {\n url: window.location.href,\n state: event.state,\n });\n });\n\n // パフォーマンスエントリ\n if (window.performance) {\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n record.addCustomEvent(\"performance\", {\n name: entry.name,\n entryType: entry.entryType,\n startTime: entry.startTime,\n duration: entry.duration,\n });\n }\n });\n\n observer.observe({ entryTypes: [\"resource\", \"navigation\", \"paint\"] });\n }\n } catch (error) {\n console.error(\"タイムライン録画エラー:\", error);\n throw error;\n }\n }\n\n async startRrwebRecordingForStore() {\n try {\n if (this.stopFnForStore) return;\n\n const _sessionId = this.sessionId;\n const userId = this.userId || \"unknown\";\n const originalUserId = this.originalUserId || \"\";\n const db = this.db;\n const prefix = this.prefix;\n if (!db) {\n console.error(\"Firestoreが初期化されていません\");\n return;\n }\n // rrwebの録画を開始\n // このセッションの開始時間を記録\n const ActionRecordSessionRef = doc(\n collection(db, `${prefix}ActionRecordSession`),\n _sessionId\n );\n await setDoc(ActionRecordSessionRef, {\n id: _sessionId,\n startTime: new Date(),\n endTime: new Date(),\n userId,\n projectId: this.projectId || \"\",\n organizationId: this.projectData?.organizationId || \"\",\n createAt: new Date(),\n updateAt: new Date(),\n createdBy: userId,\n updatedBy: userId,\n });\n // rrwebの録画を開始 済み\n const _updateActionRecordSession = () => this.updateActionRecordSession();\n this.stopFnForStore = record({\n packFn: pack,\n collectFonts: true,\n inlineImages: false,\n sampling: {\n canvas: 500,\n mousemove: true,\n mousemoveCallback: 500,\n },\n emit(event) {\n const newDocRef = doc(collection(db, `${prefix}ActionRecord`));\n const record: ActionRecord = {\n id: newDocRef.id,\n timeStamp: new Date(),\n userId,\n originalUserId,\n type: \"rrweb\",\n sessionId: _sessionId,\n rrwebRecord: JSON.stringify(event),\n createAt: new Date(),\n updateAt: new Date(),\n hidden: false,\n createdBy: userId,\n updatedBy: userId,\n hiddenBy: \"\",\n };\n\n setDoc(newDocRef, record).catch((error) => {\n console.error(\"Error saving rrweb event: \", error);\n });\n _updateActionRecordSession();\n },\n recordCanvas: false,\n });\n } catch (error) {\n console.error(\"rrweb録画エラー:\", error);\n throw error;\n }\n }\n\n stopRrwebRecordingForStore() {\n try {\n if (this.stopFnForStore) {\n this.stopFnForStore();\n this.stopFnForStore = null;\n }\n } catch (error) {\n console.error(\"rrweb録画停止エラー:\", error);\n throw error;\n }\n }\n updateActionRecordSession() {\n try {\n if (!this.db || !this.sessionId || !this.userId) {\n console.error(\n \"Firestoreが初期化されていません、またはsessionId、userIdが設定されていません\"\n );\n return;\n }\n const ActionRecordSessionRef = doc(\n collection(this.db, `${this.prefix}ActionRecordSession`),\n this.sessionId\n );\n setDoc(\n ActionRecordSessionRef,\n {\n endTime: new Date(),\n updateAt: new Date(),\n updatedBy: this.userId,\n },\n { merge: true }\n ).catch((error) => {\n console.error(\"Error updating ActionRecordSession: \", error);\n });\n } catch (error) {\n console.error(\"ActionRecordSession更新エラー:\", error);\n throw error;\n }\n }\n}\n\nexport const ActionLens = new ActionLensRc();\n","import { Timestamp } from \"firebase/firestore\";\n// import { copy } from \"copy-anything\";\n/** Timestampの時はDateへの変更 */\nexport function convertTimestampToDate(\n timestamp: Timestamp | Date | null\n): Date | null {\n if (!timestamp) return null;\n /** string の場合(本来は来ないはずなのに) */\n if (typeof timestamp === \"string\") {\n const _string = new Date(timestamp);\n // console.log('convertTimestampToDate-string:', _string)\n if (isNaN(_string.getTime())) {\n return null;\n }\n return _string;\n }\n if (\"_seconds\" in timestamp && timestamp?._seconds) {\n return new Date(Number(timestamp._seconds) * 1000);\n }\n /** timestampの場合 */\n if (timestamp instanceof Timestamp) {\n const _timestamp = timestamp.toDate();\n // console.log('convertTimestampToDate-timestamp:', _timestamp)\n return _timestamp;\n }\n /** Dateの場合 */\n if (timestamp instanceof Date) {\n const _date = timestamp;\n // console.log('convertTimestampToDate-date:', _date)\n return _date;\n }\n // console.log('convertTimestampToDate-type:', typeof timestamp)\n // console.log('convertTimestampToDate-else:', timestamp)\n return timestamp;\n}\n\n/**\n * 時間を文字に変換\n * @param payload Date | Timestamp | string | null\n * @param format YYYY/MM/DD hh:mm:ss\n */\nexport const dateFormat = (\n payload:\n | Date\n | Timestamp\n | string\n | number\n | null\n | undefined\n | {\n _seconds: number;\n _nanoseconds: number;\n },\n format: string = \"YYYY/MM/DD\"\n) => {\n let date = payload;\n if (!date) return \"\";\n if (typeof date === \"string\") {\n if (date.length === 8 && /^\\d{8}$/.test(date)) {\n // 'YYYYMMDD'形式の対応\n const strYear = Number(date.slice(0, 4));\n const strMonth = Number(date.slice(4, 6)) - 1; // 月は0始まり\n const strDate = Number(date.slice(6, 8));\n date = new Date(strYear, strMonth, strDate);\n } else if (!/^(\\d{4}).([0-1]\\d).([0-3]\\d).*$/.test(date)) {\n return \"error\";\n } else {\n const strYear = Number(date.slice(0, 4));\n const strMonth = Number(date.slice(5, 7)) - 1;\n const strDate = Number(date.slice(8, 10));\n date = new Date(strYear, strMonth, strDate);\n }\n }\n if (typeof date === \"number\") {\n date = new Date(date);\n }\n if (isTimestamp(date)) {\n date = date.toDate();\n }\n if (date.hasOwnProperty(\"_seconds\") && date.hasOwnProperty(\"_nanoseconds\")) {\n date = new Date(\n // @ts-ignore\n date._seconds * 1000 + Math.floor(date._nanoseconds / 1000000)\n );\n }\n\n date = new Date(date as Date);\n\n format = format.replace(/YYYY/g, date.getFullYear().toString());\n format = format.replace(/MM/g, (\"0\" + (date.getMonth() + 1)).slice(-2));\n format = format.replace(/DD/g, (\"0\" + date.getDate()).slice(-2));\n format = format.replace(/hh/g, (\"0\" + date.getHours()).slice(-2));\n format = format.replace(/mm/g, (\"0\" + date.getMinutes()).slice(-2));\n format = format.replace(/ss/g, (\"0\" + date.getSeconds()).slice(-2));\n format = format.replace(/SSS/g, (\"00\" + date.getMilliseconds()).slice(-3));\n format = format.replace(\n /aaa/g,\n [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"][date.getDay()]\n );\n // if (format.includes('-')) {\n // console.log('「-」includes warning')\n // }\n\n return format;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst isTimestamp = (payload: any): payload is Timestamp => {\n return payload.toDate !== undefined;\n};\n"],"mappings":"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","names":["import_firestore","doc","import_rrweb","import_firestore","import_packer","uuidv4","db","record","import_firestore"]}
|
package/dist/index.mjs
CHANGED
|
@@ -312,16 +312,14 @@ import {
|
|
|
312
312
|
doc as doc2,
|
|
313
313
|
setDoc as setDoc2,
|
|
314
314
|
collection as collection2,
|
|
315
|
-
getDoc as getDoc2
|
|
316
|
-
getFirestore as getFirestore2
|
|
315
|
+
getDoc as getDoc2
|
|
317
316
|
} from "firebase/firestore";
|
|
318
317
|
import { pack } from "@rrweb/packer";
|
|
319
|
-
import { initializeApp as initializeApp2 } from "firebase/app";
|
|
320
318
|
var ActionLensRc = class {
|
|
321
319
|
sessionId = uuidv4();
|
|
322
320
|
stopFnForStore = null;
|
|
323
321
|
userId = null;
|
|
324
|
-
db =
|
|
322
|
+
db = db;
|
|
325
323
|
prefix = "";
|
|
326
324
|
userData = null;
|
|
327
325
|
projectId = null;
|
|
@@ -332,8 +330,6 @@ var ActionLensRc = class {
|
|
|
332
330
|
userMeta = {};
|
|
333
331
|
metaData = {};
|
|
334
332
|
constructor() {
|
|
335
|
-
const app2 = initializeApp2(firebaseConfig);
|
|
336
|
-
this.db = getFirestore2(app2);
|
|
337
333
|
}
|
|
338
334
|
async init(_userId, projectId, userMeta, metaData = {}, _db = null, prefix = "") {
|
|
339
335
|
try {
|
|
@@ -351,13 +347,14 @@ var ActionLensRc = class {
|
|
|
351
347
|
console.error("userId\u304CNULL\u3067\u3059");
|
|
352
348
|
throw new Error("userId\u304CNULL\u3067\u3059");
|
|
353
349
|
}
|
|
354
|
-
if (!this.db) {
|
|
355
|
-
|
|
356
|
-
console.error("Firestore\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093");
|
|
357
|
-
throw new Error("Firestore\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093");
|
|
358
|
-
}
|
|
350
|
+
if (!this.db && _db) {
|
|
351
|
+
console.error("Firestore\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093");
|
|
359
352
|
this.db = _db;
|
|
360
353
|
}
|
|
354
|
+
if (!this.db) {
|
|
355
|
+
console.error("Firestore\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093");
|
|
356
|
+
throw new Error("Firestore\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093");
|
|
357
|
+
}
|
|
361
358
|
if (!this.projectId) {
|
|
362
359
|
console.error("projectId\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093");
|
|
363
360
|
throw new Error("projectId\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093");
|
|
@@ -425,10 +422,7 @@ var ActionLensRc = class {
|
|
|
425
422
|
hiddenBy: ""
|
|
426
423
|
},
|
|
427
424
|
{ merge: true }
|
|
428
|
-
)
|
|
429
|
-
console.error("Error creating document: ", error);
|
|
430
|
-
throw new Error("\u30E6\u30FC\u30B6\u30FC\u306E\u4F5C\u6210\u306B\u5931\u6557\u3057\u307E\u3057\u305F");
|
|
431
|
-
});
|
|
425
|
+
);
|
|
432
426
|
this.userData = user.data();
|
|
433
427
|
} else {
|
|
434
428
|
this.userData = user.data();
|
|
@@ -447,10 +441,7 @@ var ActionLensRc = class {
|
|
|
447
441
|
updatedBy: this.userId
|
|
448
442
|
},
|
|
449
443
|
{ merge: true }
|
|
450
|
-
)
|
|
451
|
-
console.error("Error updating document: ", error);
|
|
452
|
-
throw new Error("\u30E6\u30FC\u30B6\u30FC\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8ID\u306E\u66F4\u65B0\u306B\u5931\u6557\u3057\u307E\u3057\u305F");
|
|
453
|
-
});
|
|
444
|
+
);
|
|
454
445
|
}
|
|
455
446
|
if (this.userData?.organizationId !== projectData.organizationId) {
|
|
456
447
|
await setDoc2(
|
|
@@ -464,10 +455,7 @@ var ActionLensRc = class {
|
|
|
464
455
|
updatedBy: this.userId
|
|
465
456
|
},
|
|
466
457
|
{ merge: true }
|
|
467
|
-
)
|
|
468
|
-
console.error("Error updating document: ", error);
|
|
469
|
-
throw new Error("\u30E6\u30FC\u30B6\u30FC\u306E\u7D44\u7E54ID\u306E\u66F4\u65B0\u306B\u5931\u6557\u3057\u307E\u3057\u305F");
|
|
470
|
-
});
|
|
458
|
+
);
|
|
471
459
|
}
|
|
472
460
|
}
|
|
473
461
|
this.startRrwebRecordingForStore();
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/player.ts","../src/utils/index.ts","../src/record.ts","../src/utils/date.ts"],"sourcesContent":["import {\n doc,\n collection,\n setDoc,\n addDoc,\n where,\n query,\n getDocs,\n orderBy,\n Firestore,\n getDoc,\n} from \"firebase/firestore\";\nimport {\n ActionRecord,\n ActionRecordSession,\n Project,\n User,\n} from \"@ism-tech/actionlens-type\";\nimport { Replayer } from \"rrweb\";\nimport { db } from \"./utils\"; // dbのインポートパスを適宜変更してください\n\nimport { unpack } from \"@rrweb/packer\";\nexport class ActionLensPlayer {\n replayer: Replayer | null = null;\n overlayContainer: HTMLElement | null = null;\n playerStatus: \"playing\" | \"paused\" | \"stopped\" = \"stopped\";\n targetDivId: string;\n db: Firestore;\n prefix: string;\n userId: string | null = null;\n projectId: string | null = null;\n currentTime: number = 0; // 現在の再生時間\n totalTime: number = 0; // 再生中の時間を保持するための変数\n user: User | null = null; // ユーザーデータを保持するための変数\n private setIntervalId: NodeJS.Timeout | null = null; // setTimeoutのIDを保持するための変数\n\n constructor(\n userId: string,\n targetDivId: string,\n\n _db: Firestore = db,\n prefix: string = \"\"\n ) {\n // 初期化処理が必要であればここに記述\n this.userId = userId;\n this.targetDivId = targetDivId;\n this.db = _db;\n this.prefix = prefix;\n this.initialize(userId);\n }\n\n async initialize(userId: string) {\n const user = await getDoc(doc(this.db, `${this.prefix}user`, userId));\n if (!user.exists()) {\n throw new Error(`User with ID ${userId} does not exist.`);\n }\n const userData = user.data() as User;\n this.user = userData; // ユーザーデータを保持\n this.projectId = userData.projectIds?.[0] || \"\"; // プロジェクトIDを取得\n if (!this.projectId) {\n throw new Error(`Project ID for user ${userId} does not exist.`);\n }\n }\n\n async replayRrwebSession(sessionId: string): Promise<void> {\n try {\n // 1. Firestoreからデータを取得\n\n const q = query(\n collection(this.db, `${this.prefix}ActionRecord`),\n where(\"sessionId\", \"==\", sessionId),\n orderBy(\"timeStamp\", \"asc\")\n );\n\n const querySnapshot = await getDocs(q);\n const events = querySnapshot.docs.map((doc) => {\n const data = doc.data() as ActionRecord;\n return JSON.parse(data.rrwebRecord);\n });\n console.log(\"events\", events);\n if (events.length === 0) {\n console.warn(\n `セッションID ${sessionId} のデータが見つかりませんでした。`\n );\n return;\n }\n\n const targetDiv = document.getElementById(this.targetDivId);\n if (!targetDiv) {\n throw new Error(\n `ID ${this.targetDivId} のdiv要素が見つかりませんでした。`\n );\n }\n\n // クラスを追加\n targetDiv.classList.add(\"replayer-container\");\n\n // 3. Replayerを初期化\n this.replayer = new Replayer(events, {\n unpackFn: unpack,\n root: targetDiv,\n UNSAFE_replayCanvas: false,\n props: {\n autoPlay: true,\n speed: 1,\n mouseTail: true,\n },\n className: \"_replayer-canvas\",\n } as any);\n\n // 4. カスタムイベントのリスナーを追加\n this.replayer.on(\"custom-event\", (event: any) => {\n console.log(\"Custom event:\", event);\n this.handleCustomEvent(event);\n });\n this.replayer.on(\"finish\", () => {\n console.log(\"Replay finished\");\n this.replayer?.pause(0);\n this.playerStatus = \"stopped\";\n this.currentTime = this.replayer?.getCurrentTime() || 0;\n this.endTimeoutTimeline();\n });\n const { totalTime } = this.replayer.getMetaData();\n this.totalTime = totalTime;\n\n // iframeのスタイルを調整\n const iframes = targetDiv.querySelectorAll(\"iframe\");\n iframes.forEach((iframe) => {\n (iframe as HTMLElement).style.transform = \"translate(-50%, -50%)\";\n (iframe as HTMLElement).style.position = \"absolute\";\n (iframe as HTMLElement).style.left = \"50%\";\n (iframe as HTMLElement).style.top = \"50%\";\n });\n // replayer-mouse-tailにposition: absolute; を追加\n const mouseTailElements = document.querySelectorAll(\n \".replayer-mouse-tail\"\n );\n mouseTailElements.forEach((element) => {\n (element as HTMLElement).style.position = \"absolute\";\n (element as HTMLElement).style.left = \"50%\";\n (element as HTMLElement).style.top = \"50%\";\n (element as HTMLElement).style.transform = \"translate(-50%, -50%)\";\n (element as HTMLElement).style.zIndex = \"1000\"; // z-indexを追加\n });\n\n // 5. 再生開始\n\n this.replayer.play();\n this.playerStatus = \"playing\";\n console.log(`セッションID ${sessionId} の再生を開始しました。`);\n this.setTimeoutTimeline();\n } catch (error) {\n console.error(\"再生エラー:\", error);\n throw error;\n }\n }\n\n // カスタムイベントを処理\n private handleCustomEvent(event: any) {\n if (!event.data || !event.data.type) return;\n\n const { timestamp } = event;\n const timeString = new Date(timestamp).toISOString();\n\n switch (event.data.type) {\n case \"console\":\n const { method, args } = event.data;\n this.displayEvent(\n `[${timeString}] Console ${method}: ${args.join(\", \")}`,\n \"console\"\n );\n\n break;\n case \"navigation\":\n const { url } = event.data;\n this.displayEvent(`[${timeString}] Navigation to ${url}`, \"navigation\");\n break;\n case \"performance\":\n const { name, entryType, duration } = event.data;\n this.displayEvent(\n `[${timeString}] Performance ${entryType}: ${name} (${duration}ms)`,\n \"performance\"\n );\n break;\n default:\n console.warn(\"不明なカスタムイベント:\", event.data.type);\n }\n }\n\n // イベントをオーバーレイに表示\n private displayEvent(message: string, eventType: string) {\n if (!this.overlayContainer) return;\n\n const eventDiv = document.createElement(\"div\");\n eventDiv.style.padding = \"5px\";\n eventDiv.style.borderBottom = \"1px solid rgba(255, 255, 255, 0.2)\";\n\n // イベントタイプに応じた色\n const colors: { [key: string]: string } = {\n console: \"#00cc00\",\n navigation: \"#3399ff\",\n performance: \"#ff9900\",\n };\n eventDiv.style.color = colors[eventType] || \"white\";\n\n eventDiv.innerText = message;\n this.overlayContainer.appendChild(eventDiv);\n\n // 最新のイベントが表示されるようスクロール\n this.overlayContainer.scrollTop = this.overlayContainer.scrollHeight;\n\n // 5秒後にフェードアウト\n setTimeout(() => {\n eventDiv.style.transition = \"opacity 1s\";\n eventDiv.style.opacity = \"0\";\n setTimeout(() => eventDiv.remove(), 1000);\n }, 5000);\n }\n setReplayTime(time: number) {\n if (this.replayer) {\n this.replayer.pause(time);\n this.currentTime = time;\n this.playerStatus = \"stopped\";\n }\n }\n\n setTimeoutTimeline() {\n this.setIntervalId = setInterval(() => {\n this.currentTime = this.replayer?.getCurrentTime() || 0;\n }, 10);\n }\n endTimeoutTimeline() {\n if (this.setIntervalId) {\n clearTimeout(this.setIntervalId);\n this.setIntervalId = null;\n }\n }\n\n // 再生を停止\n stopReplay() {\n this.endTimeoutTimeline();\n if (this.replayer) {\n this.replayer.pause();\n this.playerStatus = \"stopped\";\n this.currentTime = this.replayer?.getCurrentTime() || 0;\n }\n }\n restartReplay() {\n this.setTimeoutTimeline();\n if (this.replayer) {\n const offset = this.replayer.getCurrentTime();\n console.log(\"offset\", offset);\n this.replayer.play(offset);\n this.playerStatus = \"playing\";\n this.currentTime = this.replayer?.getCurrentTime() || 0;\n }\n }\n getCurrentTime() {\n if (this.replayer) {\n return this.replayer.getCurrentTime();\n }\n return 0;\n }\n\n resetReplayer() {\n this.endTimeoutTimeline();\n this.playerStatus = \"stopped\";\n this.currentTime = 0;\n\n if (this.replayer) {\n this.replayer.pause();\n this.replayer.destroy();\n this.replayer = null;\n }\n if (this.overlayContainer) {\n this.overlayContainer.remove();\n this.overlayContainer = null;\n }\n }\n async fetchProjectList() {\n try {\n if (!this.userId) {\n console.warn(\"User ID is not initialized.\");\n return [];\n }\n if (!this.user) {\n this.user = (\n await getDoc(doc(this.db, `${this.prefix}user`, this.userId))\n ).data() as User;\n if (!this.user) {\n console.warn(`User with ID ${this.userId} does not exist.`);\n\n return [];\n }\n }\n const projectIds = this.user.projectIds || [];\n if (projectIds.length === 0) {\n console.warn(\"No project IDs found for the user.\");\n return [];\n }\n const promise = projectIds.flatMap(async (projectId) => {\n const projectDoc = await getDoc(\n doc(this.db, `${this.prefix}project`, projectId)\n );\n if (!projectDoc.exists()) {\n console.warn(`Project with ID ${projectId} does not exist.`);\n return null;\n }\n return projectDoc.data() as Project;\n });\n const projectPromises: (Project | null)[] = await Promise.all(promise);\n return projectPromises.filter((project) => project !== null);\n } catch (e) {\n console.error(\"プロジェクトリストの取得エラー:\", e);\n throw e;\n }\n }\n async fetchSessionList(projectId: string) {\n try {\n const q = query(\n collection(this.db, `${this.prefix}ActionRecordSession`),\n where(\"projectId\", \"==\", projectId),\n orderBy(\"startTime\", \"desc\")\n );\n const usersStore: { [userId: string]: User } = {};\n\n const querySnapshot = await getDocs(q);\n const promise = querySnapshot.docs.map(async (_doc) => {\n const data = _doc.data() as ActionRecordSession;\n if (!usersStore[data.userId]) {\n usersStore[data.userId] = (\n await getDoc(doc(this.db, `${this.prefix}user`, data.userId))\n ).data() as User;\n }\n\n return { ...data, userData: usersStore[data.userId] };\n });\n const sessions: (ActionRecordSession & { userData: User })[] =\n await Promise.all(promise);\n console.log(sessions);\n\n return sessions;\n } catch (error) {\n console.error(\"セッションリストの取得エラー:\", error);\n throw error;\n }\n }\n}\n","import { initializeApp } from \"firebase/app\";\nimport { getFirestore } from \"firebase/firestore\";\n\nexport const firebaseConfig = {\n apiKey: \"AIzaSyCxreoOZivnjFIh2mJ6WXjS3ieQ11wsDW8\",\n authDomain: \"actionlens-b14ae.firebaseapp.com\",\n projectId: \"actionlens-b14ae\",\n storageBucket: \"actionlens-b14ae.firebasestorage.app\",\n messagingSenderId: \"36086339210\",\n appId: \"1:36086339210:web:36e16e8778aadd8c58ff73\",\n};\n\n// Initialize Firebase\nconst app = initializeApp(firebaseConfig);\n\nexport const db = getFirestore(app);\n","import { v4 as uuidv4 } from \"uuid\";\nimport { record, Replayer } from \"rrweb\";\nimport {\n Firestore,\n doc,\n setDoc,\n collection,\n getDoc,\n getFirestore,\n} from \"firebase/firestore\";\nimport { ActionRecord, Project, User } from \"@ism-tech/actionlens-type\";\nimport { firebaseConfig } from \"./utils/index\";\nimport { pack } from \"@rrweb/packer\";\nimport { initializeApp } from \"firebase/app\";\nexport class ActionLensRc {\n sessionId: string = uuidv4();\n stopFnForStore: any = null;\n userId: string | null = null;\n db: Firestore | null = null;\n prefix: string = \"\";\n userData: User | null = null;\n projectId: string | null = null;\n projectData: Project | null = null;\n organizationId: string | null = null;\n originalUserId: string | null = null; // 元のユーザーID(外部システムのIDなど)\n userMeta: { name?: string; email?: string } = {};\n metaData: Record<string, any> = {};\n constructor() {\n const app = initializeApp(firebaseConfig);\n\n this.db = getFirestore(app);\n }\n\n async init(\n _userId: string | null,\n projectId: string | null,\n userMeta: { name: string; email: string },\n metaData: Record<string, any> = {},\n _db: Firestore | null = null,\n prefix: string = \"\"\n ) {\n try {\n this.originalUserId = _userId; // 元のユーザーIDを保存\n console.log(\"ActionLensRc開始\");\n if (!projectId) {\n console.error(\"projectIdがNULLです\");\n throw new Error(\"projectIdがNULLです\");\n }\n this.projectId = projectId;\n\n this.prefix = prefix;\n this.userMeta = userMeta;\n this.metaData = metaData;\n\n if (!_userId) {\n console.error(\"userIdがNULLです\");\n throw new Error(\"userIdがNULLです\");\n }\n\n if (!this.db) {\n if (!_db) {\n console.error(\"Firestoreが初期化されていません\");\n throw new Error(\"Firestoreが初期化されていません\");\n }\n this.db = _db;\n }\n\n if (!this.projectId) {\n console.error(\"projectIdが設定されていません\");\n throw new Error(\"projectIdが設定されていません\");\n }\n const _doc = await getDoc(\n doc(collection(this.db, `${this.prefix}project`), this.projectId)\n );\n this.projectData = _doc.data() as Project;\n const projectData = this.projectData;\n this.organizationId = projectData?.organizationId || \"\";\n\n if (!this.projectData) {\n await setDoc(\n doc(collection(this.db, `${this.prefix}project`), this.projectId),\n {\n id: this.projectId,\n name: this.projectId,\n organizationId: \"\",\n isActivate: false, // デフォルトでアクティブに設定\n createAt: new Date(),\n updateAt: new Date(),\n createdBy: this.originalUserId,\n updatedBy: this.originalUserId,\n } as Project,\n { merge: true }\n );\n throw new Error(\"プロジェクトが存在しません\");\n }\n if (!this.projectData?.isActivate) {\n console.warn(\"プロジェクトは非アクティブです。録画を開始できません。\");\n throw new Error(\n \"プロジェクトは非アクティブです。録画を開始できません。\"\n );\n }\n this.userId = projectData.organizationId + \"-\" + this.originalUserId;\n this.prefix = this.prefix;\n this.projectId = this.projectId;\n const user = await getDoc(\n doc(collection(this.db, `${this.prefix}user`), this.userId)\n );\n\n if (!this.db) {\n console.error(\"Firestoreが初期化されていません\");\n throw new Error(\"Firestoreが初期化されていません\");\n }\n\n const userData = user.data() as User;\n\n if (!userData.id || !user.exists()) {\n await setDoc(\n doc(\n collection(this.db, `${this.prefix}user`),\n projectData.organizationId + \"-\" + this.originalUserId\n ),\n {\n ...(this.userMeta || {}),\n metaData: this.metaData,\n id: this.userId,\n originalUserId: this.originalUserId,\n type: \"customer\",\n organizationId: projectData?.organizationId || \"\",\n projectIds: [this.projectId],\n createAt: new Date(),\n updateAt: new Date(),\n createdBy: this.userId,\n updatedBy: this.userId,\n hidden: false,\n hiddenBy: \"\",\n } as User,\n { merge: true }\n ).catch((error) => {\n console.error(\"Error creating document: \", error);\n\n throw new Error(\"ユーザーの作成に失敗しました\");\n });\n this.userData = user.data() as User;\n } else {\n this.userData = user.data() as User;\n\n if (!this.userData?.projectIds?.includes(this.projectId || \"\")) {\n await setDoc(\n doc(\n collection(this.db, `${this.prefix}user`),\n projectData.organizationId + \"-\" + this.originalUserId\n ),\n {\n projectIds: [\n ...(this.userData?.projectIds || []),\n this.projectId,\n ],\n updateAt: new Date(),\n updatedBy: this.userId,\n } as Partial<User>,\n { merge: true }\n ).catch((error) => {\n console.error(\"Error updating document: \", error);\n throw new Error(\"ユーザーのプロジェクトIDの更新に失敗しました\");\n });\n }\n\n if (this.userData?.organizationId !== projectData.organizationId) {\n await setDoc(\n doc(\n collection(this.db, `${this.prefix}user`),\n projectData.organizationId + \"-\" + this.originalUserId\n ),\n {\n organizationId: projectData.organizationId\n ? projectData.organizationId\n : this.userData?.organizationId,\n updateAt: new Date(),\n updatedBy: this.userId,\n } as Partial<User>,\n { merge: true }\n ).catch((error) => {\n console.error(\"Error updating document: \", error);\n throw new Error(\"ユーザーの組織IDの更新に失敗しました\");\n });\n }\n }\n\n this.startRrwebRecordingForStore();\n this.startConsoleRecording();\n // this.startTimelineRecording();\n return;\n } catch (error) {\n console.error(\"初期化中にエラーが発生しました:\", error);\n throw error;\n }\n }\n\n // コンソールログをキャプチャ\n startConsoleRecording() {\n try {\n const originalConsole = { ...console };\n const consoleMethods = [\n \"log\",\n \"info\",\n \"warn\",\n \"error\",\n \"debug\",\n \"trace\",\n \"assert\",\n \"clear\",\n \"context\",\n \"count\",\n \"countReset\",\n \"createTask\",\n \"debug\",\n \"dir\",\n \"dirxml\",\n \"error\",\n \"group\",\n \"groupCollapsed\",\n \"groupEnd\",\n \"memory\",\n \"profile\",\n \"profileEnd\",\n \"table\",\n \"time\",\n \"timeEnd\",\n \"timeLog\",\n \"timeStamp\",\n ] as const;\n\n consoleMethods.forEach((method) => {\n // 型安全なオーバーライド\n (console as any)[method] = (...args: any[]) => {\n // 元のメソッドを呼び出し\n (originalConsole as any)[method](...args);\n\n record.addCustomEvent(\"console\", { method: \"log\", args });\n };\n });\n } catch (error) {\n console.error(\"コンソール録画エラー:\", error);\n throw error;\n }\n }\n\n // タイムライン(ナビゲーションとパフォーマンス)をキャプチャ\n startTimelineRecording() {\n try {\n const userId = this.userId || \"unknown\";\n const sessionId = this.sessionId;\n const db = this.db;\n const prefix = this.prefix;\n // ナビゲーション履歴(popstateイベント)\n window.addEventListener(\"popstate\", (event) => {\n if (!db) {\n console.error(\"Firestoreが初期化されていません\");\n return;\n }\n\n record.addCustomEvent(\"navigation\", {\n url: window.location.href,\n state: event.state,\n });\n });\n\n // パフォーマンスエントリ\n if (window.performance) {\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n record.addCustomEvent(\"performance\", {\n name: entry.name,\n entryType: entry.entryType,\n startTime: entry.startTime,\n duration: entry.duration,\n });\n }\n });\n\n observer.observe({ entryTypes: [\"resource\", \"navigation\", \"paint\"] });\n }\n } catch (error) {\n console.error(\"タイムライン録画エラー:\", error);\n throw error;\n }\n }\n\n async startRrwebRecordingForStore() {\n try {\n if (this.stopFnForStore) return;\n\n const _sessionId = this.sessionId;\n const userId = this.userId || \"unknown\";\n const originalUserId = this.originalUserId || \"\";\n const db = this.db;\n const prefix = this.prefix;\n if (!db) {\n console.error(\"Firestoreが初期化されていません\");\n return;\n }\n // rrwebの録画を開始\n // このセッションの開始時間を記録\n const ActionRecordSessionRef = doc(\n collection(db, `${prefix}ActionRecordSession`),\n _sessionId\n );\n await setDoc(ActionRecordSessionRef, {\n id: _sessionId,\n startTime: new Date(),\n endTime: new Date(),\n userId,\n projectId: this.projectId || \"\",\n organizationId: this.projectData?.organizationId || \"\",\n createAt: new Date(),\n updateAt: new Date(),\n createdBy: userId,\n updatedBy: userId,\n });\n // rrwebの録画を開始 済み\n const _updateActionRecordSession = () => this.updateActionRecordSession();\n this.stopFnForStore = record({\n packFn: pack,\n collectFonts: true,\n inlineImages: false,\n sampling: {\n canvas: 500,\n mousemove: true,\n mousemoveCallback: 500,\n },\n emit(event) {\n const newDocRef = doc(collection(db, `${prefix}ActionRecord`));\n const record: ActionRecord = {\n id: newDocRef.id,\n timeStamp: new Date(),\n userId,\n originalUserId,\n type: \"rrweb\",\n sessionId: _sessionId,\n rrwebRecord: JSON.stringify(event),\n createAt: new Date(),\n updateAt: new Date(),\n hidden: false,\n createdBy: userId,\n updatedBy: userId,\n hiddenBy: \"\",\n };\n\n setDoc(newDocRef, record).catch((error) => {\n console.error(\"Error saving rrweb event: \", error);\n });\n _updateActionRecordSession();\n },\n recordCanvas: false,\n });\n } catch (error) {\n console.error(\"rrweb録画エラー:\", error);\n throw error;\n }\n }\n\n stopRrwebRecordingForStore() {\n try {\n if (this.stopFnForStore) {\n this.stopFnForStore();\n this.stopFnForStore = null;\n }\n } catch (error) {\n console.error(\"rrweb録画停止エラー:\", error);\n throw error;\n }\n }\n updateActionRecordSession() {\n try {\n if (!this.db || !this.sessionId || !this.userId) {\n console.error(\n \"Firestoreが初期化されていません、またはsessionId、userIdが設定されていません\"\n );\n return;\n }\n const ActionRecordSessionRef = doc(\n collection(this.db, `${this.prefix}ActionRecordSession`),\n this.sessionId\n );\n setDoc(\n ActionRecordSessionRef,\n {\n endTime: new Date(),\n updateAt: new Date(),\n updatedBy: this.userId,\n },\n { merge: true }\n ).catch((error) => {\n console.error(\"Error updating ActionRecordSession: \", error);\n });\n } catch (error) {\n console.error(\"ActionRecordSession更新エラー:\", error);\n throw error;\n }\n }\n}\n\nexport const ActionLens = new ActionLensRc();\n","import { Timestamp } from \"firebase/firestore\";\n// import { copy } from \"copy-anything\";\n/** Timestampの時はDateへの変更 */\nexport function convertTimestampToDate(\n timestamp: Timestamp | Date | null\n): Date | null {\n if (!timestamp) return null;\n /** string の場合(本来は来ないはずなのに) */\n if (typeof timestamp === \"string\") {\n const _string = new Date(timestamp);\n // console.log('convertTimestampToDate-string:', _string)\n if (isNaN(_string.getTime())) {\n return null;\n }\n return _string;\n }\n if (\"_seconds\" in timestamp && timestamp?._seconds) {\n return new Date(Number(timestamp._seconds) * 1000);\n }\n /** timestampの場合 */\n if (timestamp instanceof Timestamp) {\n const _timestamp = timestamp.toDate();\n // console.log('convertTimestampToDate-timestamp:', _timestamp)\n return _timestamp;\n }\n /** Dateの場合 */\n if (timestamp instanceof Date) {\n const _date = timestamp;\n // console.log('convertTimestampToDate-date:', _date)\n return _date;\n }\n // console.log('convertTimestampToDate-type:', typeof timestamp)\n // console.log('convertTimestampToDate-else:', timestamp)\n return timestamp;\n}\n\n/**\n * 時間を文字に変換\n * @param payload Date | Timestamp | string | null\n * @param format YYYY/MM/DD hh:mm:ss\n */\nexport const dateFormat = (\n payload:\n | Date\n | Timestamp\n | string\n | number\n | null\n | undefined\n | {\n _seconds: number;\n _nanoseconds: number;\n },\n format: string = \"YYYY/MM/DD\"\n) => {\n let date = payload;\n if (!date) return \"\";\n if (typeof date === \"string\") {\n if (date.length === 8 && /^\\d{8}$/.test(date)) {\n // 'YYYYMMDD'形式の対応\n const strYear = Number(date.slice(0, 4));\n const strMonth = Number(date.slice(4, 6)) - 1; // 月は0始まり\n const strDate = Number(date.slice(6, 8));\n date = new Date(strYear, strMonth, strDate);\n } else if (!/^(\\d{4}).([0-1]\\d).([0-3]\\d).*$/.test(date)) {\n return \"error\";\n } else {\n const strYear = Number(date.slice(0, 4));\n const strMonth = Number(date.slice(5, 7)) - 1;\n const strDate = Number(date.slice(8, 10));\n date = new Date(strYear, strMonth, strDate);\n }\n }\n if (typeof date === \"number\") {\n date = new Date(date);\n }\n if (isTimestamp(date)) {\n date = date.toDate();\n }\n if (date.hasOwnProperty(\"_seconds\") && date.hasOwnProperty(\"_nanoseconds\")) {\n date = new Date(\n // @ts-ignore\n date._seconds * 1000 + Math.floor(date._nanoseconds / 1000000)\n );\n }\n\n date = new Date(date as Date);\n\n format = format.replace(/YYYY/g, date.getFullYear().toString());\n format = format.replace(/MM/g, (\"0\" + (date.getMonth() + 1)).slice(-2));\n format = format.replace(/DD/g, (\"0\" + date.getDate()).slice(-2));\n format = format.replace(/hh/g, (\"0\" + date.getHours()).slice(-2));\n format = format.replace(/mm/g, (\"0\" + date.getMinutes()).slice(-2));\n format = format.replace(/ss/g, (\"0\" + date.getSeconds()).slice(-2));\n format = format.replace(/SSS/g, (\"00\" + date.getMilliseconds()).slice(-3));\n format = format.replace(\n /aaa/g,\n [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"][date.getDay()]\n );\n // if (format.includes('-')) {\n // console.log('「-」includes warning')\n // }\n\n return format;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst isTimestamp = (payload: any): payload is Timestamp => {\n return payload.toDate !== undefined;\n};\n"],"mappings":"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","names":["doc","doc","setDoc","collection","getDoc","getFirestore","initializeApp","app","getFirestore","getDoc","doc","collection","setDoc","db","record"]}
|
|
1
|
+
{"version":3,"sources":["../src/player.ts","../src/utils/index.ts","../src/record.ts","../src/utils/date.ts"],"sourcesContent":["import {\n doc,\n collection,\n setDoc,\n addDoc,\n where,\n query,\n getDocs,\n orderBy,\n Firestore,\n getDoc,\n} from \"firebase/firestore\";\nimport {\n ActionRecord,\n ActionRecordSession,\n Project,\n User,\n} from \"@ism-tech/actionlens-type\";\nimport { Replayer } from \"rrweb\";\nimport { db } from \"./utils\"; // dbのインポートパスを適宜変更してください\n\nimport { unpack } from \"@rrweb/packer\";\nexport class ActionLensPlayer {\n replayer: Replayer | null = null;\n overlayContainer: HTMLElement | null = null;\n playerStatus: \"playing\" | \"paused\" | \"stopped\" = \"stopped\";\n targetDivId: string;\n db: Firestore;\n prefix: string;\n userId: string | null = null;\n projectId: string | null = null;\n currentTime: number = 0; // 現在の再生時間\n totalTime: number = 0; // 再生中の時間を保持するための変数\n user: User | null = null; // ユーザーデータを保持するための変数\n private setIntervalId: NodeJS.Timeout | null = null; // setTimeoutのIDを保持するための変数\n\n constructor(\n userId: string,\n targetDivId: string,\n\n _db: Firestore = db,\n prefix: string = \"\"\n ) {\n // 初期化処理が必要であればここに記述\n this.userId = userId;\n this.targetDivId = targetDivId;\n this.db = _db;\n this.prefix = prefix;\n this.initialize(userId);\n }\n\n async initialize(userId: string) {\n const user = await getDoc(doc(this.db, `${this.prefix}user`, userId));\n if (!user.exists()) {\n throw new Error(`User with ID ${userId} does not exist.`);\n }\n const userData = user.data() as User;\n this.user = userData; // ユーザーデータを保持\n this.projectId = userData.projectIds?.[0] || \"\"; // プロジェクトIDを取得\n if (!this.projectId) {\n throw new Error(`Project ID for user ${userId} does not exist.`);\n }\n }\n\n async replayRrwebSession(sessionId: string): Promise<void> {\n try {\n // 1. Firestoreからデータを取得\n\n const q = query(\n collection(this.db, `${this.prefix}ActionRecord`),\n where(\"sessionId\", \"==\", sessionId),\n orderBy(\"timeStamp\", \"asc\")\n );\n\n const querySnapshot = await getDocs(q);\n const events = querySnapshot.docs.map((doc) => {\n const data = doc.data() as ActionRecord;\n return JSON.parse(data.rrwebRecord);\n });\n console.log(\"events\", events);\n if (events.length === 0) {\n console.warn(\n `セッションID ${sessionId} のデータが見つかりませんでした。`\n );\n return;\n }\n\n const targetDiv = document.getElementById(this.targetDivId);\n if (!targetDiv) {\n throw new Error(\n `ID ${this.targetDivId} のdiv要素が見つかりませんでした。`\n );\n }\n\n // クラスを追加\n targetDiv.classList.add(\"replayer-container\");\n\n // 3. Replayerを初期化\n this.replayer = new Replayer(events, {\n unpackFn: unpack,\n root: targetDiv,\n UNSAFE_replayCanvas: false,\n props: {\n autoPlay: true,\n speed: 1,\n mouseTail: true,\n },\n className: \"_replayer-canvas\",\n } as any);\n\n // 4. カスタムイベントのリスナーを追加\n this.replayer.on(\"custom-event\", (event: any) => {\n console.log(\"Custom event:\", event);\n this.handleCustomEvent(event);\n });\n this.replayer.on(\"finish\", () => {\n console.log(\"Replay finished\");\n this.replayer?.pause(0);\n this.playerStatus = \"stopped\";\n this.currentTime = this.replayer?.getCurrentTime() || 0;\n this.endTimeoutTimeline();\n });\n const { totalTime } = this.replayer.getMetaData();\n this.totalTime = totalTime;\n\n // iframeのスタイルを調整\n const iframes = targetDiv.querySelectorAll(\"iframe\");\n iframes.forEach((iframe) => {\n (iframe as HTMLElement).style.transform = \"translate(-50%, -50%)\";\n (iframe as HTMLElement).style.position = \"absolute\";\n (iframe as HTMLElement).style.left = \"50%\";\n (iframe as HTMLElement).style.top = \"50%\";\n });\n // replayer-mouse-tailにposition: absolute; を追加\n const mouseTailElements = document.querySelectorAll(\n \".replayer-mouse-tail\"\n );\n mouseTailElements.forEach((element) => {\n (element as HTMLElement).style.position = \"absolute\";\n (element as HTMLElement).style.left = \"50%\";\n (element as HTMLElement).style.top = \"50%\";\n (element as HTMLElement).style.transform = \"translate(-50%, -50%)\";\n (element as HTMLElement).style.zIndex = \"1000\"; // z-indexを追加\n });\n\n // 5. 再生開始\n\n this.replayer.play();\n this.playerStatus = \"playing\";\n console.log(`セッションID ${sessionId} の再生を開始しました。`);\n this.setTimeoutTimeline();\n } catch (error) {\n console.error(\"再生エラー:\", error);\n throw error;\n }\n }\n\n // カスタムイベントを処理\n private handleCustomEvent(event: any) {\n if (!event.data || !event.data.type) return;\n\n const { timestamp } = event;\n const timeString = new Date(timestamp).toISOString();\n\n switch (event.data.type) {\n case \"console\":\n const { method, args } = event.data;\n this.displayEvent(\n `[${timeString}] Console ${method}: ${args.join(\", \")}`,\n \"console\"\n );\n\n break;\n case \"navigation\":\n const { url } = event.data;\n this.displayEvent(`[${timeString}] Navigation to ${url}`, \"navigation\");\n break;\n case \"performance\":\n const { name, entryType, duration } = event.data;\n this.displayEvent(\n `[${timeString}] Performance ${entryType}: ${name} (${duration}ms)`,\n \"performance\"\n );\n break;\n default:\n console.warn(\"不明なカスタムイベント:\", event.data.type);\n }\n }\n\n // イベントをオーバーレイに表示\n private displayEvent(message: string, eventType: string) {\n if (!this.overlayContainer) return;\n\n const eventDiv = document.createElement(\"div\");\n eventDiv.style.padding = \"5px\";\n eventDiv.style.borderBottom = \"1px solid rgba(255, 255, 255, 0.2)\";\n\n // イベントタイプに応じた色\n const colors: { [key: string]: string } = {\n console: \"#00cc00\",\n navigation: \"#3399ff\",\n performance: \"#ff9900\",\n };\n eventDiv.style.color = colors[eventType] || \"white\";\n\n eventDiv.innerText = message;\n this.overlayContainer.appendChild(eventDiv);\n\n // 最新のイベントが表示されるようスクロール\n this.overlayContainer.scrollTop = this.overlayContainer.scrollHeight;\n\n // 5秒後にフェードアウト\n setTimeout(() => {\n eventDiv.style.transition = \"opacity 1s\";\n eventDiv.style.opacity = \"0\";\n setTimeout(() => eventDiv.remove(), 1000);\n }, 5000);\n }\n setReplayTime(time: number) {\n if (this.replayer) {\n this.replayer.pause(time);\n this.currentTime = time;\n this.playerStatus = \"stopped\";\n }\n }\n\n setTimeoutTimeline() {\n this.setIntervalId = setInterval(() => {\n this.currentTime = this.replayer?.getCurrentTime() || 0;\n }, 10);\n }\n endTimeoutTimeline() {\n if (this.setIntervalId) {\n clearTimeout(this.setIntervalId);\n this.setIntervalId = null;\n }\n }\n\n // 再生を停止\n stopReplay() {\n this.endTimeoutTimeline();\n if (this.replayer) {\n this.replayer.pause();\n this.playerStatus = \"stopped\";\n this.currentTime = this.replayer?.getCurrentTime() || 0;\n }\n }\n restartReplay() {\n this.setTimeoutTimeline();\n if (this.replayer) {\n const offset = this.replayer.getCurrentTime();\n console.log(\"offset\", offset);\n this.replayer.play(offset);\n this.playerStatus = \"playing\";\n this.currentTime = this.replayer?.getCurrentTime() || 0;\n }\n }\n getCurrentTime() {\n if (this.replayer) {\n return this.replayer.getCurrentTime();\n }\n return 0;\n }\n\n resetReplayer() {\n this.endTimeoutTimeline();\n this.playerStatus = \"stopped\";\n this.currentTime = 0;\n\n if (this.replayer) {\n this.replayer.pause();\n this.replayer.destroy();\n this.replayer = null;\n }\n if (this.overlayContainer) {\n this.overlayContainer.remove();\n this.overlayContainer = null;\n }\n }\n async fetchProjectList() {\n try {\n if (!this.userId) {\n console.warn(\"User ID is not initialized.\");\n return [];\n }\n if (!this.user) {\n this.user = (\n await getDoc(doc(this.db, `${this.prefix}user`, this.userId))\n ).data() as User;\n if (!this.user) {\n console.warn(`User with ID ${this.userId} does not exist.`);\n\n return [];\n }\n }\n const projectIds = this.user.projectIds || [];\n if (projectIds.length === 0) {\n console.warn(\"No project IDs found for the user.\");\n return [];\n }\n const promise = projectIds.flatMap(async (projectId) => {\n const projectDoc = await getDoc(\n doc(this.db, `${this.prefix}project`, projectId)\n );\n if (!projectDoc.exists()) {\n console.warn(`Project with ID ${projectId} does not exist.`);\n return null;\n }\n return projectDoc.data() as Project;\n });\n const projectPromises: (Project | null)[] = await Promise.all(promise);\n return projectPromises.filter((project) => project !== null);\n } catch (e) {\n console.error(\"プロジェクトリストの取得エラー:\", e);\n throw e;\n }\n }\n async fetchSessionList(projectId: string) {\n try {\n const q = query(\n collection(this.db, `${this.prefix}ActionRecordSession`),\n where(\"projectId\", \"==\", projectId),\n orderBy(\"startTime\", \"desc\")\n );\n const usersStore: { [userId: string]: User } = {};\n\n const querySnapshot = await getDocs(q);\n const promise = querySnapshot.docs.map(async (_doc) => {\n const data = _doc.data() as ActionRecordSession;\n if (!usersStore[data.userId]) {\n usersStore[data.userId] = (\n await getDoc(doc(this.db, `${this.prefix}user`, data.userId))\n ).data() as User;\n }\n\n return { ...data, userData: usersStore[data.userId] };\n });\n const sessions: (ActionRecordSession & { userData: User })[] =\n await Promise.all(promise);\n console.log(sessions);\n\n return sessions;\n } catch (error) {\n console.error(\"セッションリストの取得エラー:\", error);\n throw error;\n }\n }\n}\n","import { initializeApp } from \"firebase/app\";\nimport { getFirestore } from \"firebase/firestore\";\n\nexport const firebaseConfig = {\n apiKey: \"AIzaSyCxreoOZivnjFIh2mJ6WXjS3ieQ11wsDW8\",\n authDomain: \"actionlens-b14ae.firebaseapp.com\",\n projectId: \"actionlens-b14ae\",\n storageBucket: \"actionlens-b14ae.firebasestorage.app\",\n messagingSenderId: \"36086339210\",\n appId: \"1:36086339210:web:36e16e8778aadd8c58ff73\",\n};\n\n// Initialize Firebase\nconst app = initializeApp(firebaseConfig);\n\nexport const db = getFirestore(app);\n","import { v4 as uuidv4 } from \"uuid\";\nimport { record, Replayer } from \"rrweb\";\nimport {\n Firestore,\n doc,\n setDoc,\n collection,\n getDoc,\n getFirestore,\n} from \"firebase/firestore\";\nimport { ActionRecord, Project, User } from \"@ism-tech/actionlens-type\";\nimport { db } from \"./utils/index\";\nimport { pack } from \"@rrweb/packer\";\nimport { initializeApp } from \"firebase/app\";\nexport class ActionLensRc {\n sessionId: string = uuidv4();\n stopFnForStore: any = null;\n userId: string | null = null;\n db: Firestore | null = db;\n prefix: string = \"\";\n userData: User | null = null;\n projectId: string | null = null;\n projectData: Project | null = null;\n organizationId: string | null = null;\n originalUserId: string | null = null; // 元のユーザーID(外部システムのIDなど)\n userMeta: { name?: string; email?: string } = {};\n metaData: Record<string, any> = {};\n constructor() {}\n\n async init(\n _userId: string | null,\n projectId: string | null,\n userMeta: { name: string; email: string },\n metaData: Record<string, any> = {},\n _db: Firestore | null = null,\n prefix: string = \"\"\n ) {\n try {\n this.originalUserId = _userId; // 元のユーザーIDを保存\n console.log(\"ActionLensRc開始\");\n if (!projectId) {\n console.error(\"projectIdがNULLです\");\n throw new Error(\"projectIdがNULLです\");\n }\n this.projectId = projectId;\n\n this.prefix = prefix;\n this.userMeta = userMeta;\n this.metaData = metaData;\n\n if (!_userId) {\n console.error(\"userIdがNULLです\");\n throw new Error(\"userIdがNULLです\");\n }\n\n if (!this.db && _db) {\n console.error(\"Firestoreが初期化されていません\");\n this.db = _db;\n }\n if (!this.db) {\n console.error(\"Firestoreが初期化されていません\");\n throw new Error(\"Firestoreが初期化されていません\");\n }\n\n if (!this.projectId) {\n console.error(\"projectIdが設定されていません\");\n throw new Error(\"projectIdが設定されていません\");\n }\n const _doc = await getDoc(\n doc(collection(this.db, `${this.prefix}project`), this.projectId)\n );\n this.projectData = _doc.data() as Project;\n const projectData = this.projectData;\n this.organizationId = projectData?.organizationId || \"\";\n\n if (!this.projectData) {\n await setDoc(\n doc(collection(this.db, `${this.prefix}project`), this.projectId),\n {\n id: this.projectId,\n name: this.projectId,\n organizationId: \"\",\n isActivate: false, // デフォルトでアクティブに設定\n createAt: new Date(),\n updateAt: new Date(),\n createdBy: this.originalUserId,\n updatedBy: this.originalUserId,\n } as Project,\n { merge: true }\n );\n throw new Error(\"プロジェクトが存在しません\");\n }\n if (!this.projectData?.isActivate) {\n console.warn(\"プロジェクトは非アクティブです。録画を開始できません。\");\n throw new Error(\n \"プロジェクトは非アクティブです。録画を開始できません。\"\n );\n }\n this.userId = projectData.organizationId + \"-\" + this.originalUserId;\n this.prefix = this.prefix;\n this.projectId = this.projectId;\n const user = await getDoc(\n doc(collection(this.db, `${this.prefix}user`), this.userId)\n );\n\n if (!this.db) {\n console.error(\"Firestoreが初期化されていません\");\n throw new Error(\"Firestoreが初期化されていません\");\n }\n\n const userData = user.data() as User;\n\n if (!userData.id || !user.exists()) {\n await setDoc(\n doc(\n collection(this.db, `${this.prefix}user`),\n projectData.organizationId + \"-\" + this.originalUserId\n ),\n {\n ...(this.userMeta || {}),\n metaData: this.metaData,\n id: this.userId,\n originalUserId: this.originalUserId,\n type: \"customer\",\n organizationId: projectData?.organizationId || \"\",\n projectIds: [this.projectId],\n createAt: new Date(),\n updateAt: new Date(),\n createdBy: this.userId,\n updatedBy: this.userId,\n hidden: false,\n hiddenBy: \"\",\n } as User,\n { merge: true }\n );\n this.userData = user.data() as User;\n } else {\n this.userData = user.data() as User;\n\n if (!this.userData?.projectIds?.includes(this.projectId || \"\")) {\n await setDoc(\n doc(\n collection(this.db, `${this.prefix}user`),\n projectData.organizationId + \"-\" + this.originalUserId\n ),\n {\n projectIds: [\n ...(this.userData?.projectIds || []),\n this.projectId,\n ],\n updateAt: new Date(),\n updatedBy: this.userId,\n } as Partial<User>,\n { merge: true }\n );\n }\n\n if (this.userData?.organizationId !== projectData.organizationId) {\n await setDoc(\n doc(\n collection(this.db, `${this.prefix}user`),\n projectData.organizationId + \"-\" + this.originalUserId\n ),\n {\n organizationId: projectData.organizationId\n ? projectData.organizationId\n : this.userData?.organizationId,\n updateAt: new Date(),\n updatedBy: this.userId,\n } as Partial<User>,\n { merge: true }\n );\n }\n }\n\n this.startRrwebRecordingForStore();\n this.startConsoleRecording();\n // this.startTimelineRecording();\n return;\n } catch (error) {\n console.error(\"初期化中にエラーが発生しました:\", error);\n throw error;\n }\n }\n\n // コンソールログをキャプチャ\n startConsoleRecording() {\n try {\n const originalConsole = { ...console };\n const consoleMethods = [\n \"log\",\n \"info\",\n \"warn\",\n \"error\",\n \"debug\",\n \"trace\",\n \"assert\",\n \"clear\",\n \"context\",\n \"count\",\n \"countReset\",\n \"createTask\",\n \"debug\",\n \"dir\",\n \"dirxml\",\n \"error\",\n \"group\",\n \"groupCollapsed\",\n \"groupEnd\",\n \"memory\",\n \"profile\",\n \"profileEnd\",\n \"table\",\n \"time\",\n \"timeEnd\",\n \"timeLog\",\n \"timeStamp\",\n ] as const;\n\n consoleMethods.forEach((method) => {\n // 型安全なオーバーライド\n (console as any)[method] = (...args: any[]) => {\n // 元のメソッドを呼び出し\n (originalConsole as any)[method](...args);\n\n record.addCustomEvent(\"console\", { method: \"log\", args });\n };\n });\n } catch (error) {\n console.error(\"コンソール録画エラー:\", error);\n throw error;\n }\n }\n\n // タイムライン(ナビゲーションとパフォーマンス)をキャプチャ\n startTimelineRecording() {\n try {\n const userId = this.userId || \"unknown\";\n const sessionId = this.sessionId;\n const db = this.db;\n const prefix = this.prefix;\n // ナビゲーション履歴(popstateイベント)\n window.addEventListener(\"popstate\", (event) => {\n if (!db) {\n console.error(\"Firestoreが初期化されていません\");\n return;\n }\n\n record.addCustomEvent(\"navigation\", {\n url: window.location.href,\n state: event.state,\n });\n });\n\n // パフォーマンスエントリ\n if (window.performance) {\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n record.addCustomEvent(\"performance\", {\n name: entry.name,\n entryType: entry.entryType,\n startTime: entry.startTime,\n duration: entry.duration,\n });\n }\n });\n\n observer.observe({ entryTypes: [\"resource\", \"navigation\", \"paint\"] });\n }\n } catch (error) {\n console.error(\"タイムライン録画エラー:\", error);\n throw error;\n }\n }\n\n async startRrwebRecordingForStore() {\n try {\n if (this.stopFnForStore) return;\n\n const _sessionId = this.sessionId;\n const userId = this.userId || \"unknown\";\n const originalUserId = this.originalUserId || \"\";\n const db = this.db;\n const prefix = this.prefix;\n if (!db) {\n console.error(\"Firestoreが初期化されていません\");\n return;\n }\n // rrwebの録画を開始\n // このセッションの開始時間を記録\n const ActionRecordSessionRef = doc(\n collection(db, `${prefix}ActionRecordSession`),\n _sessionId\n );\n await setDoc(ActionRecordSessionRef, {\n id: _sessionId,\n startTime: new Date(),\n endTime: new Date(),\n userId,\n projectId: this.projectId || \"\",\n organizationId: this.projectData?.organizationId || \"\",\n createAt: new Date(),\n updateAt: new Date(),\n createdBy: userId,\n updatedBy: userId,\n });\n // rrwebの録画を開始 済み\n const _updateActionRecordSession = () => this.updateActionRecordSession();\n this.stopFnForStore = record({\n packFn: pack,\n collectFonts: true,\n inlineImages: false,\n sampling: {\n canvas: 500,\n mousemove: true,\n mousemoveCallback: 500,\n },\n emit(event) {\n const newDocRef = doc(collection(db, `${prefix}ActionRecord`));\n const record: ActionRecord = {\n id: newDocRef.id,\n timeStamp: new Date(),\n userId,\n originalUserId,\n type: \"rrweb\",\n sessionId: _sessionId,\n rrwebRecord: JSON.stringify(event),\n createAt: new Date(),\n updateAt: new Date(),\n hidden: false,\n createdBy: userId,\n updatedBy: userId,\n hiddenBy: \"\",\n };\n\n setDoc(newDocRef, record).catch((error) => {\n console.error(\"Error saving rrweb event: \", error);\n });\n _updateActionRecordSession();\n },\n recordCanvas: false,\n });\n } catch (error) {\n console.error(\"rrweb録画エラー:\", error);\n throw error;\n }\n }\n\n stopRrwebRecordingForStore() {\n try {\n if (this.stopFnForStore) {\n this.stopFnForStore();\n this.stopFnForStore = null;\n }\n } catch (error) {\n console.error(\"rrweb録画停止エラー:\", error);\n throw error;\n }\n }\n updateActionRecordSession() {\n try {\n if (!this.db || !this.sessionId || !this.userId) {\n console.error(\n \"Firestoreが初期化されていません、またはsessionId、userIdが設定されていません\"\n );\n return;\n }\n const ActionRecordSessionRef = doc(\n collection(this.db, `${this.prefix}ActionRecordSession`),\n this.sessionId\n );\n setDoc(\n ActionRecordSessionRef,\n {\n endTime: new Date(),\n updateAt: new Date(),\n updatedBy: this.userId,\n },\n { merge: true }\n ).catch((error) => {\n console.error(\"Error updating ActionRecordSession: \", error);\n });\n } catch (error) {\n console.error(\"ActionRecordSession更新エラー:\", error);\n throw error;\n }\n }\n}\n\nexport const ActionLens = new ActionLensRc();\n","import { Timestamp } from \"firebase/firestore\";\n// import { copy } from \"copy-anything\";\n/** Timestampの時はDateへの変更 */\nexport function convertTimestampToDate(\n timestamp: Timestamp | Date | null\n): Date | null {\n if (!timestamp) return null;\n /** string の場合(本来は来ないはずなのに) */\n if (typeof timestamp === \"string\") {\n const _string = new Date(timestamp);\n // console.log('convertTimestampToDate-string:', _string)\n if (isNaN(_string.getTime())) {\n return null;\n }\n return _string;\n }\n if (\"_seconds\" in timestamp && timestamp?._seconds) {\n return new Date(Number(timestamp._seconds) * 1000);\n }\n /** timestampの場合 */\n if (timestamp instanceof Timestamp) {\n const _timestamp = timestamp.toDate();\n // console.log('convertTimestampToDate-timestamp:', _timestamp)\n return _timestamp;\n }\n /** Dateの場合 */\n if (timestamp instanceof Date) {\n const _date = timestamp;\n // console.log('convertTimestampToDate-date:', _date)\n return _date;\n }\n // console.log('convertTimestampToDate-type:', typeof timestamp)\n // console.log('convertTimestampToDate-else:', timestamp)\n return timestamp;\n}\n\n/**\n * 時間を文字に変換\n * @param payload Date | Timestamp | string | null\n * @param format YYYY/MM/DD hh:mm:ss\n */\nexport const dateFormat = (\n payload:\n | Date\n | Timestamp\n | string\n | number\n | null\n | undefined\n | {\n _seconds: number;\n _nanoseconds: number;\n },\n format: string = \"YYYY/MM/DD\"\n) => {\n let date = payload;\n if (!date) return \"\";\n if (typeof date === \"string\") {\n if (date.length === 8 && /^\\d{8}$/.test(date)) {\n // 'YYYYMMDD'形式の対応\n const strYear = Number(date.slice(0, 4));\n const strMonth = Number(date.slice(4, 6)) - 1; // 月は0始まり\n const strDate = Number(date.slice(6, 8));\n date = new Date(strYear, strMonth, strDate);\n } else if (!/^(\\d{4}).([0-1]\\d).([0-3]\\d).*$/.test(date)) {\n return \"error\";\n } else {\n const strYear = Number(date.slice(0, 4));\n const strMonth = Number(date.slice(5, 7)) - 1;\n const strDate = Number(date.slice(8, 10));\n date = new Date(strYear, strMonth, strDate);\n }\n }\n if (typeof date === \"number\") {\n date = new Date(date);\n }\n if (isTimestamp(date)) {\n date = date.toDate();\n }\n if (date.hasOwnProperty(\"_seconds\") && date.hasOwnProperty(\"_nanoseconds\")) {\n date = new Date(\n // @ts-ignore\n date._seconds * 1000 + Math.floor(date._nanoseconds / 1000000)\n );\n }\n\n date = new Date(date as Date);\n\n format = format.replace(/YYYY/g, date.getFullYear().toString());\n format = format.replace(/MM/g, (\"0\" + (date.getMonth() + 1)).slice(-2));\n format = format.replace(/DD/g, (\"0\" + date.getDate()).slice(-2));\n format = format.replace(/hh/g, (\"0\" + date.getHours()).slice(-2));\n format = format.replace(/mm/g, (\"0\" + date.getMinutes()).slice(-2));\n format = format.replace(/ss/g, (\"0\" + date.getSeconds()).slice(-2));\n format = format.replace(/SSS/g, (\"00\" + date.getMilliseconds()).slice(-3));\n format = format.replace(\n /aaa/g,\n [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"][date.getDay()]\n );\n // if (format.includes('-')) {\n // console.log('「-」includes warning')\n // }\n\n return format;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst isTimestamp = (payload: any): payload is Timestamp => {\n return payload.toDate !== undefined;\n};\n"],"mappings":"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","names":["doc","doc","setDoc","collection","getDoc","getDoc","doc","collection","setDoc","db","record"]}
|
package/package.json
CHANGED