import { describe, expect, it } from 'vitest'; import * as sdk from '../src/index.js'; import { RudderClient } from '../src/index.js'; describe('public API surface', () => { it('does not expose scenario runtime types from the root package', () => { expect('ScenarioService' in sdk).toBe(false); expect('NotificationSession' in sdk).toBe(false); expect('StoreSession' in sdk).toBe(false); expect('WaitSession' in sdk).toBe(false); expect('LeaderboardSession' in sdk).toBe(false); expect('PlanRun' in sdk).toBe(false); expect('createIndexedDbPlanStateStore' in sdk).toBe(false); }); it('keeps helpers, domain classes, and service constructors out of the barrel', () => { expect('getOrCreateDeviceId' in sdk).toBe(false); for (const name of [ 'PlayerDomain', 'CatalogDomain', 'StorageDomain', 'ProjectStorageDomain', 'ModulesDomain', 'ResourcesDomain', ]) { expect(name in sdk).toBe(false); } for (const name of [ 'AuthService', 'LeaderboardsService', 'LeaderboardHandle', 'BattlePassService', 'BattlepassService', 'QuestsService', ]) { expect(name in sdk).toBe(false); } }); it('exposes the expected value exports', () => { for (const name of [ 'RudderClient', 'RudderError', 'RudderNetworkError', 'RudderHttpError', 'RudderAuthError', 'SDK_ERROR_INVALID_OPTIONS', 'createDefaultTokenStore', 'createLocalStorageTokenStore', 'SyncedState', ]) { expect(name in sdk, name).toBe(true); } expect('RemoteConfigState' in sdk).toBe(false); expect('ShopHandle' in sdk).toBe(false); expect('OfferHandle' in sdk).toBe(false); expect('QuestMetrics' in sdk).toBe(false); }); it('exposes kernel members and no module-specific namespaces on the client', () => { const client = new RudderClient({ baseUrl: 'https://api.test.rudder.build', projectKey: 'test-project', }); expect(client.auth).toBeDefined(); expect(client.player).toBeDefined(); expect(client.catalog).toBeDefined(); expect(client.storage).toBeDefined(); expect(client.projectStorage).toBeDefined(); expect(client.modules).toBeDefined(); expect(typeof client.modules.call).toBe('function'); expect(typeof client.resources).toBe('function'); expect('battlePass' in client).toBe(false); expect('quests' in client).toBe(false); expect('leaderboards' in client).toBe(false); expect('stores' in client).toBe(false); expect('inventory' in client).toBe(false); expect('remoteConfig' in client).toBe(false); expect('scenarios' in client).toBe(false); expect('effects' in client).toBe(false); }); });