@bind-protocol/sdk 0.5.0 → 0.6.0

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.
Files changed (35) hide show
  1. package/dist/{adapter-D5b7G1RU.d.cts → adapter-D6l9i4He.d.cts} +2 -2
  2. package/dist/{adapter-TZa35x8K.d.ts → adapter-DROeeUfk.d.ts} +2 -2
  3. package/dist/adapters/dimo/index.d.cts +3 -3
  4. package/dist/adapters/dimo/index.d.ts +3 -3
  5. package/dist/adapters/index.cjs +100 -0
  6. package/dist/adapters/index.cjs.map +1 -1
  7. package/dist/adapters/index.d.cts +4 -4
  8. package/dist/adapters/index.d.ts +4 -4
  9. package/dist/adapters/index.js +100 -0
  10. package/dist/adapters/index.js.map +1 -1
  11. package/dist/adapters/zktls/index.cjs +100 -0
  12. package/dist/adapters/zktls/index.cjs.map +1 -1
  13. package/dist/adapters/zktls/index.d.cts +3 -3
  14. package/dist/adapters/zktls/index.d.ts +3 -3
  15. package/dist/adapters/zktls/index.js +100 -0
  16. package/dist/adapters/zktls/index.js.map +1 -1
  17. package/dist/{client-BgnXV1AH.d.ts → client-C5pQqkg5.d.cts} +44 -1
  18. package/dist/{client-BN68auuk.d.cts → client-CjX02Bdl.d.ts} +44 -1
  19. package/dist/core/index.cjs +100 -0
  20. package/dist/core/index.cjs.map +1 -1
  21. package/dist/core/index.d.cts +2 -2
  22. package/dist/core/index.d.ts +2 -2
  23. package/dist/core/index.js +100 -0
  24. package/dist/core/index.js.map +1 -1
  25. package/dist/index.cjs +100 -0
  26. package/dist/index.cjs.map +1 -1
  27. package/dist/index.d.cts +4 -4
  28. package/dist/index.d.ts +4 -4
  29. package/dist/index.js +100 -0
  30. package/dist/index.js.map +1 -1
  31. package/dist/{types-CsmX8NG4.d.cts → types-J8WRoDpV.d.cts} +1 -1
  32. package/dist/{types-CWadrDVs.d.cts → types-KpRMzgLd.d.cts} +114 -1
  33. package/dist/{types-CWadrDVs.d.ts → types-KpRMzgLd.d.ts} +114 -1
  34. package/dist/{types-ohCQhfQK.d.ts → types-meqY_BWV.d.ts} +1 -1
  35. package/package.json +1 -1
@@ -329,6 +329,106 @@ var BindClient = class {
329
329
  return response.json();
330
330
  }
331
331
  // ==========================================================================
332
+ // Shared Proof Methods
333
+ // ==========================================================================
334
+ /**
335
+ * Share a completed proof with a verifier organization
336
+ * @param request - Share proof request with proveJobId and verifierOrgId
337
+ * @returns The created shared proof
338
+ */
339
+ async shareProof(request) {
340
+ const response = await this.fetch("/api/shared-proofs", {
341
+ method: "POST",
342
+ body: JSON.stringify(request)
343
+ });
344
+ return response.json();
345
+ }
346
+ /**
347
+ * List shared proofs (outgoing or incoming)
348
+ * @param options - Filter by direction, pagination, and inclusion options
349
+ * @returns Paginated list of shared proofs
350
+ */
351
+ async listSharedProofs(options = {}) {
352
+ const params = new URLSearchParams();
353
+ if (options.direction) params.set("direction", options.direction);
354
+ if (options.limit !== void 0) params.set("limit", options.limit.toString());
355
+ if (options.offset !== void 0) params.set("offset", options.offset.toString());
356
+ if (options.includeExpired) params.set("includeExpired", "true");
357
+ if (options.includeRevoked) params.set("includeRevoked", "true");
358
+ const queryString = params.toString();
359
+ const path = queryString ? `/api/shared-proofs?${queryString}` : "/api/shared-proofs";
360
+ const response = await this.fetch(path);
361
+ return response.json();
362
+ }
363
+ /**
364
+ * Get a specific shared proof by ID
365
+ * @param sharedProofId - The shared proof ID
366
+ * @returns The shared proof details
367
+ */
368
+ async getSharedProof(sharedProofId) {
369
+ const response = await this.fetch(`/api/shared-proofs/${encodeURIComponent(sharedProofId)}`);
370
+ return response.json();
371
+ }
372
+ /**
373
+ * Revoke a shared proof. Only the sharing organization can revoke.
374
+ * @param sharedProofId - The shared proof ID to revoke
375
+ * @returns The revocation result
376
+ */
377
+ async revokeSharedProof(sharedProofId) {
378
+ const response = await this.fetch(`/api/shared-proofs/${encodeURIComponent(sharedProofId)}`, {
379
+ method: "DELETE"
380
+ });
381
+ return response.json();
382
+ }
383
+ // ==========================================================================
384
+ // Verification Methods
385
+ // ==========================================================================
386
+ /**
387
+ * Verify a shared proof
388
+ * @param sharedProofId - The shared proof ID to verify
389
+ * @returns The verification result
390
+ */
391
+ async verifySharedProof(sharedProofId) {
392
+ const response = await this.fetch(`/api/verify/shared/${encodeURIComponent(sharedProofId)}`, {
393
+ method: "POST"
394
+ });
395
+ return response.json();
396
+ }
397
+ /**
398
+ * Verify an uploaded proof
399
+ * @param proofBuffer - The proof binary as ArrayBuffer, Uint8Array, or Buffer
400
+ * @param vkBuffer - The verification key binary as ArrayBuffer, Uint8Array, or Buffer
401
+ * @returns The verification result
402
+ */
403
+ async verifyUploadedProof(proofBuffer, vkBuffer) {
404
+ const proofBytes = proofBuffer instanceof Uint8Array ? proofBuffer : new Uint8Array(proofBuffer);
405
+ const vkBytes = vkBuffer instanceof Uint8Array ? vkBuffer : new Uint8Array(vkBuffer);
406
+ const proofBase64 = typeof Buffer !== "undefined" ? Buffer.from(proofBytes).toString("base64") : btoa(String.fromCharCode(...proofBytes));
407
+ const vkBase64 = typeof Buffer !== "undefined" ? Buffer.from(vkBytes).toString("base64") : btoa(String.fromCharCode(...vkBytes));
408
+ const response = await this.fetch("/api/verify/upload", {
409
+ method: "POST",
410
+ body: JSON.stringify({
411
+ proof: proofBase64,
412
+ vk: vkBase64
413
+ })
414
+ });
415
+ return response.json();
416
+ }
417
+ /**
418
+ * Get verification history for the authenticated organization
419
+ * @param options - Pagination options
420
+ * @returns Paginated list of verification results
421
+ */
422
+ async getVerificationHistory(options = {}) {
423
+ const params = new URLSearchParams();
424
+ if (options.limit !== void 0) params.set("limit", options.limit.toString());
425
+ if (options.offset !== void 0) params.set("offset", options.offset.toString());
426
+ const queryString = params.toString();
427
+ const path = queryString ? `/api/verify/history?${queryString}` : "/api/verify/history";
428
+ const response = await this.fetch(path);
429
+ return response.json();
430
+ }
431
+ // ==========================================================================
332
432
  // Private Helpers
333
433
  // ==========================================================================
