@partylayer/conformance-runner 0.2.8 → 0.2.10

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../src/cip0103-tests.ts","../src/loader.ts","../src/tests.ts","../src/report.ts","../src/index.ts"],"names":["resolve","runCIP0103ConformanceTests","formatCIP0103Report"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * CIP-0103 Conformance Test Suite\n *\n * Validates that a Provider implementation conforms to CIP-0103:\n * - Interface shape (request, on, emit, removeListener)\n * - All 10 mandatory methods are handled\n * - Event subscription returns Provider for chaining\n * - Error responses use ProviderRpcError with numeric codes\n *\n * This suite can be run against:\n * - PartyLayerProvider (native path)\n * - createProviderBridge() (bridge path)\n * - Any third-party CIP-0103 Provider\n */\n\nimport type { CIP0103Provider } from '@partylayer/core';\nimport { CIP0103_MANDATORY_METHODS, CIP0103_EVENTS } from '@partylayer/core';\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport interface CIP0103TestResult {\n name: string;\n category: 'interface' | 'method' | 'event' | 'error' | 'lifecycle';\n passed: boolean;\n error?: string;\n details?: Record<string, unknown>;\n}\n\nexport interface CIP0103ConformanceReport {\n total: number;\n passed: number;\n failed: number;\n results: CIP0103TestResult[];\n}\n\n// ─── Runner ─────────────────────────────────────────────────────────────────\n\nexport async function runCIP0103ConformanceTests(\n provider: CIP0103Provider,\n): Promise<CIP0103ConformanceReport> {\n const results: CIP0103TestResult[] = [];\n\n // ── Interface shape tests ─────────────────────────────────────────────\n\n results.push({\n name: 'Provider has request() method',\n category: 'interface',\n passed: typeof provider.request === 'function',\n });\n\n results.push({\n name: 'Provider has on() method',\n category: 'interface',\n passed: typeof provider.on === 'function',\n });\n\n results.push({\n name: 'Provider has emit() method',\n category: 'interface',\n passed: typeof provider.emit === 'function',\n });\n\n results.push({\n name: 'Provider has removeListener() method',\n category: 'interface',\n passed: typeof provider.removeListener === 'function',\n });\n\n // ── Method presence tests ─────────────────────────────────────────────\n\n for (const method of CIP0103_MANDATORY_METHODS) {\n try {\n await provider.request({ method, params: {} });\n results.push({\n name: `Method \"${method}\" is handled`,\n category: 'method',\n passed: true,\n });\n } catch (err: unknown) {\n // A valid ProviderRpcError means the method IS handled\n // (it just may not be authorized / connected yet)\n const isValidError = isNumericCodeError(err);\n results.push({\n name: `Method \"${method}\" is handled`,\n category: 'method',\n passed: isValidError,\n error: isValidError\n ? undefined\n : `Expected ProviderRpcError with numeric code, got: ${String(err)}`,\n details: isValidError\n ? { code: (err as { code: number }).code }\n : undefined,\n });\n }\n }\n\n // ── Event chaining tests ──────────────────────────────────────────────\n\n const noopHandler = () => {};\n\n const onResult = provider.on('statusChanged', noopHandler);\n results.push({\n name: 'on() returns Provider for chaining',\n category: 'event',\n passed: onResult === provider,\n error:\n onResult === provider\n ? undefined\n : 'on() did not return the Provider instance',\n });\n\n const removeResult = provider.removeListener('statusChanged', noopHandler);\n results.push({\n name: 'removeListener() returns Provider for chaining',\n category: 'event',\n passed: removeResult === provider,\n error:\n removeResult === provider\n ? undefined\n : 'removeListener() did not return the Provider instance',\n });\n\n // ── Error code validation ─────────────────────────────────────────────\n\n try {\n await provider.request({ method: '__cip0103_conformance_nonexistent__' });\n results.push({\n name: 'Unsupported method returns ProviderRpcError',\n category: 'error',\n passed: false,\n error: 'Expected error for unsupported method, got success',\n });\n } catch (err: unknown) {\n const hasNumericCode = isNumericCodeError(err);\n results.push({\n name: 'Unsupported method returns error with numeric code',\n category: 'error',\n passed: hasNumericCode,\n error: hasNumericCode\n ? undefined\n : `Expected numeric code, got: ${String(err)}`,\n details: hasNumericCode\n ? { code: (err as { code: number }).code }\n : undefined,\n });\n\n if (hasNumericCode) {\n const code = (err as { code: number }).code;\n // Should be 4200 (UNSUPPORTED_METHOD) or -32601 (METHOD_NOT_FOUND)\n const isCorrectCode = code === 4200 || code === -32601;\n results.push({\n name: 'Unsupported method uses code 4200 or -32601',\n category: 'error',\n passed: isCorrectCode,\n error: isCorrectCode\n ? undefined\n : `Expected code 4200 or -32601, got ${code}`,\n details: { code },\n });\n }\n }\n\n // ── emit() returns boolean ────────────────────────────────────────────\n\n const emitResult = provider.emit('__cip0103_conformance_test__');\n results.push({\n name: 'emit() returns boolean',\n category: 'interface',\n passed: typeof emitResult === 'boolean',\n error:\n typeof emitResult === 'boolean'\n ? undefined\n : `emit() returned ${typeof emitResult}`,\n });\n\n // ── Transaction lifecycle tests ─────────────────────────────────────\n\n {\n const txEvents: unknown[] = [];\n const txHandler = (...args: unknown[]) => txEvents.push(...args);\n provider.on(CIP0103_EVENTS.TX_CHANGED, txHandler);\n\n try {\n await provider.request({\n method: 'prepareExecute',\n params: { tx: { _conformance: true } },\n });\n\n // Check that 'pending' was emitted\n results.push({\n name: 'prepareExecute emits txChanged with \"pending\"',\n category: 'lifecycle',\n passed: txEvents.some(\n (e) => typeof e === 'object' && e !== null && (e as Record<string, unknown>).status === 'pending',\n ),\n error: txEvents.length === 0 ? 'No txChanged events emitted' : undefined,\n });\n\n // Check that 'signed' was emitted\n const signedEvent = txEvents.find(\n (e) => typeof e === 'object' && e !== null && (e as Record<string, unknown>).status === 'signed',\n ) as Record<string, unknown> | undefined;\n results.push({\n name: 'prepareExecute emits txChanged with \"signed\"',\n category: 'lifecycle',\n passed: !!signedEvent,\n });\n\n // Validate 'signed' payload shape\n if (signedEvent) {\n const payload = signedEvent.payload as Record<string, unknown> | undefined;\n results.push({\n name: 'signed event has payload.signature (string)',\n category: 'lifecycle',\n passed: typeof payload?.signature === 'string',\n });\n results.push({\n name: 'signed event has payload.signedBy (string)',\n category: 'lifecycle',\n passed: typeof payload?.signedBy === 'string',\n });\n results.push({\n name: 'signed event has payload.party (string)',\n category: 'lifecycle',\n passed: typeof payload?.party === 'string',\n });\n }\n\n // Check that a terminal state was reached\n const hasTerminal = txEvents.some(\n (e) =>\n typeof e === 'object' &&\n e !== null &&\n ((e as Record<string, unknown>).status === 'executed' ||\n (e as Record<string, unknown>).status === 'failed'),\n );\n results.push({\n name: 'prepareExecute reaches terminal tx state (executed or failed)',\n category: 'lifecycle',\n passed: hasTerminal,\n });\n\n // Validate 'executed' payload shape\n const executedEvent = txEvents.find(\n (e) => typeof e === 'object' && e !== null && (e as Record<string, unknown>).status === 'executed',\n ) as Record<string, unknown> | undefined;\n if (executedEvent) {\n const payload = executedEvent.payload as Record<string, unknown> | undefined;\n results.push({\n name: 'executed event has payload.updateId (string)',\n category: 'lifecycle',\n passed: typeof payload?.updateId === 'string',\n });\n results.push({\n name: 'executed event has payload.completionOffset (number)',\n category: 'lifecycle',\n passed: typeof payload?.completionOffset === 'number',\n });\n }\n } catch {\n // prepareExecute may throw — still check if events were emitted\n results.push({\n name: 'prepareExecute emits txChanged events (despite error)',\n category: 'lifecycle',\n passed: txEvents.length > 0,\n error: txEvents.length === 0 ? 'No txChanged events emitted before error' : undefined,\n });\n } finally {\n provider.removeListener(CIP0103_EVENTS.TX_CHANGED, txHandler);\n }\n }\n\n // ── ledgerApi handling test ────────────────────────────────────────\n\n try {\n await provider.request({\n method: 'ledgerApi',\n params: { requestMethod: 'GET', resource: '/v1/state/acs' },\n });\n results.push({\n name: 'ledgerApi returns result (supported)',\n category: 'method',\n passed: true,\n });\n } catch (err: unknown) {\n // ProviderRpcError with numeric code = method is recognized\n const isHandled = isNumericCodeError(err);\n results.push({\n name: 'ledgerApi is handled (returns result or ProviderRpcError)',\n category: 'method',\n passed: isHandled,\n error: isHandled ? undefined : `Unexpected error type: ${String(err)}`,\n });\n }\n\n // ── Summary ───────────────────────────────────────────────────────────\n\n const passed = results.filter((r) => r.passed).length;\n return {\n total: results.length,\n passed,\n failed: results.length - passed,\n results,\n };\n}\n\n// ─── Helpers ────────────────────────────────────────────────────────────────\n\nfunction isNumericCodeError(err: unknown): boolean {\n if (typeof err !== 'object' || err === null) return false;\n return typeof (err as Record<string, unknown>).code === 'number';\n}\n\n// ─── Formatting ─────────────────────────────────────────────────────────────\n\nexport function formatCIP0103Report(report: CIP0103ConformanceReport): string {\n const lines: string[] = [\n '═══ CIP-0103 Conformance Report ═══',\n '',\n `Total: ${report.total} Passed: ${report.passed} Failed: ${report.failed}`,\n '',\n ];\n\n const categories = ['interface', 'method', 'event', 'error', 'lifecycle'] as const;\n for (const cat of categories) {\n const catResults = report.results.filter((r) => r.category === cat);\n if (catResults.length === 0) continue;\n lines.push(`── ${cat.toUpperCase()} ──`);\n for (const r of catResults) {\n const icon = r.passed ? '✓' : '✗';\n lines.push(` ${icon} ${r.name}`);\n if (r.error) {\n lines.push(` → ${r.error}`);\n }\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n","/**\n * Adapter Module Loader\n * \n * Dynamically loads adapter modules (ESM/CJS safe)\n */\n\nimport { createRequire } from 'module';\nimport { resolve } from 'path';\nimport { pathToFileURL } from 'url';\n\nimport type { WalletAdapter } from '@partylayer/core';\n\n// This package builds to ESM (type: module), where the `require` global is\n// undefined — a bare `require(...)`/`require.resolve(...)` throws at runtime\n// (and would hit esbuild's `__require` shim in bundled consumers). Use a real\n// Node require created from this module's URL instead.\nconst nodeRequire = createRequire(import.meta.url);\n\n/**\n * Load adapter from package or path\n */\nexport async function loadAdapter(\n packageNameOrPath: string\n): Promise<WalletAdapter> {\n let adapterPath: string;\n\n // Check if it's a path\n if (packageNameOrPath.startsWith('.') || packageNameOrPath.startsWith('/')) {\n adapterPath = resolve(packageNameOrPath);\n } else {\n // Try to resolve as package\n try {\n adapterPath = nodeRequire.resolve(packageNameOrPath);\n } catch {\n throw new Error(`Cannot resolve adapter: ${packageNameOrPath}`);\n }\n }\n\n // Try to load as ESM first\n try {\n const moduleUrl = pathToFileURL(adapterPath).href;\n const module = await import(moduleUrl);\n \n // Look for default export or named export\n const adapter = module.default || module[Object.keys(module)[0]];\n \n if (!adapter) {\n throw new Error('No adapter export found');\n }\n\n // If it's a class, instantiate it\n if (typeof adapter === 'function') {\n return new adapter();\n }\n\n return adapter as WalletAdapter;\n } catch (err) {\n // Fallback to CJS\n try {\n const module = nodeRequire(adapterPath);\n const adapter = module.default || module[Object.keys(module)[0]];\n \n if (!adapter) {\n throw new Error('No adapter export found');\n }\n\n if (typeof adapter === 'function') {\n return new adapter();\n }\n\n return adapter as WalletAdapter;\n } catch (cjsErr) {\n throw new Error(\n `Failed to load adapter: ${err instanceof Error ? err.message : String(err)}`\n );\n }\n }\n}\n","/**\n * Adapter Conformance Tests\n * \n * Standard contract tests that all adapters must pass.\n */\n\nimport type {\n WalletAdapter,\n AdapterContext,\n CapabilityKey,\n Session,\n} from '@partylayer/core';\nimport {\n CapabilityNotSupportedError,\n} from '@partylayer/core';\n\n/**\n * Test result\n */\nexport interface TestResult {\n name: string;\n passed: boolean;\n error?: string;\n details?: Record<string, unknown>;\n}\n\n/**\n * Conformance test suite\n */\nexport interface ConformanceSuite {\n adapter: WalletAdapter;\n context: AdapterContext;\n results: TestResult[];\n}\n\n/**\n * Create mock adapter context\n */\nexport function createMockContext(): AdapterContext {\n return {\n appName: 'Conformance Test',\n origin: 'https://test.example.com',\n network: 'devnet',\n logger: {\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n },\n telemetry: undefined,\n registry: {\n getWallet: async () => ({}),\n },\n crypto: {\n encrypt: async (data: string) => data,\n decrypt: async (data: string) => data,\n generateKey: async () => 'test-key',\n },\n storage: {\n get: async () => null,\n set: async () => {},\n remove: async () => {},\n clear: async () => {},\n },\n timeout: async (ms: number) => {\n await new Promise((resolve) => setTimeout(resolve, ms));\n throw new Error('Timeout');\n },\n };\n}\n\n/**\n * Run conformance tests\n */\nexport async function runConformanceTests(\n adapter: WalletAdapter,\n context: AdapterContext\n): Promise<TestResult[]> {\n const results: TestResult[] = [];\n\n // Test 1: Adapter has required properties\n results.push({\n name: 'Adapter has walletId',\n passed: typeof adapter.walletId === 'string' && adapter.walletId.length > 0,\n details: { walletId: adapter.walletId },\n });\n\n results.push({\n name: 'Adapter has name',\n passed: typeof adapter.name === 'string' && adapter.name.length > 0,\n details: { name: adapter.name },\n });\n\n // Test 2: getCapabilities returns valid array\n let capabilities: CapabilityKey[];\n try {\n capabilities = adapter.getCapabilities();\n results.push({\n name: 'getCapabilities returns array',\n passed: Array.isArray(capabilities),\n details: { capabilities },\n });\n\n // Check for required capabilities\n const hasConnect = capabilities.includes('connect');\n results.push({\n name: 'Capabilities include \"connect\"',\n passed: hasConnect,\n details: { capabilities },\n });\n } catch (err) {\n results.push({\n name: 'getCapabilities throws error',\n passed: false,\n error: err instanceof Error ? err.message : String(err),\n });\n return results; // Can't continue without capabilities\n }\n\n // Test 3: detectInstalled returns valid result\n try {\n const detect = await adapter.detectInstalled();\n results.push({\n name: 'detectInstalled returns valid result',\n passed:\n typeof detect === 'object' &&\n typeof detect.installed === 'boolean' &&\n (detect.installed || typeof detect.reason === 'string'),\n details: { detect },\n });\n } catch (err) {\n results.push({\n name: 'detectInstalled throws error',\n passed: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n\n // Test 4: If detectInstalled returns false, connect should throw WalletNotInstalledError\n // (This test requires mocking detectInstalled - skip for now or use mock adapter)\n\n // Test 5: Capability checks\n if (capabilities.includes('signMessage')) {\n if (typeof adapter.signMessage !== 'function') {\n results.push({\n name: 'signMessage capability declared but method missing',\n passed: false,\n error: 'signMessage capability declared but method not implemented',\n });\n }\n } else {\n // If signMessage not in capabilities, calling it should throw CapabilityNotSupportedError\n if (typeof adapter.signMessage === 'function') {\n try {\n await adapter.signMessage(context, {} as unknown as Session, { message: 'test' });\n results.push({\n name: 'signMessage throws CapabilityNotSupportedError when not supported',\n passed: false,\n error: 'signMessage did not throw error',\n });\n } catch (err) {\n const passed = err instanceof CapabilityNotSupportedError;\n results.push({\n name: 'signMessage throws CapabilityNotSupportedError when not supported',\n passed,\n error: passed ? undefined : err instanceof Error ? err.message : String(err),\n });\n }\n }\n }\n\n // Similar tests for signTransaction and submitTransaction\n if (capabilities.includes('signTransaction')) {\n if (typeof adapter.signTransaction !== 'function') {\n results.push({\n name: 'signTransaction capability declared but method missing',\n passed: false,\n error: 'signTransaction capability declared but method not implemented',\n });\n }\n }\n\n if (capabilities.includes('submitTransaction')) {\n if (typeof adapter.submitTransaction !== 'function') {\n results.push({\n name: 'submitTransaction capability declared but method missing',\n passed: false,\n error: 'submitTransaction capability declared but method not implemented',\n });\n }\n }\n\n // Test 5b: restore capability <-> method symmetry.\n //\n // We had a real bug where 3 of 5 adapters implemented restore() but did\n // not declare the 'restore' capability in getCapabilities(). The SDK\n // checks method presence at runtime so session persistence still worked,\n // but `wallet.capabilities.includes('restore')` returned false, which\n // misleads docs consumers and anyone programmatically inspecting caps.\n //\n // Enforce both directions:\n // - declared-but-missing: capability listed, no method → broken promise\n // - implemented-but-undeclared: method exists, capability missing →\n // silent drift that hides a feature from consumers\n {\n const hasRestoreMethod = typeof adapter.restore === 'function';\n const declaresRestore = capabilities.includes('restore');\n if (declaresRestore && !hasRestoreMethod) {\n results.push({\n name: 'restore capability declared but method missing',\n passed: false,\n error: `${adapter.name}: declares 'restore' capability but does not implement restore()`,\n });\n } else if (hasRestoreMethod && !declaresRestore) {\n results.push({\n name: 'restore method implemented but capability not declared',\n passed: false,\n error:\n `${adapter.name}: implements restore() but getCapabilities() does not include 'restore'. ` +\n `Add 'restore' to the returned array so consumers can discover the feature.`,\n });\n } else {\n results.push({\n name: 'restore capability / method symmetry',\n passed: true,\n details: { hasRestoreMethod, declaresRestore },\n });\n }\n }\n\n // Test 6: Error mapping\n // Verify adapter uses mapUnknownErrorToPartyLayerError\n // (This is a code inspection test - hard to test at runtime)\n\n return results;\n}\n\n/**\n * Network-truthfulness contract.\n *\n * An adapter's `connect()` MUST surface the wallet's EFFECTIVE network in\n * `session.network` (so the SDK can detect a wallet/dApp network mismatch) —\n * not merely echo the requested `context.network`.\n *\n * Drive it with a context whose `.network` differs from the network the wallet\n * actually reports (`walletReportedNetwork`); a compliant adapter returns\n * `session.network === walletReportedNetwork`. An adapter that echoes\n * `context.network` fails the contract.\n *\n * Adapters that genuinely cannot read the wallet's network must NOT claim to\n * (leave `session.network = context.network`) and must be recorded as\n * \"network-reported: no\" in the support matrix — they are out of scope for this\n * contract rather than silently passing it.\n */\nexport async function checkNetworkTruthfulness(\n adapter: WalletAdapter,\n context: AdapterContext,\n walletReportedNetwork: string,\n): Promise<TestResult> {\n const name = 'connect() session.network is the wallet effective network';\n try {\n const result = await adapter.connect(context);\n const got = result.session.network;\n const passed = got === walletReportedNetwork;\n return {\n name,\n passed,\n error: passed\n ? undefined\n : `expected session.network='${walletReportedNetwork}' (wallet-reported), got '${String(got)}'` +\n (got === context.network ? ' — merely echoed context.network' : ''),\n details: { expected: walletReportedNetwork, got, ctxNetwork: context.network },\n };\n } catch (err) {\n return { name, passed: false, error: err instanceof Error ? err.message : String(err) };\n }\n}\n","/**\n * Conformance Report Generation\n */\n\nimport type { TestResult } from './tests';\n\n/**\n * Conformance report\n */\nexport interface ConformanceReport {\n adapter: {\n walletId: string;\n name: string;\n version?: string;\n };\n environment: {\n nodeVersion: string;\n platform: string;\n timestamp: string;\n };\n results: {\n total: number;\n passed: number;\n failed: number;\n duration: number;\n };\n tests: TestResult[];\n}\n\n/**\n * Generate conformance report\n */\nexport function generateReport(\n adapter: { walletId: string; name: string; version?: string },\n tests: TestResult[],\n startTime: number\n): ConformanceReport {\n const passed = tests.filter((t) => t.passed).length;\n const failed = tests.filter((t) => !t.passed).length;\n\n return {\n adapter,\n environment: {\n nodeVersion: process.version,\n platform: process.platform,\n timestamp: new Date().toISOString(),\n },\n results: {\n total: tests.length,\n passed,\n failed,\n duration: Date.now() - startTime,\n },\n tests,\n };\n}\n\n/**\n * Format report as human-readable text\n */\nexport function formatReportText(report: ConformanceReport): string {\n const lines: string[] = [];\n\n lines.push('='.repeat(60));\n lines.push('PartyLayer Adapter Conformance Report');\n lines.push('='.repeat(60));\n lines.push('');\n lines.push(`Adapter: ${report.adapter.name} (${report.adapter.walletId})`);\n if (report.adapter.version) {\n lines.push(`Version: ${report.adapter.version}`);\n }\n lines.push(`Environment: Node ${report.environment.nodeVersion} on ${report.environment.platform}`);\n lines.push(`Timestamp: ${report.environment.timestamp}`);\n lines.push('');\n lines.push('Summary:');\n lines.push(` Total Tests: ${report.results.total}`);\n lines.push(` Passed: ${report.results.passed}`);\n lines.push(` Failed: ${report.results.failed}`);\n lines.push(` Duration: ${report.results.duration}ms`);\n lines.push('');\n lines.push('Test Results:');\n lines.push('-'.repeat(60));\n\n report.tests.forEach((test, index) => {\n const status = test.passed ? '✓' : '✗';\n lines.push(`${index + 1}. ${status} ${test.name}`);\n if (test.details) {\n Object.entries(test.details).forEach(([key, value]) => {\n lines.push(` ${key}: ${JSON.stringify(value)}`);\n });\n }\n if (test.error) {\n lines.push(` Error: ${test.error}`);\n }\n });\n\n lines.push('-'.repeat(60));\n lines.push('');\n\n if (report.results.failed === 0) {\n lines.push('✓ All tests passed!');\n } else {\n lines.push(`✗ ${report.results.failed} test(s) failed`);\n }\n\n return lines.join('\\n');\n}\n","#!/usr/bin/env node\n/**\n * PartyLayer Conformance Runner CLI\n * \n * Runs adapter conformance tests and generates reports.\n */\n\nimport { program } from 'commander';\nimport { readFileSync, writeFileSync, existsSync } from 'fs';\nimport { loadAdapter } from './loader';\nimport { runConformanceTests, createMockContext } from './tests';\nimport { generateReport, formatReportText, type ConformanceReport } from './report';\n\nprogram\n .name('partylayer-conformance')\n .description('Run conformance tests for PartyLayer wallet adapters')\n .version('0.1.0');\n\nprogram\n .command('run')\n .description('Run conformance tests for an adapter')\n .requiredOption('--adapter <packageOrPath>', 'Adapter package name or path')\n .option('--network <network>', 'Network to use', 'devnet')\n .option('--registryUrl <url>', 'Registry URL (optional)')\n .option('--output <path>', 'Output JSON report path', 'conformance-report.json')\n .action(async (options) => {\n try {\n console.log(`Loading adapter: ${options.adapter}`);\n const adapter = await loadAdapter(options.adapter);\n\n console.log(`Running conformance tests for: ${adapter.name} (${adapter.walletId})`);\n const context = createMockContext();\n context.network = options.network as 'devnet' | 'testnet' | 'mainnet';\n\n const startTime = Date.now();\n const testResults = await runConformanceTests(adapter, context);\n\n const report = generateReport(\n {\n walletId: adapter.walletId,\n name: adapter.name,\n },\n testResults,\n startTime\n );\n\n // Write JSON report\n writeFileSync(options.output, JSON.stringify(report, null, 2));\n console.log(`\\nReport written to: ${options.output}`);\n\n // Print human-readable summary\n console.log('\\n' + formatReportText(report));\n\n // Exit with error code if tests failed\n if (report.results.failed > 0) {\n process.exit(1);\n }\n } catch (err) {\n console.error('Error running conformance tests:', err);\n process.exit(1);\n }\n });\n\nprogram\n .command('report')\n .description('Format and display a conformance report')\n .requiredOption('--input <path>', 'Input JSON report path')\n .action((options) => {\n try {\n if (!existsSync(options.input)) {\n console.error(`Report file not found: ${options.input}`);\n process.exit(1);\n }\n\n const reportJson = readFileSync(options.input, 'utf-8');\n const report = JSON.parse(reportJson) as ConformanceReport;\n\n console.log(formatReportText(report));\n\n if (report.results.failed > 0) {\n process.exit(1);\n }\n } catch (err) {\n console.error('Error reading report:', err);\n process.exit(1);\n }\n });\n\nprogram\n .command('run-cip0103')\n .description('Run CIP-0103 conformance tests against a Provider')\n .option('--output <path>', 'Output JSON report path', 'cip0103-report.json')\n .action(async (options) => {\n try {\n const { runCIP0103ConformanceTests, formatCIP0103Report } = await import('./cip0103-tests');\n const { PartyLayerProvider } = await import('@partylayer/provider');\n\n console.log('Running CIP-0103 conformance tests...');\n\n const provider = new PartyLayerProvider();\n const report = await runCIP0103ConformanceTests(provider);\n\n writeFileSync(options.output, JSON.stringify(report, null, 2));\n console.log(`\\nReport written to: ${options.output}`);\n console.log('\\n' + formatCIP0103Report(report));\n\n if (report.failed > 0) {\n process.exit(1);\n }\n } catch (err) {\n console.error('Error running CIP-0103 conformance tests:', err);\n process.exit(1);\n }\n });\n\nprogram.parse();\n"]}
package/package.json CHANGED
@@ -1,11 +1,14 @@
1
1
  {
2
2
  "name": "@partylayer/conformance-runner",
3
- "version": "0.2.8",
3
+ "version": "0.2.10",
4
4
  "description": "CLI tool for running adapter conformance tests",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "partylayer-conformance": "./dist/index.js"
8
8
  },
