opaitokens

package module
v1.0.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 30, 2023 License: MIT Imports: 14 Imported by: 0

README

opaitokens

A golang lib to help you to get openai access token and refresh the token

How to use?

if you cant visit openai freely, then you need set HTTP_PROXY and HTTPS_PROXY env before use.

unix/linux/macos

export http_proxy=http://proxy.example.com:port
export https_proxy=http://proxy.example.com:port

windows

set http_proxy=http://proxy.example.com:port
set https_proxy=http://proxy.example.com:port


official account

email := "xxxx@xx.com"
password := "xxxxx"
//false mean you dont want to use fakeopenproxy to login
// you can set it as true, so when you dont have a vps for get your access with fakeopen api proxy
tokens := NewOpaiTokens(email, password, false)
token := tokens.FetchToken()
fmt.Printf("token info: %v\n", token)
accessToken := token.OpenaiToken.AccessToken
// use the access token
fmt.Printf("i am using access token: %v \n", accessToken)

token = tokens.RefreshToken()
fmt.Printf("token info again: %v\n", token)
accessToken = token.RefreshedToken.AccessToken
//use the refresh token
fmt.Println("i am using refresh token: ", accessToken)

official account with MFA

// if you have set MFA to the account, then use this below
email := "xxxx@xx.com"
password := "xxxxx"
mfa := "your mfa code"

tokens := NewOpaiTokensWithMFA(email, password,mfa,false)
token := tokens.FetchToken()
fmt.Printf("token info: %v\n", token)
accessToken := token.OpenaiToken.AccessToken
// use the access token
fmt.Printf("i am using access token: %v \n", accessToken)

token = tokens.RefreshToken()
fmt.Printf("token info again: %v\n", token)
accessToken = token.RefreshedToken.AccessToken
//use the refresh token
fmt.Println("i am using refresh token: ", accessToken)

use share token with ai.fakenopen.com



tokens := FakeOpenTokens{}
account := OpenaiAccount{
    Email:    "xxxx@gmail.com",
    Password: "xx@xx",
    MFA:      "",
}
token, err := tokens.FetchSharedToken(account, "fireinrain")
if err != nil {
    fmt.Println("error: ", err)
}
fmt.Println(token.TokenKey)

use pooled token with ai.fakenopen.com

var accounts []OpenaiAccount
account := OpenaiAccount{
    Email:    "xxxx@gmail.com",
    Password: "xx@xx",
    MFA:      "",
}
accounts = append(accounts, account)
tokens := FakeOpenTokens{}
token, err := tokens.FetchPooledToken(accounts)
if err != nil {
    fmt.Println("error: ", err)
}
fmt.Println(token)

renew shared token for keep pooled token valid

//主动在14天之内刷新所有账号的shared token 来确保pooled token有效
//可以使用
var accounts []OpenaiAccount
    account := OpenaiAccount{
    Email:    "xxxx@gmail.com",
    Password: "xx@xx",
    MFA:      "",
}
accounts = append(accounts, account)
tokens := FakeOpenTokens{}
renewResult, err := tokens.RenewSharedToken(accounts)
if err != nil {
    fmt.Println("error: ", err)
}
fmt.Println(renewResult)

fetch pooled token with official accounts and offline sk keys

var accounts []OpenaiAccount
account := OpenaiAccount{
    Email:    "xxxx@gmail.com",
    Password: "xx@xx",
    MFA:      "",
}
accounts = append(accounts, account)
	
var skKeys []string
skKeys = append(skKeys,"sk-xxxxxx")
tokens := FakeOpenTokens{}
token, err := tokens.FetchMixedPooledToken(accounts,skKeys)
if err != nil {
    fmt.Println("error: ", err)
}
fmt.Println(token)


if you have store the openai refresh token, congratulation! you can use openai official refresh token to get access token and then use in fakeopen fk and pk.

func TestFakeOpenTokens_FetchSharedTokenWithRefreshToken(t *testing.T) {
	openaiAccountEmail := "xxxx@gmail.com"
	openaiRefreshToken := "xxxxxxxx"
	uniqueName := "fireinrain"
	receiver := FakeOpenTokens{}
	token, err := receiver.FetchSharedTokenWithRefreshToken(openaiAccountEmail, openaiRefreshToken, uniqueName)
	if err != nil{
		fmt.Println("error: ", err)
	}
	fmt.Printf("%v\n", token)

}


if you want to get access token by openai session token, here you are.

func TestFakeOpenTokens_FetchAccessTokenBySessionToken(t *testing.T) {
	receiver := &FakeOpenTokens{}
	session_token := "xxxxxxxxxxx"
	token, err := receiver.FetchAccessTokenBySessionToken(session_token)
	if err != nil {
		println("error: ", err)
	}
	fmt.Println(token.AccessToken)
}



Note that every function with suffic "WithRefreshToken" will use openai official refresh token to get access token and then use in fakeopen fk and pk.

Thanks for Cloudflare Platform.

cloudflare

You can use cloudflare free cdn to speed your website. And if necessary, choose the pro subscription. Cloudflare

Documentation

Index

Constants

View Source
const DefaultSharedTokenUniqueName = "fireinrain"

DefaultSharedTokenUniqueName depreacted because it's used for me testing

View Source
const OpenaiTokenBaseUrl = "https://auth0.openai.com/oauth/token"
View Source
const PooledTokenAccountsLimit = 100

Variables

This section is empty.

Functions