334
434
  async fetch(path, init) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/errors.ts","../../../src/core/client.ts","../../../src/adapters/zktls/adapter.ts","../../../src/adapters/zktls/coinbase.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Custom error classes for the Bind Protocol SDK\n */\n\nexport class BindError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly details?: Record<string, unknown>\n ) {\n super(message);\n this.name = 'BindError';\n }\n}\n\nexport class ApiError extends BindError {\n constructor(\n message: string,\n public readonly status: number,\n public readonly response?: unknown\n ) {\n super(message, 'API_ERROR', { status, response });\n this.name = 'ApiError';\n }\n}\n\nexport class AuthenticationError extends BindError {\n constructor(message = 'Authentication failed') {\n super(message, 'AUTH_ERROR');\n this.name = 'AuthenticationError';\n }\n}\n\nexport class TimeoutError extends BindError {\n constructor(message: string, public readonly timeoutMs: number) {\n super(message, 'TIMEOUT_ERROR', { timeoutMs });\n this.name = 'TimeoutError';\n }\n}\n\nexport class InsufficientCreditsError extends BindError {\n constructor(\n public readonly required: number,\n public readonly available: number\n ) {\n super(\n `Insufficient credits: need ${required}, have ${available}`,\n 'INSUFFICIENT_CREDITS',\n { required, available }\n );\n this.name = 'InsufficientCreditsError';\n }\n}\n\n/**\n * Thrown when a zkTLS session expires before completion\n */\nexport class ZkTlsSessionExpiredError extends BindError {\n constructor(public readonly sessionId: string) {\n super(`zkTLS session expired: ${sessionId}`, 'ZKTLS_SESSION_EXPIRED', { sessionId });\n this.name = 'ZkTlsSessionExpiredError';\n }\n}\n\n/**\n * Thrown when a zkTLS session fails\n */\nexport class ZkTlsSessionFailedError extends BindError {\n constructor(\n public readonly sessionId: string,\n public readonly sessionError: string\n ) {\n super(`zkTLS session failed: ${sessionError}`, 'ZKTLS_SESSION_FAILED', { sessionId, sessionError });\n this.name = 'ZkTlsSessionFailedError';\n }\n}\n\n/**\n * Thrown when an extractor is not found or disabled\n */\nexport class ZkTlsExtractorError extends BindError {\n constructor(\n public readonly extractorId: string,\n message: string\n ) {\n super(message, 'ZKTLS_EXTRACTOR_ERROR', { extractorId });\n this.name = 'ZkTlsExtractorError';\n }\n}\n","/**\n * BindClient - Main client for interacting with the Bind Protocol API\n */\nimport type { PublicPolicySpec } from '@bind-protocol/policy-spec';\nimport {\n ApiError,\n AuthenticationError,\n InsufficientCreditsError,\n TimeoutError,\n ZkTlsSessionExpiredError,\n ZkTlsSessionFailedError,\n} from './errors';\nimport type {\n BindClientOptions,\n ProveJobInputs,\n SubmitProveJobResponse,\n GetProveJobResponse,\n ListProveJobsOptions,\n ListProveJobsResponse,\n ProveJob,\n VerificationMode,\n ListExtractorsResponse,\n ListAttestationsResponse,\n GetAttestationResponse,\n CreateSessionResponse,\n GetSessionResponse,\n ZkTlsSession,\n Circuit,\n ListCircuitsResponse,\n GetCircuitResponse,\n ActivateCircuitResponse,\n} from './types';\n\nconst DEFAULT_BASE_URL = 'https://api.bindprotocol.com';\nconst DEFAULT_POLL_INTERVAL_MS = 2000;\nconst DEFAULT_TIMEOUT_MS = 300000; // 5 minutes\n\n/**\n * Derive a circuit ID from policy ID and version\n * This matches the server's auto-generation logic.\n * Format: {policyId}.v{version} with version dots replaced by underscores\n *\n * @example\n * deriveCircuitId(\"bind.demo.credit-score\", \"0.1.0\")\n * // Returns: \"bind.demo.credit-score.v0_1_0\"\n */\nexport function deriveCircuitId(policyId: string, version: string): string {\n const sanitizedVersion = version.replace(/\\./g, '_');\n return `${policyId}.v${sanitizedVersion}`;\n}\n\nexport class BindClient {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n private readonly headers: Record<string, string>;\n\n constructor(options: BindClientOptions) {\n this.apiKey = options.apiKey;\n this.baseUrl = options.baseUrl || process.env.BIND_API_URL || DEFAULT_BASE_URL;\n this.headers = {\n 'X-API-Key': this.apiKey,\n 'Content-Type': 'application/json',\n };\n }\n\n // ==========================================================================\n // Prove Job Methods\n // ==========================================================================\n\n /**\n * Submit a prove job for async processing\n * @param circuitId - The circuit identifier (e.g., \"bind.mobility.riskband.v1\")\n * @param inputs - Circuit inputs as key-value pairs (all values must be strings)\n * @param options - Optional configuration including verificationMode\n * @returns The submitted job details\n * @throws {ApiError} If the API request fails\n * @throws {InsufficientCreditsError} If there aren't enough credits\n */\n async submitProveJob(\n circuitId: string,\n inputs: ProveJobInputs,\n options?: {\n /**\n * How to verify the proof:\n * - 'zkverify': Submit to zkVerify blockchain (default if zkVerify is enabled)\n * - 'self_verify': Store in S3, client downloads and verifies locally\n */\n verificationMode?: VerificationMode;\n }\n ): Promise<SubmitProveJobResponse> {\n const response = await this.fetch('/api/prove', {\n method: 'POST',\n body: JSON.stringify({\n circuitId,\n inputs,\n verificationMode: options?.verificationMode,\n }),\n });\n\n const result: SubmitProveJobResponse = await response.json();\n\n // Check for insufficient credits\n if (!result.success && result.requiredCredits !== undefined && result.availableCredits !== undefined) {\n throw new InsufficientCreditsError(result.requiredCredits, result.availableCredits);\n }\n\n return result;\n }\n\n /**\n * Get the status and results of a prove job\n * @param jobId - The unique job identifier\n * @returns The job details including status and outputs\n */\n async getProveJob(jobId: string): Promise<GetProveJobResponse> {\n const response = await this.fetch(`/api/prove/${encodeURIComponent(jobId)}`);\n return response.json();\n }\n\n /**\n * List prove jobs for the authenticated organization\n * @param options - Optional filters for status, limit, and offset\n * @returns Paginated list of prove jobs\n */\n async listProveJobs(options: ListProveJobsOptions = {}): Promise<ListProveJobsResponse> {\n const params = new URLSearchParams();\n if (options.status) params.set('status', options.status);\n if (options.limit !== undefined) params.set('limit', options.limit.toString());\n if (options.offset !== undefined) params.set('offset', options.offset.toString());\n\n const queryString = params.toString();\n const path = queryString ? `/api/prove?${queryString}` : '/api/prove';\n\n const response = await this.fetch(path);\n return response.json();\n }\n\n /**\n * Poll for prove job completion\n * @param jobId - The unique job identifier\n * @param options - Polling options\n * @returns The completed or failed job\n * @throws {TimeoutError} If the job doesn't complete within the timeout\n */\n async waitForProveJob(\n jobId: string,\n options: {\n intervalMs?: number;\n timeoutMs?: number;\n onProgress?: (job: ProveJob) => void;\n } = {}\n ): Promise<ProveJob> {\n const intervalMs = options.intervalMs ?? DEFAULT_POLL_INTERVAL_MS;\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const startTime = Date.now();\n\n while (Date.now() - startTime < timeoutMs) {\n const result = await this.getProveJob(jobId);\n\n if (!result.success || !result.data) {\n throw new ApiError(\n result.error || 'Failed to get prove job',\n 500,\n result\n );\n }\n\n const job = result.data;\n\n if (options.onProgress) {\n options.onProgress(job);\n }\n\n if (job.status === 'completed' || job.status === 'failed') {\n return job;\n }\n\n await this.sleep(intervalMs);\n }\n\n throw new TimeoutError(\n `Timeout waiting for prove job ${jobId} after ${timeoutMs}ms`,\n timeoutMs\n );\n }\n\n // ==========================================================================\n // Policy Methods (Public, no authentication required)\n // ==========================================================================\n\n /**\n * List all available public policies\n * @returns Array of public policy specifications\n */\n async listPolicies(): Promise<PublicPolicySpec[]> {\n const response = await fetch(`${this.baseUrl}/api/policies`, {\n method: 'GET',\n });\n\n if (!response.ok) {\n throw new ApiError(\n `Failed to fetch policies: ${response.statusText}`,\n response.status\n );\n }\n\n const json = await response.json();\n // API wraps response in { success, data }\n return json.data ?? json;\n }\n\n /**\n * Get a specific policy by ID\n * @param policyId - The unique policy identifier\n * @returns The public policy specification, or null if not found\n */\n async getPolicy(policyId: string): Promise<PublicPolicySpec | null> {\n const response = await fetch(\n `${this.baseUrl}/api/policies/${encodeURIComponent(policyId)}`,\n { method: 'GET' }\n );\n\n if (response.status === 404) {\n return null;\n }\n\n if (!response.ok) {\n throw new ApiError(\n `Failed to fetch policy: ${response.statusText}`,\n response.status\n );\n }\n\n const json = await response.json();\n // API wraps response in { success, data }\n return json.data ?? json;\n }\n\n // ==========================================================================\n // zkTLS Methods\n // ==========================================================================\n\n /**\n * List available zkTLS extractors (data sources)\n * @returns Array of available extractors\n */\n async listExtractors(): Promise<ListExtractorsResponse> {\n const response = await this.fetch('/api/zktls/extractors');\n return response.json();\n }\n\n /**\n * List zkTLS attestations for the authenticated organization\n * @returns Array of attestations\n */\n async listAttestations(): Promise<ListAttestationsResponse> {\n const response = await this.fetch('/api/zktls/attestations');\n return response.json();\n }\n\n /**\n * Get a specific attestation by ID\n * @param attestationId - The attestation UUID\n * @returns The attestation or null if not found\n */\n async getAttestation(attestationId: string): Promise<GetAttestationResponse> {\n const response = await this.fetch(`/api/zktls/attestations/${encodeURIComponent(attestationId)}`);\n return response.json();\n }\n\n /**\n * Create a new zkTLS session for data attestation\n * @param extractorId - The extractor to use (e.g., \"coinbase\")\n * @param callbackUrl - URL to redirect to after authentication\n * @returns Session ID and auth URL to redirect user to\n */\n async createZkTlsSession(\n extractorId: string,\n callbackUrl: string\n ): Promise<CreateSessionResponse> {\n const response = await this.fetch('/api/zktls/sessions', {\n method: 'POST',\n body: JSON.stringify({ extractor: extractorId, callbackUrl }),\n });\n return response.json();\n }\n\n /**\n * Get the status of a zkTLS session\n * @param sessionId - The session UUID\n * @returns Session status and attestation if completed\n */\n async getZkTlsSession(sessionId: string): Promise<GetSessionResponse> {\n const response = await this.fetch(`/api/zktls/sessions/${encodeURIComponent(sessionId)}`);\n return response.json();\n }\n\n /**\n * Wait for a zkTLS session to complete\n * @param sessionId - The session UUID\n * @param options - Polling options\n * @returns The completed session with attestation\n * @throws {ZkTlsSessionExpiredError} If session expires\n * @throws {ZkTlsSessionFailedError} If session fails\n * @throws {TimeoutError} If timeout is reached\n */\n async waitForZkTlsSession(\n sessionId: string,\n options: {\n intervalMs?: number;\n timeoutMs?: number;\n onProgress?: (session: ZkTlsSession) => void;\n } = {}\n ): Promise<ZkTlsSession> {\n const intervalMs = options.intervalMs ?? DEFAULT_POLL_INTERVAL_MS;\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const startTime = Date.now();\n\n while (Date.now() - startTime < timeoutMs) {\n const result = await this.getZkTlsSession(sessionId);\n\n if (!result.success || !result.data) {\n throw new ApiError(\n result.error || 'Failed to get zkTLS session',\n 500,\n result\n );\n }\n\n const session = result.data;\n\n if (options.onProgress) {\n options.onProgress(session);\n }\n\n if (session.status === 'completed') {\n return session;\n }\n\n if (session.status === 'failed') {\n throw new ZkTlsSessionFailedError(sessionId, session.error || 'Unknown error');\n }\n\n if (session.status === 'expired') {\n throw new ZkTlsSessionExpiredError(sessionId);\n }\n\n await this.sleep(intervalMs);\n }\n\n throw new TimeoutError(\n `Timeout waiting for zkTLS session ${sessionId} after ${timeoutMs}ms`,\n timeoutMs\n );\n }\n\n // ==========================================================================\n // Circuit Methods\n // ==========================================================================\n\n /**\n * List available circuits\n * @param options - Optional filters\n * @returns Array of circuits\n */\n async listCircuits(options: { status?: 'active' | 'all'; policyId?: string } = {}): Promise<ListCircuitsResponse> {\n const params = new URLSearchParams();\n if (options.status) params.set('status', options.status);\n if (options.policyId) params.set('policyId', options.policyId);\n\n const queryString = params.toString();\n const path = queryString ? `/api/circuits?${queryString}` : '/api/circuits';\n\n const response = await this.fetch(path);\n return response.json();\n }\n\n /**\n * Get a specific circuit by ID\n * @param circuitId - The circuit identifier\n * @returns The circuit details or null if not found\n */\n async getCircuit(circuitId: string): Promise<GetCircuitResponse> {\n const response = await this.fetch(`/api/circuits/${encodeURIComponent(circuitId)}`);\n return response.json();\n }\n\n /**\n * Activate a circuit (requires validation to have passed)\n * @param circuitId - The circuit identifier to activate\n * @returns The activation result\n */\n async activateCircuit(circuitId: string): Promise<ActivateCircuitResponse> {\n const response = await this.fetch(`/api/circuits/${encodeURIComponent(circuitId)}/activate`, {\n method: 'POST',\n });\n return response.json();\n }\n\n // ==========================================================================\n // Private Helpers\n // ==========================================================================\n\n private async fetch(path: string, init?: RequestInit): Promise<Response> {\n const response = await fetch(`${this.baseUrl}${path}`, {\n ...init,\n headers: {\n ...this.headers,\n ...init?.headers,\n },\n });\n\n if (response.status === 401) {\n throw new AuthenticationError();\n }\n\n return response;\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","/**\n * Base zkTLS Adapter\n *\n * Provides common functionality for zkTLS-based data sources.\n */\n\nimport { BindClient } from '../../core/client';\nimport type { DataAdapter } from '../types';\nimport type { ProveJobInputs } from '../../core/types';\nimport type { ZkTlsAdapterConfig, ZkTlsQuery, ZkTlsAttestationData } from './types';\n\nexport abstract class ZkTlsAdapter implements DataAdapter<ZkTlsAdapterConfig, ZkTlsQuery, ZkTlsAttestationData> {\n abstract readonly id: string;\n abstract readonly name: string;\n abstract readonly description: string;\n abstract readonly extractorId: string;\n protected abstract readonly supportedCircuits: string[];\n\n protected readonly client: BindClient;\n\n constructor(config: ZkTlsAdapterConfig) {\n this.client = new BindClient({\n apiKey: config.apiKey,\n baseUrl: config.baseUrl,\n });\n }\n\n /**\n * Fetch attestation data - either from existing attestation or by creating session\n */\n async fetchData(query: ZkTlsQuery): Promise<ZkTlsAttestationData> {\n if (query.attestationId) {\n return this.fetchExistingAttestation(query.attestationId);\n }\n\n if (query.callbackUrl) {\n return this.initiateSession(query.callbackUrl);\n }\n\n throw new Error('Either attestationId or callbackUrl must be provided');\n }\n\n /**\n * Transform attestation to circuit inputs\n */\n abstract toCircuitInputs(data: ZkTlsAttestationData, circuitId: string): ProveJobInputs;\n\n /**\n * Get supported circuits\n */\n getSupportedCircuits(): string[] {\n return [...this.supportedCircuits];\n }\n\n /**\n * Create a zkTLS session and return the auth URL\n * Client should redirect user to this URL\n */\n async createSession(callbackUrl: string): Promise<{ sessionId: string; authUrl: string }> {\n const result = await this.client.createZkTlsSession(this.extractorId, callbackUrl);\n\n if (!result.success || !result.data) {\n throw new Error(result.error || 'Failed to create zkTLS session');\n }\n\n return result.data;\n }\n\n /**\n * Wait for session completion and return attestation\n */\n async waitForSession(\n sessionId: string,\n options?: { intervalMs?: number; timeoutMs?: number }\n ): Promise<ZkTlsAttestationData> {\n const session = await this.client.waitForZkTlsSession(sessionId, options);\n\n if (!session.attestation) {\n throw new Error('Session completed but no attestation found');\n }\n\n const extractors = await this.client.listExtractors();\n const extractor = extractors.data?.find(e => e.id === this.extractorId);\n\n if (!extractor) {\n throw new Error(`Extractor not found: ${this.extractorId}`);\n }\n\n return {\n attestation: session.attestation,\n extractor,\n };\n }\n\n // ===========================================================================\n // Protected helpers\n // ===========================================================================\n\n protected async fetchExistingAttestation(attestationId: string): Promise<ZkTlsAttestationData> {\n const result = await this.client.getAttestation(attestationId);\n\n if (!result.success || !result.data) {\n throw new Error(result.error || 'Attestation not found');\n }\n\n const extractors = await this.client.listExtractors();\n const extractor = extractors.data?.find(e => e.id === result.data!.extractor);\n\n if (!extractor) {\n throw new Error(`Extractor not found: ${result.data.extractor}`);\n }\n\n return {\n attestation: result.data,\n extractor,\n };\n }\n\n protected async initiateSession(callbackUrl: string): Promise<ZkTlsAttestationData> {\n const { sessionId } = await this.createSession(callbackUrl);\n // Note: In a real flow, you'd redirect user and poll later\n // This is for programmatic use where auth is already done\n return this.waitForSession(sessionId);\n }\n\n protected validateCircuit(circuitId: string): void {\n if (!this.supportedCircuits.includes(circuitId)) {\n throw new Error(\n `Circuit \"${circuitId}\" is not supported by ${this.name}. ` +\n `Supported circuits: ${this.supportedCircuits.join(', ')}`\n );\n }\n }\n}\n","/**\n * Coinbase KYC Adapter\n *\n * Fetches KYC attestation data from Coinbase via zkTLS\n * and transforms it for identity verification circuits.\n */\n\nimport { ZkTlsAdapter } from './adapter';\nimport type { ProveJobInputs } from '../../core/types';\nimport type { ZkTlsAdapterConfig, ZkTlsAttestationData, CoinbaseKycClaims } from './types';\n\nconst SUPPORTED_CIRCUITS = [\n 'bind.identity.kyc.v1',\n 'bind.identity.coinbase.v1',\n];\n\nexport class CoinbaseAdapter extends ZkTlsAdapter {\n readonly id = 'coinbase-kyc';\n readonly name = 'Coinbase KYC';\n readonly description = 'Fetches KYC verification status from Coinbase via zkTLS attestation';\n readonly extractorId = 'coinbase';\n protected readonly supportedCircuits = SUPPORTED_CIRCUITS;\n\n constructor(config: ZkTlsAdapterConfig) {\n super(config);\n }\n\n /**\n * Transform Coinbase attestation to circuit inputs\n */\n toCircuitInputs(data: ZkTlsAttestationData, circuitId: string): ProveJobInputs {\n this.validateCircuit(circuitId);\n\n const claims = data.attestation.claims as unknown as CoinbaseKycClaims;\n\n switch (circuitId) {\n case 'bind.identity.kyc.v1':\n return this.toKycInputs(data, claims);\n case 'bind.identity.coinbase.v1':\n return this.toCoinbaseInputs(data, claims);\n default:\n throw new Error(`No input transformer for circuit: ${circuitId}`);\n }\n }\n\n // ===========================================================================\n // Private transformers\n // ===========================================================================\n\n private toKycInputs(data: ZkTlsAttestationData, claims: CoinbaseKycClaims): ProveJobInputs {\n return {\n kycVerified: String(claims.kyc_verified),\n kycLevel: String(claims.kyc_level ?? 0),\n countryCode: claims.country_code ?? '',\n attestationId: data.attestation.id,\n witnessId: data.attestation.witness.id,\n signature: data.attestation.signature,\n timestamp: String(data.attestation.createdAt),\n };\n }\n\n private toCoinbaseInputs(data: ZkTlsAttestationData, claims: CoinbaseKycClaims): ProveJobInputs {\n return {\n kycVerified: String(claims.kyc_verified),\n kycLevel: String(claims.kyc_level ?? 0),\n countryCode: claims.country_code ?? '',\n accountCreatedAt: claims.account_created_at ?? '',\n attestationId: data.attestation.id,\n witnessId: data.attestation.witness.id,\n witnessPublicKey: data.attestation.witness.publicKey,\n signature: data.attestation.signature,\n url: data.attestation.url,\n method: data.attestation.method,\n expiresAt: String(data.attestation.expiresAt),\n };\n }\n}\n\n/**\n * Factory function to create a Coinbase adapter\n */\nexport function createCoinbaseAdapter(config: ZkTlsAdapterConfig): CoinbaseAdapter {\n return new CoinbaseAdapter(config);\n}\n"]}
