SDK GitHub-termasuk-semua-termasuk untuk browser, Node.js, dan Deno.
Paket octokit mengintegrasikan tiga perpustakaan octokit utama
Octokitoctokit.rest Metode Endpointoctokit.request()| Browser | Muat octokit langsung dari esm.sh < script type =" module " >
import { Octokit , App } from "https://esm.sh/octokit" ;
</ script > |
|---|---|
| Deno | Muat octokit langsung dari esm.sh import { Octokit , App } from "https://esm.sh/octokit?dts" ; |
| Node | Instal dengan import { Octokit , App } from "octokit" ; |
Penting
Saat kami menggunakan ekspor bersyarat, Anda perlu menyesuaikan tsconfig.json Anda dengan mengatur "moduleResolution": "node16", "module": "node16" .
Lihat dokumen TypeScript di package.json "Ekspor".
Lihat panduan bermanfaat ini tentang transisi ke ESM dari @sindresorhus
Octokit Octokit minimal mandiri : @octokit/core .
Klien Octokit dapat digunakan untuk mengirim permintaan ke Github's REST API dan kueri ke GraphQL API GitHub.
Contoh : Dapatkan nama pengguna untuk pengguna yang diautentikasi.
// Create a personal access token at https://github.com/settings/tokens/new?scopes=repo
const octokit = new Octokit ( { auth : `personal-access-token123` } ) ;
// Compare: https://docs.github.com/en/rest/reference/users#get-the-authenticated-user
const {
data : { login } ,
} = await octokit . rest . users . getAuthenticated ( ) ;
console . log ( "Hello, %s" , login ) ;Pilihan yang paling umum digunakan adalah
| nama | jenis | keterangan |
|---|---|---|
userAgent | String | Mengatur agen pengguna diperlukan untuk semua permintaan yang dikirim ke API platform GitHub. Agen pengguna default untuk sesuatu seperti ini: const octokit = new Octokit ( {
userAgent : "my-app/v1.2.3" ,
} ) ; |
authStrategy | Function | Default ke Lihat otentikasi di bawah ini. |
auth | String atau Object | Atur ke token akses pribadi kecuali Anda mengubah opsi Lihat otentikasi di bawah ini. |
baseUrl | String | Saat menggunakan dengan GitHub Enterprise Server, atur const octokit = new Octokit ( {
baseUrl : "https://github.acme-inc.com/api/v3" ,
} ) ; |
Opsi lanjutan
| nama | jenis | keterangan |
|---|---|---|
request | Object |
Hanya simpul
Opsi |
timeZone | String | Mengatur header const octokit = new Octokit ( {
timeZone : "America/Los_Angeles" ,
} ) ;Header zona waktu akan menentukan zona waktu yang digunakan untuk menghasilkan cap waktu saat membuat komit. Lihat Dokumentasi TimeZones GitHub. |
throttle | Object | Secara default, permintaan diceritakan kembali sekali dan peringatan dicatat jika mencapai tarif atau batas tarif sekunder. {
onRateLimit : ( retryAfter , options , octokit ) => {
octokit . log . warn (
`Request quota exhausted for request ${ options . method } ${ options . url } `
) ;
if ( options . request . retryCount === 0 ) {
// only retries once
octokit . log . info ( `Retrying after ${ retryAfter } seconds!` ) ;
return true ;
}
} ,
onSecondaryRateLimit : ( retryAfter , options , octokit ) => {
octokit . log . warn (
`SecondaryRateLimit detected for request ${ options . method } ${ options . url } `
) ;
if ( options . request . retryCount === 0 ) {
// only retries once
octokit . log . info ( `Retrying after ${ retryAfter } seconds!` ) ;
return true ;
}
} ,
} ;Untuk memilih keluar dari fitur ini: new Octokit ( { throttle : { enabled : false } } ) ; Throttling dalam sebuah cluster didukung menggunakan backend Redis. Lihat |
retry | Object | Untuk memilih keluar dari fitur ini: new Octokit ( { retry : { enabled : false } } ) ; |
Secara default, klien API Octokit mendukung otentikasi menggunakan token statis.
Ada berbagai cara otentikasi yang didukung oleh GitHub, yang dijelaskan secara rinci di octokit/otentikasi-strategi.js. Anda dapat mengatur masing -masing sebagai opsi konstruktor authStrategy , dan melewati opsi strategi sebagai opsi konstruktor auth .
Misalnya, untuk mengotentikasi sebagai instalasi aplikasi GitHub:
import { createAppAuth } from "@octokit/auth-app" ;
const octokit = new Octokit ( {
authStrategy : createAppAuth ,
auth : {
appId : 1 ,
privateKey : "-----BEGIN PRIVATE KEY-----n..." ,
installationId : 123 ,
} ,
} ) ;
// authenticates as app based on request URLs
const {
data : { slug } ,
} = await octokit . rest . apps . getAuthenticated ( ) ;
// creates an installation access token as needed
// assumes that installationId 123 belongs to @octocat, otherwise the request will fail
await octokit . rest . issues . create ( {
owner : "octocat" ,
repo : "hello-world" ,
title : "Hello world from " + slug ,
} ) ; Anda dapat menggunakan App atau SDK OAuthApp yang menyediakan API dan kabel internal untuk mencakup sebagian besar kasus penggunaan.
Misalnya, untuk mengimplementasikan App menggunakan di atas
const app = new App ( { appId , privateKey } ) ;
const { data : slug } = await app . octokit . rest . apps . getAuthenticated ( ) ;
const octokit = await app . getInstallationOctokit ( 123 ) ;
await octokit . rest . issues . create ( {
owner : "octocat" ,
repo : "hello-world" ,
title : "Hello world from " + slug ,
} ) ;Pelajari lebih lanjut tentang cara kerja strategi otentikasi atau cara membuat sendiri.
Secara default, klien API Octokit tidak memanfaatkan variabel lingkungan server proxy standar. Untuk menambahkan dukungan untuk server proxy, Anda perlu menyediakan klien HTTPS yang mendukung mereka seperti undici.ProxyAgent() .
Misalnya, ini akan menggunakan ProxyAgent untuk membuat permintaan melalui server proxy:
import { fetch as undiciFetch , ProxyAgent } from 'undici' ;
const myFetch = ( url , options ) => {
return undiciFetch ( url , {
... options ,
dispatcher : new ProxyAgent ( < your_proxy_url > )
} )
}
const octokit = new Octokit ( {
request : {
fetch : myFetch
} ,
} ) ; Jika Anda menulis modul yang menggunakan Octokit dan dirancang untuk digunakan oleh orang lain, Anda harus memastikan bahwa konsumen dapat memberikan agen alternatif untuk Octokit Anda atau sebagai parameter untuk panggilan tertentu seperti:
import { fetch as undiciFetch , ProxyAgent } from 'undici' ;
const myFetch = ( url , options ) => {
return undiciFetch ( url , {
... options ,
dispatcher : new ProxyAgent ( < your_proxy_url > )
} )
}
octokit . rest . repos . get ( {
owner ,
repo ,
request : {
fetch : myFetch
} ,
} ) ; Jika Anda mendapatkan kesalahan berikut:
Fetch tidak diatur. Harap berikan implementasi pengambilan sebagai octokit baru ({request: {fetch}}).
Ini mungkin berarti Anda mencoba menjalankan Octokit dengan versi nodeJs yang tidak didukung. Octokit membutuhkan simpul 18 atau lebih tinggi, yang mencakup API fetch asli.
Untuk memotong masalah ini, Anda dapat memberikan implementasi fetch sendiri (atau versi bawaan seperti node-fetch ) seperti ini:
import fetch from "node-fetch" ;
const octokit = new Octokit ( {
request : {
fetch : fetch ,
} ,
} ) ; Ada dua cara menggunakan API REST GitHub, octokit.rest.* Metode titik akhir dan octokit.request . Keduanya bertindak dengan cara yang sama, metode octokit.rest.* Baru saja ditambahkan untuk kenyamanan, mereka menggunakan octokit.request secara internal.
Misalnya
await octokit . rest . issues . create ( {
owner : "octocat" ,
repo : "hello-world" ,
title : "Hello, world!" ,
body : "I created this issue using Octokit!" ,
} ) ;Sama seperti
await octokit . request ( "POST /repos/{owner}/{repo}/issues" , {
owner : "octocat" ,
repo : "hello-world" ,
title : "Hello, world!" ,
body : "I created this issue using Octokit!" ,
} ) ; Dalam kedua kasus, permintaan yang diberikan diautentikasi, diingat kembali, dan dicekik secara transparan oleh instance octokit yang juga mengelola header accept dan user-agent sesuai kebutuhan.
octokit.request dapat digunakan untuk mengirim permintaan ke domain lain dengan meloloskan URL penuh dan untuk mengirim permintaan ke titik akhir yang belum didokumentasikan dalam dokumentasi API REST GitHub.
octokit.rest Metode Endpoint Setiap titik akhir API GITHUB REST memiliki metode octokit.rest . Lihat @octokit/plugin-rest-endpoint-methods untuk detail lengkap.
Contoh: Buat masalah
await octokit . rest . issues . create ( {
owner : "octocat" ,
repo : "hello-world" ,
title : "Hello, world!" ,
body : "I created this issue using Octokit!" ,
} ) ; Metode titik akhir octokit.rest dihasilkan secara otomatis dari spesifikasi OpenAPI GitHub. Kami melacak ID operasi dan perubahan nama parameter untuk mengimplementasikan peringatan penyusutan dan mengurangi frekuensi perubahan perubahan.
Di bawah sampulnya, setiap metode titik akhir hanyalah octokit.request dengan set default, sehingga mendukung parameter yang sama serta API .endpoint() .
octokit.request() Anda dapat menghubungi API REST GITHUB secara langsung menggunakan octokit.request . API request cocok dengan dokumentasi API REST GITHUB 1: 1 Jadi apa pun yang Anda lihat di sana, Anda dapat menelepon menggunakan request . Lihat @octokit/request untuk semua detailnya.
Contoh: Buat masalah

