@fourt/sdk 1.0.0 → 1.1.1
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.cjs +384 -192
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +123 -60
- package/dist/index.d.ts +123 -60
- package/dist/index.js +374 -192
- package/dist/index.js.map +1 -1
- package/package.json +10 -8
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/signer/web.ts","../src/signer/index.ts","../src/errors/SDKError.ts","../src/errors/UnauthorizedError.ts","../src/errors/NotFoundError.ts","../src/errors/GenericError.ts","../src/errors/UnauthenticatedError.ts","../src/errors/BadRequestError.ts","../src/session/index.ts","../src/types/Routes.ts","../src/lib/base64.ts","../src/lib/bytes.ts","../src/third-party/viem.ts","../src/modules/auth/email.ts","../src/modules/auth/passkeys.ts","../src/modules/auth/index.ts","../src/modules/user/index.ts","../src/index.ts"],"sourcesContent":["import { WebauthnStamper } from '@turnkey/webauthn-stamper'\nimport { IframeStamper } from '@turnkey/iframe-stamper'\nimport {\n type SignerClientInheritedConstructorParams,\n SignerClient,\n} from './index.js'\nimport { LibBase64 } from '../lib/base64.js'\nimport { LibBytes } from '../lib/bytes.js'\nimport { getWebAuthnAttestation } from '@turnkey/http'\nimport { SessionType } from '../session/index.js'\n\ntype WebauthnSignInParams = {\n email: string\n}\n\n// * When user starts auth with email - can be either a signup or a signin\ntype EmailInitializeAuthParams = {\n email: string\n redirectUrl: string\n expirationSeconds?: number // Defaults to 15 minutes by Turnkey\n}\n\n// * When user completes auth with bundle\ntype EmailCompleteAuthWithBundleParams = {\n bundle: string\n subOrgId: string\n isNewUser?: boolean\n}\n\ntype WebSignerClientConstructorParams = SignerClientInheritedConstructorParams<{\n webauthn: {\n rpId: string\n }\n iframe?: {\n iframeElementId?: string\n iframeContainerId?: string\n }\n}>\n\ntype CreateAccountParams =\n | ({\n method: 'webauthn'\n } & WebauthnSignInParams)\n | ({\n method: 'email'\n } & EmailInitializeAuthParams)\n\n/**\n * A signer client for web applications.\n */\nclass WebSignerClient extends SignerClient {\n private readonly _stampers: {\n webauthn: WebauthnStamper\n iframe: IframeStamper\n }\n\n /**\n * Initializes a new instance of the `WebSignerClient` class.\n *\n * @param {WebSignerClientConstructorParams} params params for the constructor\n */\n constructor({\n configuration,\n webauthn,\n iframe,\n }: WebSignerClientConstructorParams) {\n const iframeContainerId =\n iframe?.iframeContainerId ?? 'fourt-signer-iframe-container'\n const iframeContainer = document.createElement('div')\n iframeContainer.id = iframeContainerId\n iframeContainer.style.display = 'none'\n document.body.appendChild(iframeContainer)\n\n const webauthnStamper = new WebauthnStamper({ rpId: webauthn.rpId })\n const iframeStamper = new IframeStamper({\n iframeUrl: 'https://auth.turnkey.com',\n iframeElementId: iframe?.iframeElementId ?? 'turnkey-iframe',\n iframeContainer: document.getElementById(iframeContainerId),\n })\n\n super({\n stamper: iframeStamper, // Initialized to iframeStamper; can be either webauthnStamper or iframeStamper\n configuration: configuration,\n })\n\n this._stampers = {\n webauthn: webauthnStamper,\n iframe: iframeStamper,\n }\n }\n\n public override async signRawMessage<Into extends string>(\n msg: string,\n ): Promise<Into> {\n await this.updateStamper()\n return super.signRawMessage(msg)\n }\n\n public override async logout() {\n this._stampers.iframe.clear()\n await this._stampers.iframe.init()\n return super.logout()\n }\n\n /**\n * Checks for an existing session and if exists, updates the stamper accordingly.\n *\n */\n private async updateStamper() {\n // User is not signed in\n if (\n this._sessionStore.type === undefined ||\n this._sessionStore.bundle === undefined ||\n this._sessionStore.token === undefined\n )\n return\n\n if (this._sessionStore.type === SessionType.Passkeys) {\n this.stamper = this._stampers.webauthn\n } else {\n this.stamper = this._stampers.iframe\n // We need to inject to inject the credential bundle\n // Otherwise the user will not be able to sign\n await this.completeAuthWithBundle({\n bundle: this._sessionStore.bundle,\n subOrgId: this.user?.subOrgId!,\n })\n }\n }\n\n /**\n * Signs in a user with webauthn.\n *\n * @param {WebauthnSignInParams} params params for the sign in\n */\n async webauthnSignIn({ email }: WebauthnSignInParams) {\n const existingUserSubOrgId = await this.lookUpUser(email)\n\n if (!existingUserSubOrgId) {\n await this._createAccount({ method: 'webauthn', email })\n } else {\n this.stamper = this._stampers.webauthn\n\n await this.whoAmI(existingUserSubOrgId)\n\n this._sessionStore.type = SessionType.Passkeys\n\n // We should assure that the user and its credentialId are set\n if (!this.user || !this.user.credentialId) {\n return\n }\n\n this._stampers.webauthn.allowCredentials = [\n {\n id: LibBase64.toBuffer(this.user.credentialId),\n type: 'public-key',\n transports: ['internal', 'usb'],\n },\n ]\n }\n }\n\n /**\n * Handle auth user process with email.\n *\n * @param {EmailInitializeAuthParams} params Params needed for the initialization of the auth process\n */\n async emailAuth(params: EmailInitializeAuthParams) {\n const existingUserSubOrgId = await this.lookUpUser(params.email)\n\n if (!existingUserSubOrgId) {\n await this._createAccount({ method: 'email', ...params })\n } else {\n await this._signInWithEmail(params)\n }\n }\n\n /**\n * Signs in a user with email.\n *\n * @param {EmailInitializeAuthParams} params params for the sign in\n */\n private async _signInWithEmail({\n email,\n expirationSeconds,\n redirectUrl,\n }: EmailInitializeAuthParams) {\n const publicKey = await this._initIframeStamper()\n\n return this.request('/v1/email-auth', {\n email,\n targetPublicKey: publicKey,\n expirationSeconds,\n redirectUrl: redirectUrl.toString(),\n })\n }\n\n /**\n * Completes the authentication process with a credential bundle.\n *\n * @param {EmailCompleteAuthWithBundleParams} params params for the completion of the auth process\n */\n public async completeAuthWithBundle({\n bundle,\n subOrgId,\n }: EmailCompleteAuthWithBundleParams): Promise<void> {\n await this._initIframeStamper()\n\n const result = await this._stampers.iframe.injectCredentialBundle(bundle)\n\n if (!result) {\n throw new Error('Failed to inject credential bundle')\n }\n\n await this.whoAmI(subOrgId)\n\n this._sessionStore.type = SessionType.Email\n this._sessionStore.bundle = bundle\n }\n\n /**\n * Creates a passkey account using the webauthn stamper.\n *\n * @param {Extract<CreateAccountParams, { method: 'webauthn' }>} params params for the creation of the account\n */\n private async _createWebauthnAccount(\n params: Extract<CreateAccountParams, { method: 'webauthn' }>,\n ) {\n const { challenge, attestation } = await this._webauthnGenerateAttestation(\n params.email,\n )\n\n const {\n token,\n user: { id, email, subOrgId, walletAddress, salt, smartAccountAddress },\n } = await this.request('/v1/signup', {\n passkey: {\n challenge: LibBase64.fromBuffer(challenge),\n attestation,\n },\n email: params.email,\n })\n\n this.user = {\n id,\n email,\n subOrgId,\n walletAddress,\n salt,\n smartAccountAddress,\n credentialId: attestation.credentialId,\n }\n this._sessionStore.type = SessionType.Passkeys\n this._sessionStore.token = token\n }\n\n /**\n * Creates an email account using the iframe stamper.\n *\n * @param {Extract<CreateAccountParams, { method: 'email' }>} params params for the creation of the account\n */\n private async _createEmailAccount(\n params: Extract<CreateAccountParams, { method: 'email' }>,\n ) {\n const { email, expirationSeconds, redirectUrl } =\n params as EmailInitializeAuthParams\n const publicKey = await this._initIframeStamper()\n\n const response = await this.request('/v1/signup', {\n email,\n iframe: {\n targetPublicKey: publicKey,\n expirationSeconds,\n redirectUrl: redirectUrl.toString(),\n },\n })\n\n return response\n }\n\n /**\n * Handle the account creation process.\n *\n * @param {CreateAccountParams} params params to create an account\n */\n private async _createAccount(params: CreateAccountParams) {\n switch (params.method) {\n case 'webauthn': {\n await this._createWebauthnAccount(params)\n break\n }\n case 'email': {\n await this._createEmailAccount(params)\n break\n }\n }\n }\n\n private async _webauthnGenerateAttestation(email: string) {\n const challenge = LibBytes.generateRandomBuffer()\n const authenticatorUserId = LibBytes.generateRandomBuffer()\n\n const attestation = await getWebAuthnAttestation({\n publicKey: {\n authenticatorSelection: {\n residentKey: 'preferred',\n requireResidentKey: false,\n userVerification: 'preferred',\n },\n challenge,\n rp: {\n id: window.location.hostname,\n name: window.location.hostname,\n },\n pubKeyCredParams: [\n {\n type: 'public-key',\n alg: -7,\n },\n {\n type: 'public-key',\n alg: -257,\n },\n ],\n user: {\n id: authenticatorUserId,\n name: email,\n displayName: email,\n },\n },\n })\n\n return { challenge, attestation, authenticatorUserId }\n }\n\n private async _initIframeStamper() {\n if (!this._stampers.iframe.publicKey()) {\n await this._stampers.iframe.init()\n }\n\n this.stamper = this._stampers.iframe\n\n return this._stampers.iframe.publicKey()!\n }\n}\n\nexport { WebSignerClient }\nexport type {\n WebSignerClientConstructorParams,\n WebauthnSignInParams,\n EmailInitializeAuthParams,\n EmailCompleteAuthWithBundleParams,\n CreateAccountParams,\n}\n","import { TurnkeyClient } from '@turnkey/http'\nimport {\n BadRequestError,\n GenericError,\n NotFoundError,\n UnauthorizedError,\n} from '../errors/index.js'\nimport { SDKError } from '../errors/SDKError.js'\nimport { SessionStore } from '../session/index.js'\nimport { User } from '../types/entities.js'\nimport { APIResponse } from '../types/rest.js'\nimport {\n AuthenticationServiceBody,\n AuthenticationServiceResponse,\n AuthenticationServiceRoutes,\n ROUTE_METHOD_MAP,\n} from '../types/Routes.js'\nimport { jwtDecode, JwtPayload } from 'jwt-decode'\nimport { isPast, secondsToMilliseconds } from 'date-fns'\n\ntype SignerClientConfiguration = {\n apiKey: string\n apiUrl?: string\n paymasterRpcUrl?: string\n}\n\ntype SignerClientConstructorParams = {\n stamper: TurnkeyClient['stamper']\n configuration: SignerClientConfiguration\n}\n\ntype SignerClientInheritedConstructorParams<\n Extended extends Record<string, unknown>,\n> = Pick<SignerClientConstructorParams, 'configuration'> & Extended\n\nabstract class SignerClient {\n protected readonly _turnkeyClient: TurnkeyClient\n protected readonly _configuration: Required<\n SignerClientConstructorParams['configuration']\n >\n protected readonly _sessionStore: SessionStore\n\n private _user?: User\n\n constructor({\n stamper,\n configuration: { apiUrl, paymasterRpcUrl, ...requiredConfiguration },\n }: SignerClientConstructorParams) {\n this._turnkeyClient = new TurnkeyClient(\n { baseUrl: 'https://api.turnkey.com' },\n stamper,\n )\n\n this._configuration = {\n ...requiredConfiguration,\n apiUrl: apiUrl ?? 'https://auth.api.dev.fourt.io/',\n paymasterRpcUrl:\n paymasterRpcUrl ?? 'https://management.api.dev.fourt.io/',\n }\n\n this._sessionStore = new SessionStore()\n }\n\n logout() {\n this._user = undefined\n this.sessionStore.clearAll()\n }\n\n get configuration(): Required<SignerClientConfiguration> {\n return this._configuration\n }\n\n get user(): User | undefined {\n if (this._user) return this._user\n\n // Check if there's a token\n if (!this.sessionStore.token) {\n this.sessionStore.clearAll()\n return undefined\n }\n\n const decodedToken = jwtDecode<JwtPayload>(this.sessionStore.token)\n // Check if the token has expired\n if (\n decodedToken.exp &&\n isPast(new Date(secondsToMilliseconds(decodedToken.exp)))\n ) {\n this.sessionStore.clearAll()\n return undefined\n }\n\n if (this.sessionStore.user) this._user = this.sessionStore.user\n\n return this._user\n }\n\n protected set user(value: User | undefined) {\n this._user = value\n }\n\n protected set stamper(stamper: TurnkeyClient['stamper']) {\n this._turnkeyClient.stamper = stamper\n }\n\n protected get stamper(): TurnkeyClient['stamper'] {\n return this._turnkeyClient.stamper\n }\n\n protected get sessionStore(): SessionStore {\n return this._sessionStore\n }\n\n async signRawMessage<Into extends string>(msg: string): Promise<Into> {\n if (!this._user) {\n throw new UnauthorizedError({\n message: 'SignerClient must be authenticated to sign a message',\n })\n }\n\n const stampedRequest = await this._turnkeyClient.stampSignRawPayload({\n organizationId: this._user.subOrgId,\n type: 'ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2',\n timestampMs: Date.now().toString(),\n parameters: {\n encoding: 'PAYLOAD_ENCODING_HEXADECIMAL',\n hashFunction: 'HASH_FUNCTION_NO_OP',\n payload: msg,\n signWith: this._user.walletAddress,\n },\n })\n\n const { signature } = await this.request('/v1/sign', {\n stampedRequest,\n })\n\n return <Into>signature\n }\n\n protected async lookUpUser(email: string): Promise<string | null> {\n try {\n const { subOrgId } = await this.request('/v1/lookup', { email })\n return subOrgId\n } catch (error) {\n if (!(error instanceof SDKError)) throw error\n\n const sdkError: SDKError = error\n\n switch (sdkError.constructor.name) {\n case NotFoundError.name: {\n return null\n }\n default: {\n throw sdkError\n }\n }\n }\n }\n\n protected async whoAmI(subOrgId?: string) {\n const orgId = subOrgId || this._user?.subOrgId\n\n if (!orgId) throw new BadRequestError({ message: 'No orgId provided' })\n\n const stampedRequest = await this._turnkeyClient.stampGetWhoami({\n organizationId: orgId,\n })\n\n const { user, token } = await this.request('/v1/signin', {\n stampedRequest,\n })\n\n const credentialId = (() => {\n try {\n return JSON.parse(stampedRequest?.stamp.stampHeaderValue)\n .credentialId as string\n } catch (e) {\n return undefined\n }\n })()\n\n this._user = {\n ...user,\n credentialId: credentialId,\n }\n\n this.sessionStore.user = this.user!\n this.sessionStore.token = token\n }\n\n protected async request<Route extends AuthenticationServiceRoutes>(\n route: Route,\n body?: AuthenticationServiceBody<Route>,\n ): Promise<AuthenticationServiceResponse<Route>> {\n const url = new URL(`${route}`, this._configuration.apiUrl)\n const token = this.sessionStore.token\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'X-FOURT-KEY': this._configuration.apiKey,\n }\n\n // Add Authorization header if token exists\n if (token) {\n headers['Authorization'] = `Bearer ${token}`\n }\n\n const response = await fetch(url, {\n method: ROUTE_METHOD_MAP[route],\n body: JSON.stringify(body),\n headers,\n credentials: 'include',\n })\n\n const { data, error } = (await response.json()) as APIResponse<\n AuthenticationServiceResponse<Route>\n >\n\n if (error) {\n switch (error.kind) {\n case 'UnauthorizedError': {\n // TODO: workaround! this need to be cleaned up and moved into the web signer\n this.logout()\n throw new UnauthorizedError({ message: error.message })\n }\n case 'NotFoundError': {\n throw new NotFoundError({ message: error.message })\n }\n case 'BadRequestError': {\n throw new BadRequestError({ message: error.message })\n }\n default: {\n throw new GenericError({ message: error.message })\n }\n }\n }\n\n return { ...data } as AuthenticationServiceResponse<Route>\n }\n}\n\nexport { SignerClient }\nexport type {\n SignerClientConstructorParams,\n SignerClientInheritedConstructorParams,\n}\n","type SDKErrorProps = {\n message: string\n}\n\nabstract class SDKError extends Error {\n private readonly _props: SDKErrorProps\n\n constructor(message: string, props: SDKErrorProps) {\n super(message)\n this._props = props\n }\n\n get message() {\n return this._props.message\n }\n}\n\nexport { SDKError }\nexport type { SDKErrorProps }\n","import { SDKErrorProps, SDKError } from './SDKError.js'\n\nclass UnauthorizedError extends SDKError {\n constructor(props: SDKErrorProps) {\n super(UnauthorizedError.name, props)\n }\n}\n\nexport { UnauthorizedError }\n","import { SDKErrorProps, SDKError } from './SDKError.js'\n\nclass NotFoundError extends SDKError {\n constructor(props: SDKErrorProps) {\n super(NotFoundError.name, props)\n }\n}\n\nexport { NotFoundError }\n","import { SDKErrorProps, SDKError } from './SDKError.js'\n\nclass GenericError extends SDKError {\n constructor(props: SDKErrorProps) {\n super(GenericError.name, props)\n }\n}\n\nexport { GenericError }\n","import { SDKErrorProps, SDKError } from './SDKError.js'\n\nclass UnauthenticatedError extends SDKError {\n constructor(props: SDKErrorProps) {\n super(UnauthenticatedError.name, props)\n }\n}\n\nexport { UnauthenticatedError }\n","import { SDKErrorProps, SDKError } from './SDKError.js'\n\nclass BadRequestError extends SDKError {\n constructor(props: SDKErrorProps) {\n super(BadRequestError.name, props)\n }\n}\n\nexport { BadRequestError }\n","import { createStore, type StoreApi } from 'zustand'\nimport { createJSONStorage, persist } from 'zustand/middleware'\nimport { User } from '../types/entities.js'\n\nenum SessionType {\n Email = 'email',\n Passkeys = 'passkeys',\n}\n\n/**\n * The state of the session.\n */\ntype SessionState = {\n type?: SessionType\n user?: User\n expirationDate?: Date\n bundle?: string\n token?: string\n}\n\n/**\n * A store for the session state.\n */\nclass SessionStore {\n private readonly _store: StoreApi<SessionState>\n\n /**\n * Initializes a new instance of the `SessionStore` class by creating a new `zustand`store with the initial state.\n */\n constructor() {\n this._store = createStore<SessionState>()(\n persist(this._getInitialState, {\n name: 'fourt.io-signer-session',\n storage: createJSONStorage<SessionState>(() => localStorage),\n }),\n )\n }\n\n /**\n * Gets the type from the session state.\n *\n * @returns {SessionType | undefined} the type.\n */\n get type(): SessionType | undefined {\n return this._store.getState().type\n }\n\n /**\n * Sets the type in the session state.\n *\n * @param {SessionType} type the type to set.\n */\n set type(type: SessionType) {\n this._store.setState({ type })\n }\n\n /**\n * Gets the token from the session state.\n *\n * @returns {string | undefined} the token.\n */\n get token(): string | undefined {\n return this._store.getState().token\n }\n\n /**\n * Sets the token in the session state.\n *\n * @param {string} token the token to set.\n */\n set token(token: string) {\n this._store.setState({ token })\n }\n\n /**\n * Gets the bundle from the session state.\n *\n * @returns {string | undefined} the bundle.\n */\n get bundle(): string | undefined {\n return this._store.getState().bundle\n }\n\n /**\n * Sets the bundle in the session state.\n *\n * @param {string} bundle the bundle to set.\n */\n set bundle(bundle: string) {\n this._store.setState({ bundle })\n }\n\n /**\n * Gets the user from the session state.\n *\n * @returns {User | undefined} the user.\n */\n get user(): User | undefined {\n return this._store.getState().user\n }\n\n /**\n * Sets the user in the session state.\n *\n * @param {User} user the user to set.\n */\n set user(user: User) {\n this._store.setState({ ...this._store.getState(), user })\n }\n\n /**\n * Clears the user from the session state.\n */\n clearUser() {\n this._store.setState({ ...this._store.getState(), user: undefined })\n }\n\n /**\n * Clears the bundle from the session state.\n */\n clearBundle() {\n this._store.setState({ ...this._store.getState(), bundle: undefined })\n }\n\n /**\n * Clears the type from the session state.\n */\n clearType() {\n this._store.setState({ ...this._store.getState(), type: undefined })\n }\n\n /**\n * Clears the token from the session state.\n */\n clearToken() {\n this._store.setState({ ...this._store.getState(), token: undefined })\n }\n\n /**\n * Clears the token and user from the session state.\n */\n clearAll() {\n this.clearToken()\n this.clearUser()\n this.clearBundle()\n this.clearType()\n }\n\n private _getInitialState(): SessionState {\n return {\n type: undefined,\n user: undefined,\n bundle: undefined,\n token: undefined,\n }\n }\n}\n\nexport { SessionType, SessionStore }\nexport type { SessionState }\n","import { getWebAuthnAttestation, TSignedRequest } from '@turnkey/http'\nimport { User } from './entities.js'\nimport { AtLeastOne } from './string.js'\n\ntype AuthenticationServiceRoutes =\n AuthenticationServiceEndpoints[number]['Route']\n\ntype AuthenticationServiceBody<Route extends AuthenticationServiceRoutes> =\n Extract<AuthenticationServiceEndpoints[number], { Route: Route }>['Body']\n\ntype AuthenticationServiceResponse<Route extends AuthenticationServiceRoutes> =\n Extract<AuthenticationServiceEndpoints[number], { Route: Route }>['Response']\n\ntype AuthenticationServiceEndpoints = [\n {\n Route: '/v1/email-auth'\n Body: {\n email: string\n targetPublicKey: string\n redirectUrl: string\n expirationSeconds?: number\n }\n Response: {\n subOrgId: string\n }\n },\n {\n Route: '/v1/signup'\n Body: AtLeastOne<{\n passkey: {\n challenge: string\n attestation: Awaited<ReturnType<typeof getWebAuthnAttestation>>\n }\n iframe: {\n targetPublicKey: string\n redirectUrl: string\n expirationSeconds?: number\n }\n }> & { email: string }\n Response: {\n user: User\n token: string\n }\n },\n {\n Route: '/v1/lookup'\n Body: {\n email: string\n }\n Response: {\n subOrgId: string\n }\n },\n {\n Route: '/v1/signin'\n Body: {\n stampedRequest: TSignedRequest\n }\n Response: {\n user: User\n token: string\n }\n },\n {\n Route: '/v1/sign'\n Body: {\n stampedRequest: TSignedRequest\n }\n Response: {\n signature: string\n }\n },\n]\n\nconst ROUTE_METHOD_MAP = {\n '/v1/signup': 'POST',\n '/v1/email-auth': 'POST',\n '/v1/lookup': 'POST',\n '/v1/signin': 'POST',\n '/v1/sign': 'POST',\n} satisfies Record<AuthenticationServiceRoutes, 'POST' | 'GET'>\n\nexport type {\n AuthenticationServiceEndpoints,\n AuthenticationServiceResponse,\n AuthenticationServiceBody,\n AuthenticationServiceRoutes,\n}\n\nexport { ROUTE_METHOD_MAP }\n","import { Buffer } from 'buffer'\n\nclass LibBase64 {\n static fromBuffer(buffer: ArrayBuffer): string {\n return Buffer.from(buffer)\n .toString('base64')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '')\n }\n\n static toBuffer(base64: string): ArrayBuffer {\n return Buffer.from(base64, 'base64')\n }\n}\n\nexport { LibBase64 }\n","type TakeBytesParams = Partial<{\n count: number\n offset: number\n}>\n\ntype ByteString = `0x${string}`\n\nclass LibBytes {\n static generateRandomBuffer = (): ArrayBuffer => {\n const arr = new Uint8Array(32)\n crypto.getRandomValues(arr)\n return arr.buffer\n }\n\n static takeBytes = (\n bytes: ByteString,\n params: TakeBytesParams = {},\n ): ByteString => {\n const { offset, count } = params\n const start = (offset ? offset * 2 : 0) + 2 // add 2 to skip the 0x prefix\n const end = count ? start + count * 2 : undefined\n\n return `0x${bytes.slice(start, end)}`\n }\n}\n\nexport { LibBytes }\n","import {\n LocalAccount,\n TypedData,\n TypedDataDefinition,\n SignableMessage,\n Hex,\n hashMessage,\n hashTypedData,\n SerializeTransactionFn,\n TransactionSerializable,\n IsNarrowable,\n TransactionSerialized,\n GetTransactionType,\n serializeTransaction,\n keccak256,\n Client,\n hexToBigInt,\n http,\n} from 'viem'\nimport { toAccount } from 'viem/accounts'\nimport { SignerClient } from '../signer/index.js'\nimport { LibBytes } from '../lib/bytes.js'\nimport { toLightSmartAccount } from 'permissionless/accounts'\nimport {\n createPaymasterClient,\n entryPoint07Address,\n} from 'viem/account-abstraction'\nimport { UnauthenticatedError } from '../errors/UnauthenticatedError.js'\n\ntype ViemModuleConstructorParams = {\n refs: {\n signerClient: SignerClient\n }\n}\n\ntype CurrentUserToLightSmartAccountParams = {\n owner: LocalAccount\n client: Client\n}\n\nclass ViemModule {\n constructor(private readonly _signerClient: SignerClient) {}\n\n async toLocalAccount(): Promise<LocalAccount> {\n const user = this._signerClient.user\n\n if (!user) {\n throw new UnauthenticatedError({ message: 'Signer not authenticated' })\n }\n\n return toAccount({\n address: user.walletAddress,\n signMessage: (msg) => this.signMessage(msg.message),\n signTypedData: <\n const typedData extends TypedData | Record<string, unknown>,\n primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,\n >(\n typedDataDefinition: TypedDataDefinition<typedData, primaryType>,\n ) => this.signTypedData<typedData, primaryType>(typedDataDefinition),\n signTransaction: this.signTransaction,\n })\n }\n\n async toSmartAccount({\n client,\n owner,\n }: CurrentUserToLightSmartAccountParams): ReturnType<\n typeof toLightSmartAccount<'0.7'>\n > {\n const user = this._signerClient.user\n\n if (!user) {\n throw new UnauthenticatedError({ message: 'Signer not authenticated' })\n }\n\n return toLightSmartAccount({\n client: client,\n owner,\n version: '2.0.0',\n entryPoint: {\n address: entryPoint07Address,\n version: '0.7',\n },\n address: user.smartAccountAddress,\n index: hexToBigInt(user.salt),\n })\n }\n\n async getPaymasterClient() {\n const url = new URL(\n `v1/rpc?apiKey=${this._signerClient.configuration.apiKey}`,\n this._signerClient.configuration.paymasterRpcUrl,\n )\n return createPaymasterClient({\n transport: http(url.toString()),\n })\n }\n\n async signMessage(msg: SignableMessage): Promise<Hex> {\n const messageHash = hashMessage(msg)\n const result = await this._signerClient.signRawMessage<Hex>(messageHash)\n return result\n }\n\n async signTypedData<\n TTypedData extends TypedData | Record<string, unknown>,\n TPrimaryType extends keyof TTypedData | 'EIP712Domain' = keyof TTypedData,\n >(params: TypedDataDefinition<TTypedData, TPrimaryType>): Promise<Hex> {\n const messageHash = hashTypedData(params)\n return this._signerClient.signRawMessage(messageHash)\n }\n\n async signTransaction<\n serializer extends SerializeTransactionFn<TransactionSerializable> = SerializeTransactionFn<TransactionSerializable>,\n transaction extends Parameters<serializer>[0] = Parameters<serializer>[0],\n >(\n transaction: transaction,\n options?:\n | {\n serializer?: serializer | undefined\n }\n | undefined,\n ): Promise<\n IsNarrowable<\n TransactionSerialized<GetTransactionType<transaction>>,\n Hex\n > extends true\n ? TransactionSerialized<GetTransactionType<transaction>>\n : Hex\n > {\n const serializeFn = options?.serializer ?? serializeTransaction\n const serializedTx = serializeFn(transaction)\n const signatureHex = await this._signerClient.signRawMessage<Hex>(\n keccak256(serializedTx),\n )\n\n const signature = {\n r: LibBytes.takeBytes(signatureHex, { count: 32 }),\n s: LibBytes.takeBytes(signatureHex, { count: 32, offset: 32 }),\n v: BigInt(LibBytes.takeBytes(signatureHex, { count: 1, offset: 64 })),\n }\n\n return serializeFn(transaction, signature)\n }\n}\n\nexport { ViemModule }\n","import type {\n WebSignerClient,\n EmailInitializeAuthParams,\n EmailCompleteAuthWithBundleParams,\n} from '../../signer/web.js'\n\n/**\n * A module for interacting with the Email authentication methods.\n * Available through the `auth.email` property on a `FourtWebSigner` instance.\n */\nclass EmailModule {\n constructor(private readonly _webSignerClient: WebSignerClient) {}\n\n /**\n * Initialize user authentication process using email.\n *\n * @param params {EmailInitializeAuthParams} params to initialize the user authentication process.\n * @returns {Promise<void>} promise that resolves to the result of the authentication process.\n */\n async initialize(params: EmailInitializeAuthParams): Promise<void> {\n return this._webSignerClient.emailAuth(params)\n }\n\n /**\n * Completes authentication with bundle after user receives the bundle and subOrgId as URL params.\n *\n * @param params {EmailCompleteAuthWithBundleParams} params received as URL params necessary to complete authentication process.\n * @returns {Promise<void>} promise that completes the authentication process.\n */\n async complete(params: EmailCompleteAuthWithBundleParams): Promise<void> {\n return this._webSignerClient.completeAuthWithBundle(params)\n }\n}\n\nexport { EmailModule }\n","import type { WebSignerClient, WebauthnSignInParams } from '../../signer/web.js'\n\n/**\n * A module for interacting with the Passkeys authentication methods.\n * Available through the `auth.passkeys` property on a `FourtWebSigner` instance.\n */\nclass PasskeysModule {\n constructor(private readonly _webSignerClient: WebSignerClient) {}\n\n /**\n * Signs in a user using Passkeys.\n *\n * @param params {WebauthnSignInParams} params for the sign-in process.\n * @returns {Promise<void>} promise that resolves to the result of the sign-in process.\n */\n async signIn(params: WebauthnSignInParams) {\n return this._webSignerClient.webauthnSignIn(params)\n }\n}\n\nexport { PasskeysModule }\n","import type { WebSignerClient } from '../../signer/web.js'\nimport { EmailModule } from './email.js'\nimport { PasskeysModule } from './passkeys.js'\n\n/**\n * A module for interacting with the authentication methods.\n * Available through the `auth` property on a `FourtWebSigner` instance.\n */\nclass AuthModule {\n private readonly _passkeys: PasskeysModule\n private readonly _email: EmailModule\n\n /**\n * Initializes a new instance of the `AuthModule` class.\n *\n * @param {WebSignerClient} _webSignerClient underlying WebSigner client instance.\n */\n constructor(private readonly _webSignerClient: WebSignerClient) {\n this._passkeys = new PasskeysModule(this._webSignerClient)\n this._email = new EmailModule(this._webSignerClient)\n }\n\n /**\n * A module for interacting with the Passkeys authentication methods.\n */\n get passkeys() {\n return this._passkeys\n }\n\n /**\n * A module for interacting with the Passkeys authentication methods.\n */\n get email() {\n return this._email\n }\n}\n\nexport { AuthModule }\nexport { PasskeysModule } from './passkeys.js'\nexport { EmailModule } from './email.js'\n","import { WebSignerClient } from '../../signer/web.js'\nimport { User } from '../../types/entities.js'\n\n/**\n * A module for interacting with the user methods.\n * Available through the `user` property on a `FourtWebSigner` instance.\n */\nclass UserModule {\n /**\n * Initializes a new instance of the `UserModule` class.\n *\n * @param {WebSignerClient} _webSignerClient underlying WebSigner client instance.\n */\n constructor(private readonly _webSignerClient: WebSignerClient) {}\n\n /**\n * Gets the user information.\n *\n * @returns {User | undefined} user information.\n */\n get info() {\n return this._webSignerClient.user\n }\n\n /**\n * Logs out the user.\n *\n * @returns {void}\n */\n logout() {\n return this._webSignerClient.logout()\n }\n}\n\nexport { UserModule }\n","import { SignerClientConstructorParams } from './signer/index.js'\nimport {\n WebauthnSignInParams,\n WebSignerClient,\n WebSignerClientConstructorParams,\n} from './signer/web.js'\nimport { ViemModule } from './third-party/viem.js'\nimport { AuthModule, UserModule } from './modules/index.js'\n\ntype FourtWebSignerConstructorParams = {\n configuration: SignerClientConstructorParams['configuration']\n auth: Pick<WebSignerClientConstructorParams, 'webauthn' | 'iframe'>\n}\n\n/**\n * A client for interacting with the Fourt Web Signer.\n */\nclass FourtWebSigner {\n private readonly _webSignerClient: WebSignerClient\n private readonly _modules: {\n viem: ViemModule\n auth: AuthModule\n user: UserModule\n }\n\n /**\n * Initializes a new instance of the `FourtWebSigner` class.\n * Sets up the underlying modules.\n *\n *\n * @example\n * ```ts\n * const fourtWebSigner = new FourtWebSigner({\n * auth: {\n * webauthn: {\n * rpId: 'localhost',\n * },\n * },\n * configuration: {\n * apiKey: '927d603c-6775-4210-8e13-8904ca985e78',\n * },\n * })\n * ```\n *\n * @param {FourtWebSignerConstructorParams} params the required parameters to initialize the client\n */\n constructor({\n configuration,\n auth: { webauthn, iframe },\n }: FourtWebSignerConstructorParams) {\n this._webSignerClient = new WebSignerClient({\n configuration,\n webauthn,\n iframe,\n })\n\n this._modules = {\n viem: new ViemModule(this._webSignerClient),\n auth: new AuthModule(this._webSignerClient),\n user: new UserModule(this._webSignerClient),\n }\n }\n\n /**\n * A module for interacting with the Viem library.\n */\n get viem() {\n return this._modules.viem\n }\n\n /**\n * A module for interacting with the authentication methods.\n */\n get auth() {\n return this._modules.auth\n }\n\n /**\n * A module for interacting with the user methods.\n */\n get user() {\n return this._modules.user\n }\n}\n\nexport { FourtWebSigner }\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/session/index.ts","../src/modules/auth/email.ts","../src/modules/auth/passkeys.ts","../src/modules/auth/oauth/google.ts","../src/errors/SDKError.ts","../src/errors/BadRequestError.ts","../src/modules/auth/oauth/facebook.ts","../src/modules/auth/oauth/apple.ts","../src/modules/auth/oauth.ts","../src/modules/auth/index.ts","../src/modules/user/index.ts","../src/signer/web.ts","../src/lib/base64.ts","../src/lib/bytes.ts","../src/signer/index.ts","../src/errors/UnauthorizedError.ts","../src/errors/NotFoundError.ts","../src/errors/GenericError.ts","../src/errors/UnauthenticatedError.ts","../src/types/Routes.ts","../src/third-party/viem.ts","../src/index.ts"],"sourcesContent":["import { createStore, type StoreApi } from 'zustand'\nimport { createJSONStorage, persist } from 'zustand/middleware'\nimport { User } from '../types/entities.js'\n\nenum SessionType {\n Email = 'email',\n Passkeys = 'passkeys',\n OAuth = 'oauth',\n}\n\n/**\n * The state of the session.\n */\ntype SessionState = {\n type?: SessionType\n user?: User\n expirationDate?: Date\n bundle?: string\n token?: string\n}\n\n/**\n * A store for the session state.\n */\nclass SessionStore {\n private readonly _store: StoreApi<SessionState>\n\n /**\n * Initializes a new instance of the `SessionStore` class by creating a new `zustand`store with the initial state.\n */\n constructor() {\n this._store = createStore<SessionState>()(\n persist(this._getInitialState, {\n name: 'fourt.io-signer-session',\n storage: createJSONStorage<SessionState>(() => localStorage),\n }),\n )\n }\n\n /**\n * Gets the type from the session state.\n *\n * @returns {SessionType | undefined} the type.\n */\n get type(): SessionType | undefined {\n return this._store.getState().type\n }\n\n /**\n * Sets the type in the session state.\n *\n * @param {SessionType} type the type to set.\n */\n set type(type: SessionType) {\n this._store.setState({ type })\n }\n\n /**\n * Gets the token from the session state.\n *\n * @returns {string | undefined} the token.\n */\n get token(): string | undefined {\n return this._store.getState().token\n }\n\n /**\n * Sets the token in the session state.\n *\n * @param {string} token the token to set.\n */\n set token(token: string) {\n this._store.setState({ token })\n }\n\n /**\n * Gets the bundle from the session state.\n *\n * @returns {string | undefined} the bundle.\n */\n get bundle(): string | undefined {\n return this._store.getState().bundle\n }\n\n /**\n * Sets the bundle in the session state.\n *\n * @param {string} bundle the bundle to set.\n */\n set bundle(bundle: string) {\n this._store.setState({ bundle })\n }\n\n /**\n * Gets the user from the session state.\n *\n * @returns {User | undefined} the user.\n */\n get user(): User | undefined {\n return this._store.getState().user\n }\n\n /**\n * Sets the user in the session state.\n *\n * @param {User} user the user to set.\n */\n set user(user: User) {\n this._store.setState({ ...this._store.getState(), user })\n }\n\n /**\n * Clears the user from the session state.\n */\n clearUser() {\n this._store.setState({ ...this._store.getState(), user: undefined })\n }\n\n /**\n * Clears the bundle from the session state.\n */\n clearBundle() {\n this._store.setState({ ...this._store.getState(), bundle: undefined })\n }\n\n /**\n * Clears the type from the session state.\n */\n clearType() {\n this._store.setState({ ...this._store.getState(), type: undefined })\n }\n\n /**\n * Clears the token from the session state.\n */\n clearToken() {\n this._store.setState({ ...this._store.getState(), token: undefined })\n }\n\n /**\n * Clears the token and user from the session state.\n */\n clearAll() {\n this.clearToken()\n this.clearUser()\n this.clearBundle()\n this.clearType()\n }\n\n private _getInitialState(): SessionState {\n return {\n type: undefined,\n user: undefined,\n bundle: undefined,\n token: undefined,\n }\n }\n}\n\nexport { SessionType, SessionStore }\nexport type { SessionState }\n","import { SessionType } from '../../session/index.js'\nimport type {\n WebSignerClient,\n EmailInitializeAuthParams,\n CompleteAuthWithBundleParams,\n} from '../../signer/web.js'\n\n/**\n * A module for interacting with the Email authentication methods.\n * Available through the `auth.email` property on a `FourtWebSigner` instance.\n */\nclass EmailModule {\n constructor(private readonly _webSignerClient: WebSignerClient) {}\n\n /**\n * Initialize user authentication process using email.\n *\n * @param params {EmailInitializeAuthParams} params to initialize the user authentication process.\n * @returns {Promise<void>} promise that resolves to the result of the authentication process.\n */\n async initialize(params: EmailInitializeAuthParams): Promise<void> {\n return this._webSignerClient.emailAuth(params)\n }\n\n /**\n * Completes authentication with bundle after user receives the bundle and subOrgId as URL params.\n *\n * @param params {CompleteAuthWithBundleParams} params received as URL params necessary to complete authentication process.\n * @returns {Promise<void>} promise that completes the authentication process.\n */\n async complete(\n params: Pick<CompleteAuthWithBundleParams, 'subOrgId' | 'bundle'>,\n ): Promise<void> {\n return this._webSignerClient.completeAuthWithBundle({\n ...params,\n sessionType: SessionType.Email,\n })\n }\n}\n\nexport { EmailModule }\n","import type { WebSignerClient, WebauthnSignInParams } from '../../signer/web.js'\n\n/**\n * A module for interacting with the Passkeys authentication methods.\n * Available through the `auth.passkeys` property on a `FourtWebSigner` instance.\n */\nclass PasskeysModule {\n constructor(private readonly _webSignerClient: WebSignerClient) {}\n\n /**\n * Signs in a user using Passkeys.\n *\n * @param params {WebauthnSignInParams} params for the sign-in process.\n * @returns {Promise<void>} promise that resolves to the result of the sign-in process.\n */\n async signIn(params: WebauthnSignInParams) {\n return this._webSignerClient.webauthnSignIn(params)\n }\n}\n\nexport { PasskeysModule }\n","import * as jose from 'jose'\nimport { sha256 } from 'sha.js'\nimport type { WebSignerClient } from '../../../signer/web.js'\nimport { BadRequestError } from '../../../errors/BadRequestError.js'\n\ntype CompleteParams = {\n credentialBundle: string\n subOrgId: string\n}\n\nclass GoogleModule {\n constructor(private readonly _webSignerClient: WebSignerClient) {}\n\n /**\n *\n * @returns\n */\n async init(): Promise<string> {\n if (!this._webSignerClient.oauthConfiguration?.google) {\n throw new BadRequestError({ message: 'Google OAuth is not configured' })\n }\n\n const url = new URL('https://accounts.google.com/o/oauth2/v2/auth')\n url.searchParams.set(\n 'client_id',\n this._webSignerClient.oauthConfiguration.google.id,\n )\n url.searchParams.set('response_type', 'code')\n url.searchParams.set('scope', 'openid email')\n\n const internalUrl = new URL(\n 'v1/oauth',\n this._webSignerClient.configuration.apiUrl,\n ).href\n url.searchParams.set('redirect_uri', internalUrl)\n\n const publicKey = await this._webSignerClient.getIframePublicKey()\n\n const nonce = new sha256().update(publicKey).digest('hex')\n url.searchParams.set('nonce', nonce)\n\n const state = new jose.UnsecuredJWT({\n apiKey: this._webSignerClient.configuration.apiKey,\n redirectUrl: this._webSignerClient.oauthConfiguration!.common.redirectUrl,\n targetPublicKey: publicKey,\n internalUrl: internalUrl,\n origin: window.location.origin,\n provider: 'google',\n }).encode()\n url.searchParams.set('state', state)\n\n return url.toString()\n }\n}\n\nexport { GoogleModule }\n","type SDKErrorProps = {\n message: string\n}\n\nabstract class SDKError extends Error {\n private readonly _props: SDKErrorProps\n\n constructor(message: string, props: SDKErrorProps) {\n super(message)\n this._props = props\n }\n\n get message() {\n return this._props.message\n }\n}\n\nexport { SDKError }\nexport type { SDKErrorProps }\n","import { SDKErrorProps, SDKError } from './SDKError.js'\n\nclass BadRequestError extends SDKError {\n constructor(props: SDKErrorProps) {\n super(BadRequestError.name, props)\n }\n}\n\nexport { BadRequestError }\n","import { BadRequestError } from '../../../errors/BadRequestError.js'\nimport { WebSignerClient } from '../../../signer/web.js'\nimport * as jose from 'jose'\n\nclass FacebookModule {\n constructor(private readonly _webSignerClient: WebSignerClient) {}\n\n async init(): Promise<string> {\n if (!this._webSignerClient.oauthConfiguration?.facebook) {\n throw new BadRequestError({ message: 'Facebook OAuth is not configured' })\n }\n\n const publicKey = await this._webSignerClient.getIframePublicKey()\n const internalUrl = new URL(\n 'v1/oauth',\n this._webSignerClient.configuration.apiUrl,\n ).href\n\n const jwt = new jose.UnsecuredJWT({\n apiKey: this._webSignerClient.configuration.apiKey,\n redirectUrl: this._webSignerClient.oauthConfiguration.common.redirectUrl,\n targetPublicKey: publicKey,\n internalUrl: internalUrl,\n origin: window.location.origin,\n provider: 'facebook',\n }).encode()\n\n const response = await fetch(internalUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n state: jwt,\n }),\n })\n\n if (!response.ok) {\n throw new BadRequestError({\n message: `Failed to create OAuth state. Error: ${response.statusText}`,\n })\n }\n\n const { authUrl } = await response.json()\n if (!authUrl) {\n throw new BadRequestError({\n message: response.statusText,\n })\n }\n\n return authUrl\n }\n}\n\nexport { FacebookModule }\n","import * as jose from 'jose'\nimport { sha256 } from 'sha.js'\nimport type { WebSignerClient } from '../../../signer/web.js'\nimport { BadRequestError } from '../../../errors/BadRequestError.js'\n\ntype CompleteParams = {\n credentialBundle: string\n subOrgId: string\n}\n\nclass AppleModule {\n constructor(private readonly _webSignerClient: WebSignerClient) {}\n\n /**\n *\n * @returns\n */\n async init(): Promise<string> {\n if (!this._webSignerClient.oauthConfiguration?.apple) {\n throw new BadRequestError({ message: 'Apple OAuth is not configured' })\n }\n\n const url = new URL('https://appleid.apple.com/auth/authorize')\n url.searchParams.set(\n 'client_id',\n this._webSignerClient.oauthConfiguration.apple.id,\n )\n url.searchParams.set('response_type', 'code')\n url.searchParams.set('response_mode', 'form_post')\n url.searchParams.set('scope', 'email')\n\n console.log(\n 'Apple OAuth initialization started',\n this._webSignerClient.oauthConfiguration.common.redirectUrl,\n )\n\n const internalUrl = new URL(\n 'v1/oauth/apple',\n this._webSignerClient.configuration.apiUrl,\n ).href\n url.searchParams.set('redirect_uri', internalUrl)\n\n const publicKey = await this._webSignerClient.getIframePublicKey()\n\n const nonce = new sha256().update(publicKey).digest('hex')\n url.searchParams.set('nonce', nonce)\n\n const state = new jose.UnsecuredJWT({\n apiKey: this._webSignerClient.configuration.apiKey,\n redirectUrl: this._webSignerClient.oauthConfiguration!.common.redirectUrl,\n targetPublicKey: publicKey,\n internalUrl: internalUrl,\n origin: window.location.origin,\n }).encode()\n url.searchParams.set('state', state)\n\n return url.toString()\n }\n}\n\nexport { AppleModule }\n","import { SessionType } from '../../session/index.js'\nimport type { WebSignerClient } from '../../signer/web.js'\nimport { GoogleModule } from './oauth/google.js'\nimport { FacebookModule } from './oauth/facebook.js'\nimport { AppleModule } from './oauth/apple.js'\n\ntype CompleteParams = {\n bundle: string\n subOrgId: string\n}\n\nclass OAuthModule {\n private readonly _googleModule: GoogleModule\n private readonly _facebookModule: FacebookModule\n private readonly _appleModule: AppleModule\n\n constructor(private readonly _webSignerClient: WebSignerClient) {\n this._googleModule = new GoogleModule(this._webSignerClient)\n this._facebookModule = new FacebookModule(this._webSignerClient)\n this._appleModule = new AppleModule(this._webSignerClient)\n }\n\n get google() {\n return this._googleModule\n }\n\n get facebook() {\n return this._facebookModule\n }\n\n get apple() {\n return this._appleModule\n }\n\n async complete({ bundle, subOrgId }: CompleteParams) {\n await this._webSignerClient.completeAuthWithBundle({\n bundle,\n subOrgId,\n sessionType: SessionType.OAuth,\n })\n }\n}\n\nexport { OAuthModule }\n","import type { WebSignerClient } from '../../signer/web.js'\nimport { EmailModule } from './email.js'\nimport { PasskeysModule } from './passkeys.js'\nimport { OAuthModule } from './oauth.js'\n\n/**\n * A module for interacting with the authentication methods.\n * Available through the `auth` property on a `FourtWebSigner` instance.\n */\nclass AuthModule {\n private readonly _passkeys: PasskeysModule\n private readonly _email: EmailModule\n private readonly _oauth: OAuthModule\n\n /**\n * Initializes a new instance of the `AuthModule` class.\n *\n * @param {WebSignerClient} _webSignerClient underlying WebSigner client instance.\n */\n constructor(private readonly _webSignerClient: WebSignerClient) {\n this._passkeys = new PasskeysModule(this._webSignerClient)\n this._email = new EmailModule(this._webSignerClient)\n this._oauth = new OAuthModule(this._webSignerClient)\n }\n\n /**\n * A module for interacting with the Passkeys authentication methods.\n */\n get passkeys() {\n return this._passkeys\n }\n\n /**\n * A module for interacting with the Passkeys authentication methods.\n */\n get email() {\n return this._email\n }\n\n get oauth() {\n return this._oauth\n }\n}\n\nexport { AuthModule }\nexport { PasskeysModule } from './passkeys.js'\nexport { EmailModule } from './email.js'\n","import { WebSignerClient } from '../../signer/web.js'\nimport { User } from '../../types/entities.js'\n\n/**\n * A module for interacting with the user methods.\n * Available through the `user` property on a `FourtWebSigner` instance.\n */\nclass UserModule {\n /**\n * Initializes a new instance of the `UserModule` class.\n *\n * @param {WebSignerClient} _webSignerClient underlying WebSigner client instance.\n */\n constructor(private readonly _webSignerClient: WebSignerClient) {}\n\n /**\n * Gets the user information.\n *\n * @returns {User | undefined} user information.\n */\n get info() {\n return this._webSignerClient.user\n }\n\n /**\n * Logs out the user.\n *\n * @returns {void}\n */\n logout() {\n return this._webSignerClient.logout()\n }\n}\n\nexport { UserModule }\n","import { getWebAuthnAttestation } from '@turnkey/http'\nimport { IframeStamper } from '@turnkey/iframe-stamper'\nimport { WebauthnStamper } from '@turnkey/webauthn-stamper'\nimport { LibBase64 } from '../lib/base64.js'\nimport { LibBytes } from '../lib/bytes.js'\nimport { SessionType } from '../session/index.js'\nimport {\n type SignerClientInheritedConstructorParams,\n SignerClient,\n} from './index.js'\n\ntype WebauthnSignInParams = {\n email: string\n}\n\n// * When user starts auth with email - can be either a signup or a signin\ntype EmailInitializeAuthParams = {\n email: string\n redirectUrl: string\n expirationSeconds?: number // Defaults to 15 minutes by Turnkey\n}\n\n// * When user completes auth with bundle\ntype CompleteAuthWithBundleParams = {\n bundle: string\n subOrgId: string\n sessionType: SessionType\n isNewUser?: boolean\n}\n\ntype GoogleOAuthSignInParams = {\n credential: string\n clientId: string\n}\n\nexport type OAuthConfiguration = {\n common: {\n redirectUrl: string\n }\n google?: {\n id: string\n }\n facebook?: {\n id: string\n }\n apple?: {\n id: string\n }\n}\n\ntype WebSignerClientConstructorParams = SignerClientInheritedConstructorParams<{\n webauthn: {\n rpId: string\n }\n iframe?: {\n iframeElementId?: string\n iframeContainerId?: string\n }\n oauth?: OAuthConfiguration\n}>\n\ntype CreateAccountParams =\n | ({\n method: 'webauthn'\n } & WebauthnSignInParams)\n | ({\n method: 'email'\n } & EmailInitializeAuthParams)\n\n/**\n * A signer client for web applications.\n */\nclass WebSignerClient extends SignerClient {\n private readonly _stampers: {\n webauthn: WebauthnStamper\n iframe: IframeStamper\n }\n\n readonly oauthConfiguration: WebSignerClientConstructorParams['oauth']\n\n /**\n * Initializes a new instance of the `WebSignerClient` class.\n *\n * @param {WebSignerClientConstructorParams} params params for the constructor\n */\n constructor({\n configuration,\n webauthn,\n iframe,\n oauth,\n }: WebSignerClientConstructorParams) {\n const iframeContainerId =\n iframe?.iframeContainerId ?? 'fourt-signer-iframe-container'\n const iframeContainer = document.createElement('div')\n iframeContainer.id = iframeContainerId\n iframeContainer.style.display = 'none'\n document.body.appendChild(iframeContainer)\n\n const webauthnStamper = new WebauthnStamper({ rpId: webauthn.rpId })\n const iframeStamper = new IframeStamper({\n iframeUrl: 'https://auth.turnkey.com',\n iframeElementId: iframe?.iframeElementId ?? 'turnkey-iframe',\n iframeContainer: document.getElementById(iframeContainerId),\n })\n\n super({\n stamper: iframeStamper, // Initialized to iframeStamper; can be either webauthnStamper or iframeStamper\n configuration: configuration,\n })\n\n this._stampers = {\n webauthn: webauthnStamper,\n iframe: iframeStamper,\n }\n\n this.oauthConfiguration = oauth\n }\n\n public override async signRawMessage<Into extends string>(\n msg: string,\n ): Promise<Into> {\n await this.updateStamper()\n return super.signRawMessage(msg)\n }\n\n public override async logout() {\n this._stampers.iframe.clear()\n await this._stampers.iframe.init()\n return super.logout()\n }\n\n /**\n * Checks for an existing session and if exists, updates the stamper accordingly.\n *\n */\n private async updateStamper() {\n // User is not signed in\n if (\n this._sessionStore.type === undefined &&\n (this._sessionStore.bundle === undefined ||\n this._sessionStore.token === undefined)\n )\n return\n if (this._sessionStore.type === SessionType.Passkeys) {\n this.stamper = this._stampers.webauthn\n } else {\n this.stamper = this._stampers.iframe\n // We need to inject to inject the credential bundle\n // Otherwise the user will not be able to sign\n await this.completeAuthWithBundle({\n bundle: this._sessionStore.bundle!,\n subOrgId: this.user?.subOrgId!,\n sessionType: this._sessionStore.type!,\n })\n }\n }\n\n /**\n * Signs in a user with webauthn.\n *\n * @param {WebauthnSignInParams} params params for the sign in\n */\n async webauthnSignIn({ email }: WebauthnSignInParams) {\n const existingUserSubOrgId = await this.lookUpUser(email)\n\n if (!existingUserSubOrgId) {\n await this._createAccount({ method: 'webauthn', email })\n } else {\n this.stamper = this._stampers.webauthn\n await this.whoAmI(existingUserSubOrgId)\n\n this._sessionStore.type = SessionType.Passkeys\n\n // We should assure that the user and its credentialId are set\n if (!this.user || !this.user.credentialId) {\n return\n }\n\n this._stampers.webauthn.allowCredentials = [\n {\n id: LibBase64.toBuffer(this.user.credentialId),\n type: 'public-key',\n transports: ['internal', 'usb'],\n },\n ]\n }\n }\n\n /**\n * Handle auth user process with email.\n *\n * @param {EmailInitializeAuthParams} params Params needed for the initialization of the auth process\n */\n async emailAuth(params: EmailInitializeAuthParams) {\n const existingUserSubOrgId = await this.lookUpUser(params.email)\n\n if (!existingUserSubOrgId) {\n await this._createAccount({ method: 'email', ...params })\n } else {\n await this._signInWithEmail(params)\n }\n }\n\n async getIframePublicKey() {\n return await this._initIframeStamper()\n }\n\n /**\n * Signs in a user with email.\n *\n * @param {EmailInitializeAuthParams} params params for the sign in\n */\n private async _signInWithEmail({\n email,\n expirationSeconds,\n redirectUrl,\n }: EmailInitializeAuthParams) {\n return this.request('/v1/email-auth', {\n email,\n targetPublicKey: await this.getIframePublicKey(),\n expirationSeconds,\n redirectUrl: redirectUrl.toString(),\n })\n }\n\n /**\n * Completes the authentication process with a credential bundle.\n *\n * @param {CompleteAuthWithBundleParams} params params for the completion of the auth process\n */\n public async completeAuthWithBundle({\n bundle,\n subOrgId,\n sessionType,\n }: CompleteAuthWithBundleParams): Promise<void> {\n await this._initIframeStamper()\n\n const result = await this._stampers.iframe.injectCredentialBundle(bundle)\n\n if (!result) {\n throw new Error('Failed to inject credential bundle')\n }\n\n await this.whoAmI(subOrgId)\n\n this._sessionStore.type = sessionType\n this._sessionStore.bundle = bundle\n }\n\n /**\n * Creates a passkey account using the webauthn stamper.\n *\n * @param {Extract<CreateAccountParams, { method: 'webauthn' }>} params params for the creation of the account\n */\n private async _createWebauthnAccount(\n params: Extract<CreateAccountParams, { method: 'webauthn' }>,\n ) {\n const { challenge, attestation } = await this._webauthnGenerateAttestation(\n params.email,\n )\n\n const {\n token,\n user: { id, email, subOrgId, walletAddress, salt, smartAccountAddress },\n } = await this.request('/v1/signup', {\n passkey: {\n challenge: LibBase64.fromBuffer(challenge),\n attestation,\n },\n email: params.email,\n })\n\n this.user = {\n id,\n email,\n subOrgId,\n walletAddress,\n salt,\n smartAccountAddress,\n credentialId: attestation.credentialId,\n }\n this._sessionStore.user = this.user\n this._sessionStore.type = SessionType.Passkeys\n this._sessionStore.token = token\n }\n\n /**\n * Creates an email account using the iframe stamper.\n *\n * @param {Extract<CreateAccountParams, { method: 'email' }>} params params for the creation of the account\n */\n private async _createEmailAccount(\n params: Extract<CreateAccountParams, { method: 'email' }>,\n ) {\n const { email, expirationSeconds, redirectUrl } =\n params as EmailInitializeAuthParams\n\n const response = await this.request('/v1/signup', {\n email,\n iframe: {\n targetPublicKey: await this.getIframePublicKey(),\n expirationSeconds,\n redirectUrl: redirectUrl.toString(),\n },\n })\n\n return response\n }\n\n /**\n * Handle the account creation process.\n *\n * @param {CreateAccountParams} params params to create an account\n */\n private async _createAccount(params: CreateAccountParams) {\n switch (params.method) {\n case 'webauthn': {\n await this._createWebauthnAccount(params)\n break\n }\n case 'email': {\n await this._createEmailAccount(params)\n break\n }\n }\n }\n\n private async _webauthnGenerateAttestation(email: string) {\n const challenge = LibBytes.generateRandomBuffer()\n const authenticatorUserId = LibBytes.generateRandomBuffer()\n\n const attestation = await getWebAuthnAttestation({\n publicKey: {\n authenticatorSelection: {\n residentKey: 'preferred',\n requireResidentKey: false,\n userVerification: 'preferred',\n },\n challenge,\n rp: {\n id: window.location.hostname,\n name: window.location.hostname,\n },\n pubKeyCredParams: [\n {\n type: 'public-key',\n alg: -7,\n },\n {\n type: 'public-key',\n alg: -257,\n },\n ],\n user: {\n id: authenticatorUserId,\n name: email,\n displayName: email,\n },\n },\n })\n\n return { challenge, attestation, authenticatorUserId }\n }\n\n private async _initIframeStamper() {\n if (!this._stampers.iframe.publicKey()) {\n await this._stampers.iframe.init()\n }\n\n this.stamper = this._stampers.iframe\n\n return this._stampers.iframe.publicKey()!\n }\n}\n\nexport { WebSignerClient }\nexport type {\n CompleteAuthWithBundleParams,\n CreateAccountParams,\n EmailInitializeAuthParams,\n GoogleOAuthSignInParams,\n WebauthnSignInParams,\n WebSignerClientConstructorParams,\n}\n","import { Buffer } from 'buffer'\n\nclass LibBase64 {\n static fromBuffer(buffer: ArrayBuffer): string {\n return Buffer.from(buffer)\n .toString('base64')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '')\n }\n\n static toBuffer(base64: string): ArrayBuffer {\n return Buffer.from(base64, 'base64')\n }\n}\n\nexport { LibBase64 }\n","type TakeBytesParams = Partial<{\n count: number\n offset: number\n}>\n\ntype ByteString = `0x${string}`\n\nclass LibBytes {\n static generateRandomBuffer = (): ArrayBuffer => {\n const arr = new Uint8Array(32)\n crypto.getRandomValues(arr)\n return arr.buffer\n }\n\n static takeBytes = (\n bytes: ByteString,\n params: TakeBytesParams = {},\n ): ByteString => {\n const { offset, count } = params\n const start = (offset ? offset * 2 : 0) + 2 // add 2 to skip the 0x prefix\n const end = count ? start + count * 2 : undefined\n\n return `0x${bytes.slice(start, end)}`\n }\n}\n\nexport { LibBytes }\n","import { TurnkeyClient } from '@turnkey/http'\nimport {\n BadRequestError,\n GenericError,\n NotFoundError,\n UnauthorizedError,\n} from '../errors/index.js'\nimport { SDKError } from '../errors/SDKError.js'\nimport { SessionStore } from '../session/index.js'\nimport { User } from '../types/entities.js'\nimport { APIResponse } from '../types/rest.js'\nimport {\n AuthenticationServiceBody,\n AuthenticationServiceResponse,\n AuthenticationServiceRoutes,\n ROUTE_METHOD_MAP,\n} from '../types/Routes.js'\nimport { jwtDecode, JwtPayload } from 'jwt-decode'\nimport { isPast, secondsToMilliseconds } from 'date-fns'\n\ntype SignerClientConfiguration = {\n apiKey: string\n apiUrl?: string\n paymasterRpcUrl?: string\n}\n\ntype SignerClientConstructorParams = {\n stamper: TurnkeyClient['stamper']\n configuration: SignerClientConfiguration\n}\n\ntype SignerClientInheritedConstructorParams<\n Extended extends Record<string, unknown>,\n> = Pick<SignerClientConstructorParams, 'configuration'> & Extended\n\nabstract class SignerClient {\n protected readonly _turnkeyClient: TurnkeyClient\n protected readonly _configuration: Required<\n SignerClientConstructorParams['configuration']\n >\n protected readonly _sessionStore: SessionStore\n\n private _user?: User\n\n constructor({\n stamper,\n configuration: { apiUrl, paymasterRpcUrl, ...requiredConfiguration },\n }: SignerClientConstructorParams) {\n this._turnkeyClient = new TurnkeyClient(\n { baseUrl: 'https://api.turnkey.com' },\n stamper,\n )\n\n this._configuration = {\n ...requiredConfiguration,\n apiUrl: apiUrl ?? 'https://auth.api.fourt.io/',\n paymasterRpcUrl: paymasterRpcUrl ?? 'https://management.api.fourt.io/',\n }\n\n this._sessionStore = new SessionStore()\n }\n\n logout() {\n this._user = undefined\n this.sessionStore.clearAll()\n }\n\n get configuration(): Required<SignerClientConfiguration> {\n return this._configuration\n }\n\n get user(): User | undefined {\n if (this._user) return this._user\n\n // Check if there's a token\n if (!this.sessionStore.token) {\n this.sessionStore.clearAll()\n return undefined\n }\n\n const decodedToken = jwtDecode<JwtPayload>(this.sessionStore.token)\n // Check if the token has expired\n if (\n decodedToken.exp &&\n isPast(new Date(secondsToMilliseconds(decodedToken.exp)))\n ) {\n this.sessionStore.clearAll()\n return undefined\n }\n\n if (this.sessionStore.user) this._user = this.sessionStore.user\n\n return this._user\n }\n\n protected set user(value: User | undefined) {\n this._user = value\n }\n\n protected set stamper(stamper: TurnkeyClient['stamper']) {\n this._turnkeyClient.stamper = stamper\n }\n\n protected get stamper(): TurnkeyClient['stamper'] {\n return this._turnkeyClient.stamper\n }\n\n protected get sessionStore(): SessionStore {\n return this._sessionStore\n }\n\n async signRawMessage<Into extends string>(msg: string): Promise<Into> {\n if (!this._user) {\n throw new UnauthorizedError({\n message: 'SignerClient must be authenticated to sign a message',\n })\n }\n\n const stampedRequest = await this._turnkeyClient.stampSignRawPayload({\n organizationId: this._user.subOrgId,\n type: 'ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2',\n timestampMs: Date.now().toString(),\n parameters: {\n encoding: 'PAYLOAD_ENCODING_HEXADECIMAL',\n hashFunction: 'HASH_FUNCTION_NO_OP',\n payload: msg,\n signWith: this._user.walletAddress,\n },\n })\n\n const { signature } = await this.request('/v1/sign', {\n stampedRequest,\n })\n\n return <Into>signature\n }\n\n protected async lookUpUser(email: string): Promise<string | null> {\n try {\n const { subOrgId } = await this.request('/v1/lookup', { email })\n return subOrgId\n } catch (error) {\n if (!(error instanceof SDKError)) throw error\n\n const sdkError: SDKError = error\n\n switch (sdkError.constructor.name) {\n case NotFoundError.name: {\n return null\n }\n default: {\n throw sdkError\n }\n }\n }\n }\n\n protected async whoAmI(subOrgId?: string) {\n const orgId = subOrgId || this._user?.subOrgId\n\n if (!orgId) throw new BadRequestError({ message: 'No orgId provided' })\n\n const stampedRequest = await this._turnkeyClient.stampGetWhoami({\n organizationId: orgId,\n })\n\n const { user, token } = await this.request('/v1/signin', {\n stampedRequest,\n })\n\n const credentialId = (() => {\n try {\n return JSON.parse(stampedRequest?.stamp.stampHeaderValue)\n .credentialId as string\n } catch (e) {\n return undefined\n }\n })()\n\n this._user = {\n ...user,\n credentialId: credentialId,\n }\n\n this.sessionStore.user = this.user!\n this.sessionStore.token = token\n }\n\n protected async request<Route extends AuthenticationServiceRoutes>(\n route: Route,\n body?: AuthenticationServiceBody<Route>,\n ): Promise<AuthenticationServiceResponse<Route>> {\n const url = new URL(`${route}`, this._configuration.apiUrl)\n const token = this.sessionStore.token\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'X-FOURT-KEY': this._configuration.apiKey,\n }\n\n // Add Authorization header if token exists\n if (token) {\n headers['Authorization'] = `Bearer ${token}`\n }\n\n const response = await fetch(url, {\n method: ROUTE_METHOD_MAP[route],\n body: JSON.stringify(body),\n headers,\n credentials: 'include',\n })\n\n const { data, error } = (await response.json()) as APIResponse<\n AuthenticationServiceResponse<Route>\n >\n\n if (error) {\n switch (error.kind) {\n case 'UnauthorizedError': {\n // TODO: workaround! this need to be cleaned up and moved into the web signer\n this.logout()\n throw new UnauthorizedError({ message: error.message })\n }\n case 'NotFoundError': {\n throw new NotFoundError({ message: error.message })\n }\n case 'BadRequestError': {\n throw new BadRequestError({ message: error.message })\n }\n default: {\n throw new GenericError({ message: error.message })\n }\n }\n }\n\n return { ...data } as AuthenticationServiceResponse<Route>\n }\n}\n\nexport { SignerClient }\nexport type {\n SignerClientConstructorParams,\n SignerClientInheritedConstructorParams,\n}\n","import { SDKErrorProps, SDKError } from './SDKError.js'\n\nclass UnauthorizedError extends SDKError {\n constructor(props: SDKErrorProps) {\n super(UnauthorizedError.name, props)\n }\n}\n\nexport { UnauthorizedError }\n","import { SDKErrorProps, SDKError } from './SDKError.js'\n\nclass NotFoundError extends SDKError {\n constructor(props: SDKErrorProps) {\n super(NotFoundError.name, props)\n }\n}\n\nexport { NotFoundError }\n","import { SDKErrorProps, SDKError } from './SDKError.js'\n\nclass GenericError extends SDKError {\n constructor(props: SDKErrorProps) {\n super(GenericError.name, props)\n }\n}\n\nexport { GenericError }\n","import { SDKErrorProps, SDKError } from './SDKError.js'\n\nclass UnauthenticatedError extends SDKError {\n constructor(props: SDKErrorProps) {\n super(UnauthenticatedError.name, props)\n }\n}\n\nexport { UnauthenticatedError }\n","import { getWebAuthnAttestation, TSignedRequest } from '@turnkey/http'\nimport { User } from './entities.js'\nimport { AtLeastOne } from './string.js'\n\ntype AuthenticationServiceRoutes =\n AuthenticationServiceEndpoints[number]['Route']\n\ntype AuthenticationServiceBody<Route extends AuthenticationServiceRoutes> =\n Extract<AuthenticationServiceEndpoints[number], { Route: Route }>['Body']\n\ntype AuthenticationServiceResponse<Route extends AuthenticationServiceRoutes> =\n Extract<AuthenticationServiceEndpoints[number], { Route: Route }>['Response']\n\ntype AuthenticationServiceEndpoints = [\n {\n Route: '/v1/email-auth'\n Body: {\n email: string\n targetPublicKey: string\n redirectUrl: string\n expirationSeconds?: number\n }\n Response: {\n subOrgId: string\n }\n },\n {\n Route: '/v1/signup'\n Body: AtLeastOne<{\n passkey: {\n challenge: string\n attestation: Awaited<ReturnType<typeof getWebAuthnAttestation>>\n }\n iframe: {\n targetPublicKey: string\n redirectUrl: string\n expirationSeconds?: number\n }\n }> & { email: string }\n Response: {\n user: User\n token: string\n }\n },\n {\n Route: '/v1/lookup'\n Body: {\n email: string\n }\n Response: {\n subOrgId: string\n }\n },\n {\n Route: '/v1/signin'\n Body: {\n stampedRequest: TSignedRequest\n }\n Response: {\n user: User\n token: string\n }\n },\n {\n Route: '/v1/sign'\n Body: {\n stampedRequest: TSignedRequest\n }\n Response: {\n signature: string\n }\n },\n]\n\nconst ROUTE_METHOD_MAP = {\n '/v1/signup': 'POST',\n '/v1/email-auth': 'POST',\n '/v1/lookup': 'POST',\n '/v1/signin': 'POST',\n '/v1/sign': 'POST',\n} satisfies Record<AuthenticationServiceRoutes, 'POST' | 'GET'>\n\nexport type {\n AuthenticationServiceEndpoints,\n AuthenticationServiceResponse,\n AuthenticationServiceBody,\n AuthenticationServiceRoutes,\n}\n\nexport { ROUTE_METHOD_MAP }\n","import {\n LocalAccount,\n TypedData,\n TypedDataDefinition,\n SignableMessage,\n Hex,\n hashMessage,\n hashTypedData,\n SerializeTransactionFn,\n TransactionSerializable,\n IsNarrowable,\n TransactionSerialized,\n GetTransactionType,\n serializeTransaction,\n keccak256,\n Client,\n hexToBigInt,\n http,\n} from 'viem'\nimport { toAccount } from 'viem/accounts'\nimport { SignerClient } from '../signer/index.js'\nimport { LibBytes } from '../lib/bytes.js'\nimport { toLightSmartAccount } from 'permissionless/accounts'\nimport {\n createPaymasterClient,\n entryPoint07Address,\n} from 'viem/account-abstraction'\nimport { UnauthenticatedError } from '../errors/UnauthenticatedError.js'\n\ntype ViemModuleConstructorParams = {\n refs: {\n signerClient: SignerClient\n }\n}\n\ntype CurrentUserToLightSmartAccountParams = {\n owner: LocalAccount\n client: Client\n}\n\nclass ViemModule {\n constructor(private readonly _signerClient: SignerClient) {}\n\n async toLocalAccount(): Promise<LocalAccount> {\n const user = this._signerClient.user\n\n if (!user) {\n throw new UnauthenticatedError({ message: 'Signer not authenticated' })\n }\n\n return toAccount({\n address: user.walletAddress,\n signMessage: (msg) => this.signMessage(msg.message),\n signTypedData: <\n const typedData extends TypedData | Record<string, unknown>,\n primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,\n >(\n typedDataDefinition: TypedDataDefinition<typedData, primaryType>,\n ) => this.signTypedData<typedData, primaryType>(typedDataDefinition),\n signTransaction: this.signTransaction,\n })\n }\n\n async toSmartAccount({\n client,\n owner,\n }: CurrentUserToLightSmartAccountParams): ReturnType<\n typeof toLightSmartAccount<'0.7'>\n > {\n const user = this._signerClient.user\n\n if (!user) {\n throw new UnauthenticatedError({ message: 'Signer not authenticated' })\n }\n\n return toLightSmartAccount({\n client: client,\n owner,\n version: '2.0.0',\n entryPoint: {\n address: entryPoint07Address,\n version: '0.7',\n },\n address: user.smartAccountAddress,\n index: hexToBigInt(user.salt),\n })\n }\n\n async getPaymasterClient() {\n const url = new URL(\n `v1/rpc?apiKey=${this._signerClient.configuration.apiKey}`,\n this._signerClient.configuration.paymasterRpcUrl,\n )\n return createPaymasterClient({\n transport: http(url.toString()),\n })\n }\n\n async signMessage(msg: SignableMessage): Promise<Hex> {\n const messageHash = hashMessage(msg)\n const result = await this._signerClient.signRawMessage<Hex>(messageHash)\n return result\n }\n\n async signTypedData<\n TTypedData extends TypedData | Record<string, unknown>,\n TPrimaryType extends keyof TTypedData | 'EIP712Domain' = keyof TTypedData,\n >(params: TypedDataDefinition<TTypedData, TPrimaryType>): Promise<Hex> {\n const messageHash = hashTypedData(params)\n return this._signerClient.signRawMessage(messageHash)\n }\n\n async signTransaction<\n serializer extends SerializeTransactionFn<TransactionSerializable> = SerializeTransactionFn<TransactionSerializable>,\n transaction extends Parameters<serializer>[0] = Parameters<serializer>[0],\n >(\n transaction: transaction,\n options?:\n | {\n serializer?: serializer | undefined\n }\n | undefined,\n ): Promise<\n IsNarrowable<\n TransactionSerialized<GetTransactionType<transaction>>,\n Hex\n > extends true\n ? TransactionSerialized<GetTransactionType<transaction>>\n : Hex\n > {\n const serializeFn = options?.serializer ?? serializeTransaction\n const serializedTx = serializeFn(transaction)\n const signatureHex = await this._signerClient.signRawMessage<Hex>(\n keccak256(serializedTx),\n )\n\n const signature = {\n r: LibBytes.takeBytes(signatureHex, { count: 32 }),\n s: LibBytes.takeBytes(signatureHex, { count: 32, offset: 32 }),\n v: BigInt(LibBytes.takeBytes(signatureHex, { count: 1, offset: 64 })),\n }\n\n return serializeFn(transaction, signature)\n }\n}\n\nexport { ViemModule }\n","import { AuthModule, UserModule } from './modules/index.js'\nimport { SignerClientConstructorParams } from './signer/index.js'\nimport {\n WebSignerClient,\n WebSignerClientConstructorParams,\n} from './signer/web.js'\nimport { ViemModule } from './third-party/viem.js'\n\ntype FourtWebSignerConstructorParams = {\n configuration: SignerClientConstructorParams['configuration']\n auth: Pick<WebSignerClientConstructorParams, 'webauthn' | 'iframe' | 'oauth'>\n}\n\n/**\n * A client for interacting with the Fourt Web Signer.\n */\nclass FourtWebSigner {\n private readonly _webSignerClient: WebSignerClient\n private readonly _modules: {\n viem: ViemModule\n auth: AuthModule\n user: UserModule\n }\n\n /**\n * Initializes a new instance of the `FourtWebSigner` class.\n * Sets up the underlying modules.\n *\n *\n * @example\n * ```ts\n * const fourtWebSigner = new FourtWebSigner({\n * auth: {\n * webauthn: {\n * rpId: 'localhost',\n * },\n * },\n * configuration: {\n * apiKey: '927d603c-6775-4210-8e13-8904ca985e78',\n * },\n * })\n * ```\n *\n * @param {FourtWebSignerConstructorParams} params the required parameters to initialize the client\n */\n constructor({\n configuration,\n auth: { webauthn, iframe, oauth },\n }: FourtWebSignerConstructorParams) {\n this._webSignerClient = new WebSignerClient({\n configuration,\n webauthn,\n iframe,\n oauth,\n })\n\n this._modules = {\n viem: new ViemModule(this._webSignerClient),\n auth: new AuthModule(this._webSignerClient),\n user: new UserModule(this._webSignerClient),\n }\n }\n\n /**\n * A module for interacting with the Viem library.\n */\n get viem() {\n return this._modules.viem\n }\n\n /**\n * A module for interacting with the authentication methods.\n */\n get auth() {\n return this._modules.auth\n }\n\n /**\n * A module for interacting with the user methods.\n */\n get user() {\n return this._modules.user\n }\n}\n\nexport { FourtWebSigner }\n"],"mappings":"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","names":["jose","jose","sha256","sha256"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fourt/sdk",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "TypeScript SDK for interacting with Fourt.io",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -26,11 +26,6 @@
|
|
|
26
26
|
"publishConfig": {
|
|
27
27
|
"access": "public"
|
|
28
28
|
},
|
|
29
|
-
"scripts": {
|
|
30
|
-
"build": "tsup src/index.ts src/types/index.ts --format cjs,esm --dts --clean --sourcemap",
|
|
31
|
-
"compile": "tsc --noEmit",
|
|
32
|
-
"prepublish": "pnpm build"
|
|
33
|
-
},
|
|
34
29
|
"keywords": [
|
|
35
30
|
"web3",
|
|
36
31
|
"authentication",
|
|
@@ -40,6 +35,7 @@
|
|
|
40
35
|
"license": "ISC",
|
|
41
36
|
"devDependencies": {
|
|
42
37
|
"@types/node": "^22.8.1",
|
|
38
|
+
"@types/sha.js": "^2.4.4",
|
|
43
39
|
"tsup": "^8.3.5",
|
|
44
40
|
"typescript": "^5.6.3"
|
|
45
41
|
},
|
|
@@ -50,10 +46,16 @@
|
|
|
50
46
|
"@turnkey/webauthn-stamper": "^0.4.3",
|
|
51
47
|
"buffer": "^6.0.3",
|
|
52
48
|
"date-fns": "^4.1.0",
|
|
49
|
+
"jose": "^5.9.6",
|
|
53
50
|
"jwt-decode": "^4.0.0",
|
|
54
51
|
"permissionless": "^0.2.17",
|
|
52
|
+
"sha.js": "^2.4.11",
|
|
55
53
|
"viem": "2.21.22",
|
|
56
54
|
"zustand": "^5.0.1"
|
|
57
55
|
},
|
|
58
|
-
"
|
|
59
|
-
|
|
56
|
+
"scripts": {
|
|
57
|
+
"build": "tsup src/index.ts src/types/index.ts --format cjs,esm --dts --clean --sourcemap",
|
|
58
|
+
"compile": "tsc --noEmit",
|
|
59
|
+
"prepublish": "pnpm build"
|
|
60
|
+
}
|
|
61
|
+
}
|