1
+ {"version":3,"sources":["../../../src/core/errors.ts","../../../src/core/client.ts","../../../src/adapters/zktls/adapter.ts","../../../src/adapters/zktls/coinbase.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Custom error classes for the Bind Protocol SDK\n */\n\nexport class BindError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly details?: Record<string, unknown>\n ) {\n super(message);\n this.name = 'BindError';\n }\n}\n\nexport class ApiError extends BindError {\n constructor(\n message: string,\n public readonly status: number,\n public readonly response?: unknown\n ) {\n super(message, 'API_ERROR', { status, response });\n this.name = 'ApiError';\n }\n}\n\nexport class AuthenticationError extends BindError {\n constructor(message = 'Authentication failed') {\n super(message, 'AUTH_ERROR');\n this.name = 'AuthenticationError';\n }\n}\n\nexport class TimeoutError extends BindError {\n constructor(message: string, public readonly timeoutMs: number) {\n super(message, 'TIMEOUT_ERROR', { timeoutMs });\n this.name = 'TimeoutError';\n }\n}\n\nexport class InsufficientCreditsError extends BindError {\n constructor(\n public readonly required: number,\n public readonly available: number\n ) {\n super(\n `Insufficient credits: need ${required}, have ${available}`,\n 'INSUFFICIENT_CREDITS',\n { required, available }\n );\n this.name = 'InsufficientCreditsError';\n }\n}\n\n/**\n * Thrown when a zkTLS session expires before completion\n */\nexport class ZkTlsSessionExpiredError extends BindError {\n constructor(public readonly sessionId: string) {\n super(`zkTLS session expired: ${sessionId}`, 'ZKTLS_SESSION_EXPIRED', { sessionId });\n this.name = 'ZkTlsSessionExpiredError';\n }\n}\n\n/**\n * Thrown when a zkTLS session fails\n */\nexport class ZkTlsSessionFailedError extends BindError {\n constructor(\n public readonly sessionId: string,\n public readonly sessionError: string\n ) {\n super(`zkTLS session failed: ${sessionError}`, 'ZKTLS_SESSION_FAILED', { sessionId, sessionError });\n this.name = 'ZkTlsSessionFailedError';\n }\n}\n\n/**\n * Thrown when an extractor is not found or disabled\n */\nexport class ZkTlsExtractorError extends BindError {\n constructor(\n public readonly extractorId: string,\n message: string\n ) {\n super(message, 'ZKTLS_EXTRACTOR_ERROR', { extractorId });\n this.name = 'ZkTlsExtractorError';\n }\n}\n","/**\n * BindClient - Main client for interacting with the Bind Protocol API\n */\nimport type { PublicPolicySpec } from '@bind-protocol/policy-spec';\nimport {\n ApiError,\n AuthenticationError,\n InsufficientCreditsError,\n TimeoutError,\n ZkTlsSessionExpiredError,\n ZkTlsSessionFailedError,\n} from './errors';\nimport type {\n BindClientOptions,\n ProveJobInputs,\n SubmitProveJobResponse,\n GetProveJobResponse,\n ListProveJobsOptions,\n ListProveJobsResponse,\n ProveJob,\n VerificationMode,\n ListExtractorsResponse,\n ListAttestationsResponse,\n GetAttestationResponse,\n CreateSessionResponse,\n GetSessionResponse,\n ZkTlsSession,\n Circuit,\n ListCircuitsResponse,\n GetCircuitResponse,\n ActivateCircuitResponse,\n ShareProofRequest,\n ShareProofResponse,\n ListSharedProofsOptions,\n ListSharedProofsResponse,\n GetSharedProofResponse,\n RevokeSharedProofResponse,\n VerifySharedProofResponse,\n VerifyUploadedProofResponse,\n GetVerificationHistoryOptions,\n GetVerificationHistoryResponse,\n} from './types';\n\nconst DEFAULT_BASE_URL = 'https://api.bindprotocol.com';\nconst DEFAULT_POLL_INTERVAL_MS = 2000;\nconst DEFAULT_TIMEOUT_MS = 300000; // 5 minutes\n\n/**\n * Derive a circuit ID from policy ID and version\n * This matches the server's auto-generation logic.\n * Format: {policyId}.v{version} with version dots replaced by underscores\n *\n * @example\n * deriveCircuitId(\"bind.demo.credit-score\", \"0.1.0\")\n * // Returns: \"bind.demo.credit-score.v0_1_0\"\n */\nexport function deriveCircuitId(policyId: string, version: string): string {\n const sanitizedVersion = version.replace(/\\./g, '_');\n return `${policyId}.v${sanitizedVersion}`;\n}\n\nexport class BindClient {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n private readonly headers: Record<string, string>;\n\n constructor(options: BindClientOptions) {\n this.apiKey = options.apiKey;\n this.baseUrl = options.baseUrl || process.env.BIND_API_URL || DEFAULT_BASE_URL;\n this.headers = {\n 'X-API-Key': this.apiKey,\n 'Content-Type': 'application/json',\n };\n }\n\n // ==========================================================================\n // Prove Job Methods\n // ==========================================================================\n\n /**\n * Submit a prove job for async processing\n * @param circuitId - The circuit identifier (e.g., \"bind.mobility.riskband.v1\")\n * @param inputs - Circuit inputs as key-value pairs (all values must be strings)\n * @param options - Optional configuration including verificationMode\n * @returns The submitted job details\n * @throws {ApiError} If the API request fails\n * @throws {InsufficientCreditsError} If there aren't enough credits\n */\n async submitProveJob(\n circuitId: string,\n inputs: ProveJobInputs,\n options?: {\n /**\n * How to verify the proof:\n * - 'zkverify': Submit to zkVerify blockchain (default if zkVerify is enabled)\n * - 'self_verify': Store in S3, client downloads and verifies locally\n */\n verificationMode?: VerificationMode;\n }\n ): Promise<SubmitProveJobResponse> {\n const response = await this.fetch('/api/prove', {\n method: 'POST',\n body: JSON.stringify({\n circuitId,\n inputs,\n verificationMode: options?.verificationMode,\n }),\n });\n\n const result: SubmitProveJobResponse = await response.json();\n\n // Check for insufficient credits\n if (!result.success && result.requiredCredits !== undefined && result.availableCredits !== undefined) {\n throw new InsufficientCreditsError(result.requiredCredits, result.availableCredits);\n }\n\n return result;\n }\n\n /**\n * Get the status and results of a prove job\n * @param jobId - The unique job identifier\n * @returns The job details including status and outputs\n */\n async getProveJob(jobId: string): Promise<GetProveJobResponse> {\n const response = await this.fetch(`/api/prove/${encodeURIComponent(jobId)}`);\n return response.json();\n }\n\n /**\n * List prove jobs for the authenticated organization\n * @param options - Optional filters for status, limit, and offset\n * @returns Paginated list of prove jobs\n */\n async listProveJobs(options: ListProveJobsOptions = {}): Promise<ListProveJobsResponse> {\n const params = new URLSearchParams();\n if (options.status) params.set('status', options.status);\n if (options.limit !== undefined) params.set('limit', options.limit.toString());\n if (options.offset !== undefined) params.set('offset', options.offset.toString());\n\n const queryString = params.toString();\n const path = queryString ? `/api/prove?${queryString}` : '/api/prove';\n\n const response = await this.fetch(path);\n return response.json();\n }\n\n /**\n * Poll for prove job completion\n * @param jobId - The unique job identifier\n * @param options - Polling options\n * @returns The completed or failed job\n * @throws {TimeoutError} If the job doesn't complete within the timeout\n */\n async waitForProveJob(\n jobId: string,\n options: {\n intervalMs?: number;\n timeoutMs?: number;\n onProgress?: (job: ProveJob) => void;\n } = {}\n ): Promise<ProveJob> {\n const intervalMs = options.intervalMs ?? DEFAULT_POLL_INTERVAL_MS;\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const startTime = Date.now();\n\n while (Date.now() - startTime < timeoutMs) {\n const result = await this.getProveJob(jobId);\n\n if (!result.success || !result.data) {\n throw new ApiError(\n result.error || 'Failed to get prove job',\n 500,\n result\n );\n }\n\n const job = result.data;\n\n if (options.onProgress) {\n options.onProgress(job);\n }\n\n if (job.status === 'completed' || job.status === 'failed') {\n return job;\n }\n\n await this.sleep(intervalMs);\n }\n\n throw new TimeoutError(\n `Timeout waiting for prove job ${jobId} after ${timeoutMs}ms`,\n timeoutMs\n );\n }\n\n // ==========================================================================\n // Policy Methods (Public, no authentication required)\n // ==========================================================================\n\n /**\n * List all available public policies\n * @returns Array of public policy specifications\n */\n async listPolicies(): Promise<PublicPolicySpec[]> {\n const response = await fetch(`${this.baseUrl}/api/policies`, {\n method: 'GET',\n });\n\n if (!response.ok) {\n throw new ApiError(\n `Failed to fetch policies: ${response.statusText}`,\n response.status\n );\n }\n\n const json = await response.json();\n // API wraps response in { success, data }\n return json.data ?? json;\n }\n\n /**\n * Get a specific policy by ID\n * @param policyId - The unique policy identifier\n * @returns The public policy specification, or null if not found\n */\n async getPolicy(policyId: string): Promise<PublicPolicySpec | null> {\n const response = await fetch(\n `${this.baseUrl}/api/policies/${encodeURIComponent(policyId)}`,\n { method: 'GET' }\n );\n\n if (response.status === 404) {\n return null;\n }\n\n if (!response.ok) {\n throw new ApiError(\n `Failed to fetch policy: ${response.statusText}`,\n response.status\n );\n }\n\n const json = await response.json();\n // API wraps response in { success, data }\n return json.data ?? json;\n }\n\n // ==========================================================================\n // zkTLS Methods\n // ==========================================================================\n\n /**\n * List available zkTLS extractors (data sources)\n * @returns Array of available extractors\n */\n async listExtractors(): Promise<ListExtractorsResponse> {\n const response = await this.fetch('/api/zktls/extractors');\n return response.json();\n }\n\n /**\n * List zkTLS attestations for the authenticated organization\n * @returns Array of attestations\n */\n async listAttestations(): Promise<ListAttestationsResponse> {\n const response = await this.fetch('/api/zktls/attestations');\n return response.json();\n }\n\n /**\n * Get a specific attestation by ID\n * @param attestationId - The attestation UUID\n * @returns The attestation or null if not found\n */\n async getAttestation(attestationId: string): Promise<GetAttestationResponse> {\n const response = await this.fetch(`/api/zktls/attestations/${encodeURIComponent(attestationId)}`);\n return response.json();\n }\n\n /**\n * Create a new zkTLS session for data attestation\n * @param extractorId - The extractor to use (e.g., \"coinbase\")\n * @param callbackUrl - URL to redirect to after authentication\n * @returns Session ID and auth URL to redirect user to\n */\n async createZkTlsSession(\n extractorId: string,\n callbackUrl: string\n ): Promise<CreateSessionResponse> {\n const response = await this.fetch('/api/zktls/sessions', {\n method: 'POST',\n body: JSON.stringify({ extractor: extractorId, callbackUrl }),\n });\n return response.json();\n }\n\n /**\n * Get the status of a zkTLS session\n * @param sessionId - The session UUID\n * @returns Session status and attestation if completed\n */\n async getZkTlsSession(sessionId: string): Promise<GetSessionResponse> {\n const response = await this.fetch(`/api/zktls/sessions/${encodeURIComponent(sessionId)}`);\n return response.json();\n }\n\n /**\n * Wait for a zkTLS session to complete\n * @param sessionId - The session UUID\n * @param options - Polling options\n * @returns The completed session with attestation\n * @throws {ZkTlsSessionExpiredError} If session expires\n * @throws {ZkTlsSessionFailedError} If session fails\n * @throws {TimeoutError} If timeout is reached\n */\n async waitForZkTlsSession(\n sessionId: string,\n options: {\n intervalMs?: number;\n timeoutMs?: number;\n onProgress?: (session: ZkTlsSession) => void;\n } = {}\n ): Promise<ZkTlsSession> {\n const intervalMs = options.intervalMs ?? DEFAULT_POLL_INTERVAL_MS;\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const startTime = Date.now();\n\n while (Date.now() - startTime < timeoutMs) {\n const result = await this.getZkTlsSession(sessionId);\n\n if (!result.success || !result.data) {\n throw new ApiError(\n result.error || 'Failed to get zkTLS session',\n 500,\n result\n );\n }\n\n const session = result.data;\n\n if (options.onProgress) {\n options.onProgress(session);\n }\n\n if (session.status === 'completed') {\n return session;\n }\n\n if (session.status === 'failed') {\n throw new ZkTlsSessionFailedError(sessionId, session.error || 'Unknown error');\n }\n\n if (session.status === 'expired') {\n throw new ZkTlsSessionExpiredError(sessionId);\n }\n\n await this.sleep(intervalMs);\n }\n\n throw new TimeoutError(\n `Timeout waiting for zkTLS session ${sessionId} after ${timeoutMs}ms`,\n timeoutMs\n );\n }\n\n // ==========================================================================\n // Circuit Methods\n // ==========================================================================\n\n /**\n * List available circuits\n * @param options - Optional filters\n * @returns Array of circuits\n */\n async listCircuits(options: { status?: 'active' | 'all'; policyId?: string } = {}): Promise<ListCircuitsResponse> {\n const params = new URLSearchParams();\n if (options.status) params.set('status', options.status);\n if (options.policyId) params.set('policyId', options.policyId);\n\n const queryString = params.toString();\n const path = queryString ? `/api/circuits?${queryString}` : '/api/circuits';\n\n const response = await this.fetch(path);\n return response.json();\n }\n\n /**\n * Get a specific circuit by ID\n * @param circuitId - The circuit identifier\n * @returns The circuit details or null if not found\n */\n async getCircuit(circuitId: string): Promise<GetCircuitResponse> {\n const response = await this.fetch(`/api/circuits/${encodeURIComponent(circuitId)}`);\n return response.json();\n }\n\n /**\n * Activate a circuit (requires validation to have passed)\n * @param circuitId - The circuit identifier to activate\n * @returns The activation result\n */\n async activateCircuit(circuitId: string): Promise<ActivateCircuitResponse> {\n const response = await this.fetch(`/api/circuits/${encodeURIComponent(circuitId)}/activate`, {\n method: 'POST',\n });\n return response.json();\n }\n\n // ==========================================================================\n // Shared Proof Methods\n // ==========================================================================\n\n /**\n * Share a completed proof with a verifier organization\n * @param request - Share proof request with proveJobId and verifierOrgId\n * @returns The created shared proof\n */\n async shareProof(request: ShareProofRequest): Promise<ShareProofResponse> {\n const response = await this.fetch('/api/shared-proofs', {\n method: 'POST',\n body: JSON.stringify(request),\n });\n return response.json();\n }\n\n /**\n * List shared proofs (outgoing or incoming)\n * @param options - Filter by direction, pagination, and inclusion options\n * @returns Paginated list of shared proofs\n */\n async listSharedProofs(options: ListSharedProofsOptions = {}): Promise<ListSharedProofsResponse> {\n const params = new URLSearchParams();\n if (options.direction) params.set('direction', options.direction);\n if (options.limit !== undefined) params.set('limit', options.limit.toString());\n if (options.offset !== undefined) params.set('offset', options.offset.toString());\n if (options.includeExpired) params.set('includeExpired', 'true');\n if (options.includeRevoked) params.set('includeRevoked', 'true');\n\n const queryString = params.toString();\n const path = queryString ? `/api/shared-proofs?${queryString}` : '/api/shared-proofs';\n\n const response = await this.fetch(path);\n return response.json();\n }\n\n /**\n * Get a specific shared proof by ID\n * @param sharedProofId - The shared proof ID\n * @returns The shared proof details\n */\n async getSharedProof(sharedProofId: string): Promise<GetSharedProofResponse> {\n const response = await this.fetch(`/api/shared-proofs/${encodeURIComponent(sharedProofId)}`);\n return response.json();\n }\n\n /**\n * Revoke a shared proof. Only the sharing organization can revoke.\n * @param sharedProofId - The shared proof ID to revoke\n * @returns The revocation result\n */\n async revokeSharedProof(sharedProofId: string): Promise<RevokeSharedProofResponse> {\n const response = await this.fetch(`/api/shared-proofs/${encodeURIComponent(sharedProofId)}`, {\n method: 'DELETE',\n });\n return response.json();\n }\n\n // ==========================================================================\n // Verification Methods\n // ==========================================================================\n\n /**\n * Verify a shared proof\n * @param sharedProofId - The shared proof ID to verify\n * @returns The verification result\n */\n async verifySharedProof(sharedProofId: string): Promise<VerifySharedProofResponse> {\n const response = await this.fetch(`/api/verify/shared/${encodeURIComponent(sharedProofId)}`, {\n method: 'POST',\n });\n return response.json();\n }\n\n /**\n * Verify an uploaded proof\n * @param proofBuffer - The proof binary as ArrayBuffer, Uint8Array, or Buffer\n * @param vkBuffer - The verification key binary as ArrayBuffer, Uint8Array, or Buffer\n * @returns The verification result\n */\n async verifyUploadedProof(\n proofBuffer: ArrayBuffer | Uint8Array,\n vkBuffer: ArrayBuffer | Uint8Array\n ): Promise<VerifyUploadedProofResponse> {\n // Convert to Uint8Array if needed\n const proofBytes = proofBuffer instanceof Uint8Array\n ? proofBuffer\n : new Uint8Array(proofBuffer);\n const vkBytes = vkBuffer instanceof Uint8Array\n ? vkBuffer\n : new Uint8Array(vkBuffer);\n\n // Convert to base64\n const proofBase64 = typeof Buffer !== 'undefined'\n ? Buffer.from(proofBytes).toString('base64')\n : btoa(String.fromCharCode(...proofBytes));\n const vkBase64 = typeof Buffer !== 'undefined'\n ? Buffer.from(vkBytes).toString('base64')\n : btoa(String.fromCharCode(...vkBytes));\n\n const response = await this.fetch('/api/verify/upload', {\n method: 'POST',\n body: JSON.stringify({\n proof: proofBase64,\n vk: vkBase64,\n }),\n });\n return response.json();\n }\n\n /**\n * Get verification history for the authenticated organization\n * @param options - Pagination options\n * @returns Paginated list of verification results\n */\n async getVerificationHistory(options: GetVerificationHistoryOptions = {}): Promise<GetVerificationHistoryResponse> {\n const params = new URLSearchParams();\n if (options.limit !== undefined) params.set('limit', options.limit.toString());\n if (options.offset !== undefined) params.set('offset', options.offset.toString());\n\n const queryString = params.toString();\n const path = queryString ? `/api/verify/history?${queryString}` : '/api/verify/history';\n\n const response = await this.fetch(path);\n return response.json();\n }\n\n // ==========================================================================\n // Private Helpers\n // ==========================================================================\n\n private async fetch(path: string, init?: RequestInit): Promise<Response> {\n const response = await fetch(`${this.baseUrl}${path}`, {\n ...init,\n headers: {\n ...this.headers,\n ...init?.headers,\n },\n });\n\n if (response.status === 401) {\n throw new AuthenticationError();\n }\n\n return response;\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","/**\n * Base zkTLS Adapter\n *\n * Provides common functionality for zkTLS-based data sources.\n */\n\nimport { BindClient } from '../../core/client';\nimport type { DataAdapter } from '../types';\nimport type { ProveJobInputs } from '../../core/types';\nimport type { ZkTlsAdapterConfig, ZkTlsQuery, ZkTlsAttestationData } from './types';\n\nexport abstract class ZkTlsAdapter implements DataAdapter<ZkTlsAdapterConfig, ZkTlsQuery, ZkTlsAttestationData> {\n abstract readonly id: string;\n abstract readonly name: string;\n abstract readonly description: string;\n abstract readonly extractorId: string;\n protected abstract readonly supportedCircuits: string[];\n\n protected readonly client: BindClient;\n\n constructor(config: ZkTlsAdapterConfig) {\n this.client = new BindClient({\n apiKey: config.apiKey,\n baseUrl: config.baseUrl,\n });\n }\n\n /**\n * Fetch attestation data - either from existing attestation or by creating session\n */\n async fetchData(query: ZkTlsQuery): Promise<ZkTlsAttestationData> {\n if (query.attestationId) {\n return this.fetchExistingAttestation(query.attestationId);\n }\n\n if (query.callbackUrl) {\n return this.initiateSession(query.callbackUrl);\n }\n\n throw new Error('Either attestationId or callbackUrl must be provided');\n }\n\n /**\n * Transform attestation to circuit inputs\n */\n abstract toCircuitInputs(data: ZkTlsAttestationData, circuitId: string): ProveJobInputs;\n\n /**\n * Get supported circuits\n */\n getSupportedCircuits(): string[] {\n return [...this.supportedCircuits];\n }\n\n /**\n * Create a zkTLS session and return the auth URL\n * Client should redirect user to this URL\n */\n async createSession(callbackUrl: string): Promise<{ sessionId: string; authUrl: string }> {\n const result = await this.client.createZkTlsSession(this.extractorId, callbackUrl);\n\n if (!result.success || !result.data) {\n throw new Error(result.error || 'Failed to create zkTLS session');\n }\n\n return result.data;\n }\n\n /**\n * Wait for session completion and return attestation\n */\n async waitForSession(\n sessionId: string,\n options?: { intervalMs?: number; timeoutMs?: number }\n ): Promise<ZkTlsAttestationData> {\n const session = await this.client.waitForZkTlsSession(sessionId, options);\n\n if (!session.attestation) {\n throw new Error('Session completed but no attestation found');\n }\n\n const extractors = await this.client.listExtractors();\n const extractor = extractors.data?.find(e => e.id === this.extractorId);\n\n if (!extractor) {\n throw new Error(`Extractor not found: ${this.extractorId}`);\n }\n\n return {\n attestation: session.attestation,\n extractor,\n };\n }\n\n // ===========================================================================\n // Protected helpers\n // ===========================================================================\n\n protected async fetchExistingAttestation(attestationId: string): Promise<ZkTlsAttestationData> {\n const result = await this.client.getAttestation(attestationId);\n\n if (!result.success || !result.data) {\n throw new Error(result.error || 'Attestation not found');\n }\n\n const extractors = await this.client.listExtractors();\n const extractor = extractors.data?.find(e => e.id === result.data!.extractor);\n\n if (!extractor) {\n throw new Error(`Extractor not found: ${result.data.extractor}`);\n }\n\n return {\n attestation: result.data,\n extractor,\n };\n }\n\n protected async initiateSession(callbackUrl: string): Promise<ZkTlsAttestationData> {\n const { sessionId } = await this.createSession(callbackUrl);\n // Note: In a real flow, you'd redirect user and poll later\n // This is for programmatic use where auth is already done\n return this.waitForSession(sessionId);\n }\n\n protected validateCircuit(circuitId: string): void {\n if (!this.supportedCircuits.includes(circuitId)) {\n throw new Error(\n `Circuit \"${circuitId}\" is not supported by ${this.name}. ` +\n `Supported circuits: ${this.supportedCircuits.join(', ')}`\n );\n }\n }\n}\n","/**\n * Coinbase KYC Adapter\n *\n * Fetches KYC attestation data from Coinbase via zkTLS\n * and transforms it for identity verification circuits.\n */\n\nimport { ZkTlsAdapter } from './adapter';\nimport type { ProveJobInputs } from '../../core/types';\nimport type { ZkTlsAdapterConfig, ZkTlsAttestationData, CoinbaseKycClaims } from './types';\n\nconst SUPPORTED_CIRCUITS = [\n 'bind.identity.kyc.v1',\n 'bind.identity.coinbase.v1',\n];\n\nexport class CoinbaseAdapter extends ZkTlsAdapter {\n readonly id = 'coinbase-kyc';\n readonly name = 'Coinbase KYC';\n readonly description = 'Fetches KYC verification status from Coinbase via zkTLS attestation';\n readonly extractorId = 'coinbase';\n protected readonly supportedCircuits = SUPPORTED_CIRCUITS;\n\n constructor(config: ZkTlsAdapterConfig) {\n super(config);\n }\n\n /**\n * Transform Coinbase attestation to circuit inputs\n */\n toCircuitInputs(data: ZkTlsAttestationData, circuitId: string): ProveJobInputs {\n this.validateCircuit(circuitId);\n\n const claims = data.attestation.claims as unknown as CoinbaseKycClaims;\n\n switch (circuitId) {\n case 'bind.identity.kyc.v1':\n return this.toKycInputs(data, claims);\n case 'bind.identity.coinbase.v1':\n return this.toCoinbaseInputs(data, claims);\n default:\n throw new Error(`No input transformer for circuit: ${circuitId}`);\n }\n }\n\n // ===========================================================================\n // Private transformers\n // ===========================================================================\n\n private toKycInputs(data: ZkTlsAttestationData, claims: CoinbaseKycClaims): ProveJobInputs {\n return {\n kycVerified: String(claims.kyc_verified),\n kycLevel: String(claims.kyc_level ?? 0),\n countryCode: claims.country_code ?? '',\n attestationId: data.attestation.id,\n witnessId: data.attestation.witness.id,\n signature: data.attestation.signature,\n timestamp: String(data.attestation.createdAt),\n };\n }\n\n private toCoinbaseInputs(data: ZkTlsAttestationData, claims: CoinbaseKycClaims): ProveJobInputs {\n return {\n kycVerified: String(claims.kyc_verified),\n kycLevel: String(claims.kyc_level ?? 0),\n countryCode: claims.country_code ?? '',\n accountCreatedAt: claims.account_created_at ?? '',\n attestationId: data.attestation.id,\n witnessId: data.attestation.witness.id,\n witnessPublicKey: data.attestation.witness.publicKey,\n signature: data.attestation.signature,\n url: data.attestation.url,\n method: data.attestation.method,\n expiresAt: String(data.attestation.expiresAt),\n };\n }\n}\n\n/**\n * Factory function to create a Coinbase adapter\n */\nexport function createCoinbaseAdapter(config: ZkTlsAdapterConfig): CoinbaseAdapter {\n return new CoinbaseAdapter(config);\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { PublicPolicySpec } from '@bind-protocol/policy-spec';
2
- import { B as BindClientOptions, a as ProveJobInputs, V as VerificationMode, f as SubmitProveJobResponse, G as GetProveJobResponse, L as ListProveJobsOptions, g as ListProveJobsResponse, d as ProveJob, q as ListExtractorsResponse, r as ListAttestationsResponse, s as GetAttestationResponse, t as CreateSessionResponse, u as GetSessionResponse, p as ZkTlsSession, j as ListCircuitsResponse, k as GetCircuitResponse, A as ActivateCircuitResponse } from './types-CWadrDVs.js';
2
+ import { B as BindClientOptions, a as ProveJobInputs, V as VerificationMode, f as SubmitProveJobResponse, G as GetProveJobResponse, L as ListProveJobsOptions, g as ListProveJobsResponse, d as ProveJob, q as ListExtractorsResponse, r as ListAttestationsResponse, s as GetAttestationResponse, t as CreateSessionResponse, u as GetSessionResponse, p as ZkTlsSession, j as ListCircuitsResponse, k as GetCircuitResponse, A as ActivateCircuitResponse, w as ShareProofRequest, x as ShareProofResponse, y as ListSharedProofsOptions, z as ListSharedProofsResponse, D as GetSharedProofResponse, R as RevokeSharedProofResponse, F as VerifySharedProofResponse, I as VerifyUploadedProofResponse, K as GetVerificationHistoryOptions, M as GetVerificationHistoryResponse } from './types-KpRMzgLd.cjs';
3
3
 
4
4
  /**
5
5
  * BindClient - Main client for interacting with the Bind Protocol API
@@ -136,6 +136,49 @@ declare class BindClient {
136
136
  * @returns The activation result
137
137
  */
138
138
  activateCircuit(circuitId: string): Promise<ActivateCircuitResponse>;
139
+ /**
140
+ * Share a completed proof with a verifier organization
141
+ * @param request - Share proof request with proveJobId and verifierOrgId
142
+ * @returns The created shared proof
143
+ */
144
+ shareProof(request: ShareProofRequest): Promise<ShareProofResponse>;
145
+ /**
146
+ * List shared proofs (outgoing or incoming)
147
+ * @param options - Filter by direction, pagination, and inclusion options
148
+ * @returns Paginated list of shared proofs
149
+ */
150
+ listSharedProofs(options?: ListSharedProofsOptions): Promise<ListSharedProofsResponse>;
151
+ /**
152
+ * Get a specific shared proof by ID
153
+ * @param sharedProofId - The shared proof ID
154
+ * @returns The shared proof details
155
+ */
156
+ getSharedProof(sharedProofId: string): Promise<GetSharedProofResponse>;
157
+ /**
158
+ * Revoke a shared proof. Only the sharing organization can revoke.
159
+ * @param sharedProofId - The shared proof ID to revoke
160
+ * @returns The revocation result
161
+ */
162
+ revokeSharedProof(sharedProofId: string): Promise<RevokeSharedProofResponse>;
163
+ /**
164
+ * Verify a shared proof
165
+ * @param sharedProofId - The shared proof ID to verify
166
+ * @returns The verification result
167
+ */
168
+ verifySharedProof(sharedProofId: string): Promise<VerifySharedProofResponse>;
169
+ /**
170
+ * Verify an uploaded proof
171
+ * @param proofBuffer - The proof binary as ArrayBuffer, Uint8Array, or Buffer
172
+ * @param vkBuffer - The verification key binary as ArrayBuffer, Uint8Array, or Buffer
173
+ * @returns The verification result
174
+ */
175
+ verifyUploadedProof(proofBuffer: ArrayBuffer | Uint8Array, vkBuffer: ArrayBuffer | Uint8Array): Promise<VerifyUploadedProofResponse>;
176
+ /**
177
+ * Get verification history for the authenticated organization
178
+ * @param options - Pagination options
179
+ * @returns Paginated list of verification results
180
+ */
181
+ getVerificationHistory(options?: GetVerificationHistoryOptions): Promise<GetVerificationHistoryResponse>;
139
182
  private fetch;
140
183
  private sleep;
141
184
  }
@@ -1,5 +1,5 @@
1
1
  import { PublicPolicySpec } from '@bind-protocol/policy-spec';
2
- import { B as BindClientOptions, a as ProveJobInputs, V as VerificationMode, f as SubmitProveJobResponse, G as GetProveJobResponse, L as ListProveJobsOptions, g as ListProveJobsResponse, d as ProveJob, q as ListExtractorsResponse, r as ListAttestationsResponse, s as GetAttestationResponse, t as CreateSessionResponse, u as GetSessionResponse, p as ZkTlsSession, j as ListCircuitsResponse, k as GetCircuitResponse, A as ActivateCircuitResponse } from './types-CWadrDVs.cjs';
2
+ import { B as BindClientOptions, a as ProveJobInputs, V as VerificationMode, f as SubmitProveJobResponse, G as GetProveJobResponse, L as ListProveJobsOptions, g as ListProveJobsResponse, d as ProveJob, q as ListExtractorsResponse, r as ListAttestationsResponse, s as GetAttestationResponse, t as CreateSessionResponse, u as GetSessionResponse, p as ZkTlsSession, j as ListCircuitsResponse, k as GetCircuitResponse, A as ActivateCircuitResponse, w as ShareProofRequest, x as ShareProofResponse, y as ListSharedProofsOptions, z as ListSharedProofsResponse, D as GetSharedProofResponse, R as RevokeSharedProofResponse, F as VerifySharedProofResponse, I as VerifyUploadedProofResponse, K as GetVerificationHistoryOptions, M as GetVerificationHistoryResponse } from './types-KpRMzgLd.js';
3
3
 
4
4
  /**
5
5
  * BindClient - Main client for interacting with the Bind Protocol API
@@ -136,6 +136,49 @@ declare class BindClient {
136
136
  * @returns The activation result
137
137
  */
138
138
  activateCircuit(circuitId: string): Promise<ActivateCircuitResponse>;
139
+ /**
140
+ * Share a completed proof with a verifier organization
141
+ * @param request - Share proof request with proveJobId and verifierOrgId
142
+ * @returns The created shared proof
143
+ */
144
+ shareProof(request: ShareProofRequest): Promise<ShareProofResponse>;
145
+ /**
146
+ * List shared proofs (outgoing or incoming)
147
+ * @param options - Filter by direction, pagination, and inclusion options
148
+ * @returns Paginated list of shared proofs
149
+ */
150
+ listSharedProofs(options?: ListSharedProofsOptions): Promise<ListSharedProofsResponse>;
151
+ /**
152
+ * Get a specific shared proof by ID
153
+ * @param sharedProofId - The shared proof ID
154
+ * @returns The shared proof details
155
+ */
156
+ getSharedProof(sharedProofId: string): Promise<GetSharedProofResponse>;
157
+ /**
158
+ * Revoke a shared proof. Only the sharing organization can revoke.
159
+ * @param sharedProofId - The shared proof ID to revoke
160
+ * @returns The revocation result
161
+ */
162
+ revokeSharedProof(sharedProofId: string): Promise<RevokeSharedProofResponse>;
163
+ /**
164
+ * Verify a shared proof
165
+ * @param sharedProofId - The shared proof ID to verify
166
+ * @returns The verification result
167
+ */
168
+ verifySharedProof(sharedProofId: string): Promise<VerifySharedProofResponse>;
169
+ /**
170
+ * Verify an uploaded proof
171
+ * @param proofBuffer - The proof binary as ArrayBuffer, Uint8Array, or Buffer
172
+ * @param vkBuffer - The verification key binary as ArrayBuffer, Uint8Array, or Buffer
173
+ * @returns The verification result
174
+ */
175
+ verifyUploadedProof(proofBuffer: ArrayBuffer | Uint8Array, vkBuffer: ArrayBuffer | Uint8Array): Promise<VerifyUploadedProofResponse>;
176
+ /**
177
+ * Get verification history for the authenticated organization
178
+ * @param options - Pagination options
179
+ * @returns Paginated list of verification results
180
+ */
181
+ getVerificationHistory(options?: GetVerificationHistoryOptions): Promise<GetVerificationHistoryResponse>;
139
182
  private fetch;
140
183
  private sleep;
141
184
  }
