From c4514643ebcdd9f4293c621cee0a90fe0cde4bba Mon Sep 17 00:00:00 2001 From: Sambhav Jain <136801346+DarkLord017@users.noreply.github.com> Date: Wed, 10 Dec 2025 19:52:42 +0530 Subject: [PATCH 1/5] feat(sp-registry):add provider filtering --- packages/synapse-sdk/src/sp-registry/index.ts | 1 + .../synapse-sdk/src/sp-registry/service.ts | 42 +++++++++++++++++++ packages/synapse-sdk/src/sp-registry/types.ts | 20 +++++++++ packages/synapse-sdk/src/synapse.ts | 19 +++++++++ packages/synapse-sdk/src/types.ts | 4 +- 5 files changed, 84 insertions(+), 2 deletions(-) diff --git a/packages/synapse-sdk/src/sp-registry/index.ts b/packages/synapse-sdk/src/sp-registry/index.ts index 9bef08df0..cd42f1332 100644 --- a/packages/synapse-sdk/src/sp-registry/index.ts +++ b/packages/synapse-sdk/src/sp-registry/index.ts @@ -8,6 +8,7 @@ export type { PDPOffering, PDPServiceInfo, ProductType, + ProviderFilterOptions, ProviderInfo, ProviderRegistrationInfo, ServiceProduct, diff --git a/packages/synapse-sdk/src/sp-registry/service.ts b/packages/synapse-sdk/src/sp-registry/service.ts index d1481e361..7285f3e16 100644 --- a/packages/synapse-sdk/src/sp-registry/service.ts +++ b/packages/synapse-sdk/src/sp-registry/service.ts @@ -29,7 +29,9 @@ import { getFilecoinNetworkType } from '../utils/index.ts' import type { PDPOffering, PDPServiceInfo, + PRODUCTS, ProductType, + ProviderFilterOptions, ProviderInfo, ProviderRegistrationInfo, ServiceProduct, @@ -447,7 +449,37 @@ export class SPRegistryService { return result } } + /** * Filter providers based on criteria + * @param filter - Filtering options + * @returns Filtered list of providers + */ + async providerFiltering(filter?: ProviderFilterOptions): Promise { + const providers = await this.getAllActiveProviders() + if (!filter) return providers + + const type = filter.type ?? 'PDP' + + const result = providers.filter((p) => { + const product = p.products?.[type] + if (!product) return false + + const d = product.data + + return ( + (!filter.location || (d.location && d.location.toLowerCase().includes(filter.location.toLowerCase()))) && + (filter.minPieceSizeInBytes === undefined || d.maxPieceSizeInBytes >= filter.minPieceSizeInBytes) && + (filter.maxPieceSizeInBytes === undefined || d.minPieceSizeInBytes <= filter.maxPieceSizeInBytes) && + (filter.ipniIpfs === undefined || d.ipniIpfs === filter.ipniIpfs) && + (filter.ipniPiece === undefined || d.ipniPiece === filter.ipniPiece) && + (filter.serviceStatus === undefined || product.capabilities?.serviceStatus === filter.serviceStatus) && + (filter.maxStoragePricePerTibPerDay === undefined || + d.storagePricePerTibPerDay <= filter.maxStoragePricePerTibPerDay) && + (filter.minProvingPeriodInEpochs === undefined || d.minProvingPeriodInEpochs >= filter.minProvingPeriodInEpochs) + ) + }) + return filter.randomize ? this._shuffle(result) : result + } /** * Get providers using Multicall3 for batch efficiency */ @@ -527,6 +559,16 @@ export class SPRegistryService { return providers } + private _shuffle(array: T[]): T[] { + // Fisher-Yates shuffle + const arr = array.slice() + for (let i = arr.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)) + ;[arr[i], arr[j]] = [arr[j], arr[i]] + } + return arr + } + /** * Fallback method to get providers individually */ diff --git a/packages/synapse-sdk/src/sp-registry/types.ts b/packages/synapse-sdk/src/sp-registry/types.ts index 1f192d2a1..83944b171 100644 --- a/packages/synapse-sdk/src/sp-registry/types.ts +++ b/packages/synapse-sdk/src/sp-registry/types.ts @@ -57,3 +57,23 @@ export interface PDPServiceInfo { capabilities: Record // Object map of capability key-value pairs isActive: boolean } + +/** * Options for filtering providers + */ +export interface ProviderFilterOptions { + type?: keyof typeof PRODUCTS // 'PDP' etc. + location?: string + + minPieceSizeInBytes?: number + maxPieceSizeInBytes?: number + + ipniIpfs?: boolean + ipniPiece?: boolean + + serviceStatus?: string // or union type below + + maxStoragePricePerTibPerDay?: number + minProvingPeriodInEpochs?: number + + randomize?: boolean +} diff --git a/packages/synapse-sdk/src/synapse.ts b/packages/synapse-sdk/src/synapse.ts index d75ea417e..68e05c1c0 100644 --- a/packages/synapse-sdk/src/synapse.ts +++ b/packages/synapse-sdk/src/synapse.ts @@ -17,6 +17,7 @@ import type { FilecoinNetworkType, PieceCID, PieceRetriever, + ProviderFilterOptions, ProviderInfo, StorageInfo, StorageServiceOptions, @@ -489,4 +490,22 @@ export class Synapse { console.warn('synapse.getStorageInfo() is deprecated. Use synapse.storage.getStorageInfo() instead.') return await this._storageManager.getStorageInfo() } + + /** + * Get providers with filtering options + * @param filter - Filtering options + * @returns Filtered list of providers + */ + async providerFiltering(filter?: ProviderFilterOptions): Promise { + // Create SPRegistryService + try { + const registryAddress = this._warmStorageService.getServiceProviderRegistryAddress() + const spRegistry = new SPRegistryService(this._provider, registryAddress) + + const providers = await spRegistry.providerFiltering(filter) + return providers + } catch (error) { + throw new Error(`Failed to filter providers: ${error instanceof Error ? error.message : String(error)}`) + } + } } diff --git a/packages/synapse-sdk/src/types.ts b/packages/synapse-sdk/src/types.ts index c7656ce39..9d1a83ed6 100644 --- a/packages/synapse-sdk/src/types.ts +++ b/packages/synapse-sdk/src/types.ts @@ -8,11 +8,11 @@ import type { PieceCID } from '@filoz/synapse-core/piece' import type { ethers } from 'ethers' import type { Hex } from 'viem' -import type { ProviderInfo } from './sp-registry/types.ts' +import type { ProviderFilterOptions, ProviderInfo } from './sp-registry/types.ts' import type { TelemetryConfig } from './telemetry/service.ts' // Re-export PieceCID and ProviderInfo types -export type { PieceCID, ProviderInfo } +export type { PieceCID, ProviderInfo, ProviderFilterOptions } export type PrivateKey = string export type Address = string export type TokenAmount = number | bigint From 6cb556bbe24ac7c2c56e346202bd1831cbdd83ce Mon Sep 17 00:00:00 2001 From: Sambhav Jain <136801346+DarkLord017@users.noreply.github.com> Date: Wed, 10 Dec 2025 20:05:22 +0530 Subject: [PATCH 2/5] use presets to test --- .../src/test/sp-registry-service.test.ts | 39 +++++++++++++++++++ packages/synapse-sdk/src/test/synapse.test.ts | 13 +++++++ 2 files changed, 52 insertions(+) diff --git a/packages/synapse-sdk/src/test/sp-registry-service.test.ts b/packages/synapse-sdk/src/test/sp-registry-service.test.ts index dd8a47847..161322d66 100644 --- a/packages/synapse-sdk/src/test/sp-registry-service.test.ts +++ b/packages/synapse-sdk/src/test/sp-registry-service.test.ts @@ -386,4 +386,43 @@ describe('SPRegistryService', () => { assert.isUndefined(provider?.products.PDP) // Product decoding failed, so no PDP product }) }) + + describe('Provider Filtering', () => { + it('should filter providers by multiple criteria', async () => { + server.use(JSONRPC(presets.basic)) + + // Test location filtering (case-insensitive partial match) + const byLocation = await service.providerFiltering({ location: 'US' }) + assert.equal(byLocation.length, 2) // Both providers have 'US' location + + const byPrice = await service.providerFiltering({ maxStoragePricePerTibPerDay: 999999 }) + assert.equal(byPrice.length, 0) + + // Test piece size filtering + const byPieceSize = await service.providerFiltering({ + minPieceSizeInBytes: Number(SIZE_CONSTANTS.KiB), + maxPieceSizeInBytes: Number(SIZE_CONSTANTS.GiB), + }) + assert.equal(byPieceSize.length, 2) // Both providers support this range + + // Test no filters returns all + const all = await service.providerFiltering() + assert.equal(all.length, 2) + }) + + it('should randomize results when requested', async () => { + server.use(JSONRPC(presets.basic)) + + const results = [] + for (let i = 0; i < 5; i++) { + const filtered = await service.providerFiltering({ randomize: true }) + results.push(filtered.map((p) => p.id)) + } + + // At least one result should have different order (with high probability) + const firstOrder = JSON.stringify(results[0]) + const hasDifferentOrder = results.some((r) => JSON.stringify(r) !== firstOrder) + assert.isTrue(hasDifferentOrder || results[0].length === 1, 'Results should be randomized') + }) + }) }) diff --git a/packages/synapse-sdk/src/test/synapse.test.ts b/packages/synapse-sdk/src/test/synapse.test.ts index c24bbc5d3..1d93404e2 100644 --- a/packages/synapse-sdk/src/test/synapse.test.ts +++ b/packages/synapse-sdk/src/test/synapse.test.ts @@ -1072,4 +1072,17 @@ describe('Synapse', () => { }) }) }) + + describe('Provider Filtering', () => { + it('should filter providers through Synapse class', async () => { + server.use(JSONRPC(presets.basic)) + + const synapse = await Synapse.create({ signer }) + + // Test filtering by location + const filtered = await synapse.providerFiltering({ location: 'US' }) + assert.equal(filtered.length, 2) // Both providers have 'US' location in preset + assert.exists(filtered[0].products.PDP?.data.location) + }) + }) }) From c19de80a2625812bce5216d8f8a4c9557cac1c46 Mon Sep 17 00:00:00 2001 From: Sambhav Jain <136801346+DarkLord017@users.noreply.github.com> Date: Thu, 5 Feb 2026 06:39:51 +0530 Subject: [PATCH 3/5] refactor(sp-registry): extract shuffle util and improve naming/order guarantees --- packages/synapse-core/src/utils/rand.ts | 15 +++++++++++ .../synapse-sdk/src/sp-registry/service.ts | 25 ++++++++----------- packages/synapse-sdk/src/synapse.ts | 4 +-- .../src/test/sp-registry-service.test.ts | 10 ++++---- packages/synapse-sdk/src/test/synapse.test.ts | 2 +- 5 files changed, 33 insertions(+), 23 deletions(-) diff --git a/packages/synapse-core/src/utils/rand.ts b/packages/synapse-core/src/utils/rand.ts index e682615ac..8baaf9310 100644 --- a/packages/synapse-core/src/utils/rand.ts +++ b/packages/synapse-core/src/utils/rand.ts @@ -45,3 +45,18 @@ export function randIndex(length: number): number { return fallbackRandIndex(length) } } + +/** + * Shuffles an array using the Fisher-Yates algorithm + * @param array - The array to shuffle + * @returns A new array with the elements shuffled + */ +export function shuffle(array: T[]): T[] { + // Fisher-Yates shuffle + const arr = array.slice() + for (let i = arr.length; i-- > 1; ) { + const j = randIndex(i + 1) + ;[arr[i], arr[j]] = [arr[j], arr[i]] + } + return arr +} diff --git a/packages/synapse-sdk/src/sp-registry/service.ts b/packages/synapse-sdk/src/sp-registry/service.ts index 7285f3e16..b980036b9 100644 --- a/packages/synapse-sdk/src/sp-registry/service.ts +++ b/packages/synapse-sdk/src/sp-registry/service.ts @@ -22,14 +22,18 @@ * ``` */ -import { capabilitiesListToObject, decodePDPCapabilities, encodePDPCapabilities } from '@filoz/synapse-core/utils' +import { + capabilitiesListToObject, + decodePDPCapabilities, + encodePDPCapabilities, + shuffle, +} from '@filoz/synapse-core/utils' import { ethers } from 'ethers' import { CONTRACT_ABIS, CONTRACT_ADDRESSES } from '../utils/constants.ts' import { getFilecoinNetworkType } from '../utils/index.ts' import type { PDPOffering, PDPServiceInfo, - PRODUCTS, ProductType, ProviderFilterOptions, ProviderInfo, @@ -449,11 +453,12 @@ export class SPRegistryService { return result } } + /** * Filter providers based on criteria * @param filter - Filtering options * @returns Filtered list of providers */ - async providerFiltering(filter?: ProviderFilterOptions): Promise { + async filterProviders(filter?: ProviderFilterOptions): Promise { const providers = await this.getAllActiveProviders() if (!filter) return providers @@ -466,7 +471,7 @@ export class SPRegistryService { const d = product.data return ( - (!filter.location || (d.location && d.location.toLowerCase().includes(filter.location.toLowerCase()))) && + (!filter.location || d.location?.toLowerCase().includes(filter.location.toLowerCase())) && (filter.minPieceSizeInBytes === undefined || d.maxPieceSizeInBytes >= filter.minPieceSizeInBytes) && (filter.maxPieceSizeInBytes === undefined || d.minPieceSizeInBytes <= filter.maxPieceSizeInBytes) && (filter.ipniIpfs === undefined || d.ipniIpfs === filter.ipniIpfs) && @@ -478,7 +483,7 @@ export class SPRegistryService { ) }) - return filter.randomize ? this._shuffle(result) : result + return filter.randomize ? shuffle(result) : result } /** * Get providers using Multicall3 for batch efficiency @@ -559,16 +564,6 @@ export class SPRegistryService { return providers } - private _shuffle(array: T[]): T[] { - // Fisher-Yates shuffle - const arr = array.slice() - for (let i = arr.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)) - ;[arr[i], arr[j]] = [arr[j], arr[i]] - } - return arr - } - /** * Fallback method to get providers individually */ diff --git a/packages/synapse-sdk/src/synapse.ts b/packages/synapse-sdk/src/synapse.ts index 68e05c1c0..4f5fc42c2 100644 --- a/packages/synapse-sdk/src/synapse.ts +++ b/packages/synapse-sdk/src/synapse.ts @@ -496,13 +496,13 @@ export class Synapse { * @param filter - Filtering options * @returns Filtered list of providers */ - async providerFiltering(filter?: ProviderFilterOptions): Promise { + async filterProviders(filter?: ProviderFilterOptions): Promise { // Create SPRegistryService try { const registryAddress = this._warmStorageService.getServiceProviderRegistryAddress() const spRegistry = new SPRegistryService(this._provider, registryAddress) - const providers = await spRegistry.providerFiltering(filter) + const providers = await spRegistry.filterProviders(filter) return providers } catch (error) { throw new Error(`Failed to filter providers: ${error instanceof Error ? error.message : String(error)}`) diff --git a/packages/synapse-sdk/src/test/sp-registry-service.test.ts b/packages/synapse-sdk/src/test/sp-registry-service.test.ts index 161322d66..92ebab48a 100644 --- a/packages/synapse-sdk/src/test/sp-registry-service.test.ts +++ b/packages/synapse-sdk/src/test/sp-registry-service.test.ts @@ -392,21 +392,21 @@ describe('SPRegistryService', () => { server.use(JSONRPC(presets.basic)) // Test location filtering (case-insensitive partial match) - const byLocation = await service.providerFiltering({ location: 'US' }) + const byLocation = await service.filterProviders({ location: 'US' }) assert.equal(byLocation.length, 2) // Both providers have 'US' location - const byPrice = await service.providerFiltering({ maxStoragePricePerTibPerDay: 999999 }) + const byPrice = await service.filterProviders({ maxStoragePricePerTibPerDay: 999999 }) assert.equal(byPrice.length, 0) // Test piece size filtering - const byPieceSize = await service.providerFiltering({ + const byPieceSize = await service.filterProviders({ minPieceSizeInBytes: Number(SIZE_CONSTANTS.KiB), maxPieceSizeInBytes: Number(SIZE_CONSTANTS.GiB), }) assert.equal(byPieceSize.length, 2) // Both providers support this range // Test no filters returns all - const all = await service.providerFiltering() + const all = await service.filterProviders() assert.equal(all.length, 2) }) @@ -415,7 +415,7 @@ describe('SPRegistryService', () => { const results = [] for (let i = 0; i < 5; i++) { - const filtered = await service.providerFiltering({ randomize: true }) + const filtered = await service.filterProviders({ randomize: true }) results.push(filtered.map((p) => p.id)) } diff --git a/packages/synapse-sdk/src/test/synapse.test.ts b/packages/synapse-sdk/src/test/synapse.test.ts index 1d93404e2..50bb8a6c7 100644 --- a/packages/synapse-sdk/src/test/synapse.test.ts +++ b/packages/synapse-sdk/src/test/synapse.test.ts @@ -1080,7 +1080,7 @@ describe('Synapse', () => { const synapse = await Synapse.create({ signer }) // Test filtering by location - const filtered = await synapse.providerFiltering({ location: 'US' }) + const filtered = await synapse.filterProviders({ location: 'US' }) assert.equal(filtered.length, 2) // Both providers have 'US' location in preset assert.exists(filtered[0].products.PDP?.data.location) }) From 743e11ed18ea5542dc8301d7733a189d944798e8 Mon Sep 17 00:00:00 2001 From: Sambhav Jain <136801346+DarkLord017@users.noreply.github.com> Date: Thu, 5 Feb 2026 19:44:53 +0530 Subject: [PATCH 4/5] finish merge --- .../synapse-sdk/src/sp-registry/service.ts | 65 +++++++++++++------ packages/synapse-sdk/src/synapse.ts | 9 ++- .../src/test/sp-registry-service.test.ts | 6 +- packages/synapse-sdk/src/test/synapse.test.ts | 7 +- packages/synapse-sdk/src/types.ts | 12 ++-- 5 files changed, 60 insertions(+), 39 deletions(-) diff --git a/packages/synapse-sdk/src/sp-registry/service.ts b/packages/synapse-sdk/src/sp-registry/service.ts index e30ed857f..1fe26d15f 100644 --- a/packages/synapse-sdk/src/sp-registry/service.ts +++ b/packages/synapse-sdk/src/sp-registry/service.ts @@ -26,8 +26,18 @@ import type { Chain } from '@filoz/synapse-core/chains' import * as SP from '@filoz/synapse-core/sp-registry' import { shuffle } from '@filoz/synapse-core/utils' import type { Account, Address, Client, Hash, Transport } from 'viem' +<<<<<<< Updated upstream import type { PDPOffering, ProductType, ProviderRegistrationInfo , ProviderFilterOptions } from './types.ts' import type { ProviderInfo } from '@filoz/synapse-core/sp-registry' +======= +import { + type PDPOffering, + PRODUCTS, + type ProductType, + type ProviderFilterOptions, + type ProviderRegistrationInfo, +} from './types.ts' +>>>>>>> Stashed changes export class SPRegistryService { private readonly _client: Client @@ -312,34 +322,49 @@ export class SPRegistryService { }) } +<<<<<<< Updated upstream /** +======= + /** +>>>>>>> Stashed changes * Filter providers based on criteria * @param filter - Filtering options * @returns Filtered list of providers */ - async filterProviders(filter?: ProviderFilterOptions): Promise { + async filterProviders(filter?: ProviderFilterOptions): Promise { const providers = await this.getAllActiveProviders() if (!filter) return providers - const type = filter.type ?? 'PDP' - - const result = providers.filter((p) => { - const product = p.products?.[type] - if (!product) return false - - const d = product.data - - return ( - (!filter.location || d.location?.toLowerCase().includes(filter.location.toLowerCase())) && - (filter.minPieceSizeInBytes === undefined || d.maxPieceSizeInBytes >= filter.minPieceSizeInBytes) && - (filter.maxPieceSizeInBytes === undefined || d.minPieceSizeInBytes <= filter.maxPieceSizeInBytes) && - (filter.ipniIpfs === undefined || d.ipniIpfs === filter.ipniIpfs) && - (filter.ipniPiece === undefined || d.ipniPiece === filter.ipniPiece) && - (filter.serviceStatus === undefined || product.capabilities?.serviceStatus === filter.serviceStatus) && - (filter.maxStoragePricePerTibPerDay === undefined || - d.storagePricePerTibPerDay <= filter.maxStoragePricePerTibPerDay) && - (filter.minProvingPeriodInEpochs === undefined || d.minProvingPeriodInEpochs >= filter.minProvingPeriodInEpochs) - ) + if (filter.type !== undefined) { + const requestedTypeValue = PRODUCTS[filter.type] + if (requestedTypeValue === undefined) { + return [] // Invalid product type + } + } + + const typeKey = (filter.type ?? 'PDP').toLowerCase() + + const result = providers.filter((d) => { + switch (typeKey) { + case 'pdp': { + const offering = d[typeKey as keyof typeof d] as PDPOffering + return ( + (!filter.location || offering.location?.toLowerCase().includes(filter.location.toLowerCase())) && + (filter.minPieceSizeInBytes === undefined || + offering.maxPieceSizeInBytes >= BigInt(filter.minPieceSizeInBytes)) && + (filter.maxPieceSizeInBytes === undefined || + offering.minPieceSizeInBytes <= BigInt(filter.maxPieceSizeInBytes)) && + (filter.ipniIpfs === undefined || offering.ipniIpfs === filter.ipniIpfs) && + (filter.ipniPiece === undefined || offering.ipniPiece === filter.ipniPiece) && + (filter.maxStoragePricePerTibPerDay === undefined || + offering.storagePricePerTibPerDay <= BigInt(filter.maxStoragePricePerTibPerDay)) && + (filter.minProvingPeriodInEpochs === undefined || + offering.minProvingPeriodInEpochs >= BigInt(filter.minProvingPeriodInEpochs)) + ) + } + default: + return false // Unsupported product type + } }) return filter.randomize ? shuffle(result) : result diff --git a/packages/synapse-sdk/src/synapse.ts b/packages/synapse-sdk/src/synapse.ts index 083ad05a1..ec5f3c72b 100644 --- a/packages/synapse-sdk/src/synapse.ts +++ b/packages/synapse-sdk/src/synapse.ts @@ -14,14 +14,13 @@ import { import { FilBeamService } from './filbeam/index.ts' import { PaymentsService } from './payments/index.ts' import { ChainRetriever, FilBeamRetriever } from './retriever/index.ts' +import type { ProviderFilterOptions } from './sp-registry/index.ts' import { SPRegistryService } from './sp-registry/index.ts' import type { StorageContext } from './storage/index.ts' import { StorageManager } from './storage/manager.ts' import type { PDPProvider, PieceCID, - ProviderFilterOptions, - ProviderInfo, StorageInfo, StorageServiceOptions, SynapseFromClientOptions, @@ -244,11 +243,11 @@ export class Synapse { * @param filter - Filtering options * @returns Filtered list of providers */ - async filterProviders(filter?: ProviderFilterOptions): Promise { + async filterProviders(filter?: ProviderFilterOptions): Promise { // Create SPRegistryService try { - const registryAddress = this._warmStorageService.getServiceProviderRegistryAddress() - const spRegistry = new SPRegistryService(this._provider, registryAddress) + const _registryAddress = this._warmStorageService.getServiceProviderRegistryAddress() + const spRegistry = new SPRegistryService(this._client) const providers = await spRegistry.filterProviders(filter) return providers diff --git a/packages/synapse-sdk/src/test/sp-registry-service.test.ts b/packages/synapse-sdk/src/test/sp-registry-service.test.ts index aa6b54754..065cdd0b2 100644 --- a/packages/synapse-sdk/src/test/sp-registry-service.test.ts +++ b/packages/synapse-sdk/src/test/sp-registry-service.test.ts @@ -375,7 +375,7 @@ describe('SPRegistryService', () => { describe('Provider Filtering', () => { it('should filter providers by multiple criteria', async () => { - server.use(JSONRPC(presets.basic)) + server.use(Mocks.JSONRPC(Mocks.presets.basic)) // Test location filtering (case-insensitive partial match) const byLocation = await service.filterProviders({ location: 'US' }) @@ -397,12 +397,12 @@ describe('SPRegistryService', () => { }) it('should randomize results when requested', async () => { - server.use(JSONRPC(presets.basic)) + server.use(Mocks.JSONRPC(Mocks.presets.basic)) const results = [] for (let i = 0; i < 5; i++) { const filtered = await service.filterProviders({ randomize: true }) - results.push(filtered.map((p) => p.id)) + results.push(filtered.map((p) => p.serviceProvider)) } // At least one result should have different order (with high probability) diff --git a/packages/synapse-sdk/src/test/synapse.test.ts b/packages/synapse-sdk/src/test/synapse.test.ts index 8b1ae954d..901327475 100644 --- a/packages/synapse-sdk/src/test/synapse.test.ts +++ b/packages/synapse-sdk/src/test/synapse.test.ts @@ -905,14 +905,13 @@ describe('Synapse', () => { describe('Provider Filtering', () => { it('should filter providers through Synapse class', async () => { - server.use(JSONRPC(presets.basic)) - - const synapse = await Synapse.create({ signer }) + server.use(Mocks.JSONRPC(Mocks.presets.basic)) + const synapse = new Synapse({ client }) // Test filtering by location const filtered = await synapse.filterProviders({ location: 'US' }) assert.equal(filtered.length, 2) // Both providers have 'US' location in preset - assert.exists(filtered[0].products.PDP?.data.location) + assert.exists(filtered[0].pdp.location) }) }) }) diff --git a/packages/synapse-sdk/src/types.ts b/packages/synapse-sdk/src/types.ts index f79faf550..cc50de909 100644 --- a/packages/synapse-sdk/src/types.ts +++ b/packages/synapse-sdk/src/types.ts @@ -7,13 +7,11 @@ import type { Chain } from '@filoz/synapse-core/chains' import type { PieceCID } from '@filoz/synapse-core/piece' -import type { ethers } from 'ethers' -import type { Hex } from 'viem' -import type { ProviderInfo } from './sp-registry/types.ts' -import type { TelemetryConfig } from './telemetry/service.ts' - -// Re-export PieceCID and ProviderInfo types -export type { PieceCID, ProviderInfo } +import type { PDPProvider } from '@filoz/synapse-core/sp-registry' +import type { MetadataObject } from '@filoz/synapse-core/utils' +import type { Account, Address, Client, Hex, Transport } from 'viem' +// Re-export PieceCID and PDPProvider types +export type { PieceCID, PDPProvider } export type PrivateKey = string export type TokenAmount = bigint export type DataSetId = bigint From ab1d417bed2dd22170233d436fa20f6331071afb Mon Sep 17 00:00:00 2001 From: Sambhav Jain <136801346+DarkLord017@users.noreply.github.com> Date: Thu, 5 Feb 2026 19:55:18 +0530 Subject: [PATCH 5/5] fix merge conflicts --- packages/synapse-sdk/src/sp-registry/service.ts | 9 --------- packages/synapse-sdk/src/test/synapse.test.ts | 1 - 2 files changed, 10 deletions(-) diff --git a/packages/synapse-sdk/src/sp-registry/service.ts b/packages/synapse-sdk/src/sp-registry/service.ts index 1fe26d15f..20f42634c 100644 --- a/packages/synapse-sdk/src/sp-registry/service.ts +++ b/packages/synapse-sdk/src/sp-registry/service.ts @@ -26,10 +26,6 @@ import type { Chain } from '@filoz/synapse-core/chains' import * as SP from '@filoz/synapse-core/sp-registry' import { shuffle } from '@filoz/synapse-core/utils' import type { Account, Address, Client, Hash, Transport } from 'viem' -<<<<<<< Updated upstream -import type { PDPOffering, ProductType, ProviderRegistrationInfo , ProviderFilterOptions } from './types.ts' -import type { ProviderInfo } from '@filoz/synapse-core/sp-registry' -======= import { type PDPOffering, PRODUCTS, @@ -37,7 +33,6 @@ import { type ProviderFilterOptions, type ProviderRegistrationInfo, } from './types.ts' ->>>>>>> Stashed changes export class SPRegistryService { private readonly _client: Client @@ -322,11 +317,7 @@ export class SPRegistryService { }) } -<<<<<<< Updated upstream - /** -======= /** ->>>>>>> Stashed changes * Filter providers based on criteria * @param filter - Filtering options * @returns Filtered list of providers diff --git a/packages/synapse-sdk/src/test/synapse.test.ts b/packages/synapse-sdk/src/test/synapse.test.ts index 901327475..f96dac446 100644 --- a/packages/synapse-sdk/src/test/synapse.test.ts +++ b/packages/synapse-sdk/src/test/synapse.test.ts @@ -7,7 +7,6 @@ import { calibration } from '@filoz/synapse-core/chains' import * as Mocks from '@filoz/synapse-core/mocks' import * as Piece from '@filoz/synapse-core/piece' -import { getPermissionFromTypeHash, type SessionKeyPermissions } from '@filoz/synapse-core/session-key' import { assert } from 'chai' import { setup } from 'iso-web/msw' import { HttpResponse, http } from 'msw'