{"id":20253358,"url":"https://github.com/fireinrain/opaitokens","last_synced_at":"2025-04-10T23:43:07.270Z","repository":{"id":167526647,"uuid":"643156607","full_name":"fireinrain/opaitokens","owner":"fireinrain","description":"A golang lib to help you to get openai access token and refresh the token(一个golang sdk，帮助你更容易的获取openai chatgpt的accessToken :)","archived":false,"fork":false,"pushed_at":"2024-01-17T23:47:53.000Z","size":80,"stargazers_count":74,"open_issues_count":1,"forks_count":16,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-10T23:43:02.257Z","etag":null,"topics":["access","go","golang","openai","openai-api","token"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fireinrain.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-05-20T09:19:34.000Z","updated_at":"2024-10-02T02:49:39.000Z","dependencies_parsed_at":"2023-05-22T19:45:35.925Z","dependency_job_id":"f871aa33-e7cb-4a9c-bc96-bbbf27e94e07","html_url":"https://github.com/fireinrain/opaitokens","commit_stats":null,"previous_names":["fireinrain/opaitokens"],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fireinrain%2Fopaitokens","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fireinrain%2Fopaitokens/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fireinrain%2Fopaitokens/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fireinrain%2Fopaitokens/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fireinrain","download_url":"https://codeload.github.com/fireinrain/opaitokens/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248317726,"owners_count":21083527,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["access","go","golang","openai","openai-api","token"],"created_at":"2024-11-14T10:23:27.330Z","updated_at":"2025-04-10T23:43:07.250Z","avatar_url":"https://github.com/fireinrain.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# opaitokens\nA golang lib to help you to get openai access token and refresh the token\n\n# How to use?\n\n## if you cant visit openai freely, then you need set HTTP_PROXY and HTTPS_PROXY env before use.\n```bash\nunix/linux/macos\n\nexport http_proxy=http://proxy.example.com:port\nexport https_proxy=http://proxy.example.com:port\n\nwindows\n\nset http_proxy=http://proxy.example.com:port\nset https_proxy=http://proxy.example.com:port\n\n\n```\n\n## official account\n```go\nemail := \"xxxx@xx.com\"\npassword := \"xxxxx\"\n//false mean you dont want to use fakeopenproxy to login\n// you can set it as true, so when you dont have a vps for get your access with fakeopen api proxy\ntokens := NewOpaiTokens(email, password, false)\ntoken := tokens.FetchToken()\nfmt.Printf(\"token info: %v\\n\", token)\naccessToken := token.OpenaiToken.AccessToken\n// use the access token\nfmt.Printf(\"i am using access token: %v \\n\", accessToken)\n\ntoken = tokens.RefreshToken()\nfmt.Printf(\"token info again: %v\\n\", token)\naccessToken = token.RefreshedToken.AccessToken\n//use the refresh token\nfmt.Println(\"i am using refresh token: \", accessToken)\n\n```\n\n## official account with MFA\n\n```go\n// if you have set MFA to the account, then use this below\nemail := \"xxxx@xx.com\"\npassword := \"xxxxx\"\nmfa := \"your mfa code\"\n\ntokens := NewOpaiTokensWithMFA(email, password,mfa,false)\ntoken := tokens.FetchToken()\nfmt.Printf(\"token info: %v\\n\", token)\naccessToken := token.OpenaiToken.AccessToken\n// use the access token\nfmt.Printf(\"i am using access token: %v \\n\", accessToken)\n\ntoken = tokens.RefreshToken()\nfmt.Printf(\"token info again: %v\\n\", token)\naccessToken = token.RefreshedToken.AccessToken\n//use the refresh token\nfmt.Println(\"i am using refresh token: \", accessToken)\n\n```\n## use share token with ai.fakenopen.com \n```go\n\n\ntokens := FakeOpenTokens{}\naccount := OpenaiAccount{\n    Email:    \"xxxx@gmail.com\",\n    Password: \"xx@xx\",\n    MFA:      \"\",\n}\ntoken, err := tokens.FetchSharedToken(account, \"fireinrain\")\nif err != nil {\n    fmt.Println(\"error: \", err)\n}\nfmt.Println(token.TokenKey)\n```\n\n\n## use pooled token with ai.fakenopen.com\n\n```go\nvar accounts []OpenaiAccount\naccount := OpenaiAccount{\n    Email:    \"xxxx@gmail.com\",\n    Password: \"xx@xx\",\n    MFA:      \"\",\n}\naccounts = append(accounts, account)\ntokens := FakeOpenTokens{}\ntoken, err := tokens.FetchPooledToken(accounts)\nif err != nil {\n    fmt.Println(\"error: \", err)\n}\nfmt.Println(token)\n\n```\n\n## renew shared token for keep pooled token valid\n```go\n//主动在14天之内刷新所有账号的shared token 来确保pooled token有效\n//可以使用\nvar accounts []OpenaiAccount\n    account := OpenaiAccount{\n    Email:    \"xxxx@gmail.com\",\n    Password: \"xx@xx\",\n    MFA:      \"\",\n}\naccounts = append(accounts, account)\ntokens := FakeOpenTokens{}\nrenewResult, err := tokens.RenewSharedToken(accounts)\nif err != nil {\n    fmt.Println(\"error: \", err)\n}\nfmt.Println(renewResult)\n\n```\n\n## fetch pooled token with official accounts and offline sk keys\n```go\nvar accounts []OpenaiAccount\naccount := OpenaiAccount{\n    Email:    \"xxxx@gmail.com\",\n    Password: \"xx@xx\",\n    MFA:      \"\",\n}\naccounts = append(accounts, account)\n\t\nvar skKeys []string\nskKeys = append(skKeys,\"sk-xxxxxx\")\ntokens := FakeOpenTokens{}\ntoken, err := tokens.FetchMixedPooledToken(accounts,skKeys)\nif err != nil {\n    fmt.Println(\"error: \", err)\n}\nfmt.Println(token)\n\n\n```\n\n## 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.\n```go\nfunc TestFakeOpenTokens_FetchSharedTokenWithRefreshToken(t *testing.T) {\n\topenaiAccountEmail := \"xxxx@gmail.com\"\n\topenaiRefreshToken := \"xxxxxxxx\"\n\tuniqueName := \"fireinrain\"\n\treceiver := FakeOpenTokens{}\n\ttoken, err := receiver.FetchSharedTokenWithRefreshToken(openaiAccountEmail, openaiRefreshToken, uniqueName)\n\tif err != nil{\n\t\tfmt.Println(\"error: \", err)\n\t}\n\tfmt.Printf(\"%v\\n\", token)\n\n}\n\n\n```\n\n## if you want to get access token by openai session token, here you are.\n```go\nfunc TestFakeOpenTokens_FetchAccessTokenBySessionToken(t *testing.T) {\n\treceiver := \u0026FakeOpenTokens{}\n\tsession_token := \"xxxxxxxxxxx\"\n\ttoken, err := receiver.FetchAccessTokenBySessionToken(session_token)\n\tif err != nil {\n\t\tprintln(\"error: \", err)\n\t}\n\tfmt.Println(token.AccessToken)\n}\n\n\n\n```\nNote that every function with suffic \"WithRefreshToken\" will use openai official refresh token to get access token and then use in fakeopen fk and pk.\n\n## Thanks for DartNode Platform.\n![DartNode](./dt.jpg)\n\nGet a free vps for your work, Let's go!\n[DartNode](https://dartnode.com)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffireinrain%2Fopaitokens","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffireinrain%2Fopaitokens","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffireinrain%2Fopaitokens/lists"}