@@ -342,6 +342,106 @@ var BindClient = class {
342
342
  return response.json();
343
343
  }
344
344
  // ==========================================================================
345
+ // Shared Proof Methods
346
+ // ==========================================================================
347
+ /**
348
+ * Share a completed proof with a verifier organization
349
+ * @param request - Share proof request with proveJobId and verifierOrgId
350
+ * @returns The created shared proof
351
+ */
352
+ async shareProof(request) {
353
+ const response = await this.fetch("/api/shared-proofs", {
354
+ method: "POST",
355
+ body: JSON.stringify(request)
356
+ });
357
+ return response.json();
358
+ }
359
+ /**
360
+ * List shared proofs (outgoing or incoming)
361
+ * @param options - Filter by direction, pagination, and inclusion options
362
+ * @returns Paginated list of shared proofs
363
+ */
364
+ async listSharedProofs(options = {}) {
365
+ const params = new URLSearchParams();
366
+ if (options.direction) params.set("direction", options.direction);
367
+ if (options.limit !== void 0) params.set("limit", options.limit.toString());
368
+ if (options.offset !== void 0) params.set("offset", options.offset.toString());
369
+ if (options.includeExpired) params.set("includeExpired", "true");
370
+ if (options.includeRevoked) params.set("includeRevoked", "true");
371
+ const queryString = params.toString();
372
+ const path = queryString ? `/api/shared-proofs?${queryString}` : "/api/shared-proofs";
373
+ const response = await this.fetch(path);
374
+ return response.json();
375
+ }
376
+ /**
377
+ * Get a specific shared proof by ID
378
+ * @param sharedProofId - The shared proof ID
379
+ * @returns The shared proof details
380
+ */
381
+ async getSharedProof(sharedProofId) {
382
+ const response = await this.fetch(`/api/shared-proofs/${encodeURIComponent(sharedProofId)}`);
383
+ return response.json();
384
+ }
385
+ /**
386
+ * Revoke a shared proof. Only the sharing organization can revoke.
387
+ * @param sharedProofId - The shared proof ID to revoke
388
+ * @returns The revocation result
389
+ */
390
+ async revokeSharedProof(sharedProofId) {
391
+ const response = await this.fetch(`/api/shared-proofs/${encodeURIComponent(sharedProofId)}`, {
392
+ method: "DELETE"
393
+ });
394
+ return response.json();
395
+ }
396
+ // ==========================================================================
397
+ // Verification Methods
398
+ // ==========================================================================
399
+ /**
400
+ * Verify a shared proof
401
+ * @param sharedProofId - The shared proof ID to verify
402
+ * @returns The verification result
403
+ */
404
+ async verifySharedProof(sharedProofId) {
405
+ const response = await this.fetch(`/api/verify/shared/${encodeURIComponent(sharedProofId)}`, {
406
+ method: "POST"
407
+ });
408
+ return response.json();
409
+ }
410
+ /**
411
+ * Verify an uploaded proof
412
+ * @param proofBuffer - The proof binary as ArrayBuffer, Uint8Array, or Buffer
413
+ * @param vkBuffer - The verification key binary as ArrayBuffer, Uint8Array, or Buffer
414
+ * @returns The verification result
415
+ */
416
+ async verifyUploadedProof(proofBuffer, vkBuffer) {
417
+ const proofBytes = proofBuffer instanceof Uint8Array ? proofBuffer : new Uint8Array(proofBuffer);
418
+ const vkBytes = vkBuffer instanceof Uint8Array ? vkBuffer : new Uint8Array(vkBuffer);
419
+ const proofBase64 = typeof Buffer !== "undefined" ? Buffer.from(proofBytes).toString("base64") : btoa(String.fromCharCode(...proofBytes));
420
+ const vkBase64 = typeof Buffer !== "undefined" ? Buffer.from(vkBytes).toString("base64") : btoa(String.fromCharCode(...vkBytes));
421
+ const response = await this.fetch("/api/verify/upload", {
422
+ method: "POST",
423
+ body: JSON.stringify({
424
+ proof: proofBase64,
425
+ vk: vkBase64
426
+ })
427
+ });
428
+ return response.json();
429
+ }
430
+ /**
431
+ * Get verification history for the authenticated organization
432
+ * @param options - Pagination options
433
+ * @returns Paginated list of verification results
434
+ */
435
+ async getVerificationHistory(options = {}) {
436
+ const params = new URLSearchParams();
437
+ if (options.limit !== void 0) params.set("limit", options.limit.toString());
438
+ if (options.offset !== void 0) params.set("offset", options.offset.toString());
439
+ const queryString = params.toString();
440
+ const path = queryString ? `/api/verify/history?${queryString}` : "/api/verify/history";
441
+ const response = await this.fetch(path);
442
+ return response.json();
443
+ }
444
+ // ==========================================================================
345
445
  // Private Helpers
346
446
  // ==========================================================================
347
447
  async fetch(path, init) {