@adonisjs/ally
Version:
Social authentication provider for AdonisJS
228 lines (223 loc) • 7.65 kB
JavaScript
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
};