UNPKG

@adonisjs/ally

Version:

Social authentication provider for AdonisJS

228 lines (223 loc) 7.65 kB
import { Oauth1Driver } from "./chunk-STBND7WI.js"; import { AllyManager } from "./chunk-ISWHUP4Q.js"; import { Oauth2Driver } from "./chunk-EXGR73T6.js"; import { RedirectRequest } from "./chunk-NK6X76EQ.js"; import { errors_exports } from "./chunk-TSIMPJ6I.js"; // index.ts import { HttpClient } from "@poppinss/oauth-client"; // stubs/main.ts var stubsRoot = import.meta.dirname; // configure.ts var AVAILABLE_PROVIDERS = [ { name: "discord", configKey: "discord", message: "Discord", envPrefix: "DISCORD" }, { name: "facebook", configKey: "facebook", message: "Facebook", envPrefix: "FACEBOOK" }, { name: "github", configKey: "github", message: "GitHub", envPrefix: "GITHUB" }, { name: "google", configKey: "google", message: "Google", envPrefix: "GOOGLE" }, { name: "linkedin", configKey: "linkedin", message: "LinkedIn", envPrefix: "LINKEDIN" }, { name: "linkedinOpenidConnect", configKey: "linkedin", message: "LinkedIn (OpenID Connect)", envPrefix: "LINKEDIN_OC" }, { name: "spotify", configKey: "spotify", message: "Spotify", envPrefix: "SPOTIFY" }, { name: "twitter", configKey: "twitter", message: "Twitter", envPrefix: "TWITTER" }, { name: "twitterX", configKey: "x", message: "Twitter X (OAuth2)", envPrefix: "TWITTER_X" } ]; async function configure(command) { let selectedProviders = command.parsedFlags.providers; if (!selectedProviders) { selectedProviders = await command.prompt.multiple( "Select the social auth providers you plan to use", AVAILABLE_PROVIDERS, { validate(value) { return !value || !value.length ? "Select a social provider to configure the package" : true; } } ); } const providerNames = typeof selectedProviders === "string" ? [selectedProviders] : selectedProviders; const unknownProvider = providerNames.find( (name) => !AVAILABLE_PROVIDERS.some((p) => p.name === name) ); if (unknownProvider) { command.exitCode = 1; command.logger.error(`Invalid social provider "${unknownProvider}"`); return; } const providers = providerNames.map((name) => AVAILABLE_PROVIDERS.find((p) => p.name === name)); const codemods = await command.createCodemods(); await codemods.makeUsingStub(stubsRoot, "config/ally.stub", { providers: providers.map((provider) => { return { name: provider.configKey, provider: provider.name, envPrefix: provider.envPrefix }; }) }); await codemods.updateRcFile((rcFile) => { rcFile.addProvider("@adonisjs/ally/ally_provider"); }); await codemods.defineEnvVariables( providers.reduce((result, provider) => { result[`${provider.envPrefix}_CLIENT_ID`] = "placeholder"; result[`${provider.envPrefix}_CLIENT_SECRET`] = "placeholder"; return result; }, {}) ); await codemods.defineEnvValidations({ variables: providers.reduce((result, provider) => { result[`${provider.envPrefix}_CLIENT_ID`] = "Env.schema.string()"; result[`${provider.envPrefix}_CLIENT_SECRET`] = "Env.schema.string()"; return result; }, {}), leadingComment: "Variables for configuring ally package" }); } // src/define_config.ts import { configProvider } from "@adonisjs/core"; function defineConfig(config) { return configProvider.create(async (app) => { const serviceNames = Object.keys(config); const services2 = {}; for (let serviceName of serviceNames) { const service = config[serviceName]; if (typeof service === "function") { services2[serviceName] = service; } else { services2[serviceName] = await service.resolver(app); } } return services2; }); } var services = { /** * Create a config provider for the Discord OAuth2 driver. * * @param config - Discord driver configuration. * @returns A lazily resolved config provider for the Discord driver. */ discord(config) { return configProvider.create(async () => { const { DiscordDriver } = await import("./src/drivers/discord.js"); return (ctx) => new DiscordDriver(ctx, config); }); }, /** * Create a config provider for the Facebook OAuth2 driver. * * @param config - Facebook driver configuration. * @returns A lazily resolved config provider for the Facebook driver. */ facebook(config) { return configProvider.create(async () => { const { FacebookDriver } = await import("./src/drivers/facebook.js"); return (ctx) => new FacebookDriver(ctx, config); }); }, /** * Create a config provider for the GitHub OAuth2 driver. * * @param config - GitHub driver configuration. * @returns A lazily resolved config provider for the GitHub driver. */ github(config) { return configProvider.create(async () => { const { GithubDriver } = await import("./src/drivers/github.js"); return (ctx) => new GithubDriver(ctx, config); }); }, /** * Create a config provider for the Google OAuth2 driver. * * @param config - Google driver configuration. * @returns A lazily resolved config provider for the Google driver. */ google(config) { return configProvider.create(async () => { const { GoogleDriver } = await import("./src/drivers/google.js"); return (ctx) => new GoogleDriver(ctx, config); }); }, /** * Create a config provider for the LinkedIn OAuth2 driver. * * @param config - LinkedIn driver configuration. * @returns A lazily resolved config provider for the LinkedIn driver. */ linkedin(config) { return configProvider.create(async () => { const { LinkedInDriver } = await import("./src/drivers/linked_in.js"); return (ctx) => new LinkedInDriver(ctx, config); }); }, /** * Create a config provider for the LinkedIn OpenID Connect driver. * * @param config - LinkedIn OpenID Connect driver configuration. * @returns A lazily resolved config provider for the LinkedIn OpenID Connect driver. */ linkedinOpenidConnect(config) { return configProvider.create(async () => { const { LinkedInOpenidConnectDriver } = await import("./src/drivers/linked_in_openid_connect.js"); return (ctx) => new LinkedInOpenidConnectDriver(ctx, config); }); }, /** * Create a config provider for the Spotify OAuth2 driver. * * @param config - Spotify driver configuration. * @returns A lazily resolved config provider for the Spotify driver. */ spotify(config) { return configProvider.create(async () => { const { SpotifyDriver } = await import("./src/drivers/spotify.js"); return (ctx) => new SpotifyDriver(ctx, config); }); }, /** * Create a config provider for the Twitter OAuth1 driver. * * @param config - Twitter driver configuration. * @returns A lazily resolved config provider for the Twitter driver. */ twitter(config) { return configProvider.create(async () => { const { TwitterDriver } = await import("./src/drivers/twitter.js"); return (ctx) => new TwitterDriver(ctx, config); }); }, /** * Create a config provider for the X OAuth2 driver. * * @param config - X driver configuration. * @returns A lazily resolved config provider for the X driver. */ twitterX(config) { return configProvider.create(async () => { const { TwitterXDriver } = await import("./src/drivers/twitter_x.js"); return (ctx) => new TwitterXDriver(ctx, config); }); } }; export { AllyManager, HttpClient as ApiRequest, Oauth1Driver, Oauth2Driver, RedirectRequest, configure, defineConfig, errors_exports as errors, services, stubsRoot };