sentry-integration-libsql-client
Version:
Sentry integration for @libsql/client
1 lines • 16.5 kB
Source Map (JSON)
{"version":3,"sources":["/home/runner/work/sentry-integration-libsql-client/sentry-integration-libsql-client/dist/index.cjs","../src/index.ts"],"names":[],"mappings":"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","file":"/home/runner/work/sentry-integration-libsql-client/sentry-integration-libsql-client/dist/index.cjs","sourcesContent":[null,"import {\n Client,\n InStatement,\n ResultSet,\n Transaction,\n TransactionMode,\n} from \"@libsql/client\";\nimport { getStatementType } from \"sqlite-statement-type\";\nimport type { Integration, Span } from \"@sentry/types\";\n\nexport interface LibSQLIntegrationOptions {\n tracing?: boolean;\n breadcrumbs?: boolean;\n errors?: boolean;\n}\n\nconst DEFAULT_OPTIONS: LibSQLIntegrationOptions = {\n tracing: true,\n breadcrumbs: true,\n errors: true,\n};\n\nexport function libsqlIntegration(\n client: Client,\n Sentry: any,\n userOptions: LibSQLIntegrationOptions = {}\n): Integration {\n if (!client || typeof client !== \"object\") {\n throw new Error(\"libSQL `Client` instance is required\");\n }\n\n const options = { ...DEFAULT_OPTIONS, ...userOptions };\n\n return {\n name: \"libSQLIntegration\",\n setupOnce(): void {\n const originalExecute = client.execute;\n\n client.execute = function (stmt: InStatement) {\n const sql = typeof stmt === \"string\" ? stmt : stmt.sql;\n const statementType = getStatementType(sql);\n\n const executeOperation = async (span?: Span) => {\n if (options.breadcrumbs) {\n Sentry.addBreadcrumb({\n category: \"libsql\",\n message: \"Executing SQL statement\",\n data: { sql },\n });\n }\n\n try {\n const result = await originalExecute.call(client, stmt);\n\n if (span) {\n span.setAttribute(\"rows_affected\", result.rowsAffected);\n span.setStatus({ code: 1 });\n }\n\n if (options.breadcrumbs) {\n Sentry.addBreadcrumb({\n category: \"libsql\",\n message: \"SQL statement executed successfully\",\n data: { sql, rowsAffected: result.rowsAffected },\n });\n }\n\n return result;\n } catch (error) {\n if (span) {\n span.setStatus({ code: 2 });\n }\n\n if (options.errors) {\n Sentry.captureException(error);\n }\n\n throw error;\n }\n };\n\n if (options.tracing) {\n return Sentry.startSpan(\n {\n op: `db.${statementType}`,\n name: \"libsql.execute\",\n },\n executeOperation\n );\n } else {\n return executeOperation();\n }\n };\n\n const originalBatch = client.batch;\n client.batch = function (stmts: InStatement[]) {\n const batchOperation = async (parentSpan?: Span) => {\n if (options.breadcrumbs) {\n Sentry.addBreadcrumb({\n category: \"libsql\",\n message: \"Starting batch SQL operation\",\n data: { stmtCount: stmts.length },\n });\n }\n\n try {\n const results = await Sentry.startSpan(\n {\n op: \"db.batch\",\n name: \"libsql.batch\",\n parentSpan: parentSpan,\n },\n async (batchSpan: Span) => {\n const statementResults: ResultSet[] = [];\n\n for (let i = 0; i < stmts.length; i++) {\n const stmt = stmts[i];\n const sql = typeof stmt === \"string\" ? stmt : stmt.sql;\n const statementType = getStatementType(sql);\n\n await Sentry.startSpan(\n {\n op: `db.${statementType}`,\n name: `libsql.batch.statement.${i}`,\n parentSpan: batchSpan,\n },\n async (statementSpan: Span) => {\n try {\n const result = await originalExecute.call(client, stmt);\n statementResults.push(result);\n\n if (statementSpan) {\n statementSpan.setAttribute(\n \"rows_affected\",\n result.rowsAffected\n );\n statementSpan.setStatus({ code: 1 }); // Set success status\n }\n\n if (options.breadcrumbs) {\n Sentry.addBreadcrumb({\n category: \"libsql\",\n message: `Batch statement ${i} executed successfully`,\n data: { sql, rowsAffected: result.rowsAffected },\n });\n }\n } catch (error) {\n if (statementSpan) {\n statementSpan.setStatus({ code: 2 });\n }\n\n if (options.errors) {\n Sentry.captureException(error);\n }\n\n throw error;\n }\n }\n );\n }\n\n return statementResults;\n }\n );\n\n if (parentSpan) {\n parentSpan.setAttribute(\"statements_count\", stmts.length);\n parentSpan.setStatus({ code: 1 }); // Set success status\n }\n\n if (options.breadcrumbs) {\n Sentry.addBreadcrumb({\n category: \"libsql\",\n message: \"Batch SQL operation completed successfully\",\n data: { stmtCount: stmts.length },\n });\n }\n\n return results;\n } catch (error) {\n if (parentSpan) {\n parentSpan.setStatus({ code: 2 });\n }\n\n if (options.errors) {\n Sentry.captureException(error);\n }\n\n throw error;\n }\n };\n\n if (options.tracing) {\n return Sentry.startSpan(\n {\n op: \"db.batch\",\n name: \"libsql.batch\",\n },\n batchOperation\n );\n } else {\n return batchOperation();\n }\n };\n\n const originalTransaction = client.transaction;\n function wrappedTransaction(): Promise<Transaction>;\n function wrappedTransaction(mode: TransactionMode): Promise<Transaction>;\n function wrappedTransaction(\n mode?: TransactionMode\n ): Promise<Transaction> {\n const transactionOperation = async (parentSpan?: Span) => {\n if (options.breadcrumbs) {\n Sentry.addBreadcrumb({\n category: \"libsql\",\n message: \"Starting transaction\",\n data: { mode },\n });\n }\n\n try {\n const transaction =\n mode === undefined\n ? await originalTransaction.call(client)\n : // @ts-expect-error\n await originalTransaction.call(client, mode);\n\n const originalExecute = transaction.execute;\n transaction.execute = function (stmt: InStatement) {\n return client.execute.call(client, stmt);\n };\n\n const originalCommit = transaction.commit;\n transaction.commit = function () {\n const commitOperation = async (span?: Span) => {\n if (options.breadcrumbs) {\n Sentry.addBreadcrumb({\n category: \"libsql\",\n message: \"Committing transaction\",\n });\n }\n\n try {\n const result = await originalCommit.call(transaction);\n\n if (span) {\n span.setStatus({ code: 1 });\n }\n\n if (parentSpan) {\n parentSpan.setStatus({ code: 1 });\n }\n\n if (options.breadcrumbs) {\n Sentry.addBreadcrumb({\n category: \"libsql\",\n message: \"Transaction committed successfully\",\n });\n }\n\n return result;\n } catch (error) {\n if (span) {\n span.setStatus({ code: 2 });\n }\n\n if (parentSpan) {\n parentSpan.setStatus({ code: 2 });\n }\n\n if (options.errors) {\n Sentry.captureException(error);\n }\n\n throw error;\n }\n };\n\n if (options.tracing) {\n return Sentry.startSpan(\n {\n op: \"db.commit\",\n name: \"libsql.transaction.commit\",\n parentSpan,\n },\n commitOperation\n );\n } else {\n return commitOperation();\n }\n };\n\n const originalRollback = transaction.rollback;\n transaction.rollback = function () {\n const rollbackOperation = async (span?: Span) => {\n if (options.breadcrumbs) {\n Sentry.addBreadcrumb({\n category: \"libsql\",\n message: \"Rolling back transaction\",\n });\n }\n\n try {\n const result = await originalRollback.call(transaction);\n\n if (span) {\n span.setStatus({ code: 1 });\n }\n\n if (parentSpan) {\n parentSpan.setStatus({ code: 1 });\n }\n\n if (options.breadcrumbs) {\n Sentry.addBreadcrumb({\n category: \"libsql\",\n message: \"Transaction rolled back successfully\",\n });\n }\n\n return result;\n } catch (error) {\n if (span) {\n span.setStatus({ code: 2 });\n }\n\n if (parentSpan) {\n parentSpan.setStatus({ code: 2 });\n }\n\n if (options.errors) {\n Sentry.captureException(error);\n }\n\n throw error;\n }\n };\n\n if (options.tracing) {\n return Sentry.startSpan(\n {\n op: \"db.rollback\",\n name: \"libsql.transaction.rollback\",\n parentSpan,\n },\n rollbackOperation\n );\n } else {\n return rollbackOperation();\n }\n };\n\n return transaction;\n } catch (error) {\n if (parentSpan) {\n parentSpan.setStatus({ code: 2 });\n }\n\n if (options.errors) {\n Sentry.captureException(error);\n }\n\n throw error;\n }\n };\n\n if (options.tracing) {\n return Sentry.startSpan(\n {\n op: \"db.transaction\",\n name: `libsql.transaction.${mode || \"write\"}`,\n },\n transactionOperation\n );\n } else {\n return transactionOperation();\n }\n }\n\n client.transaction = wrappedTransaction;\n },\n };\n}\n"]}