@@ -9,10 +9,12 @@ import {
99 type StorageServiceOptions ,
1010 Synapse ,
1111 type SynapseOptions ,
12+ type TelemetryConfig ,
1213} from '@filoz/synapse-sdk'
1314import { type Provider as EthersProvider , JsonRpcProvider , type Signer , Wallet , WebSocketProvider } from 'ethers'
1415import type { Logger } from 'pino'
1516import { ADDRESS_ONLY_SIGNER_SYMBOL , AddressOnlySigner } from './address-only-signer.js'
17+ import { getTelemetryConfig } from './telemetry-config.js'
1618
1719const WEBSOCKET_REGEX = / ^ w s ( s ) ? : \/ \/ / i
1820
@@ -62,6 +64,20 @@ interface BaseSynapseConfig {
6264 /** Optional override for WarmStorage contract address */
6365 warmStorageAddress ?: string | undefined
6466 withCDN ?: boolean | undefined
67+ /**
68+ * Telemetry configuration, merges fields, but appends "appName" to the existing appName
69+ * @example
70+ * {
71+ * sentryInitOptions: {
72+ * enabled: true,
73+ * },
74+ * sentrySetTags: {
75+ * appName: "${your-app-name}",
76+ * },
77+ * }
78+ * will result in your appName being "filecoin-pin@v1.0.0-${your-app-name}"
79+ */
80+ telemetry ?: TelemetryConfig
6581}
6682
6783/**
@@ -296,7 +312,11 @@ async function setupSessionKey(synapse: Synapse, sessionWallet: Wallet, logger:
296312 * @param logger - Logger instance for detailed operation tracking
297313 * @returns Initialized Synapse instance
298314 */
299- export async function initializeSynapse ( config : Partial < SynapseSetupConfig > , logger : Logger ) : Promise < Synapse > {
315+ export async function initializeSynapse (
316+ config : Partial < SynapseSetupConfig > ,
317+ logger : Logger ,
318+ telemetryConfig ?: TelemetryConfig
319+ ) : Promise < Synapse > {
300320 try {
301321 const authMode = validateAuthConfig ( config )
302322
@@ -320,6 +340,9 @@ export async function initializeSynapse(config: Partial<SynapseSetupConfig>, log
320340 if ( config . warmStorageAddress ) {
321341 synapseOptions . warmStorageAddress = config . warmStorageAddress
322342 }
343+ if ( telemetryConfig ) {
344+ synapseOptions . telemetry = getTelemetryConfig ( telemetryConfig )
345+ }
323346
324347 let synapse : Synapse
325348
@@ -337,7 +360,10 @@ export async function initializeSynapse(config: Partial<SynapseSetupConfig>, log
337360 const sessionWallet = new Wallet ( config . sessionKey , provider )
338361
339362 // Initialize with owner signer, then activate session key
340- synapse = await Synapse . create ( { ...synapseOptions , signer : ownerSigner } )
363+ synapse = await Synapse . create ( {
364+ ...synapseOptions ,
365+ signer : ownerSigner ,
366+ } )
341367 await setupSessionKey ( synapse , sessionWallet , logger )
342368 } else if ( authMode === 'signer' ) {
343369 // Signer mode - type guard ensures signer is defined
@@ -623,6 +649,11 @@ export async function cleanupProvider(provider: any): Promise<void> {
623649 * and allow the process to terminate
624650 */
625651export async function cleanupSynapseService ( ) : Promise < void > {
652+ // Close telemetry to flush pending events and shutdown cleanly
653+ if ( synapseInstance ) {
654+ await synapseInstance . telemetry ?. sentry ?. close ( )
655+ }
656+
626657 if ( activeProvider ) {
627658 await cleanupProvider ( activeProvider )
628659 }
0 commit comments