Panggilan API octokit.request yang sesuai dengan dokumentasi pembuatan masalah itu terlihat seperti ini:
// https://docs.github.com/en/rest/reference/issues#create-an-issue
await octokit . request ( "POST /repos/{owner}/{repo}/issues" , {
owner : "octocat" ,
repo : "hello-world" ,
title : "Hello, world!" ,
body : "I created this issue using Octokit!" ,
} ) ;Argumen pertama adalah rute API REST sebagaimana tercantum dalam dokumentasi API GitHub. Argumen ke -2 adalah objek dengan semua parameter, terlepas dari apakah mereka digunakan dalam jalur, permintaan, atau tubuh.
Semua titik akhir REST API yang paginat mengembalikan 30 item pertama secara default. Jika Anda ingin mengambil semua item, Anda dapat menggunakan API pagination. API pagination mengharapkan rute API REST sebagai argumen pertama, tetapi Anda juga dapat melewati salah satu octokit.rest.*.list* metode untuk kenyamanan dan keterbacaan kode yang lebih baik.
Contoh: iterate melalui semua masalah dalam repositori
const iterator = octokit . paginate . iterator ( octokit . rest . issues . listForRepo , {
owner : "octocat" ,
repo : "hello-world" ,
per_page : 100 ,
} ) ;
// iterate through each response
for await ( const { data : issues } of iterator ) {
for ( const issue of issues ) {
console . log ( "Issue #%d: %s" , issue . number , issue . title ) ;
}
}Menggunakan iterator async adalah cara paling efisien memori untuk mengulangi semua item. Tetapi Anda juga dapat mengambil semua item dalam satu panggilan
const issues = await octokit . paginate ( octokit . rest . issues . listForRepo , {
owner : "octocat" ,
repo : "hello-world" ,
per_page : 100 ,
} ) ; Format tipe media dapat diatur menggunakan mediaType: { format } pada setiap permintaan.
Contoh: Ambil konten mentah dari file package.json
const { data } = await octokit . rest . repos . getContent ( {
mediaType : {
format : "raw" ,
} ,
owner : "octocat" ,
repo : "hello-world" ,
path : "package.json" ,
} ) ;
console . log ( "package name: %s" , JSON . parse ( data ) . name ) ;Pelajari lebih lanjut tentang format jenis media.
Modul mandiri: @octokit/request-error
Untuk penanganan kesalahan permintaan, impor RequestError dan gunakan try...catch .
import { RequestError } from "octokit" ; try {
// your code here that sends at least one Octokit request
await octokit . request ( "GET /" ) ;
} catch ( error ) {
// Octokit errors are instances of RequestError, so they always have an `error.status` property containing the HTTP response code.
if ( error instanceof RequestError ) {
// handle Octokit error
// error.message; // Oops
// error.status; // 500
// error.request; // { method, url, headers, body }
// error.response; // { url, status, headers, data }
} else {
// handle all other errors
throw error ;
}
} Octokit juga mendukung GraphQL API GitHub secara langsung - Anda dapat menggunakan kueri yang sama yang ditunjukkan dalam dokumentasi dan tersedia di GraphQL Explorer dalam panggilan Anda dengan octokit.graphql .
Contoh: Dapatkan login pengguna yang diautentikasi
const {
viewer : { login } ,
} = await octokit . graphql ( `{
viewer {
login
}
}` ) ;Variabel dapat dilewati sebagai argumen ke -2
const { lastIssues } = await octokit . graphql (
`
query lastIssues($owner: String!, $repo: String!, $num: Int = 3) {
repository(owner: $owner, name: $repo) {
issues(last: $num) {
edges {
node {
title
}
}
}
}
}
` ,
{
owner : "octokit" ,
repo : "graphql.js" ,
} ,
) ; GraphQL API GitHub mengembalikan maksimal 100 item. Jika Anda ingin mengambil semua item, Anda dapat menggunakan API pagination.
Contoh: Dapatkan semua masalah
const { allIssues } = await octokit . graphql . paginate (
`
query allIssues($owner: String!, $repo: String!, $num: Int = 10, $cursor: String) {
repository(owner: $owner, name: $repo) {
issues(first: $num, after: $cursor) {
edges {
node {
title
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
}
` ,
{
owner : "octokit" ,
repo : "graphql.js" ,
} ,
) ;Pelajari lebih lanjut tentang penggunaan pagination graphql GitHub.
Pratinjau dapat diaktifkan menggunakan opsi {mediaType: previews: [] } .
Contoh: Buat label
await octokit . graphql (
`mutation createLabel($repositoryId:ID!,name:String!,color:String!) {
createLabel(input:{repositoryId:$repositoryId,name:$name}) {
label: {
id
}
}
}` ,
{
repositoryId : 1 ,
name : "important" ,
color : "cc0000" ,
mediaType : {
previews : [ "bane" ] ,
} ,
} ,
) ;Pelajari lebih lanjut tentang pratinjau skema graphql github
Klien App menggabungkan fitur untuk aplikasi gitub, webhook, dan oauth
Modul mandiri : @octokit/app
Untuk integrator, aplikasi GitHub adalah sarana otentikasi dan otorisasi. Aplikasi GitHub dapat didaftarkan pada akun pengguna atau organisasi GitHub. Pendaftaran aplikasi GitHub mendefinisikan serangkaian izin dan acara webhooks yang ingin diterima dan memberikan serangkaian kredensial sebagai imbalan. Pengguna dapat memberikan akses ke repositori dengan menginstalnya.
Beberapa titik akhir API memerlukan aplikasi GitHub untuk mengotentikasi dengan sendirinya menggunakan JSON Web Token (JWT). Untuk permintaan yang mempengaruhi instalasi, token akses instalasi harus dibuat menggunakan kredensial aplikasi dan ID instalasi.
Klien App mengurus semua itu untuk Anda.
Contoh: pengiriman acara repositori di setiap repositori yang diinstal pada aplikasi
import { App } from "octokit" ;
const app = new App ( { appId , privateKey } ) ;
for await ( const { octokit , repository } of app . eachRepository . iterator ( ) ) {
// https://docs.github.com/en/rest/reference/repos#create-a-repository-dispatch-event
await octokit . rest . repos . createDispatchEvent ( {
owner : repository . owner . login ,
repo : repository . name ,
event_type : "my_event" ,
client_payload : {
foo : "bar" ,
} ,
} ) ;
console . log ( "Event dispatched for %s" , repository . full_name ) ;
} Contoh: Dapatkan instance octokit yang diautentikasi sebagai instalasi
const octokit = await app . getInstallationOctokit ( 123 ) ;Pelajari lebih lanjut tentang aplikasi.
Modul mandiri : @octokit/webhooks
Saat menginstal aplikasi, acara yang diminta pendaftaran aplikasi akan dikirim sebagai permintaan ke URL WebHook yang ditetapkan dalam pendaftaran aplikasi.
Permintaan acara Webhook ditandatangani menggunakan Webhook Secret, yang juga merupakan bagian dari pendaftaran aplikasi. Anda harus memverifikasi rahasia itu sebelum menangani muatan permintaan.
app.webhooks.* API menyediakan metode untuk menerima, memverifikasi, dan menangani acara webhook.
Contoh: Buat komentar tentang masalah baru
import { createServer } from "node:http" ;
import { App , createNodeMiddleware } from "octokit" ;
const app = new App ( {
appId ,
privateKey ,
webhooks : { secret } ,
} ) ;
app . webhooks . on ( "issues.opened" , ( { octokit , payload } ) => {
return octokit . rest . issues . createComment ( {
owner : payload . repository . owner . login ,
repo : payload . repository . name ,
issue_number : payload . issue . number ,
body : "Hello, World!" ,
} ) ;
} ) ;
// Your app can now receive webhook events at `/api/github/webhooks`
createServer ( createNodeMiddleware ( app ) ) . listen ( 3000 ) ;Untuk lingkungan tanpa server, Anda dapat secara eksplisit memverifikasi dan menerima suatu acara
await app . webhooks . verifyAndReceive ( {
id : request . headers [ "x-github-delivery" ] ,
name : request . headers [ "x-github-event" ] ,
signature : request . headers [ "x-hub-signature-256" ] ,
payload : request . body ,
} ) ;Pelajari lebih lanjut tentang GitHub Webhooks.
Modul mandiri: @octokit/oauth-app
Baik aplikasi OAuth dan aplikasi github mendukung pengguna GitHub yang mengotentikasi menggunakan OAuth, lihat mengesahkan aplikasi OAuth dan mengidentifikasi dan mengesahkan pengguna untuk aplikasi GitHub.
Ada beberapa perbedaan:
App adalah untuk aplikasi github. Jika Anda membutuhkan fungsionalitas khusus aplikasi OAuth, gunakan OAuthApp sebagai gantinya.
Contoh: Tonton repositori saat pengguna log dalam menggunakan OAuth Web Flow
import { createServer } from "node:http" ;
import { App , createNodeMiddleware } from "octokit" ;
const app = new App ( {
oauth : { clientId , clientSecret } ,
} ) ;
app . oauth . on ( "token.created" , async ( { token , octokit } ) => {
await octokit . rest . activity . setRepoSubscription ( {
owner : "octocat" ,
repo : "hello-world" ,
subscribed : true ,
} ) ;
} ) ;
// Your app can receive the OAuth redirect at /api/github/oauth/callback
// Users can initiate the OAuth web flow by opening /api/github/oauth/login
createServer ( createNodeMiddleware ( app ) ) . listen ( 3000 ) ; Untuk lingkungan tanpa server, Anda dapat secara eksplisit menukar code dari arus web OAuth mengarahkan untuk token akses. app.oauth.createToken() mengembalikan objek otentikasi dan memancarkan acara "token.created".
const { token } = await app . oauth . createToken ( {
code : request . query . code ,
} ) ;Contoh: Buat token menggunakan aliran perangkat.
const { token } = await app . oauth . createToken ( {
async onVerification ( verification ) {
await sendMessageToUser (
request . body . phoneNumber ,
`Your code is ${ verification . user_code } . Enter it at ${ verification . verification_uri } ` ,
) ;
} ,
} ) ;Contoh: Buat server aplikasi OAuth dengan lingkup default
import { createServer } from "node:http" ;
import { OAuthApp , createNodeMiddleware } from "octokit" ;
const app = new OAuthApp ( {
clientId ,
clientSecret ,
defaultScopes : [ "repo" , "gist" ] ,
} ) ;
app . oauth . on ( "token" , async ( { token , octokit } ) => {
await octokit . rest . gists . create ( {
description : "I created this gist using Octokit!" ,
public : true ,
files : {
"example.js" : `/* some code here */` ,
} ,
} ) ;
} ) ;
// Your app can receive the OAuth redirect at /api/github/oauth/callback
// Users can initiate the OAuth web flow by opening /api/oauth/login
createServer ( createNodeMiddleware ( app ) ) . listen ( 3000 ) ;Setelah mendaftarkan aplikasi GitHub Anda, Anda perlu membuat dan menggunakan server yang dapat mengambil permintaan acara WebHook dari GitHub serta menerima pengalihan dari aliran web pengguna OAuth.
Cara paling sederhana untuk membuat server seperti itu adalah dengan menggunakan createNodeMiddleware() , ia bekerja dengan keduanya, metode http.createServer() Node serta middleware ekspres.
Rute default yang diekspos middleware
| Rute | Deskripsi rute |
|---|---|
POST /api/github/webhooks | Titik akhir untuk menerima permintaan acara GitHub Webhook |
GET /api/github/oauth/login | Redirect ke titik akhir otorisasi GitHub. Menerima parameter kueri Optional ?state dan ?scopes . ?scopes adalah daftar nama lingkup OAuth yang dipisahkan secara koma |
GET /api/github/oauth/callback | Titik akhir pengalihan klien. Di sinilah acara token dipicu |
POST /api/github/oauth/token | Bertukar kode otorisasi untuk token akses oAuth. Jika berhasil, acara token dipicu. |
GET /api/github/oauth/token | Periksa apakah token valid. Harus mengotentikasi menggunakan token di header Authorization . Menggunakan POST /applications/{client_id}/token Endpoint |
PATCH /api/github/oauth/token | Mengatur ulang token (membatalkan saat ini, mengembalikan token baru). Harus mengotentikasi menggunakan token di header Authorization . Menggunakan PATCH /applications/{client_id}/token Endpoint. |
PATCH /api/github/oauth/refresh-token | Menyegarkan token yang kedaluwarsa (tidak valid saat ini, mengembalikan token akses baru dan menyegarkan token). Harus mengotentikasi menggunakan token di header Authorization . Menggunakan POST https://github.com/login/oauth/access_token oauth endpoint. |
POST /api/github/oauth/token/scoped | Membuat token tertutup (tidak membatalkan yang saat ini). Harus mengotentikasi menggunakan token di header Authorization . Menggunakan POST /applications/{client_id}/token/scoped Endpoint. |
DELETE /api/github/oauth/token | Membatalkan token saat ini, pada dasarnya setara dengan logout. Harus mengotentikasi menggunakan token di header Authorization . |
DELETE /api/github/oauth/grant | Mencabut hibah pengguna, pada dasarnya setara dengan uninstall. harus mengotentikasi menggunakan token di header Authorization . |
Contoh: Buat server github dengan ekspres
import express from "express" ;
import { App , createNodeMiddleware } from "octokit" ;
const expressApp = express ( ) ;
const octokitApp = new App ( {
appId ,
privateKey ,
webhooks : { secret } ,
oauth : { clientId , clientSecret } ,
} ) ;
expressApp . use ( createNodeMiddleware ( app ) ) ;
expressApp . listen ( 3000 , ( ) => {
console . log ( `Example app listening at http://localhost:3000` ) ;
} ) ; Anda tidak boleh mengekspos rahasia klien aplikasi Anda kepada pengguna, sehingga Anda tidak dapat menggunakan konstruktor App . Sebagai gantinya, Anda harus membuat server menggunakan konstruktor App yang memperlihatkan rute /api/github/oauth/* , yang melaluinya Anda dapat dengan aman mengimplementasikan login OAuth untuk aplikasi yang berjalan di browser web.
Jika Anda mengatur (User) Authorization callback URL ke aplikasi Anda sendiri, maka Anda perlu membaca ?code=...&state=... parameter kueri, bandingkan parameter state dengan nilai yang dikembalikan oleh app.oauthLoginUrl() sebelumnya untuk melindungi terhadap serangan pemalsuan, kemudian bertukar code untuk token otorisasi oAuth.
Jika Anda menjalankan server aplikasi seperti yang dijelaskan di atas, rute default yang harus dilakukan adalah POST /api/github/oauth/token .
Setelah Anda berhasil mengambil token, itu juga disarankan untuk menghapus ?code=...&state=... parameter kueri dari URL browser
const code = new URL ( location . href ) . searchParams . get ( "code" ) ;
if ( code ) {
// remove ?code=... from URL
const path =
location . pathname +
location . search . replace ( / b(code|state)=w+ / g , "" ) . replace ( / [?&]+$ / , "" ) ;
history . replaceState ( { } , "" , path ) ;
// exchange the code for a token with your backend.
// If you use https://github.com/octokit/oauth-app.js
// the exchange would look something like this
const response = await fetch ( "/api/github/oauth/token" , {
method : "POST" ,
headers : {
"content-type" : "application/json" ,
} ,
body : JSON . stringify ( { code } ) ,
} ) ;
const { token } = await response . json ( ) ;
// `token` is the OAuth Access Token that can be use
const { Octokit } = await import ( "https://esm.sh/@octokit/core" ) ;
const octokit = new Octokit ( { auth : token } ) ;
const {
data : { login } ,
} = await octokit . request ( "GET /user" ) ;
alert ( "Hi there, " + login ) ;
} ? Kami sedang mengerjakan @octokit/auth-oauth-user-client untuk memberikan API sederhana untuk semua metode yang terkait dengan token pengguna oAuth.
Rencananya adalah untuk menambahkan rute baru GET /api/github/oauth/octokit.js ke node middleware yang akan mengembalikan file JavaScript yang dapat diimpor ke file HTML. Ini akan membuat instance octokit pra-authentikasi tersedia.
Modul mandiri: @octokit/action
? Klien Action yang sepenuhnya tertunda sedang menunggu. Anda dapat menggunakan @actions/github untuk saat ini
Mit