stream-chat-react-native-core 5.6.0 → 5.6.1-beta.2

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.
@@ -19,6 +19,8 @@ var _schema = require("./schema");
19
19
 
20
20
  var _createCreateTableQuery = require("./sqlite-utils/createCreateTableQuery");
21
21
 
22
+ var _sqlite;
23
+
22
24
  var sqlite;
23
25
 
24
26
  try {
@@ -41,7 +43,7 @@ QuickSqliteClient.setDbVersion = function (version) {
41
43
  return QuickSqliteClient.dbVersion = version;
42
44
  };
43
45
 
44
- QuickSqliteClient.isQuickSqliteV4 = sqlite.executeSql ? true : false;
46
+ QuickSqliteClient.isQuickSqliteV4 = (_sqlite = sqlite) != null && _sqlite.executeSql ? true : false;
45
47
 
46
48
  QuickSqliteClient.openDB = function () {
47
49
  if (QuickSqliteClient.isQuickSqliteV4) {
@@ -1 +1 @@
1
- {"version":3,"sources":["QuickSqliteClient.ts"],"names":["sqlite","require","QuickSQLite","e","QuickSqliteClient","dbVersion","dbName","DB_NAME","dbLocation","DB_LOCATION","getDbVersion","setDbVersion","version","isQuickSqliteV4","executeSql","openDB","QuickSqliteClient_v4","open","execute","console","error","closeDB","close","executeSqlBatch","queries","length","executeBatch","Error","query","params","rows","_array","dropTables","Object","keys","tables","map","table","deleteDatabase","initializeDatabase","undefined","warn","getUserPragmaVersion","updateUserPragmaVersion","q","reduce","queriesSoFar","tableName","push","result","user_version","resetDB"],"mappings":"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","sourcesContent":["/* eslint-disable no-underscore-dangle */\nimport type { QuickSQLite } from 'react-native-quick-sqlite';\nlet sqlite: typeof QuickSQLite;\n\ntry {\n sqlite = require('react-native-quick-sqlite').QuickSQLite;\n} catch (e) {\n // Failed for one of the reason\n // 1. Running on expo, where we don't support offline storage yet.\n // 2. Offline support is disabled, in which case this library is not installed.\n}\n\nimport { DB_LOCATION, DB_NAME } from './constants';\nimport { QuickSqliteClient_v4 } from './QuickSqliteClient_v4';\nimport { tables } from './schema';\nimport { createCreateTableQuery } from './sqlite-utils/createCreateTableQuery';\nimport type { PreparedQueries, Table } from './types';\n\n/**\n * QuickSqliteClient takes care of any direct interaction with sqlite.\n * This way usage react-native-quick-sqlite package is scoped to a single class/file.\n *\n * TODO: Drop the support for v4 of react-native-quick-sqlite in the next major release.\n */\nexport class QuickSqliteClient {\n static dbVersion = 3;\n\n static dbName = DB_NAME;\n static dbLocation = DB_LOCATION;\n\n static getDbVersion = () => this.dbVersion;\n // Force a specific db version. This is mainly useful for testsuit.\n static setDbVersion = (version: number) => (this.dbVersion = version);\n\n // @ts-ignore\n static isQuickSqliteV4 = sqlite.executeSql ? true : false;\n\n // print if legacy version\n static openDB = () => {\n if (this.isQuickSqliteV4) {\n QuickSqliteClient_v4.openDB();\n return;\n }\n\n try {\n sqlite.open(this.dbName, this.dbLocation);\n sqlite.execute(this.dbName, `PRAGMA foreign_keys = ON`, []);\n } catch (e) {\n console.error(`Error opening database ${this.dbName}: ${e}`);\n }\n };\n\n static closeDB = () => {\n if (this.isQuickSqliteV4) {\n QuickSqliteClient_v4.closeDB();\n return;\n }\n\n try {\n sqlite.close(this.dbName);\n } catch (e) {\n console.error(`Error closing database ${this.dbName}: ${e}`);\n }\n };\n\n static executeSqlBatch = (queries: PreparedQueries[]) => {\n if (!queries || !queries.length) return;\n\n if (this.isQuickSqliteV4) {\n QuickSqliteClient_v4.executeSqlBatch(queries);\n return;\n }\n\n this.openDB();\n try {\n sqlite.executeBatch(DB_NAME, queries);\n\n this.closeDB();\n } catch (e) {\n this.closeDB();\n throw new Error(`Query/queries failed: ${e}`);\n }\n };\n\n static executeSql = (query: string, params?: string[]) => {\n if (this.isQuickSqliteV4) {\n return QuickSqliteClient_v4.executeSql(query, params);\n }\n\n try {\n this.openDB();\n const { rows } = sqlite.execute(DB_NAME, query, params);\n this.closeDB();\n\n return rows ? rows._array : [];\n } catch (e) {\n this.closeDB();\n throw new Error(`Query/queries failed: ${e}: `);\n }\n };\n\n static dropTables = () => {\n const queries: PreparedQueries[] = Object.keys(tables).map((table) => [\n `DROP TABLE IF EXISTS ${table}`,\n [],\n ]);\n\n this.executeSqlBatch(queries);\n };\n\n static deleteDatabase = () => {\n if (this.isQuickSqliteV4) {\n return QuickSqliteClient_v4.deleteDatabase();\n }\n\n try {\n sqlite.delete(this.dbName, this.dbLocation);\n } catch (e) {\n throw new Error(`Error deleting DB: ${e}`);\n }\n\n return true;\n };\n\n static initializeDatabase = () => {\n // @ts-ignore\n if (sqlite === undefined) {\n throw new Error(\n 'Please install \"react-native-quick-sqlite\" package to enable offline support',\n );\n }\n\n if (this.isQuickSqliteV4) {\n console.warn(\n 'You seem to be using an older version of \"react-native-quick-sqlite\" dependency,',\n 'and we are going to drop support for it in the next major release.',\n 'Please upgrade to the version v5 of \"react-native-quick-sqlite\" to avoid any issues.',\n );\n }\n\n const version = this.getUserPragmaVersion();\n\n if (version !== this.dbVersion) {\n this.dropTables();\n this.updateUserPragmaVersion(this.dbVersion);\n }\n const q = (Object.keys(tables) as Table[]).reduce<PreparedQueries[]>(\n (queriesSoFar, tableName) => {\n queriesSoFar.push(...createCreateTableQuery(tableName));\n return queriesSoFar;\n },\n [],\n );\n\n this.executeSqlBatch(q);\n };\n\n static updateUserPragmaVersion = (version: number) => {\n if (this.isQuickSqliteV4) {\n QuickSqliteClient_v4.updateUserPragmaVersion(version);\n return;\n }\n\n this.openDB();\n sqlite.execute(DB_NAME, `PRAGMA user_version = ${version}`, []);\n this.closeDB();\n };\n\n static getUserPragmaVersion = () => {\n if (this.isQuickSqliteV4) {\n return QuickSqliteClient_v4.getUserPragmaVersion();\n }\n\n this.openDB();\n try {\n const { rows } = sqlite.execute(DB_NAME, `PRAGMA user_version`, []);\n const result = rows ? rows._array : [];\n this.closeDB();\n return result[0].user_version as number;\n } catch (e) {\n this.closeDB();\n throw new Error(`Querying for user_version failed: ${e}`);\n }\n };\n\n static resetDB = () => {\n this.dropTables();\n this.initializeDatabase();\n };\n}\n"]}
1
+ {"version":3,"sources":["QuickSqliteClient.ts"],"names":["sqlite","require","QuickSQLite","e","QuickSqliteClient","dbVersion","dbName","DB_NAME","dbLocation","DB_LOCATION","getDbVersion","setDbVersion","version","isQuickSqliteV4","executeSql","openDB","QuickSqliteClient_v4","open","execute","console","error","closeDB","close","executeSqlBatch","queries","length","executeBatch","Error","query","params","rows","_array","dropTables","Object","keys","tables","map","table","deleteDatabase","initializeDatabase","undefined","warn","getUserPragmaVersion","updateUserPragmaVersion","q","reduce","queriesSoFar","tableName","push","result","user_version","resetDB"],"mappings":"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","sourcesContent":["/* eslint-disable no-underscore-dangle */\nimport type { QuickSQLite } from 'react-native-quick-sqlite';\nlet sqlite: typeof QuickSQLite;\n\ntry {\n sqlite = require('react-native-quick-sqlite').QuickSQLite;\n} catch (e) {\n // Failed for one of the reason\n // 1. Running on expo, where we don't support offline storage yet.\n // 2. Offline support is disabled, in which case this library is not installed.\n}\n\nimport { DB_LOCATION, DB_NAME } from './constants';\nimport { QuickSqliteClient_v4 } from './QuickSqliteClient_v4';\nimport { tables } from './schema';\nimport { createCreateTableQuery } from './sqlite-utils/createCreateTableQuery';\nimport type { PreparedQueries, Table } from './types';\n\n/**\n * QuickSqliteClient takes care of any direct interaction with sqlite.\n * This way usage react-native-quick-sqlite package is scoped to a single class/file.\n *\n * TODO: Drop the support for v4 of react-native-quick-sqlite in the next major release.\n */\nexport class QuickSqliteClient {\n static dbVersion = 3;\n\n static dbName = DB_NAME;\n static dbLocation = DB_LOCATION;\n\n static getDbVersion = () => this.dbVersion;\n // Force a specific db version. This is mainly useful for testsuit.\n static setDbVersion = (version: number) => (this.dbVersion = version);\n\n // @ts-ignore\n static isQuickSqliteV4 = sqlite?.executeSql ? true : false;\n\n // print if legacy version\n static openDB = () => {\n if (this.isQuickSqliteV4) {\n QuickSqliteClient_v4.openDB();\n return;\n }\n\n try {\n sqlite.open(this.dbName, this.dbLocation);\n sqlite.execute(this.dbName, `PRAGMA foreign_keys = ON`, []);\n } catch (e) {\n console.error(`Error opening database ${this.dbName}: ${e}`);\n }\n };\n\n static closeDB = () => {\n if (this.isQuickSqliteV4) {\n QuickSqliteClient_v4.closeDB();\n return;\n }\n\n try {\n sqlite.close(this.dbName);\n } catch (e) {\n console.error(`Error closing database ${this.dbName}: ${e}`);\n }\n };\n\n static executeSqlBatch = (queries: PreparedQueries[]) => {\n if (!queries || !queries.length) return;\n\n if (this.isQuickSqliteV4) {\n QuickSqliteClient_v4.executeSqlBatch(queries);\n return;\n }\n\n this.openDB();\n try {\n sqlite.executeBatch(DB_NAME, queries);\n\n this.closeDB();\n } catch (e) {\n this.closeDB();\n throw new Error(`Query/queries failed: ${e}`);\n }\n };\n\n static executeSql = (query: string, params?: string[]) => {\n if (this.isQuickSqliteV4) {\n return QuickSqliteClient_v4.executeSql(query, params);\n }\n\n try {\n this.openDB();\n const { rows } = sqlite.execute(DB_NAME, query, params);\n this.closeDB();\n\n return rows ? rows._array : [];\n } catch (e) {\n this.closeDB();\n throw new Error(`Query/queries failed: ${e}: `);\n }\n };\n\n static dropTables = () => {\n const queries: PreparedQueries[] = Object.keys(tables).map((table) => [\n `DROP TABLE IF EXISTS ${table}`,\n [],\n ]);\n\n this.executeSqlBatch(queries);\n };\n\n static deleteDatabase = () => {\n if (this.isQuickSqliteV4) {\n return QuickSqliteClient_v4.deleteDatabase();\n }\n\n try {\n sqlite.delete(this.dbName, this.dbLocation);\n } catch (e) {\n throw new Error(`Error deleting DB: ${e}`);\n }\n\n return true;\n };\n\n static initializeDatabase = () => {\n // @ts-ignore\n if (sqlite === undefined) {\n throw new Error(\n 'Please install \"react-native-quick-sqlite\" package to enable offline support',\n );\n }\n\n if (this.isQuickSqliteV4) {\n console.warn(\n 'You seem to be using an older version of \"react-native-quick-sqlite\" dependency,',\n 'and we are going to drop support for it in the next major release.',\n 'Please upgrade to the version v5 of \"react-native-quick-sqlite\" to avoid any issues.',\n );\n }\n\n const version = this.getUserPragmaVersion();\n\n if (version !== this.dbVersion) {\n this.dropTables();\n this.updateUserPragmaVersion(this.dbVersion);\n }\n const q = (Object.keys(tables) as Table[]).reduce<PreparedQueries[]>(\n (queriesSoFar, tableName) => {\n queriesSoFar.push(...createCreateTableQuery(tableName));\n return queriesSoFar;\n },\n [],\n );\n\n this.executeSqlBatch(q);\n };\n\n static updateUserPragmaVersion = (version: number) => {\n if (this.isQuickSqliteV4) {\n QuickSqliteClient_v4.updateUserPragmaVersion(version);\n return;\n }\n\n this.openDB();\n sqlite.execute(DB_NAME, `PRAGMA user_version = ${version}`, []);\n this.closeDB();\n };\n\n static getUserPragmaVersion = () => {\n if (this.isQuickSqliteV4) {\n return QuickSqliteClient_v4.getUserPragmaVersion();\n }\n\n this.openDB();\n try {\n const { rows } = sqlite.execute(DB_NAME, `PRAGMA user_version`, []);\n const result = rows ? rows._array : [];\n this.closeDB();\n return result[0].user_version as number;\n } catch (e) {\n this.closeDB();\n throw new Error(`Querying for user_version failed: ${e}`);\n }\n };\n\n static resetDB = () => {\n this.dropTables();\n this.initializeDatabase();\n };\n}\n"]}
@@ -83,7 +83,7 @@ DBSyncManager.init = function () {
83
83
  switch (_context.prev = _context.next) {
84
84
  case 0:
85
85
  if (!event.online) {
86
- _context.next = 6;
86
+ _context.next = 7;
87
87
  break;
88
88
  }
89
89
 
@@ -91,18 +91,20 @@ DBSyncManager.init = function () {
91
91
  return DBSyncManager.syncAndExecutePendingTasks();
92
92
 
93
93
  case 3:
94
+ DBSyncManager.syncStatus = true;
94
95
  DBSyncManager.listeners.forEach(function (l) {
95
96
  return l(true);
96
97
  });
97
- _context.next = 7;
98
+ _context.next = 9;
98
99
  break;
99
100
 
100
- case 6:
101
+ case 7:
102
+ DBSyncManager.syncStatus = false;
101
103
  DBSyncManager.listeners.forEach(function (l) {
102
104
  return l(false);
103
105
  });
104
106
 
105
- case 7:
107
+ case 9:
106
108
  case "end":
107
109
  return _context.stop();
108
110
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["DBSyncManager.ts"],"names":["restBeforeNextTask","Promise","resolve","setTimeout","DBSyncManager","syncStatus","listeners","client","getSyncStatus","init","user","id","wsConnection","isHealthy","syncAndExecutePendingTasks","forEach","l","on","event","online","onSyncStatusChange","listener","push","unsubscribe","filter","el","sync","lastSyncedAt","currentUserId","cids","Date","toISOString","result","queries","events","reduce","concat","length","QuickSqliteClient","executeSqlBatch","resetDB","toString","executePendingTasks","queueTask","task","removeFromApi","executeTask","response","data","code","channel","channelType","channelId","type","sendReaction","payload","deleteReaction","deleteMessage","Error","queue","dropPendingTasks","conditions","tasks"],"mappings":"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","sourcesContent":["import type { AxiosError } from 'axios';\nimport type { APIErrorResponse, StreamChat } from 'stream-chat';\n\nimport { handleEventToSyncDB } from '../components/Chat/hooks/handleEventToSyncDB';\nimport { getAllChannelIds, getLastSyncedAt, upsertLastSyncedAt } from '../store/apis';\n\nimport { addPendingTask } from '../store/apis/addPendingTask';\n\nimport { deletePendingTask } from '../store/apis/deletePendingTask';\nimport { getPendingTasks } from '../store/apis/getPendingTasks';\nimport { QuickSqliteClient } from '../store/QuickSqliteClient';\nimport type { PendingTask, PreparedQueries } from '../store/types';\nimport type { DefaultStreamChatGenerics } from '../types/types';\n/**\n * DBSyncManager has the responsibility to sync the channel states\n * within local database whenever possible.\n *\n * Components can get the current sync status using DBSyncManager.getCurrentStatus().\n * Or components can attach a listener for status change as following:\n *\n * ```tsx\n * useEffect(() => {\n * const unsubscribe = DBSyncManager.onSyncStatusChange((syncStatus) => {\n * if (syncStatus) {\n * doSomething();\n * }\n * })\n *\n * return () => unsubscribe();\n * })\n * ```\n */\nconst restBeforeNextTask = () => new Promise((resolve) => setTimeout(resolve, 500));\n\nexport class DBSyncManager {\n static syncStatus = false;\n static listeners: Array<(status: boolean) => void> = [];\n static client: StreamChat | null = null;\n\n /**\n * Returns weather channel states in local DB are synced with backend or not.\n * @returns boolean\n */\n static getSyncStatus = () => this.syncStatus;\n\n /**\n * Initializes the DBSyncManager. This function should be called only once\n * throughout the lifetime of SDK.\n *\n * @param client\n */\n static init = async (client: StreamChat) => {\n this.client = client;\n // If the websocket connection is already active, then straightaway\n // call the sync api and also execute pending api calls.\n // Otherwise wait for `connection.changed` event.\n if (client.user?.id && client.wsConnection?.isHealthy) {\n await this.syncAndExecutePendingTasks();\n this.syncStatus = true;\n this.listeners.forEach((l) => l(true));\n }\n\n this.client.on('connection.changed', async (event) => {\n if (event.online) {\n await this.syncAndExecutePendingTasks();\n this.listeners.forEach((l) => l(true));\n } else {\n this.listeners.forEach((l) => l(false));\n }\n });\n };\n\n /**\n * Subscribes a listener for sync status change.\n *\n * @param listener {function}\n * @returns {function} to unsubscribe the listener.\n */\n static onSyncStatusChange = (listener: (status: boolean) => void) => {\n this.listeners.push(listener);\n\n return {\n unsubscribe: () => {\n this.listeners = this.listeners.filter((el) => el !== listener);\n },\n };\n };\n\n static sync = async () => {\n if (!this.client?.user) return;\n\n const lastSyncedAt = getLastSyncedAt({\n currentUserId: this.client.user.id,\n });\n const cids = getAllChannelIds();\n\n if (lastSyncedAt) {\n try {\n const result = await this.client.sync(cids, new Date(lastSyncedAt).toISOString());\n const queries = result.events.reduce<PreparedQueries[]>((queries, event) => {\n queries = queries.concat(handleEventToSyncDB(event, false));\n return queries;\n }, []);\n\n if (queries.length) {\n QuickSqliteClient.executeSqlBatch(queries);\n }\n } catch (e) {\n // Error will be raised by the sync API if there are too many events.\n // In that case reset the entire DB and start fresh.\n QuickSqliteClient.resetDB();\n }\n }\n upsertLastSyncedAt({\n currentUserId: this.client.user.id,\n lastSyncedAt: new Date().toString(),\n });\n };\n\n static syncAndExecutePendingTasks = async () => {\n if (!this.client) return;\n\n await this.executePendingTasks(this.client);\n await this.sync();\n };\n\n static queueTask = async <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n >({\n client,\n task,\n }: {\n client: StreamChat<StreamChatGenerics>;\n task: PendingTask;\n }) => {\n const removeFromApi = addPendingTask(task);\n\n let response;\n try {\n response = await this.executeTask<StreamChatGenerics>({ client, task });\n } catch (e) {\n if ((e as AxiosError<APIErrorResponse>)?.response?.data?.code === 4) {\n // Error code 16 - message already exists\n // ignore\n } else {\n throw e;\n }\n }\n\n removeFromApi();\n\n return response;\n };\n\n static executeTask = async <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n >({\n client,\n task,\n }: {\n client: StreamChat<StreamChatGenerics>;\n task: PendingTask;\n }) => {\n const channel = client.channel(task.channelType, task.channelId);\n\n if (task.type === 'send-reaction') {\n return await channel.sendReaction(...task.payload);\n }\n\n if (task.type === 'delete-reaction') {\n return await channel.deleteReaction(...task.payload);\n }\n\n if (task.type === 'delete-message') {\n return await client.deleteMessage(...task.payload);\n }\n\n throw new Error('Invalid task type');\n };\n\n static executePendingTasks = async <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n >(\n client: StreamChat<StreamChatGenerics>,\n ) => {\n const queue = getPendingTasks();\n for (const task of queue) {\n if (!task.id) continue;\n\n try {\n await this.executeTask<StreamChatGenerics>({\n client,\n task,\n });\n } catch (e) {\n if ((e as AxiosError<APIErrorResponse>)?.response?.data?.code === 4) {\n // Error code 16 - message already exists\n // ignore\n } else {\n throw e;\n }\n }\n\n deletePendingTask({\n id: task.id,\n });\n await restBeforeNextTask();\n }\n };\n\n static dropPendingTasks = (conditions: { messageId: string }) => {\n const tasks = getPendingTasks(conditions);\n\n for (const task of tasks) {\n if (!task.id) continue;\n\n deletePendingTask({\n id: task.id,\n });\n }\n };\n}\n"]}
1
+ {"version":3,"sources":["DBSyncManager.ts"],"names":["restBeforeNextTask","Promise","resolve","setTimeout","DBSyncManager","syncStatus","listeners","client","getSyncStatus","init","user","id","wsConnection","isHealthy","syncAndExecutePendingTasks","forEach","l","on","event","online","onSyncStatusChange","listener","push","unsubscribe","filter","el","sync","lastSyncedAt","currentUserId","cids","Date","toISOString","result","queries","events","reduce","concat","length","QuickSqliteClient","executeSqlBatch","resetDB","toString","executePendingTasks","queueTask","task","removeFromApi","executeTask","response","data","code","channel","channelType","channelId","type","sendReaction","payload","deleteReaction","deleteMessage","Error","queue","dropPendingTasks","conditions","tasks"],"mappings":"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","sourcesContent":["import type { AxiosError } from 'axios';\nimport type { APIErrorResponse, StreamChat } from 'stream-chat';\n\nimport { handleEventToSyncDB } from '../components/Chat/hooks/handleEventToSyncDB';\nimport { getAllChannelIds, getLastSyncedAt, upsertLastSyncedAt } from '../store/apis';\n\nimport { addPendingTask } from '../store/apis/addPendingTask';\n\nimport { deletePendingTask } from '../store/apis/deletePendingTask';\nimport { getPendingTasks } from '../store/apis/getPendingTasks';\nimport { QuickSqliteClient } from '../store/QuickSqliteClient';\nimport type { PendingTask, PreparedQueries } from '../store/types';\nimport type { DefaultStreamChatGenerics } from '../types/types';\n/**\n * DBSyncManager has the responsibility to sync the channel states\n * within local database whenever possible.\n *\n * Components can get the current sync status using DBSyncManager.getCurrentStatus().\n * Or components can attach a listener for status change as following:\n *\n * ```tsx\n * useEffect(() => {\n * const unsubscribe = DBSyncManager.onSyncStatusChange((syncStatus) => {\n * if (syncStatus) {\n * doSomething();\n * }\n * })\n *\n * return () => unsubscribe();\n * })\n * ```\n */\nconst restBeforeNextTask = () => new Promise((resolve) => setTimeout(resolve, 500));\n\nexport class DBSyncManager {\n static syncStatus = false;\n static listeners: Array<(status: boolean) => void> = [];\n static client: StreamChat | null = null;\n\n /**\n * Returns weather channel states in local DB are synced with backend or not.\n * @returns boolean\n */\n static getSyncStatus = () => this.syncStatus;\n\n /**\n * Initializes the DBSyncManager. This function should be called only once\n * throughout the lifetime of SDK.\n *\n * @param client\n */\n static init = async (client: StreamChat) => {\n this.client = client;\n // If the websocket connection is already active, then straightaway\n // call the sync api and also execute pending api calls.\n // Otherwise wait for `connection.changed` event.\n if (client.user?.id && client.wsConnection?.isHealthy) {\n await this.syncAndExecutePendingTasks();\n this.syncStatus = true;\n this.listeners.forEach((l) => l(true));\n }\n\n this.client.on('connection.changed', async (event) => {\n if (event.online) {\n await this.syncAndExecutePendingTasks();\n this.syncStatus = true;\n this.listeners.forEach((l) => l(true));\n } else {\n this.syncStatus = false;\n this.listeners.forEach((l) => l(false));\n }\n });\n };\n\n /**\n * Subscribes a listener for sync status change.\n *\n * @param listener {function}\n * @returns {function} to unsubscribe the listener.\n */\n static onSyncStatusChange = (listener: (status: boolean) => void) => {\n this.listeners.push(listener);\n\n return {\n unsubscribe: () => {\n this.listeners = this.listeners.filter((el) => el !== listener);\n },\n };\n };\n\n static sync = async () => {\n if (!this.client?.user) return;\n\n const lastSyncedAt = getLastSyncedAt({\n currentUserId: this.client.user.id,\n });\n const cids = getAllChannelIds();\n\n if (lastSyncedAt) {\n try {\n const result = await this.client.sync(cids, new Date(lastSyncedAt).toISOString());\n const queries = result.events.reduce<PreparedQueries[]>((queries, event) => {\n queries = queries.concat(handleEventToSyncDB(event, false));\n return queries;\n }, []);\n\n if (queries.length) {\n QuickSqliteClient.executeSqlBatch(queries);\n }\n } catch (e) {\n // Error will be raised by the sync API if there are too many events.\n // In that case reset the entire DB and start fresh.\n QuickSqliteClient.resetDB();\n }\n }\n upsertLastSyncedAt({\n currentUserId: this.client.user.id,\n lastSyncedAt: new Date().toString(),\n });\n };\n\n static syncAndExecutePendingTasks = async () => {\n if (!this.client) return;\n\n await this.executePendingTasks(this.client);\n await this.sync();\n };\n\n static queueTask = async <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n >({\n client,\n task,\n }: {\n client: StreamChat<StreamChatGenerics>;\n task: PendingTask;\n }) => {\n const removeFromApi = addPendingTask(task);\n\n let response;\n try {\n response = await this.executeTask<StreamChatGenerics>({ client, task });\n } catch (e) {\n if ((e as AxiosError<APIErrorResponse>)?.response?.data?.code === 4) {\n // Error code 16 - message already exists\n // ignore\n } else {\n throw e;\n }\n }\n\n removeFromApi();\n\n return response;\n };\n\n static executeTask = async <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n >({\n client,\n task,\n }: {\n client: StreamChat<StreamChatGenerics>;\n task: PendingTask;\n }) => {\n const channel = client.channel(task.channelType, task.channelId);\n\n if (task.type === 'send-reaction') {\n return await channel.sendReaction(...task.payload);\n }\n\n if (task.type === 'delete-reaction') {\n return await channel.deleteReaction(...task.payload);\n }\n\n if (task.type === 'delete-message') {\n return await client.deleteMessage(...task.payload);\n }\n\n throw new Error('Invalid task type');\n };\n\n static executePendingTasks = async <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n >(\n client: StreamChat<StreamChatGenerics>,\n ) => {\n const queue = getPendingTasks();\n for (const task of queue) {\n if (!task.id) continue;\n\n try {\n await this.executeTask<StreamChatGenerics>({\n client,\n task,\n });\n } catch (e) {\n if ((e as AxiosError<APIErrorResponse>)?.response?.data?.code === 4) {\n // Error code 16 - message already exists\n // ignore\n } else {\n throw e;\n }\n }\n\n deletePendingTask({\n id: task.id,\n });\n await restBeforeNextTask();\n }\n };\n\n static dropPendingTasks = (conditions: { messageId: string }) => {\n const tasks = getPendingTasks(conditions);\n\n for (const task of tasks) {\n if (!task.id) continue;\n\n deletePendingTask({\n id: task.id,\n });\n }\n };\n}\n"]}
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "5.6.0"
2
+ "version": "5.6.1-beta.2"
3
3
  }
@@ -19,6 +19,8 @@ var _schema = require("./schema");
19
19
 
20
20
  var _createCreateTableQuery = require("./sqlite-utils/createCreateTableQuery");
21
21
 
22
+ var _sqlite;
23
+
22
24
  var sqlite;
23
25
 
24
26
  try {
@@ -41,7 +43,7 @@ QuickSqliteClient.setDbVersion = function (version) {
41
43
  return QuickSqliteClient.dbVersion = version;
42
44
  };
43
45
 
44
- QuickSqliteClient.isQuickSqliteV4 = sqlite.executeSql ? true : false;
46
+ QuickSqliteClient.isQuickSqliteV4 = (_sqlite = sqlite) != null && _sqlite.executeSql ? true : false;
45
47
 
46
48
  QuickSqliteClient.openDB = function () {
47
49
  if (QuickSqliteClient.isQuickSqliteV4) {
@@ -1 +1 @@
1
- {"version":3,"sources":["QuickSqliteClient.ts"],"names":["sqlite","require","QuickSQLite","e","QuickSqliteClient","dbVersion","dbName","DB_NAME","dbLocation","DB_LOCATION","getDbVersion","setDbVersion","version","isQuickSqliteV4","executeSql","openDB","QuickSqliteClient_v4","open","execute","console","error","closeDB","close","executeSqlBatch","queries","length","executeBatch","Error","query","params","rows","_array","dropTables","Object","keys","tables","map","table","deleteDatabase","initializeDatabase","undefined","warn","getUserPragmaVersion","updateUserPragmaVersion","q","reduce","queriesSoFar","tableName","push","result","user_version","resetDB"],"mappings":"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","sourcesContent":["/* eslint-disable no-underscore-dangle */\nimport type { QuickSQLite } from 'react-native-quick-sqlite';\nlet sqlite: typeof QuickSQLite;\n\ntry {\n sqlite = require('react-native-quick-sqlite').QuickSQLite;\n} catch (e) {\n // Failed for one of the reason\n // 1. Running on expo, where we don't support offline storage yet.\n // 2. Offline support is disabled, in which case this library is not installed.\n}\n\nimport { DB_LOCATION, DB_NAME } from './constants';\nimport { QuickSqliteClient_v4 } from './QuickSqliteClient_v4';\nimport { tables } from './schema';\nimport { createCreateTableQuery } from './sqlite-utils/createCreateTableQuery';\nimport type { PreparedQueries, Table } from './types';\n\n/**\n * QuickSqliteClient takes care of any direct interaction with sqlite.\n * This way usage react-native-quick-sqlite package is scoped to a single class/file.\n *\n * TODO: Drop the support for v4 of react-native-quick-sqlite in the next major release.\n */\nexport class QuickSqliteClient {\n static dbVersion = 3;\n\n static dbName = DB_NAME;\n static dbLocation = DB_LOCATION;\n\n static getDbVersion = () => this.dbVersion;\n // Force a specific db version. This is mainly useful for testsuit.\n static setDbVersion = (version: number) => (this.dbVersion = version);\n\n // @ts-ignore\n static isQuickSqliteV4 = sqlite.executeSql ? true : false;\n\n // print if legacy version\n static openDB = () => {\n if (this.isQuickSqliteV4) {\n QuickSqliteClient_v4.openDB();\n return;\n }\n\n try {\n sqlite.open(this.dbName, this.dbLocation);\n sqlite.execute(this.dbName, `PRAGMA foreign_keys = ON`, []);\n } catch (e) {\n console.error(`Error opening database ${this.dbName}: ${e}`);\n }\n };\n\n static closeDB = () => {\n if (this.isQuickSqliteV4) {\n QuickSqliteClient_v4.closeDB();\n return;\n }\n\n try {\n sqlite.close(this.dbName);\n } catch (e) {\n console.error(`Error closing database ${this.dbName}: ${e}`);\n }\n };\n\n static executeSqlBatch = (queries: PreparedQueries[]) => {\n if (!queries || !queries.length) return;\n\n if (this.isQuickSqliteV4) {\n QuickSqliteClient_v4.executeSqlBatch(queries);\n return;\n }\n\n this.openDB();\n try {\n sqlite.executeBatch(DB_NAME, queries);\n\n this.closeDB();\n } catch (e) {\n this.closeDB();\n throw new Error(`Query/queries failed: ${e}`);\n }\n };\n\n static executeSql = (query: string, params?: string[]) => {\n if (this.isQuickSqliteV4) {\n return QuickSqliteClient_v4.executeSql(query, params);\n }\n\n try {\n this.openDB();\n const { rows } = sqlite.execute(DB_NAME, query, params);\n this.closeDB();\n\n return rows ? rows._array : [];\n } catch (e) {\n this.closeDB();\n throw new Error(`Query/queries failed: ${e}: `);\n }\n };\n\n static dropTables = () => {\n const queries: PreparedQueries[] = Object.keys(tables).map((table) => [\n `DROP TABLE IF EXISTS ${table}`,\n [],\n ]);\n\n this.executeSqlBatch(queries);\n };\n\n static deleteDatabase = () => {\n if (this.isQuickSqliteV4) {\n return QuickSqliteClient_v4.deleteDatabase();\n }\n\n try {\n sqlite.delete(this.dbName, this.dbLocation);\n } catch (e) {\n throw new Error(`Error deleting DB: ${e}`);\n }\n\n return true;\n };\n\n static initializeDatabase = () => {\n // @ts-ignore\n if (sqlite === undefined) {\n throw new Error(\n 'Please install \"react-native-quick-sqlite\" package to enable offline support',\n );\n }\n\n if (this.isQuickSqliteV4) {\n console.warn(\n 'You seem to be using an older version of \"react-native-quick-sqlite\" dependency,',\n 'and we are going to drop support for it in the next major release.',\n 'Please upgrade to the version v5 of \"react-native-quick-sqlite\" to avoid any issues.',\n );\n }\n\n const version = this.getUserPragmaVersion();\n\n if (version !== this.dbVersion) {\n this.dropTables();\n this.updateUserPragmaVersion(this.dbVersion);\n }\n const q = (Object.keys(tables) as Table[]).reduce<PreparedQueries[]>(\n (queriesSoFar, tableName) => {\n queriesSoFar.push(...createCreateTableQuery(tableName));\n return queriesSoFar;\n },\n [],\n );\n\n this.executeSqlBatch(q);\n };\n\n static updateUserPragmaVersion = (version: number) => {\n if (this.isQuickSqliteV4) {\n QuickSqliteClient_v4.updateUserPragmaVersion(version);\n return;\n }\n\n this.openDB();\n sqlite.execute(DB_NAME, `PRAGMA user_version = ${version}`, []);\n this.closeDB();\n };\n\n static getUserPragmaVersion = () => {\n if (this.isQuickSqliteV4) {\n return QuickSqliteClient_v4.getUserPragmaVersion();\n }\n\n this.openDB();\n try {\n const { rows } = sqlite.execute(DB_NAME, `PRAGMA user_version`, []);\n const result = rows ? rows._array : [];\n this.closeDB();\n return result[0].user_version as number;\n } catch (e) {\n this.closeDB();\n throw new Error(`Querying for user_version failed: ${e}`);\n }\n };\n\n static resetDB = () => {\n this.dropTables();\n this.initializeDatabase();\n };\n}\n"]}
1
+ {"version":3,"sources":["QuickSqliteClient.ts"],"names":["sqlite","require","QuickSQLite","e","QuickSqliteClient","dbVersion","dbName","DB_NAME","dbLocation","DB_LOCATION","getDbVersion","setDbVersion","version","isQuickSqliteV4","executeSql","openDB","QuickSqliteClient_v4","open","execute","console","error","closeDB","close","executeSqlBatch","queries","length","executeBatch","Error","query","params","rows","_array","dropTables","Object","keys","tables","map","table","deleteDatabase","initializeDatabase","undefined","warn","getUserPragmaVersion","updateUserPragmaVersion","q","reduce","queriesSoFar","tableName","push","result","user_version","resetDB"],"mappings":"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","sourcesContent":["/* eslint-disable no-underscore-dangle */\nimport type { QuickSQLite } from 'react-native-quick-sqlite';\nlet sqlite: typeof QuickSQLite;\n\ntry {\n sqlite = require('react-native-quick-sqlite').QuickSQLite;\n} catch (e) {\n // Failed for one of the reason\n // 1. Running on expo, where we don't support offline storage yet.\n // 2. Offline support is disabled, in which case this library is not installed.\n}\n\nimport { DB_LOCATION, DB_NAME } from './constants';\nimport { QuickSqliteClient_v4 } from './QuickSqliteClient_v4';\nimport { tables } from './schema';\nimport { createCreateTableQuery } from './sqlite-utils/createCreateTableQuery';\nimport type { PreparedQueries, Table } from './types';\n\n/**\n * QuickSqliteClient takes care of any direct interaction with sqlite.\n * This way usage react-native-quick-sqlite package is scoped to a single class/file.\n *\n * TODO: Drop the support for v4 of react-native-quick-sqlite in the next major release.\n */\nexport class QuickSqliteClient {\n static dbVersion = 3;\n\n static dbName = DB_NAME;\n static dbLocation = DB_LOCATION;\n\n static getDbVersion = () => this.dbVersion;\n // Force a specific db version. This is mainly useful for testsuit.\n static setDbVersion = (version: number) => (this.dbVersion = version);\n\n // @ts-ignore\n static isQuickSqliteV4 = sqlite?.executeSql ? true : false;\n\n // print if legacy version\n static openDB = () => {\n if (this.isQuickSqliteV4) {\n QuickSqliteClient_v4.openDB();\n return;\n }\n\n try {\n sqlite.open(this.dbName, this.dbLocation);\n sqlite.execute(this.dbName, `PRAGMA foreign_keys = ON`, []);\n } catch (e) {\n console.error(`Error opening database ${this.dbName}: ${e}`);\n }\n };\n\n static closeDB = () => {\n if (this.isQuickSqliteV4) {\n QuickSqliteClient_v4.closeDB();\n return;\n }\n\n try {\n sqlite.close(this.dbName);\n } catch (e) {\n console.error(`Error closing database ${this.dbName}: ${e}`);\n }\n };\n\n static executeSqlBatch = (queries: PreparedQueries[]) => {\n if (!queries || !queries.length) return;\n\n if (this.isQuickSqliteV4) {\n QuickSqliteClient_v4.executeSqlBatch(queries);\n return;\n }\n\n this.openDB();\n try {\n sqlite.executeBatch(DB_NAME, queries);\n\n this.closeDB();\n } catch (e) {\n this.closeDB();\n throw new Error(`Query/queries failed: ${e}`);\n }\n };\n\n static executeSql = (query: string, params?: string[]) => {\n if (this.isQuickSqliteV4) {\n return QuickSqliteClient_v4.executeSql(query, params);\n }\n\n try {\n this.openDB();\n const { rows } = sqlite.execute(DB_NAME, query, params);\n this.closeDB();\n\n return rows ? rows._array : [];\n } catch (e) {\n this.closeDB();\n throw new Error(`Query/queries failed: ${e}: `);\n }\n };\n\n static dropTables = () => {\n const queries: PreparedQueries[] = Object.keys(tables).map((table) => [\n `DROP TABLE IF EXISTS ${table}`,\n [],\n ]);\n\n this.executeSqlBatch(queries);\n };\n\n static deleteDatabase = () => {\n if (this.isQuickSqliteV4) {\n return QuickSqliteClient_v4.deleteDatabase();\n }\n\n try {\n sqlite.delete(this.dbName, this.dbLocation);\n } catch (e) {\n throw new Error(`Error deleting DB: ${e}`);\n }\n\n return true;\n };\n\n static initializeDatabase = () => {\n // @ts-ignore\n if (sqlite === undefined) {\n throw new Error(\n 'Please install \"react-native-quick-sqlite\" package to enable offline support',\n );\n }\n\n if (this.isQuickSqliteV4) {\n console.warn(\n 'You seem to be using an older version of \"react-native-quick-sqlite\" dependency,',\n 'and we are going to drop support for it in the next major release.',\n 'Please upgrade to the version v5 of \"react-native-quick-sqlite\" to avoid any issues.',\n );\n }\n\n const version = this.getUserPragmaVersion();\n\n if (version !== this.dbVersion) {\n this.dropTables();\n this.updateUserPragmaVersion(this.dbVersion);\n }\n const q = (Object.keys(tables) as Table[]).reduce<PreparedQueries[]>(\n (queriesSoFar, tableName) => {\n queriesSoFar.push(...createCreateTableQuery(tableName));\n return queriesSoFar;\n },\n [],\n );\n\n this.executeSqlBatch(q);\n };\n\n static updateUserPragmaVersion = (version: number) => {\n if (this.isQuickSqliteV4) {\n QuickSqliteClient_v4.updateUserPragmaVersion(version);\n return;\n }\n\n this.openDB();\n sqlite.execute(DB_NAME, `PRAGMA user_version = ${version}`, []);\n this.closeDB();\n };\n\n static getUserPragmaVersion = () => {\n if (this.isQuickSqliteV4) {\n return QuickSqliteClient_v4.getUserPragmaVersion();\n }\n\n this.openDB();\n try {\n const { rows } = sqlite.execute(DB_NAME, `PRAGMA user_version`, []);\n const result = rows ? rows._array : [];\n this.closeDB();\n return result[0].user_version as number;\n } catch (e) {\n this.closeDB();\n throw new Error(`Querying for user_version failed: ${e}`);\n }\n };\n\n static resetDB = () => {\n this.dropTables();\n this.initializeDatabase();\n };\n}\n"]}
@@ -83,7 +83,7 @@ DBSyncManager.init = function () {
83
83
  switch (_context.prev = _context.next) {
84
84
  case 0:
85
85
  if (!event.online) {
86
- _context.next = 6;
86
+ _context.next = 7;
87
87
  break;
88
88
  }
89
89
 
@@ -91,18 +91,20 @@ DBSyncManager.init = function () {
91
91
  return DBSyncManager.syncAndExecutePendingTasks();
92
92
 
93
93
  case 3:
94
+ DBSyncManager.syncStatus = true;
94
95
  DBSyncManager.listeners.forEach(function (l) {
95
96
  return l(true);
96
97
  });
97
- _context.next = 7;
98
+ _context.next = 9;
98
99
  break;
99
100
 
100
- case 6:
101
+ case 7:
102
+ DBSyncManager.syncStatus = false;
101
103
  DBSyncManager.listeners.forEach(function (l) {
102
104
  return l(false);
103
105
  });
104
106
 
105
- case 7:
107
+ case 9:
106
108
  case "end":
107
109
  return _context.stop();
108
110
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["DBSyncManager.ts"],"names":["restBeforeNextTask","Promise","resolve","setTimeout","DBSyncManager","syncStatus","listeners","client","getSyncStatus","init","user","id","wsConnection","isHealthy","syncAndExecutePendingTasks","forEach","l","on","event","online","onSyncStatusChange","listener","push","unsubscribe","filter","el","sync","lastSyncedAt","currentUserId","cids","Date","toISOString","result","queries","events","reduce","concat","length","QuickSqliteClient","executeSqlBatch","resetDB","toString","executePendingTasks","queueTask","task","removeFromApi","executeTask","response","data","code","channel","channelType","channelId","type","sendReaction","payload","deleteReaction","deleteMessage","Error","queue","dropPendingTasks","conditions","tasks"],"mappings":";;;;;;;;;;;;;;;;;AAGA;;AACA;;AAEA;;AAEA;;AACA;;AACA;;;;;;;;AAsBA,IAAMA,kBAAkB,GAAG,SAArBA,kBAAqB;AAAA,SAAM,IAAIC,OAAJ,CAAY,UAACC,OAAD;AAAA,WAAaC,UAAU,CAACD,OAAD,EAAU,GAAV,CAAvB;AAAA,GAAZ,CAAN;AAAA,CAA3B;;IAEaE,a;;;;AAAAA,a,CACJC,U,GAAa,K;AADTD,a,CAEJE,S,GAA8C,E;AAF1CF,a,CAGJG,M,GAA4B,I;;AAHxBH,a,CASJI,a,GAAgB;AAAA,SATZJ,aASkB,CAAKC,UAAX;AAAA,C;;AATZD,a,CAiBJK,I;6EAAO,kBAAOF,MAAP;AAAA;;AAAA;AAAA;AAAA;AAAA;AAjBHH,YAAAA,aAkBT,CAAKG,MAAL,GAAcA,MAAd;;AADY,kBAKR,gBAAAA,MAAM,CAACG,IAAP,0BAAaC,EAAb,4BAAmBJ,MAAM,CAACK,YAA1B,aAAmB,qBAAqBC,SALhC;AAAA;AAAA;AAAA;;AAAA;AAAA,mBAjBHT,aAuBD,CAAKU,0BAAL,EANI;;AAAA;AAjBHV,YAAAA,aAwBP,CAAKC,UAAL,GAAkB,IAAlB;AAxBOD,YAAAA,aAyBP,CAAKE,SAAL,CAAeS,OAAf,CAAuB,UAACC,CAAD;AAAA,qBAAOA,CAAC,CAAC,IAAD,CAAR;AAAA,aAAvB;;AARU;AAjBHZ,YAAAA,aA4BT,CAAKG,MAAL,CAAYU,EAAZ,CAAe,oBAAf;AAAA,0FAAqC,iBAAOC,KAAP;AAAA;AAAA;AAAA;AAAA;AAAA,6BAC/BA,KAAK,CAACC,MADyB;AAAA;AAAA;AAAA;;AAAA;AAAA,+BA5B5Bf,aA8BC,CAAKU,0BAAL,EAF2B;;AAAA;AA5B5BV,wBAAAA,aA+BL,CAAKE,SAAL,CAAeS,OAAf,CAAuB,UAACC,CAAD;AAAA,iCAAOA,CAAC,CAAC,IAAD,CAAR;AAAA,yBAAvB;AAHiC;AAAA;;AAAA;AA5B5BZ,wBAAAA,aAiCL,CAAKE,SAAL,CAAeS,OAAf,CAAuB,UAACC,CAAD;AAAA,iCAAOA,CAAC,CAAC,KAAD,CAAR;AAAA,yBAAvB;;AALiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAArC;;AAAA;AAAA;AAAA;AAAA;;AAXY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;;;;AAjBHZ,a,CA4CJgB,kB,GAAqB,UAACC,QAAD,EAAyC;AA5C1DjB,EAAAA,aA6CT,CAAKE,SAAL,CAAegB,IAAf,CAAoBD,QAApB;AAEA,SAAO;AACLE,IAAAA,WAAW,EAAE,uBAAM;AAhDZnB,MAAAA,aAiDL,CAAKE,SAAL,GAjDKF,aAiDY,CAAKE,SAAL,CAAekB,MAAf,CAAsB,UAACC,EAAD;AAAA,eAAQA,EAAE,KAAKJ,QAAf;AAAA,OAAtB,CAAjB;AACD;AAHI,GAAP;AAKD,C;;AApDUjB,a,CAsDJsB,I,mEAAO;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uCAtDHtB,aAuDJ,CAAKG,MADE,aACP,sBAAaG,IADN;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAGNiB,UAAAA,YAHM,GAGS,2BAAgB;AACnCC,YAAAA,aAAa,EA1DNxB,aA0DQ,CAAKG,MAAL,CAAYG,IAAZ,CAAiBC;AADG,WAAhB,CAHT;AAMNkB,UAAAA,IANM,GAMC,6BAND;;AAAA,eAQRF,YARQ;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,iBAtDHvB,aAgEgB,CAAKG,MAAL,CAAYmB,IAAZ,CAAiBG,IAAjB,EAAuB,IAAIC,IAAJ,CAASH,YAAT,EAAuBI,WAAvB,EAAvB,CAVb;;AAAA;AAUFC,UAAAA,MAVE;AAWFC,UAAAA,OAXE,GAWQD,MAAM,CAACE,MAAP,CAAcC,MAAd,CAAwC,UAACF,OAAD,EAAUf,KAAV,EAAoB;AAC1Ee,YAAAA,OAAO,GAAGA,OAAO,CAACG,MAAR,CAAe,8CAAoBlB,KAApB,EAA2B,KAA3B,CAAf,CAAV;AACA,mBAAOe,OAAP;AACD,WAHe,EAGb,EAHa,CAXR;;AAgBR,cAAIA,OAAO,CAACI,MAAZ,EAAoB;AAClBC,iDAAkBC,eAAlB,CAAkCN,OAAlC;AACD;;AAlBO;AAAA;;AAAA;AAAA;AAAA;;AAsBRK,+CAAkBE,OAAlB;;AAtBQ;AAyBZ,wCAAmB;AACjBZ,YAAAA,aAAa,EAhFNxB,aAgFQ,CAAKG,MAAL,CAAYG,IAAZ,CAAiBC,EADf;AAEjBgB,YAAAA,YAAY,EAAE,IAAIG,IAAJ,GAAWW,QAAX;AAFG,WAAnB;;AAzBY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,C;AAtDHrC,a,CAqFJU,0B,mEAA6B;AAAA;AAAA;AAAA;AAAA;AAAA,cArFzBV,aAsFJ,CAAKG,MADwB;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA,iBArFzBH,aAwFH,CAAKsC,mBAAL,CAxFGtC,aAwFsB,CAAKG,MAA9B,CAH4B;;AAAA;AAAA;AAAA,iBArFzBH,aAyFH,CAAKsB,IAAL,EAJ4B;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,C;;AArFzBtB,a,CA4FJuC,S;8EAAY;AAAA;;AAAA;AAAA;AAAA;AAAA;AAGjBpC,YAAAA,MAHiB,SAGjBA,MAHiB,EAIjBqC,IAJiB,SAIjBA,IAJiB;AASXC,YAAAA,aATW,GASK,oCAAeD,IAAf,CATL;AAAA;AAAA;AAAA,mBA5FRxC,aAyGU,CAAK0C,WAAL,CAAqC;AAAEvC,cAAAA,MAAM,EAANA,MAAF;AAAUqC,cAAAA,IAAI,EAAJA;AAAV,aAArC,CAbF;;AAAA;AAafG,YAAAA,QAbe;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA,kBAeX,2DAAqCA,QAArC,iDAA+CC,IAA/C,oCAAqDC,IAArD,MAA8D,CAfnD;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAuBjBJ,YAAAA,aAAa;AAvBI,8CAyBVE,QAzBU;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;;;;AA5FR3C,a,CAwHJ0C,W;8EAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAGnBvC,YAAAA,MAHmB,SAGnBA,MAHmB,EAInBqC,IAJmB,SAInBA,IAJmB;AASbM,YAAAA,OATa,GASH3C,MAAM,CAAC2C,OAAP,CAAeN,IAAI,CAACO,WAApB,EAAiCP,IAAI,CAACQ,SAAtC,CATG;;AAAA,kBAWfR,IAAI,CAACS,IAAL,KAAc,eAXC;AAAA;AAAA;AAAA;;AAAA;AAAA,mBAYJH,OAAO,CAACI,YAAR,OAAAJ,OAAO,sCAAiBN,IAAI,CAACW,OAAtB,EAZH;;AAAA;AAAA;;AAAA;AAAA,kBAefX,IAAI,CAACS,IAAL,KAAc,iBAfC;AAAA;AAAA;AAAA;;AAAA;AAAA,mBAgBJH,OAAO,CAACM,cAAR,OAAAN,OAAO,sCAAmBN,IAAI,CAACW,OAAxB,EAhBH;;AAAA;AAAA;;AAAA;AAAA,kBAmBfX,IAAI,CAACS,IAAL,KAAc,gBAnBC;AAAA;AAAA;AAAA;;AAAA;AAAA,mBAoBJ9C,MAAM,CAACkD,aAAP,OAAAlD,MAAM,sCAAkBqC,IAAI,CAACW,OAAvB,EApBF;;AAAA;AAAA;;AAAA;AAAA,kBAuBb,IAAIG,KAAJ,CAAU,mBAAV,CAvBa;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;;;;AAxHVtD,a,CAkJJsC,mB;8EAAsB,kBAG3BnC,MAH2B;AAAA;;AAAA;AAAA;AAAA;AAAA;AAKrBoD,YAAAA,KALqB,GAKb,uCALa;AAAA,wDAMRA,KANQ;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAMhBf,YAAAA,IANgB;;AAAA,gBAOpBA,IAAI,CAACjC,EAPe;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA,mBAlJlBP,aA4JC,CAAK0C,WAAL,CAAqC;AACzCvC,cAAAA,MAAM,EAANA,MADyC;AAEzCqC,cAAAA,IAAI,EAAJA;AAFyC,aAArC,CAViB;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA,kBAenB,4DAAqCG,QAArC,mDAA+CC,IAA/C,qCAAqDC,IAArD,MAA8D,CAf3C;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAuBzB,sDAAkB;AAChBtC,cAAAA,EAAE,EAAEiC,IAAI,CAACjC;AADO,aAAlB;AAvByB;AAAA,mBA0BnBX,kBAAkB,EA1BC;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;;;;AAlJlBI,a,CAgLJwD,gB,GAAmB,UAACC,UAAD,EAAuC;AAC/D,MAAMC,KAAK,GAAG,sCAAgBD,UAAhB,CAAd;;AAEA,wDAAmBC,KAAnB,2CAA0B;AAAA,QAAflB,IAAe;AACxB,QAAI,CAACA,IAAI,CAACjC,EAAV,EAAc;AAEd,8CAAkB;AAChBA,MAAAA,EAAE,EAAEiC,IAAI,CAACjC;AADO,KAAlB;AAGD;AACF,C","sourcesContent":["import type { AxiosError } from 'axios';\nimport type { APIErrorResponse, StreamChat } from 'stream-chat';\n\nimport { handleEventToSyncDB } from '../components/Chat/hooks/handleEventToSyncDB';\nimport { getAllChannelIds, getLastSyncedAt, upsertLastSyncedAt } from '../store/apis';\n\nimport { addPendingTask } from '../store/apis/addPendingTask';\n\nimport { deletePendingTask } from '../store/apis/deletePendingTask';\nimport { getPendingTasks } from '../store/apis/getPendingTasks';\nimport { QuickSqliteClient } from '../store/QuickSqliteClient';\nimport type { PendingTask, PreparedQueries } from '../store/types';\nimport type { DefaultStreamChatGenerics } from '../types/types';\n/**\n * DBSyncManager has the responsibility to sync the channel states\n * within local database whenever possible.\n *\n * Components can get the current sync status using DBSyncManager.getCurrentStatus().\n * Or components can attach a listener for status change as following:\n *\n * ```tsx\n * useEffect(() => {\n * const unsubscribe = DBSyncManager.onSyncStatusChange((syncStatus) => {\n * if (syncStatus) {\n * doSomething();\n * }\n * })\n *\n * return () => unsubscribe();\n * })\n * ```\n */\nconst restBeforeNextTask = () => new Promise((resolve) => setTimeout(resolve, 500));\n\nexport class DBSyncManager {\n static syncStatus = false;\n static listeners: Array<(status: boolean) => void> = [];\n static client: StreamChat | null = null;\n\n /**\n * Returns weather channel states in local DB are synced with backend or not.\n * @returns boolean\n */\n static getSyncStatus = () => this.syncStatus;\n\n /**\n * Initializes the DBSyncManager. This function should be called only once\n * throughout the lifetime of SDK.\n *\n * @param client\n */\n static init = async (client: StreamChat) => {\n this.client = client;\n // If the websocket connection is already active, then straightaway\n // call the sync api and also execute pending api calls.\n // Otherwise wait for `connection.changed` event.\n if (client.user?.id && client.wsConnection?.isHealthy) {\n await this.syncAndExecutePendingTasks();\n this.syncStatus = true;\n this.listeners.forEach((l) => l(true));\n }\n\n this.client.on('connection.changed', async (event) => {\n if (event.online) {\n await this.syncAndExecutePendingTasks();\n this.listeners.forEach((l) => l(true));\n } else {\n this.listeners.forEach((l) => l(false));\n }\n });\n };\n\n /**\n * Subscribes a listener for sync status change.\n *\n * @param listener {function}\n * @returns {function} to unsubscribe the listener.\n */\n static onSyncStatusChange = (listener: (status: boolean) => void) => {\n this.listeners.push(listener);\n\n return {\n unsubscribe: () => {\n this.listeners = this.listeners.filter((el) => el !== listener);\n },\n };\n };\n\n static sync = async () => {\n if (!this.client?.user) return;\n\n const lastSyncedAt = getLastSyncedAt({\n currentUserId: this.client.user.id,\n });\n const cids = getAllChannelIds();\n\n if (lastSyncedAt) {\n try {\n const result = await this.client.sync(cids, new Date(lastSyncedAt).toISOString());\n const queries = result.events.reduce<PreparedQueries[]>((queries, event) => {\n queries = queries.concat(handleEventToSyncDB(event, false));\n return queries;\n }, []);\n\n if (queries.length) {\n QuickSqliteClient.executeSqlBatch(queries);\n }\n } catch (e) {\n // Error will be raised by the sync API if there are too many events.\n // In that case reset the entire DB and start fresh.\n QuickSqliteClient.resetDB();\n }\n }\n upsertLastSyncedAt({\n currentUserId: this.client.user.id,\n lastSyncedAt: new Date().toString(),\n });\n };\n\n static syncAndExecutePendingTasks = async () => {\n if (!this.client) return;\n\n await this.executePendingTasks(this.client);\n await this.sync();\n };\n\n static queueTask = async <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n >({\n client,\n task,\n }: {\n client: StreamChat<StreamChatGenerics>;\n task: PendingTask;\n }) => {\n const removeFromApi = addPendingTask(task);\n\n let response;\n try {\n response = await this.executeTask<StreamChatGenerics>({ client, task });\n } catch (e) {\n if ((e as AxiosError<APIErrorResponse>)?.response?.data?.code === 4) {\n // Error code 16 - message already exists\n // ignore\n } else {\n throw e;\n }\n }\n\n removeFromApi();\n\n return response;\n };\n\n static executeTask = async <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n >({\n client,\n task,\n }: {\n client: StreamChat<StreamChatGenerics>;\n task: PendingTask;\n }) => {\n const channel = client.channel(task.channelType, task.channelId);\n\n if (task.type === 'send-reaction') {\n return await channel.sendReaction(...task.payload);\n }\n\n if (task.type === 'delete-reaction') {\n return await channel.deleteReaction(...task.payload);\n }\n\n if (task.type === 'delete-message') {\n return await client.deleteMessage(...task.payload);\n }\n\n throw new Error('Invalid task type');\n };\n\n static executePendingTasks = async <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n >(\n client: StreamChat<StreamChatGenerics>,\n ) => {\n const queue = getPendingTasks();\n for (const task of queue) {\n if (!task.id) continue;\n\n try {\n await this.executeTask<StreamChatGenerics>({\n client,\n task,\n });\n } catch (e) {\n if ((e as AxiosError<APIErrorResponse>)?.response?.data?.code === 4) {\n // Error code 16 - message already exists\n // ignore\n } else {\n throw e;\n }\n }\n\n deletePendingTask({\n id: task.id,\n });\n await restBeforeNextTask();\n }\n };\n\n static dropPendingTasks = (conditions: { messageId: string }) => {\n const tasks = getPendingTasks(conditions);\n\n for (const task of tasks) {\n if (!task.id) continue;\n\n deletePendingTask({\n id: task.id,\n });\n }\n };\n}\n"]}
1
+ {"version":3,"sources":["DBSyncManager.ts"],"names":["restBeforeNextTask","Promise","resolve","setTimeout","DBSyncManager","syncStatus","listeners","client","getSyncStatus","init","user","id","wsConnection","isHealthy","syncAndExecutePendingTasks","forEach","l","on","event","online","onSyncStatusChange","listener","push","unsubscribe","filter","el","sync","lastSyncedAt","currentUserId","cids","Date","toISOString","result","queries","events","reduce","concat","length","QuickSqliteClient","executeSqlBatch","resetDB","toString","executePendingTasks","queueTask","task","removeFromApi","executeTask","response","data","code","channel","channelType","channelId","type","sendReaction","payload","deleteReaction","deleteMessage","Error","queue","dropPendingTasks","conditions","tasks"],"mappings":"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","sourcesContent":["import type { AxiosError } from 'axios';\nimport type { APIErrorResponse, StreamChat } from 'stream-chat';\n\nimport { handleEventToSyncDB } from '../components/Chat/hooks/handleEventToSyncDB';\nimport { getAllChannelIds, getLastSyncedAt, upsertLastSyncedAt } from '../store/apis';\n\nimport { addPendingTask } from '../store/apis/addPendingTask';\n\nimport { deletePendingTask } from '../store/apis/deletePendingTask';\nimport { getPendingTasks } from '../store/apis/getPendingTasks';\nimport { QuickSqliteClient } from '../store/QuickSqliteClient';\nimport type { PendingTask, PreparedQueries } from '../store/types';\nimport type { DefaultStreamChatGenerics } from '../types/types';\n/**\n * DBSyncManager has the responsibility to sync the channel states\n * within local database whenever possible.\n *\n * Components can get the current sync status using DBSyncManager.getCurrentStatus().\n * Or components can attach a listener for status change as following:\n *\n * ```tsx\n * useEffect(() => {\n * const unsubscribe = DBSyncManager.onSyncStatusChange((syncStatus) => {\n * if (syncStatus) {\n * doSomething();\n * }\n * })\n *\n * return () => unsubscribe();\n * })\n * ```\n */\nconst restBeforeNextTask = () => new Promise((resolve) => setTimeout(resolve, 500));\n\nexport class DBSyncManager {\n static syncStatus = false;\n static listeners: Array<(status: boolean) => void> = [];\n static client: StreamChat | null = null;\n\n /**\n * Returns weather channel states in local DB are synced with backend or not.\n * @returns boolean\n */\n static getSyncStatus = () => this.syncStatus;\n\n /**\n * Initializes the DBSyncManager. This function should be called only once\n * throughout the lifetime of SDK.\n *\n * @param client\n */\n static init = async (client: StreamChat) => {\n this.client = client;\n // If the websocket connection is already active, then straightaway\n // call the sync api and also execute pending api calls.\n // Otherwise wait for `connection.changed` event.\n if (client.user?.id && client.wsConnection?.isHealthy) {\n await this.syncAndExecutePendingTasks();\n this.syncStatus = true;\n this.listeners.forEach((l) => l(true));\n }\n\n this.client.on('connection.changed', async (event) => {\n if (event.online) {\n await this.syncAndExecutePendingTasks();\n this.syncStatus = true;\n this.listeners.forEach((l) => l(true));\n } else {\n this.syncStatus = false;\n this.listeners.forEach((l) => l(false));\n }\n });\n };\n\n /**\n * Subscribes a listener for sync status change.\n *\n * @param listener {function}\n * @returns {function} to unsubscribe the listener.\n */\n static onSyncStatusChange = (listener: (status: boolean) => void) => {\n this.listeners.push(listener);\n\n return {\n unsubscribe: () => {\n this.listeners = this.listeners.filter((el) => el !== listener);\n },\n };\n };\n\n static sync = async () => {\n if (!this.client?.user) return;\n\n const lastSyncedAt = getLastSyncedAt({\n currentUserId: this.client.user.id,\n });\n const cids = getAllChannelIds();\n\n if (lastSyncedAt) {\n try {\n const result = await this.client.sync(cids, new Date(lastSyncedAt).toISOString());\n const queries = result.events.reduce<PreparedQueries[]>((queries, event) => {\n queries = queries.concat(handleEventToSyncDB(event, false));\n return queries;\n }, []);\n\n if (queries.length) {\n QuickSqliteClient.executeSqlBatch(queries);\n }\n } catch (e) {\n // Error will be raised by the sync API if there are too many events.\n // In that case reset the entire DB and start fresh.\n QuickSqliteClient.resetDB();\n }\n }\n upsertLastSyncedAt({\n currentUserId: this.client.user.id,\n lastSyncedAt: new Date().toString(),\n });\n };\n\n static syncAndExecutePendingTasks = async () => {\n if (!this.client) return;\n\n await this.executePendingTasks(this.client);\n await this.sync();\n };\n\n static queueTask = async <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n >({\n client,\n task,\n }: {\n client: StreamChat<StreamChatGenerics>;\n task: PendingTask;\n }) => {\n const removeFromApi = addPendingTask(task);\n\n let response;\n try {\n response = await this.executeTask<StreamChatGenerics>({ client, task });\n } catch (e) {\n if ((e as AxiosError<APIErrorResponse>)?.response?.data?.code === 4) {\n // Error code 16 - message already exists\n // ignore\n } else {\n throw e;\n }\n }\n\n removeFromApi();\n\n return response;\n };\n\n static executeTask = async <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n >({\n client,\n task,\n }: {\n client: StreamChat<StreamChatGenerics>;\n task: PendingTask;\n }) => {\n const channel = client.channel(task.channelType, task.channelId);\n\n if (task.type === 'send-reaction') {\n return await channel.sendReaction(...task.payload);\n }\n\n if (task.type === 'delete-reaction') {\n return await channel.deleteReaction(...task.payload);\n }\n\n if (task.type === 'delete-message') {\n return await client.deleteMessage(...task.payload);\n }\n\n throw new Error('Invalid task type');\n };\n\n static executePendingTasks = async <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n >(\n client: StreamChat<StreamChatGenerics>,\n ) => {\n const queue = getPendingTasks();\n for (const task of queue) {\n if (!task.id) continue;\n\n try {\n await this.executeTask<StreamChatGenerics>({\n client,\n task,\n });\n } catch (e) {\n if ((e as AxiosError<APIErrorResponse>)?.response?.data?.code === 4) {\n // Error code 16 - message already exists\n // ignore\n } else {\n throw e;\n }\n }\n\n deletePendingTask({\n id: task.id,\n });\n await restBeforeNextTask();\n }\n };\n\n static dropPendingTasks = (conditions: { messageId: string }) => {\n const tasks = getPendingTasks(conditions);\n\n for (const task of tasks) {\n if (!task.id) continue;\n\n deletePendingTask({\n id: task.id,\n });\n }\n };\n}\n"]}
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "5.6.0"
2
+ "version": "5.6.1-beta.2"
3
3
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "stream-chat-react-native-core",
3
3
  "description": "The official React Native and Expo components for Stream Chat, a service for building chat applications",
4
- "version": "5.6.0",
4
+ "version": "5.6.1-beta.2",
5
5
  "author": {
6
6
  "company": "Stream.io Inc",
7
7
  "name": "Stream.io Inc"
@@ -33,7 +33,7 @@ export class QuickSqliteClient {
33
33
  static setDbVersion = (version: number) => (this.dbVersion = version);
34
34
 
35
35
  // @ts-ignore
36
- static isQuickSqliteV4 = sqlite.executeSql ? true : false;
36
+ static isQuickSqliteV4 = sqlite?.executeSql ? true : false;
37
37
 
38
38
  // print if legacy version
39
39
  static openDB = () => {
@@ -63,8 +63,10 @@ export class DBSyncManager {
63
63
  this.client.on('connection.changed', async (event) => {
64
64
  if (event.online) {
65
65
  await this.syncAndExecutePendingTasks();
66
+ this.syncStatus = true;
66
67
  this.listeners.forEach((l) => l(true));
67
68
  } else {
69
+ this.syncStatus = false;
68
70
  this.listeners.forEach((l) => l(false));
69
71
  }
70
72
  });
package/src/version.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "5.6.0"
2
+ "version": "5.6.1-beta.2"
3
3
  }