Skip to content

Commit 1fa1d74

Browse files
authored
Add e2e tests + fixes for them (#41)
2 parents 5411f0e + 25a3e49 commit 1fa1d74

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+4408
-430
lines changed

.speakeasy/gen.lock

Lines changed: 78 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
lockVersion: 2.0.0
22
id: 8b6cd71c-ea04-44da-af45-e43968b5928d
33
management:
4-
docChecksum: c8741e08f825c713956bfbdd29d4fdaf
4+
docChecksum: a815b143d071828ce4ab7b3a743ec82c
55
docVersion: 1.0.0
66
speakeasyVersion: 1.642.1
77
generationVersion: 2.731.4
@@ -294,17 +294,24 @@ generatedFiles:
294294
- docs/models/openresponseswebsearchtooltype.md
295295
- docs/models/operations/apitype.md
296296
- docs/models/operations/calldata.md
297-
- docs/models/operations/createapialpharesponsesresponse.md
298-
- docs/models/operations/createapialpharesponsesresponsebody.md
297+
- docs/models/operations/createauthkeyscodecodechallengemethod.md
298+
- docs/models/operations/createauthkeyscodedata.md
299+
- docs/models/operations/createauthkeyscoderequest.md
300+
- docs/models/operations/createauthkeyscoderesponse.md
299301
- docs/models/operations/createcoinbasechargedata.md
300302
- docs/models/operations/createcoinbasechargeresponse.md
301303
- docs/models/operations/createcoinbasechargesecurity.md
302304
- docs/models/operations/createkeysdata.md
303305
- docs/models/operations/createkeyslimitreset.md
304306
- docs/models/operations/createkeysrequest.md
305307
- docs/models/operations/createkeysresponse.md
308+
- docs/models/operations/createresponsesresponse.md
309+
- docs/models/operations/createresponsesresponsebody.md
306310
- docs/models/operations/deletekeysrequest.md
307311
- docs/models/operations/deletekeysresponse.md
312+
- docs/models/operations/exchangeauthcodeforapikeycodechallengemethod.md
313+
- docs/models/operations/exchangeauthcodeforapikeyrequest.md
314+
- docs/models/operations/exchangeauthcodeforapikeyresponse.md
308315
- docs/models/operations/getcreditsresponse.md
309316
- docs/models/operations/getcurrentkeydata.md
310317
- docs/models/operations/getcurrentkeyresponse.md
@@ -489,6 +496,7 @@ generatedFiles:
489496
- docs/sdks/endpoints/README.md
490497
- docs/sdks/generations/README.md
491498
- docs/sdks/models/README.md
499+
- docs/sdks/oauth/README.md
492500
- docs/sdks/parameters/README.md
493501
- docs/sdks/providers/README.md
494502
- docs/sdks/responses/README.md
@@ -518,6 +526,8 @@ generatedFiles:
518526
- src/funcs/modelsCount.ts
519527
- src/funcs/modelsList.ts
520528
- src/funcs/modelsListForUser.ts
529+
- src/funcs/oAuthCreateAuthCode.ts
530+
- src/funcs/oAuthExchangeAuthCodeForAPIKey.ts
521531
- src/funcs/parametersGetParameters.ts
522532
- src/funcs/providersList.ts
523533
- src/hooks/hooks.ts
@@ -651,10 +661,12 @@ generatedFiles:
651661
- src/models/openresponseswebsearchpreview20250311tool.ts
652662
- src/models/openresponseswebsearchpreviewtool.ts
653663
- src/models/openresponseswebsearchtool.ts
654-
- src/models/operations/createapialpharesponses.ts
664+
- src/models/operations/createauthkeyscode.ts
655665
- src/models/operations/createcoinbasecharge.ts
656666
- src/models/operations/createkeys.ts
667+
- src/models/operations/createresponses.ts
657668
- src/models/operations/deletekeys.ts
669+
- src/models/operations/exchangeauthcodeforapikey.ts
658670
- src/models/operations/getcredits.ts
659671
- src/models/operations/getcurrentkey.ts
660672
- src/models/operations/getgeneration.ts
@@ -742,6 +754,8 @@ generatedFiles:
742754
- src/react-query/modelsCount.ts
743755
- src/react-query/modelsList.ts
744756
- src/react-query/modelsListForUser.ts
757+
- src/react-query/oAuthCreateAuthCode.ts
758+
- src/react-query/oAuthExchangeAuthCodeForAPIKey.ts
745759
- src/react-query/parametersGetParameters.ts
746760
- src/react-query/providersList.ts
747761
- src/sdk/analytics.ts
@@ -754,6 +768,7 @@ generatedFiles:
754768
- src/sdk/generations.ts
755769
- src/sdk/index.ts
756770
- src/sdk/models.ts
771+
- src/sdk/oauth.ts
757772
- src/sdk/parameters.ts
758773
- src/sdk/providers.ts
759774
- src/sdk/responses.ts
@@ -1658,4 +1673,63 @@ examples:
16581673
application/json: {"error": {"code": 429, "message": "Rate limit exceeded", "metadata": {"key": "<value>", "key1": "<value>", "key2": "<value>"}}, "user_id": "<id>"}
16591674
"500":
16601675
application/json: {"error": {"code": 500, "message": "Internal Server Error", "metadata": {"key": "<value>"}}, "user_id": "<id>"}
1676+
createResponses:
1677+
speakeasy-default-create-responses:
1678+
requestBody:
1679+
application/json: {"input": [{"type": "message", "role": "user", "content": "Hello, how are you?"}], "instructions": "<value>", "metadata": {"user_id": "123", "session_id": "abc-def-ghi"}, "tools": [{"type": "function", "name": "get_current_weather", "description": "Get the current weather in a given location", "strict": true, "parameters": {"type": "object", "properties": {"location": {"type": "string"}}}}], "tool_choice": {"type": "function", "name": "<value>"}, "parallel_tool_calls": true, "model": "anthropic/claude-4.5-sonnet-20250929", "models": ["<value 1>"], "text": {"format": {"type": "text"}, "verbosity": "medium"}, "reasoning": {"effort": "high", "summary": "auto", "max_tokens": 8661.16, "enabled": true}, "max_output_tokens": null, "temperature": 0.7, "top_p": 0.9, "top_k": 193.77, "prompt_cache_key": "<value>", "previous_response_id": "<id>", "prompt": {"id": "<id>", "variables": {"key": {"type": "input_text", "text": "Hello, how can I help you?"}}}, "include": ["reasoning.encrypted_content"], "background": true, "safety_identifier": "<value>", "store": true, "service_tier": "auto", "truncation": "auto", "stream": false, "provider": {"allow_fallbacks": null, "require_parameters": true, "data_collection": "deny", "zdr": true, "order": ["OpenAI"], "only": ["OpenAI"], "ignore": null, "quantizations": ["fp16"], "sort": "price", "max_price": {"prompt": "1000", "completion": 1000, "image": 1000, "audio": "1000", "request": 1000}, "experimental": {}}, "plugins": [{"id": "file-parser", "max_files": 4870.55, "pdf": {"engine": "mistral-ocr"}}], "user": "Elmer_Yundt72"}
1680+
responses:
1681+
"200":
1682+
application/json: {"id": "resp-abc123", "object": "response", "created_at": 1704067200, "model": "gpt-4", "status": "completed", "output": [{"id": "msg-abc123", "role": "assistant", "type": "message", "status": "completed", "content": [{"type": "output_text", "text": "Hello! How can I help you today?", "annotations": []}]}], "user": "Maria_Zboncak17", "output_text": "<value>", "prompt_cache_key": "<value>", "safety_identifier": "<value>", "error": null, "incomplete_details": null, "usage": {"input_tokens": 10, "input_tokens_details": {"cached_tokens": 0}, "output_tokens": 25, "output_tokens_details": {"reasoning_tokens": 0}, "total_tokens": 35, "cost": 4793.03, "is_byok": false, "cost_details": {"upstream_inference_cost": 2597.96, "upstream_inference_input_cost": 1590.87, "upstream_inference_output_cost": 2325.17}}, "max_tool_calls": 1419.9, "top_logprobs": 1435.99, "max_output_tokens": null, "temperature": null, "top_p": null, "instructions": null, "metadata": null, "tools": [], "tool_choice": "auto", "parallel_tool_calls": true, "prompt": {"id": "<id>", "variables": {"key": {"type": "input_text", "text": "Hello, how can I help you?"}}}, "background": false, "previous_response_id": "<id>", "reasoning": {"effort": "low", "summary": "concise"}, "service_tier": "priority", "store": true, "truncation": "disabled", "text": {"format": {"type": "text"}, "verbosity": "medium"}}
1683+
"400":
1684+
application/json: {"error": {"code": 400, "message": "Invalid request parameters", "metadata": {"key": "<value>", "key1": "<value>"}}, "user_id": "<id>"}
1685+
"401":
1686+
application/json: {"error": {"code": 401, "message": "Missing Authentication header", "metadata": {"key": "<value>"}}, "user_id": "<id>"}
1687+
"402":
1688+
application/json: {"error": {"code": 402, "message": "Insufficient credits. Add more using https://openrouter.ai/credits", "metadata": null}, "user_id": null}
1689+
"404":
1690+
application/json: {"error": {"code": 404, "message": "Resource not found", "metadata": {"key": "<value>", "key1": "<value>"}}, "user_id": "<id>"}
1691+
"408":
1692+
application/json: {"error": {"code": 408, "message": "Operation timed out. Please try again later.", "metadata": {"key": "<value>"}}, "user_id": "<id>"}
1693+
"413":
1694+
application/json: {"error": {"code": 413, "message": "Request payload too large", "metadata": {"key": "<value>"}}, "user_id": "<id>"}
1695+
"422":
1696+
application/json: {"error": {"code": 422, "message": "Invalid argument", "metadata": {"key": "<value>", "key1": "<value>"}}, "user_id": "<id>"}
1697+
"429":
1698+
application/json: {"error": {"code": 429, "message": "Rate limit exceeded", "metadata": {"key": "<value>", "key1": "<value>"}}, "user_id": "<id>"}
1699+
"500":
1700+
application/json: {"error": {"code": 500, "message": "Internal Server Error", "metadata": {"key": "<value>"}}, "user_id": "<id>"}
1701+
"502":
1702+
application/json: {"error": {"code": 502, "message": "Provider returned error", "metadata": {"key": "<value>", "key1": "<value>", "key2": "<value>"}}, "user_id": "<id>"}
1703+
"503":
1704+
application/json: {"error": {"code": 503, "message": "Service temporarily unavailable", "metadata": {"key": "<value>", "key1": "<value>", "key2": "<value>"}}, "user_id": "<id>"}
1705+
"524":
1706+
application/json: {"error": {"code": 524, "message": "Request timed out. Please try again later.", "metadata": {"key": "<value>", "key1": "<value>", "key2": "<value>"}}, "user_id": "<id>"}
1707+
"529":
1708+
application/json: {"error": {"code": 529, "message": "Provider returned error", "metadata": {"key": "<value>", "key1": "<value>", "key2": "<value>"}}, "user_id": "<id>"}
1709+
exchangeAuthCodeForAPIKey:
1710+
speakeasy-default-exchange-auth-code-for-API-key:
1711+
requestBody:
1712+
application/json: {"code": "auth_code_abc123def456", "code_verifier": "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk", "code_challenge_method": "S256"}
1713+
responses:
1714+
"200":
1715+
application/json: {"key": "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", "user_id": "user_2yOPcMpKoQhcd4bVgSMlELRaIah"}
1716+
"400":
1717+
application/json: {"error": {"code": 400, "message": "Invalid request parameters", "metadata": {"key": "<value>", "key1": "<value>"}}, "user_id": "<id>"}
1718+
"403":
1719+
application/json: {"error": {"code": 403, "message": "Only provisioning keys can perform this operation", "metadata": {"key": "<value>"}}, "user_id": "<id>"}
1720+
"500":
1721+
application/json: {"error": {"code": 500, "message": "Internal Server Error", "metadata": null}, "user_id": "<id>"}
1722+
createAuthKeysCode:
1723+
speakeasy-default-create-auth-keys-code:
1724+
requestBody:
1725+
application/json: {"callback_url": "https://myapp.com/auth/callback", "code_challenge": "E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM", "code_challenge_method": "S256", "limit": 100}
1726+
responses:
1727+
"200":
1728+
application/json: {"data": {"id": "auth_code_xyz789", "app_id": 12345, "created_at": "2025-08-24T10:30:00Z"}}
1729+
"400":
1730+
application/json: {"error": {"code": 400, "message": "Invalid request parameters", "metadata": {"key": "<value>"}}, "user_id": "<id>"}
1731+
"401":
1732+
application/json: {"error": {"code": 401, "message": "Missing Authentication header", "metadata": {"key": "<value>", "key1": "<value>", "key2": "<value>"}}, "user_id": null}
1733+
"500":
1734+
application/json: {"error": {"code": 500, "message": "Internal Server Error", "metadata": {"key": "<value>", "key1": "<value>", "key2": "<value>"}}, "user_id": "<id>"}
16611735
examplesVersion: 1.0.2

.speakeasy/gen.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ typescript:
3636
devDependencies:
3737
'@types/node': ^22.13.12
3838
vitest: ^3.2.4
39+
dotenv: ^16.4.7
3940
peerDependencies: {}
4041
additionalPackageJSON: {}
4142
author: OpenRouter

.speakeasy/in.openapi.yaml

Lines changed: 177 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5560,7 +5560,7 @@ components:
55605560
scheme: bearer
55615561
description: API key as bearer token in Authorization header
55625562
paths:
5563-
/api/alpha/responses:
5563+
/responses:
55645564
post:
55655565
x-speakeasy-name-override: send
55665566
x-speakeasy-stream-request-field: stream
@@ -5668,7 +5668,7 @@ paths:
56685668
application/json:
56695669
schema:
56705670
$ref: '#/components/schemas/ProviderOverloadedResponse'
5671-
operationId: createApiAlphaResponses
5671+
operationId: createResponses
56725672
/activity:
56735673
get:
56745674
tags:
@@ -7640,6 +7640,179 @@ paths:
76407640
application/json:
76417641
schema:
76427642
$ref: '#/components/schemas/InternalServerResponse'
7643+
/auth/keys:
7644+
post:
7645+
operationId: exchangeAuthCodeForAPIKey
7646+
tags:
7647+
- OAuth
7648+
summary: Exchange authorization code for API key
7649+
description: Exchange an authorization code from the PKCE flow for a user-controlled API key
7650+
requestBody:
7651+
content:
7652+
application/json:
7653+
schema:
7654+
type: object
7655+
properties:
7656+
code:
7657+
type: string
7658+
description: The authorization code received from the OAuth redirect
7659+
example: auth_code_abc123def456
7660+
code_verifier:
7661+
type: string
7662+
description: The code verifier if code_challenge was used in the authorization request
7663+
example: dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
7664+
code_challenge_method:
7665+
type: string
7666+
nullable: true
7667+
enum:
7668+
- S256
7669+
- plain
7670+
description: The method used to generate the code challenge
7671+
example: S256
7672+
required:
7673+
- code
7674+
example:
7675+
code: auth_code_abc123def456
7676+
code_verifier: dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
7677+
code_challenge_method: S256
7678+
required: true
7679+
responses:
7680+
'200':
7681+
description: Successfully exchanged code for an API key
7682+
content:
7683+
application/json:
7684+
schema:
7685+
type: object
7686+
properties:
7687+
key:
7688+
type: string
7689+
description: The API key to use for OpenRouter requests
7690+
example: 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
7691+
user_id:
7692+
type: string
7693+
nullable: true
7694+
description: User ID associated with the API key
7695+
example: user_2yOPcMpKoQhcd4bVgSMlELRaIah
7696+
required:
7697+
- key
7698+
- user_id
7699+
example:
7700+
key: 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
7701+
user_id: user_2yOPcMpKoQhcd4bVgSMlELRaIah
7702+
'400':
7703+
description: Bad Request - Invalid request parameters or malformed input
7704+
content:
7705+
application/json:
7706+
schema:
7707+
$ref: '#/components/schemas/BadRequestResponse'
7708+
'403':
7709+
description: Forbidden - Authentication successful but insufficient permissions
7710+
content:
7711+
application/json:
7712+
schema:
7713+
$ref: '#/components/schemas/ForbiddenResponse'
7714+
'500':
7715+
description: Internal Server Error - Unexpected server error
7716+
content:
7717+
application/json:
7718+
schema:
7719+
$ref: '#/components/schemas/InternalServerResponse'
7720+
/auth/keys/code:
7721+
post:
7722+
x-speakeasy-name-override: createAuthCode
7723+
tags:
7724+
- OAuth
7725+
summary: Create authorization code
7726+
description: Create an authorization code for the PKCE flow to generate a user-controlled API key
7727+
requestBody:
7728+
content:
7729+
application/json:
7730+
schema:
7731+
type: object
7732+
properties:
7733+
callback_url:
7734+
type: string
7735+
format: uri
7736+
description: >-
7737+
The callback URL to redirect to after authorization. Note, only https URLs on ports 443 and 3000 are
7738+
allowed.
7739+
example: https://myapp.com/auth/callback
7740+
code_challenge:
7741+
type: string
7742+
description: PKCE code challenge for enhanced security
7743+
example: E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
7744+
code_challenge_method:
7745+
type: string
7746+
enum:
7747+
- S256
7748+
- plain
7749+
description: The method used to generate the code challenge
7750+
example: S256
7751+
limit:
7752+
type: number
7753+
description: Credit limit for the API key to be created
7754+
example: 100
7755+
required:
7756+
- callback_url
7757+
example:
7758+
callback_url: https://myapp.com/auth/callback
7759+
code_challenge: E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
7760+
code_challenge_method: S256
7761+
limit: 100
7762+
required: true
7763+
responses:
7764+
'200':
7765+
description: Successfully created authorization code
7766+
content:
7767+
application/json:
7768+
schema:
7769+
type: object
7770+
properties:
7771+
data:
7772+
type: object
7773+
properties:
7774+
id:
7775+
type: string
7776+
description: The authorization code ID to use in the exchange request
7777+
example: auth_code_xyz789
7778+
app_id:
7779+
type: number
7780+
description: The application ID associated with this auth code
7781+
example: 12345
7782+
created_at:
7783+
type: string
7784+
description: ISO 8601 timestamp of when the auth code was created
7785+
example: '2025-08-24T10:30:00Z'
7786+
required:
7787+
- id
7788+
- app_id
7789+
- created_at
7790+
description: Auth code data
7791+
example:
7792+
id: auth_code_xyz789
7793+
app_id: 12345
7794+
created_at: '2025-08-24T10:30:00Z'
7795+
required:
7796+
- data
7797+
'400':
7798+
description: Bad Request - Invalid request parameters or malformed input
7799+
content:
7800+
application/json:
7801+
schema:
7802+
$ref: '#/components/schemas/BadRequestResponse'
7803+
'401':
7804+
description: Unauthorized - Authentication required or invalid credentials
7805+
content:
7806+
application/json:
7807+
schema:
7808+
$ref: '#/components/schemas/UnauthorizedResponse'
7809+
'500':
7810+
description: Internal Server Error - Unexpected server error
7811+
content:
7812+
application/json:
7813+
schema:
7814+
$ref: '#/components/schemas/InternalServerResponse'
7815+
operationId: createAuthKeysCode
76437816
/chat/completions:
76447817
post:
76457818
summary: Create a chat completion
@@ -7770,6 +7943,8 @@ tags:
77707943
description: Generation history endpoints
77717944
- name: Models
77727945
description: Model information endpoints
7946+
- name: OAuth
7947+
description: OAuth authentication endpoints
77737948
- name: Parameters
77747949
description: Parameters endpoints
77757950
- name: Providers

0 commit comments

Comments
 (0)