action-lens 1.0.41 → 1.0.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -67,7 +67,7 @@ declare class ActionLensRc {
67
67
  startTimelineRecording(): void;
68
68
  startRrwebRecordingForStore(): Promise<void>;
69
69
  stopRrwebRecordingForStore(): void;
70
- updateActionRecordSession(): void;
70
+ updateActionRecordSession(): Promise<void>;
71
71
  }
72
72
  declare const ActionLens: ActionLensRc;
73
73
 
package/dist/index.d.ts CHANGED
@@ -67,7 +67,7 @@ declare class ActionLensRc {
67
67
  startTimelineRecording(): void;
68
68
  startRrwebRecordingForStore(): Promise<void>;
69
69
  stopRrwebRecordingForStore(): void;
70
- updateActionRecordSession(): void;
70
+ updateActionRecordSession(): Promise<void>;
71
71
  }
72
72
  declare const ActionLens: ActionLensRc;
73
73
 
package/dist/index.js CHANGED
@@ -476,7 +476,6 @@ var ActionLensRc = class {
476
476
  }
477
477
  }
478
478
  this.startRrwebRecordingForStore();
479
- this.startConsoleRecording();
480
479
  return;
481
480
  } catch (error) {
482
481
  console.error("\u521D\u671F\u5316\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F:", error);
@@ -590,7 +589,7 @@ var ActionLensRc = class {
590
589
  createdBy: userId,
591
590
  updatedBy: userId
592
591
  });