9
+ "files": [
10
+ "dist"
11
+ ],
9
12
  "main": "./dist/index.js",
10
13
  "keywords": [
11
14
  "canton",
@@ -26,8 +29,8 @@
26
29
  "license": "MIT",
27
30
  "dependencies": {
28
31
  "commander": "^14.0.2",
29
- "@partylayer/core": "^0.12.0",
30
- "@partylayer/provider": "^0.5.0"
32
+ "@partylayer/core": "^0.14.0",
33
+ "@partylayer/provider": "^0.6.0"
31
34
  },
32
35
  "devDependencies": {
33
36
  "@types/node": "^20.11.0",
@@ -35,8 +38,8 @@
35
38
  "vitest": "^1.2.0"
36
39
  },
37
40
  "scripts": {
38
- "build": "tsc && tsc --project tsconfig.esm.json",
39
- "clean": "rm -rf dist *.tsbuildinfo",
41
+ "build": "tsup",
42
+ "clean": "rm -rf dist",
40
43
  "lint": "eslint src --ext .ts",
41
44
  "typecheck": "tsc --noEmit",
42
45
  "test": "vitest run"
package/CHANGELOG.md DELETED
@@ -1,168 +0,0 @@
1
- # @partylayer/conformance-runner
2
-
3
- ## 0.2.8
4
-
5
- ### Patch Changes
6
-
7
- - Updated dependencies [d7317a5]
8
- - Updated dependencies [482ec3e]
9
- - Updated dependencies [d132cf3]
10
- - @partylayer/core@0.12.0
11
- - @partylayer/provider@0.5.0
12
-
13
- ## 0.2.7
14
-
15
- ### Patch Changes
16
-
17
- - Updated dependencies
18
- - Updated dependencies
19
- - @partylayer/core@0.11.0
20
- - @partylayer/provider@0.4.0
21
-
22
- ## 0.2.6
23
-
24
- ### Patch Changes
25
-
26
- - Updated dependencies [4850140]
27
- - @partylayer/core@0.10.0
28
- - @partylayer/provider@0.3.2
29
-
30
- ## 0.2.5
31
-
32
- ### Patch Changes
33
-
34
- - Updated dependencies [a3f2ea4]
35
- - @partylayer/provider@0.3.0
36
-
37
- ## 0.2.4
38
-
39
- ### Patch Changes
40
-
41
- - Updated dependencies [5546a90]
42
- - @partylayer/core@0.9.0
43
- - @partylayer/provider@0.2.6
44
-
45
- ## 0.2.3
46
-
47
- ### Patch Changes
48
-
49
- - Updated dependencies [bef0ac6]
50
- - @partylayer/core@0.8.0
51
- - @partylayer/provider@0.2.5
52
-
53
- ## 0.2.2
54
-
55
- ### Patch Changes
56
-
57
- - Updated dependencies [3285ed8]
58
- - @partylayer/core@0.7.0
59
- - @partylayer/provider@0.2.4
60
-
61
- ## 0.2.1
62
-
63
- ### Patch Changes
64
-
65
- - Updated dependencies [6efe375]
66
- - Updated dependencies [adaff8e]
67
- - @partylayer/core@0.6.0
68
- - @partylayer/provider@0.2.3
69
-
70
- ## 0.2.0
71
-
72
- ### Minor Changes
73
-
74
- - 32c6c1c: feat: assert session.network is the wallet's effective network
75
-
76
- Add the `checkNetworkTruthfulness` contract: an adapter's `connect()` must
77
- surface the wallet's EFFECTIVE network in `session.network` (so the SDK can
78
- detect a network mismatch), not merely echo `ctx.network`. Adapters that
79
- genuinely cannot read the wallet network are recorded as "network-reported: no"
80
- in the support matrix rather than silently passing.
81
-
82
- ### Patch Changes
83
-
84
- - Updated dependencies [9642aee]
85
- - Updated dependencies [2c4c10c]
86
- - Updated dependencies [9642aee]
87
- - @partylayer/core@0.5.0
88
- - @partylayer/provider@0.2.1
89
-
90
- ## 0.1.10
91
-
92
- ### Patch Changes
93
-
94
- - 8532f3d: Fix: replace runtime `require()` of workspace packages with proper ESM imports
95
- so browser/ESM consumers don't crash.
96
-
97
- `PartyLayerClient.asProvider()` did a runtime
98
- `require('@partylayer/provider')`. In the ESM build that hits esbuild's
99
- `__require` shim and throws **"Dynamic require of \"@partylayer/provider\" is
100
- not supported"** in browser bundles (Next dev **and** production), crashing
101
- `PartyLayerKit` on mount (`asProvider()` is called from the React provider).
102
- It now uses a top-of-file static `import { createProviderBridge } from
103
- '@partylayer/provider'`. `asProvider()` stays synchronous with the same
104
- `CIP0103Provider` return type, and there is no dependency cycle
105
- (`@partylayer/provider` does not import `@partylayer/sdk`).
106
-
107
- `@partylayer/conformance-runner` (an ESM `type: module` CLI) used the `require`
108
- global (`require.resolve(...)` and a `require(adapterPath)` CJS fallback) in its
109
- adapter loader, which is undefined at runtime in ESM. It now derives a real Node
110
- require via `createRequire(import.meta.url)`.
111
-
112
- - Updated dependencies [42c862d]
113
- - Updated dependencies [c18a275]
114
- - Updated dependencies [53b1714]
115
- - @partylayer/provider@0.2.0
116
- - @partylayer/core@0.4.0
117
-
118
- ## 0.1.9
119
-
120
- ### Patch Changes
121
-
122
- - Updated dependencies
123
- - @partylayer/core@0.3.0
124
- - @partylayer/provider@0.1.7
125
-
126
- ## 0.1.7
127
-
128
- ### Patch Changes
129
-
130
- - Updated dependencies
131
- - @partylayer/core@0.2.6
132
- - @partylayer/provider@0.1.3
133
-
134
- ## 0.1.6
135
-
136
- ### Patch Changes
137
-
138
- - Add repository URLs and README documentation for registry-cli, adapter-starter, and conformance-runner.
139
-
140
- ## 0.1.5
141
-
142
- ### Patch Changes
143
-
144
- - Update repository URLs and metadata for public release. Add README documentation for all packages.
145
- - Updated dependencies
146
- - @partylayer/core@0.2.4
147
- - @partylayer/provider@0.1.1
148
-
149
- ## 0.1.3
150
-
151
- ### Patch Changes
152
-
153
- - Updated dependencies
154
- - @partylayer/core@0.2.2
155
-
156
- ## 0.1.2
157
-
158
- ### Patch Changes
159
-
160
- - Updated dependencies
161
- - @partylayer/core@0.2.1
162
-
163
- ## 0.1.1
164
-
165
- ### Patch Changes
166
-
167
- - Updated dependencies
168
- - @partylayer/core@0.2.0
@@ -1 +0,0 @@
1
- {"version":3,"file":"cip0103-tests.d.ts","sourceRoot":"","sources":["../src/cip0103-tests.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAKxD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,WAAW,CAAC;IACnE,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B;AAID,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,wBAAwB,CAAC,CAyQnC;AAWD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,wBAAwB,GAAG,MAAM,CAwB5E"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;GAIG"}
package/dist/loader.d.ts DELETED
@@ -1,11 +0,0 @@
1
- /**
2
- * Adapter Module Loader
3
- *
4
- * Dynamically loads adapter modules (ESM/CJS safe)
5
- */
6
- import type { WalletAdapter } from '@partylayer/core';
7
- /**
8
- * Load adapter from package or path
9
- */
10
- export declare function loadAdapter(packageNameOrPath: string): Promise<WalletAdapter>;
11
- //# sourceMappingURL=loader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAQtD;;GAEG;AACH,wBAAsB,WAAW,CAC/B,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,aAAa,CAAC,CAsDxB"}
package/dist/loader.js DELETED
@@ -1,65 +0,0 @@
1
- /**
2
- * Adapter Module Loader
3
- *
4
- * Dynamically loads adapter modules (ESM/CJS safe)
5
- */
6
- import { createRequire } from 'module';
7
- import { resolve } from 'path';
8
- import { pathToFileURL } from 'url';
9
- // This package builds to ESM (type: module), where the `require` global is
10
- // undefined — a bare `require(...)`/`require.resolve(...)` throws at runtime
11
- // (and would hit esbuild's `__require` shim in bundled consumers). Use a real
12
- // Node require created from this module's URL instead.
13
- const nodeRequire = createRequire(import.meta.url);
14
- /**
15
- * Load adapter from package or path
16
- */
17
- export async function loadAdapter(packageNameOrPath) {
18
- let adapterPath;
19
- // Check if it's a path
20
- if (packageNameOrPath.startsWith('.') || packageNameOrPath.startsWith('/')) {
21
- adapterPath = resolve(packageNameOrPath);
22
- }
23
- else {
24
- // Try to resolve as package
25
- try {
26
- adapterPath = nodeRequire.resolve(packageNameOrPath);
27
- }
28
- catch {
29
- throw new Error(`Cannot resolve adapter: ${packageNameOrPath}`);
30
- }
31
- }
32
- // Try to load as ESM first
33
- try {
34
- const moduleUrl = pathToFileURL(adapterPath).href;
35
- const module = await import(moduleUrl);
36
- // Look for default export or named export
37
- const adapter = module.default || module[Object.keys(module)[0]];
38
- if (!adapter) {
39
- throw new Error('No adapter export found');
40
- }
41
- // If it's a class, instantiate it
42
- if (typeof adapter === 'function') {
43
- return new adapter();
44
- }
45
- return adapter;
46
- }
47
- catch (err) {
48
- // Fallback to CJS
49
- try {
50
- const module = nodeRequire(adapterPath);
51
- const adapter = module.default || module[Object.keys(module)[0]];
52
- if (!adapter) {
53
- throw new Error('No adapter export found');
54
- }
55
- if (typeof adapter === 'function') {
56
- return new adapter();
57
- }
58
- return adapter;
59
- }
60
- catch (cjsErr) {
61
- throw new Error(`Failed to load adapter: ${err instanceof Error ? err.message : String(err)}`);
62
- }
63
- }
64
- }
65
- //# sourceMappingURL=loader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAIpC,2EAA2E;AAC3E,6EAA6E;AAC7E,8EAA8E;AAC9E,uDAAuD;AACvD,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEnD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,iBAAyB;IAEzB,IAAI,WAAmB,CAAC;IAExB,uBAAuB;IACvB,IAAI,iBAAiB,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3E,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,4BAA4B;QAC5B,IAAI,CAAC;YACH,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,2BAA2B,iBAAiB,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;QAEvC,0CAA0C;QAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,kCAAkC;QAClC,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;YAClC,OAAO,IAAI,OAAO,EAAE,CAAC;QACvB,CAAC;QAED,OAAO,OAAwB,CAAC;IAClC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,kBAAkB;QAClB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEjE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC7C,CAAC;YAED,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;gBAClC,OAAO,IAAI,OAAO,EAAE,CAAC;YACvB,CAAC;YAED,OAAO,OAAwB,CAAC;QAClC,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC9E,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
package/dist/report.d.ts DELETED
@@ -1,39 +0,0 @@
1
- /**
2
- * Conformance Report Generation
3
- */
4
- import type { TestResult } from './tests';
5
- /**
6
- * Conformance report
7
- */
8
- export interface ConformanceReport {
9
- adapter: {
10
- walletId: string;
11
- name: string;
12
- version?: string;
13
- };
14
- environment: {
15
- nodeVersion: string;
16
- platform: string;
17
- timestamp: string;
18
- };
19
- results: {
20
- total: number;
21
- passed: number;
22
- failed: number;
23
- duration: number;
24
- };
25
- tests: TestResult[];
26
- }
27
- /**
28
- * Generate conformance report
29
- */
30
- export declare function generateReport(adapter: {
31
- walletId: string;
32
- name: string;
33
- version?: string;
34
- }, tests: TestResult[], startTime: number): ConformanceReport;
35
- /**
36
- * Format report as human-readable text
37
- */
38
- export declare function formatReportText(report: ConformanceReport): string;
39
- //# sourceMappingURL=report.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,WAAW,EAAE;QACX,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAC7D,KAAK,EAAE,UAAU,EAAE,EACnB,SAAS,EAAE,MAAM,GAChB,iBAAiB,CAmBnB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CA8ClE"}
package/dist/report.js DELETED
@@ -1,72 +0,0 @@
1
- /**
2
- * Conformance Report Generation
3
- */
4
- /**
5
- * Generate conformance report
6
- */
7
- export function generateReport(adapter, tests, startTime) {
8
- const passed = tests.filter((t) => t.passed).length;
9
- const failed = tests.filter((t) => !t.passed).length;
10
- return {
11
- adapter,
12
- environment: {
13
- nodeVersion: process.version,
14
- platform: process.platform,
15
- timestamp: new Date().toISOString(),
16
- },
17
- results: {
18
- total: tests.length,
19
- passed,
20
- failed,
21
- duration: Date.now() - startTime,
22
- },
23
- tests,
24
- };
25
- }
26
- /**
27
- * Format report as human-readable text
28
- */
29
- export function formatReportText(report) {
30
- const lines = [];
31
- lines.push('='.repeat(60));
32
- lines.push('PartyLayer Adapter Conformance Report');
33
- lines.push('='.repeat(60));
34
- lines.push('');
35
- lines.push(`Adapter: ${report.adapter.name} (${report.adapter.walletId})`);
36
- if (report.adapter.version) {
37
- lines.push(`Version: ${report.adapter.version}`);
38
- }
39
- lines.push(`Environment: Node ${report.environment.nodeVersion} on ${report.environment.platform}`);
40
- lines.push(`Timestamp: ${report.environment.timestamp}`);
41
- lines.push('');
42
- lines.push('Summary:');
43
- lines.push(` Total Tests: ${report.results.total}`);
44
- lines.push(` Passed: ${report.results.passed}`);
45
- lines.push(` Failed: ${report.results.failed}`);
46
- lines.push(` Duration: ${report.results.duration}ms`);
47
- lines.push('');
48
- lines.push('Test Results:');
49
- lines.push('-'.repeat(60));
50
- report.tests.forEach((test, index) => {
51
- const status = test.passed ? '✓' : '✗';
52
- lines.push(`${index + 1}. ${status} ${test.name}`);
53
- if (test.details) {
54
- Object.entries(test.details).forEach(([key, value]) => {
55
- lines.push(` ${key}: ${JSON.stringify(value)}`);
56
- });
57
- }
58
- if (test.error) {
59
- lines.push(` Error: ${test.error}`);
60
- }
61
- });
62
- lines.push('-'.repeat(60));
63
- lines.push('');
64
- if (report.results.failed === 0) {
65
- lines.push('✓ All tests passed!');
66
- }
67
- else {
68
- lines.push(`✗ ${report.results.failed} test(s) failed`);
69
- }
70
- return lines.join('\n');
71
- }
72
- //# sourceMappingURL=report.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
package/dist/tests.d.ts DELETED
@@ -1,50 +0,0 @@
1
- /**
2
- * Adapter Conformance Tests
3
- *
4
- * Standard contract tests that all adapters must pass.
5
- */
6
- import type { WalletAdapter, AdapterContext } from '@partylayer/core';
7
- /**
8
- * Test result
9
- */
10
- export interface TestResult {
11
- name: string;
12
- passed: boolean;
13
- error?: string;
14
- details?: Record<string, unknown>;
15
- }
16
- /**
17
- * Conformance test suite
18
- */
19
- export interface ConformanceSuite {
20
- adapter: WalletAdapter;
21
- context: AdapterContext;
22
- results: TestResult[];
23
- }
24
- /**
25
- * Create mock adapter context
26
- */
27
- export declare function createMockContext(): AdapterContext;
28
- /**
29
- * Run conformance tests
30
- */
31
- export declare function runConformanceTests(adapter: WalletAdapter, context: AdapterContext): Promise<TestResult[]>;
32
- /**
33
- * Network-truthfulness contract.
34
- *
35
- * An adapter's `connect()` MUST surface the wallet's EFFECTIVE network in
36
- * `session.network` (so the SDK can detect a wallet/dApp network mismatch) —
37
- * not merely echo the requested `context.network`.
38
- *
39
- * Drive it with a context whose `.network` differs from the network the wallet
40
- * actually reports (`walletReportedNetwork`); a compliant adapter returns
41
- * `session.network === walletReportedNetwork`. An adapter that echoes
42
- * `context.network` fails the contract.
43
- *
44
- * Adapters that genuinely cannot read the wallet's network must NOT claim to
45
- * (leave `session.network = context.network`) and must be recorded as
46
- * "network-reported: no" in the support matrix — they are out of scope for this
47
- * contract rather than silently passing it.
48
- */
49
- export declare function checkNetworkTruthfulness(adapter: WalletAdapter, context: AdapterContext, walletReportedNetwork: string): Promise<TestResult>;
50
- //# sourceMappingURL=tests.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tests.d.ts","sourceRoot":"","sources":["../src/tests.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EAGf,MAAM,kBAAkB,CAAC;AAK1B;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CA+BlD;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,UAAU,EAAE,CAAC,CA8JvB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,cAAc,EACvB,qBAAqB,EAAE,MAAM,GAC5B,OAAO,CAAC,UAAU,CAAC,CAkBrB"}