Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(connector): add hugging face connector #5797

Merged
merged 1 commit into from
May 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/nasty-dots-lie.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@logto/connector-huggingface": minor
---

add Hugging Face social connector
7 changes: 4 additions & 3 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,20 +39,21 @@
"CIAM",
"codecov",
"hasura",
"huggingface",
"Logto",
"mailgun",
"oidc",
"passcode",
"passcodes",
"Passwordless",
"pnpm",
"sendgrid",
"silverhand",
"slonik",
"stylelint",
"timestamptz",
"topbar",
"withtyped",
"sendgrid",
"mailgun",
"upsell",
"withtyped"
]
}
64 changes: 64 additions & 0 deletions packages/connectors/connector-huggingface/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Hugging Face connector

The official Logto connector for Hugging Face social sign-in.

**Table of contents**

- [Hugging Face connector](#hugging-face-connector)
- [Get started](#get-started)
- [Sign in with Hugging Face account](#sign-in-with-hugging-face-account)
- [Create an OAuth app in the Hugging Face](#create-an-oauth-app-in-the-hugging-face)
- [Managing Hugging Face OAuth apps](#managing-hugging-face-oauth-apps)
- [Configure your connector](#configure-your-connector)
- [Config types](#config-types)
- [Test Hugging Face connector](#test-hugging-face-connector)
- [Reference](#reference)


## Get started

The Hugging Face connector enables end-users to sign in to your application using their own Hugging Face accounts via Hugging Face OAuth / OpenID connect flow.

## Sign in with Hugging Face account

Go to the [Hugging Face website](https://huggingface.co/) and sign in with your Hugging Face account. You may register a new account if you don't have one.

## Create an OAuth app in the Hugging Face

Follow the [Creating an oauth app](https://huggingface.co/docs/hub/en/oauth#creating-an-oauth-app) guide, and register a new application.

In the creation process, you will need to provide the following information:

- **Application Name**: The name of your application.
- **Homepage URL**: The URL of your application's homepage or landing page.
- **Logo URL**: The URL of your application's logo.
- **Scopes**: The scopes allowed for the OAuth app. For Hugging Face connector, usually use `profile` to get the user's profile information and `email` to get the user's email address. Ensure these scopes are allowed in your Hugging Face OAuth app if you want to use them.
- **Redirect URI**: The URL to redirect the user to after they have authenticated. You can find the redirect URI in the Logto Admin Console when you're creating a Hugging Face connector or in the created Hugging Face connector details page.

## Managing Hugging Face OAuth apps

Go to the [Connected Applications](https://huggingface.co/settings/connected-applications) page, you can add, edit or delete existing OAuth apps.
You can also find `Client ID` and generate `App secrets` in corresponding OAuth app settings pages.

## Configure your connector

Fill out the `clientId` and `clientSecret` field with _Client ID_ and _App Secret_ you've got from OAuth app detail pages mentioned in the previous section.

`scope` is a space-delimited list of [Hugging Face supported scopes](https://huggingface.co/docs/hub/en/oauth#currently-supported-scopes). If not provided, scope defaults to be `profile`. For Hugging Face connector, the scope you may want to use is `profile` and `email`. `profile` scope is required to get the user's profile information, and `email` scope is required to get the user's email address. Ensure you have allowed these scopes in your Hugging Face OAuth app (configured in [Create an OAuth app in the Hugging Face](#create-an-oauth-app-in-the-hugging-face) section).

### Config types

| Name | Type |
|--------------|--------|
| clientId | string |
| clientSecret | string |
| scope | string |


## Test Hugging Face connector

That's it. The Hugging Face connector should be available now. Don't forget to [Enable connector in sign-in experience](https://docs.logto.io/docs/recipes/configure-connectors/social-connector/enable-social-sign-in/).

## Reference

- [Hugging Face - Sign in with Hugging Face](https://huggingface.co/docs/hub/en/oauth#sign-in-with-hugging-face)
19 changes: 19 additions & 0 deletions packages/connectors/connector-huggingface/logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
74 changes: 74 additions & 0 deletions packages/connectors/connector-huggingface/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
{
"name": "@logto/connector-huggingface",
"version": "0.0.0",
"description": "Hugging Face connector implementation.",
"author": "Silverhand Inc. <[email protected]>",
"dependencies": {
"@logto/connector-kit": "workspace:^3.0.0",
"@logto/connector-oauth": "workspace:^1.2.0",
"@silverhand/essentials": "^2.9.0",
"ky": "^1.2.3",
"zod": "^3.22.4"
},
"main": "./lib/index.js",
"module": "./lib/index.js",
"exports": "./lib/index.js",
"license": "MPL-2.0",
"type": "module",
"files": [
"lib",
"docs",
"logo.svg",
"logo-dark.svg"
],
"scripts": {
"precommit": "lint-staged",
"build:test": "rm -rf lib/ && tsc -p tsconfig.test.json --sourcemap",
"build": "rm -rf lib/ && tsc -p tsconfig.build.json --noEmit && rollup -c",
"dev": "tsc -p tsconfig.build.json --watch --preserveWatchOutput --incremental",
"lint": "eslint --ext .ts src",
"lint:report": "pnpm lint --format json --output-file report.json",
"test": "vitest src",
"test:ci": "pnpm run test --silent --coverage",
"prepublishOnly": "pnpm build"
},
"engines": {
"node": "^20.9.0"
},
"eslintConfig": {
"extends": "@silverhand",
"settings": {
"import/core-modules": [
"@silverhand/essentials",
"got",
"nock",
"snakecase-keys",
"zod"
]
}
},
"prettier": "@silverhand/eslint-config/.prettierrc",
"publishConfig": {
"access": "public"
},
"devDependencies": {
"@rollup/plugin-commonjs": "^25.0.7",
"@rollup/plugin-json": "^6.1.0",
"@rollup/plugin-node-resolve": "^15.2.3",
"@rollup/plugin-typescript": "^11.1.6",
"@silverhand/eslint-config": "6.0.1",
"@silverhand/ts-config": "6.0.0",
"@types/node": "^20.11.20",
"@types/supertest": "^6.0.2",
"@vitest/coverage-v8": "^1.4.0",
"eslint": "^8.56.0",
"lint-staged": "^15.0.2",
"nock": "14.0.0-beta.6",
"prettier": "^3.0.0",
"rollup": "^4.12.0",
"rollup-plugin-output-size": "^1.3.0",
"supertest": "^7.0.0",
"typescript": "^5.3.3",
"vitest": "^1.4.0"
}
}
33 changes: 33 additions & 0 deletions packages/connectors/connector-huggingface/src/constant.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import type { ConnectorMetadata } from '@logto/connector-kit';
import { ConnectorPlatform } from '@logto/connector-kit';
import { clientIdFormItem, clientSecretFormItem, scopeFormItem } from '@logto/connector-oauth';

export const authorizationEndpoint = 'https://huggingface.co/oauth/authorize';
export const tokenEndpoint = 'https://huggingface.co/oauth/token';
export const userInfoEndpoint = 'https://huggingface.co/oauth/userinfo';

export const defaultMetadata: ConnectorMetadata = {
id: 'huggingface-universal',
target: 'huggingface',
platform: ConnectorPlatform.Universal,
name: {
en: 'Hugging Face',
},
logo: './logo.svg',
logoDark: null,
description: {
en: 'Hugging Face is a machine learning (ML) and data science platform and community that helps users build, deploy and train machine learning models.',
},
readme: './README.md',
formItems: [
clientIdFormItem,
clientSecretFormItem,
{
...scopeFormItem,
description:
"`profile` is required to get user's profile information, `email` is required to get user's email address. These scopes can be used individually or in combination; if no scopes are specified, `profile` will be used by default.",
},
],
};

export const defaultTimeout = 5000;
Loading
Loading