593
- const _updateActionRecordSession = () => this.updateActionRecordSession();
592
+ const _updateActionRecordSession = async () => await this.updateActionRecordSession();
594
593
  this.stopFnForStore = (0, import_rrweb2.record)({
595
594
  packFn: import_packer2.pack,
596
595
  collectFonts: true,
@@ -600,7 +599,7 @@ var ActionLensRc = class {
600
599
  mousemove: true,
601
600
  mousemoveCallback: 500
602
601
  },
603
- emit(event) {
602
+ emit: async (event) => {
604
603
  const newDocRef = (0, import_firestore3.doc)((0, import_firestore3.collection)(db2, `${prefix}ActionRecord`));
605
604
  const record2 = {
606
605
  id: newDocRef.id,
@@ -617,10 +616,10 @@ var ActionLensRc = class {
617
616
  updatedBy: userId,
618
617
  hiddenBy: ""
619
618
  };
620
- (0, import_firestore3.setDoc)(newDocRef, record2).catch((error) => {
619
+ await (0, import_firestore3.setDoc)(newDocRef, record2).catch((error) => {
621
620
  console.error("Error saving rrweb event: ", error);
622
621
  });
623
- _updateActionRecordSession();
622
+ await _updateActionRecordSession();
624
623
  },
625
624
  recordCanvas: false
626
625
  });
@@ -628,6 +627,7 @@ var ActionLensRc = class {
628
627
  console.error("rrweb\u9332\u753B\u30A8\u30E9\u30FC:", error);
629
628
  throw error;
630
629
  }
630
+ this.startConsoleRecording();
631
631
  }
632
632
  stopRrwebRecordingForStore() {
633
633
  try {
@@ -640,7 +640,7 @@ var ActionLensRc = class {
640
640
  throw error;
641
641
  }
642
642
  }
643
- updateActionRecordSession() {
643
+ async updateActionRecordSession() {
644
644
  try {
645
645
  if (!this.db || !this.sessionId || !this.userId) {
646
646
  console.error(
@@ -652,7 +652,7 @@ var ActionLensRc = class {
652
652
  (0, import_firestore3.collection)(this.db, `${this.prefix}ActionRecordSession`),
653
653
  this.sessionId
654
654
  );
655
- (0, import_firestore3.setDoc)(
655
+ await (0, import_firestore3.setDoc)(
656
656
  ActionRecordSessionRef,
657
657
  {
658
658
  endTime: /* @__PURE__ */ new Date(),
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 { 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"]}
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\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 = async () =>\n await 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: async (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 await setDoc(newDocRef, record).catch((error) => {\n console.error(\"Error saving rrweb event: \", error);\n });\n await _updateActionRecordSession();\n },\n recordCanvas: false,\n });\n } catch (error) {\n console.error(\"rrweb録画エラー:\", error);\n throw error;\n }\n this.startConsoleRecording();\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 async 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 await 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
@@ -459,7 +459,6 @@ var ActionLensRc = class {
459
459
  }
460
460
  }
461
461
  this.startRrwebRecordingForStore();
462
- this.startConsoleRecording();
463
462
  return;
464
463
  } catch (error) {
465
464
  console.error("\u521D\u671F\u5316\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F:", error);
@@ -573,7 +572,7 @@ var ActionLensRc = class {
573
572
  createdBy: userId,
574
573
  updatedBy: userId
575
574
  });
576
- const _updateActionRecordSession = () => this.updateActionRecordSession();
575
+ const _updateActionRecordSession = async () => await this.updateActionRecordSession();
577
576
  this.stopFnForStore = record({
578
577
  packFn: pack,
579
578
  collectFonts: true,
@@ -583,7 +582,7 @@ var ActionLensRc = class {
583
582
  mousemove: true,
584
583
  mousemoveCallback: 500
585
584
  },
586
- emit(event) {
585
+ emit: async (event) => {
587
586
  const newDocRef = doc2(collection2(db2, `${prefix}ActionRecord`));
588
587
  const record2 = {
589
588
  id: newDocRef.id,
@@ -600,10 +599,10 @@ var ActionLensRc = class {
600
599
  updatedBy: userId,
601
600
  hiddenBy: ""
602
601
  };
603
- setDoc2(newDocRef, record2).catch((error) => {
602
+ await setDoc2(newDocRef, record2).catch((error) => {
604
603
  console.error("Error saving rrweb event: ", error);
605
604
  });
606
- _updateActionRecordSession();
605
+ await _updateActionRecordSession();
607
606
  },
608
607
  recordCanvas: false
609
608
  });
@@ -611,6 +610,7 @@ var ActionLensRc = class {
611
610
  console.error("rrweb\u9332\u753B\u30A8\u30E9\u30FC:", error);
612
611
  throw error;
613
612
  }
613
+ this.startConsoleRecording();
614
614
  }
615
615
  stopRrwebRecordingForStore() {
616
616
  try {
@@ -623,7 +623,7 @@ var ActionLensRc = class {
623
623
  throw error;
624
624
  }
625
625
  }
626
- updateActionRecordSession() {
626
+ async updateActionRecordSession() {
627
627
  try {
628
628
  if (!this.db || !this.sessionId || !this.userId) {
629
629
  console.error(
@@ -635,7 +635,7 @@ var ActionLensRc = class {
635
635
  collection2(this.db, `${this.prefix}ActionRecordSession`),
636
636
  this.sessionId
637
637
  );
638
- setDoc2(
638
+ await setDoc2(
639
639
  ActionRecordSessionRef,
640
640
  {
641
641
  endTime: /* @__PURE__ */ new Date(),
@@ -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 { 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"]}
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\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 = async () =>\n await 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: async (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 await setDoc(newDocRef, record).catch((error) => {\n console.error(\"Error saving rrweb event: \", error);\n });\n await _updateActionRecordSession();\n },\n recordCanvas: false,\n });\n } catch (error) {\n console.error(\"rrweb録画エラー:\", error);\n throw error;\n }\n this.startConsoleRecording();\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 async 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 await 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
@@ -38,5 +38,5 @@
38
38
  },
39
39
  "type": "commonjs",
40
40
  "types": "./dist/index.d.ts",
41
- "version": "1.0.41"
41
+ "version": "1.0.43"
42
42
  }