{"version":3,"sources":["../../../src/auth/passkey/passkey.manager.ts"],"names":["axios","startRegistration","startAuthentication"],"mappings":"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","file":"index.cjs","sourcesContent":["import axios, { AxiosInstance } from \"axios\";\nimport { startRegistration, startAuthentication } from \"@simplewebauthn/browser\";\nimport {\n  PasskeyRegistrationParams,\n  PasskeyAuthenticationParams,\n  PasskeyInfo,\n  BeginRegistrationResponse,\n  BeginAuthenticationResponse,\n  TransactionVerificationParams,\n  BeginTransactionVerificationResponse,\n} from \"./types\";\n\nexport class PasskeyManager {\n  private api: AxiosInstance;\n\n  constructor(baseURL: string, tokenProvider?: () => string | null) {\n    this.api = axios.create({\n      baseURL,\n      headers: {\n        \"Content-Type\": \"application/json\",\n      },\n    });\n\n    // Add auth interceptor\n    if (tokenProvider) {\n      this.api.interceptors.request.use(config => {\n        const token = tokenProvider();\n        if (token) {\n          config.headers.Authorization = `Bearer ${token}`;\n        }\n        return config;\n      });\n    }\n  }\n\n  /**\n   * Complete Passkey Registration Flow\n   */\n  async register(\n    params: PasskeyRegistrationParams\n  ): Promise<{ user: any; token: string; passkey: PasskeyInfo }> {\n    // 1. Begin Registration (Get options from backend)\n    const beginResponse = await this.api.post<BeginRegistrationResponse>(\n      \"/auth/passkey/register/begin\",\n      params\n    );\n\n    // 2. Client-side WebAuthn (Browser UI)\n    // @ts-expect-error - simplewebauthn types mismatch sometimes\n    const credential = await startRegistration(beginResponse.data);\n\n    // 3. Complete Registration (Verify with backend)\n    const completeResponse = await this.api.post(\"/auth/passkey/register/complete\", {\n      email: params.email,\n      username: params.username,\n      password: params.password,\n      credential,\n    });\n\n    return completeResponse.data;\n  }\n\n  /**\n   * Complete Passkey Login/Authentication Flow\n   */\n  async authenticate(params?: PasskeyAuthenticationParams): Promise<{ user: any; token: string }> {\n    // 1. Begin Authentication\n    const beginResponse = await this.api.post<BeginAuthenticationResponse>(\n      \"/auth/passkey/login/begin\",\n      params\n    );\n\n    // 2. Client-side WebAuthn\n    const credential = await startAuthentication(beginResponse.data as any);\n\n    // 3. Complete Authentication\n    const completeResponse = await this.api.post(\"/auth/passkey/login/complete\", { credential });\n\n    return completeResponse.data;\n  }\n\n  /**\n   * Verify a transaction (Sign UserOpHash) with Passkey\n   * Returns the verification credential needed for the transaction\n   */\n  async verifyTransaction(params: TransactionVerificationParams): Promise<any> {\n    // 1. Begin Verification (Get challenge based on tx params)\n    const beginResponse = await this.api.post<BeginTransactionVerificationResponse>(\n      \"/auth/transaction/verify/begin\",\n      { transaction: params }\n    );\n\n    const { userOpHash, ...authOptions } = beginResponse.data;\n\n    // 2. Client-side WebAuthn (Sign the challenge)\n    const credential = await startAuthentication(authOptions as any);\n\n    // NOTE: We don't complete the verification here immediately.\n    // The credential is sent along with the transaction to be verified during execution.\n    // But for some flows, we might want to verify it pre-execution:\n\n    // Optional: Verify on backend immediately (if API supports it)\n    // await this.api.post(\"/auth/transaction/verify/complete\", { credential });\n\n    return {\n      credential,\n      userOpHash, // Return pre-calculated hash to ensure consistency\n    };\n  }\n\n  /**\n   * Add a new device (Passkey) to existing account\n   */\n  async addDevice(params: { email: string; password?: string }): Promise<PasskeyInfo> {\n    // 1. Begin Device Add\n    const beginResponse = await this.api.post<BeginRegistrationResponse>(\n      \"/auth/device/passkey/begin\",\n      params\n    );\n\n    // 2. WebAuthn\n    // @ts-expect-error - simplewebauthn types mismatch sometimes\n    const credential = await startRegistration(beginResponse.data);\n\n    // 3. Complete\n    const completeResponse = await this.api.post(\"/auth/device/passkey/complete\", {\n      email: params.email,\n      password: params.password,\n      credential,\n    });\n\n    return completeResponse.data.passkey;\n  }\n}\n"]}