UNPKG

@microfox/fillout-oauth

Version:

TypeScript OAuth package for Fillout

1 lines 5.6 kB
{"version":3,"sources":["../src/schemas/index.ts","../src/filloutOAuthSdk.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const filloutOAuthConfigSchema = z.object({\n clientId: z.string().describe('The client ID for your Fillout application'),\n clientSecret: z.string().describe('The client secret for your Fillout application'),\n redirectUri: z.string().url().describe('The redirect URI for your Fillout application'),\n});\n\nexport const accessTokenResponseSchema = z.object({\n access_token: z.string().describe('The access token for authenticating API requests'),\n base_url: z.string().url().describe('The base URL for the Fillout API'),\n});\n\nexport const authorizationCodeParamsSchema = z.object({\n code: z.string().describe('The authorization code received from the authorization endpoint'),\n});\n\nexport const tokenRequestParamsSchema = z.object({\n code: z.string().describe('The authorization code received from the authorization endpoint'),\n client_id: z.string().describe('The client ID for your Fillout application'),\n client_secret: z.string().describe('The client secret for your Fillout application'),\n redirect_uri: z.string().url().describe('The redirect URI for your Fillout application'),\n});\n","import { z } from 'zod';\nimport { FilloutOAuthConfig, AccessTokenResponse, AuthorizationCodeParams, TokenRequestParams } from './types';\nimport { filloutOAuthConfigSchema, accessTokenResponseSchema } from './schemas';\n\nexport class FilloutOAuthSdk {\n private config: FilloutOAuthConfig;\n\n constructor(config: FilloutOAuthConfig) {\n this.config = filloutOAuthConfigSchema.parse(config);\n }\n\n /**\n * Generates the authorization URL for the OAuth flow.\n * @param state An optional state parameter for CSRF protection\n * @returns The authorization URL\n */\n getAuthorizationUrl(state?: string): string {\n const params = new URLSearchParams({\n client_id: this.config.clientId,\n redirect_uri: this.config.redirectUri,\n });\n\n if (state) {\n params.append('state', state);\n }\n\n return `https://build.fillout.com/authorize/oauth?${params.toString()}`;\n }\n\n /**\n * Exchanges an authorization code for an access token.\n * @param params The parameters required for the token request\n * @returns The access token response\n */\n async getAccessToken(params: AuthorizationCodeParams): Promise<AccessTokenResponse> {\n const tokenParams: TokenRequestParams = {\n code: params.code,\n client_id: this.config.clientId,\n client_secret: this.config.clientSecret,\n redirect_uri: this.config.redirectUri,\n };\n\n const response = await fetch('https://server.fillout.com/public/oauth/accessToken', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(tokenParams),\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const data = await response.json();\n return accessTokenResponseSchema.parse(data);\n }\n\n /**\n * Validates the access token by making a request to the Fillout API.\n * @param accessToken The access token to validate\n * @returns A boolean indicating whether the token is valid\n */\n async validateAccessToken(accessToken: string): Promise<boolean> {\n try {\n const response = await fetch('https://api.fillout.com/v1/api/me', {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n });\n\n return response.ok;\n } catch (error) {\n console.error('Error validating access token:', error);\n return false;\n }\n }\n}\n\nexport function createFilloutOAuth(config: FilloutOAuthConfig): FilloutOAuthSdk {\n return new FilloutOAuthSdk(config);\n}\n"],"mappings":";AAAA,SAAS,SAAS;AAEX,IAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,UAAU,EAAE,OAAO,EAAE,SAAS,4CAA4C;AAAA,EAC1E,cAAc,EAAE,OAAO,EAAE,SAAS,gDAAgD;AAAA,EAClF,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,+CAA+C;AACxF,CAAC;AAEM,IAAM,4BAA4B,EAAE,OAAO;AAAA,EAChD,cAAc,EAAE,OAAO,EAAE,SAAS,kDAAkD;AAAA,EACpF,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,kCAAkC;AACxE,CAAC;AAEM,IAAM,gCAAgC,EAAE,OAAO;AAAA,EACpD,MAAM,EAAE,OAAO,EAAE,SAAS,iEAAiE;AAC7F,CAAC;AAEM,IAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,MAAM,EAAE,OAAO,EAAE,SAAS,iEAAiE;AAAA,EAC3F,WAAW,EAAE,OAAO,EAAE,SAAS,4CAA4C;AAAA,EAC3E,eAAe,EAAE,OAAO,EAAE,SAAS,gDAAgD;AAAA,EACnF,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,+CAA+C;AACzF,CAAC;;;AClBM,IAAM,kBAAN,MAAsB;AAAA,EAG3B,YAAY,QAA4B;AACtC,SAAK,SAAS,yBAAyB,MAAM,MAAM;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAoB,OAAwB;AAC1C,UAAM,SAAS,IAAI,gBAAgB;AAAA,MACjC,WAAW,KAAK,OAAO;AAAA,MACvB,cAAc,KAAK,OAAO;AAAA,IAC5B,CAAC;AAED,QAAI,OAAO;AACT,aAAO,OAAO,SAAS,KAAK;AAAA,IAC9B;AAEA,WAAO,6CAA6C,OAAO,SAAS,CAAC;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,eAAe,QAA+D;AAClF,UAAM,cAAkC;AAAA,MACtC,MAAM,OAAO;AAAA,MACb,WAAW,KAAK,OAAO;AAAA,MACvB,eAAe,KAAK,OAAO;AAAA,MAC3B,cAAc,KAAK,OAAO;AAAA,IAC5B;AAEA,UAAM,WAAW,MAAM,MAAM,uDAAuD;AAAA,MAClF,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,MAClB;AAAA,MACA,MAAM,KAAK,UAAU,WAAW;AAAA,IAClC,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,MAAM,uBAAuB,SAAS,MAAM,EAAE;AAAA,IAC1D;AAEA,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,WAAO,0BAA0B,MAAM,IAAI;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,oBAAoB,aAAuC;AAC/D,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,qCAAqC;AAAA,QAChE,SAAS;AAAA,UACP,eAAe,UAAU,WAAW;AAAA,QACtC;AAAA,MACF,CAAC;AAED,aAAO,SAAS;AAAA,IAClB,SAAS,OAAO;AACd,cAAQ,MAAM,kCAAkC,KAAK;AACrD,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEO,SAAS,mBAAmB,QAA6C;AAC9E,SAAO,IAAI,gBAAgB,MAAM;AACnC;","names":[]}