This section is empty.

Types

type FakeOpenTokens

type FakeOpenTokens struct{}

func (*FakeOpenTokens) FetchAccessTokenBySessionToken added in v1.0.5

func (receiver *FakeOpenTokens) FetchAccessTokenBySessionToken(openaiSessionToken string) (fakeopen.SessionToken, error)

FetchAccessTokenBySessionToken

@Description: 使用openai session token 获取accesstoken
session token 有效期三个月
@receiver receiver
@param openaiSessionToken
@return fakeopen.SessionToken
@return error

func (*FakeOpenTokens) FetchMixedPooledToken added in v1.0.2

func (receiver *FakeOpenTokens) FetchMixedPooledToken(openaiAccounts []OpenaiAccount, openaiSkKeys []string, uniqueName string) (fakeopen.PooledToken, error)

func (*FakeOpenTokens) FetchMixedPooledTokenWithRefreshToken added in v1.0.4

func (receiver *FakeOpenTokens) FetchMixedPooledTokenWithRefreshToken(renewSharedTokenRFTs []RenewSharedTokenRFT, openaiSkKeys []string, uniqueName string) (fakeopen.PooledToken, error)

func (*FakeOpenTokens) FetchPooledToken

func (receiver *FakeOpenTokens) FetchPooledToken(openaiAccounts []OpenaiAccount, uniqueName string) (fakeopen.PooledToken, error)

FetchPooledToken

@Description: 通过官方账号列表获取pooled token
@receiver receiver
@param openaiAccounts
@return fakeopen.PooledToken
@return error

func (*FakeOpenTokens) FetchPooledTokenWithRefreshToken added in v1.0.4

func (receiver *FakeOpenTokens) FetchPooledTokenWithRefreshToken(renewSharedTokenRFTs []RenewSharedTokenRFT, uniqueName string) (fakeopen.PooledToken, error)

FetchPooledTokenWithRefreshToken

@Description: 使用openai 官方的refresh token 获取fakeopen的pool token
@receiver receiver
@param renewSharedTokenRFTs
@param uniqueName
@return fakeopen.PooledToken
@return error

func (*FakeOpenTokens) FetchSharedToken

func (receiver *FakeOpenTokens) FetchSharedToken(openaiAccount OpenaiAccount, uniqueName string) (fakeopen.SharedToken, error)

FetchSharedToken

@Description: 通过官方账号获取shared token
@receiver receiver
@param openaiAccount
@param uniqueName
@return fakeopen.SharedToken
@return error

func (FakeOpenTokens) FetchSharedTokenWithRefreshToken added in v1.0.4

func (receiver FakeOpenTokens) FetchSharedTokenWithRefreshToken(openaiAccountEmail string, openaiRefreshToken string, uniqueName string) (fakeopen.SharedToken, error)

FetchSharedTokenWithRefreshToken

@Description: 使用openai官方的refresh token来获取fakeopen的share token
@receiver receiver
@param openaiAccountEmail
@param openaiRefreshToken
@param uniqueName
@return fakeopen.SharedToken
@return error

func (*FakeOpenTokens) RenewSharedToken

func (receiver *FakeOpenTokens) RenewSharedToken(openaiAccounts []OpenaiAccount, uniqueName string) (RenewResult, error)

RenewSharedToken shared token = hash(unique_name + access token uid)

@Description: 刷新所有账号的fk(在14天到期之前主动刷新账号池的fk来确保pk保持不变)
@receiver receiver
@param openaiAccounts
@return RenewResult
@return error

func (*FakeOpenTokens) RenewSharedTokenWithRefreshToken added in v1.0.4

func (receiver *FakeOpenTokens) RenewSharedTokenWithRefreshToken(renewSharedTokenRFTs []RenewSharedTokenRFT, uniqueName string) (RenewResult, error)

RenewSharedTokenWithRefreshToken

@Description: 使用refreshtoken 刷新shared token
@receiver receiver
@param renewSharedTokenRFTs
@param uniqueName
@return RenewResult
@return error

type OpaiTokens

type OpaiTokens struct {
	Email            string                     `json:"email"`
	Password         string                     `json:"password"`
	MFA              string                     `json:"mfa"`
	OpenaiToken      model.OpenaiToken          `json:"openaiToken"`
	RefreshedToken   model.OpenaiRefreshedToken `json:"refreshedToken"`
	UseFakeopenProxy bool                       `json:"useFakeopenProxy"`
}

func NewOpaiTokens

func NewOpaiTokens(email string, password string, useFakeOpenProxy bool) *OpaiTokens

func NewOpaiTokensWithMFA

func NewOpaiTokensWithMFA(email string, password string, mfa string, useFakeOpenProxy bool) *OpaiTokens

func (*OpaiTokens) FetchToken

func (receiver *OpaiTokens) FetchToken() *OpaiTokens

func (*OpaiTokens) RefreshToken

func (receiver *OpaiTokens) RefreshToken() *OpaiTokens

type OpenaiAccount

type OpenaiAccount struct {
	Email    string `json:"email"`
	Password string `json:"password"`
	MFA      string `json:"mfa"`
}

type RenewResult

type RenewResult struct {
	RenewCount   int  `json:"renew_count"`
	RenewSuccess bool `json:"renew_success"`
}

type RenewSharedTokenRFT added in v1.0.4

type RenewSharedTokenRFT struct {
	OpenaiAccountEmail string
	OpenaiRefreshToken string
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL