Skip to content

Commit

Permalink
feat(connector): add hugging face connector
Browse files Browse the repository at this point in the history
  • Loading branch information
xiaoyijun committed Apr 26, 2024
1 parent 397dfcd commit fdfc150
Show file tree
Hide file tree
Showing 10 changed files with 876 additions and 113 deletions.
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

0 comments on commit fdfc150

Please sign in to comment.