@adonisjs/ally 5.0.2 → 5.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/README.md +1 -1
- package/build/{chunk-OSVNBZ7V.js → chunk-GWAQFMNS.js} +2 -2
- package/build/{chunk-UF7PETXM.js → chunk-N72DEJC2.js} +2 -2
- package/build/{chunk-CSAU5B4Q.js → chunk-PZ5AY32C.js} +1 -1
- package/build/{chunk-Y3GA4Y2H.js → chunk-VHORNQLN.js} +2 -2
- package/build/index.js +11 -4
- package/build/index.js.map +1 -1
- package/build/providers/ally_provider.js +1 -1
- package/build/src/debug.d.ts +0 -1
- package/build/src/define_config.d.ts +3 -1
- package/build/src/drivers/discord.js +5 -4
- package/build/src/drivers/discord.js.map +1 -1
- package/build/src/drivers/facebook.js +3 -3
- package/build/src/drivers/github.d.ts +4 -4
- package/build/src/drivers/github.js +4 -4
- package/build/src/drivers/github.js.map +1 -1
- package/build/src/drivers/google.js +3 -3
- package/build/src/drivers/linked_in.js +3 -3
- package/build/src/drivers/linked_in_openid_connect.d.ts +97 -0
- package/build/src/drivers/linked_in_openid_connect.js +115 -0
- package/build/src/drivers/linked_in_openid_connect.js.map +1 -0
- package/build/src/drivers/spotify.js +3 -3
- package/build/src/drivers/twitter.js +3 -3
- package/build/src/errors.d.ts +2 -2
- package/build/src/types.d.ts +35 -0
- package/package.json +65 -47
- /package/build/{chunk-OSVNBZ7V.js.map → chunk-GWAQFMNS.js.map} +0 -0
- /package/build/{chunk-UF7PETXM.js.map → chunk-N72DEJC2.js.map} +0 -0
- /package/build/{chunk-CSAU5B4Q.js.map → chunk-PZ5AY32C.js.map} +0 -0
- /package/build/{chunk-Y3GA4Y2H.js.map → chunk-VHORNQLN.js.map} +0 -0
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
Social authentication provider for AdonisJS. Supports **Github**, **Google**, **Twitter**, **Facebook**, **Discord**, **Spotify**, and **LinkedIn**.
|
|
9
9
|
|
|
10
10
|
## Official Documentation
|
|
11
|
-
The documentation is available on the [AdonisJS website](https://docs.adonisjs.com/guides/
|
|
11
|
+
The documentation is available on the [AdonisJS website](https://docs.adonisjs.com/guides/social-auth)
|
|
12
12
|
|
|
13
13
|
## Contributing
|
|
14
14
|
One of the primary goals of AdonisJS is to have a vibrant community of users and contributors who believes in the principles of the framework.
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
E_OAUTH_MISSING_CODE,
|
|
3
3
|
E_OAUTH_STATE_MISMATCH,
|
|
4
4
|
RedirectRequest
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-N72DEJC2.js";
|
|
6
6
|
|
|
7
7
|
// src/abstract_drivers/oauth2.ts
|
|
8
8
|
import { Exception } from "@poppinss/utils";
|
|
@@ -161,4 +161,4 @@ var Oauth2Driver = class extends Oauth2Client {
|
|
|
161
161
|
export {
|
|
162
162
|
Oauth2Driver
|
|
163
163
|
};
|
|
164
|
-
//# sourceMappingURL=chunk-
|
|
164
|
+
//# sourceMappingURL=chunk-GWAQFMNS.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
__export
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-PZ5AY32C.js";
|
|
4
4
|
|
|
5
5
|
// src/errors.ts
|
|
6
6
|
var errors_exports = {};
|
|
@@ -80,4 +80,4 @@ export {
|
|
|
80
80
|
errors_exports,
|
|
81
81
|
RedirectRequest
|
|
82
82
|
};
|
|
83
|
-
//# sourceMappingURL=chunk-
|
|
83
|
+
//# sourceMappingURL=chunk-N72DEJC2.js.map
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
E_OAUTH_MISSING_CODE,
|
|
3
3
|
E_OAUTH_STATE_MISMATCH,
|
|
4
4
|
RedirectRequest
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-N72DEJC2.js";
|
|
6
6
|
|
|
7
7
|
// src/abstract_drivers/oauth1.ts
|
|
8
8
|
import { Exception } from "@poppinss/utils";
|
|
@@ -167,4 +167,4 @@ var Oauth1Driver = class extends Oauth1Client {
|
|
|
167
167
|
export {
|
|
168
168
|
Oauth1Driver
|
|
169
169
|
};
|
|
170
|
-
//# sourceMappingURL=chunk-
|
|
170
|
+
//# sourceMappingURL=chunk-VHORNQLN.js.map
|
package/build/index.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Oauth1Driver
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-VHORNQLN.js";
|
|
4
4
|
import {
|
|
5
5
|
AllyManager
|
|
6
6
|
} from "./chunk-NZT2DLWM.js";
|
|
7
7
|
import {
|
|
8
8
|
Oauth2Driver
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-GWAQFMNS.js";
|
|
10
10
|
import {
|
|
11
11
|
RedirectRequest,
|
|
12
12
|
errors_exports
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import "./chunk-
|
|
13
|
+
} from "./chunk-N72DEJC2.js";
|
|
14
|
+
import "./chunk-PZ5AY32C.js";
|
|
15
15
|
|
|
16
16
|
// index.ts
|
|
17
17
|
import { HttpClient } from "@poppinss/oauth-client";
|
|
@@ -27,6 +27,7 @@ var AVAILABLE_PROVIDERS = [
|
|
|
27
27
|
"github",
|
|
28
28
|
"google",
|
|
29
29
|
"linkedin",
|
|
30
|
+
"linkedinOpenidConnect",
|
|
30
31
|
"spotify",
|
|
31
32
|
"twitter"
|
|
32
33
|
];
|
|
@@ -124,6 +125,12 @@ var services = {
|
|
|
124
125
|
return (ctx) => new LinkedInDriver(ctx, config);
|
|
125
126
|
});
|
|
126
127
|
},
|
|
128
|
+
linkedinOpenidConnect(config) {
|
|
129
|
+
return configProvider.create(async () => {
|
|
130
|
+
const { LinkedInOpenidConnectDriver } = await import("./src/drivers/linked_in_openid_connect.js");
|
|
131
|
+
return (ctx) => new LinkedInOpenidConnectDriver(ctx, config);
|
|
132
|
+
});
|
|
133
|
+
},
|
|
127
134
|
spotify(config) {
|
|
128
135
|
return configProvider.create(async () => {
|
|
129
136
|
const { SpotifyDriver } = await import("./src/drivers/spotify.js");
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../index.ts","../stubs/main.ts","../configure.ts","../src/define_config.ts"],"sourcesContent":["/*\n * @adonisjs/ally\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nexport { HttpClient as ApiRequest } from '@poppinss/oauth-client'\n\nexport * as errors from './src/errors.js'\nexport { configure } from './configure.js'\nexport { stubsRoot } from './stubs/main.js'\nexport { AllyManager } from './src/ally_manager.js'\nexport { defineConfig, services } from './src/define_config.js'\n\nexport { RedirectRequest } from './src/redirect_request.js'\nexport { Oauth1Driver } from './src/abstract_drivers/oauth1.js'\nexport { Oauth2Driver } from './src/abstract_drivers/oauth2.js'\n","/*\n * @adonisjs/ally\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport { getDirname } from '@poppinss/utils'\n\nexport const stubsRoot = getDirname(import.meta.url)\n","/*\n * @adonisjs/ally\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport type Configure from '@adonisjs/core/commands/configure'\nimport { stubsRoot } from './stubs/main.js'\n\n/**\n * List of available providers\n */\nconst AVAILABLE_PROVIDERS = [\n 'discord',\n 'facebook',\n 'github',\n 'google',\n 'linkedin',\n 'spotify',\n 'twitter',\n]\n\n/**\n * Configures the package\n */\nexport async function configure(command: Configure) {\n /**\n * Read providers from the CLI flags\n */\n let selectedProviders: string[] | string | undefined = command.parsedFlags.providers\n\n /**\n * Otherwise force prompt for selection\n */\n if (!selectedProviders) {\n selectedProviders = await command.prompt.multiple(\n 'Select the social auth providers you plan to use',\n AVAILABLE_PROVIDERS,\n {\n validate(value) {\n return !value || !value.length\n ? 'Select a social provider to configure the package'\n : true\n },\n }\n )\n }\n\n /**\n * Cast CLI string value to an array\n */\n let providers = (\n typeof selectedProviders === 'string' ? [selectedProviders] : selectedProviders\n ) as string[]\n\n /**\n * Validate CLI selection to contain known providers\n */\n const unknownProvider = providers.find((provider) => !AVAILABLE_PROVIDERS.includes(provider))\n if (unknownProvider) {\n command.exitCode = 1\n command.logger.error(`Invalid social provider \"${unknownProvider}\"`)\n return\n }\n\n const codemods = await command.createCodemods()\n\n /**\n * Publish config file\n */\n await codemods.makeUsingStub(stubsRoot, 'config/ally.stub', {\n providers: providers.map((provider) => {\n return { provider, envPrefix: provider.toUpperCase() }\n }),\n })\n\n /**\n * Publish provider\n */\n await codemods.updateRcFile((rcFile) => {\n rcFile.addProvider('@adonisjs/ally/ally_provider')\n })\n\n /**\n * Define env variables for the selected providers\n */\n await codemods.defineEnvVariables(\n providers.reduce<Record<string, string>>((result, provider) => {\n result[`${provider.toUpperCase()}_CLIENT_ID`] = ''\n result[`${provider.toUpperCase()}_CLIENT_SECRET`] = ''\n return result\n }, {})\n )\n\n /**\n * Define env variables validation for the selected providers\n */\n await codemods.defineEnvValidations({\n variables: providers.reduce<Record<string, string>>((result, provider) => {\n result[`${provider.toUpperCase()}_CLIENT_ID`] = 'Env.schema.string()'\n result[`${provider.toUpperCase()}_CLIENT_SECRET`] = 'Env.schema.string()'\n return result\n }, {}),\n leadingComment: 'Variables for configuring ally package',\n })\n}\n","/*\n * @adonisjs/ally\n *\n * (c) Ally\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport { configProvider } from '@adonisjs/core'\nimport type { HttpContext } from '@adonisjs/core/http'\nimport type { ConfigProvider } from '@adonisjs/core/types'\n\nimport type { GoogleDriver } from './drivers/google.js'\nimport type { GithubDriver } from './drivers/github.js'\nimport type { SpotifyDriver } from './drivers/spotify.js'\nimport type { TwitterDriver } from './drivers/twitter.js'\nimport type { DiscordDriver } from './drivers/discord.js'\nimport type { FacebookDriver } from './drivers/facebook.js'\nimport type { LinkedInDriver } from './drivers/linked_in.js'\nimport type {\n GoogleDriverConfig,\n GithubDriverConfig,\n SpotifyDriverConfig,\n DiscordDriverConfig,\n TwitterDriverConfig,\n LinkedInDriverConfig,\n FacebookDriverConfig,\n AllyManagerDriverFactory,\n} from './types.js'\n\n/**\n * Shape of config after it has been resolved from\n * the config provider\n */\ntype ResolvedConfig<\n KnownSocialProviders extends Record<\n string,\n AllyManagerDriverFactory | ConfigProvider<AllyManagerDriverFactory>\n >,\n> = {\n [K in keyof KnownSocialProviders]: KnownSocialProviders[K] extends ConfigProvider<infer A>\n ? A\n : KnownSocialProviders[K]\n}\n\n/**\n * Define config for the ally\n */\nexport function defineConfig<\n KnownSocialProviders extends Record<\n string,\n AllyManagerDriverFactory | ConfigProvider<AllyManagerDriverFactory>\n >,\n>(config: KnownSocialProviders): ConfigProvider<ResolvedConfig<KnownSocialProviders>> {\n return configProvider.create(async (app) => {\n const serviceNames = Object.keys(config)\n const services = {} as Record<string, AllyManagerDriverFactory>\n\n for (let serviceName of serviceNames) {\n const service = config[serviceName]\n if (typeof service === 'function') {\n services[serviceName] = service\n } else {\n services[serviceName] = await service.resolver(app)\n }\n }\n\n return services as ResolvedConfig<KnownSocialProviders>\n })\n}\n\n/**\n * Helpers to configure social auth services\n */\nexport const services: {\n discord: (config: DiscordDriverConfig) => ConfigProvider<(ctx: HttpContext) => DiscordDriver>\n facebook: (config: FacebookDriverConfig) => ConfigProvider<(ctx: HttpContext) => FacebookDriver>\n github: (config: GithubDriverConfig) => ConfigProvider<(ctx: HttpContext) => GithubDriver>\n google: (config: GoogleDriverConfig) => ConfigProvider<(ctx: HttpContext) => GoogleDriver>\n linkedin: (config: LinkedInDriverConfig) => ConfigProvider<(ctx: HttpContext) => LinkedInDriver>\n spotify: (config: SpotifyDriverConfig) => ConfigProvider<(ctx: HttpContext) => SpotifyDriver>\n twitter: (config: TwitterDriverConfig) => ConfigProvider<(ctx: HttpContext) => TwitterDriver>\n} = {\n discord(config) {\n return configProvider.create(async () => {\n const { DiscordDriver } = await import('./drivers/discord.js')\n return (ctx) => new DiscordDriver(ctx, config)\n })\n },\n facebook(config) {\n return configProvider.create(async () => {\n const { FacebookDriver } = await import('./drivers/facebook.js')\n return (ctx) => new FacebookDriver(ctx, config)\n })\n },\n github(config) {\n return configProvider.create(async () => {\n const { GithubDriver } = await import('./drivers/github.js')\n return (ctx) => new GithubDriver(ctx, config)\n })\n },\n google(config) {\n return configProvider.create(async () => {\n const { GoogleDriver } = await import('./drivers/google.js')\n return (ctx) => new GoogleDriver(ctx, config)\n })\n },\n linkedin(config) {\n return configProvider.create(async () => {\n const { LinkedInDriver } = await import('./drivers/linked_in.js')\n return (ctx) => new LinkedInDriver(ctx, config)\n })\n },\n spotify(config) {\n return configProvider.create(async () => {\n const { SpotifyDriver } = await import('./drivers/spotify.js')\n return (ctx) => new SpotifyDriver(ctx, config)\n })\n },\n twitter(config) {\n return configProvider.create(async () => {\n const { TwitterDriver } = await import('./drivers/twitter.js')\n return (ctx) => new TwitterDriver(ctx, config)\n })\n },\n}\n"],"mappings":"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","names":["services"]}
|
|
1
|
+
{"version":3,"sources":["../index.ts","../stubs/main.ts","../configure.ts","../src/define_config.ts"],"sourcesContent":["/*\n * @adonisjs/ally\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nexport { HttpClient as ApiRequest } from '@poppinss/oauth-client'\n\nexport * as errors from './src/errors.js'\nexport { configure } from './configure.js'\nexport { stubsRoot } from './stubs/main.js'\nexport { AllyManager } from './src/ally_manager.js'\nexport { defineConfig, services } from './src/define_config.js'\n\nexport { RedirectRequest } from './src/redirect_request.js'\nexport { Oauth1Driver } from './src/abstract_drivers/oauth1.js'\nexport { Oauth2Driver } from './src/abstract_drivers/oauth2.js'\n","/*\n * @adonisjs/ally\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport { getDirname } from '@poppinss/utils'\n\nexport const stubsRoot = getDirname(import.meta.url)\n","/*\n * @adonisjs/ally\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport type Configure from '@adonisjs/core/commands/configure'\nimport { stubsRoot } from './stubs/main.js'\n\n/**\n * List of available providers\n */\nconst AVAILABLE_PROVIDERS = [\n 'discord',\n 'facebook',\n 'github',\n 'google',\n 'linkedin',\n 'linkedinOpenidConnect',\n 'spotify',\n 'twitter',\n]\n\n/**\n * Configures the package\n */\nexport async function configure(command: Configure) {\n /**\n * Read providers from the CLI flags\n */\n let selectedProviders: string[] | string | undefined = command.parsedFlags.providers\n\n /**\n * Otherwise force prompt for selection\n */\n if (!selectedProviders) {\n selectedProviders = await command.prompt.multiple(\n 'Select the social auth providers you plan to use',\n AVAILABLE_PROVIDERS,\n {\n validate(value) {\n return !value || !value.length\n ? 'Select a social provider to configure the package'\n : true\n },\n }\n )\n }\n\n /**\n * Cast CLI string value to an array\n */\n let providers = (\n typeof selectedProviders === 'string' ? [selectedProviders] : selectedProviders\n ) as string[]\n\n /**\n * Validate CLI selection to contain known providers\n */\n const unknownProvider = providers.find((provider) => !AVAILABLE_PROVIDERS.includes(provider))\n if (unknownProvider) {\n command.exitCode = 1\n command.logger.error(`Invalid social provider \"${unknownProvider}\"`)\n return\n }\n\n const codemods = await command.createCodemods()\n\n /**\n * Publish config file\n */\n await codemods.makeUsingStub(stubsRoot, 'config/ally.stub', {\n providers: providers.map((provider) => {\n return { provider, envPrefix: provider.toUpperCase() }\n }),\n })\n\n /**\n * Publish provider\n */\n await codemods.updateRcFile((rcFile) => {\n rcFile.addProvider('@adonisjs/ally/ally_provider')\n })\n\n /**\n * Define env variables for the selected providers\n */\n await codemods.defineEnvVariables(\n providers.reduce<Record<string, string>>((result, provider) => {\n result[`${provider.toUpperCase()}_CLIENT_ID`] = ''\n result[`${provider.toUpperCase()}_CLIENT_SECRET`] = ''\n return result\n }, {})\n )\n\n /**\n * Define env variables validation for the selected providers\n */\n await codemods.defineEnvValidations({\n variables: providers.reduce<Record<string, string>>((result, provider) => {\n result[`${provider.toUpperCase()}_CLIENT_ID`] = 'Env.schema.string()'\n result[`${provider.toUpperCase()}_CLIENT_SECRET`] = 'Env.schema.string()'\n return result\n }, {}),\n leadingComment: 'Variables for configuring ally package',\n })\n}\n","/*\n * @adonisjs/ally\n *\n * (c) Ally\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport { configProvider } from '@adonisjs/core'\nimport type { HttpContext } from '@adonisjs/core/http'\nimport type { ConfigProvider } from '@adonisjs/core/types'\n\nimport type { GoogleDriver } from './drivers/google.js'\nimport type { GithubDriver } from './drivers/github.js'\nimport type { SpotifyDriver } from './drivers/spotify.js'\nimport type { TwitterDriver } from './drivers/twitter.js'\nimport type { DiscordDriver } from './drivers/discord.js'\nimport type { FacebookDriver } from './drivers/facebook.js'\nimport type { LinkedInDriver } from './drivers/linked_in.js'\nimport type { LinkedInOpenidConnectDriver } from './drivers/linked_in_openid_connect.js'\nimport type {\n GoogleDriverConfig,\n GithubDriverConfig,\n SpotifyDriverConfig,\n DiscordDriverConfig,\n TwitterDriverConfig,\n LinkedInDriverConfig,\n LinkedInOpenidConnectDriverConfig,\n FacebookDriverConfig,\n AllyManagerDriverFactory,\n} from './types.js'\n\n/**\n * Shape of config after it has been resolved from\n * the config provider\n */\ntype ResolvedConfig<\n KnownSocialProviders extends Record<\n string,\n AllyManagerDriverFactory | ConfigProvider<AllyManagerDriverFactory>\n >,\n> = {\n [K in keyof KnownSocialProviders]: KnownSocialProviders[K] extends ConfigProvider<infer A>\n ? A\n : KnownSocialProviders[K]\n}\n\n/**\n * Define config for the ally\n */\nexport function defineConfig<\n KnownSocialProviders extends Record<\n string,\n AllyManagerDriverFactory | ConfigProvider<AllyManagerDriverFactory>\n >,\n>(config: KnownSocialProviders): ConfigProvider<ResolvedConfig<KnownSocialProviders>> {\n return configProvider.create(async (app) => {\n const serviceNames = Object.keys(config)\n const services = {} as Record<string, AllyManagerDriverFactory>\n\n for (let serviceName of serviceNames) {\n const service = config[serviceName]\n if (typeof service === 'function') {\n services[serviceName] = service\n } else {\n services[serviceName] = await service.resolver(app)\n }\n }\n\n return services as ResolvedConfig<KnownSocialProviders>\n })\n}\n\n/**\n * Helpers to configure social auth services\n */\nexport const services: {\n discord: (config: DiscordDriverConfig) => ConfigProvider<(ctx: HttpContext) => DiscordDriver>\n facebook: (config: FacebookDriverConfig) => ConfigProvider<(ctx: HttpContext) => FacebookDriver>\n github: (config: GithubDriverConfig) => ConfigProvider<(ctx: HttpContext) => GithubDriver>\n google: (config: GoogleDriverConfig) => ConfigProvider<(ctx: HttpContext) => GoogleDriver>\n linkedin: (config: LinkedInDriverConfig) => ConfigProvider<(ctx: HttpContext) => LinkedInDriver>\n linkedinOpenidConnect: (\n config: LinkedInOpenidConnectDriverConfig\n ) => ConfigProvider<(ctx: HttpContext) => LinkedInOpenidConnectDriver>\n spotify: (config: SpotifyDriverConfig) => ConfigProvider<(ctx: HttpContext) => SpotifyDriver>\n twitter: (config: TwitterDriverConfig) => ConfigProvider<(ctx: HttpContext) => TwitterDriver>\n} = {\n discord(config) {\n return configProvider.create(async () => {\n const { DiscordDriver } = await import('./drivers/discord.js')\n return (ctx) => new DiscordDriver(ctx, config)\n })\n },\n facebook(config) {\n return configProvider.create(async () => {\n const { FacebookDriver } = await import('./drivers/facebook.js')\n return (ctx) => new FacebookDriver(ctx, config)\n })\n },\n github(config) {\n return configProvider.create(async () => {\n const { GithubDriver } = await import('./drivers/github.js')\n return (ctx) => new GithubDriver(ctx, config)\n })\n },\n google(config) {\n return configProvider.create(async () => {\n const { GoogleDriver } = await import('./drivers/google.js')\n return (ctx) => new GoogleDriver(ctx, config)\n })\n },\n linkedin(config) {\n return configProvider.create(async () => {\n const { LinkedInDriver } = await import('./drivers/linked_in.js')\n return (ctx) => new LinkedInDriver(ctx, config)\n })\n },\n linkedinOpenidConnect(config) {\n return configProvider.create(async () => {\n const { LinkedInOpenidConnectDriver } = await import('./drivers/linked_in_openid_connect.js')\n return (ctx) => new LinkedInOpenidConnectDriver(ctx, config)\n })\n },\n spotify(config) {\n return configProvider.create(async () => {\n const { SpotifyDriver } = await import('./drivers/spotify.js')\n return (ctx) => new SpotifyDriver(ctx, config)\n })\n },\n twitter(config) {\n return configProvider.create(async () => {\n const { TwitterDriver } = await import('./drivers/twitter.js')\n return (ctx) => new TwitterDriver(ctx, config)\n })\n },\n}\n"],"mappings":"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","names":["services"]}
|
package/build/src/debug.d.ts
CHANGED
|
@@ -7,7 +7,8 @@ import type { TwitterDriver } from './drivers/twitter.js';
|
|
|
7
7
|
import type { DiscordDriver } from './drivers/discord.js';
|
|
8
8
|
import type { FacebookDriver } from './drivers/facebook.js';
|
|
9
9
|
import type { LinkedInDriver } from './drivers/linked_in.js';
|
|
10
|
-
import type {
|
|
10
|
+
import type { LinkedInOpenidConnectDriver } from './drivers/linked_in_openid_connect.js';
|
|
11
|
+
import type { GoogleDriverConfig, GithubDriverConfig, SpotifyDriverConfig, DiscordDriverConfig, TwitterDriverConfig, LinkedInDriverConfig, LinkedInOpenidConnectDriverConfig, FacebookDriverConfig, AllyManagerDriverFactory } from './types.js';
|
|
11
12
|
/**
|
|
12
13
|
* Shape of config after it has been resolved from
|
|
13
14
|
* the config provider
|
|
@@ -28,6 +29,7 @@ export declare const services: {
|
|
|
28
29
|
github: (config: GithubDriverConfig) => ConfigProvider<(ctx: HttpContext) => GithubDriver>;
|
|
29
30
|
google: (config: GoogleDriverConfig) => ConfigProvider<(ctx: HttpContext) => GoogleDriver>;
|
|
30
31
|
linkedin: (config: LinkedInDriverConfig) => ConfigProvider<(ctx: HttpContext) => LinkedInDriver>;
|
|
32
|
+
linkedinOpenidConnect: (config: LinkedInOpenidConnectDriverConfig) => ConfigProvider<(ctx: HttpContext) => LinkedInOpenidConnectDriver>;
|
|
31
33
|
spotify: (config: SpotifyDriverConfig) => ConfigProvider<(ctx: HttpContext) => SpotifyDriver>;
|
|
32
34
|
twitter: (config: TwitterDriverConfig) => ConfigProvider<(ctx: HttpContext) => TwitterDriver>;
|
|
33
35
|
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Oauth2Driver
|
|
3
|
-
} from "../../chunk-
|
|
4
|
-
import "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
3
|
+
} from "../../chunk-GWAQFMNS.js";
|
|
4
|
+
import "../../chunk-N72DEJC2.js";
|
|
5
|
+
import "../../chunk-PZ5AY32C.js";
|
|
6
6
|
|
|
7
7
|
// src/drivers/discord.ts
|
|
8
8
|
var DiscordDriver = class extends Oauth2Driver {
|
|
@@ -12,7 +12,7 @@ var DiscordDriver = class extends Oauth2Driver {
|
|
|
12
12
|
this.loadState();
|
|
13
13
|
}
|
|
14
14
|
accessTokenUrl = "https://discord.com/api/oauth2/token";
|
|
15
|
-
authorizeUrl = "https://discord.com/
|
|
15
|
+
authorizeUrl = "https://discord.com/oauth2/authorize";
|
|
16
16
|
userInfoUrl = "https://discord.com/api/users/@me";
|
|
17
17
|
/**
|
|
18
18
|
* The param name for the authorization code
|
|
@@ -46,6 +46,7 @@ var DiscordDriver = class extends Oauth2Driver {
|
|
|
46
46
|
request.scopes(this.config.scopes || ["identify", "email"]);
|
|
47
47
|
request.param("response_type", "code");
|
|
48
48
|
request.param("grant_type", "authorization_code");
|
|
49
|
+
request.param("integration_type", 1);
|
|
49
50
|
if (this.config.prompt) {
|
|
50
51
|
request.param("prompt", this.config.prompt);
|
|
51
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/drivers/discord.ts"],"sourcesContent":["/*\n * @adonisjs/ally\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport type { HttpContext } from '@adonisjs/core/http'\nimport type { HttpClient } from '@poppinss/oauth-client'\n\nimport type {\n DiscordScopes,\n DiscordToken,\n ApiRequestContract,\n DiscordDriverConfig,\n RedirectRequestContract,\n} from '../types.js'\nimport { Oauth2Driver } from '../abstract_drivers/oauth2.js'\n\n/**\n * Discord driver to login user via Discord\n */\nexport class DiscordDriver extends Oauth2Driver<DiscordToken, DiscordScopes> {\n protected accessTokenUrl = 'https://discord.com/api/oauth2/token'\n protected authorizeUrl = 'https://discord.com/
|
|
1
|
+
{"version":3,"sources":["../../../src/drivers/discord.ts"],"sourcesContent":["/*\n * @adonisjs/ally\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport type { HttpContext } from '@adonisjs/core/http'\nimport type { HttpClient } from '@poppinss/oauth-client'\n\nimport type {\n DiscordScopes,\n DiscordToken,\n ApiRequestContract,\n DiscordDriverConfig,\n RedirectRequestContract,\n} from '../types.js'\nimport { Oauth2Driver } from '../abstract_drivers/oauth2.js'\n\n/**\n * Discord driver to login user via Discord\n */\nexport class DiscordDriver extends Oauth2Driver<DiscordToken, DiscordScopes> {\n protected accessTokenUrl = 'https://discord.com/api/oauth2/token'\n protected authorizeUrl = 'https://discord.com/oauth2/authorize'\n protected userInfoUrl = 'https://discord.com/api/users/@me'\n\n /**\n * The param name for the authorization code\n */\n protected codeParamName = 'code'\n\n /**\n * The param name for the error\n */\n protected errorParamName = 'error'\n\n /**\n * Cookie name for storing the \"discord_oauth_state\"\n */\n protected stateCookieName = 'discord_oauth_state'\n\n /**\n * Parameter name to be used for sending and receiving the state\n * from Discord\n */\n protected stateParamName = 'state'\n\n /**\n * Parameter name for defining the scopes\n */\n protected scopeParamName = 'scope'\n\n /**\n * Scopes separator\n */\n protected scopesSeparator = ' '\n\n constructor(\n ctx: HttpContext,\n public config: DiscordDriverConfig\n ) {\n super(ctx, config)\n\n /**\n * Extremely important to call the following method to clear the\n * state set by the redirect request\n */\n this.loadState()\n }\n\n /**\n * Configuring the redirect request with defaults\n */\n protected configureRedirectRequest(request: RedirectRequestContract<DiscordScopes>) {\n /**\n * Define user defined scopes or the default one's\n */\n request.scopes(this.config.scopes || ['identify', 'email'])\n\n request.param('response_type', 'code')\n request.param('grant_type', 'authorization_code')\n request.param('integration_type', 1)\n\n /**\n * Define params based upon user config\n */\n if (this.config.prompt) {\n request.param('prompt', this.config.prompt)\n }\n if (this.config.guildId) {\n request.param('guild_id', this.config.guildId)\n }\n if (this.config.disableGuildSelect !== undefined) {\n request.param('disable_guild_select', this.config.disableGuildSelect)\n }\n if (this.config.permissions !== undefined) {\n request.param('permissions', this.config.permissions)\n }\n }\n\n /**\n * Configuring the access token API request to send extra fields\n */\n protected configureAccessTokenRequest(request: ApiRequestContract) {\n /**\n * Send state to Discord when request is not stateles\n */\n if (!this.isStateless) {\n request.field('state', this.stateCookieValue)\n }\n }\n\n /**\n * Returns the HTTP request with the authorization header set\n */\n protected getAuthenticatedRequest(url: string, token: string): HttpClient {\n const request = this.httpClient(url)\n request.header('Authorization', `Bearer ${token}`)\n request.header('Accept', 'application/json')\n request.parseAs('json')\n return request\n }\n\n /**\n * Fetches the user info from the Discord API\n * https://discord.com/developers/docs/resources/user#get-current-user\n */\n protected async getUserInfo(token: string, callback?: (request: ApiRequestContract) => void) {\n const request = this.getAuthenticatedRequest(this.config.userInfoUrl || this.userInfoUrl, token)\n if (typeof callback === 'function') {\n callback(request)\n }\n\n const body = await request.get()\n return {\n id: body.id,\n name: `${body.username}#${body.discriminator}`,\n nickName: body.username,\n avatarUrl: body.avatar\n ? `https://cdn.discordapp.com/avatars/${body.id}/${body.avatar}.${\n body.avatar.startsWith('a_') ? 'gif' : 'png'\n }`\n : `https://cdn.discordapp.com/embed/avatars/${body.discriminator % 5}.png`,\n email: body.email, // May not always be there (requires email scope)\n emailVerificationState:\n 'verified' in body\n ? body.verified\n ? ('verified' as const)\n : ('unverified' as const)\n : ('unsupported' as const),\n original: body,\n }\n }\n\n /**\n * Find if the current error code is for access denied\n */\n accessDenied(): boolean {\n const error = this.getError()\n if (!error) {\n return false\n }\n\n return error === 'access_denied'\n }\n\n /**\n * Returns details for the authorized user\n */\n async user(callback?: (request: ApiRequestContract) => void) {\n const token = await this.accessToken(callback)\n const user = await this.getUserInfo(token.token, callback)\n\n return {\n ...user,\n token,\n }\n }\n\n /**\n * Finds the user by the access token\n */\n async userFromToken(token: string, callback?: (request: ApiRequestContract) => void) {\n const user = await this.getUserInfo(token, callback)\n\n return {\n ...user,\n token: { token, type: 'bearer' as const },\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Oauth2Driver
|
|
3
|
-
} from "../../chunk-
|
|
4
|
-
import "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
3
|
+
} from "../../chunk-GWAQFMNS.js";
|
|
4
|
+
import "../../chunk-N72DEJC2.js";
|
|
5
|
+
import "../../chunk-PZ5AY32C.js";
|
|
6
6
|
|
|
7
7
|
// src/drivers/facebook.ts
|
|
8
8
|
var FacebookDriver = class extends Oauth2Driver {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { HttpContext } from '@adonisjs/core/http';
|
|
2
2
|
import type { HttpClient } from '@poppinss/oauth-client';
|
|
3
|
-
import type { GithubToken, GithubScopes, GithubDriverConfig, ApiRequestContract, RedirectRequestContract } from '../types.js';
|
|
3
|
+
import type { GithubToken, GithubScopes, AllyUserContract, GithubDriverConfig, ApiRequestContract, RedirectRequestContract } from '../types.js';
|
|
4
4
|
import { Oauth2Driver } from '../abstract_drivers/oauth2.js';
|
|
5
5
|
/**
|
|
6
6
|
* Github driver to login user via Github
|
|
@@ -57,7 +57,7 @@ export declare class GithubDriver extends Oauth2Driver<GithubToken, GithubScopes
|
|
|
57
57
|
id: any;
|
|
58
58
|
nickName: any;
|
|
59
59
|
email: any;
|
|
60
|
-
emailVerificationState: "
|
|
60
|
+
emailVerificationState: AllyUserContract<any>["emailVerificationState"];
|
|
61
61
|
name: any;
|
|
62
62
|
avatarUrl: any;
|
|
63
63
|
original: any;
|
|
@@ -79,7 +79,7 @@ export declare class GithubDriver extends Oauth2Driver<GithubToken, GithubScopes
|
|
|
79
79
|
id: any;
|
|
80
80
|
nickName: any;
|
|
81
81
|
email: any;
|
|
82
|
-
emailVerificationState: "
|
|
82
|
+
emailVerificationState: AllyUserContract<any>["emailVerificationState"];
|
|
83
83
|
name: any;
|
|
84
84
|
avatarUrl: any;
|
|
85
85
|
original: any;
|
|
@@ -95,7 +95,7 @@ export declare class GithubDriver extends Oauth2Driver<GithubToken, GithubScopes
|
|
|
95
95
|
id: any;
|
|
96
96
|
nickName: any;
|
|
97
97
|
email: any;
|
|
98
|
-
emailVerificationState: "
|
|
98
|
+
emailVerificationState: AllyUserContract<any>["emailVerificationState"];
|
|
99
99
|
name: any;
|
|
100
100
|
avatarUrl: any;
|
|
101
101
|
original: any;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Oauth2Driver
|
|
3
|
-
} from "../../chunk-
|
|
4
|
-
import "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
3
|
+
} from "../../chunk-GWAQFMNS.js";
|
|
4
|
+
import "../../chunk-N72DEJC2.js";
|
|
5
|
+
import "../../chunk-PZ5AY32C.js";
|
|
6
6
|
|
|
7
7
|
// src/drivers/github.ts
|
|
8
8
|
var GithubDriver = class extends Oauth2Driver {
|
|
@@ -87,7 +87,7 @@ var GithubDriver = class extends Oauth2Driver {
|
|
|
87
87
|
email: body.email,
|
|
88
88
|
// May not always be there
|
|
89
89
|
emailVerificationState: body.email ? "verified" : "unsupported",
|
|
90
|
-
name: body.name,
|
|
90
|
+
name: body.name ?? body.login,
|
|
91
91
|
avatarUrl: body.avatar_url,
|
|
92
92
|
original: body
|
|
93
93
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/drivers/github.ts"],"sourcesContent":["/*\n * @adonisjs/ally\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport type { HttpContext } from '@adonisjs/core/http'\nimport type { HttpClient } from '@poppinss/oauth-client'\nimport type {\n GithubToken,\n GithubScopes,\n AllyUserContract,\n GithubDriverConfig,\n ApiRequestContract,\n RedirectRequestContract,\n} from '../types.js'\nimport { Oauth2Driver } from '../abstract_drivers/oauth2.js'\n\n/**\n * Github driver to login user via Github\n */\nexport class GithubDriver extends Oauth2Driver<GithubToken, GithubScopes> {\n protected accessTokenUrl = 'https://github.com/login/oauth/access_token'\n protected authorizeUrl = 'https://github.com/login/oauth/authorize'\n protected userInfoUrl = 'https://api.github.com/user'\n protected userEmailUrl = 'https://api.github.com/user/emails'\n\n /**\n * The param name for the authorization code\n */\n protected codeParamName = 'code'\n\n /**\n * The param name for the error\n */\n protected errorParamName = 'error'\n\n /**\n * Cookie name for storing the \"gh_oauth_state\"\n */\n protected stateCookieName = 'gh_oauth_state'\n\n /**\n * Parameter name to be used for sending and receiving the state\n * from Github\n */\n protected stateParamName = 'state'\n\n /**\n * Parameter name for defining the scopes\n */\n protected scopeParamName = 'scope'\n\n /**\n * Scopes separator\n */\n protected scopesSeparator = ' '\n\n constructor(\n ctx: HttpContext,\n public config: GithubDriverConfig\n ) {\n super(ctx, config)\n /**\n * Extremely important to call the following method to clear the\n * state set by the redirect request\n */\n this.loadState()\n }\n\n /**\n * Configuring the redirect request with defaults\n */\n protected configureRedirectRequest(request: RedirectRequestContract<GithubScopes>) {\n /**\n * Define user defined scopes or the default one's\n */\n request.scopes(this.config.scopes || ['user'])\n\n /**\n * Set \"allow_signup\" option when defined\n */\n if (this.config.allowSignup !== undefined) {\n request.param('allow_signup', this.config.allowSignup)\n }\n\n /**\n * Set \"login\" option when defined\n */\n if (this.config.login) {\n request.param('login', this.config.login)\n }\n }\n\n /**\n * Configuring the access token API request to send extra fields\n */\n protected configureAccessTokenRequest(request: ApiRequestContract) {\n /**\n * Send state to github when request is not stateles\n */\n if (!this.isStateless) {\n request.field('state', this.stateCookieValue)\n }\n\n /**\n * Clearing the default defined \"grant_type\". Github doesn't accept this.\n * https://github.com/poppinss/oauth-client#following-is-the-list-of-fieldsparams-set-by-the-clients-implicitly\n */\n request.clearField('grant_type')\n }\n\n /**\n * Returns the HTTP request with the authorization header set\n */\n protected getAuthenticatedRequest(url: string, token: string): HttpClient {\n const request = this.httpClient(url)\n request.header('Authorization', `token ${token}`)\n request.header('Accept', 'application/json')\n request.parseAs('json')\n return request\n }\n\n /**\n * Fetches the user info from the Github API\n * https://docs.github.com/en/rest/reference/users#get-the-authenticated-user\n */\n protected async getUserInfo(token: string, callback?: (request: ApiRequestContract) => void) {\n const request = this.getAuthenticatedRequest(this.config.userInfoUrl || this.userInfoUrl, token)\n if (typeof callback === 'function') {\n callback(request)\n }\n\n const body = await request.get()\n return {\n id: body.id,\n nickName: body.name,\n email: body.email, // May not always be there\n emailVerificationState: (body.email\n ? 'verified'\n : 'unsupported') as AllyUserContract<any>['emailVerificationState'],\n name: body.name,\n avatarUrl: body.avatar_url,\n original: body,\n }\n }\n\n /**\n * Fetches the user email from the Github API.\n * https://docs.github.com/en/rest/reference/users#list-email-addresses-for-the-authenticated-user\n */\n protected async getUserEmail(token: string, callback?: (request: ApiRequestContract) => void) {\n const request = this.getAuthenticatedRequest(\n this.config.userEmailUrl || this.userEmailUrl,\n token\n )\n\n if (typeof callback === 'function') {\n callback(request)\n }\n\n try {\n let emails = await request.get()\n\n /**\n * Sort emails to keep the primary ones on the top\n */\n emails = emails.sort((email: any) => (email.primary ? -1 : 1))\n\n /**\n * Get the first verified email of the user\n */\n let mainEmail = emails.find((email: any) => email.verified)\n\n /**\n * If there are no verified emails, then get any first one\n */\n if (!mainEmail) {\n mainEmail = emails[0]\n }\n\n return mainEmail\n } catch (error) {\n if (error && error.response && error.response.statusCode === 404) {\n return\n }\n throw error\n }\n }\n\n /**\n * Find if the current error code is for access denied\n */\n accessDenied(): boolean {\n const error = this.getError()\n if (!error) {\n return false\n }\n\n return error === 'access_denied'\n }\n\n /**\n * Returns details for the authorized user\n */\n async user(callback?: (request: ApiRequestContract) => void) {\n const token = await this.accessToken(callback)\n const user = await this.getUserInfo(token.token, callback)\n\n /**\n * Fetch email separately\n */\n if (!user.email) {\n this.ctx.logger.trace('Fetching github user email separately')\n\n const emailResponse = await this.getUserEmail(token.token, callback)\n if (emailResponse) {\n user.email = emailResponse.email\n user.emailVerificationState = emailResponse.verified\n ? ('verified' as const)\n : ('unverified' as const)\n }\n }\n\n return {\n ...user,\n token: token,\n }\n }\n\n /**\n * Finds the user by the access token\n */\n async userFromToken(token: string, callback?: (request: ApiRequestContract) => void) {\n const user = await this.getUserInfo(token, callback)\n\n /**\n * Fetch email separately\n */\n if (!user.email) {\n this.ctx.logger.trace('Fetching github user email separately')\n\n const emailResponse = await this.getUserEmail(token, callback)\n if (emailResponse) {\n user.email = emailResponse.email\n user.emailVerificationState = emailResponse.verified\n ? ('verified' as const)\n : ('unverified' as const)\n }\n }\n\n return {\n ...user,\n token: { token, type: 'bearer' as const },\n }\n }\n}\n"],"mappings":";;;;;;;AAwBO,IAAM,eAAN,cAA2B,aAAwC;AAAA,EAqCxE,YACE,KACO,QACP;AACA,UAAM,KAAK,MAAM;AAFV;AAOP,SAAK,UAAU;AAAA,EACjB;AAAA,EA9CU,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,cAAc;AAAA,EACd,eAAe;AAAA;AAAA;AAAA;AAAA,EAKf,gBAAgB;AAAA;AAAA;AAAA;AAAA,EAKhB,iBAAiB;AAAA;AAAA;AAAA;AAAA,EAKjB,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMlB,iBAAiB;AAAA;AAAA;AAAA;AAAA,EAKjB,iBAAiB;AAAA;AAAA;AAAA;AAAA,EAKjB,kBAAkB;AAAA;AAAA;AAAA;AAAA,EAiBlB,yBAAyB,SAAgD;AAIjF,YAAQ,OAAO,KAAK,OAAO,UAAU,CAAC,MAAM,CAAC;AAK7C,QAAI,KAAK,OAAO,gBAAgB,QAAW;AACzC,cAAQ,MAAM,gBAAgB,KAAK,OAAO,WAAW;AAAA,IACvD;AAKA,QAAI,KAAK,OAAO,OAAO;AACrB,cAAQ,MAAM,SAAS,KAAK,OAAO,KAAK;AAAA,IAC1C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKU,4BAA4B,SAA6B;AAIjE,QAAI,CAAC,KAAK,aAAa;AACrB,cAAQ,MAAM,SAAS,KAAK,gBAAgB;AAAA,IAC9C;AAMA,YAAQ,WAAW,YAAY;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKU,wBAAwB,KAAa,OAA2B;AACxE,UAAM,UAAU,KAAK,WAAW,GAAG;AACnC,YAAQ,OAAO,iBAAiB,SAAS,KAAK,EAAE;AAChD,YAAQ,OAAO,UAAU,kBAAkB;AAC3C,YAAQ,QAAQ,MAAM;AACtB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAgB,YAAY,OAAe,UAAkD;AAC3F,UAAM,UAAU,KAAK,wBAAwB,KAAK,OAAO,eAAe,KAAK,aAAa,KAAK;AAC/F,QAAI,OAAO,aAAa,YAAY;AAClC,eAAS,OAAO;AAAA,IAClB;AAEA,UAAM,OAAO,MAAM,QAAQ,IAAI;AAC/B,WAAO;AAAA,MACL,IAAI,KAAK;AAAA,MACT,UAAU,KAAK;AAAA,MACf,OAAO,KAAK;AAAA;AAAA,MACZ,wBAAyB,KAAK,QAC1B,aACA;AAAA,MACJ,MAAM,KAAK;AAAA,
|
|
1
|
+
{"version":3,"sources":["../../../src/drivers/github.ts"],"sourcesContent":["/*\n * @adonisjs/ally\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport type { HttpContext } from '@adonisjs/core/http'\nimport type { HttpClient } from '@poppinss/oauth-client'\nimport type {\n GithubToken,\n GithubScopes,\n AllyUserContract,\n GithubDriverConfig,\n ApiRequestContract,\n RedirectRequestContract,\n} from '../types.js'\nimport { Oauth2Driver } from '../abstract_drivers/oauth2.js'\n\n/**\n * Github driver to login user via Github\n */\nexport class GithubDriver extends Oauth2Driver<GithubToken, GithubScopes> {\n protected accessTokenUrl = 'https://github.com/login/oauth/access_token'\n protected authorizeUrl = 'https://github.com/login/oauth/authorize'\n protected userInfoUrl = 'https://api.github.com/user'\n protected userEmailUrl = 'https://api.github.com/user/emails'\n\n /**\n * The param name for the authorization code\n */\n protected codeParamName = 'code'\n\n /**\n * The param name for the error\n */\n protected errorParamName = 'error'\n\n /**\n * Cookie name for storing the \"gh_oauth_state\"\n */\n protected stateCookieName = 'gh_oauth_state'\n\n /**\n * Parameter name to be used for sending and receiving the state\n * from Github\n */\n protected stateParamName = 'state'\n\n /**\n * Parameter name for defining the scopes\n */\n protected scopeParamName = 'scope'\n\n /**\n * Scopes separator\n */\n protected scopesSeparator = ' '\n\n constructor(\n ctx: HttpContext,\n public config: GithubDriverConfig\n ) {\n super(ctx, config)\n /**\n * Extremely important to call the following method to clear the\n * state set by the redirect request\n */\n this.loadState()\n }\n\n /**\n * Configuring the redirect request with defaults\n */\n protected configureRedirectRequest(request: RedirectRequestContract<GithubScopes>) {\n /**\n * Define user defined scopes or the default one's\n */\n request.scopes(this.config.scopes || ['user'])\n\n /**\n * Set \"allow_signup\" option when defined\n */\n if (this.config.allowSignup !== undefined) {\n request.param('allow_signup', this.config.allowSignup)\n }\n\n /**\n * Set \"login\" option when defined\n */\n if (this.config.login) {\n request.param('login', this.config.login)\n }\n }\n\n /**\n * Configuring the access token API request to send extra fields\n */\n protected configureAccessTokenRequest(request: ApiRequestContract) {\n /**\n * Send state to github when request is not stateles\n */\n if (!this.isStateless) {\n request.field('state', this.stateCookieValue)\n }\n\n /**\n * Clearing the default defined \"grant_type\". Github doesn't accept this.\n * https://github.com/poppinss/oauth-client#following-is-the-list-of-fieldsparams-set-by-the-clients-implicitly\n */\n request.clearField('grant_type')\n }\n\n /**\n * Returns the HTTP request with the authorization header set\n */\n protected getAuthenticatedRequest(url: string, token: string): HttpClient {\n const request = this.httpClient(url)\n request.header('Authorization', `token ${token}`)\n request.header('Accept', 'application/json')\n request.parseAs('json')\n return request\n }\n\n /**\n * Fetches the user info from the Github API\n * https://docs.github.com/en/rest/reference/users#get-the-authenticated-user\n */\n protected async getUserInfo(token: string, callback?: (request: ApiRequestContract) => void) {\n const request = this.getAuthenticatedRequest(this.config.userInfoUrl || this.userInfoUrl, token)\n if (typeof callback === 'function') {\n callback(request)\n }\n\n const body = await request.get()\n return {\n id: body.id,\n nickName: body.name,\n email: body.email, // May not always be there\n emailVerificationState: (body.email\n ? 'verified'\n : 'unsupported') as AllyUserContract<any>['emailVerificationState'],\n name: body.name ?? body.login,\n avatarUrl: body.avatar_url,\n original: body,\n }\n }\n\n /**\n * Fetches the user email from the Github API.\n * https://docs.github.com/en/rest/reference/users#list-email-addresses-for-the-authenticated-user\n */\n protected async getUserEmail(token: string, callback?: (request: ApiRequestContract) => void) {\n const request = this.getAuthenticatedRequest(\n this.config.userEmailUrl || this.userEmailUrl,\n token\n )\n\n if (typeof callback === 'function') {\n callback(request)\n }\n\n try {\n let emails = await request.get()\n\n /**\n * Sort emails to keep the primary ones on the top\n */\n emails = emails.sort((email: any) => (email.primary ? -1 : 1))\n\n /**\n * Get the first verified email of the user\n */\n let mainEmail = emails.find((email: any) => email.verified)\n\n /**\n * If there are no verified emails, then get any first one\n */\n if (!mainEmail) {\n mainEmail = emails[0]\n }\n\n return mainEmail\n } catch (error) {\n if (error && error.response && error.response.statusCode === 404) {\n return\n }\n throw error\n }\n }\n\n /**\n * Find if the current error code is for access denied\n */\n accessDenied(): boolean {\n const error = this.getError()\n if (!error) {\n return false\n }\n\n return error === 'access_denied'\n }\n\n /**\n * Returns details for the authorized user\n */\n async user(callback?: (request: ApiRequestContract) => void) {\n const token = await this.accessToken(callback)\n const user = await this.getUserInfo(token.token, callback)\n\n /**\n * Fetch email separately\n */\n if (!user.email) {\n this.ctx.logger.trace('Fetching github user email separately')\n\n const emailResponse = await this.getUserEmail(token.token, callback)\n if (emailResponse) {\n user.email = emailResponse.email\n user.emailVerificationState = emailResponse.verified\n ? ('verified' as const)\n : ('unverified' as const)\n }\n }\n\n return {\n ...user,\n token: token,\n }\n }\n\n /**\n * Finds the user by the access token\n */\n async userFromToken(token: string, callback?: (request: ApiRequestContract) => void) {\n const user = await this.getUserInfo(token, callback)\n\n /**\n * Fetch email separately\n */\n if (!user.email) {\n this.ctx.logger.trace('Fetching github user email separately')\n\n const emailResponse = await this.getUserEmail(token, callback)\n if (emailResponse) {\n user.email = emailResponse.email\n user.emailVerificationState = emailResponse.verified\n ? ('verified' as const)\n : ('unverified' as const)\n }\n }\n\n return {\n ...user,\n token: { token, type: 'bearer' as const },\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Oauth2Driver
|
|
3
|
-
} from "../../chunk-
|
|
4
|
-
import "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
3
|
+
} from "../../chunk-GWAQFMNS.js";
|
|
4
|
+
import "../../chunk-N72DEJC2.js";
|
|
5
|
+
import "../../chunk-PZ5AY32C.js";
|
|
6
6
|
|
|
7
7
|
// src/drivers/google.ts
|
|
8
8
|
var SCOPE_PREFIXES = {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Oauth2Driver
|
|
3
|
-
} from "../../chunk-
|
|
4
|
-
import "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
3
|
+
} from "../../chunk-GWAQFMNS.js";
|
|
4
|
+
import "../../chunk-N72DEJC2.js";
|
|
5
|
+
import "../../chunk-PZ5AY32C.js";
|
|
6
6
|
|
|
7
7
|
// src/drivers/linked_in.ts
|
|
8
8
|
import { Exception } from "@poppinss/utils";
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { Oauth2Driver } from '../abstract_drivers/oauth2.js';
|
|
2
|
+
import type { HttpContext } from '@adonisjs/core/http';
|
|
3
|
+
import type { ApiRequestContract, LinkedInOpenidConnectAccessToken, LinkedInOpenidConnectDriverConfig, LinkedInOpenidConnectScopes, RedirectRequestContract } from '@adonisjs/ally/types';
|
|
4
|
+
import type { HttpClient } from '@poppinss/oauth-client';
|
|
5
|
+
/**
|
|
6
|
+
* LinkedIn openid connect driver to login user via LinkedIn using openid connect requirements
|
|
7
|
+
*/
|
|
8
|
+
export declare class LinkedInOpenidConnectDriver extends Oauth2Driver<LinkedInOpenidConnectAccessToken, LinkedInOpenidConnectScopes> {
|
|
9
|
+
config: LinkedInOpenidConnectDriverConfig;
|
|
10
|
+
protected authorizeUrl: string;
|
|
11
|
+
protected accessTokenUrl: string;
|
|
12
|
+
protected userInfoUrl: string;
|
|
13
|
+
/**
|
|
14
|
+
* The param name for the authorization code
|
|
15
|
+
*/
|
|
16
|
+
protected codeParamName: string;
|
|
17
|
+
/**
|
|
18
|
+
* The param name for the error
|
|
19
|
+
*/
|
|
20
|
+
protected errorParamName: string;
|
|
21
|
+
/**
|
|
22
|
+
* Cookie name for storing the "linkedin_openid_connect_oauth_state"
|
|
23
|
+
*/
|
|
24
|
+
protected stateCookieName: string;
|
|
25
|
+
/**
|
|
26
|
+
* Parameter name to be used for sending and receiving the state
|
|
27
|
+
* from linkedin
|
|
28
|
+
*/
|
|
29
|
+
protected stateParamName: string;
|
|
30
|
+
/**
|
|
31
|
+
* Parameter name for defining the scopes
|
|
32
|
+
*/
|
|
33
|
+
protected scopeParamName: string;
|
|
34
|
+
/**
|
|
35
|
+
* Scopes separator
|
|
36
|
+
*/
|
|
37
|
+
protected scopesSeparator: string;
|
|
38
|
+
constructor(ctx: HttpContext, config: LinkedInOpenidConnectDriverConfig);
|
|
39
|
+
/**
|
|
40
|
+
* Configuring the redirect request with defaults
|
|
41
|
+
*/
|
|
42
|
+
protected configureRedirectRequest(request: RedirectRequestContract<LinkedInOpenidConnectScopes>): void;
|
|
43
|
+
/**
|
|
44
|
+
* Returns the HTTP request with the authorization header set
|
|
45
|
+
*/
|
|
46
|
+
protected getAuthenticatedRequest(url: string, token: string): HttpClient;
|
|
47
|
+
/**
|
|
48
|
+
* Fetches the user info from the LinkedIn API
|
|
49
|
+
*/
|
|
50
|
+
protected getUserInfo(token: string, callback?: (request: ApiRequestContract) => void): Promise<{
|
|
51
|
+
id: any;
|
|
52
|
+
nickName: any;
|
|
53
|
+
name: any;
|
|
54
|
+
avatarUrl: any;
|
|
55
|
+
email: any;
|
|
56
|
+
emailVerificationState: "verified" | "unverified";
|
|
57
|
+
original: any;
|
|
58
|
+
}>;
|
|
59
|
+
/**
|
|
60
|
+
* Find if the current error code is for access denied
|
|
61
|
+
*/
|
|
62
|
+
accessDenied(): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Returns details for the authorized user
|
|
65
|
+
*/
|
|
66
|
+
user(callback?: (request: ApiRequestContract) => void): Promise<{
|
|
67
|
+
token: {
|
|
68
|
+
token: string;
|
|
69
|
+
type: "bearer";
|
|
70
|
+
expiresIn: number;
|
|
71
|
+
expiresAt: Exclude<import("@poppinss/oauth-client/types").Oauth2AccessToken["expiresAt"], undefined>;
|
|
72
|
+
};
|
|
73
|
+
id: any;
|
|
74
|
+
nickName: any;
|
|
75
|
+
name: any;
|
|
76
|
+
avatarUrl: any;
|
|
77
|
+
email: any;
|
|
78
|
+
emailVerificationState: "verified" | "unverified";
|
|
79
|
+
original: any;
|
|
80
|
+
}>;
|
|
81
|
+
/**
|
|
82
|
+
* Finds the user by the access token
|
|
83
|
+
*/
|
|
84
|
+
userFromToken(token: string, callback?: (request: ApiRequestContract) => void): Promise<{
|
|
85
|
+
token: {
|
|
86
|
+
token: string;
|
|
87
|
+
type: "bearer";
|
|
88
|
+
};
|
|
89
|
+
id: any;
|
|
90
|
+
nickName: any;
|
|
91
|
+
name: any;
|
|
92
|
+
avatarUrl: any;
|
|
93
|
+
email: any;
|
|
94
|
+
emailVerificationState: "verified" | "unverified";
|
|
95
|
+
original: any;
|
|
96
|
+
}>;
|
|
97
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Oauth2Driver
|
|
3
|
+
} from "../../chunk-GWAQFMNS.js";
|
|
4
|
+
import "../../chunk-N72DEJC2.js";
|
|
5
|
+
import "../../chunk-PZ5AY32C.js";
|
|
6
|
+
|
|
7
|
+
// src/drivers/linked_in_openid_connect.ts
|
|
8
|
+
var LinkedInOpenidConnectDriver = class extends Oauth2Driver {
|
|
9
|
+
constructor(ctx, config) {
|
|
10
|
+
super(ctx, config);
|
|
11
|
+
this.config = config;
|
|
12
|
+
this.loadState();
|
|
13
|
+
}
|
|
14
|
+
authorizeUrl = "https://www.linkedin.com/oauth/v2/authorization";
|
|
15
|
+
accessTokenUrl = "https://www.linkedin.com/oauth/v2/accessToken";
|
|
16
|
+
userInfoUrl = "https://api.linkedin.com/v2/userinfo";
|
|
17
|
+
/**
|
|
18
|
+
* The param name for the authorization code
|
|
19
|
+
*/
|
|
20
|
+
codeParamName = "code";
|
|
21
|
+
/**
|
|
22
|
+
* The param name for the error
|
|
23
|
+
*/
|
|
24
|
+
errorParamName = "error";
|
|
25
|
+
/**
|
|
26
|
+
* Cookie name for storing the "linkedin_openid_connect_oauth_state"
|
|
27
|
+
*/
|
|
28
|
+
stateCookieName = "linkedin_openid_connect_oauth_state";
|
|
29
|
+
/**
|
|
30
|
+
* Parameter name to be used for sending and receiving the state
|
|
31
|
+
* from linkedin
|
|
32
|
+
*/
|
|
33
|
+
stateParamName = "state";
|
|
34
|
+
/**
|
|
35
|
+
* Parameter name for defining the scopes
|
|
36
|
+
*/
|
|
37
|
+
scopeParamName = "scope";
|
|
38
|
+
/**
|
|
39
|
+
* Scopes separator
|
|
40
|
+
*/
|
|
41
|
+
scopesSeparator = " ";
|
|
42
|
+
/**
|
|
43
|
+
* Configuring the redirect request with defaults
|
|
44
|
+
*/
|
|
45
|
+
configureRedirectRequest(request) {
|
|
46
|
+
request.scopes(this.config.scopes || ["openid", "profile", "email"]);
|
|
47
|
+
request.param("response_type", "code");
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Returns the HTTP request with the authorization header set
|
|
51
|
+
*/
|
|
52
|
+
getAuthenticatedRequest(url, token) {
|
|
53
|
+
const request = this.httpClient(url);
|
|
54
|
+
request.header("Authorization", `Bearer ${token}`);
|
|
55
|
+
request.header("Accept", "application/json");
|
|
56
|
+
request.parseAs("json");
|
|
57
|
+
return request;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Fetches the user info from the LinkedIn API
|
|
61
|
+
*/
|
|
62
|
+
async getUserInfo(token, callback) {
|
|
63
|
+
let url = this.config.userInfoUrl || this.userInfoUrl;
|
|
64
|
+
const request = this.getAuthenticatedRequest(url, token);
|
|
65
|
+
if (typeof callback === "function") {
|
|
66
|
+
callback(request);
|
|
67
|
+
}
|
|
68
|
+
const body = await request.get();
|
|
69
|
+
const emailVerificationState = body.email_verified ? "verified" : "unverified";
|
|
70
|
+
return {
|
|
71
|
+
id: body.sub,
|
|
72
|
+
nickName: body.given_name,
|
|
73
|
+
name: body.family_name,
|
|
74
|
+
avatarUrl: body.picture,
|
|
75
|
+
email: body.email,
|
|
76
|
+
emailVerificationState,
|
|
77
|
+
original: body
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Find if the current error code is for access denied
|
|
82
|
+
*/
|
|
83
|
+
accessDenied() {
|
|
84
|
+
const error = this.getError();
|
|
85
|
+
if (!error) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
return error === "user_cancelled_login" || error === "user_cancelled_authorize";
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Returns details for the authorized user
|
|
92
|
+
*/
|
|
93
|
+
async user(callback) {
|
|
94
|
+
const accessToken = await this.accessToken(callback);
|
|
95
|
+
const userInfo = await this.getUserInfo(accessToken.token, callback);
|
|
96
|
+
return {
|
|
97
|
+
...userInfo,
|
|
98
|
+
token: { ...accessToken }
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Finds the user by the access token
|
|
103
|
+
*/
|
|
104
|
+
async userFromToken(token, callback) {
|
|
105
|
+
const user = await this.getUserInfo(token, callback);
|
|
106
|
+
return {
|
|
107
|
+
...user,
|
|
108
|
+
token: { token, type: "bearer" }
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
export {
|
|
113
|
+
LinkedInOpenidConnectDriver
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=linked_in_openid_connect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/drivers/linked_in_openid_connect.ts"],"sourcesContent":["import { Oauth2Driver } from '../abstract_drivers/oauth2.js'\nimport type { HttpContext } from '@adonisjs/core/http'\nimport type {\n ApiRequestContract,\n LinkedInOpenidConnectAccessToken,\n LinkedInOpenidConnectDriverConfig,\n LinkedInOpenidConnectScopes,\n RedirectRequestContract,\n} from '@adonisjs/ally/types'\nimport type { HttpClient } from '@poppinss/oauth-client'\n\n/**\n * LinkedIn openid connect driver to login user via LinkedIn using openid connect requirements\n */\nexport class LinkedInOpenidConnectDriver extends Oauth2Driver<\n LinkedInOpenidConnectAccessToken,\n LinkedInOpenidConnectScopes\n> {\n protected authorizeUrl = 'https://www.linkedin.com/oauth/v2/authorization'\n protected accessTokenUrl = 'https://www.linkedin.com/oauth/v2/accessToken'\n protected userInfoUrl = 'https://api.linkedin.com/v2/userinfo'\n\n /**\n * The param name for the authorization code\n */\n protected codeParamName = 'code'\n\n /**\n * The param name for the error\n */\n protected errorParamName = 'error'\n\n /**\n * Cookie name for storing the \"linkedin_openid_connect_oauth_state\"\n */\n protected stateCookieName = 'linkedin_openid_connect_oauth_state'\n\n /**\n * Parameter name to be used for sending and receiving the state\n * from linkedin\n */\n protected stateParamName = 'state'\n\n /**\n * Parameter name for defining the scopes\n */\n protected scopeParamName = 'scope'\n\n /**\n * Scopes separator\n */\n protected scopesSeparator = ' '\n\n constructor(\n ctx: HttpContext,\n public config: LinkedInOpenidConnectDriverConfig\n ) {\n super(ctx, config)\n /**\n * Extremely important to call the following method to clear the\n * state set by the redirect request.\n *\n * DO NOT REMOVE THE FOLLOWING LINE\n */\n this.loadState()\n }\n\n /**\n * Configuring the redirect request with defaults\n */\n protected configureRedirectRequest(\n request: RedirectRequestContract<LinkedInOpenidConnectScopes>\n ) {\n /**\n * Define user defined scopes or the default one's\n */\n request.scopes(this.config.scopes || ['openid', 'profile', 'email'])\n\n /**\n * Set \"response_type\" param\n */\n request.param('response_type', 'code')\n }\n\n /**\n * Returns the HTTP request with the authorization header set\n */\n protected getAuthenticatedRequest(url: string, token: string): HttpClient {\n const request = this.httpClient(url)\n request.header('Authorization', `Bearer ${token}`)\n request.header('Accept', 'application/json')\n request.parseAs('json')\n return request\n }\n\n /**\n * Fetches the user info from the LinkedIn API\n */\n protected async getUserInfo(token: string, callback?: (request: ApiRequestContract) => void) {\n let url = this.config.userInfoUrl || this.userInfoUrl\n const request = this.getAuthenticatedRequest(url, token)\n\n if (typeof callback === 'function') {\n callback(request)\n }\n\n const body = await request.get()\n const emailVerificationState: 'verified' | 'unverified' = body.email_verified\n ? 'verified'\n : 'unverified'\n\n return {\n id: body.sub,\n nickName: body.given_name,\n name: body.family_name,\n avatarUrl: body.picture,\n email: body.email,\n emailVerificationState,\n original: body,\n }\n }\n\n /**\n * Find if the current error code is for access denied\n */\n accessDenied(): boolean {\n const error = this.getError()\n if (!error) {\n return false\n }\n\n return error === 'user_cancelled_login' || error === 'user_cancelled_authorize'\n }\n\n /**\n * Returns details for the authorized user\n */\n async user(callback?: (request: ApiRequestContract) => void) {\n const accessToken = await this.accessToken(callback)\n const userInfo = await this.getUserInfo(accessToken.token, callback)\n\n return {\n ...userInfo,\n token: { ...accessToken },\n }\n }\n\n /**\n * Finds the user by the access token\n */\n async userFromToken(token: string, callback?: (request: ApiRequestContract) => void) {\n const user = await this.getUserInfo(token, callback)\n\n return {\n ...user,\n token: { token, type: 'bearer' as const },\n }\n }\n}\n"],"mappings":";;;;;;;AAcO,IAAM,8BAAN,cAA0C,aAG/C;AAAA,EAoCA,YACE,KACO,QACP;AACA,UAAM,KAAK,MAAM;AAFV;AASP,SAAK,UAAU;AAAA,EACjB;AAAA,EA/CU,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,cAAc;AAAA;AAAA;AAAA;AAAA,EAKd,gBAAgB;AAAA;AAAA;AAAA;AAAA,EAKhB,iBAAiB;AAAA;AAAA;AAAA;AAAA,EAKjB,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMlB,iBAAiB;AAAA;AAAA;AAAA;AAAA,EAKjB,iBAAiB;AAAA;AAAA;AAAA;AAAA,EAKjB,kBAAkB;AAAA;AAAA;AAAA;AAAA,EAmBlB,yBACR,SACA;AAIA,YAAQ,OAAO,KAAK,OAAO,UAAU,CAAC,UAAU,WAAW,OAAO,CAAC;AAKnE,YAAQ,MAAM,iBAAiB,MAAM;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKU,wBAAwB,KAAa,OAA2B;AACxE,UAAM,UAAU,KAAK,WAAW,GAAG;AACnC,YAAQ,OAAO,iBAAiB,UAAU,KAAK,EAAE;AACjD,YAAQ,OAAO,UAAU,kBAAkB;AAC3C,YAAQ,QAAQ,MAAM;AACtB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,YAAY,OAAe,UAAkD;AAC3F,QAAI,MAAM,KAAK,OAAO,eAAe,KAAK;AAC1C,UAAM,UAAU,KAAK,wBAAwB,KAAK,KAAK;AAEvD,QAAI,OAAO,aAAa,YAAY;AAClC,eAAS,OAAO;AAAA,IAClB;AAEA,UAAM,OAAO,MAAM,QAAQ,IAAI;AAC/B,UAAM,yBAAoD,KAAK,iBAC3D,aACA;AAEJ,WAAO;AAAA,MACL,IAAI,KAAK;AAAA,MACT,UAAU,KAAK;AAAA,MACf,MAAM,KAAK;AAAA,MACX,WAAW,KAAK;AAAA,MAChB,OAAO,KAAK;AAAA,MACZ;AAAA,MACA,UAAU;AAAA,IACZ;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,eAAwB;AACtB,UAAM,QAAQ,KAAK,SAAS;AAC5B,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AAEA,WAAO,UAAU,0BAA0B,UAAU;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,UAAkD;AAC3D,UAAM,cAAc,MAAM,KAAK,YAAY,QAAQ;AACnD,UAAM,WAAW,MAAM,KAAK,YAAY,YAAY,OAAO,QAAQ;AAEnE,WAAO;AAAA,MACL,GAAG;AAAA,MACH,OAAO,EAAE,GAAG,YAAY;AAAA,IAC1B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,OAAe,UAAkD;AACnF,UAAM,OAAO,MAAM,KAAK,YAAY,OAAO,QAAQ;AAEnD,WAAO;AAAA,MACL,GAAG;AAAA,MACH,OAAO,EAAE,OAAO,MAAM,SAAkB;AAAA,IAC1C;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Oauth2Driver
|
|
3
|
-
} from "../../chunk-
|
|
4
|
-
import "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
3
|
+
} from "../../chunk-GWAQFMNS.js";
|
|
4
|
+
import "../../chunk-N72DEJC2.js";
|
|
5
|
+
import "../../chunk-PZ5AY32C.js";
|
|
6
6
|
|
|
7
7
|
// src/drivers/spotify.ts
|
|
8
8
|
var SpotifyDriver = class extends Oauth2Driver {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Oauth1Driver
|
|
3
|
-
} from "../../chunk-
|
|
4
|
-
import "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
3
|
+
} from "../../chunk-VHORNQLN.js";
|
|
4
|
+
import "../../chunk-N72DEJC2.js";
|
|
5
|
+
import "../../chunk-PZ5AY32C.js";
|
|
6
6
|
|
|
7
7
|
// src/drivers/twitter.ts
|
|
8
8
|
var TwitterDriver = class extends Oauth1Driver {
|
package/build/src/errors.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const E_OAUTH_MISSING_CODE: new (args: [string], options?: ErrorOptions
|
|
2
|
-
export declare const E_OAUTH_STATE_MISMATCH: new (args?: any, options?: ErrorOptions
|
|
1
|
+
export declare const E_OAUTH_MISSING_CODE: new (args: [string], options?: ErrorOptions) => import("@poppinss/utils").Exception;
|
|
2
|
+
export declare const E_OAUTH_STATE_MISMATCH: new (args?: any, options?: ErrorOptions) => import("@poppinss/utils").Exception;
|
package/build/src/types.d.ts
CHANGED
|
@@ -273,6 +273,41 @@ export type LinkedInDriverConfig = Oauth2ClientConfig & {
|
|
|
273
273
|
*/
|
|
274
274
|
scopes?: LiteralStringUnion<LinkedInScopes>[];
|
|
275
275
|
};
|
|
276
|
+
/**
|
|
277
|
+
* ----------------------------------------
|
|
278
|
+
* LinkedIn openid connect driver
|
|
279
|
+
* ----------------------------------------
|
|
280
|
+
*/
|
|
281
|
+
/**
|
|
282
|
+
* Shape of the LinkedIn openid connect access token
|
|
283
|
+
*/
|
|
284
|
+
export type LinkedInOpenidConnectAccessToken = {
|
|
285
|
+
token: string;
|
|
286
|
+
type: 'bearer';
|
|
287
|
+
expiresIn: number;
|
|
288
|
+
expiresAt: Exclude<Oauth2AccessToken['expiresAt'], undefined>;
|
|
289
|
+
};
|
|
290
|
+
/**
|
|
291
|
+
* Config accepted by the linkedIn openid connect driver. Most of the options can be
|
|
292
|
+
* overwritten at runtime
|
|
293
|
+
* https://learn.microsoft.com/en-us/linkedin/consumer/integrations/self-serve/sign-in-with-linkedin-v2#authenticating-members
|
|
294
|
+
*/
|
|
295
|
+
export type LinkedInOpenidConnectScopes = 'openid' | 'profile' | 'email';
|
|
296
|
+
/**
|
|
297
|
+
* The configuration accepted by the driver implementation.
|
|
298
|
+
*/
|
|
299
|
+
export type LinkedInOpenidConnectDriverConfig = {
|
|
300
|
+
clientId: string;
|
|
301
|
+
clientSecret: string;
|
|
302
|
+
callbackUrl: string;
|
|
303
|
+
authorizeUrl?: string;
|
|
304
|
+
accessTokenUrl?: string;
|
|
305
|
+
userInfoUrl?: string;
|
|
306
|
+
/**
|
|
307
|
+
* Can be configured at runtime
|
|
308
|
+
*/
|
|
309
|
+
scopes?: LiteralStringUnion<LinkedInOpenidConnectScopes>[];
|
|
310
|
+
};
|
|
276
311
|
/**
|
|
277
312
|
* ----------------------------------------
|
|
278
313
|
* Facebook driver
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adonisjs/ally",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.1.1",
|
|
4
4
|
"description": "Social authentication provider for AdonisJS",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "build/index.js",
|
|
@@ -17,26 +17,26 @@
|
|
|
17
17
|
"./ally_provider": "./build/providers/ally_provider.js"
|
|
18
18
|
},
|
|
19
19
|
"engines": {
|
|
20
|
-
"node": ">=
|
|
20
|
+
"node": ">=20.6.0"
|
|
21
21
|
},
|
|
22
22
|
"scripts": {
|
|
23
23
|
"pretest": "npm run lint",
|
|
24
24
|
"test": "c8 npm run quick:test",
|
|
25
25
|
"clean": "del-cli build",
|
|
26
26
|
"typecheck": "tsc --noEmit",
|
|
27
|
-
"start": "node --
|
|
27
|
+
"start": "node --import=ts-node-maintained/register/esm examples/app.ts",
|
|
28
28
|
"copy:templates": "copyfiles --up=1 \"stubs/**/*.stub\" build",
|
|
29
29
|
"precompile": "npm run lint && npm run clean",
|
|
30
30
|
"compile": "tsup-node && tsc --emitDeclarationOnly --declaration",
|
|
31
31
|
"postcompile": "npm run copy:templates",
|
|
32
32
|
"build": "npm run compile",
|
|
33
33
|
"prepublishOnly": "npm run build",
|
|
34
|
-
"lint": "eslint .
|
|
34
|
+
"lint": "eslint .",
|
|
35
35
|
"format": "prettier --write .",
|
|
36
|
-
"release": "
|
|
36
|
+
"release": "release-it",
|
|
37
37
|
"version": "npm run build",
|
|
38
38
|
"sync-labels": "github-label-sync --labels .github/labels.json adonisjs/ally",
|
|
39
|
-
"quick:test": "node --enable-source-maps --
|
|
39
|
+
"quick:test": "node --enable-source-maps --import=ts-node-maintained/register/esm bin/test.ts"
|
|
40
40
|
},
|
|
41
41
|
"keywords": [
|
|
42
42
|
"adonis",
|
|
@@ -44,65 +44,83 @@
|
|
|
44
44
|
"social-auth",
|
|
45
45
|
"oauth"
|
|
46
46
|
],
|
|
47
|
-
"author": "adonisjs
|
|
47
|
+
"author": "Harminder Virk <virk@adonisjs.com>",
|
|
48
|
+
"contributors": [
|
|
49
|
+
"Romain Lanz <romain.lanz@pm.me>"
|
|
50
|
+
],
|
|
48
51
|
"license": "MIT",
|
|
49
52
|
"devDependencies": {
|
|
50
|
-
"@adonisjs/assembler": "^7.
|
|
51
|
-
"@adonisjs/core": "^6.
|
|
52
|
-
"@adonisjs/eslint-config": "^1.2
|
|
53
|
-
"@adonisjs/prettier-config": "^1.
|
|
54
|
-
"@adonisjs/tsconfig": "^1.
|
|
55
|
-
"@commitlint/cli": "^
|
|
56
|
-
"@commitlint/config-conventional": "^
|
|
57
|
-
"@japa/assert": "^
|
|
58
|
-
"@japa/expect-type": "^2.0.
|
|
59
|
-
"@japa/file-system": "^2.2
|
|
60
|
-
"@japa/runner": "^
|
|
61
|
-
"@
|
|
62
|
-
"@
|
|
63
|
-
"
|
|
53
|
+
"@adonisjs/assembler": "^7.8.2",
|
|
54
|
+
"@adonisjs/core": "^6.19.0",
|
|
55
|
+
"@adonisjs/eslint-config": "^2.1.2",
|
|
56
|
+
"@adonisjs/prettier-config": "^1.4.5",
|
|
57
|
+
"@adonisjs/tsconfig": "^1.4.1",
|
|
58
|
+
"@commitlint/cli": "^19.8.1",
|
|
59
|
+
"@commitlint/config-conventional": "^19.8.1",
|
|
60
|
+
"@japa/assert": "^4.1.1",
|
|
61
|
+
"@japa/expect-type": "^2.0.3",
|
|
62
|
+
"@japa/file-system": "^2.3.2",
|
|
63
|
+
"@japa/runner": "^4.4.0",
|
|
64
|
+
"@release-it/conventional-changelog": "^10.0.1",
|
|
65
|
+
"@swc/core": "1.13.4",
|
|
66
|
+
"@types/node": "^24.3.0",
|
|
67
|
+
"c8": "^10.1.3",
|
|
64
68
|
"copyfiles": "^2.4.1",
|
|
65
|
-
"del-cli": "^
|
|
66
|
-
"dotenv": "^
|
|
67
|
-
"eslint": "^
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"typescript": "^5.3.3"
|
|
69
|
+
"del-cli": "^6.0.0",
|
|
70
|
+
"dotenv": "^17.2.1",
|
|
71
|
+
"eslint": "^9.33.0",
|
|
72
|
+
"husky": "^9.1.7",
|
|
73
|
+
"nock": "^14.0.10",
|
|
74
|
+
"prettier": "^3.6.2",
|
|
75
|
+
"release-it": "^19.0.4",
|
|
76
|
+
"ts-node-maintained": "^10.9.6",
|
|
77
|
+
"tsup": "^8.5.0",
|
|
78
|
+
"typescript": "^5.9.2"
|
|
76
79
|
},
|
|
77
80
|
"dependencies": {
|
|
78
|
-
"@poppinss/oauth-client": "^
|
|
79
|
-
"@poppinss/utils": "^6.
|
|
81
|
+
"@poppinss/oauth-client": "^7.0.1",
|
|
82
|
+
"@poppinss/utils": "^6.10.1"
|
|
80
83
|
},
|
|
81
84
|
"peerDependencies": {
|
|
82
85
|
"@adonisjs/core": "^6.2.0"
|
|
83
86
|
},
|
|
84
87
|
"repository": {
|
|
85
88
|
"type": "git",
|
|
86
|
-
"url": "git+https://github.com/adonisjs/
|
|
89
|
+
"url": "git+https://github.com/adonisjs/ally.git"
|
|
87
90
|
},
|
|
88
91
|
"bugs": {
|
|
89
|
-
"url": "https://github.com/adonisjs/
|
|
92
|
+
"url": "https://github.com/adonisjs/ally/issues"
|
|
90
93
|
},
|
|
91
|
-
"homepage": "https://github.com/adonisjs/
|
|
94
|
+
"homepage": "https://github.com/adonisjs/ally#readme",
|
|
92
95
|
"publishConfig": {
|
|
93
|
-
"
|
|
94
|
-
"
|
|
96
|
+
"provenance": true,
|
|
97
|
+
"access": "public"
|
|
95
98
|
},
|
|
96
|
-
"
|
|
97
|
-
"
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
99
|
+
"release-it": {
|
|
100
|
+
"git": {
|
|
101
|
+
"requireCleanWorkingDir": true,
|
|
102
|
+
"requireUpstream": true,
|
|
103
|
+
"commitMessage": "chore(release): ${version}",
|
|
104
|
+
"tagAnnotation": "v${version}",
|
|
105
|
+
"push": true,
|
|
106
|
+
"tagName": "v${version}"
|
|
107
|
+
},
|
|
108
|
+
"github": {
|
|
109
|
+
"release": true
|
|
110
|
+
},
|
|
111
|
+
"npm": {
|
|
112
|
+
"publish": true,
|
|
113
|
+
"skipChecks": true
|
|
114
|
+
},
|
|
115
|
+
"plugins": {
|
|
116
|
+
"@release-it/conventional-changelog": {
|
|
117
|
+
"preset": {
|
|
118
|
+
"name": "angular"
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
101
122
|
},
|
|
102
123
|
"prettier": "@adonisjs/prettier-config",
|
|
103
|
-
"eslintConfig": {
|
|
104
|
-
"extends": "@adonisjs/eslint-config/package"
|
|
105
|
-
},
|
|
106
124
|
"commitlint": {
|
|
107
125
|
"extends": [
|
|
108
126
|
"@commitlint/config-conventional"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|