diff --git a/.github/actions/validate-sdk/action.yaml b/.github/actions/validate-sdk/action.yaml index 177fe36a..0d16f9b6 100644 --- a/.github/actions/validate-sdk/action.yaml +++ b/.github/actions/validate-sdk/action.yaml @@ -9,53 +9,54 @@ inputs: runs: using: 'composite' steps: + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 10 + - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '22' - cache: 'npm' + cache: 'pnpm' - name: Install dependencies shell: bash - run: npm install + run: pnpm install - name: Build SDK shell: bash - run: npm run build - - # - name: Typecheck tests directory - # shell: bash - # run: npx tsc --noEmit --skipLibCheck --esModuleInterop --moduleResolution node --module esnext --target es2020 tests/**/*.ts + run: pnpm run build - name: Install examples dependencies shell: bash working-directory: examples - run: npm install + run: pnpm install # TODO: Re-enable when Speakeasy fixes generated code type errors - # - name: Typecheck examples root - # shell: bash - # working-directory: examples - # run: npx tsc + - name: Typecheck examples root + shell: bash + working-directory: examples + run: pnpm exec tsc - name: Install nextjs-example dependencies shell: bash working-directory: examples/nextjs-example - run: npm install + run: pnpm install - name: Typecheck nextjs-example shell: bash working-directory: examples/nextjs-example - run: npx tsc --noEmit + run: pnpm exec tsc --noEmit - name: Run unit tests shell: bash env: OPENROUTER_API_KEY: ${{ inputs.openrouter-api-key }} - run: npx vitest --run --exclude 'tests/e2e/**' + run: pnpm exec vitest --run --exclude 'tests/e2e/**' - name: Run e2e tests shell: bash env: OPENROUTER_API_KEY: ${{ inputs.openrouter-api-key }} - run: npx vitest --run tests/e2e/ + run: pnpm exec vitest --run tests/e2e/ diff --git a/.github/workflows/speakeasy_run_on_pr.yaml b/.github/workflows/speakeasy_run_on_pr.yaml index 8c69012b..5b94862d 100644 --- a/.github/workflows/speakeasy_run_on_pr.yaml +++ b/.github/workflows/speakeasy_run_on_pr.yaml @@ -20,6 +20,17 @@ jobs: ref: ${{ github.event.pull_request.head.ref }} token: ${{ secrets.GITHUB_TOKEN }} + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 10 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22' + cache: 'pnpm' + - name: Install Speakeasy CLI run: | curl -fsSL https://raw.githubusercontent.com/speakeasy-api/speakeasy/main/install.sh | sh diff --git a/.gitignore b/.gitignore index ed7cab73..d405f237 100644 --- a/.gitignore +++ b/.gitignore @@ -30,4 +30,6 @@ .env.*.local /examples/.env /examples/package-lock.json +/examples/nextjs-example/package-lock.json +/examples/nextjs-example/package.lock.json /temp diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000..38a58688 --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +shamefully-hoist=false +strict-peer-dependencies=true \ No newline at end of file diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index ed5f9bce..cf260f56 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,12 +1,12 @@ lockVersion: 2.0.0 id: 8b6cd71c-ea04-44da-af45-e43968b5928d management: - docChecksum: 0ecf8d42d5f305a124cbca4ffbda5eee + docChecksum: 591fccdc6b495b1230644174853f9113 docVersion: 1.0.0 - speakeasyVersion: 1.660.0 - generationVersion: 2.760.2 - releaseVersion: 0.1.27 - configChecksum: 2c451c32d0e42b790ff08709ef1011b4 + speakeasyVersion: 1.666.0 + generationVersion: 2.768.0 + releaseVersion: 0.2.6 + configChecksum: faa7e08defaa15a2a216f64d15953590 repoURL: https://github.com/OpenRouterTeam/typescript-sdk.git installationURL: https://github.com/OpenRouterTeam/typescript-sdk published: true @@ -15,7 +15,7 @@ features: acceptHeaders: 2.81.2 additionalDependencies: 0.1.0 constsAndDefaults: 0.1.12 - core: 3.26.9 + core: 3.26.13 customCodeRegions: 0.1.0 defaultEnabledRetries: 0.1.0 deprecations: 2.81.1 @@ -35,11 +35,11 @@ features: openEnums: 0.1.1 responseFormat: 0.2.3 retries: 2.83.0 - sdkHooks: 0.3.0 + sdkHooks: 0.4.0 serverEvents: 0.1.12 serverEventsSentinels: 0.1.0 serverIDs: 2.81.2 - unions: 2.86.0 + unions: 2.86.3 generatedFiles: - .devcontainer/README.md - .devcontainer/devcontainer.json @@ -69,14 +69,13 @@ generatedFiles: - docs/models/chatmessagecontentitemaudio.md - docs/models/chatmessagecontentitemaudioformat.md - docs/models/chatmessagecontentitemaudioinputaudio.md - - docs/models/chatmessagecontentitemfile.md + - docs/models/chatmessagecontentitemcachecontrol.md - docs/models/chatmessagecontentitemimage.md - docs/models/chatmessagecontentitemimagedetail.md - docs/models/chatmessagecontentitemtext.md - docs/models/chatmessagecontentitemvideo.md - docs/models/chatmessagecontentitemvideoinputvideo.md - docs/models/chatmessagecontentitemvideovideourl.md - - docs/models/chatmessagecontentitemvideovideourlvideourl.md - docs/models/chatmessagetokenlogprob.md - docs/models/chatmessagetokenlogprobs.md - docs/models/chatmessagetoolcall.md @@ -130,14 +129,8 @@ generatedFiles: - docs/models/errors/unauthorizedresponseerror.md - docs/models/errors/unprocessableentityresponseerror.md - docs/models/filecitation.md - - docs/models/filecitationtype.md - docs/models/filepath.md - - docs/models/filepathtype.md - - docs/models/filet.md - docs/models/forbiddenresponseerrordata.md - - docs/models/idfileparser.md - - docs/models/idmoderation.md - - docs/models/idweb.md - docs/models/ignore.md - docs/models/imagegenerationstatus.md - docs/models/imageurl.md @@ -192,7 +185,6 @@ generatedFiles: - docs/models/openairesponsesreasoningconfig.md - docs/models/openairesponsesreasoningeffort.md - docs/models/openairesponsesrefusalcontent.md - - docs/models/openairesponsesrefusalcontenttype.md - docs/models/openairesponsesresponsestatus.md - docs/models/openairesponsesservicetier.md - docs/models/openairesponsestoolchoice.md @@ -215,19 +207,14 @@ generatedFiles: - docs/models/openresponseseasyinputmessageroleuser.md - docs/models/openresponseseasyinputmessagetype.md - docs/models/openresponseserrorevent.md - - docs/models/openresponseserroreventtype.md - docs/models/openresponsesfunctioncalloutput.md - docs/models/openresponsesfunctioncalloutputtype.md - docs/models/openresponsesfunctiontoolcall.md - docs/models/openresponsesfunctiontoolcalltype.md - docs/models/openresponsesimagegencallcompleted.md - - docs/models/openresponsesimagegencallcompletedtype.md - docs/models/openresponsesimagegencallgenerating.md - - docs/models/openresponsesimagegencallgeneratingtype.md - docs/models/openresponsesimagegencallinprogress.md - - docs/models/openresponsesimagegencallinprogresstype.md - docs/models/openresponsesimagegencallpartialimage.md - - docs/models/openresponsesimagegencallpartialimagetype.md - docs/models/openresponsesinput.md - docs/models/openresponsesinput1.md - docs/models/openresponsesinputmessageitem.md @@ -241,29 +228,22 @@ generatedFiles: - docs/models/openresponsesnonstreamingresponse.md - docs/models/openresponsesnonstreamingresponsetoolfunction.md - docs/models/openresponsesnonstreamingresponsetoolunion.md - - docs/models/openresponsesnonstreamingresponsetype.md - docs/models/openresponsesreasoning.md - docs/models/openresponsesreasoningconfig.md - docs/models/openresponsesreasoningdeltaevent.md - - docs/models/openresponsesreasoningdeltaeventtype.md - docs/models/openresponsesreasoningdoneevent.md - - docs/models/openresponsesreasoningdoneeventtype.md - docs/models/openresponsesreasoningformat.md - docs/models/openresponsesreasoningstatuscompleted.md - docs/models/openresponsesreasoningstatusincomplete.md - docs/models/openresponsesreasoningstatusinprogress.md - docs/models/openresponsesreasoningstatusunion.md - docs/models/openresponsesreasoningsummarypartaddedevent.md - - docs/models/openresponsesreasoningsummarypartaddedeventtype.md - docs/models/openresponsesreasoningsummarytextdeltaevent.md - - docs/models/openresponsesreasoningsummarytextdeltaeventtype.md - docs/models/openresponsesreasoningsummarytextdoneevent.md - - docs/models/openresponsesreasoningsummarytextdoneeventtype.md - docs/models/openresponsesreasoningtype.md - docs/models/openresponsesrequest.md - docs/models/openresponsesrequesttoolfunction.md - docs/models/openresponsesrequesttoolunion.md - - docs/models/openresponsesrequesttype.md - docs/models/openresponsesresponsetext.md - docs/models/openresponsesresponsetextverbosity.md - docs/models/openresponsesstreamevent.md @@ -288,14 +268,10 @@ generatedFiles: - docs/models/openresponsesusage.md - docs/models/openresponseswebsearch20250826tool.md - docs/models/openresponseswebsearch20250826toolfilters.md - - docs/models/openresponseswebsearch20250826tooltype.md - docs/models/openresponseswebsearchpreview20250311tool.md - - docs/models/openresponseswebsearchpreview20250311tooltype.md - docs/models/openresponseswebsearchpreviewtool.md - - docs/models/openresponseswebsearchpreviewtooltype.md - docs/models/openresponseswebsearchtool.md - docs/models/openresponseswebsearchtoolfilters.md - - docs/models/openresponseswebsearchtooltype.md - docs/models/operations/apitype.md - docs/models/operations/calldata.md - docs/models/operations/content.md @@ -326,6 +302,7 @@ generatedFiles: - docs/models/operations/exchangeauthcodeforapikeycodechallengemethod.md - docs/models/operations/exchangeauthcodeforapikeyrequest.md - docs/models/operations/exchangeauthcodeforapikeyresponse.md + - docs/models/operations/getcreditsdata.md - docs/models/operations/getcreditsresponse.md - docs/models/operations/getcurrentkeydata.md - docs/models/operations/getcurrentkeyresponse.md @@ -366,8 +343,6 @@ generatedFiles: - docs/models/operations/sendchatcompletionrequestresponse.md - docs/models/operations/supportedparameter.md - docs/models/operations/transferintent.md - - docs/models/operations/typeimageurl.md - - docs/models/operations/typetext.md - docs/models/operations/updatekeysdata.md - docs/models/operations/updatekeyslimitreset.md - docs/models/operations/updatekeysrequest.md @@ -399,6 +374,7 @@ generatedFiles: - docs/models/plugin.md - docs/models/pluginfileparser.md - docs/models/pluginmoderation.md + - docs/models/pluginresponsehealing.md - docs/models/pluginweb.md - docs/models/pricing.md - docs/models/prompt.md @@ -425,23 +401,15 @@ generatedFiles: - docs/models/responseinputaudio.md - docs/models/responseinputaudioformat.md - docs/models/responseinputaudioinputaudio.md - - docs/models/responseinputaudiotype.md - docs/models/responseinputfile.md - - docs/models/responseinputfiletype.md - docs/models/responseinputimage.md - docs/models/responseinputimagedetail.md - - docs/models/responseinputimagetype.md - docs/models/responseinputtext.md - - docs/models/responseinputtexttype.md - docs/models/responseoutputtext.md - - docs/models/responseoutputtexttype.md - docs/models/responseserrorfield.md - docs/models/responsesformatjsonobject.md - - docs/models/responsesformatjsonobjecttype.md - docs/models/responsesformattext.md - docs/models/responsesformattextjsonschemaconfig.md - - docs/models/responsesformattextjsonschemaconfigtype.md - - docs/models/responsesformattexttype.md - docs/models/responsesimagegenerationcall.md - docs/models/responsesimagegenerationcalltype.md - docs/models/responsesoutputitem.md @@ -490,32 +458,16 @@ generatedFiles: - docs/models/toplogprob.md - docs/models/topproviderinfo.md - docs/models/truncation.md + - docs/models/ttl.md - docs/models/type.md - - docs/models/typeresponsecompleted.md - - docs/models/typeresponsecontentpartadded.md - - docs/models/typeresponsecontentpartdone.md - - docs/models/typeresponsecreated.md - - docs/models/typeresponsefailed.md - - docs/models/typeresponsefunctioncallargumentsdelta.md - - docs/models/typeresponsefunctioncallargumentsdone.md - - docs/models/typeresponseincomplete.md - - docs/models/typeresponseinprogress.md - - docs/models/typeresponseoutputitemadded.md - - docs/models/typeresponseoutputitemdone.md - - docs/models/typeresponseoutputtextannotationadded.md - - docs/models/typeresponseoutputtextdelta.md - - docs/models/typeresponseoutputtextdone.md - - docs/models/typeresponsereasoningsummarypartdone.md - - docs/models/typeresponserefusaldelta.md - - docs/models/typeresponserefusaldone.md - docs/models/unauthorizedresponseerrordata.md - docs/models/unprocessableentityresponseerrordata.md - docs/models/urlcitation.md - - docs/models/urlcitationtype.md - docs/models/usermessage.md - docs/models/usermessagecontent.md - docs/models/variables.md - - docs/models/videourl.md + - docs/models/videourl1.md + - docs/models/videourl2.md - docs/models/websearchpreviewtooluserlocation.md - docs/models/websearchpreviewtooluserlocationtype.md - docs/models/websearchstatus.md @@ -589,12 +541,13 @@ generatedFiles: - src/models/assistantmessage.ts - src/models/badgatewayresponseerrordata.ts - src/models/badrequestresponseerrordata.ts + - src/models/chatcompletionfinishreason.ts - src/models/chaterror.ts - src/models/chatgenerationparams.ts - src/models/chatgenerationtokenusage.ts - src/models/chatmessagecontentitem.ts - src/models/chatmessagecontentitemaudio.ts - - src/models/chatmessagecontentitemfile.ts + - src/models/chatmessagecontentitemcachecontrol.ts - src/models/chatmessagecontentitemimage.ts - src/models/chatmessagecontentitemtext.ts - src/models/chatmessagecontentitemvideo.ts @@ -603,6 +556,7 @@ generatedFiles: - src/models/chatmessagetoolcall.ts - src/models/chatresponse.ts - src/models/chatresponsechoice.ts + - src/models/chatstreamingchoice.ts - src/models/chatstreamingmessagechunk.ts - src/models/chatstreamingmessagetoolcall.ts - src/models/chatstreamingresponsechunk.ts @@ -769,7 +723,6 @@ generatedFiles: - src/models/unprocessableentityresponseerrordata.ts - src/models/urlcitation.ts - src/models/usermessage.ts - - src/models/videourl.ts - src/models/websearchpreviewtooluserlocation.ts - src/models/websearchstatus.ts - src/sdk/analytics.ts @@ -1159,7 +1112,7 @@ examples: speakeasy-default-get-credits: responses: "200": - application/json: {} + application/json: {"data": {"total_credits": 100.5, "total_usage": 25.75}} 4XX: application/json: {"error": {"code": 400, "message": "Invalid request parameters", "metadata": {"field": "temperature", "reason": "Must be between 0 and 2"}}, "user_id": "user-abc123"} default: @@ -1593,7 +1546,7 @@ examples: speakeasy-default-list-endpoints-zdr: responses: "200": - application/json: {"data": [{"name": "", "model_name": "", "context_length": 8891.09, "pricing": {"prompt": "1000", "completion": 1000}, "provider_name": "OpenAI", "tag": "", "quantization": "fp16", "max_completion_tokens": 4685.25, "max_prompt_tokens": 22.7, "supported_parameters": ["temperature"], "uptime_last_30m": 6060.66, "supports_implicit_caching": true}]} + application/json: {"data": [{"name": "", "model_name": "", "context_length": 8891.09, "pricing": {"prompt": 1000, "completion": 1000}, "provider_name": "OpenAI", "tag": "", "quantization": "fp16", "max_completion_tokens": 4685.25, "max_prompt_tokens": 22.7, "supported_parameters": ["temperature"], "uptime_last_30m": 6060.66, "supports_implicit_caching": true}]} default: application/json: {"error": {"code": 400, "message": "Invalid request parameters", "metadata": {"field": "temperature", "reason": "Must be between 0 and 2"}}, "user_id": "user-abc123"} "500": @@ -1692,7 +1645,7 @@ examples: createResponses: speakeasy-default-create-responses: requestBody: - application/json: {"stream": false} + application/json: {"store": false, "service_tier": "auto", "stream": false} responses: "200": application/json: {"id": "resp-abc123", "object": "response", "created_at": 1704067200, "model": "gpt-4", "output": [{"id": "msg-abc123", "role": "assistant", "type": "message", "content": [{"type": "output_text", "text": "Hello! How can I help you today?"}]}], "error": null, "incomplete_details": null, "temperature": null, "top_p": null, "instructions": null, "metadata": null, "tools": [], "tool_choice": "auto", "parallel_tool_calls": true} diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 049c4aa8..a4ecc758 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -29,8 +29,9 @@ generation: generateTests: false generateNewTests: true skipResponseBodyAssertions: false + preApplyUnionDiscriminators: true typescript: - version: 0.1.27 + version: 0.2.6 acceptHeaderEnum: false additionalDependencies: dependencies: {} @@ -61,6 +62,9 @@ typescript: author: OpenRouter baseErrorName: OpenRouterError clientServerStatusCodesAsErrors: true + compileCommand: + - pnpm + - install constFieldsAlwaysOptional: false defaultErrorName: OpenRouterDefaultError enableCustomCodeRegions: true @@ -71,7 +75,9 @@ typescript: exportZodModelNamespace: false flattenGlobalSecurity: true flatteningOrder: parameters-first + formStringArrayEncodeMode: encoded-string forwardCompatibleEnumsByDefault: false + forwardCompatibleUnionsByDefault: "false" generateExamples: true imports: option: openapi @@ -82,6 +88,7 @@ typescript: shared: models webhooks: models/webhooks inferSSEOverload: true + inferUnionDiscriminators: true inputModelSuffix: input jsonpath: rfc9535 laxMode: strict @@ -89,8 +96,10 @@ typescript: methodArguments: infer-optional-args modelPropertyCasing: camel moduleFormat: esm + multipartArrayFormat: legacy outputModelSuffix: output packageName: '@openrouter/sdk' + preApplyUnionDiscriminators: true responseFormat: flat sseFlatResponse: true templateVersion: v2 diff --git a/.speakeasy/in.openapi.yaml b/.speakeasy/in.openapi.yaml index 55a34b31..3a2036df 100644 --- a/.speakeasy/in.openapi.yaml +++ b/.speakeasy/in.openapi.yaml @@ -1,8415 +1,8439 @@ openapi: 3.1.0 info: - title: OpenRouter API - version: 1.0.0 - description: OpenAI-compatible Chat Completions and Completions API with additional OpenRouter features - contact: - name: OpenRouter Support - url: https://openrouter.ai/docs - email: support@openrouter.ai - license: - name: MIT - url: https://opensource.org/licenses/MIT + title: OpenRouter API + version: 1.0.0 + description: OpenAI-compatible Chat Completions and Completions API with additional OpenRouter features + contact: + name: OpenRouter Support + url: https://openrouter.ai/docs + email: support@openrouter.ai + license: + name: MIT + url: https://opensource.org/licenses/MIT components: - schemas: - OpenAIResponsesResponseStatus: - type: string - enum: + schemas: + OpenAIResponsesResponseStatus: + type: string + enum: + - completed + - incomplete + - in_progress + - failed + - cancelled + - queued + FileCitation: + type: object + properties: + type: + type: string + enum: + - file_citation + file_id: + type: string + filename: + type: string + index: + type: number + required: + - type + - file_id + - filename + - index + example: + type: file_citation + file_id: file-abc123 + filename: research_paper.pdf + index: 0 + URLCitation: + type: object + properties: + type: + type: string + enum: + - url_citation + url: + type: string + title: + type: string + start_index: + type: number + end_index: + type: number + required: + - type + - url + - title + - start_index + - end_index + example: + type: url_citation + start_index: 0 + end_index: 42 + title: OpenRouter Documentation + url: https://openrouter.ai/docs + FilePath: + type: object + properties: + type: + type: string + enum: + - file_path + file_id: + type: string + index: + type: number + required: + - type + - file_id + - index + example: + type: file_path + file_id: file-xyz789 + index: 0 + OpenAIResponsesAnnotation: + anyOf: + - $ref: '#/components/schemas/FileCitation' + - $ref: '#/components/schemas/URLCitation' + - $ref: '#/components/schemas/FilePath' + ResponseOutputText: + type: object + properties: + type: + type: string + enum: + - output_text + text: + type: string + annotations: + type: array + items: + $ref: '#/components/schemas/OpenAIResponsesAnnotation' + required: + - type + - text + example: + type: output_text + text: The capital of France is Paris. + annotations: + - type: url_citation + start_index: 0 + end_index: 42 + title: Paris - Wikipedia + url: https://en.wikipedia.org/wiki/Paris + OpenAIResponsesRefusalContent: + type: object + properties: + type: + type: string + enum: + - refusal + refusal: + type: string + required: + - type + - refusal + example: + type: refusal + refusal: I'm sorry, I cannot assist with that request + OutputMessage: + type: object + properties: + id: + type: string + role: + type: string + enum: + - assistant + type: + type: string + enum: + - message + status: + anyOf: + - type: string + enum: - completed + - type: string + enum: - incomplete + - type: string + enum: - in_progress - - failed - - cancelled - - queued - x-speakeasy-unknown-values: allow - FileCitation: - type: object - properties: - type: + content: + type: array + items: + anyOf: + - $ref: '#/components/schemas/ResponseOutputText' + - $ref: '#/components/schemas/OpenAIResponsesRefusalContent' + required: + - id + - role + - type + - content + example: + id: msg-abc123 + role: assistant + type: message + status: completed + content: + - type: output_text + text: Hello! How can I help you today? + ResponsesOutputMessage: + allOf: + - $ref: '#/components/schemas/OutputMessage' + - type: object + properties: {} + example: + id: msg-123 + type: message + role: assistant + status: completed + content: + - type: output_text + text: Hello! How can I help you? + annotations: [] + description: An output message item + ReasoningTextContent: + type: object + properties: + type: + type: string + enum: + - reasoning_text + text: + type: string + required: + - type + - text + example: + type: reasoning_text + text: Let me think step by step about this problem... + ReasoningSummaryText: + type: object + properties: + type: + type: string + enum: + - summary_text + text: + type: string + required: + - type + - text + example: + type: summary_text + text: Analyzed the problem using first principles + OutputItemReasoning: + type: object + properties: + type: + type: string + enum: + - reasoning + id: + type: string + content: + type: array + items: + $ref: '#/components/schemas/ReasoningTextContent' + summary: + type: array + items: + $ref: '#/components/schemas/ReasoningSummaryText' + encrypted_content: + type: string + nullable: true + status: + anyOf: + - type: string + enum: + - completed + - type: string + enum: + - incomplete + - type: string + enum: + - in_progress + required: + - type + - id + - summary + example: + type: reasoning + id: reasoning-abc123 + summary: + - type: summary_text + text: Analyzed the problem using first principles + ResponsesOutputItemReasoning: + allOf: + - $ref: '#/components/schemas/OutputItemReasoning' + - type: object + properties: {} + example: + id: reasoning-123 + type: reasoning + status: completed + summary: + - type: summary_text + text: Analyzed the problem and found the optimal solution. + content: + - type: reasoning_text + text: First, we analyze the problem... + description: An output item containing reasoning + OutputItemFunctionCall: + type: object + properties: + type: + type: string + enum: + - function_call + id: + type: string + name: + type: string + arguments: + type: string + call_id: + type: string + status: + anyOf: + - type: string + enum: + - completed + - type: string + enum: + - incomplete + - type: string + enum: + - in_progress + required: + - type + - name + - arguments + - call_id + example: + type: function_call + id: call-abc123 + name: get_weather + arguments: '{"location":"San Francisco","unit":"celsius"}' + call_id: call-abc123 + ResponsesOutputItemFunctionCall: + allOf: + - $ref: '#/components/schemas/OutputItemFunctionCall' + - type: object + properties: {} + example: + type: function_call + id: call-abc123 + name: get_weather + arguments: '{"location":"San Francisco","unit":"celsius"}' + call_id: call-abc123 + WebSearchStatus: + type: string + enum: + - completed + - searching + - in_progress + - failed + example: completed + OutputItemWebSearchCall: + type: object + properties: + type: + type: string + enum: + - web_search_call + id: + type: string + status: + $ref: '#/components/schemas/WebSearchStatus' + required: + - type + - id + - status + example: + type: web_search_call + id: search-abc123 + status: completed + ResponsesWebSearchCallOutput: + allOf: + - $ref: '#/components/schemas/OutputItemWebSearchCall' + - type: object + properties: {} + example: + type: web_search_call + id: search-abc123 + status: completed + OutputItemFileSearchCall: + type: object + properties: + type: + type: string + enum: + - file_search_call + id: + type: string + queries: + type: array + items: + type: string + status: + $ref: '#/components/schemas/WebSearchStatus' + required: + - type + - id + - queries + - status + example: + type: file_search_call + id: filesearch-abc123 + queries: + - machine learning algorithms + - neural networks + status: completed + ResponsesOutputItemFileSearchCall: + allOf: + - $ref: '#/components/schemas/OutputItemFileSearchCall' + - type: object + properties: {} + example: + type: file_search_call + id: filesearch-abc123 + queries: + - machine learning algorithms + - neural networks + status: completed + ImageGenerationStatus: + type: string + enum: + - in_progress + - completed + - generating + - failed + example: completed + OutputItemImageGenerationCall: + type: object + properties: + type: + type: string + enum: + - image_generation_call + id: + type: string + result: + type: string + nullable: true + default: null + status: + $ref: '#/components/schemas/ImageGenerationStatus' + required: + - type + - id + - status + example: + type: image_generation_call + id: imagegen-abc123 + result: iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg== + status: completed + ResponsesImageGenerationCall: + allOf: + - $ref: '#/components/schemas/OutputItemImageGenerationCall' + - type: object + properties: {} + example: + type: image_generation_call + id: imagegen-abc123 + result: iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg== + status: completed + ResponsesOutputItem: + anyOf: + - $ref: '#/components/schemas/ResponsesOutputMessage' + - $ref: '#/components/schemas/ResponsesOutputItemReasoning' + - $ref: '#/components/schemas/ResponsesOutputItemFunctionCall' + - $ref: '#/components/schemas/ResponsesWebSearchCallOutput' + - $ref: '#/components/schemas/ResponsesOutputItemFileSearchCall' + - $ref: '#/components/schemas/ResponsesImageGenerationCall' + description: An output item from the response + example: + id: msg-abc123 + role: assistant + type: message + status: completed + content: + - type: output_text + text: Hello! How can I help you today? + ResponsesErrorField: + type: object + nullable: true + properties: + code: + type: string + enum: + - server_error + - rate_limit_exceeded + - invalid_prompt + - vector_store_timeout + - invalid_image + - invalid_image_format + - invalid_base64_image + - invalid_image_url + - image_too_large + - image_too_small + - image_parse_error + - image_content_policy_violation + - invalid_image_mode + - image_file_too_large + - unsupported_image_media_type + - empty_image_file + - failed_to_download_image + - image_file_not_found + message: + type: string + required: + - code + - message + description: Error information returned from the API + example: + code: rate_limit_exceeded + message: Rate limit exceeded. Please try again later. + OpenAIResponsesIncompleteDetails: + type: object + nullable: true + properties: + reason: + type: string + enum: + - max_output_tokens + - content_filter + OpenAIResponsesUsage: + type: object + properties: + input_tokens: + type: number + input_tokens_details: + type: object + properties: + cached_tokens: + type: number + required: + - cached_tokens + output_tokens: + type: number + output_tokens_details: + type: object + properties: + reasoning_tokens: + type: number + required: + - reasoning_tokens + total_tokens: + type: number + required: + - input_tokens + - input_tokens_details + - output_tokens + - output_tokens_details + - total_tokens + OpenResponsesUsage: + allOf: + - $ref: '#/components/schemas/OpenAIResponsesUsage' + - type: object + properties: + cost: + type: number + nullable: true + description: Cost of the completion + is_byok: + type: boolean + description: Whether a request was made using a Bring Your Own Key configuration + cost_details: + type: object + properties: + upstream_inference_cost: + type: number + nullable: true + upstream_inference_input_cost: + type: number + upstream_inference_output_cost: + type: number + required: + - upstream_inference_input_cost + - upstream_inference_output_cost + description: Token usage information for the response + example: + input_tokens: 10 + output_tokens: 25 + total_tokens: 35 + input_tokens_details: + cached_tokens: 0 + output_tokens_details: + reasoning_tokens: 0 + cost: 0.0012 + cost_details: + upstream_inference_cost: null + upstream_inference_input_cost: 0.0008 + upstream_inference_output_cost: 0.0004 + ResponseInputText: + type: object + properties: + type: + type: string + enum: + - input_text + text: + type: string + required: + - type + - text + description: Text input content item + example: + type: input_text + text: Hello, how can I help you? + ResponseInputImage: + type: object + properties: + type: + type: string + enum: + - input_image + detail: + type: string + enum: + - auto + - high + - low + image_url: + type: string + nullable: true + required: + - type + - detail + description: Image input content item + example: + type: input_image + detail: auto + image_url: https://example.com/image.jpg + ResponseInputFile: + type: object + properties: + type: + type: string + enum: + - input_file + file_id: + type: string + nullable: true + file_data: + type: string + filename: + type: string + file_url: + type: string + required: + - type + description: File input content item + example: + type: input_file + file_id: file-abc123 + filename: document.pdf + ResponseInputAudio: + type: object + properties: + type: + type: string + enum: + - input_audio + input_audio: + type: object + properties: + data: + type: string + format: + type: string + enum: + - mp3 + - wav + required: + - data + - format + required: + - type + - input_audio + description: Audio input content item + example: + type: input_audio + input_audio: + data: SGVsbG8gV29ybGQ= + format: mp3 + ToolCallStatus: + type: string + nullable: true + enum: + - in_progress + - completed + - incomplete + example: completed + OpenAIResponsesInput: + anyOf: + - type: string + - type: array + items: + anyOf: + - type: object + properties: + type: type: string enum: - - file_citation - file_id: - type: string - filename: - type: string - index: - type: number - required: - - type - - file_id - - filename - - index - example: - type: file_citation - file_id: file-abc123 - filename: research_paper.pdf - index: 0 - URLCitation: - type: object - properties: - type: + - message + role: + anyOf: + - type: string + enum: + - user + - type: string + enum: + - system + - type: string + enum: + - assistant + - type: string + enum: + - developer + content: + anyOf: + - type: array + items: + oneOf: + - $ref: '#/components/schemas/ResponseInputText' + - $ref: '#/components/schemas/ResponseInputImage' + - $ref: '#/components/schemas/ResponseInputFile' + - $ref: '#/components/schemas/ResponseInputAudio' + discriminator: + propertyName: type + mapping: + input_text: '#/components/schemas/ResponseInputText' + input_image: '#/components/schemas/ResponseInputImage' + input_file: '#/components/schemas/ResponseInputFile' + input_audio: '#/components/schemas/ResponseInputAudio' + - type: string + required: + - role + - content + - type: object + properties: + id: + type: string + type: type: string enum: - - url_citation - url: - type: string - title: - type: string - start_index: - type: number - end_index: - type: number - required: - - type - - url - - title - - start_index - - end_index - example: - type: url_citation - start_index: 0 - end_index: 42 - title: OpenRouter Documentation - url: https://openrouter.ai/docs - FilePath: - type: object - properties: - type: + - message + role: + anyOf: + - type: string + enum: + - user + - type: string + enum: + - system + - type: string + enum: + - developer + content: + type: array + items: + oneOf: + - $ref: '#/components/schemas/ResponseInputText' + - $ref: '#/components/schemas/ResponseInputImage' + - $ref: '#/components/schemas/ResponseInputFile' + - $ref: '#/components/schemas/ResponseInputAudio' + discriminator: + propertyName: type + mapping: + input_text: '#/components/schemas/ResponseInputText' + input_image: '#/components/schemas/ResponseInputImage' + input_file: '#/components/schemas/ResponseInputFile' + input_audio: '#/components/schemas/ResponseInputAudio' + required: + - id + - role + - content + - type: object + properties: + type: type: string enum: - - file_path - file_id: + - function_call_output + id: type: string - index: - type: number - required: - - type - - file_id - - index - example: - type: file_path - file_id: file-xyz789 - index: 0 - OpenAIResponsesAnnotation: - anyOf: - - $ref: '#/components/schemas/FileCitation' - - $ref: '#/components/schemas/URLCitation' - - $ref: '#/components/schemas/FilePath' - ResponseOutputText: - type: object - properties: - type: + nullable: true + call_id: type: string - enum: - - output_text - text: + output: type: string - annotations: - type: array - items: - $ref: '#/components/schemas/OpenAIResponsesAnnotation' - required: - - type - - text - example: - type: output_text - text: The capital of France is Paris. - annotations: - - type: url_citation - start_index: 0 - end_index: 42 - title: Paris - Wikipedia - url: https://en.wikipedia.org/wiki/Paris - OpenAIResponsesRefusalContent: - type: object - properties: - type: + status: + $ref: '#/components/schemas/ToolCallStatus' + required: + - type + - call_id + - output + - type: object + properties: + type: type: string enum: - - refusal - refusal: + - function_call + call_id: type: string - required: - - type - - refusal - example: - type: refusal - refusal: I'm sorry, I cannot assist with that request - OutputMessage: - type: object - properties: - id: + name: type: string - role: + arguments: type: string - enum: - - assistant - type: + id: type: string - enum: - - message - status: - anyOf: - - type: string - enum: - - completed - - type: string - enum: - - incomplete - - type: string - enum: - - in_progress - content: - type: array - items: - anyOf: - - $ref: '#/components/schemas/ResponseOutputText' - - $ref: '#/components/schemas/OpenAIResponsesRefusalContent' - required: - - id - - role - - type - - content - example: - id: msg-abc123 - role: assistant - type: message - status: completed - content: - - type: output_text - text: Hello! How can I help you today? - ResponsesOutputMessage: - allOf: - - $ref: '#/components/schemas/OutputMessage' - - type: object - properties: {} - example: - id: msg-123 - type: message - role: assistant - status: completed - content: + status: + $ref: '#/components/schemas/ToolCallStatus' + required: + - type + - call_id + - name + - arguments + - $ref: '#/components/schemas/OutputItemImageGenerationCall' + - $ref: '#/components/schemas/OutputMessage' + - nullable: true + OpenResponsesRequestMetadata: + type: object + nullable: true + additionalProperties: + type: string + maxLength: 512 + description: >- + Metadata key-value pairs for the request. Keys must be ≤64 characters and cannot contain brackets. Values must + be ≤512 characters. Maximum 16 pairs allowed. + example: + user_id: '123' + session_id: abc-def-ghi + OpenResponsesFunctionTool: + type: object + properties: + type: + type: string + enum: + - function + name: + type: string + description: + type: string + nullable: true + strict: + type: boolean + nullable: true + parameters: + type: object + nullable: true + additionalProperties: + nullable: true + required: + - type + - name + - parameters + description: Function tool definition + example: + type: function + name: get_weather + description: Get the current weather in a location + parameters: + type: object + properties: + location: + type: string + description: The city and state + unit: + type: string + enum: + - celsius + - fahrenheit + required: + - location + ResponsesSearchContextSize: + type: string + enum: + - low + - medium + - high + description: Size of the search context for web search tools + example: medium + WebSearchPreviewToolUserLocation: + type: object + nullable: true + properties: + type: + type: string + enum: + - approximate + city: + type: string + nullable: true + country: + type: string + nullable: true + region: + type: string + nullable: true + timezone: + type: string + nullable: true + required: + - type + OpenResponsesWebSearchPreviewTool: + type: object + properties: + type: + type: string + enum: + - web_search_preview + search_context_size: + $ref: '#/components/schemas/ResponsesSearchContextSize' + user_location: + $ref: '#/components/schemas/WebSearchPreviewToolUserLocation' + required: + - type + description: Web search preview tool configuration + example: + type: web_search_preview + OpenResponsesWebSearchPreview20250311Tool: + type: object + properties: + type: + type: string + enum: + - web_search_preview_2025_03_11 + search_context_size: + $ref: '#/components/schemas/ResponsesSearchContextSize' + user_location: + $ref: '#/components/schemas/WebSearchPreviewToolUserLocation' + required: + - type + description: Web search preview tool configuration (2025-03-11 version) + example: + type: web_search_preview_2025_03_11 + ResponsesWebSearchUserLocation: + type: object + nullable: true + properties: + type: + type: string + enum: + - approximate + city: + type: string + nullable: true + country: + type: string + nullable: true + region: + type: string + nullable: true + timezone: + type: string + nullable: true + description: User location information for web search + example: + type: approximate + city: San Francisco + country: USA + region: California + timezone: America/Los_Angeles + OpenResponsesWebSearchTool: + type: object + properties: + type: + type: string + enum: + - web_search + filters: + type: object + nullable: true + properties: + allowed_domains: + type: array + nullable: true + items: + type: string + search_context_size: + $ref: '#/components/schemas/ResponsesSearchContextSize' + user_location: + $ref: '#/components/schemas/ResponsesWebSearchUserLocation' + required: + - type + description: Web search tool configuration + example: + type: web_search + filters: + allowed_domains: + - example.com + OpenResponsesWebSearch20250826Tool: + type: object + properties: + type: + type: string + enum: + - web_search_2025_08_26 + filters: + type: object + nullable: true + properties: + allowed_domains: + type: array + nullable: true + items: + type: string + search_context_size: + $ref: '#/components/schemas/ResponsesSearchContextSize' + user_location: + $ref: '#/components/schemas/ResponsesWebSearchUserLocation' + required: + - type + description: Web search tool configuration (2025-08-26 version) + example: + type: web_search_2025_08_26 + filters: + allowed_domains: + - example.com + OpenAIResponsesToolChoice: + anyOf: + - type: string + enum: + - auto + - type: string + enum: + - none + - type: string + enum: + - required + - type: object + properties: + type: + type: string + enum: + - function + name: + type: string + required: + - type + - name + - type: object + properties: + type: + anyOf: + - type: string + enum: + - web_search_preview_2025_03_11 + - type: string + enum: + - web_search_preview + required: + - type + OpenAIResponsesPrompt: + type: object + nullable: true + properties: + id: + type: string + variables: + type: object + nullable: true + additionalProperties: + anyOf: + - type: string + - $ref: '#/components/schemas/ResponseInputText' + - $ref: '#/components/schemas/ResponseInputImage' + - $ref: '#/components/schemas/ResponseInputFile' + required: + - id + OpenAIResponsesReasoningEffort: + type: string + nullable: true + enum: + - high + - medium + - low + - minimal + - none + ReasoningSummaryVerbosity: + type: string + enum: + - auto + - concise + - detailed + OpenAIResponsesReasoningConfig: + type: object + nullable: true + properties: + effort: + $ref: '#/components/schemas/OpenAIResponsesReasoningEffort' + summary: + $ref: '#/components/schemas/ReasoningSummaryVerbosity' + OpenAIResponsesServiceTier: + type: string + nullable: true + enum: + - auto + - default + - flex + - priority + - scale + OpenAIResponsesTruncation: + type: string + nullable: true + enum: + - auto + - disabled + ResponsesFormatText: + type: object + properties: + type: + type: string + enum: + - text + required: + - type + description: Plain text response format + example: + type: text + ResponsesFormatJSONObject: + type: object + properties: + type: + type: string + enum: + - json_object + required: + - type + description: JSON object response format + example: + type: json_object + ResponsesFormatTextJSONSchemaConfig: + type: object + properties: + type: + type: string + enum: + - json_schema + name: + type: string + description: + type: string + strict: + type: boolean + nullable: true + schema: + type: object + additionalProperties: + nullable: true + required: + - type + - name + - schema + description: JSON schema constrained response format + example: + type: json_schema + name: user_info + description: User information schema + schema: + type: object + properties: + name: + type: string + age: + type: number + required: + - name + ResponseFormatTextConfig: + anyOf: + - $ref: '#/components/schemas/ResponsesFormatText' + - $ref: '#/components/schemas/ResponsesFormatJSONObject' + - $ref: '#/components/schemas/ResponsesFormatTextJSONSchemaConfig' + description: Text response format configuration + example: + type: text + ResponseTextConfig: + type: object + properties: + format: + $ref: '#/components/schemas/ResponseFormatTextConfig' + verbosity: + type: string + nullable: true + enum: + - high + - low + - medium + description: Text output configuration including format and verbosity + example: + format: + type: text + verbosity: medium + OpenAIResponsesNonStreamingResponse: + type: object + properties: + id: + type: string + object: + type: string + enum: + - response + created_at: + type: number + model: + type: string + status: + $ref: '#/components/schemas/OpenAIResponsesResponseStatus' + output: + type: array + items: + oneOf: + - $ref: '#/components/schemas/OutputMessage' + - $ref: '#/components/schemas/OutputItemReasoning' + - $ref: '#/components/schemas/OutputItemFunctionCall' + - $ref: '#/components/schemas/OutputItemWebSearchCall' + - $ref: '#/components/schemas/OutputItemFileSearchCall' + - $ref: '#/components/schemas/OutputItemImageGenerationCall' + discriminator: + propertyName: type + mapping: + message: '#/components/schemas/OutputMessage' + reasoning: '#/components/schemas/OutputItemReasoning' + function_call: '#/components/schemas/OutputItemFunctionCall' + web_search_call: '#/components/schemas/OutputItemWebSearchCall' + file_search_call: '#/components/schemas/OutputItemFileSearchCall' + image_generation_call: '#/components/schemas/OutputItemImageGenerationCall' + user: + type: string + nullable: true + output_text: + type: string + prompt_cache_key: + type: string + nullable: true + safety_identifier: + type: string + nullable: true + error: + $ref: '#/components/schemas/ResponsesErrorField' + incomplete_details: + $ref: '#/components/schemas/OpenAIResponsesIncompleteDetails' + usage: + $ref: '#/components/schemas/OpenAIResponsesUsage' + max_tool_calls: + type: number + nullable: true + top_logprobs: + type: number + max_output_tokens: + type: number + nullable: true + temperature: + type: number + nullable: true + top_p: + type: number + nullable: true + instructions: + $ref: '#/components/schemas/OpenAIResponsesInput' + metadata: + $ref: '#/components/schemas/OpenResponsesRequestMetadata' + tools: + type: array + items: + oneOf: + - allOf: + - $ref: '#/components/schemas/OpenResponsesFunctionTool' + - type: object + properties: {} + description: Function tool definition + example: + type: function + name: get_weather + description: Get the current weather in a location + parameters: + type: object + properties: + location: + type: string + description: The city and state + unit: + type: string + enum: + - celsius + - fahrenheit + required: + - location + - $ref: '#/components/schemas/OpenResponsesWebSearchPreviewTool' + - $ref: '#/components/schemas/OpenResponsesWebSearchPreview20250311Tool' + - $ref: '#/components/schemas/OpenResponsesWebSearchTool' + - $ref: '#/components/schemas/OpenResponsesWebSearch20250826Tool' + tool_choice: + $ref: '#/components/schemas/OpenAIResponsesToolChoice' + parallel_tool_calls: + type: boolean + prompt: + $ref: '#/components/schemas/OpenAIResponsesPrompt' + background: + type: boolean + nullable: true + previous_response_id: + type: string + nullable: true + reasoning: + $ref: '#/components/schemas/OpenAIResponsesReasoningConfig' + service_tier: + $ref: '#/components/schemas/OpenAIResponsesServiceTier' + store: + type: boolean + truncation: + $ref: '#/components/schemas/OpenAIResponsesTruncation' + text: + $ref: '#/components/schemas/ResponseTextConfig' + required: + - id + - object + - created_at + - model + - output + - error + - incomplete_details + - temperature + - top_p + - instructions + - metadata + - tools + - tool_choice + - parallel_tool_calls + OpenResponsesNonStreamingResponse: + allOf: + - $ref: '#/components/schemas/OpenAIResponsesNonStreamingResponse' + - type: object + properties: + output: + type: array + items: + $ref: '#/components/schemas/ResponsesOutputItem' + usage: + $ref: '#/components/schemas/OpenResponsesUsage' + description: Complete non-streaming response from the Responses API + example: + id: resp-abc123 + object: response + created_at: 1704067200 + model: gpt-4 + status: completed + output: + - type: message + id: msg-abc123 + status: completed + role: assistant + content: + - type: output_text + text: Hello! How can I help you today? + annotations: [] + usage: + input_tokens: 10 + output_tokens: 25 + total_tokens: 35 + input_tokens_details: + cached_tokens: 0 + output_tokens_details: + reasoning_tokens: 0 + tools: [] + tool_choice: auto + parallel_tool_calls: true + error: null + incomplete_details: null + temperature: null + top_p: null + max_output_tokens: null + metadata: null + instructions: null + OpenResponsesCreatedEvent: + type: object + properties: + type: + type: string + enum: + - response.created + response: + $ref: '#/components/schemas/OpenAIResponsesNonStreamingResponse' + sequence_number: + type: number + required: + - type + - response + - sequence_number + description: Event emitted when a response is created + example: + type: response.created + response: + id: resp-abc123 + object: response + created_at: 1704067200 + model: gpt-4 + status: in_progress + output: [] + tools: [] + tool_choice: auto + parallel_tool_calls: true + error: null + incomplete_details: null + metadata: null + instructions: null + temperature: null + top_p: null + max_output_tokens: null + sequence_number: 0 + OpenResponsesInProgressEvent: + type: object + properties: + type: + type: string + enum: + - response.in_progress + response: + $ref: '#/components/schemas/OpenAIResponsesNonStreamingResponse' + sequence_number: + type: number + required: + - type + - response + - sequence_number + description: Event emitted when a response is in progress + example: + type: response.in_progress + response: + id: resp-abc123 + object: response + created_at: 1704067200 + model: gpt-4 + status: in_progress + output: [] + tools: [] + tool_choice: auto + parallel_tool_calls: true + error: null + incomplete_details: null + metadata: null + instructions: null + temperature: null + top_p: null + max_output_tokens: null + sequence_number: 1 + OpenResponsesCompletedEvent: + type: object + properties: + type: + type: string + enum: + - response.completed + response: + $ref: '#/components/schemas/OpenAIResponsesNonStreamingResponse' + sequence_number: + type: number + required: + - type + - response + - sequence_number + description: Event emitted when a response has completed successfully + example: + type: response.completed + response: + id: resp-abc123 + object: response + created_at: 1704067200 + model: gpt-4 + status: completed + output: + - id: item-1 + type: message + status: completed + role: assistant + content: + - type: output_text + text: Hello! How can I help you? + annotations: [] + tools: [] + tool_choice: auto + parallel_tool_calls: true + error: null + incomplete_details: null + metadata: null + instructions: null + temperature: null + top_p: null + max_output_tokens: null + sequence_number: 10 + OpenResponsesIncompleteEvent: + type: object + properties: + type: + type: string + enum: + - response.incomplete + response: + $ref: '#/components/schemas/OpenAIResponsesNonStreamingResponse' + sequence_number: + type: number + required: + - type + - response + - sequence_number + description: Event emitted when a response is incomplete + example: + type: response.incomplete + response: + id: resp-abc123 + object: response + created_at: 1704067200 + model: gpt-4 + status: incomplete + output: [] + tools: [] + tool_choice: auto + parallel_tool_calls: true + error: null + incomplete_details: null + metadata: null + instructions: null + temperature: null + top_p: null + max_output_tokens: null + sequence_number: 5 + OpenResponsesFailedEvent: + type: object + properties: + type: + type: string + enum: + - response.failed + response: + $ref: '#/components/schemas/OpenAIResponsesNonStreamingResponse' + sequence_number: + type: number + required: + - type + - response + - sequence_number + description: Event emitted when a response has failed + example: + type: response.failed + response: + id: resp-abc123 + object: response + created_at: 1704067200 + model: gpt-4 + status: failed + output: [] + tools: [] + tool_choice: auto + parallel_tool_calls: true + error: null + incomplete_details: null + metadata: null + instructions: null + temperature: null + top_p: null + max_output_tokens: null + sequence_number: 3 + OpenAIResponsesErrorEvent: + type: object + properties: + type: + type: string + enum: + - error + code: + type: string + nullable: true + message: + type: string + param: + type: string + nullable: true + sequence_number: + type: number + required: + - type + - code + - message + - param + - sequence_number + description: Event emitted when an error occurs during streaming + example: + type: error + code: rate_limit_exceeded + message: Rate limit exceeded. Please try again later. + param: null + sequence_number: 2 + OpenResponsesErrorEvent: + allOf: + - $ref: '#/components/schemas/OpenAIResponsesErrorEvent' + - type: object + properties: {} + description: Event emitted when an error occurs during streaming + example: + type: error + code: rate_limit_exceeded + message: Rate limit exceeded. Please try again later. + param: null + sequence_number: 2 + OpenResponsesOutputItemAddedEvent: + type: object + properties: + type: + type: string + enum: + - response.output_item.added + output_index: + type: number + item: + oneOf: + - $ref: '#/components/schemas/OutputMessage' + - $ref: '#/components/schemas/OutputItemReasoning' + - $ref: '#/components/schemas/OutputItemFunctionCall' + - $ref: '#/components/schemas/OutputItemWebSearchCall' + - $ref: '#/components/schemas/OutputItemFileSearchCall' + - $ref: '#/components/schemas/OutputItemImageGenerationCall' + discriminator: + propertyName: type + mapping: + message: '#/components/schemas/OutputMessage' + reasoning: '#/components/schemas/OutputItemReasoning' + function_call: '#/components/schemas/OutputItemFunctionCall' + web_search_call: '#/components/schemas/OutputItemWebSearchCall' + file_search_call: '#/components/schemas/OutputItemFileSearchCall' + image_generation_call: '#/components/schemas/OutputItemImageGenerationCall' + sequence_number: + type: number + required: + - type + - output_index + - item + - sequence_number + description: Event emitted when a new output item is added to the response + example: + type: response.output_item.added + output_index: 0 + item: + id: item-1 + type: message + status: in_progress + role: assistant + content: [] + sequence_number: 2 + OpenResponsesOutputItemDoneEvent: + type: object + properties: + type: + type: string + enum: + - response.output_item.done + output_index: + type: number + item: + oneOf: + - $ref: '#/components/schemas/OutputMessage' + - $ref: '#/components/schemas/OutputItemReasoning' + - $ref: '#/components/schemas/OutputItemFunctionCall' + - $ref: '#/components/schemas/OutputItemWebSearchCall' + - $ref: '#/components/schemas/OutputItemFileSearchCall' + - $ref: '#/components/schemas/OutputItemImageGenerationCall' + discriminator: + propertyName: type + mapping: + message: '#/components/schemas/OutputMessage' + reasoning: '#/components/schemas/OutputItemReasoning' + function_call: '#/components/schemas/OutputItemFunctionCall' + web_search_call: '#/components/schemas/OutputItemWebSearchCall' + file_search_call: '#/components/schemas/OutputItemFileSearchCall' + image_generation_call: '#/components/schemas/OutputItemImageGenerationCall' + sequence_number: + type: number + required: + - type + - output_index + - item + - sequence_number + description: Event emitted when an output item is complete + example: + type: response.output_item.done + output_index: 0 + item: + id: item-1 + type: message + status: completed + role: assistant + content: + - type: output_text + text: Hello! How can I help you? + annotations: [] + sequence_number: 8 + OpenResponsesContentPartAddedEvent: + type: object + properties: + type: + type: string + enum: + - response.content_part.added + output_index: + type: number + item_id: + type: string + content_index: + type: number + part: + anyOf: + - $ref: '#/components/schemas/ResponseOutputText' + - $ref: '#/components/schemas/OpenAIResponsesRefusalContent' + sequence_number: + type: number + required: + - type + - output_index + - item_id + - content_index + - part + - sequence_number + description: Event emitted when a new content part is added to an output item + example: + type: response.content_part.added + output_index: 0 + item_id: item-1 + content_index: 0 + part: + type: output_text + text: '' + annotations: [] + sequence_number: 3 + OpenResponsesContentPartDoneEvent: + type: object + properties: + type: + type: string + enum: + - response.content_part.done + output_index: + type: number + item_id: + type: string + content_index: + type: number + part: + anyOf: + - $ref: '#/components/schemas/ResponseOutputText' + - $ref: '#/components/schemas/OpenAIResponsesRefusalContent' + sequence_number: + type: number + required: + - type + - output_index + - item_id + - content_index + - part + - sequence_number + description: Event emitted when a content part is complete + example: + type: response.content_part.done + output_index: 0 + item_id: item-1 + content_index: 0 + part: + type: output_text + text: Hello! How can I help you? + annotations: [] + sequence_number: 7 + OpenResponsesTopLogprobs: + type: object + properties: + token: + type: string + logprob: + type: number + description: Alternative token with its log probability + example: + token: hello + logprob: -0.5 + OpenResponsesLogProbs: + type: object + properties: + logprob: + type: number + token: + type: string + top_logprobs: + type: array + items: + $ref: '#/components/schemas/OpenResponsesTopLogprobs' + required: + - logprob + - token + description: Log probability information for a token + example: + logprob: -0.1 + token: world + top_logprobs: + - token: hello + logprob: -0.5 + OpenResponsesTextDeltaEvent: + type: object + properties: + type: + type: string + enum: + - response.output_text.delta + logprobs: + type: array + items: + $ref: '#/components/schemas/OpenResponsesLogProbs' + output_index: + type: number + item_id: + type: string + content_index: + type: number + delta: + type: string + sequence_number: + type: number + required: + - type + - logprobs + - output_index + - item_id + - content_index + - delta + - sequence_number + description: Event emitted when a text delta is streamed + example: + type: response.output_text.delta + logprobs: [] + output_index: 0 + item_id: item-1 + content_index: 0 + delta: Hello + sequence_number: 4 + OpenResponsesTextDoneEvent: + type: object + properties: + type: + type: string + enum: + - response.output_text.done + output_index: + type: number + item_id: + type: string + content_index: + type: number + text: + type: string + sequence_number: + type: number + logprobs: + type: array + items: + $ref: '#/components/schemas/OpenResponsesLogProbs' + required: + - type + - output_index + - item_id + - content_index + - text + - sequence_number + - logprobs + description: Event emitted when text streaming is complete + example: + type: response.output_text.done + output_index: 0 + item_id: item-1 + content_index: 0 + text: Hello! How can I help you? + sequence_number: 6 + logprobs: [] + OpenResponsesRefusalDeltaEvent: + type: object + properties: + type: + type: string + enum: + - response.refusal.delta + output_index: + type: number + item_id: + type: string + content_index: + type: number + delta: + type: string + sequence_number: + type: number + required: + - type + - output_index + - item_id + - content_index + - delta + - sequence_number + description: Event emitted when a refusal delta is streamed + example: + type: response.refusal.delta + output_index: 0 + item_id: item-1 + content_index: 0 + delta: I'm sorry + sequence_number: 4 + OpenResponsesRefusalDoneEvent: + type: object + properties: + type: + type: string + enum: + - response.refusal.done + output_index: + type: number + item_id: + type: string + content_index: + type: number + refusal: + type: string + sequence_number: + type: number + required: + - type + - output_index + - item_id + - content_index + - refusal + - sequence_number + description: Event emitted when refusal streaming is complete + example: + type: response.refusal.done + output_index: 0 + item_id: item-1 + content_index: 0 + refusal: I'm sorry, but I can't assist with that request. + sequence_number: 6 + OpenResponsesOutputTextAnnotationAddedEvent: + type: object + properties: + type: + type: string + enum: + - response.output_text.annotation.added + output_index: + type: number + item_id: + type: string + content_index: + type: number + sequence_number: + type: number + annotation_index: + type: number + annotation: + $ref: '#/components/schemas/OpenAIResponsesAnnotation' + required: + - type + - output_index + - item_id + - content_index + - sequence_number + - annotation_index + - annotation + description: Event emitted when a text annotation is added to output + example: + type: response.output_text.annotation.added + output_index: 0 + item_id: item-1 + content_index: 0 + sequence_number: 5 + annotation_index: 0 + annotation: + type: url_citation + url: https://example.com + title: Example + start_index: 0 + end_index: 7 + OpenResponsesFunctionCallArgumentsDeltaEvent: + type: object + properties: + type: + type: string + enum: + - response.function_call_arguments.delta + item_id: + type: string + output_index: + type: number + delta: + type: string + sequence_number: + type: number + required: + - type + - item_id + - output_index + - delta + - sequence_number + description: Event emitted when function call arguments are being streamed + example: + type: response.function_call_arguments.delta + item_id: item-1 + output_index: 0 + delta: '{"city": "San' + sequence_number: 4 + OpenResponsesFunctionCallArgumentsDoneEvent: + type: object + properties: + type: + type: string + enum: + - response.function_call_arguments.done + item_id: + type: string + output_index: + type: number + name: + type: string + arguments: + type: string + sequence_number: + type: number + required: + - type + - item_id + - output_index + - name + - arguments + - sequence_number + description: Event emitted when function call arguments streaming is complete + example: + type: response.function_call_arguments.done + item_id: item-1 + output_index: 0 + name: get_weather + arguments: '{"city": "San Francisco", "units": "celsius"}' + sequence_number: 6 + OpenAIResponsesReasoningDeltaEvent: + type: object + properties: + type: + type: string + enum: + - response.reasoning_text.delta + output_index: + type: number + item_id: + type: string + content_index: + type: number + delta: + type: string + sequence_number: + type: number + required: + - type + - output_index + - item_id + - content_index + - delta + - sequence_number + description: Event emitted when reasoning text delta is streamed + example: + type: response.reasoning_text.delta + output_index: 0 + item_id: item-1 + content_index: 0 + delta: First, we need + sequence_number: 4 + OpenResponsesReasoningDeltaEvent: + allOf: + - $ref: '#/components/schemas/OpenAIResponsesReasoningDeltaEvent' + - type: object + properties: {} + description: Event emitted when reasoning text delta is streamed + example: + type: response.reasoning_text.delta + output_index: 0 + item_id: item-1 + content_index: 0 + delta: First, we need + sequence_number: 4 + OpenAIResponsesReasoningDoneEvent: + type: object + properties: + type: + type: string + enum: + - response.reasoning_text.done + output_index: + type: number + item_id: + type: string + content_index: + type: number + text: + type: string + sequence_number: + type: number + required: + - type + - output_index + - item_id + - content_index + - text + - sequence_number + description: Event emitted when reasoning text streaming is complete + example: + type: response.reasoning_text.done + output_index: 0 + item_id: item-1 + content_index: 0 + text: First, we need to identify the key components and then combine them logically. + sequence_number: 6 + OpenResponsesReasoningDoneEvent: + allOf: + - $ref: '#/components/schemas/OpenAIResponsesReasoningDoneEvent' + - type: object + properties: {} + description: Event emitted when reasoning text streaming is complete + example: + type: response.reasoning_text.done + output_index: 0 + item_id: item-1 + content_index: 0 + text: First, we need to identify the key components and then combine them logically. + sequence_number: 6 + OpenAIResponsesReasoningSummaryPartAddedEvent: + type: object + properties: + type: + type: string + enum: + - response.reasoning_summary_part.added + output_index: + type: number + item_id: + type: string + summary_index: + type: number + part: + $ref: '#/components/schemas/ReasoningSummaryText' + sequence_number: + type: number + required: + - type + - output_index + - item_id + - summary_index + - part + - sequence_number + description: Event emitted when a reasoning summary part is added + example: + type: response.reasoning_summary_part.added + output_index: 0 + item_id: item-1 + summary_index: 0 + part: + type: summary_text + text: '' + sequence_number: 3 + OpenResponsesReasoningSummaryPartAddedEvent: + allOf: + - $ref: '#/components/schemas/OpenAIResponsesReasoningSummaryPartAddedEvent' + - type: object + properties: {} + description: Event emitted when a reasoning summary part is added + example: + type: response.reasoning_summary_part.added + output_index: 0 + item_id: item-1 + summary_index: 0 + part: + type: summary_text + text: '' + sequence_number: 3 + OpenResponsesReasoningSummaryPartDoneEvent: + type: object + properties: + type: + type: string + enum: + - response.reasoning_summary_part.done + output_index: + type: number + item_id: + type: string + summary_index: + type: number + part: + $ref: '#/components/schemas/ReasoningSummaryText' + sequence_number: + type: number + required: + - type + - output_index + - item_id + - summary_index + - part + - sequence_number + description: Event emitted when a reasoning summary part is complete + example: + type: response.reasoning_summary_part.done + output_index: 0 + item_id: item-1 + summary_index: 0 + part: + type: summary_text + text: Analyzing the problem step by step to find the optimal solution. + sequence_number: 7 + OpenAIResponsesReasoningSummaryTextDeltaEvent: + type: object + properties: + type: + type: string + enum: + - response.reasoning_summary_text.delta + item_id: + type: string + output_index: + type: number + summary_index: + type: number + delta: + type: string + sequence_number: + type: number + required: + - type + - item_id + - output_index + - summary_index + - delta + - sequence_number + description: Event emitted when reasoning summary text delta is streamed + example: + type: response.reasoning_summary_text.delta + item_id: item-1 + output_index: 0 + summary_index: 0 + delta: Analyzing + sequence_number: 4 + OpenResponsesReasoningSummaryTextDeltaEvent: + allOf: + - $ref: '#/components/schemas/OpenAIResponsesReasoningSummaryTextDeltaEvent' + - type: object + properties: {} + description: Event emitted when reasoning summary text delta is streamed + example: + type: response.reasoning_summary_text.delta + item_id: item-1 + output_index: 0 + summary_index: 0 + delta: Analyzing + sequence_number: 4 + OpenAIResponsesReasoningSummaryTextDoneEvent: + type: object + properties: + type: + type: string + enum: + - response.reasoning_summary_text.done + item_id: + type: string + output_index: + type: number + summary_index: + type: number + text: + type: string + sequence_number: + type: number + required: + - type + - item_id + - output_index + - summary_index + - text + - sequence_number + description: Event emitted when reasoning summary text streaming is complete + example: + type: response.reasoning_summary_text.done + item_id: item-1 + output_index: 0 + summary_index: 0 + text: Analyzing the problem step by step to find the optimal solution. + sequence_number: 6 + OpenResponsesReasoningSummaryTextDoneEvent: + allOf: + - $ref: '#/components/schemas/OpenAIResponsesReasoningSummaryTextDoneEvent' + - type: object + properties: {} + description: Event emitted when reasoning summary text streaming is complete + example: + type: response.reasoning_summary_text.done + item_id: item-1 + output_index: 0 + summary_index: 0 + text: Analyzing the problem step by step to find the optimal solution. + sequence_number: 6 + OpenAIResponsesImageGenCallInProgress: + type: object + properties: + type: + type: string + enum: + - response.image_generation_call.in_progress + item_id: + type: string + output_index: + type: number + sequence_number: + type: number + required: + - type + - item_id + - output_index + - sequence_number + OpenResponsesImageGenCallInProgress: + allOf: + - $ref: '#/components/schemas/OpenAIResponsesImageGenCallInProgress' + - type: object + properties: {} + description: Image generation call in progress + example: + type: response.image_generation_call.in_progress + output_index: 0 + sequence_number: 1 + item_id: call-123 + OpenAIResponsesImageGenCallGenerating: + type: object + properties: + type: + type: string + enum: + - response.image_generation_call.generating + item_id: + type: string + output_index: + type: number + sequence_number: + type: number + required: + - type + - item_id + - output_index + - sequence_number + OpenResponsesImageGenCallGenerating: + allOf: + - $ref: '#/components/schemas/OpenAIResponsesImageGenCallGenerating' + - type: object + properties: {} + description: Image generation call is generating + example: + type: response.image_generation_call.generating + output_index: 0 + sequence_number: 2 + item_id: call-123 + OpenAIResponsesImageGenCallPartialImage: + type: object + properties: + type: + type: string + enum: + - response.image_generation_call.partial_image + item_id: + type: string + output_index: + type: number + sequence_number: + type: number + partial_image_b64: + type: string + partial_image_index: + type: number + required: + - type + - item_id + - output_index + - sequence_number + - partial_image_b64 + - partial_image_index + OpenResponsesImageGenCallPartialImage: + allOf: + - $ref: '#/components/schemas/OpenAIResponsesImageGenCallPartialImage' + - type: object + properties: {} + description: Image generation call with partial image + example: + type: response.image_generation_call.partial_image + output_index: 0 + sequence_number: 3 + item_id: call-123 + partial_image_b64: base64encodedimage... + partial_image_index: 0 + OpenAIResponsesImageGenCallCompleted: + type: object + properties: + type: + type: string + enum: + - response.image_generation_call.completed + item_id: + type: string + output_index: + type: number + sequence_number: + type: number + required: + - type + - item_id + - output_index + - sequence_number + OpenResponsesImageGenCallCompleted: + allOf: + - $ref: '#/components/schemas/OpenAIResponsesImageGenCallCompleted' + - type: object + properties: {} + description: Image generation call completed + example: + type: response.image_generation_call.completed + output_index: 0 + sequence_number: 4 + item_id: call-123 + OpenResponsesStreamEvent: + oneOf: + - allOf: + - $ref: '#/components/schemas/OpenResponsesCreatedEvent' + - type: object + properties: + response: + $ref: '#/components/schemas/OpenResponsesNonStreamingResponse' + description: Event emitted when a response is created + example: + type: response.created + response: + id: resp-abc123 + object: response + created_at: 1704067200 + model: gpt-4 + status: in_progress + output: [] + tools: [] + tool_choice: auto + parallel_tool_calls: true + error: null + incomplete_details: null + metadata: null + instructions: null + temperature: null + top_p: null + max_output_tokens: null + sequence_number: 0 + - allOf: + - $ref: '#/components/schemas/OpenResponsesInProgressEvent' + - type: object + properties: + response: + $ref: '#/components/schemas/OpenResponsesNonStreamingResponse' + description: Event emitted when a response is in progress + example: + type: response.in_progress + response: + id: resp-abc123 + object: response + created_at: 1704067200 + model: gpt-4 + status: in_progress + output: [] + tools: [] + tool_choice: auto + parallel_tool_calls: true + error: null + incomplete_details: null + metadata: null + instructions: null + temperature: null + top_p: null + max_output_tokens: null + sequence_number: 1 + - allOf: + - $ref: '#/components/schemas/OpenResponsesCompletedEvent' + - type: object + properties: + response: + $ref: '#/components/schemas/OpenResponsesNonStreamingResponse' + description: Event emitted when a response has completed successfully + example: + type: response.completed + response: + id: resp-abc123 + object: response + created_at: 1704067200 + model: gpt-4 + status: completed + output: + - id: item-1 + type: message + status: completed + role: assistant + content: - type: output_text text: Hello! How can I help you? annotations: [] - description: An output message item - ReasoningTextContent: - type: object - properties: - type: - type: string - enum: - - reasoning_text - text: - type: string - required: - - type - - text - example: - type: reasoning_text - text: Let me think step by step about this problem... - ReasoningSummaryText: - type: object - properties: - type: - type: string - enum: - - summary_text - text: - type: string - required: - - type - - text - example: - type: summary_text - text: Analyzed the problem using first principles - OutputItemReasoning: - type: object - properties: - type: + tools: [] + tool_choice: auto + parallel_tool_calls: true + error: null + incomplete_details: null + metadata: null + instructions: null + temperature: null + top_p: null + max_output_tokens: null + sequence_number: 10 + - allOf: + - $ref: '#/components/schemas/OpenResponsesIncompleteEvent' + - type: object + properties: + response: + $ref: '#/components/schemas/OpenResponsesNonStreamingResponse' + description: Event emitted when a response is incomplete + example: + type: response.incomplete + response: + id: resp-abc123 + object: response + created_at: 1704067200 + model: gpt-4 + status: incomplete + output: [] + tools: [] + tool_choice: auto + parallel_tool_calls: true + error: null + incomplete_details: null + metadata: null + instructions: null + temperature: null + top_p: null + max_output_tokens: null + sequence_number: 5 + - allOf: + - $ref: '#/components/schemas/OpenResponsesFailedEvent' + - type: object + properties: + response: + $ref: '#/components/schemas/OpenResponsesNonStreamingResponse' + description: Event emitted when a response has failed + example: + type: response.failed + response: + id: resp-abc123 + object: response + created_at: 1704067200 + model: gpt-4 + status: failed + output: [] + tools: [] + tool_choice: auto + parallel_tool_calls: true + error: null + incomplete_details: null + metadata: null + instructions: null + temperature: null + top_p: null + max_output_tokens: null + sequence_number: 3 + - $ref: '#/components/schemas/OpenResponsesErrorEvent' + - allOf: + - $ref: '#/components/schemas/OpenResponsesOutputItemAddedEvent' + - type: object + properties: + item: + $ref: '#/components/schemas/ResponsesOutputItem' + description: Event emitted when a new output item is added to the response + example: + type: response.output_item.added + output_index: 0 + item: + id: item-1 + type: message + status: in_progress + role: assistant + content: [] + sequence_number: 2 + - allOf: + - $ref: '#/components/schemas/OpenResponsesOutputItemDoneEvent' + - type: object + properties: + item: + $ref: '#/components/schemas/ResponsesOutputItem' + description: Event emitted when an output item is complete + example: + type: response.output_item.done + output_index: 0 + item: + id: item-1 + type: message + status: completed + role: assistant + content: + - type: output_text + text: Hello! How can I help you? + annotations: [] + sequence_number: 8 + - allOf: + - $ref: '#/components/schemas/OpenResponsesContentPartAddedEvent' + - type: object + properties: + part: + anyOf: + - $ref: '#/components/schemas/ResponseOutputText' + - $ref: '#/components/schemas/ReasoningTextContent' + - $ref: '#/components/schemas/OpenAIResponsesRefusalContent' + description: Event emitted when a new content part is added to an output item + example: + type: response.content_part.added + output_index: 0 + item_id: item-1 + content_index: 0 + part: + type: output_text + text: '' + annotations: [] + sequence_number: 3 + - allOf: + - $ref: '#/components/schemas/OpenResponsesContentPartDoneEvent' + - type: object + properties: + part: + anyOf: + - $ref: '#/components/schemas/ResponseOutputText' + - $ref: '#/components/schemas/ReasoningTextContent' + - $ref: '#/components/schemas/OpenAIResponsesRefusalContent' + description: Event emitted when a content part is complete + example: + type: response.content_part.done + output_index: 0 + item_id: item-1 + content_index: 0 + part: + type: output_text + text: Hello! How can I help you? + annotations: [] + sequence_number: 7 + - allOf: + - $ref: '#/components/schemas/OpenResponsesTextDeltaEvent' + - type: object + properties: {} + description: Event emitted when a text delta is streamed + example: + type: response.output_text.delta + logprobs: [] + output_index: 0 + item_id: item-1 + content_index: 0 + delta: Hello + sequence_number: 4 + - allOf: + - $ref: '#/components/schemas/OpenResponsesTextDoneEvent' + - type: object + properties: {} + description: Event emitted when text streaming is complete + example: + type: response.output_text.done + output_index: 0 + item_id: item-1 + content_index: 0 + text: Hello! How can I help you? + sequence_number: 6 + logprobs: [] + - allOf: + - $ref: '#/components/schemas/OpenResponsesRefusalDeltaEvent' + - type: object + properties: {} + description: Event emitted when a refusal delta is streamed + example: + type: response.refusal.delta + output_index: 0 + item_id: item-1 + content_index: 0 + delta: I'm sorry + sequence_number: 4 + - allOf: + - $ref: '#/components/schemas/OpenResponsesRefusalDoneEvent' + - type: object + properties: {} + description: Event emitted when refusal streaming is complete + example: + type: response.refusal.done + output_index: 0 + item_id: item-1 + content_index: 0 + refusal: I'm sorry, but I can't assist with that request. + sequence_number: 6 + - allOf: + - $ref: '#/components/schemas/OpenResponsesOutputTextAnnotationAddedEvent' + - type: object + properties: {} + description: Event emitted when a text annotation is added to output + example: + type: response.output_text.annotation.added + output_index: 0 + item_id: item-1 + content_index: 0 + sequence_number: 5 + annotation_index: 0 + annotation: + type: url_citation + url: https://example.com + title: Example + start_index: 0 + end_index: 7 + - allOf: + - $ref: '#/components/schemas/OpenResponsesFunctionCallArgumentsDeltaEvent' + - type: object + properties: {} + description: Event emitted when function call arguments are being streamed + example: + type: response.function_call_arguments.delta + item_id: item-1 + output_index: 0 + delta: '{"city": "San' + sequence_number: 4 + - allOf: + - $ref: '#/components/schemas/OpenResponsesFunctionCallArgumentsDoneEvent' + - type: object + properties: {} + description: Event emitted when function call arguments streaming is complete + example: + type: response.function_call_arguments.done + item_id: item-1 + output_index: 0 + name: get_weather + arguments: '{"city": "San Francisco", "units": "celsius"}' + sequence_number: 6 + - $ref: '#/components/schemas/OpenResponsesReasoningDeltaEvent' + - $ref: '#/components/schemas/OpenResponsesReasoningDoneEvent' + - $ref: '#/components/schemas/OpenResponsesReasoningSummaryPartAddedEvent' + - allOf: + - $ref: '#/components/schemas/OpenResponsesReasoningSummaryPartDoneEvent' + - type: object + properties: {} + description: Event emitted when a reasoning summary part is complete + example: + type: response.reasoning_summary_part.done + output_index: 0 + item_id: item-1 + summary_index: 0 + part: + type: summary_text + text: Analyzing the problem step by step to find the optimal solution. + sequence_number: 7 + - $ref: '#/components/schemas/OpenResponsesReasoningSummaryTextDeltaEvent' + - $ref: '#/components/schemas/OpenResponsesReasoningSummaryTextDoneEvent' + - $ref: '#/components/schemas/OpenResponsesImageGenCallInProgress' + - $ref: '#/components/schemas/OpenResponsesImageGenCallGenerating' + - $ref: '#/components/schemas/OpenResponsesImageGenCallPartialImage' + - $ref: '#/components/schemas/OpenResponsesImageGenCallCompleted' + description: Union of all possible event types emitted during response streaming + example: + type: response.created + response: + id: resp-abc123 + object: response + created_at: 1704067200 + model: gpt-4 + status: in_progress + output: [] + tools: [] + tool_choice: auto + parallel_tool_calls: true + error: null + incomplete_details: null + metadata: null + instructions: null + temperature: null + top_p: null + max_output_tokens: null + sequence_number: 0 + BadRequestResponseErrorData: + type: object + properties: + code: + type: integer + message: + type: string + metadata: + type: object + nullable: true + additionalProperties: + nullable: true + required: + - code + - message + description: Error data for BadRequestResponse + example: + code: 400 + message: Invalid request parameters + BadRequestResponse: + type: object + properties: + error: + $ref: '#/components/schemas/BadRequestResponseErrorData' + user_id: + type: string + nullable: true + required: + - error + description: Bad Request - Invalid request parameters or malformed input + example: + error: + code: 400 + message: Invalid request parameters + UnauthorizedResponseErrorData: + type: object + properties: + code: + type: integer + message: + type: string + metadata: + type: object + nullable: true + additionalProperties: + nullable: true + required: + - code + - message + description: Error data for UnauthorizedResponse + example: + code: 401 + message: Missing Authentication header + UnauthorizedResponse: + type: object + properties: + error: + $ref: '#/components/schemas/UnauthorizedResponseErrorData' + user_id: + type: string + nullable: true + required: + - error + description: Unauthorized - Authentication required or invalid credentials + example: + error: + code: 401 + message: Missing Authentication header + PaymentRequiredResponseErrorData: + type: object + properties: + code: + type: integer + message: + type: string + metadata: + type: object + nullable: true + additionalProperties: + nullable: true + required: + - code + - message + description: Error data for PaymentRequiredResponse + example: + code: 402 + message: Insufficient credits. Add more using https://openrouter.ai/credits + PaymentRequiredResponse: + type: object + properties: + error: + $ref: '#/components/schemas/PaymentRequiredResponseErrorData' + user_id: + type: string + nullable: true + required: + - error + description: Payment Required - Insufficient credits or quota to complete request + example: + error: + code: 402 + message: Insufficient credits. Add more using https://openrouter.ai/credits + NotFoundResponseErrorData: + type: object + properties: + code: + type: integer + message: + type: string + metadata: + type: object + nullable: true + additionalProperties: + nullable: true + required: + - code + - message + description: Error data for NotFoundResponse + example: + code: 404 + message: Resource not found + NotFoundResponse: + type: object + properties: + error: + $ref: '#/components/schemas/NotFoundResponseErrorData' + user_id: + type: string + nullable: true + required: + - error + description: Not Found - Resource does not exist + example: + error: + code: 404 + message: Resource not found + RequestTimeoutResponseErrorData: + type: object + properties: + code: + type: integer + message: + type: string + metadata: + type: object + nullable: true + additionalProperties: + nullable: true + required: + - code + - message + description: Error data for RequestTimeoutResponse + example: + code: 408 + message: Operation timed out. Please try again later. + RequestTimeoutResponse: + type: object + properties: + error: + $ref: '#/components/schemas/RequestTimeoutResponseErrorData' + user_id: + type: string + nullable: true + required: + - error + description: Request Timeout - Operation exceeded time limit + example: + error: + code: 408 + message: Operation timed out. Please try again later. + PayloadTooLargeResponseErrorData: + type: object + properties: + code: + type: integer + message: + type: string + metadata: + type: object + nullable: true + additionalProperties: + nullable: true + required: + - code + - message + description: Error data for PayloadTooLargeResponse + example: + code: 413 + message: Request payload too large + PayloadTooLargeResponse: + type: object + properties: + error: + $ref: '#/components/schemas/PayloadTooLargeResponseErrorData' + user_id: + type: string + nullable: true + required: + - error + description: Payload Too Large - Request payload exceeds size limits + example: + error: + code: 413 + message: Request payload too large + UnprocessableEntityResponseErrorData: + type: object + properties: + code: + type: integer + message: + type: string + metadata: + type: object + nullable: true + additionalProperties: + nullable: true + required: + - code + - message + description: Error data for UnprocessableEntityResponse + example: + code: 422 + message: Invalid argument + UnprocessableEntityResponse: + type: object + properties: + error: + $ref: '#/components/schemas/UnprocessableEntityResponseErrorData' + user_id: + type: string + nullable: true + required: + - error + description: Unprocessable Entity - Semantic validation failure + example: + error: + code: 422 + message: Invalid argument + TooManyRequestsResponseErrorData: + type: object + properties: + code: + type: integer + message: + type: string + metadata: + type: object + nullable: true + additionalProperties: + nullable: true + required: + - code + - message + description: Error data for TooManyRequestsResponse + example: + code: 429 + message: Rate limit exceeded + TooManyRequestsResponse: + type: object + properties: + error: + $ref: '#/components/schemas/TooManyRequestsResponseErrorData' + user_id: + type: string + nullable: true + required: + - error + description: Too Many Requests - Rate limit exceeded + example: + error: + code: 429 + message: Rate limit exceeded + InternalServerResponseErrorData: + type: object + properties: + code: + type: integer + message: + type: string + metadata: + type: object + nullable: true + additionalProperties: + nullable: true + required: + - code + - message + description: Error data for InternalServerResponse + example: + code: 500 + message: Internal Server Error + InternalServerResponse: + type: object + properties: + error: + $ref: '#/components/schemas/InternalServerResponseErrorData' + user_id: + type: string + nullable: true + required: + - error + description: Internal Server Error - Unexpected server error + example: + error: + code: 500 + message: Internal Server Error + BadGatewayResponseErrorData: + type: object + properties: + code: + type: integer + message: + type: string + metadata: + type: object + nullable: true + additionalProperties: + nullable: true + required: + - code + - message + description: Error data for BadGatewayResponse + example: + code: 502 + message: Provider returned error + BadGatewayResponse: + type: object + properties: + error: + $ref: '#/components/schemas/BadGatewayResponseErrorData' + user_id: + type: string + nullable: true + required: + - error + description: Bad Gateway - Provider/upstream API failure + example: + error: + code: 502 + message: Provider returned error + ServiceUnavailableResponseErrorData: + type: object + properties: + code: + type: integer + message: + type: string + metadata: + type: object + nullable: true + additionalProperties: + nullable: true + required: + - code + - message + description: Error data for ServiceUnavailableResponse + example: + code: 503 + message: Service temporarily unavailable + ServiceUnavailableResponse: + type: object + properties: + error: + $ref: '#/components/schemas/ServiceUnavailableResponseErrorData' + user_id: + type: string + nullable: true + required: + - error + description: Service Unavailable - Service temporarily unavailable + example: + error: + code: 503 + message: Service temporarily unavailable + EdgeNetworkTimeoutResponseErrorData: + type: object + properties: + code: + type: integer + message: + type: string + metadata: + type: object + nullable: true + additionalProperties: + nullable: true + required: + - code + - message + description: Error data for EdgeNetworkTimeoutResponse + example: + code: 524 + message: Request timed out. Please try again later. + EdgeNetworkTimeoutResponse: + type: object + properties: + error: + $ref: '#/components/schemas/EdgeNetworkTimeoutResponseErrorData' + user_id: + type: string + nullable: true + required: + - error + description: Infrastructure Timeout - Provider request timed out at edge network + example: + error: + code: 524 + message: Request timed out. Please try again later. + ProviderOverloadedResponseErrorData: + type: object + properties: + code: + type: integer + message: + type: string + metadata: + type: object + nullable: true + additionalProperties: + nullable: true + required: + - code + - message + description: Error data for ProviderOverloadedResponse + example: + code: 529 + message: Provider returned error + ProviderOverloadedResponse: + type: object + properties: + error: + $ref: '#/components/schemas/ProviderOverloadedResponseErrorData' + user_id: + type: string + nullable: true + required: + - error + description: Provider Overloaded - Provider is temporarily overloaded + example: + error: + code: 529 + message: Provider returned error + OpenResponsesReasoning: + allOf: + - $ref: '#/components/schemas/OutputItemReasoning' + - type: object + properties: + signature: + type: string + nullable: true + format: + type: string + nullable: true + enum: + - unknown + - openai-responses-v1 + - xai-responses-v1 + - anthropic-claude-v1 + - google-gemini-v1 + example: + type: reasoning + id: reasoning-abc123 + summary: + - type: summary_text + text: Step by step analysis + description: Reasoning output item with signature and format extensions + OpenResponsesEasyInputMessage: + type: object + properties: + type: + type: string + enum: + - message + role: + anyOf: + - type: string + enum: + - user + - type: string + enum: + - system + - type: string + enum: + - assistant + - type: string + enum: + - developer + content: + anyOf: + - type: array + items: + oneOf: + - $ref: '#/components/schemas/ResponseInputText' + - $ref: '#/components/schemas/ResponseInputImage' + - $ref: '#/components/schemas/ResponseInputFile' + - $ref: '#/components/schemas/ResponseInputAudio' + discriminator: + propertyName: type + mapping: + input_text: '#/components/schemas/ResponseInputText' + input_image: '#/components/schemas/ResponseInputImage' + input_file: '#/components/schemas/ResponseInputFile' + input_audio: '#/components/schemas/ResponseInputAudio' + - type: string + required: + - role + - content + OpenResponsesInputMessageItem: + type: object + properties: + id: + type: string + type: + type: string + enum: + - message + role: + anyOf: + - type: string + enum: + - user + - type: string + enum: + - system + - type: string + enum: + - developer + content: + type: array + items: + oneOf: + - $ref: '#/components/schemas/ResponseInputText' + - $ref: '#/components/schemas/ResponseInputImage' + - $ref: '#/components/schemas/ResponseInputFile' + - $ref: '#/components/schemas/ResponseInputAudio' + discriminator: + propertyName: type + mapping: + input_text: '#/components/schemas/ResponseInputText' + input_image: '#/components/schemas/ResponseInputImage' + input_file: '#/components/schemas/ResponseInputFile' + input_audio: '#/components/schemas/ResponseInputAudio' + required: + - role + - content + OpenResponsesFunctionToolCall: + type: object + properties: + type: + type: string + enum: + - function_call + call_id: + type: string + name: + type: string + arguments: + type: string + id: + type: string + status: + $ref: '#/components/schemas/ToolCallStatus' + required: + - type + - call_id + - name + - arguments + - id + description: A function call initiated by the model + example: + id: call-abc123 + type: function_call + call_id: call-abc123 + name: get_weather + arguments: '{"location":"San Francisco"}' + status: completed + OpenResponsesFunctionCallOutput: + type: object + properties: + type: + type: string + enum: + - function_call_output + id: + type: string + nullable: true + call_id: + type: string + output: + type: string + status: + $ref: '#/components/schemas/ToolCallStatus' + required: + - type + - call_id + - output + description: The output from a function call execution + example: + type: function_call_output + id: output-abc123 + call_id: call-abc123 + output: '{"temperature":72,"conditions":"sunny"}' + status: completed + OpenResponsesInput: + anyOf: + - type: string + - type: array + items: + anyOf: + - $ref: '#/components/schemas/OpenResponsesReasoning' + - $ref: '#/components/schemas/OpenResponsesEasyInputMessage' + - $ref: '#/components/schemas/OpenResponsesInputMessageItem' + - $ref: '#/components/schemas/OpenResponsesFunctionToolCall' + - $ref: '#/components/schemas/OpenResponsesFunctionCallOutput' + - $ref: '#/components/schemas/ResponsesOutputMessage' + - $ref: '#/components/schemas/ResponsesOutputItemReasoning' + - $ref: '#/components/schemas/ResponsesOutputItemFunctionCall' + - $ref: '#/components/schemas/ResponsesWebSearchCallOutput' + - $ref: '#/components/schemas/ResponsesOutputItemFileSearchCall' + - $ref: '#/components/schemas/ResponsesImageGenerationCall' + description: Input for a response request - can be a string or array of items + example: + - role: user + content: What is the weather today? + OpenResponsesResponseText: + allOf: + - $ref: '#/components/schemas/ResponseTextConfig' + - type: object + properties: {} + description: Text output configuration including format and verbosity + example: + format: + type: text + verbosity: medium + OpenResponsesReasoningConfig: + allOf: + - $ref: '#/components/schemas/OpenAIResponsesReasoningConfig' + - type: object + nullable: true + properties: + max_tokens: + type: number + nullable: true + enabled: + type: boolean + nullable: true + description: Configuration for reasoning mode in the response + example: + summary: auto + enabled: true + OpenAIResponsesIncludable: + type: string + enum: + - file_search_call.results + - message.input_image.image_url + - computer_call_output.output.image_url + - reasoning.encrypted_content + - code_interpreter_call.outputs + DataCollection: + type: string + nullable: true + enum: + - deny + - allow + description: >- + Data collection setting. If no available model provider meets the requirement, your request will return an + error. + + - allow: (default) allow providers which store user data non-transiently and may train on it + + + - deny: use only providers which do not collect user data. + example: allow + ProviderName: + type: string + enum: + - AI21 + - AionLabs + - Alibaba + - Amazon Bedrock + - Amazon Nova + - Anthropic + - Arcee AI + - AtlasCloud + - Avian + - Azure + - BaseTen + - BytePlus + - Black Forest Labs + - Cerebras + - Chutes + - Cirrascale + - Clarifai + - Cloudflare + - Cohere + - Crusoe + - DeepInfra + - DeepSeek + - Featherless + - Fireworks + - Friendli + - GMICloud + - GoPomelo + - Google + - Google AI Studio + - Groq + - Hyperbolic + - Inception + - InferenceNet + - Infermatic + - Inflection + - Liquid + - Mancer 2 + - Minimax + - ModelRun + - Mistral + - Modular + - Moonshot AI + - Morph + - NCompass + - Nebius + - NextBit + - Novita + - Nvidia + - OpenAI + - OpenInference + - Parasail + - Perplexity + - Phala + - Relace + - SambaNova + - SiliconFlow + - Stealth + - StreamLake + - Switchpoint + - Targon + - Together + - Venice + - WandB + - xAI + - Z.AI + - FakeProvider + example: OpenAI + Quantization: + type: string + enum: + - int4 + - int8 + - fp4 + - fp6 + - fp8 + - fp16 + - bf16 + - fp32 + - unknown + example: fp16 + ProviderSort: + type: string + nullable: true + enum: + - price + - throughput + - latency + description: >- + The sorting strategy to use for this request, if "order" is not specified. When set, no load balancing is + performed. + example: price + BigNumberUnion: + anyOf: + - type: number + - type: string + - type: number + example: 1000 + description: A value in string or number format that is a large number + example: 1000 + OpenResponsesRequest: + type: object + properties: + input: + $ref: '#/components/schemas/OpenResponsesInput' + instructions: + type: string + nullable: true + metadata: + $ref: '#/components/schemas/OpenResponsesRequestMetadata' + tools: + type: array + items: + oneOf: + - allOf: + - $ref: '#/components/schemas/OpenResponsesFunctionTool' + - type: object + properties: {} + description: Function tool definition + example: + type: function + name: get_weather + description: Get the current weather in a location + parameters: + type: object + properties: + location: + type: string + description: The city and state + unit: + type: string + enum: + - celsius + - fahrenheit + required: + - location + - $ref: '#/components/schemas/OpenResponsesWebSearchPreviewTool' + - $ref: '#/components/schemas/OpenResponsesWebSearchPreview20250311Tool' + - $ref: '#/components/schemas/OpenResponsesWebSearchTool' + - $ref: '#/components/schemas/OpenResponsesWebSearch20250826Tool' + tool_choice: + $ref: '#/components/schemas/OpenAIResponsesToolChoice' + parallel_tool_calls: + type: boolean + nullable: true + model: + type: string + models: + type: array + items: + type: string + text: + $ref: '#/components/schemas/OpenResponsesResponseText' + reasoning: + $ref: '#/components/schemas/OpenResponsesReasoningConfig' + max_output_tokens: + type: number + nullable: true + temperature: + type: number + nullable: true + minimum: 0 + maximum: 2 + top_p: + type: number + nullable: true + minimum: 0 + top_k: + type: number + prompt_cache_key: + type: string + nullable: true + previous_response_id: + type: string + nullable: true + prompt: + $ref: '#/components/schemas/OpenAIResponsesPrompt' + include: + type: array + nullable: true + items: + $ref: '#/components/schemas/OpenAIResponsesIncludable' + background: + type: boolean + nullable: true + safety_identifier: + type: string + nullable: true + store: + type: boolean + const: false + default: false + service_tier: + type: string + enum: + - auto + default: auto + truncation: + allOf: + - $ref: '#/components/schemas/OpenAIResponsesTruncation' + - example: auto + stream: + type: boolean + default: false + provider: + type: object + nullable: true + properties: + allow_fallbacks: + type: boolean + nullable: true + description: > + Whether to allow backup providers to serve requests + + - true: (default) when the primary provider (or your custom providers in "order") is unavailable, use + the next best provider. + + - false: use only the primary/custom provider, and return the upstream error if it's unavailable. + require_parameters: + type: boolean + nullable: true + description: >- + Whether to filter providers to only those that support the parameters you've provided. If this setting + is omitted or set to false, then providers will receive only the parameters they support, and ignore the + rest. + data_collection: + $ref: '#/components/schemas/DataCollection' + zdr: + type: boolean + nullable: true + description: >- + Whether to restrict routing to only ZDR (Zero Data Retention) endpoints. When true, only endpoints that + do not retain prompts will be used. + example: true + enforce_distillable_text: + type: boolean + nullable: true + description: >- + Whether to restrict routing to only models that allow text distillation. When true, only models where + the author has allowed distillation will be used. + example: true + order: + type: array + nullable: true + items: + anyOf: + - $ref: '#/components/schemas/ProviderName' + - type: string + description: >- + An ordered list of provider slugs. The router will attempt to use the first provider in the subset of + this list that supports your requested model, and fall back to the next if it is unavailable. If no + providers are available, the request will fail with an error message. + only: + type: array + nullable: true + items: + anyOf: + - $ref: '#/components/schemas/ProviderName' + - type: string + description: >- + List of provider slugs to allow. If provided, this list is merged with your account-wide allowed + provider settings for this request. + ignore: + type: array + nullable: true + items: + anyOf: + - $ref: '#/components/schemas/ProviderName' + - type: string + description: >- + List of provider slugs to ignore. If provided, this list is merged with your account-wide ignored + provider settings for this request. + quantizations: + type: array + nullable: true + items: + $ref: '#/components/schemas/Quantization' + description: A list of quantization levels to filter the provider by. + sort: + $ref: '#/components/schemas/ProviderSort' + max_price: + type: object + properties: + prompt: + $ref: '#/components/schemas/BigNumberUnion' + completion: + $ref: '#/components/schemas/BigNumberUnion' + image: + $ref: '#/components/schemas/BigNumberUnion' + audio: + $ref: '#/components/schemas/BigNumberUnion' + request: + $ref: '#/components/schemas/BigNumberUnion' + additionalProperties: false + description: >- + The object specifying the maximum price you want to pay for this request. USD price per million tokens, + for prompt and completion. + additionalProperties: false + description: When multiple model providers are available, optionally indicate your routing preference. + plugins: + type: array + items: + oneOf: + - type: object + properties: + id: type: string enum: - - reasoning - id: - type: string - content: - type: array - items: - $ref: '#/components/schemas/ReasoningTextContent' - summary: - type: array - items: - $ref: '#/components/schemas/ReasoningSummaryText' - encrypted_content: - type: string - nullable: true - status: - anyOf: - - type: string - enum: - - completed - - type: string - enum: - - incomplete - - type: string - enum: - - in_progress - required: - - type - - id - - summary - example: - type: reasoning - id: reasoning-abc123 - summary: - - type: summary_text - text: Analyzed the problem using first principles - ResponsesOutputItemReasoning: - allOf: - - $ref: '#/components/schemas/OutputItemReasoning' - - type: object - properties: {} - example: - id: reasoning-123 - type: reasoning - status: completed - summary: - - type: summary_text - text: Analyzed the problem and found the optimal solution. - content: - - type: reasoning_text - text: First, we analyze the problem... - description: An output item containing reasoning - OutputItemFunctionCall: - type: object - properties: - type: + - moderation + required: + - id + - type: object + properties: + id: type: string enum: - - function_call - id: - type: string - name: - type: string - arguments: - type: string - call_id: + - web + max_results: + type: number + search_prompt: type: string - status: - anyOf: - - type: string - enum: - - completed - - type: string - enum: - - incomplete - - type: string - enum: - - in_progress - required: - - type - - name - - arguments - - call_id - example: - type: function_call - id: call-abc123 - name: get_weather - arguments: '{"location":"San Francisco","unit":"celsius"}' - call_id: call-abc123 - ResponsesOutputItemFunctionCall: - allOf: - - $ref: '#/components/schemas/OutputItemFunctionCall' - - type: object - properties: {} - example: - type: function_call - id: call-abc123 - name: get_weather - arguments: '{"location":"San Francisco","unit":"celsius"}' - call_id: call-abc123 - WebSearchStatus: - type: string - enum: - - completed - - searching - - in_progress - - failed - example: completed - x-speakeasy-unknown-values: allow - OutputItemWebSearchCall: - type: object - properties: - type: + engine: type: string enum: - - web_search_call - id: - type: string - status: - $ref: '#/components/schemas/WebSearchStatus' - required: - - type - - id - - status - example: - type: web_search_call - id: search-abc123 - status: completed - ResponsesWebSearchCallOutput: - allOf: - - $ref: '#/components/schemas/OutputItemWebSearchCall' - - type: object - properties: {} - example: - type: web_search_call - id: search-abc123 - status: completed - OutputItemFileSearchCall: - type: object - properties: - type: + - native + - exa + required: + - id + - type: object + properties: + id: type: string enum: - - file_search_call - id: - type: string - queries: - type: array - items: + - file-parser + max_files: + type: number + pdf: + type: object + properties: + engine: type: string - status: - $ref: '#/components/schemas/WebSearchStatus' - required: - - type - - id - - queries - - status - example: - type: file_search_call - id: filesearch-abc123 - queries: - - machine learning algorithms - - neural networks - status: completed - ResponsesOutputItemFileSearchCall: - allOf: - - $ref: '#/components/schemas/OutputItemFileSearchCall' - - type: object - properties: {} - example: - type: file_search_call - id: filesearch-abc123 - queries: - - machine learning algorithms - - neural networks - status: completed - ImageGenerationStatus: - type: string - enum: - - in_progress - - completed - - generating - - failed - example: completed - x-speakeasy-unknown-values: allow - OutputItemImageGenerationCall: - type: object - properties: - type: + enum: + - mistral-ocr + - pdf-text + - native + required: + - id + - type: object + properties: + id: type: string enum: - - image_generation_call - id: - type: string - result: - type: string - nullable: true - default: null - status: - $ref: '#/components/schemas/ImageGenerationStatus' - required: - - type - - id - - status - example: - type: image_generation_call - id: imagegen-abc123 - result: iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg== - status: completed - ResponsesImageGenerationCall: - allOf: - - $ref: '#/components/schemas/OutputItemImageGenerationCall' - - type: object - properties: {} - example: - type: image_generation_call - id: imagegen-abc123 - result: iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg== - status: completed - ResponsesOutputItem: - anyOf: - - $ref: '#/components/schemas/ResponsesOutputMessage' - - $ref: '#/components/schemas/ResponsesOutputItemReasoning' - - $ref: '#/components/schemas/ResponsesOutputItemFunctionCall' - - $ref: '#/components/schemas/ResponsesWebSearchCallOutput' - - $ref: '#/components/schemas/ResponsesOutputItemFileSearchCall' - - $ref: '#/components/schemas/ResponsesImageGenerationCall' - description: An output item from the response - example: - id: msg-abc123 - role: assistant - type: message - status: completed - content: - - type: output_text - text: Hello! How can I help you today? - ResponsesErrorField: - type: object + - response-healing + required: + - id + description: Plugins you want to enable for this request, including their settings. + user: + type: string + maxLength: 128 + description: >- + A unique identifier representing your end-user, which helps distinguish between different users of your app. + This allows your app to identify specific users in case of abuse reports, preventing your entire app from + being affected by the actions of individual users. Maximum of 128 characters. + description: Request schema for Responses endpoint + example: + model: anthropic/claude-4.5-sonnet-20250929 + input: + - type: message + content: Hello, how are you? + role: user + temperature: 0.7 + top_p: 0.9 + tools: + - type: function + name: get_current_weather + description: Get the current weather in a given location + parameters: + type: object + properties: + location: + type: string + ActivityItem: + type: object + properties: + date: + type: string + description: Date of the activity (YYYY-MM-DD format) + example: '2025-08-24' + model: + type: string + description: Model slug (e.g., "openai/gpt-4.1") + example: openai/gpt-4.1 + model_permaslug: + type: string + description: Model permaslug (e.g., "openai/gpt-4.1-2025-04-14") + example: openai/gpt-4.1-2025-04-14 + endpoint_id: + type: string + description: Unique identifier for the endpoint + example: 550e8400-e29b-41d4-a716-446655440000 + provider_name: + type: string + description: Name of the provider serving this endpoint + example: OpenAI + usage: + type: number + description: Total cost in USD (OpenRouter credits spent) + example: 0.015 + byok_usage_inference: + type: number + description: BYOK inference cost in USD (external credits spent) + example: 0.012 + requests: + type: number + description: Number of requests made + example: 5 + prompt_tokens: + type: number + description: Total prompt tokens used + example: 50 + completion_tokens: + type: number + description: Total completion tokens generated + example: 125 + reasoning_tokens: + type: number + description: Total reasoning tokens used + example: 25 + required: + - date + - model + - model_permaslug + - endpoint_id + - provider_name + - usage + - byok_usage_inference + - requests + - prompt_tokens + - completion_tokens + - reasoning_tokens + example: + date: '2025-08-24' + model: openai/gpt-4.1 + model_permaslug: openai/gpt-4.1-2025-04-14 + endpoint_id: 550e8400-e29b-41d4-a716-446655440000 + provider_name: OpenAI + usage: 0.015 + byok_usage_inference: 0.012 + requests: 5 + prompt_tokens: 50 + completion_tokens: 125 + reasoning_tokens: 25 + ForbiddenResponseErrorData: + type: object + properties: + code: + type: integer + message: + type: string + metadata: + type: object + nullable: true + additionalProperties: nullable: true - properties: - code: - type: string - enum: - - server_error - - rate_limit_exceeded - - invalid_prompt - - vector_store_timeout - - invalid_image - - invalid_image_format - - invalid_base64_image - - invalid_image_url - - image_too_large - - image_too_small - - image_parse_error - - image_content_policy_violation - - invalid_image_mode - - image_file_too_large - - unsupported_image_media_type - - empty_image_file - - failed_to_download_image - - image_file_not_found - x-speakeasy-unknown-values: allow - message: - type: string - required: - - code - - message - description: Error information returned from the API - example: - code: rate_limit_exceeded - message: Rate limit exceeded. Please try again later. - OpenAIResponsesIncompleteDetails: - type: object - nullable: true - properties: - reason: - type: string - enum: - - max_output_tokens - - content_filter - x-speakeasy-unknown-values: allow - OpenAIResponsesUsage: - type: object - properties: - input_tokens: - type: number - input_tokens_details: - type: object - properties: - cached_tokens: - type: number - required: - - cached_tokens - output_tokens: - type: number - output_tokens_details: - type: object - properties: - reasoning_tokens: - type: number - required: - - reasoning_tokens - total_tokens: - type: number - required: - - input_tokens - - input_tokens_details - - output_tokens - - output_tokens_details - - total_tokens - OpenResponsesUsage: - allOf: - - $ref: '#/components/schemas/OpenAIResponsesUsage' - - type: object - properties: - cost: - type: number - nullable: true - description: Cost of the completion - is_byok: - type: boolean - description: Whether a request was made using a Bring Your Own Key configuration - cost_details: - type: object - properties: - upstream_inference_cost: - type: number - nullable: true - upstream_inference_input_cost: - type: number - upstream_inference_output_cost: - type: number - required: - - upstream_inference_input_cost - - upstream_inference_output_cost - description: Token usage information for the response - example: - input_tokens: 10 - output_tokens: 25 - total_tokens: 35 - input_tokens_details: - cached_tokens: 0 - output_tokens_details: - reasoning_tokens: 0 - cost: 0.0012 - cost_details: - upstream_inference_cost: null - upstream_inference_input_cost: 0.0008 - upstream_inference_output_cost: 0.0004 - ResponseInputText: - type: object - properties: - type: - type: string - enum: - - input_text - text: - type: string - required: - - type + required: + - code + - message + description: Error data for ForbiddenResponse + example: + code: 403 + message: Only provisioning keys can perform this operation + ForbiddenResponse: + type: object + properties: + error: + $ref: '#/components/schemas/ForbiddenResponseErrorData' + user_id: + type: string + nullable: true + required: + - error + description: Forbidden - Authentication successful but insufficient permissions + example: + error: + code: 403 + message: Only provisioning keys can perform this operation + CreateChargeRequest: + type: object + properties: + amount: + type: number + sender: + type: string + chain_id: + type: integer + enum: + - 1 + - 137 + - 8453 + required: + - amount + - sender + - chain_id + description: Create a Coinbase charge for crypto payment + example: + amount: 100 + sender: '0x1234567890123456789012345678901234567890' + chain_id: 1 + PublicPricing: + type: object + properties: + prompt: + $ref: '#/components/schemas/BigNumberUnion' + completion: + $ref: '#/components/schemas/BigNumberUnion' + request: + $ref: '#/components/schemas/BigNumberUnion' + image: + $ref: '#/components/schemas/BigNumberUnion' + image_token: + $ref: '#/components/schemas/BigNumberUnion' + image_output: + $ref: '#/components/schemas/BigNumberUnion' + audio: + $ref: '#/components/schemas/BigNumberUnion' + input_audio_cache: + $ref: '#/components/schemas/BigNumberUnion' + web_search: + $ref: '#/components/schemas/BigNumberUnion' + internal_reasoning: + $ref: '#/components/schemas/BigNumberUnion' + input_cache_read: + $ref: '#/components/schemas/BigNumberUnion' + input_cache_write: + $ref: '#/components/schemas/BigNumberUnion' + discount: + type: number + required: + - prompt + - completion + additionalProperties: false + description: Pricing information for the model + example: + prompt: '0.00003' + completion: '0.00006' + request: '0' + image: '0' + ModelGroup: + type: string + enum: + - Router + - Media + - Other + - GPT + - Claude + - Gemini + - Grok + - Cohere + - Nova + - Qwen + - Yi + - DeepSeek + - Mistral + - Llama2 + - Llama3 + - Llama4 + - PaLM + - RWKV + - Qwen3 + example: GPT + description: Tokenizer type used by the model + InputModality: + type: string + enum: + - text + - image + - file + - audio + - video + example: text + OutputModality: + type: string + enum: + - text + - image + - embeddings + example: text + ModelArchitecture: + type: object + properties: + tokenizer: + $ref: '#/components/schemas/ModelGroup' + instruct_type: + type: string + nullable: true + enum: + - none + - airoboros + - alpaca + - alpaca-modif + - chatml + - claude + - code-llama + - gemma + - llama2 + - llama3 + - mistral + - nemotron + - neural + - openchat + - phi3 + - rwkv + - vicuna + - zephyr + - deepseek-r1 + - deepseek-v3.1 + - qwq + - qwen3 + example: chatml + description: Instruction format type + modality: + type: string + nullable: true + description: Primary modality of the model + example: text->text + input_modalities: + type: array + items: + $ref: '#/components/schemas/InputModality' + description: Supported input modalities + output_modalities: + type: array + items: + $ref: '#/components/schemas/OutputModality' + description: Supported output modalities + required: + - modality + - input_modalities + - output_modalities + description: Model architecture information + example: + tokenizer: GPT + instruct_type: chatml + modality: text->text + input_modalities: + - text + output_modalities: + - text + TopProviderInfo: + type: object + properties: + context_length: + type: number + nullable: true + description: Context length from the top provider + example: 8192 + max_completion_tokens: + type: number + nullable: true + description: Maximum completion tokens from the top provider + example: 4096 + is_moderated: + type: boolean + description: Whether the top provider moderates content + example: true + required: + - is_moderated + description: Information about the top provider for this model + example: + context_length: 8192 + max_completion_tokens: 4096 + is_moderated: true + PerRequestLimits: + type: object + nullable: true + properties: + prompt_tokens: + type: number + example: 1000 + description: Maximum prompt tokens per request + completion_tokens: + type: number + example: 1000 + description: Maximum completion tokens per request + required: + - prompt_tokens + - completion_tokens + description: Per-request token limits + example: + prompt_tokens: 1000 + completion_tokens: 1000 + Parameter: + type: string + enum: + - temperature + - top_p + - top_k + - min_p + - top_a + - frequency_penalty + - presence_penalty + - repetition_penalty + - max_tokens + - logit_bias + - logprobs + - top_logprobs + - seed + - response_format + - structured_outputs + - stop + - tools + - tool_choice + - parallel_tool_calls + - include_reasoning + - reasoning + - web_search_options + - verbosity + example: temperature + DefaultParameters: + type: object + nullable: true + properties: + temperature: + type: number + nullable: true + minimum: 0 + maximum: 2 + top_p: + type: number + nullable: true + minimum: 0 + maximum: 1 + frequency_penalty: + type: number + nullable: true + minimum: -2 + maximum: 2 + additionalProperties: false + description: Default parameters for this model + example: + temperature: 0.7 + top_p: 0.9 + frequency_penalty: 0 + Model: + type: object + properties: + id: + type: string + description: Unique identifier for the model + example: openai/gpt-4 + canonical_slug: + type: string + description: Canonical slug for the model + example: openai/gpt-4 + hugging_face_id: + type: string + nullable: true + description: Hugging Face model identifier, if applicable + example: microsoft/DialoGPT-medium + name: + type: string + description: Display name of the model + example: GPT-4 + created: + type: number + description: Unix timestamp of when the model was created + example: 1692901234 + description: + type: string + description: Description of the model + example: GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy. + pricing: + $ref: '#/components/schemas/PublicPricing' + context_length: + type: number + nullable: true + description: Maximum context length in tokens + example: 8192 + architecture: + $ref: '#/components/schemas/ModelArchitecture' + top_provider: + $ref: '#/components/schemas/TopProviderInfo' + per_request_limits: + $ref: '#/components/schemas/PerRequestLimits' + supported_parameters: + type: array + items: + $ref: '#/components/schemas/Parameter' + description: List of supported parameters for this model + default_parameters: + $ref: '#/components/schemas/DefaultParameters' + required: + - id + - canonical_slug + - name + - created + - pricing + - context_length + - architecture + - top_provider + - per_request_limits + - supported_parameters + - default_parameters + description: Information about an AI model available on OpenRouter + example: + id: openai/gpt-4 + canonical_slug: openai/gpt-4 + name: GPT-4 + created: 1692901234 + description: GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy. + pricing: + prompt: '0.00003' + completion: '0.00006' + request: '0' + image: '0' + context_length: 8192 + architecture: + tokenizer: GPT + instruct_type: chatml + modality: text->text + input_modalities: + - text + output_modalities: + - text + top_provider: + context_length: 8192 + max_completion_tokens: 4096 + is_moderated: true + per_request_limits: null + supported_parameters: + - temperature + - top_p + - max_tokens + default_parameters: null + ModelsListResponseData: + type: array + items: + $ref: '#/components/schemas/Model' + description: List of available models + ModelsListResponse: + type: object + properties: + data: + $ref: '#/components/schemas/ModelsListResponseData' + required: + - data + description: List of available models + example: + data: + - id: openai/gpt-4 + canonical_slug: openai/gpt-4 + name: GPT-4 + created: 1692901234 + description: GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy. + pricing: + prompt: '0.00003' + completion: '0.00006' + request: '0' + image: '0' + context_length: 8192 + architecture: + tokenizer: GPT + instruct_type: chatml + modality: text->text + input_modalities: - text - description: Text input content item - example: - type: input_text - text: Hello, how can I help you? - ResponseInputImage: - type: object - properties: - type: - type: string - enum: - - input_image - detail: - type: string - enum: - - auto - - high - - low - x-speakeasy-unknown-values: allow - image_url: - type: string - nullable: true - required: - - type - - detail - description: Image input content item - example: - type: input_image - detail: auto - image_url: https://example.com/image.jpg - ResponseInputFile: - type: object - properties: - type: - type: string - enum: - - input_file - file_id: - type: string - nullable: true - file_data: - type: string - filename: - type: string - file_url: - type: string - required: - - type - description: File input content item - example: - type: input_file - file_id: file-abc123 - filename: document.pdf - ResponseInputAudio: - type: object - properties: - type: - type: string - enum: - - input_audio - input_audio: - type: object - properties: - data: - type: string - format: - type: string - enum: - - mp3 - - wav - x-speakeasy-unknown-values: allow - required: - - data - - format - required: - - type - - input_audio - description: Audio input content item - example: - type: input_audio - input_audio: - data: SGVsbG8gV29ybGQ= - format: mp3 - ToolCallStatus: + output_modalities: + - text + top_provider: + context_length: 8192 + max_completion_tokens: 4096 + is_moderated: true + per_request_limits: null + supported_parameters: + - temperature + - top_p + - max_tokens + - frequency_penalty + - presence_penalty + default_parameters: null + ModelsCountResponse: + type: object + properties: + data: + type: object + properties: + count: + type: number + description: Total number of available models + example: 150 + required: + - count + description: Model count data + example: + count: 150 + required: + - data + description: Model count data + example: + data: + count: 150 + InstructType: + type: string + nullable: true + enum: + - none + - airoboros + - alpaca + - alpaca-modif + - chatml + - claude + - code-llama + - gemma + - llama2 + - llama3 + - mistral + - nemotron + - neural + - openchat + - phi3 + - rwkv + - vicuna + - zephyr + - deepseek-r1 + - deepseek-v3.1 + - qwq + - qwen3 + description: Instruction format type + EndpointStatus: + type: integer + enum: + - 0 + - -1 + - -2 + - -3 + - -5 + - -10 + example: 0 + PublicEndpoint: + type: object + properties: + name: + type: string + model_name: + type: string + context_length: + type: number + pricing: + type: object + properties: + prompt: + $ref: '#/components/schemas/BigNumberUnion' + completion: + $ref: '#/components/schemas/BigNumberUnion' + request: + $ref: '#/components/schemas/BigNumberUnion' + image: + $ref: '#/components/schemas/BigNumberUnion' + image_token: + $ref: '#/components/schemas/BigNumberUnion' + image_output: + $ref: '#/components/schemas/BigNumberUnion' + audio: + $ref: '#/components/schemas/BigNumberUnion' + input_audio_cache: + $ref: '#/components/schemas/BigNumberUnion' + web_search: + $ref: '#/components/schemas/BigNumberUnion' + internal_reasoning: + $ref: '#/components/schemas/BigNumberUnion' + input_cache_read: + $ref: '#/components/schemas/BigNumberUnion' + input_cache_write: + $ref: '#/components/schemas/BigNumberUnion' + discount: + type: number + required: + - prompt + - completion + additionalProperties: false + provider_name: + $ref: '#/components/schemas/ProviderName' + tag: + type: string + quantization: + allOf: + - $ref: '#/components/schemas/Quantization' + - nullable: true + max_completion_tokens: + type: number + nullable: true + max_prompt_tokens: + type: number + nullable: true + supported_parameters: + type: array + items: + $ref: '#/components/schemas/Parameter' + status: + $ref: '#/components/schemas/EndpointStatus' + uptime_last_30m: + type: number + nullable: true + supports_implicit_caching: + type: boolean + required: + - name + - model_name + - context_length + - pricing + - provider_name + - tag + - quantization + - max_completion_tokens + - max_prompt_tokens + - supported_parameters + - uptime_last_30m + - supports_implicit_caching + description: Information about a specific model endpoint + example: + name: 'OpenAI: GPT-4' + model_name: GPT-4 + context_length: 8192 + pricing: + prompt: '0.00003' + completion: '0.00006' + request: '0' + image: '0' + provider_name: OpenAI + tag: openai + quantization: fp16 + max_completion_tokens: 4096 + max_prompt_tokens: 8192 + supported_parameters: + - temperature + - top_p + - max_tokens + status: 0 + uptime_last_30m: 99.5 + supports_implicit_caching: true + ListEndpointsResponse: + type: object + properties: + id: + type: string + description: Unique identifier for the model + example: openai/gpt-4 + name: + type: string + description: Display name of the model + example: GPT-4 + created: + type: number + description: Unix timestamp of when the model was created + example: 1692901234 + description: + type: string + description: Description of the model + example: GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy. + architecture: + allOf: + - $ref: '#/components/schemas/ModelArchitecture' + - properties: + tokenizer: + allOf: + - $ref: '#/components/schemas/ModelGroup' + - nullable: true + instruct_type: + $ref: '#/components/schemas/InstructType' + modality: + type: string + nullable: true + description: Primary modality of the model + example: text + input_modalities: + type: array + items: + $ref: '#/components/schemas/InputModality' + description: Supported input modalities + output_modalities: + type: array + items: + $ref: '#/components/schemas/OutputModality' + description: Supported output modalities + required: + - tokenizer + - instruct_type + - modality + - input_modalities + - output_modalities + example: + tokenizer: GPT + instruct_type: chatml + modality: text + endpoints: + type: array + items: + $ref: '#/components/schemas/PublicEndpoint' + description: List of available endpoints for this model + required: + - id + - name + - created + - description + - architecture + - endpoints + description: List of available endpoints for a model + example: + id: openai/gpt-4 + name: GPT-4 + created: 1692901234 + description: GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy. + architecture: + tokenizer: GPT + instruct_type: chatml + modality: text->text + input_modalities: + - text + output_modalities: + - text + endpoints: + - name: 'OpenAI: GPT-4' + model_name: GPT-4 + context_length: 8192 + pricing: + prompt: '0.00003' + completion: '0.00006' + request: '0' + image: '0' + provider_name: OpenAI + tag: openai + quantization: fp16 + max_completion_tokens: 4096 + max_prompt_tokens: 8192 + supported_parameters: + - temperature + - top_p + - max_tokens + - frequency_penalty + - presence_penalty + status: default + uptime_last_30m: 99.5 + supports_implicit_caching: true + __schema0: + anyOf: + - $ref: '#/components/schemas/ChatCompletionFinishReason' + - type: 'null' + ModelName: + type: string + ChatMessageContentItemText: + type: object + properties: + type: + type: string + const: text + text: + type: string + cache_control: + $ref: '#/components/schemas/ChatMessageContentItemCacheControl' + required: + - type + - text + ChatMessageContentItemImage: + type: object + properties: + type: + type: string + const: image_url + image_url: + type: object + properties: + url: + type: string + detail: + type: string + enum: + - auto + - low + - high + required: + - url + required: + - type + - image_url + ChatMessageContentItemAudio: + type: object + properties: + type: + type: string + const: input_audio + input_audio: + type: object + properties: + data: + type: string + format: + type: string + enum: + - wav + - mp3 + - flac + - m4a + - ogg + - pcm16 + - pcm24 + required: + - data + - format + required: + - type + - input_audio + ChatMessageContentItemVideo: + oneOf: + - type: object + properties: + type: + type: string + const: input_video + video_url: + type: object + properties: + url: + type: string + required: + - url + required: + - type + - video_url + - type: object + properties: + type: + type: string + const: video_url + video_url: + type: object + properties: + url: + type: string + required: + - url + required: + - type + - video_url + type: object + ChatMessageContentItem: + oneOf: + - $ref: '#/components/schemas/ChatMessageContentItemText' + - $ref: '#/components/schemas/ChatMessageContentItemImage' + - $ref: '#/components/schemas/ChatMessageContentItemAudio' + - $ref: '#/components/schemas/ChatMessageContentItemVideo' + type: object + discriminator: + propertyName: type + mapping: + text: '#/components/schemas/ChatMessageContentItemText' + image_url: '#/components/schemas/ChatMessageContentItemImage' + input_audio: '#/components/schemas/ChatMessageContentItemAudio' + input_video: '#/components/schemas/ChatMessageContentItemVideo' + video_url: '#/components/schemas/ChatMessageContentItemVideo' + ChatMessageToolCall: + type: object + properties: + id: + type: string + type: + type: string + const: function + function: + type: object + properties: + name: + type: string + arguments: + type: string + required: + - name + - arguments + required: + - id + - type + - function + ChatMessageTokenLogprob: + type: object + properties: + token: + type: string + logprob: + type: number + bytes: + anyOf: + - type: array + items: + type: number + - type: 'null' + top_logprobs: + type: array + items: + type: object + properties: + token: + type: string + logprob: + type: number + bytes: + anyOf: + - type: array + items: + type: number + - type: 'null' + required: + - token + - logprob + - bytes + required: + - token + - logprob + - bytes + - top_logprobs + ChatMessageTokenLogprobs: + type: object + properties: + content: + anyOf: + - type: array + items: + $ref: '#/components/schemas/ChatMessageTokenLogprob' + - type: 'null' + refusal: + anyOf: + - type: array + items: + $ref: '#/components/schemas/ChatMessageTokenLogprob' + - type: 'null' + required: + - content + - refusal + ChatGenerationTokenUsage: + type: object + properties: + completion_tokens: + type: number + prompt_tokens: + type: number + total_tokens: + type: number + completion_tokens_details: + anyOf: + - type: object + properties: + reasoning_tokens: + anyOf: + - type: number + - type: 'null' + audio_tokens: + anyOf: + - type: number + - type: 'null' + accepted_prediction_tokens: + anyOf: + - type: number + - type: 'null' + rejected_prediction_tokens: + anyOf: + - type: number + - type: 'null' + - type: 'null' + prompt_tokens_details: + anyOf: + - type: object + properties: + cached_tokens: + type: number + audio_tokens: + type: number + video_tokens: + type: number + - type: 'null' + required: + - completion_tokens + - prompt_tokens + - total_tokens + ChatCompletionFinishReason: + type: string + enum: + - tool_calls + - stop + - length + - content_filter + - error + JSONSchemaConfig: + type: object + properties: + name: + type: string + maxLength: 64 + description: + type: string + schema: + type: object + propertyNames: type: string - nullable: true - enum: - - in_progress - - completed - - incomplete - example: completed - x-speakeasy-unknown-values: allow - OpenAIResponsesInput: - anyOf: + additionalProperties: {} + strict: + anyOf: + - type: boolean + - type: 'null' + required: + - name + ResponseFormatJSONSchema: + type: object + properties: + type: + type: string + const: json_schema + json_schema: + $ref: '#/components/schemas/JSONSchemaConfig' + required: + - type + - json_schema + ResponseFormatTextGrammar: + type: object + properties: + type: + type: string + const: grammar + grammar: + type: string + required: + - type + - grammar + ChatMessageContentItemCacheControl: + type: object + properties: + type: + type: string + const: ephemeral + ttl: + type: string + enum: + - 5m + - 1h + required: + - type + SystemMessage: + type: object + properties: + role: + type: string + const: system + content: + anyOf: + - type: string + - type: array + items: + $ref: '#/components/schemas/ChatMessageContentItemText' + name: + type: string + required: + - role + - content + UserMessage: + type: object + properties: + role: + type: string + const: user + content: + anyOf: + - type: string + - type: array + items: + $ref: '#/components/schemas/ChatMessageContentItem' + name: + type: string + required: + - role + - content + AssistantMessage: + type: object + properties: + role: + type: string + const: assistant + content: + anyOf: + - anyOf: - type: string - type: array items: - anyOf: - - type: object - properties: - type: - type: string - enum: - - message - role: - anyOf: - - type: string - enum: - - user - - type: string - enum: - - system - - type: string - enum: - - assistant - - type: string - enum: - - developer - content: - anyOf: - - type: array - items: - oneOf: - - $ref: '#/components/schemas/ResponseInputText' - - $ref: '#/components/schemas/ResponseInputImage' - - $ref: '#/components/schemas/ResponseInputFile' - - $ref: '#/components/schemas/ResponseInputAudio' - discriminator: - propertyName: type - mapping: - input_text: '#/components/schemas/ResponseInputText' - input_image: '#/components/schemas/ResponseInputImage' - input_file: '#/components/schemas/ResponseInputFile' - input_audio: '#/components/schemas/ResponseInputAudio' - - type: string - required: - - role - - content - - type: object - properties: - id: - type: string - type: - type: string - enum: - - message - role: - anyOf: - - type: string - enum: - - user - - type: string - enum: - - system - - type: string - enum: - - developer - content: - type: array - items: - oneOf: - - $ref: '#/components/schemas/ResponseInputText' - - $ref: '#/components/schemas/ResponseInputImage' - - $ref: '#/components/schemas/ResponseInputFile' - - $ref: '#/components/schemas/ResponseInputAudio' - discriminator: - propertyName: type - mapping: - input_text: '#/components/schemas/ResponseInputText' - input_image: '#/components/schemas/ResponseInputImage' - input_file: '#/components/schemas/ResponseInputFile' - input_audio: '#/components/schemas/ResponseInputAudio' - required: - - id - - role - - content - - type: object - properties: - type: - type: string - enum: - - function_call_output - id: - type: string - nullable: true - call_id: - type: string - output: - type: string - status: - $ref: '#/components/schemas/ToolCallStatus' - required: - - type - - call_id - - output - - type: object - properties: - type: - type: string - enum: - - function_call - call_id: - type: string - name: - type: string - arguments: - type: string - id: - type: string - status: - $ref: '#/components/schemas/ToolCallStatus' - required: - - type - - call_id - - name - - arguments - - $ref: '#/components/schemas/OutputItemImageGenerationCall' - - $ref: '#/components/schemas/OutputMessage' - - nullable: true - OpenResponsesRequestMetadata: - type: object - nullable: true - additionalProperties: + $ref: '#/components/schemas/ChatMessageContentItem' + - type: 'null' + name: + type: string + tool_calls: + type: array + items: + $ref: '#/components/schemas/ChatMessageToolCall' + refusal: + anyOf: + - type: string + - type: 'null' + reasoning: + anyOf: + - type: string + - type: 'null' + required: + - role + ToolResponseMessage: + type: object + properties: + role: + type: string + const: tool + content: + anyOf: + - type: string + - type: array + items: + $ref: '#/components/schemas/ChatMessageContentItem' + tool_call_id: + type: string + required: + - role + - content + - tool_call_id + Message: + oneOf: + - $ref: '#/components/schemas/SystemMessage' + - $ref: '#/components/schemas/UserMessage' + - type: object + properties: + role: + type: string + const: developer + content: + anyOf: + - type: string + - type: array + items: + $ref: '#/components/schemas/ChatMessageContentItemText' + name: + type: string + required: + - role + - content + - $ref: '#/components/schemas/AssistantMessage' + - $ref: '#/components/schemas/ToolResponseMessage' + type: object + ToolDefinitionJson: + type: object + properties: + type: + type: string + const: function + function: + type: object + properties: + name: + type: string + maxLength: 64 + description: + type: string + parameters: + type: object + propertyNames: type: string - maxLength: 512 - description: >- - Metadata key-value pairs for the request. Keys must be ≤64 characters and cannot contain brackets. Values must be ≤512 characters. Maximum 16 pairs allowed. - example: - user_id: '123' - session_id: abc-def-ghi - OpenResponsesFunctionTool: - type: object - properties: - type: - type: string - enum: - - function - name: - type: string - description: - type: string - nullable: true - strict: - type: boolean - nullable: true - parameters: - type: object - nullable: true - additionalProperties: - nullable: true - required: - - type - - name - - parameters - description: Function tool definition - example: - type: function - name: get_weather - description: Get the current weather in a location - parameters: - type: object - properties: - location: - type: string - description: The city and state - unit: - type: string - enum: - - celsius - - fahrenheit - x-speakeasy-unknown-values: allow - required: - - location - ResponsesSearchContextSize: + additionalProperties: {} + strict: + anyOf: + - type: boolean + - type: 'null' + required: + - name + required: + - type + - function + NamedToolChoice: + type: object + properties: + type: + type: string + const: function + function: + type: object + properties: + name: + type: string + required: + - name + required: + - type + - function + ToolChoiceOption: + anyOf: + - type: string + const: none + - type: string + const: auto + - type: string + const: required + - $ref: '#/components/schemas/NamedToolChoice' + ChatStreamOptions: + type: object + properties: + include_usage: + type: boolean + ChatGenerationParams: + type: object + properties: + messages: + minItems: 1 + type: array + items: + $ref: '#/components/schemas/Message' + model: + $ref: '#/components/schemas/ModelName' + models: + type: array + items: + $ref: '#/components/schemas/ModelName' + frequency_penalty: + anyOf: + - type: number + minimum: -2 + maximum: 2 + - type: 'null' + logit_bias: + anyOf: + - type: object + propertyNames: + type: string + additionalProperties: + type: number + - type: 'null' + logprobs: + anyOf: + - type: boolean + - type: 'null' + top_logprobs: + anyOf: + - type: number + minimum: 0 + maximum: 20 + - type: 'null' + max_completion_tokens: + anyOf: + - type: number + minimum: 1 + - type: 'null' + max_tokens: + anyOf: + - type: number + minimum: 1 + - type: 'null' + metadata: + type: object + propertyNames: type: string - enum: - - low - - medium - - high - description: Size of the search context for web search tools - example: medium - x-speakeasy-unknown-values: allow - WebSearchPreviewToolUserLocation: - type: object - nullable: true - properties: - type: - type: string - enum: - - approximate - city: - type: string - nullable: true - country: - type: string - nullable: true - region: - type: string - nullable: true - timezone: - type: string - nullable: true - required: - - type - OpenResponsesWebSearchPreviewTool: - type: object - properties: + additionalProperties: + type: string + presence_penalty: + anyOf: + - type: number + minimum: -2 + maximum: 2 + - type: 'null' + reasoning: + type: object + properties: + effort: + anyOf: + - type: string + enum: + - none + - minimal + - low + - medium + - high + - type: 'null' + summary: + anyOf: + - $ref: '#/components/schemas/ReasoningSummaryVerbosity' + - type: 'null' + response_format: + oneOf: + - type: object + properties: type: - type: string - enum: - - web_search_preview - search_context_size: - $ref: '#/components/schemas/ResponsesSearchContextSize' - user_location: - $ref: '#/components/schemas/WebSearchPreviewToolUserLocation' - required: + type: string + const: text + required: - type - description: Web search preview tool configuration - example: - type: web_search_preview - OpenResponsesWebSearchPreview20250311Tool: - type: object - properties: + - type: object + properties: type: - type: string - enum: - - web_search_preview_2025_03_11 - search_context_size: - $ref: '#/components/schemas/ResponsesSearchContextSize' - user_location: - $ref: '#/components/schemas/WebSearchPreviewToolUserLocation' - required: + type: string + const: json_object + required: - type - description: Web search preview tool configuration (2025-03-11 version) - example: - type: web_search_preview_2025_03_11 - ResponsesWebSearchUserLocation: - type: object - nullable: true - properties: - type: - type: string - enum: - - approximate - city: - type: string - nullable: true - country: - type: string - nullable: true - region: - type: string - nullable: true - timezone: - type: string - nullable: true - description: User location information for web search - example: - type: approximate - city: San Francisco - country: USA - region: California - timezone: America/Los_Angeles - OpenResponsesWebSearchTool: - type: object - properties: + - $ref: '#/components/schemas/ResponseFormatJSONSchema' + - $ref: '#/components/schemas/ResponseFormatTextGrammar' + - type: object + properties: type: - type: string - enum: - - web_search - filters: - type: object - nullable: true - properties: - allowed_domains: - type: array - nullable: true - items: - type: string - search_context_size: - $ref: '#/components/schemas/ResponsesSearchContextSize' - user_location: - $ref: '#/components/schemas/ResponsesWebSearchUserLocation' - required: + type: string + const: python + required: - type - description: Web search tool configuration - example: - type: web_search - filters: - allowed_domains: - - example.com - OpenResponsesWebSearch20250826Tool: - type: object - properties: - type: + type: object + seed: + anyOf: + - type: integer + minimum: -9007199254740991 + maximum: 9007199254740991 + - type: 'null' + stop: + anyOf: + - anyOf: + - type: string + - maxItems: 4 + type: array + items: type: string - enum: - - web_search_2025_08_26 - filters: - type: object - nullable: true - properties: - allowed_domains: - type: array - nullable: true - items: - type: string - search_context_size: - $ref: '#/components/schemas/ResponsesSearchContextSize' - user_location: - $ref: '#/components/schemas/ResponsesWebSearchUserLocation' - required: - - type - description: Web search tool configuration (2025-08-26 version) - example: - type: web_search_2025_08_26 - filters: - allowed_domains: - - example.com - OpenAIResponsesToolChoice: - anyOf: + - type: 'null' + stream: + default: false + type: boolean + stream_options: + anyOf: + - $ref: '#/components/schemas/ChatStreamOptions' + - type: 'null' + temperature: + default: 1 + anyOf: + - type: number + minimum: 0 + maximum: 2 + - type: 'null' + tool_choice: + $ref: '#/components/schemas/ToolChoiceOption' + tools: + type: array + items: + $ref: '#/components/schemas/ToolDefinitionJson' + top_p: + default: 1 + anyOf: + - type: number + minimum: 0 + maximum: 1 + - type: 'null' + user: + type: string + required: + - messages + ChatResponseChoice: + type: object + properties: + finish_reason: + $ref: '#/components/schemas/__schema0' + index: + type: number + message: + $ref: '#/components/schemas/AssistantMessage' + logprobs: + anyOf: + - $ref: '#/components/schemas/ChatMessageTokenLogprobs' + - type: 'null' + required: + - finish_reason + - index + - message + ChatStreamingMessageToolCall: + type: object + properties: + index: + type: number + id: + type: string + type: + type: string + const: function + function: + type: object + properties: + name: + type: string + arguments: + type: string + required: + - index + ChatStreamingMessageChunk: + type: object + properties: + role: + type: string + enum: + - assistant + content: + anyOf: + - type: string + - type: 'null' + reasoning: + anyOf: + - type: string + - type: 'null' + refusal: + anyOf: + - type: string + - type: 'null' + tool_calls: + type: array + items: + $ref: '#/components/schemas/ChatStreamingMessageToolCall' + ChatStreamingChoice: + type: object + properties: + delta: + $ref: '#/components/schemas/ChatStreamingMessageChunk' + finish_reason: + $ref: '#/components/schemas/__schema0' + index: + type: number + logprobs: + anyOf: + - $ref: '#/components/schemas/ChatMessageTokenLogprobs' + - type: 'null' + required: + - delta + - finish_reason + - index + ChatError: + type: object + properties: + error: + type: object + properties: + code: + anyOf: + - anyOf: + - type: string + - type: number + - type: 'null' + message: + type: string + param: + anyOf: - type: string - enum: - - auto + - type: 'null' + type: + anyOf: - type: string - enum: - - none + - type: 'null' + required: + - code + - message + additionalProperties: false + required: + - error + additionalProperties: false + ChatResponse: + type: object + properties: + id: + type: string + choices: + type: array + items: + $ref: '#/components/schemas/ChatResponseChoice' + created: + type: number + model: + type: string + object: + type: string + const: chat.completion + system_fingerprint: + anyOf: + - type: string + - type: 'null' + usage: + $ref: '#/components/schemas/ChatGenerationTokenUsage' + required: + - id + - choices + - created + - model + - object + additionalProperties: false + ChatStreamingResponseChunk: + type: object + properties: + data: + type: object + properties: + id: + type: string + choices: + type: array + items: + $ref: '#/components/schemas/ChatStreamingChoice' + created: + type: number + model: + type: string + object: + type: string + const: chat.completion.chunk + system_fingerprint: + anyOf: - type: string - enum: - - required + - type: 'null' + error: + type: object + properties: + message: + type: string + code: + type: number + required: + - message + - code + additionalProperties: false + usage: + $ref: '#/components/schemas/ChatGenerationTokenUsage' + required: + - id + - choices + - created + - model + - object + additionalProperties: false + required: + - data + additionalProperties: false + CompletionFinishReason: + anyOf: + - type: string + enum: + - stop + - length + - content_filter + - type: 'null' + CompletionLogprobs: + type: object + properties: + tokens: + type: array + items: + type: string + token_logprobs: + type: array + items: + type: number + top_logprobs: + anyOf: + - type: array + items: + type: object + propertyNames: + type: string + additionalProperties: + type: number + - type: 'null' + text_offset: + type: array + items: + type: number + required: + - tokens + - token_logprobs + - top_logprobs + - text_offset + CompletionUsage: + type: object + properties: + prompt_tokens: + type: number + completion_tokens: + type: number + total_tokens: + type: number + required: + - prompt_tokens + - completion_tokens + - total_tokens + CompletionCreateParams: + type: object + properties: + model: + $ref: '#/components/schemas/ModelName' + models: + type: array + items: + $ref: '#/components/schemas/ModelName' + prompt: + anyOf: + - type: string + - type: array + items: + type: string + - type: array + items: + type: number + - type: array + items: + type: array + items: + type: number + best_of: + anyOf: + - type: integer + minimum: 1 + maximum: 20 + - type: 'null' + echo: + anyOf: + - type: boolean + - type: 'null' + frequency_penalty: + anyOf: + - type: number + minimum: -2 + maximum: 2 + - type: 'null' + logit_bias: + anyOf: + - type: object + propertyNames: + type: string + additionalProperties: + type: number + - type: 'null' + logprobs: + anyOf: + - type: integer + minimum: 0 + maximum: 5 + - type: 'null' + max_tokens: + anyOf: + - type: integer + minimum: 1 + maximum: 9007199254740991 + - type: 'null' + 'n': + anyOf: + - type: integer + minimum: 1 + maximum: 128 + - type: 'null' + presence_penalty: + anyOf: + - type: number + minimum: -2 + maximum: 2 + - type: 'null' + seed: + anyOf: + - type: integer + minimum: -9007199254740991 + maximum: 9007199254740991 + - type: 'null' + stop: + anyOf: + - anyOf: + - type: string + - type: array + items: + type: string + - type: 'null' + stream: + default: false + type: boolean + stream_options: + anyOf: + - type: object + properties: + include_usage: + anyOf: + - type: boolean + - type: 'null' + - type: 'null' + suffix: + anyOf: + - type: string + - type: 'null' + temperature: + anyOf: + - type: number + minimum: 0 + maximum: 2 + - type: 'null' + top_p: + anyOf: + - type: number + minimum: 0 + maximum: 1 + - type: 'null' + user: + type: string + metadata: + anyOf: + - type: object + propertyNames: + type: string + additionalProperties: + type: string + - type: 'null' + response_format: + anyOf: + - oneOf: - type: object properties: type: - type: string - enum: - - function - name: - type: string + type: string + const: text required: - type - - name - type: object properties: type: - anyOf: - - type: string - enum: - - web_search_preview_2025_03_11 - - type: string - enum: - - web_search_preview + type: string + const: json_object required: - type - OpenAIResponsesPrompt: - type: object - nullable: true - properties: - id: - type: string - variables: - type: object - nullable: true - additionalProperties: - anyOf: - - type: string - - $ref: '#/components/schemas/ResponseInputText' - - $ref: '#/components/schemas/ResponseInputImage' - - $ref: '#/components/schemas/ResponseInputFile' - required: - - id - OpenAIResponsesReasoningEffort: - type: string - nullable: true - enum: - - high - - medium - - low - - minimal - - none - x-speakeasy-unknown-values: allow - ReasoningSummaryVerbosity: - type: string - enum: - - auto - - concise - - detailed - x-speakeasy-unknown-values: allow - OpenAIResponsesReasoningConfig: - type: object - nullable: true - properties: - effort: - $ref: '#/components/schemas/OpenAIResponsesReasoningEffort' - summary: - $ref: '#/components/schemas/ReasoningSummaryVerbosity' - OpenAIResponsesServiceTier: - type: string - nullable: true - enum: - - auto - - default - - flex - - priority - - scale - x-speakeasy-unknown-values: allow - OpenAIResponsesTruncation: - type: string - nullable: true - enum: - - auto - - disabled - x-speakeasy-unknown-values: allow - ResponsesFormatText: - type: object - properties: - type: - type: string - enum: - - text - required: - - type - description: Plain text response format - example: - type: text - ResponsesFormatJSONObject: - type: object - properties: - type: - type: string - enum: - - json_object - required: - - type - description: JSON object response format - example: - type: json_object - ResponsesFormatTextJSONSchemaConfig: - type: object - properties: - type: - type: string - enum: - - json_schema - name: - type: string - description: - type: string - strict: - type: boolean - nullable: true - schema: - type: object - additionalProperties: - nullable: true - required: - - type - - name - - schema - description: JSON schema constrained response format - example: - type: json_schema - name: user_info - description: User information schema - schema: - type: object - properties: - name: - type: string - age: - type: number - required: - - name - ResponseFormatTextConfig: - anyOf: - - $ref: '#/components/schemas/ResponsesFormatText' - - $ref: '#/components/schemas/ResponsesFormatJSONObject' - - $ref: '#/components/schemas/ResponsesFormatTextJSONSchemaConfig' - description: Text response format configuration - example: - type: text - ResponseTextConfig: - type: object - properties: - format: - $ref: '#/components/schemas/ResponseFormatTextConfig' - verbosity: - type: string - nullable: true - enum: - - high - - low - - medium - x-speakeasy-unknown-values: allow - description: Text output configuration including format and verbosity - example: - format: - type: text - verbosity: medium - OpenAIResponsesNonStreamingResponse: - type: object - properties: - id: - type: string - object: - type: string - enum: - - response - created_at: - type: number - model: - type: string - status: - $ref: '#/components/schemas/OpenAIResponsesResponseStatus' - output: - type: array - items: - oneOf: - - $ref: '#/components/schemas/OutputMessage' - - $ref: '#/components/schemas/OutputItemReasoning' - - $ref: '#/components/schemas/OutputItemFunctionCall' - - $ref: '#/components/schemas/OutputItemWebSearchCall' - - $ref: '#/components/schemas/OutputItemFileSearchCall' - - $ref: '#/components/schemas/OutputItemImageGenerationCall' - discriminator: - propertyName: type - mapping: - message: '#/components/schemas/OutputMessage' - reasoning: '#/components/schemas/OutputItemReasoning' - function_call: '#/components/schemas/OutputItemFunctionCall' - web_search_call: '#/components/schemas/OutputItemWebSearchCall' - file_search_call: '#/components/schemas/OutputItemFileSearchCall' - image_generation_call: '#/components/schemas/OutputItemImageGenerationCall' - user: - type: string - nullable: true - output_text: - type: string - prompt_cache_key: - type: string - nullable: true - safety_identifier: - type: string - nullable: true - error: - $ref: '#/components/schemas/ResponsesErrorField' - incomplete_details: - $ref: '#/components/schemas/OpenAIResponsesIncompleteDetails' - usage: - $ref: '#/components/schemas/OpenAIResponsesUsage' - max_tool_calls: - type: number - nullable: true - top_logprobs: - type: number - max_output_tokens: - type: number - nullable: true - temperature: - type: number - nullable: true - top_p: - type: number - nullable: true - instructions: - $ref: '#/components/schemas/OpenAIResponsesInput' - metadata: - $ref: '#/components/schemas/OpenResponsesRequestMetadata' - tools: - type: array - items: - oneOf: - - allOf: - - $ref: '#/components/schemas/OpenResponsesFunctionTool' - - type: object - properties: {} - description: Function tool definition - example: - type: function - name: get_weather - description: Get the current weather in a location - parameters: - type: object - properties: - location: - type: string - description: The city and state - unit: - type: string - enum: - - celsius - - fahrenheit - x-speakeasy-unknown-values: allow - required: - - location - - $ref: '#/components/schemas/OpenResponsesWebSearchPreviewTool' - - $ref: '#/components/schemas/OpenResponsesWebSearchPreview20250311Tool' - - $ref: '#/components/schemas/OpenResponsesWebSearchTool' - - $ref: '#/components/schemas/OpenResponsesWebSearch20250826Tool' - tool_choice: - $ref: '#/components/schemas/OpenAIResponsesToolChoice' - parallel_tool_calls: - type: boolean - prompt: - $ref: '#/components/schemas/OpenAIResponsesPrompt' - background: - type: boolean - nullable: true - previous_response_id: - type: string - nullable: true - reasoning: - $ref: '#/components/schemas/OpenAIResponsesReasoningConfig' - service_tier: - $ref: '#/components/schemas/OpenAIResponsesServiceTier' - store: - type: boolean - truncation: - $ref: '#/components/schemas/OpenAIResponsesTruncation' - text: - $ref: '#/components/schemas/ResponseTextConfig' - required: - - id - - object - - created_at - - model - - output - - error - - incomplete_details - - temperature - - top_p - - instructions - - metadata - - tools - - tool_choice - - parallel_tool_calls - OpenResponsesNonStreamingResponse: - allOf: - - $ref: '#/components/schemas/OpenAIResponsesNonStreamingResponse' - - type: object - properties: - output: - type: array - items: - $ref: '#/components/schemas/ResponsesOutputItem' - usage: - $ref: '#/components/schemas/OpenResponsesUsage' - description: Complete non-streaming response from the Responses API - example: - id: resp-abc123 - object: response - created_at: 1704067200 - model: gpt-4 - status: completed - output: - - type: message - id: msg-abc123 - status: completed - role: assistant - content: - - type: output_text - text: Hello! How can I help you today? - annotations: [] - usage: - input_tokens: 10 - output_tokens: 25 - total_tokens: 35 - input_tokens_details: - cached_tokens: 0 - output_tokens_details: - reasoning_tokens: 0 - tools: [] - tool_choice: auto - parallel_tool_calls: true - error: null - incomplete_details: null - temperature: null - top_p: null - max_output_tokens: null - metadata: null - instructions: null - OpenResponsesCreatedEvent: - type: object - properties: - type: - type: string - enum: - - response.created - response: - $ref: '#/components/schemas/OpenAIResponsesNonStreamingResponse' - sequence_number: - type: number - required: - - type - - response - - sequence_number - description: Event emitted when a response is created - example: - type: response.created - response: - id: resp-abc123 - object: response - created_at: 1704067200 - model: gpt-4 - status: in_progress - output: [] - tools: [] - tool_choice: auto - parallel_tool_calls: true - error: null - incomplete_details: null - metadata: null - instructions: null - temperature: null - top_p: null - max_output_tokens: null - sequence_number: 0 - OpenResponsesInProgressEvent: - type: object - properties: - type: - type: string - enum: - - response.in_progress - response: - $ref: '#/components/schemas/OpenAIResponsesNonStreamingResponse' - sequence_number: - type: number - required: - - type - - response - - sequence_number - description: Event emitted when a response is in progress - example: - type: response.in_progress - response: - id: resp-abc123 - object: response - created_at: 1704067200 - model: gpt-4 - status: in_progress - output: [] - tools: [] - tool_choice: auto - parallel_tool_calls: true - error: null - incomplete_details: null - metadata: null - instructions: null - temperature: null - top_p: null - max_output_tokens: null - sequence_number: 1 - OpenResponsesCompletedEvent: - type: object - properties: - type: - type: string - enum: - - response.completed - response: - $ref: '#/components/schemas/OpenAIResponsesNonStreamingResponse' - sequence_number: - type: number - required: - - type - - response - - sequence_number - description: Event emitted when a response has completed successfully - example: - type: response.completed - response: - id: resp-abc123 - object: response - created_at: 1704067200 - model: gpt-4 - status: completed - output: - - id: item-1 - type: message - status: completed - role: assistant - content: - - type: output_text - text: Hello! How can I help you? - annotations: [] - tools: [] - tool_choice: auto - parallel_tool_calls: true - error: null - incomplete_details: null - metadata: null - instructions: null - temperature: null - top_p: null - max_output_tokens: null - sequence_number: 10 - OpenResponsesIncompleteEvent: - type: object - properties: - type: - type: string - enum: - - response.incomplete - response: - $ref: '#/components/schemas/OpenAIResponsesNonStreamingResponse' - sequence_number: - type: number - required: - - type - - response - - sequence_number - description: Event emitted when a response is incomplete - example: - type: response.incomplete - response: - id: resp-abc123 - object: response - created_at: 1704067200 - model: gpt-4 - status: incomplete - output: [] - tools: [] - tool_choice: auto - parallel_tool_calls: true - error: null - incomplete_details: null - metadata: null - instructions: null - temperature: null - top_p: null - max_output_tokens: null - sequence_number: 5 - OpenResponsesFailedEvent: - type: object - properties: - type: - type: string - enum: - - response.failed - response: - $ref: '#/components/schemas/OpenAIResponsesNonStreamingResponse' - sequence_number: - type: number - required: - - type - - response - - sequence_number - description: Event emitted when a response has failed - example: - type: response.failed - response: - id: resp-abc123 - object: response - created_at: 1704067200 - model: gpt-4 - status: failed - output: [] - tools: [] - tool_choice: auto - parallel_tool_calls: true - error: null - incomplete_details: null - metadata: null - instructions: null - temperature: null - top_p: null - max_output_tokens: null - sequence_number: 3 - OpenAIResponsesErrorEvent: - type: object - properties: - type: - type: string - enum: - - error - code: - type: string - nullable: true - message: - type: string - param: - type: string - nullable: true - sequence_number: - type: number - required: - - type - - code - - message - - param - - sequence_number - description: Event emitted when an error occurs during streaming - example: - type: error - code: rate_limit_exceeded - message: Rate limit exceeded. Please try again later. - param: null - sequence_number: 2 - OpenResponsesErrorEvent: - allOf: - - $ref: '#/components/schemas/OpenAIResponsesErrorEvent' - - type: object - properties: {} - description: Event emitted when an error occurs during streaming - example: - type: error - code: rate_limit_exceeded - message: Rate limit exceeded. Please try again later. - param: null - sequence_number: 2 - OpenResponsesOutputItemAddedEvent: - type: object - properties: - type: - type: string - enum: - - response.output_item.added - output_index: - type: number - item: - oneOf: - - $ref: '#/components/schemas/OutputMessage' - - $ref: '#/components/schemas/OutputItemReasoning' - - $ref: '#/components/schemas/OutputItemFunctionCall' - - $ref: '#/components/schemas/OutputItemWebSearchCall' - - $ref: '#/components/schemas/OutputItemFileSearchCall' - - $ref: '#/components/schemas/OutputItemImageGenerationCall' - discriminator: - propertyName: type - mapping: - message: '#/components/schemas/OutputMessage' - reasoning: '#/components/schemas/OutputItemReasoning' - function_call: '#/components/schemas/OutputItemFunctionCall' - web_search_call: '#/components/schemas/OutputItemWebSearchCall' - file_search_call: '#/components/schemas/OutputItemFileSearchCall' - image_generation_call: '#/components/schemas/OutputItemImageGenerationCall' - sequence_number: - type: number - required: - - type - - output_index - - item - - sequence_number - description: Event emitted when a new output item is added to the response - example: - type: response.output_item.added - output_index: 0 - item: - id: item-1 - type: message - status: in_progress - role: assistant - content: [] - sequence_number: 2 - OpenResponsesOutputItemDoneEvent: - type: object - properties: - type: - type: string - enum: - - response.output_item.done - output_index: - type: number - item: - oneOf: - - $ref: '#/components/schemas/OutputMessage' - - $ref: '#/components/schemas/OutputItemReasoning' - - $ref: '#/components/schemas/OutputItemFunctionCall' - - $ref: '#/components/schemas/OutputItemWebSearchCall' - - $ref: '#/components/schemas/OutputItemFileSearchCall' - - $ref: '#/components/schemas/OutputItemImageGenerationCall' - discriminator: - propertyName: type - mapping: - message: '#/components/schemas/OutputMessage' - reasoning: '#/components/schemas/OutputItemReasoning' - function_call: '#/components/schemas/OutputItemFunctionCall' - web_search_call: '#/components/schemas/OutputItemWebSearchCall' - file_search_call: '#/components/schemas/OutputItemFileSearchCall' - image_generation_call: '#/components/schemas/OutputItemImageGenerationCall' - sequence_number: - type: number - required: - - type - - output_index - - item - - sequence_number - description: Event emitted when an output item is complete - example: - type: response.output_item.done - output_index: 0 - item: - id: item-1 - type: message - status: completed - role: assistant - content: - - type: output_text - text: Hello! How can I help you? - annotations: [] - sequence_number: 8 - OpenResponsesContentPartAddedEvent: - type: object - properties: - type: - type: string - enum: - - response.content_part.added - output_index: - type: number - item_id: - type: string - content_index: - type: number - part: - anyOf: - - $ref: '#/components/schemas/ResponseOutputText' - - $ref: '#/components/schemas/OpenAIResponsesRefusalContent' - sequence_number: - type: number - required: - - type - - output_index - - item_id - - content_index - - part - - sequence_number - description: Event emitted when a new content part is added to an output item - example: - type: response.content_part.added - output_index: 0 - item_id: item-1 - content_index: 0 - part: - type: output_text - text: '' - annotations: [] - sequence_number: 3 - OpenResponsesContentPartDoneEvent: - type: object - properties: - type: - type: string - enum: - - response.content_part.done - output_index: - type: number - item_id: - type: string - content_index: - type: number - part: - anyOf: - - $ref: '#/components/schemas/ResponseOutputText' - - $ref: '#/components/schemas/OpenAIResponsesRefusalContent' - sequence_number: - type: number - required: - - type - - output_index - - item_id - - content_index - - part - - sequence_number - description: Event emitted when a content part is complete - example: - type: response.content_part.done - output_index: 0 - item_id: item-1 - content_index: 0 - part: - type: output_text - text: Hello! How can I help you? - annotations: [] - sequence_number: 7 - OpenResponsesTopLogprobs: - type: object - properties: - token: - type: string - logprob: - type: number - description: Alternative token with its log probability - example: - token: hello - logprob: -0.5 - OpenResponsesLogProbs: - type: object - properties: - logprob: - type: number - token: - type: string - top_logprobs: - type: array - items: - $ref: '#/components/schemas/OpenResponsesTopLogprobs' - required: - - logprob - - token - description: Log probability information for a token - example: - logprob: -0.1 - token: world - top_logprobs: - - token: hello - logprob: -0.5 - OpenResponsesTextDeltaEvent: - type: object - properties: - type: - type: string - enum: - - response.output_text.delta - logprobs: - type: array - items: - $ref: '#/components/schemas/OpenResponsesLogProbs' - output_index: - type: number - item_id: - type: string - content_index: - type: number - delta: - type: string - sequence_number: - type: number - required: - - type - - logprobs - - output_index - - item_id - - content_index - - delta - - sequence_number - description: Event emitted when a text delta is streamed - example: - type: response.output_text.delta - logprobs: [] - output_index: 0 - item_id: item-1 - content_index: 0 - delta: Hello - sequence_number: 4 - OpenResponsesTextDoneEvent: - type: object - properties: - type: - type: string - enum: - - response.output_text.done - output_index: - type: number - item_id: - type: string - content_index: - type: number - text: - type: string - sequence_number: - type: number - logprobs: - type: array - items: - $ref: '#/components/schemas/OpenResponsesLogProbs' - required: - - type - - output_index - - item_id - - content_index - - text - - sequence_number - - logprobs - description: Event emitted when text streaming is complete - example: - type: response.output_text.done - output_index: 0 - item_id: item-1 - content_index: 0 - text: Hello! How can I help you? - sequence_number: 6 - logprobs: [] - OpenResponsesRefusalDeltaEvent: - type: object - properties: - type: - type: string - enum: - - response.refusal.delta - output_index: - type: number - item_id: - type: string - content_index: - type: number - delta: - type: string - sequence_number: - type: number - required: - - type - - output_index - - item_id - - content_index - - delta - - sequence_number - description: Event emitted when a refusal delta is streamed - example: - type: response.refusal.delta - output_index: 0 - item_id: item-1 - content_index: 0 - delta: I'm sorry - sequence_number: 4 - OpenResponsesRefusalDoneEvent: - type: object - properties: - type: - type: string - enum: - - response.refusal.done - output_index: - type: number - item_id: - type: string - content_index: - type: number - refusal: - type: string - sequence_number: - type: number - required: - - type - - output_index - - item_id - - content_index - - refusal - - sequence_number - description: Event emitted when refusal streaming is complete - example: - type: response.refusal.done - output_index: 0 - item_id: item-1 - content_index: 0 - refusal: I'm sorry, but I can't assist with that request. - sequence_number: 6 - OpenResponsesOutputTextAnnotationAddedEvent: - type: object - properties: - type: - type: string - enum: - - response.output_text.annotation.added - output_index: - type: number - item_id: - type: string - content_index: - type: number - sequence_number: - type: number - annotation_index: - type: number - annotation: - $ref: '#/components/schemas/OpenAIResponsesAnnotation' - required: - - type - - output_index - - item_id - - content_index - - sequence_number - - annotation_index - - annotation - description: Event emitted when a text annotation is added to output - example: - type: response.output_text.annotation.added - output_index: 0 - item_id: item-1 - content_index: 0 - sequence_number: 5 - annotation_index: 0 - annotation: - type: url_citation - url: https://example.com - title: Example - start_index: 0 - end_index: 7 - OpenResponsesFunctionCallArgumentsDeltaEvent: - type: object - properties: - type: - type: string - enum: - - response.function_call_arguments.delta - item_id: - type: string - output_index: - type: number - delta: - type: string - sequence_number: - type: number - required: - - type - - item_id - - output_index - - delta - - sequence_number - description: Event emitted when function call arguments are being streamed - example: - type: response.function_call_arguments.delta - item_id: item-1 - output_index: 0 - delta: '{"city": "San' - sequence_number: 4 - OpenResponsesFunctionCallArgumentsDoneEvent: - type: object - properties: - type: - type: string - enum: - - response.function_call_arguments.done - item_id: - type: string - output_index: - type: number - name: - type: string - arguments: - type: string - sequence_number: - type: number - required: - - type - - item_id - - output_index - - name - - arguments - - sequence_number - description: Event emitted when function call arguments streaming is complete - example: - type: response.function_call_arguments.done - item_id: item-1 - output_index: 0 - name: get_weather - arguments: '{"city": "San Francisco", "units": "celsius"}' - sequence_number: 6 - OpenAIResponsesReasoningDeltaEvent: - type: object - properties: - type: - type: string - enum: - - response.reasoning_text.delta - output_index: - type: number - item_id: - type: string - content_index: - type: number - delta: - type: string - sequence_number: - type: number - required: - - type - - output_index - - item_id - - content_index - - delta - - sequence_number - description: Event emitted when reasoning text delta is streamed - example: - type: response.reasoning_text.delta - output_index: 0 - item_id: item-1 - content_index: 0 - delta: First, we need - sequence_number: 4 - OpenResponsesReasoningDeltaEvent: - allOf: - - $ref: '#/components/schemas/OpenAIResponsesReasoningDeltaEvent' - - type: object - properties: {} - description: Event emitted when reasoning text delta is streamed - example: - type: response.reasoning_text.delta - output_index: 0 - item_id: item-1 - content_index: 0 - delta: First, we need - sequence_number: 4 - OpenAIResponsesReasoningDoneEvent: - type: object - properties: - type: - type: string - enum: - - response.reasoning_text.done - output_index: - type: number - item_id: - type: string - content_index: - type: number - text: - type: string - sequence_number: - type: number - required: - - type - - output_index - - item_id - - content_index - - text - - sequence_number - description: Event emitted when reasoning text streaming is complete - example: - type: response.reasoning_text.done - output_index: 0 - item_id: item-1 - content_index: 0 - text: First, we need to identify the key components and then combine them logically. - sequence_number: 6 - OpenResponsesReasoningDoneEvent: - allOf: - - $ref: '#/components/schemas/OpenAIResponsesReasoningDoneEvent' - - type: object - properties: {} - description: Event emitted when reasoning text streaming is complete - example: - type: response.reasoning_text.done - output_index: 0 - item_id: item-1 - content_index: 0 - text: First, we need to identify the key components and then combine them logically. - sequence_number: 6 - OpenAIResponsesReasoningSummaryPartAddedEvent: - type: object - properties: - type: - type: string - enum: - - response.reasoning_summary_part.added - output_index: - type: number - item_id: - type: string - summary_index: - type: number - part: - $ref: '#/components/schemas/ReasoningSummaryText' - sequence_number: - type: number - required: - - type - - output_index - - item_id - - summary_index - - part - - sequence_number - description: Event emitted when a reasoning summary part is added - example: - type: response.reasoning_summary_part.added - output_index: 0 - item_id: item-1 - summary_index: 0 - part: - type: summary_text - text: '' - sequence_number: 3 - OpenResponsesReasoningSummaryPartAddedEvent: - allOf: - - $ref: '#/components/schemas/OpenAIResponsesReasoningSummaryPartAddedEvent' - - type: object - properties: {} - description: Event emitted when a reasoning summary part is added - example: - type: response.reasoning_summary_part.added - output_index: 0 - item_id: item-1 - summary_index: 0 - part: - type: summary_text - text: '' - sequence_number: 3 - OpenResponsesReasoningSummaryPartDoneEvent: - type: object - properties: - type: - type: string - enum: - - response.reasoning_summary_part.done - output_index: - type: number - item_id: - type: string - summary_index: - type: number - part: - $ref: '#/components/schemas/ReasoningSummaryText' - sequence_number: - type: number - required: - - type - - output_index - - item_id - - summary_index - - part - - sequence_number - description: Event emitted when a reasoning summary part is complete - example: - type: response.reasoning_summary_part.done - output_index: 0 - item_id: item-1 - summary_index: 0 - part: - type: summary_text - text: Analyzing the problem step by step to find the optimal solution. - sequence_number: 7 - OpenAIResponsesReasoningSummaryTextDeltaEvent: - type: object - properties: - type: - type: string - enum: - - response.reasoning_summary_text.delta - item_id: - type: string - output_index: - type: number - summary_index: - type: number - delta: - type: string - sequence_number: - type: number - required: - - type - - item_id - - output_index - - summary_index - - delta - - sequence_number - description: Event emitted when reasoning summary text delta is streamed - example: - type: response.reasoning_summary_text.delta - item_id: item-1 - output_index: 0 - summary_index: 0 - delta: Analyzing - sequence_number: 4 - OpenResponsesReasoningSummaryTextDeltaEvent: - allOf: - - $ref: '#/components/schemas/OpenAIResponsesReasoningSummaryTextDeltaEvent' - - type: object - properties: {} - description: Event emitted when reasoning summary text delta is streamed - example: - type: response.reasoning_summary_text.delta - item_id: item-1 - output_index: 0 - summary_index: 0 - delta: Analyzing - sequence_number: 4 - OpenAIResponsesReasoningSummaryTextDoneEvent: - type: object - properties: - type: - type: string - enum: - - response.reasoning_summary_text.done - item_id: - type: string - output_index: - type: number - summary_index: - type: number - text: - type: string - sequence_number: - type: number - required: - - type - - item_id - - output_index - - summary_index - - text - - sequence_number - description: Event emitted when reasoning summary text streaming is complete - example: - type: response.reasoning_summary_text.done - item_id: item-1 - output_index: 0 - summary_index: 0 - text: Analyzing the problem step by step to find the optimal solution. - sequence_number: 6 - OpenResponsesReasoningSummaryTextDoneEvent: - allOf: - - $ref: '#/components/schemas/OpenAIResponsesReasoningSummaryTextDoneEvent' - - type: object - properties: {} - description: Event emitted when reasoning summary text streaming is complete - example: - type: response.reasoning_summary_text.done - item_id: item-1 - output_index: 0 - summary_index: 0 - text: Analyzing the problem step by step to find the optimal solution. - sequence_number: 6 - OpenAIResponsesImageGenCallInProgress: - type: object - properties: - type: - type: string - enum: - - response.image_generation_call.in_progress - item_id: - type: string - output_index: - type: number - sequence_number: - type: number - required: - - type - - item_id - - output_index - - sequence_number - OpenResponsesImageGenCallInProgress: - allOf: - - $ref: '#/components/schemas/OpenAIResponsesImageGenCallInProgress' - - type: object - properties: {} - description: Image generation call in progress - example: - type: response.image_generation_call.in_progress - output_index: 0 - sequence_number: 1 - item_id: call-123 - OpenAIResponsesImageGenCallGenerating: - type: object - properties: - type: - type: string - enum: - - response.image_generation_call.generating - item_id: - type: string - output_index: - type: number - sequence_number: - type: number - required: - - type - - item_id - - output_index - - sequence_number - OpenResponsesImageGenCallGenerating: - allOf: - - $ref: '#/components/schemas/OpenAIResponsesImageGenCallGenerating' - - type: object - properties: {} - description: Image generation call is generating - example: - type: response.image_generation_call.generating - output_index: 0 - sequence_number: 2 - item_id: call-123 - OpenAIResponsesImageGenCallPartialImage: - type: object - properties: - type: - type: string - enum: - - response.image_generation_call.partial_image - item_id: - type: string - output_index: - type: number - sequence_number: - type: number - partial_image_b64: - type: string - partial_image_index: - type: number - required: - - type - - item_id - - output_index - - sequence_number - - partial_image_b64 - - partial_image_index - OpenResponsesImageGenCallPartialImage: - allOf: - - $ref: '#/components/schemas/OpenAIResponsesImageGenCallPartialImage' - - type: object - properties: {} - description: Image generation call with partial image - example: - type: response.image_generation_call.partial_image - output_index: 0 - sequence_number: 3 - item_id: call-123 - partial_image_b64: base64encodedimage... - partial_image_index: 0 - OpenAIResponsesImageGenCallCompleted: - type: object - properties: - type: - type: string - enum: - - response.image_generation_call.completed - item_id: - type: string - output_index: - type: number - sequence_number: - type: number - required: - - type - - item_id - - output_index - - sequence_number - OpenResponsesImageGenCallCompleted: - allOf: - - $ref: '#/components/schemas/OpenAIResponsesImageGenCallCompleted' - - type: object - properties: {} - description: Image generation call completed - example: - type: response.image_generation_call.completed - output_index: 0 - sequence_number: 4 - item_id: call-123 - OpenResponsesStreamEvent: - oneOf: - - allOf: - - $ref: '#/components/schemas/OpenResponsesCreatedEvent' - - type: object - properties: - response: - $ref: '#/components/schemas/OpenResponsesNonStreamingResponse' - description: Event emitted when a response is created - example: - type: response.created - response: - id: resp-abc123 - object: response - created_at: 1704067200 - model: gpt-4 - status: in_progress - output: [] - tools: [] - tool_choice: auto - parallel_tool_calls: true - error: null - incomplete_details: null - metadata: null - instructions: null - temperature: null - top_p: null - max_output_tokens: null - sequence_number: 0 - - allOf: - - $ref: '#/components/schemas/OpenResponsesInProgressEvent' - - type: object - properties: - response: - $ref: '#/components/schemas/OpenResponsesNonStreamingResponse' - description: Event emitted when a response is in progress - example: - type: response.in_progress - response: - id: resp-abc123 - object: response - created_at: 1704067200 - model: gpt-4 - status: in_progress - output: [] - tools: [] - tool_choice: auto - parallel_tool_calls: true - error: null - incomplete_details: null - metadata: null - instructions: null - temperature: null - top_p: null - max_output_tokens: null - sequence_number: 1 - - allOf: - - $ref: '#/components/schemas/OpenResponsesCompletedEvent' - - type: object - properties: - response: - $ref: '#/components/schemas/OpenResponsesNonStreamingResponse' - description: Event emitted when a response has completed successfully - example: - type: response.completed - response: - id: resp-abc123 - object: response - created_at: 1704067200 - model: gpt-4 - status: completed - output: - - id: item-1 - type: message - status: completed - role: assistant - content: - - type: output_text - text: Hello! How can I help you? - annotations: [] - tools: [] - tool_choice: auto - parallel_tool_calls: true - error: null - incomplete_details: null - metadata: null - instructions: null - temperature: null - top_p: null - max_output_tokens: null - sequence_number: 10 - - allOf: - - $ref: '#/components/schemas/OpenResponsesIncompleteEvent' - - type: object - properties: - response: - $ref: '#/components/schemas/OpenResponsesNonStreamingResponse' - description: Event emitted when a response is incomplete - example: - type: response.incomplete - response: - id: resp-abc123 - object: response - created_at: 1704067200 - model: gpt-4 - status: incomplete - output: [] - tools: [] - tool_choice: auto - parallel_tool_calls: true - error: null - incomplete_details: null - metadata: null - instructions: null - temperature: null - top_p: null - max_output_tokens: null - sequence_number: 5 - - allOf: - - $ref: '#/components/schemas/OpenResponsesFailedEvent' - - type: object - properties: - response: - $ref: '#/components/schemas/OpenResponsesNonStreamingResponse' - description: Event emitted when a response has failed - example: - type: response.failed - response: - id: resp-abc123 - object: response - created_at: 1704067200 - model: gpt-4 - status: failed - output: [] - tools: [] - tool_choice: auto - parallel_tool_calls: true - error: null - incomplete_details: null - metadata: null - instructions: null - temperature: null - top_p: null - max_output_tokens: null - sequence_number: 3 - - $ref: '#/components/schemas/OpenResponsesErrorEvent' - - allOf: - - $ref: '#/components/schemas/OpenResponsesOutputItemAddedEvent' - - type: object - properties: - item: - $ref: '#/components/schemas/ResponsesOutputItem' - description: Event emitted when a new output item is added to the response - example: - type: response.output_item.added - output_index: 0 - item: - id: item-1 - type: message - status: in_progress - role: assistant - content: [] - sequence_number: 2 - - allOf: - - $ref: '#/components/schemas/OpenResponsesOutputItemDoneEvent' - - type: object - properties: - item: - $ref: '#/components/schemas/ResponsesOutputItem' - description: Event emitted when an output item is complete - example: - type: response.output_item.done - output_index: 0 - item: - id: item-1 - type: message - status: completed - role: assistant - content: - - type: output_text - text: Hello! How can I help you? - annotations: [] - sequence_number: 8 - - allOf: - - $ref: '#/components/schemas/OpenResponsesContentPartAddedEvent' - - type: object - properties: - part: - anyOf: - - $ref: '#/components/schemas/ResponseOutputText' - - $ref: '#/components/schemas/ReasoningTextContent' - - $ref: '#/components/schemas/OpenAIResponsesRefusalContent' - description: Event emitted when a new content part is added to an output item - example: - type: response.content_part.added - output_index: 0 - item_id: item-1 - content_index: 0 - part: - type: output_text - text: '' - annotations: [] - sequence_number: 3 - - allOf: - - $ref: '#/components/schemas/OpenResponsesContentPartDoneEvent' - - type: object - properties: - part: - anyOf: - - $ref: '#/components/schemas/ResponseOutputText' - - $ref: '#/components/schemas/ReasoningTextContent' - - $ref: '#/components/schemas/OpenAIResponsesRefusalContent' - description: Event emitted when a content part is complete - example: - type: response.content_part.done - output_index: 0 - item_id: item-1 - content_index: 0 - part: - type: output_text - text: Hello! How can I help you? - annotations: [] - sequence_number: 7 - - allOf: - - $ref: '#/components/schemas/OpenResponsesTextDeltaEvent' - - type: object - properties: {} - description: Event emitted when a text delta is streamed - example: - type: response.output_text.delta - logprobs: [] - output_index: 0 - item_id: item-1 - content_index: 0 - delta: Hello - sequence_number: 4 - - allOf: - - $ref: '#/components/schemas/OpenResponsesTextDoneEvent' - - type: object - properties: {} - description: Event emitted when text streaming is complete - example: - type: response.output_text.done - output_index: 0 - item_id: item-1 - content_index: 0 - text: Hello! How can I help you? - sequence_number: 6 - logprobs: [] - - allOf: - - $ref: '#/components/schemas/OpenResponsesRefusalDeltaEvent' - - type: object - properties: {} - description: Event emitted when a refusal delta is streamed - example: - type: response.refusal.delta - output_index: 0 - item_id: item-1 - content_index: 0 - delta: I'm sorry - sequence_number: 4 - - allOf: - - $ref: '#/components/schemas/OpenResponsesRefusalDoneEvent' - - type: object - properties: {} - description: Event emitted when refusal streaming is complete - example: - type: response.refusal.done - output_index: 0 - item_id: item-1 - content_index: 0 - refusal: I'm sorry, but I can't assist with that request. - sequence_number: 6 - - allOf: - - $ref: '#/components/schemas/OpenResponsesOutputTextAnnotationAddedEvent' - - type: object - properties: {} - description: Event emitted when a text annotation is added to output - example: - type: response.output_text.annotation.added - output_index: 0 - item_id: item-1 - content_index: 0 - sequence_number: 5 - annotation_index: 0 - annotation: - type: url_citation - url: https://example.com - title: Example - start_index: 0 - end_index: 7 - - allOf: - - $ref: '#/components/schemas/OpenResponsesFunctionCallArgumentsDeltaEvent' - - type: object - properties: {} - description: Event emitted when function call arguments are being streamed - example: - type: response.function_call_arguments.delta - item_id: item-1 - output_index: 0 - delta: '{"city": "San' - sequence_number: 4 - - allOf: - - $ref: '#/components/schemas/OpenResponsesFunctionCallArgumentsDoneEvent' - - type: object - properties: {} - description: Event emitted when function call arguments streaming is complete - example: - type: response.function_call_arguments.done - item_id: item-1 - output_index: 0 - name: get_weather - arguments: '{"city": "San Francisco", "units": "celsius"}' - sequence_number: 6 - - $ref: '#/components/schemas/OpenResponsesReasoningDeltaEvent' - - $ref: '#/components/schemas/OpenResponsesReasoningDoneEvent' - - $ref: '#/components/schemas/OpenResponsesReasoningSummaryPartAddedEvent' - - allOf: - - $ref: '#/components/schemas/OpenResponsesReasoningSummaryPartDoneEvent' - - type: object - properties: {} - description: Event emitted when a reasoning summary part is complete - example: - type: response.reasoning_summary_part.done - output_index: 0 - item_id: item-1 - summary_index: 0 - part: - type: summary_text - text: Analyzing the problem step by step to find the optimal solution. - sequence_number: 7 - - $ref: '#/components/schemas/OpenResponsesReasoningSummaryTextDeltaEvent' - - $ref: '#/components/schemas/OpenResponsesReasoningSummaryTextDoneEvent' - - $ref: '#/components/schemas/OpenResponsesImageGenCallInProgress' - - $ref: '#/components/schemas/OpenResponsesImageGenCallGenerating' - - $ref: '#/components/schemas/OpenResponsesImageGenCallPartialImage' - - $ref: '#/components/schemas/OpenResponsesImageGenCallCompleted' - description: Union of all possible event types emitted during response streaming - example: - type: response.created - response: - id: resp-abc123 - object: response - created_at: 1704067200 - model: gpt-4 - status: in_progress - output: [] - tools: [] - tool_choice: auto - parallel_tool_calls: true - error: null - incomplete_details: null - metadata: null - instructions: null - temperature: null - top_p: null - max_output_tokens: null - sequence_number: 0 - BadRequestResponseErrorData: - type: object - properties: - code: - type: integer - message: - type: string - metadata: - type: object - nullable: true - additionalProperties: - nullable: true - required: - - code - - message - description: Error data for BadRequestResponse - example: - code: 400 - message: Invalid request parameters - BadRequestResponse: - type: object - properties: - error: - $ref: '#/components/schemas/BadRequestResponseErrorData' - user_id: - type: string - nullable: true - required: - - error - description: Bad Request - Invalid request parameters or malformed input - example: - error: - code: 400 - message: Invalid request parameters - UnauthorizedResponseErrorData: - type: object - properties: - code: - type: integer - message: - type: string - metadata: - type: object - nullable: true - additionalProperties: - nullable: true - required: - - code - - message - description: Error data for UnauthorizedResponse - example: - code: 401 - message: Missing Authentication header - UnauthorizedResponse: - type: object - properties: - error: - $ref: '#/components/schemas/UnauthorizedResponseErrorData' - user_id: - type: string - nullable: true - required: - - error - description: Unauthorized - Authentication required or invalid credentials - example: - error: - code: 401 - message: Missing Authentication header - PaymentRequiredResponseErrorData: - type: object - properties: - code: - type: integer - message: - type: string - metadata: - type: object - nullable: true - additionalProperties: - nullable: true - required: - - code - - message - description: Error data for PaymentRequiredResponse - example: - code: 402 - message: Insufficient credits. Add more using https://openrouter.ai/credits - PaymentRequiredResponse: - type: object - properties: - error: - $ref: '#/components/schemas/PaymentRequiredResponseErrorData' - user_id: - type: string - nullable: true - required: - - error - description: Payment Required - Insufficient credits or quota to complete request - example: - error: - code: 402 - message: Insufficient credits. Add more using https://openrouter.ai/credits - NotFoundResponseErrorData: - type: object - properties: - code: - type: integer - message: - type: string - metadata: - type: object - nullable: true - additionalProperties: - nullable: true - required: - - code - - message - description: Error data for NotFoundResponse - example: - code: 404 - message: Resource not found - NotFoundResponse: - type: object - properties: - error: - $ref: '#/components/schemas/NotFoundResponseErrorData' - user_id: - type: string - nullable: true - required: - - error - description: Not Found - Resource does not exist - example: - error: - code: 404 - message: Resource not found - RequestTimeoutResponseErrorData: - type: object - properties: - code: - type: integer - message: - type: string - metadata: - type: object - nullable: true - additionalProperties: - nullable: true - required: - - code - - message - description: Error data for RequestTimeoutResponse - example: - code: 408 - message: Operation timed out. Please try again later. - RequestTimeoutResponse: - type: object - properties: - error: - $ref: '#/components/schemas/RequestTimeoutResponseErrorData' - user_id: - type: string - nullable: true - required: - - error - description: Request Timeout - Operation exceeded time limit - example: - error: - code: 408 - message: Operation timed out. Please try again later. - PayloadTooLargeResponseErrorData: - type: object - properties: - code: - type: integer - message: - type: string - metadata: - type: object - nullable: true - additionalProperties: - nullable: true - required: - - code - - message - description: Error data for PayloadTooLargeResponse - example: - code: 413 - message: Request payload too large - PayloadTooLargeResponse: - type: object - properties: - error: - $ref: '#/components/schemas/PayloadTooLargeResponseErrorData' - user_id: - type: string - nullable: true - required: - - error - description: Payload Too Large - Request payload exceeds size limits - example: - error: - code: 413 - message: Request payload too large - UnprocessableEntityResponseErrorData: - type: object - properties: - code: - type: integer - message: - type: string - metadata: - type: object - nullable: true - additionalProperties: - nullable: true - required: - - code - - message - description: Error data for UnprocessableEntityResponse - example: - code: 422 - message: Invalid argument - UnprocessableEntityResponse: - type: object - properties: - error: - $ref: '#/components/schemas/UnprocessableEntityResponseErrorData' - user_id: - type: string - nullable: true - required: - - error - description: Unprocessable Entity - Semantic validation failure - example: - error: - code: 422 - message: Invalid argument - TooManyRequestsResponseErrorData: - type: object - properties: - code: - type: integer - message: - type: string - metadata: - type: object - nullable: true - additionalProperties: - nullable: true - required: - - code - - message - description: Error data for TooManyRequestsResponse - example: - code: 429 - message: Rate limit exceeded - TooManyRequestsResponse: - type: object - properties: - error: - $ref: '#/components/schemas/TooManyRequestsResponseErrorData' - user_id: - type: string - nullable: true - required: - - error - description: Too Many Requests - Rate limit exceeded - example: - error: - code: 429 - message: Rate limit exceeded - InternalServerResponseErrorData: - type: object - properties: - code: - type: integer - message: - type: string - metadata: - type: object - nullable: true - additionalProperties: - nullable: true - required: - - code - - message - description: Error data for InternalServerResponse - example: - code: 500 - message: Internal Server Error - InternalServerResponse: - type: object - properties: - error: - $ref: '#/components/schemas/InternalServerResponseErrorData' - user_id: - type: string - nullable: true - required: - - error - description: Internal Server Error - Unexpected server error - example: - error: - code: 500 - message: Internal Server Error - BadGatewayResponseErrorData: - type: object - properties: - code: - type: integer - message: - type: string - metadata: - type: object - nullable: true - additionalProperties: - nullable: true - required: - - code - - message - description: Error data for BadGatewayResponse - example: - code: 502 - message: Provider returned error - BadGatewayResponse: - type: object - properties: - error: - $ref: '#/components/schemas/BadGatewayResponseErrorData' - user_id: - type: string - nullable: true - required: - - error - description: Bad Gateway - Provider/upstream API failure - example: - error: - code: 502 - message: Provider returned error - ServiceUnavailableResponseErrorData: - type: object - properties: - code: - type: integer - message: - type: string - metadata: - type: object - nullable: true - additionalProperties: - nullable: true - required: - - code - - message - description: Error data for ServiceUnavailableResponse - example: - code: 503 - message: Service temporarily unavailable - ServiceUnavailableResponse: - type: object - properties: - error: - $ref: '#/components/schemas/ServiceUnavailableResponseErrorData' - user_id: - type: string - nullable: true - required: - - error - description: Service Unavailable - Service temporarily unavailable - example: - error: - code: 503 - message: Service temporarily unavailable - EdgeNetworkTimeoutResponseErrorData: - type: object - properties: - code: - type: integer - message: - type: string - metadata: - type: object - nullable: true - additionalProperties: - nullable: true - required: - - code - - message - description: Error data for EdgeNetworkTimeoutResponse - example: - code: 524 - message: Request timed out. Please try again later. - EdgeNetworkTimeoutResponse: - type: object - properties: - error: - $ref: '#/components/schemas/EdgeNetworkTimeoutResponseErrorData' - user_id: - type: string - nullable: true - required: - - error - description: Infrastructure Timeout - Provider request timed out at edge network - example: - error: - code: 524 - message: Request timed out. Please try again later. - ProviderOverloadedResponseErrorData: - type: object - properties: - code: - type: integer - message: - type: string - metadata: - type: object - nullable: true - additionalProperties: - nullable: true - required: - - code - - message - description: Error data for ProviderOverloadedResponse - example: - code: 529 - message: Provider returned error - ProviderOverloadedResponse: - type: object - properties: - error: - $ref: '#/components/schemas/ProviderOverloadedResponseErrorData' - user_id: - type: string - nullable: true - required: - - error - description: Provider Overloaded - Provider is temporarily overloaded - example: - error: - code: 529 - message: Provider returned error - OpenResponsesReasoning: - allOf: - - $ref: '#/components/schemas/OutputItemReasoning' - - type: object - properties: - signature: - type: string - nullable: true - format: - type: string - nullable: true - enum: - - unknown - - openai-responses-v1 - - xai-responses-v1 - - anthropic-claude-v1 - - google-gemini-v1 - x-speakeasy-unknown-values: allow - example: - type: reasoning - id: reasoning-abc123 - summary: - - type: summary_text - text: Step by step analysis - description: Reasoning output item with signature and format extensions - OpenResponsesEasyInputMessage: - type: object - properties: - type: - type: string - enum: - - message - role: - anyOf: - - type: string - enum: - - user - - type: string - enum: - - system - - type: string - enum: - - assistant - - type: string - enum: - - developer - content: - anyOf: - - type: array - items: - oneOf: - - $ref: '#/components/schemas/ResponseInputText' - - $ref: '#/components/schemas/ResponseInputImage' - - $ref: '#/components/schemas/ResponseInputFile' - - $ref: '#/components/schemas/ResponseInputAudio' - discriminator: - propertyName: type - mapping: - input_text: '#/components/schemas/ResponseInputText' - input_image: '#/components/schemas/ResponseInputImage' - input_file: '#/components/schemas/ResponseInputFile' - input_audio: '#/components/schemas/ResponseInputAudio' - - type: string - required: - - role - - content - OpenResponsesInputMessageItem: - type: object - properties: - id: - type: string - type: - type: string - enum: - - message - role: - anyOf: - - type: string - enum: - - user - - type: string - enum: - - system - - type: string - enum: - - developer - content: - type: array - items: - oneOf: - - $ref: '#/components/schemas/ResponseInputText' - - $ref: '#/components/schemas/ResponseInputImage' - - $ref: '#/components/schemas/ResponseInputFile' - - $ref: '#/components/schemas/ResponseInputAudio' - discriminator: - propertyName: type - mapping: - input_text: '#/components/schemas/ResponseInputText' - input_image: '#/components/schemas/ResponseInputImage' - input_file: '#/components/schemas/ResponseInputFile' - input_audio: '#/components/schemas/ResponseInputAudio' - required: - - role - - content - OpenResponsesFunctionToolCall: - type: object - properties: - type: - type: string - enum: - - function_call - call_id: - type: string - name: - type: string - arguments: - type: string - id: - type: string - status: - $ref: '#/components/schemas/ToolCallStatus' - required: - - type - - call_id - - name - - arguments - - id - description: A function call initiated by the model - example: - id: call-abc123 - type: function_call - call_id: call-abc123 - name: get_weather - arguments: '{"location":"San Francisco"}' - status: completed - OpenResponsesFunctionCallOutput: - type: object - properties: - type: - type: string - enum: - - function_call_output - id: - type: string - nullable: true - call_id: - type: string - output: - type: string - status: - $ref: '#/components/schemas/ToolCallStatus' - required: - - type - - call_id - - output - description: The output from a function call execution - example: - type: function_call_output - id: output-abc123 - call_id: call-abc123 - output: '{"temperature":72,"conditions":"sunny"}' - status: completed - OpenResponsesInput: - anyOf: - - type: string - - type: array - items: - anyOf: - - $ref: '#/components/schemas/OpenResponsesReasoning' - - $ref: '#/components/schemas/OpenResponsesEasyInputMessage' - - $ref: '#/components/schemas/OpenResponsesInputMessageItem' - - $ref: '#/components/schemas/OpenResponsesFunctionToolCall' - - $ref: '#/components/schemas/OpenResponsesFunctionCallOutput' - - $ref: '#/components/schemas/ResponsesOutputMessage' - - $ref: '#/components/schemas/ResponsesOutputItemReasoning' - - $ref: '#/components/schemas/ResponsesOutputItemFunctionCall' - - $ref: '#/components/schemas/ResponsesWebSearchCallOutput' - - $ref: '#/components/schemas/ResponsesOutputItemFileSearchCall' - - $ref: '#/components/schemas/ResponsesImageGenerationCall' - description: Input for a response request - can be a string or array of items - example: - - role: user - content: What is the weather today? - OpenResponsesResponseText: - allOf: - - $ref: '#/components/schemas/ResponseTextConfig' - - type: object - properties: {} - description: Text output configuration including format and verbosity - example: - format: - type: text - verbosity: medium - OpenResponsesReasoningConfig: - allOf: - - $ref: '#/components/schemas/OpenAIResponsesReasoningConfig' - - type: object - nullable: true - properties: - max_tokens: - type: number - nullable: true - enabled: - type: boolean - nullable: true - description: Configuration for reasoning mode in the response - example: - summary: auto - enabled: true - OpenAIResponsesIncludable: - type: string - enum: - - file_search_call.results - - message.input_image.image_url - - computer_call_output.output.image_url - - reasoning.encrypted_content - - code_interpreter_call.outputs - x-speakeasy-unknown-values: allow - DataCollection: - type: string - nullable: true - enum: - - deny - - allow - description: >- - Data collection setting. If no available model provider meets the requirement, your request will return an error. - - - allow: (default) allow providers which store user data non-transiently and may train on it - - - - deny: use only providers which do not collect user data. - example: allow - x-speakeasy-unknown-values: allow - ProviderName: - type: string - enum: - - AI21 - - AionLabs - - Alibaba - - Amazon Bedrock - - Anthropic - - Arcee - - AtlasCloud - - Avian - - Azure - - BaseTen - - Black Forest Labs - - Cerebras - - Chutes - - Cirrascale - - Clarifai - - Cloudflare - - Cohere - - Crusoe - - DeepInfra - - DeepSeek - - Featherless - - Fireworks - - Friendli - - GMICloud - - Google - - Google AI Studio - - Groq - - Hyperbolic - - Inception - - InferenceNet - - Infermatic - - Inflection - - Liquid - - Mancer 2 - - Minimax - - ModelRun - - Mistral - - Modular - - Moonshot AI - - Morph - - NCompass - - Nebius - - NextBit - - Novita - - Nvidia - - OpenAI - - OpenInference - - Parasail - - Perplexity - - Phala - - Relace - - SambaNova - - SiliconFlow - - Stealth - - Switchpoint - - Targon - - Together - - Venice - - WandB - - xAI - - Z.AI - - FakeProvider - example: OpenAI - x-speakeasy-unknown-values: allow - Quantization: - type: string - enum: - - int4 - - int8 - - fp4 - - fp6 - - fp8 - - fp16 - - bf16 - - fp32 - - unknown - example: fp16 - x-speakeasy-unknown-values: allow - ProviderSort: - type: string - nullable: true - enum: - - price - - throughput - - latency - description: >- - The sorting strategy to use for this request, if "order" is not specified. When set, no load balancing is performed. - example: price - x-speakeasy-unknown-values: allow - BigNumberUnion: - anyOf: - - type: number - - type: string - - type: number - example: 1000 - description: A value in string or number format that is a large number - example: 1000 - OpenResponsesRequest: - type: object - properties: - input: - $ref: '#/components/schemas/OpenResponsesInput' - instructions: - type: string - nullable: true - metadata: - $ref: '#/components/schemas/OpenResponsesRequestMetadata' - tools: - type: array - items: - oneOf: - - allOf: - - $ref: '#/components/schemas/OpenResponsesFunctionTool' - - type: object - properties: {} - description: Function tool definition - example: - type: function - name: get_weather - description: Get the current weather in a location - parameters: - type: object - properties: - location: - type: string - description: The city and state - unit: - type: string - enum: - - celsius - - fahrenheit - x-speakeasy-unknown-values: allow - required: - - location - - $ref: '#/components/schemas/OpenResponsesWebSearchPreviewTool' - - $ref: '#/components/schemas/OpenResponsesWebSearchPreview20250311Tool' - - $ref: '#/components/schemas/OpenResponsesWebSearchTool' - - $ref: '#/components/schemas/OpenResponsesWebSearch20250826Tool' - tool_choice: - $ref: '#/components/schemas/OpenAIResponsesToolChoice' - parallel_tool_calls: - type: boolean - nullable: true - model: - type: string - models: - type: array - items: - type: string - text: - $ref: '#/components/schemas/OpenResponsesResponseText' - reasoning: - $ref: '#/components/schemas/OpenResponsesReasoningConfig' - max_output_tokens: - type: number - nullable: true - temperature: - type: number - nullable: true - minimum: 0 - maximum: 2 - top_p: - type: number - nullable: true - minimum: 0 - top_k: - type: number - prompt_cache_key: - type: string - nullable: true - previous_response_id: - type: string - nullable: true - prompt: - $ref: '#/components/schemas/OpenAIResponsesPrompt' - include: - type: array - nullable: true - items: - $ref: '#/components/schemas/OpenAIResponsesIncludable' - background: - type: boolean - nullable: true - safety_identifier: - type: string - nullable: true - store: - type: boolean - nullable: true - service_tier: - allOf: - - $ref: '#/components/schemas/OpenAIResponsesServiceTier' - - enum: - - auto - - default - - flex - - scale - - priority - example: auto - x-speakeasy-unknown-values: allow - truncation: - allOf: - - $ref: '#/components/schemas/OpenAIResponsesTruncation' - - example: auto - stream: - type: boolean - default: false - provider: - type: object - nullable: true - properties: - allow_fallbacks: - type: boolean - nullable: true - description: > - Whether to allow backup providers to serve requests - - - true: (default) when the primary provider (or your custom providers in "order") is unavailable, use the next best provider. - - - false: use only the primary/custom provider, and return the upstream error if it's unavailable. - - require_parameters: - type: boolean - nullable: true - description: >- - Whether to filter providers to only those that support the parameters you've provided. If this setting is omitted or set to false, then providers will receive only the parameters they support, and ignore the rest. - data_collection: - $ref: '#/components/schemas/DataCollection' - zdr: - type: boolean - nullable: true - description: >- - Whether to restrict routing to only ZDR (Zero Data Retention) endpoints. When true, only endpoints that do not retain prompts will be used. - example: true - enforce_distillable_text: - type: boolean - nullable: true - description: >- - Whether to restrict routing to only models that allow text distillation. When true, only models where the author has allowed distillation will be used. - example: true - order: - type: array - nullable: true - items: - anyOf: - - $ref: '#/components/schemas/ProviderName' - - type: string - description: >- - An ordered list of provider slugs. The router will attempt to use the first provider in the subset of this list that supports your requested model, and fall back to the next if it is unavailable. If no providers are available, the request will fail with an error message. - only: - type: array - nullable: true - items: - anyOf: - - $ref: '#/components/schemas/ProviderName' - - type: string - description: >- - List of provider slugs to allow. If provided, this list is merged with your account-wide allowed provider settings for this request. - ignore: - type: array - nullable: true - items: - anyOf: - - $ref: '#/components/schemas/ProviderName' - - type: string - description: >- - List of provider slugs to ignore. If provided, this list is merged with your account-wide ignored provider settings for this request. - quantizations: - type: array - nullable: true - items: - $ref: '#/components/schemas/Quantization' - description: A list of quantization levels to filter the provider by. - sort: - $ref: '#/components/schemas/ProviderSort' - max_price: - type: object - properties: - prompt: - $ref: '#/components/schemas/BigNumberUnion' - completion: - $ref: '#/components/schemas/BigNumberUnion' - image: - $ref: '#/components/schemas/BigNumberUnion' - audio: - $ref: '#/components/schemas/BigNumberUnion' - request: - $ref: '#/components/schemas/BigNumberUnion' - additionalProperties: false - description: >- - The object specifying the maximum price you want to pay for this request. USD price per million tokens, for prompt and completion. - additionalProperties: false - description: When multiple model providers are available, optionally indicate your routing preference. - plugins: - type: array - items: - oneOf: - - type: object - properties: - id: - type: string - enum: - - moderation - required: - - id - - type: object - properties: - id: - type: string - enum: - - web - max_results: - type: number - search_prompt: - type: string - engine: - type: string - enum: - - native - - exa - x-speakeasy-unknown-values: allow - required: - - id - - type: object - properties: - id: - type: string - enum: - - file-parser - max_files: - type: number - pdf: - type: object - properties: - engine: - type: string - enum: - - mistral-ocr - - pdf-text - - native - x-speakeasy-unknown-values: allow - required: - - id - description: Plugins you want to enable for this request, including their settings. - user: - type: string - maxLength: 128 - description: >- - A unique identifier representing your end-user, which helps distinguish between different users of your app. This allows your app to identify specific users in case of abuse reports, preventing your entire app from being affected by the actions of individual users. Maximum of 128 characters. - description: Request schema for Responses endpoint - example: - model: anthropic/claude-4.5-sonnet-20250929 - input: - - type: message - content: Hello, how are you? - role: user - temperature: 0.7 - top_p: 0.9 - tools: - - type: function - name: get_current_weather - description: Get the current weather in a given location - parameters: - type: object - properties: - location: - type: string - ActivityItem: - type: object - properties: - date: - type: string - description: Date of the activity (YYYY-MM-DD format) - example: '2025-08-24' - model: - type: string - description: Model slug (e.g., "openai/gpt-4.1") - example: openai/gpt-4.1 - model_permaslug: - type: string - description: Model permaslug (e.g., "openai/gpt-4.1-2025-04-14") - example: openai/gpt-4.1-2025-04-14 - endpoint_id: - type: string - description: Unique identifier for the endpoint - example: 550e8400-e29b-41d4-a716-446655440000 - provider_name: - type: string - description: Name of the provider serving this endpoint - example: OpenAI - usage: - type: number - description: Total cost in USD (OpenRouter credits spent) - example: 0.015 - byok_usage_inference: - type: number - description: BYOK inference cost in USD (external credits spent) - example: 0.012 - requests: - type: number - description: Number of requests made - example: 5 - prompt_tokens: - type: number - description: Total prompt tokens used - example: 50 - completion_tokens: - type: number - description: Total completion tokens generated - example: 125 - reasoning_tokens: - type: number - description: Total reasoning tokens used - example: 25 - required: - - date - - model - - model_permaslug - - endpoint_id - - provider_name - - usage - - byok_usage_inference - - requests - - prompt_tokens - - completion_tokens - - reasoning_tokens - example: - date: '2025-08-24' - model: openai/gpt-4.1 - model_permaslug: openai/gpt-4.1-2025-04-14 - endpoint_id: 550e8400-e29b-41d4-a716-446655440000 - provider_name: OpenAI - usage: 0.015 - byok_usage_inference: 0.012 - requests: 5 - prompt_tokens: 50 - completion_tokens: 125 - reasoning_tokens: 25 - ForbiddenResponseErrorData: - type: object - properties: - code: - type: integer - message: - type: string - metadata: - type: object - nullable: true - additionalProperties: - nullable: true - required: - - code - - message - description: Error data for ForbiddenResponse - example: - code: 403 - message: Only provisioning keys can perform this operation - ForbiddenResponse: - type: object - properties: - error: - $ref: '#/components/schemas/ForbiddenResponseErrorData' - user_id: - type: string - nullable: true - required: - - error - description: Forbidden - Authentication successful but insufficient permissions - example: - error: - code: 403 - message: Only provisioning keys can perform this operation - CreateChargeRequest: - type: object - properties: - amount: - type: number - sender: - type: string - chain_id: - type: integer - enum: - - 1 - - 137 - - 8453 - x-speakeasy-unknown-values: allow - required: - - amount - - sender - - chain_id - description: Create a Coinbase charge for crypto payment - example: - amount: 100 - sender: '0x1234567890123456789012345678901234567890' - chain_id: 1 - PublicPricing: - type: object - properties: - prompt: - $ref: '#/components/schemas/BigNumberUnion' - completion: - $ref: '#/components/schemas/BigNumberUnion' - request: - $ref: '#/components/schemas/BigNumberUnion' - image: - $ref: '#/components/schemas/BigNumberUnion' - image_token: - $ref: '#/components/schemas/BigNumberUnion' - image_output: - $ref: '#/components/schemas/BigNumberUnion' - audio: - $ref: '#/components/schemas/BigNumberUnion' - input_audio_cache: - $ref: '#/components/schemas/BigNumberUnion' - web_search: - $ref: '#/components/schemas/BigNumberUnion' - internal_reasoning: - $ref: '#/components/schemas/BigNumberUnion' - input_cache_read: - $ref: '#/components/schemas/BigNumberUnion' - input_cache_write: - $ref: '#/components/schemas/BigNumberUnion' - discount: - type: number - required: - - prompt - - completion - additionalProperties: false - description: Pricing information for the model - example: - prompt: '0.00003' - completion: '0.00006' - request: '0' - image: '0' - ModelGroup: - type: string - enum: - - Router - - Media - - Other - - GPT - - Claude - - Gemini - - Grok - - Cohere - - Nova - - Qwen - - Yi - - DeepSeek - - Mistral - - Llama2 - - Llama3 - - Llama4 - - PaLM - - RWKV - - Qwen3 - example: GPT - description: Tokenizer type used by the model - x-speakeasy-unknown-values: allow - InputModality: - type: string - enum: - - text - - image - - file - - audio - - video - example: text - x-speakeasy-unknown-values: allow - OutputModality: - type: string - enum: - - text - - image - - embeddings - example: text - x-speakeasy-unknown-values: allow - ModelArchitecture: - type: object - properties: - tokenizer: - $ref: '#/components/schemas/ModelGroup' - instruct_type: - type: string - nullable: true - enum: - - none - - airoboros - - alpaca - - alpaca-modif - - chatml - - claude - - code-llama - - gemma - - llama2 - - llama3 - - mistral - - nemotron - - neural - - openchat - - phi3 - - rwkv - - vicuna - - zephyr - - deepseek-r1 - - deepseek-v3.1 - - qwq - - qwen3 - example: chatml - description: Instruction format type - x-speakeasy-unknown-values: allow - modality: - type: string - nullable: true - description: Primary modality of the model - example: text->text - input_modalities: - type: array - items: - $ref: '#/components/schemas/InputModality' - description: Supported input modalities - output_modalities: - type: array - items: - $ref: '#/components/schemas/OutputModality' - description: Supported output modalities - required: - - modality - - input_modalities - - output_modalities - description: Model architecture information - example: - tokenizer: GPT - instruct_type: chatml - modality: text->text - input_modalities: - - text - output_modalities: - - text - TopProviderInfo: - type: object - properties: - context_length: - type: number - nullable: true - description: Context length from the top provider - example: 8192 - max_completion_tokens: - type: number - nullable: true - description: Maximum completion tokens from the top provider - example: 4096 - is_moderated: - type: boolean - description: Whether the top provider moderates content - example: true - required: - - is_moderated - description: Information about the top provider for this model - example: - context_length: 8192 - max_completion_tokens: 4096 - is_moderated: true - PerRequestLimits: - type: object - nullable: true - properties: - prompt_tokens: - type: number - example: 1000 - description: Maximum prompt tokens per request - completion_tokens: - type: number - example: 1000 - description: Maximum completion tokens per request - required: - - prompt_tokens - - completion_tokens - description: Per-request token limits - example: - prompt_tokens: 1000 - completion_tokens: 1000 - Parameter: - type: string - enum: - - temperature - - top_p - - top_k - - min_p - - top_a - - frequency_penalty - - presence_penalty - - repetition_penalty - - max_tokens - - logit_bias - - logprobs - - top_logprobs - - seed - - response_format - - structured_outputs - - stop - - tools - - tool_choice - - parallel_tool_calls - - include_reasoning - - reasoning - - web_search_options - - verbosity - example: temperature - x-speakeasy-unknown-values: allow - DefaultParameters: - type: object - nullable: true - properties: - temperature: - type: number - nullable: true - minimum: 0 - maximum: 2 - top_p: - type: number - nullable: true - minimum: 0 - maximum: 1 - frequency_penalty: - type: number - nullable: true - minimum: -2 - maximum: 2 - additionalProperties: false - description: Default parameters for this model - example: - temperature: 0.7 - top_p: 0.9 - frequency_penalty: 0 - Model: - type: object - properties: - id: - type: string - description: Unique identifier for the model - example: openai/gpt-4 - canonical_slug: - type: string - description: Canonical slug for the model - example: openai/gpt-4 - hugging_face_id: - type: string - nullable: true - description: Hugging Face model identifier, if applicable - example: microsoft/DialoGPT-medium - name: - type: string - description: Display name of the model - example: GPT-4 - created: - type: number - description: Unix timestamp of when the model was created - example: 1692901234 - description: - type: string - description: Description of the model - example: GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy. - pricing: - $ref: '#/components/schemas/PublicPricing' - context_length: - type: number - nullable: true - description: Maximum context length in tokens - example: 8192 - architecture: - $ref: '#/components/schemas/ModelArchitecture' - top_provider: - $ref: '#/components/schemas/TopProviderInfo' - per_request_limits: - $ref: '#/components/schemas/PerRequestLimits' - supported_parameters: - type: array - items: - $ref: '#/components/schemas/Parameter' - description: List of supported parameters for this model - default_parameters: - $ref: '#/components/schemas/DefaultParameters' - required: - - id - - canonical_slug - - name - - created - - pricing - - context_length - - architecture - - top_provider - - per_request_limits - - supported_parameters - - default_parameters - description: Information about an AI model available on OpenRouter - example: - id: openai/gpt-4 - canonical_slug: openai/gpt-4 - name: GPT-4 - created: 1692901234 - description: GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy. - pricing: - prompt: '0.00003' - completion: '0.00006' - request: '0' - image: '0' - context_length: 8192 - architecture: - tokenizer: GPT - instruct_type: chatml - modality: text->text - input_modalities: - - text - output_modalities: - - text - top_provider: - context_length: 8192 - max_completion_tokens: 4096 - is_moderated: true - per_request_limits: null - supported_parameters: - - temperature - - top_p - - max_tokens - default_parameters: null - ModelsListResponseData: - type: array - items: - $ref: '#/components/schemas/Model' - description: List of available models - ModelsListResponse: - type: object - properties: - data: - $ref: '#/components/schemas/ModelsListResponseData' - required: - - data - description: List of available models - example: - data: - - id: openai/gpt-4 - canonical_slug: openai/gpt-4 - name: GPT-4 - created: 1692901234 - description: GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy. - pricing: - prompt: '0.00003' - completion: '0.00006' - request: '0' - image: '0' - context_length: 8192 - architecture: - tokenizer: GPT - instruct_type: chatml - modality: text->text - input_modalities: - - text - output_modalities: - - text - top_provider: - context_length: 8192 - max_completion_tokens: 4096 - is_moderated: true - per_request_limits: null - supported_parameters: - - temperature - - top_p - - max_tokens - - frequency_penalty - - presence_penalty - default_parameters: null - ModelsCountResponse: - type: object - properties: - data: - type: object - properties: - count: - type: number - description: Total number of available models - example: 150 - required: - - count - description: Model count data - example: - count: 150 - required: - - data - description: Model count data - example: - data: - count: 150 - InstructType: - type: string - nullable: true - enum: - - none - - airoboros - - alpaca - - alpaca-modif - - chatml - - claude - - code-llama - - gemma - - llama2 - - llama3 - - mistral - - nemotron - - neural - - openchat - - phi3 - - rwkv - - vicuna - - zephyr - - deepseek-r1 - - deepseek-v3.1 - - qwq - - qwen3 - description: Instruction format type - x-speakeasy-unknown-values: allow - EndpointStatus: - type: integer - enum: - - 0 - - -1 - - -2 - - -3 - - -5 - - -10 - example: 0 - x-speakeasy-unknown-values: allow - PublicEndpoint: - type: object - properties: - name: - type: string - model_name: - type: string - context_length: - type: number - pricing: - type: object - properties: - prompt: - $ref: '#/components/schemas/BigNumberUnion' - completion: - $ref: '#/components/schemas/BigNumberUnion' - request: - $ref: '#/components/schemas/BigNumberUnion' - image: - $ref: '#/components/schemas/BigNumberUnion' - image_token: - $ref: '#/components/schemas/BigNumberUnion' - image_output: - $ref: '#/components/schemas/BigNumberUnion' - audio: - $ref: '#/components/schemas/BigNumberUnion' - input_audio_cache: - $ref: '#/components/schemas/BigNumberUnion' - web_search: - $ref: '#/components/schemas/BigNumberUnion' - internal_reasoning: - $ref: '#/components/schemas/BigNumberUnion' - input_cache_read: - $ref: '#/components/schemas/BigNumberUnion' - input_cache_write: - $ref: '#/components/schemas/BigNumberUnion' - discount: - type: number - required: - - prompt - - completion - additionalProperties: false - provider_name: - $ref: '#/components/schemas/ProviderName' - tag: - type: string - quantization: - allOf: - - $ref: '#/components/schemas/Quantization' - - nullable: true - max_completion_tokens: - type: number - nullable: true - max_prompt_tokens: - type: number - nullable: true - supported_parameters: - type: array - items: - $ref: '#/components/schemas/Parameter' - status: - $ref: '#/components/schemas/EndpointStatus' - uptime_last_30m: - type: number - nullable: true - supports_implicit_caching: - type: boolean - required: - - name - - model_name - - context_length - - pricing - - provider_name - - tag - - quantization - - max_completion_tokens - - max_prompt_tokens - - supported_parameters - - uptime_last_30m - - supports_implicit_caching - description: Information about a specific model endpoint - example: - name: 'OpenAI: GPT-4' - model_name: GPT-4 - context_length: 8192 - pricing: - prompt: '0.00003' - completion: '0.00006' - request: '0' - image: '0' - provider_name: OpenAI - tag: openai - quantization: fp16 - max_completion_tokens: 4096 - max_prompt_tokens: 8192 - supported_parameters: - - temperature - - top_p - - max_tokens - status: 0 - uptime_last_30m: 99.5 - supports_implicit_caching: true - ListEndpointsResponse: - type: object - properties: - id: - type: string - description: Unique identifier for the model - example: openai/gpt-4 - name: - type: string - description: Display name of the model - example: GPT-4 - created: - type: number - description: Unix timestamp of when the model was created - example: 1692901234 - description: - type: string - description: Description of the model - example: GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy. - architecture: - allOf: - - $ref: '#/components/schemas/ModelArchitecture' - - properties: - tokenizer: - allOf: - - $ref: '#/components/schemas/ModelGroup' - - nullable: true - instruct_type: - $ref: '#/components/schemas/InstructType' - modality: - type: string - nullable: true - description: Primary modality of the model - example: text - input_modalities: - type: array - items: - $ref: '#/components/schemas/InputModality' - description: Supported input modalities - output_modalities: - type: array - items: - $ref: '#/components/schemas/OutputModality' - description: Supported output modalities - required: - - tokenizer - - instruct_type - - modality - - input_modalities - - output_modalities - example: - tokenizer: GPT - instruct_type: chatml - modality: text - endpoints: - type: array - items: - $ref: '#/components/schemas/PublicEndpoint' - description: List of available endpoints for this model - required: - - id - - name - - created - - description - - architecture - - endpoints - description: List of available endpoints for a model - example: - id: openai/gpt-4 - name: GPT-4 - created: 1692901234 - description: GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy. - architecture: - tokenizer: GPT - instruct_type: chatml - modality: text->text - input_modalities: - - text - output_modalities: - - text - endpoints: - - name: 'OpenAI: GPT-4' - model_name: GPT-4 - context_length: 8192 - pricing: - prompt: '0.00003' - completion: '0.00006' - request: '0' - image: '0' - provider_name: OpenAI - tag: openai - quantization: fp16 - max_completion_tokens: 4096 - max_prompt_tokens: 8192 - supported_parameters: - - temperature - - top_p - - max_tokens - - frequency_penalty - - presence_penalty - status: default - uptime_last_30m: 99.5 - supports_implicit_caching: true - ModelName: - type: string - ChatMessageContentItemText: - type: object - properties: - type: - type: string - const: text - text: - type: string - required: - - type - - text - ChatMessageContentItemImage: - type: object - properties: - type: - type: string - const: image_url - image_url: - type: object - properties: - url: - type: string - detail: - type: string - enum: - - auto - - low - - high - x-speakeasy-unknown-values: allow - required: - - url - required: - - type - - image_url - ChatMessageContentItemAudio: - type: object - properties: - type: - type: string - const: input_audio - input_audio: - type: object - properties: - data: - type: string - format: - type: string - enum: - - wav - - mp3 - - flac - - m4a - - ogg - - pcm16 - - pcm24 - x-speakeasy-unknown-values: allow - required: - - data - - format - required: - - type - - input_audio - ChatMessageContentItemVideo: - oneOf: - - type: object - properties: - type: - type: string - const: input_video - video_url: - $ref: '#/components/schemas/VideoURL' - required: - - type - - video_url + - $ref: '#/components/schemas/ResponseFormatJSONSchema' + - $ref: '#/components/schemas/ResponseFormatTextGrammar' - type: object properties: type: - type: string - const: video_url - video_url: - type: object - properties: - url: - type: string - required: - - url + type: string + const: python required: - type - - video_url - type: object - VideoURL: - type: object - properties: - url: - type: string - required: - - url - ChatMessageContentItemFile: - type: object - properties: - type: - type: string - const: file - file: + type: object + - type: 'null' + required: + - prompt + CompletionChoice: + type: object + properties: + text: + type: string + index: + type: number + logprobs: + anyOf: + - $ref: '#/components/schemas/CompletionLogprobs' + - type: 'null' + finish_reason: + $ref: '#/components/schemas/CompletionFinishReason' + native_finish_reason: + type: string + reasoning: + anyOf: + - type: string + - type: 'null' + required: + - text + - index + - logprobs + - finish_reason + CompletionResponse: + type: object + properties: + id: + type: string + object: + type: string + const: text_completion + created: + type: number + model: + type: string + provider: + type: string + system_fingerprint: + type: string + choices: + type: array + items: + $ref: '#/components/schemas/CompletionChoice' + usage: + $ref: '#/components/schemas/CompletionUsage' + required: + - id + - object + - created + - model + - choices + additionalProperties: false + parameters: {} + securitySchemes: + apiKey: + type: http + scheme: bearer + description: API key as bearer token in Authorization header + bearer: + type: http + scheme: bearer + description: API key as bearer token in Authorization header +paths: + /responses: + post: + x-speakeasy-name-override: send + x-speakeasy-stream-request-field: stream + tags: + - beta.responses + summary: Create a response + description: Creates a streaming or non-streaming response using OpenResponses API format + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OpenResponsesRequest' + required: true + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/OpenResponsesNonStreamingResponse' + text/event-stream: + schema: + type: object + properties: + data: + $ref: '#/components/schemas/OpenResponsesStreamEvent' + required: + - data + x-speakeasy-sse-sentinel: '[DONE]' + '400': + description: Bad Request - Invalid request parameters or malformed input + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestResponse' + '401': + description: Unauthorized - Authentication required or invalid credentials + content: + application/json: + schema: + $ref: '#/components/schemas/UnauthorizedResponse' + '402': + description: Payment Required - Insufficient credits or quota to complete request + content: + application/json: + schema: + $ref: '#/components/schemas/PaymentRequiredResponse' + '404': + description: Not Found - Resource does not exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundResponse' + '408': + description: Request Timeout - Operation exceeded time limit + content: + application/json: + schema: + $ref: '#/components/schemas/RequestTimeoutResponse' + '413': + description: Payload Too Large - Request payload exceeds size limits + content: + application/json: + schema: + $ref: '#/components/schemas/PayloadTooLargeResponse' + '422': + description: Unprocessable Entity - Semantic validation failure + content: + application/json: + schema: + $ref: '#/components/schemas/UnprocessableEntityResponse' + '429': + description: Too Many Requests - Rate limit exceeded + content: + application/json: + schema: + $ref: '#/components/schemas/TooManyRequestsResponse' + '500': + description: Internal Server Error - Unexpected server error + content: + application/json: + schema: + $ref: '#/components/schemas/InternalServerResponse' + '502': + description: Bad Gateway - Provider/upstream API failure + content: + application/json: + schema: + $ref: '#/components/schemas/BadGatewayResponse' + '503': + description: Service Unavailable - Service temporarily unavailable + content: + application/json: + schema: + $ref: '#/components/schemas/ServiceUnavailableResponse' + '524': + description: Infrastructure Timeout - Request timed out at our edge network + content: + application/json: + schema: + $ref: '#/components/schemas/EdgeNetworkTimeoutResponse' + '529': + description: Provider Overloaded - Provider is temporarily overloaded + content: + application/json: + schema: + $ref: '#/components/schemas/ProviderOverloadedResponse' + operationId: createResponses + /activity: + get: + tags: + - Analytics + operationId: getUserActivity + summary: Get user activity grouped by endpoint + description: Returns user activity data grouped by endpoint for the last 30 (completed) UTC days + parameters: + - schema: + type: string + description: Filter by a single UTC date in the last 30 days (YYYY-MM-DD format). + example: '2025-08-24' + required: false + description: Filter by a single UTC date in the last 30 days (YYYY-MM-DD format). + name: date + in: query + responses: + '200': + description: Returns user activity data grouped by endpoint + content: + application/json: + schema: + type: object + properties: + data: + type: array + items: + $ref: '#/components/schemas/ActivityItem' + description: List of activity items + required: + - data + example: + data: + - date: '2025-08-24' + model: openai/gpt-4.1 + model_permaslug: openai/gpt-4.1-2025-04-14 + endpoint_id: 550e8400-e29b-41d4-a716-446655440000 + provider_name: OpenAI + usage: 0.015 + byok_usage_inference: 0.012 + requests: 5 + prompt_tokens: 50 + completion_tokens: 125 + reasoning_tokens: 25 + '400': + description: Bad Request - Invalid date format or date range + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestResponse' + '401': + description: Unauthorized - Authentication required or invalid credentials + content: + application/json: + schema: + $ref: '#/components/schemas/UnauthorizedResponse' + '403': + description: Forbidden - Only provisioning keys can fetch activity + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenResponse' + '500': + description: Internal Server Error - Unexpected server error + content: + application/json: + schema: + $ref: '#/components/schemas/InternalServerResponse' + /credits: + get: + x-speakeasy-name-override: getCredits + tags: + - Credits + summary: Get remaining credits + operationId: getCredits + description: Get total credits purchased and used for the authenticated user + responses: + '200': + description: Returns the total credits purchased and used + content: + application/json: + schema: + type: object + properties: + data: type: object properties: - file_data: - type: string - file_id: - type: string - filename: - type: string + total_credits: + type: number + description: Total credits purchased + example: 100.5 + total_usage: + type: number + description: Total credits used + example: 25.75 required: - - file_data - required: - - type - - file - ChatMessageContentItem: - oneOf: - - $ref: '#/components/schemas/ChatMessageContentItemText' - - $ref: '#/components/schemas/ChatMessageContentItemImage' - - $ref: '#/components/schemas/ChatMessageContentItemAudio' - - $ref: '#/components/schemas/ChatMessageContentItemVideo' - - $ref: '#/components/schemas/ChatMessageContentItemFile' - type: object - discriminator: - propertyName: type - mapping: - text: '#/components/schemas/ChatMessageContentItemText' - image_url: '#/components/schemas/ChatMessageContentItemImage' - input_audio: '#/components/schemas/ChatMessageContentItemAudio' - input_video: '#/components/schemas/ChatMessageContentItemVideo' - video_url: '#/components/schemas/ChatMessageContentItemVideo' - file: '#/components/schemas/ChatMessageContentItemFile' - ChatMessageToolCall: - type: object - properties: - id: - type: string - type: - type: string - const: function - function: + - total_credits + - total_usage + example: + total_credits: 100.5 + total_usage: 25.75 + required: + - data + description: Total credits purchased and used + example: + data: + total_credits: 100.5 + total_usage: 25.75 + '401': + description: Unauthorized - Authentication required or invalid credentials + content: + application/json: + schema: + $ref: '#/components/schemas/UnauthorizedResponse' + '403': + description: Forbidden - Only provisioning keys can fetch credits + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenResponse' + '500': + description: Internal Server Error - Unexpected server error + content: + application/json: + schema: + $ref: '#/components/schemas/InternalServerResponse' + /credits/coinbase: + post: + security: + - bearer: [] + x-speakeasy-name-override: createCoinbaseCharge + tags: + - Credits + summary: Create a Coinbase charge for crypto payment + operationId: createCoinbaseCharge + description: Create a Coinbase charge for crypto payment + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateChargeRequest' + required: true + responses: + '200': + description: Returns the calldata to fulfill the transaction + content: + application/json: + schema: + type: object + properties: + data: type: object properties: - name: - type: string - arguments: - type: string + id: + type: string + created_at: + type: string + expires_at: + type: string + web3_data: + type: object + properties: + transfer_intent: + type: object + properties: + call_data: + type: object + properties: + deadline: + type: string + fee_amount: + type: string + id: + type: string + operator: + type: string + prefix: + type: string + recipient: + type: string + recipient_amount: + type: string + recipient_currency: + type: string + refund_destination: + type: string + signature: + type: string + required: + - deadline + - fee_amount + - id + - operator + - prefix + - recipient + - recipient_amount + - recipient_currency + - refund_destination + - signature + metadata: + type: object + properties: + chain_id: + type: number + contract_address: + type: string + sender: + type: string + required: + - chain_id + - contract_address + - sender + required: + - call_data + - metadata + required: + - transfer_intent required: - - name - - arguments - required: - - id - - type - - function - ChatMessageTokenLogprob: - type: object - properties: - token: - type: string - logprob: - type: number - bytes: - anyOf: - - type: array - items: - type: number - - type: 'null' - top_logprobs: - type: array - items: + - id + - created_at + - expires_at + - web3_data + required: + - data + '400': + description: Bad Request - Invalid credit amount or request body + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestResponse' + '401': + description: Unauthorized - Authentication required or invalid credentials + content: + application/json: + schema: + $ref: '#/components/schemas/UnauthorizedResponse' + '429': + description: Too Many Requests - Rate limit exceeded + content: + application/json: + schema: + $ref: '#/components/schemas/TooManyRequestsResponse' + '500': + description: Internal Server Error - Unexpected server error + content: + application/json: + schema: + $ref: '#/components/schemas/InternalServerResponse' + /embeddings: + post: + x-speakeasy-name-override: generate + tags: + - Embeddings + summary: Submit an embedding request + description: Submits an embedding request to the embeddings router + requestBody: + content: + application/json: + schema: + type: object + properties: + input: + anyOf: + - type: string + - type: array + items: + type: string + - type: array + items: + type: number + - type: array + items: + type: array + items: + type: number + - type: array + items: type: object properties: - token: - type: string - logprob: - type: number - bytes: - anyOf: - - type: array - items: - type: number - - type: 'null' + content: + type: array + items: + oneOf: + - type: object + properties: + type: + type: string + enum: + - text + text: + type: string + required: + - type + - text + - type: object + properties: + type: + type: string + enum: + - image_url + image_url: + type: object + properties: + url: + type: string + required: + - url + required: + - type + - image_url required: - - token - - logprob - - bytes - required: - - token - - logprob - - bytes - - top_logprobs - ChatMessageTokenLogprobs: - type: object - properties: - content: - anyOf: - - type: array - items: - $ref: '#/components/schemas/ChatMessageTokenLogprob' - - type: 'null' - refusal: - anyOf: - - type: array - items: - $ref: '#/components/schemas/ChatMessageTokenLogprob' - - type: 'null' - required: - - content - - refusal - ChatGenerationTokenUsage: - type: object - properties: - completion_tokens: - type: number - prompt_tokens: - type: number - total_tokens: - type: number - completion_tokens_details: - anyOf: - - type: object - properties: - reasoning_tokens: - anyOf: - - type: number - - type: 'null' - audio_tokens: - anyOf: - - type: number - - type: 'null' - accepted_prediction_tokens: - anyOf: - - type: number - - type: 'null' - rejected_prediction_tokens: - anyOf: - - type: number - - type: 'null' - - type: 'null' - prompt_tokens_details: - anyOf: - - type: object - properties: - cached_tokens: - type: number - audio_tokens: - type: number - video_tokens: - type: number - - type: 'null' - required: - - completion_tokens - - prompt_tokens - - total_tokens - ChatCompletionFinishReason: - anyOf: - - type: string + - content + model: + type: string + encoding_format: + type: string enum: - - tool_calls - - stop - - length - - content_filter - - error - x-speakeasy-unknown-values: allow - - type: 'null' - JSONSchemaConfig: - type: object - properties: - name: - type: string - maxLength: 64 - description: - type: string - schema: - type: object - propertyNames: - type: string - additionalProperties: {} - strict: - anyOf: - - type: boolean - - type: 'null' - required: - - name - ResponseFormatJSONSchema: - type: object - properties: - type: - type: string - const: json_schema - json_schema: - $ref: '#/components/schemas/JSONSchemaConfig' - required: - - type - - json_schema - ResponseFormatTextGrammar: - type: object - properties: - type: - type: string - const: grammar - grammar: - type: string - required: - - type - - grammar - SystemMessage: - type: object - properties: - role: - type: string - const: system - content: - anyOf: - - type: string - - type: array - items: - $ref: '#/components/schemas/ChatMessageContentItemText' - name: - type: string - required: - - role - - content - UserMessage: - type: object - properties: - role: - type: string - const: user - content: - anyOf: - - type: string - - type: array - items: - $ref: '#/components/schemas/ChatMessageContentItem' - name: - type: string - required: - - role - - content - AssistantMessage: - type: object - properties: - role: - type: string - const: assistant - content: - anyOf: - - anyOf: - - type: string - - type: array - items: - $ref: '#/components/schemas/ChatMessageContentItem' - - type: 'null' - name: + - float + - base64 + dimensions: + type: integer + minimum: 0 + exclusiveMinimum: true + user: + type: string + provider: + type: object + properties: + allow_fallbacks: + type: boolean + nullable: true + description: > + Whether to allow backup providers to serve requests + + - true: (default) when the primary provider (or your custom providers in "order") is + unavailable, use the next best provider. + + - false: use only the primary/custom provider, and return the upstream error if it's + unavailable. + require_parameters: + type: boolean + nullable: true + description: >- + Whether to filter providers to only those that support the parameters you've provided. If this + setting is omitted or set to false, then providers will receive only the parameters they + support, and ignore the rest. + data_collection: + $ref: '#/components/schemas/DataCollection' + zdr: + type: boolean + nullable: true + description: >- + Whether to restrict routing to only ZDR (Zero Data Retention) endpoints. When true, only + endpoints that do not retain prompts will be used. + example: true + enforce_distillable_text: + type: boolean + nullable: true + description: >- + Whether to restrict routing to only models that allow text distillation. When true, only models + where the author has allowed distillation will be used. + example: true + order: + type: array + nullable: true + items: + anyOf: + - $ref: '#/components/schemas/ProviderName' + - type: string + description: >- + An ordered list of provider slugs. The router will attempt to use the first provider in the + subset of this list that supports your requested model, and fall back to the next if it is + unavailable. If no providers are available, the request will fail with an error message. + only: + type: array + nullable: true + items: + anyOf: + - $ref: '#/components/schemas/ProviderName' + - type: string + description: >- + List of provider slugs to allow. If provided, this list is merged with your account-wide allowed + provider settings for this request. + ignore: + type: array + nullable: true + items: + anyOf: + - $ref: '#/components/schemas/ProviderName' + - type: string + description: >- + List of provider slugs to ignore. If provided, this list is merged with your account-wide + ignored provider settings for this request. + quantizations: + type: array + nullable: true + items: + $ref: '#/components/schemas/Quantization' + description: A list of quantization levels to filter the provider by. + sort: + $ref: '#/components/schemas/ProviderSort' + max_price: + type: object + properties: + prompt: + $ref: '#/components/schemas/BigNumberUnion' + completion: + $ref: '#/components/schemas/BigNumberUnion' + image: + $ref: '#/components/schemas/BigNumberUnion' + audio: + $ref: '#/components/schemas/BigNumberUnion' + request: + $ref: '#/components/schemas/BigNumberUnion' + additionalProperties: false + description: >- + The object specifying the maximum price you want to pay for this request. USD price per million + tokens, for prompt and completion. + input_type: + type: string + required: + - input + - model + required: true + responses: + '200': + description: Embedding response + content: + application/json: + schema: + type: object + properties: + id: + type: string + object: type: string - tool_calls: + enum: + - list + data: type: array items: - $ref: '#/components/schemas/ChatMessageToolCall' - refusal: - anyOf: - - type: string - - type: 'null' - reasoning: - anyOf: - - type: string - - type: 'null' - required: - - role - ToolResponseMessage: - type: object - properties: - role: - type: string - const: tool - content: - anyOf: - - type: string - - type: array - items: - $ref: '#/components/schemas/ChatMessageContentItem' - tool_call_id: + type: object + properties: + object: + type: string + enum: + - embedding + embedding: + anyOf: + - type: array + items: + type: number + - type: string + index: + type: number + required: + - object + - embedding + model: type: string - required: - - role - - content - - tool_call_id - Message: - oneOf: - - $ref: '#/components/schemas/SystemMessage' - - $ref: '#/components/schemas/UserMessage' - - type: object - properties: - role: + usage: + type: object + properties: + prompt_tokens: + type: number + total_tokens: + type: number + cost: + type: number + required: + - prompt_tokens + - total_tokens + required: + - object + - data + - model + text/event-stream: + schema: + type: string + description: Not used for embeddings - embeddings do not support streaming + x-speakeasy-sse-sentinel: '[DONE]' + '400': + description: Bad Request - Invalid request parameters or malformed input + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestResponse' + '401': + description: Unauthorized - Authentication required or invalid credentials + content: + application/json: + schema: + $ref: '#/components/schemas/UnauthorizedResponse' + '402': + description: Payment Required - Insufficient credits or quota to complete request + content: + application/json: + schema: + $ref: '#/components/schemas/PaymentRequiredResponse' + '404': + description: Not Found - Resource does not exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundResponse' + '429': + description: Too Many Requests - Rate limit exceeded + content: + application/json: + schema: + $ref: '#/components/schemas/TooManyRequestsResponse' + '500': + description: Internal Server Error - Unexpected server error + content: + application/json: + schema: + $ref: '#/components/schemas/InternalServerResponse' + '502': + description: Bad Gateway - Provider/upstream API failure + content: + application/json: + schema: + $ref: '#/components/schemas/BadGatewayResponse' + '503': + description: Service Unavailable - Service temporarily unavailable + content: + application/json: + schema: + $ref: '#/components/schemas/ServiceUnavailableResponse' + '524': + description: Cloudflare Timeout - Provider request timed out at CDN edge + content: + application/json: + schema: + $ref: '#/components/schemas/EdgeNetworkTimeoutResponse' + '529': + description: Provider Overloaded - Provider is temporarily overloaded + content: + application/json: + schema: + $ref: '#/components/schemas/ProviderOverloadedResponse' + operationId: createEmbeddings + /embeddings/models: + get: + tags: + - Embeddings + x-speakeasy-name-override: listModels + summary: List all embeddings models + description: Returns a list of all available embeddings models and their properties + responses: + '200': + description: Returns a list of embeddings models + content: + application/json: + schema: + $ref: '#/components/schemas/ModelsListResponse' + '400': + description: Bad Request - Invalid request parameters + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestResponse' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/InternalServerResponse' + operationId: listEmbeddingsModels + /generation: + get: + tags: + - Generations + summary: Get request & usage metadata for a generation + parameters: + - schema: + type: string + minLength: 1 + required: true + name: id + in: query + responses: + '200': + description: Returns the request metadata for this generation + content: + application/json: + schema: + type: object + properties: + data: + type: object + properties: + id: + type: string + description: Unique identifier for the generation + example: gen-3bhGkxlo4XFrqiabUM7NDtwDzWwG + upstream_id: + type: string + nullable: true + description: Upstream provider's identifier for this generation + example: chatcmpl-791bcf62-080e-4568-87d0-94c72e3b4946 + total_cost: + type: number + description: Total cost of the generation in USD + example: 0.0015 + cache_discount: + type: number + nullable: true + description: Discount applied due to caching + example: 0.0002 + upstream_inference_cost: + type: number + nullable: true + description: Cost charged by the upstream provider + example: 0.0012 + created_at: + type: string + description: ISO 8601 timestamp of when the generation was created + example: '2024-07-15T23:33:19.433273+00:00' + model: + type: string + description: Model used for the generation + example: sao10k/l3-stheno-8b + app_id: + type: number + nullable: true + description: ID of the app that made the request + example: 12345 + streamed: + type: boolean + nullable: true + description: Whether the response was streamed + example: true + cancelled: + type: boolean + nullable: true + description: Whether the generation was cancelled + example: false + provider_name: + type: string + nullable: true + description: Name of the provider that served the request + example: Infermatic + latency: + type: number + nullable: true + description: Total latency in milliseconds + example: 1250 + moderation_latency: + type: number + nullable: true + description: Moderation latency in milliseconds + example: 50 + generation_time: + type: number + nullable: true + description: Time taken for generation in milliseconds + example: 1200 + finish_reason: + type: string + nullable: true + description: Reason the generation finished + example: stop + tokens_prompt: + type: number + nullable: true + description: Number of tokens in the prompt + example: 10 + tokens_completion: + type: number + nullable: true + description: Number of tokens in the completion + example: 25 + native_tokens_prompt: + type: number + nullable: true + description: Native prompt tokens as reported by provider + example: 10 + native_tokens_completion: + type: number + nullable: true + description: Native completion tokens as reported by provider + example: 25 + native_tokens_completion_images: + type: number + nullable: true + description: Native completion image tokens as reported by provider + example: 0 + native_tokens_reasoning: + type: number + nullable: true + description: Native reasoning tokens as reported by provider + example: 5 + native_tokens_cached: + type: number + nullable: true + description: Native cached tokens as reported by provider + example: 3 + num_media_prompt: + type: number + nullable: true + description: Number of media items in the prompt + example: 1 + num_input_audio_prompt: + type: number + nullable: true + description: Number of audio inputs in the prompt + example: 0 + num_media_completion: + type: number + nullable: true + description: Number of media items in the completion + example: 0 + num_search_results: + type: number + nullable: true + description: Number of search results included + example: 5 + origin: type: string - const: developer - content: - anyOf: - - type: string - - type: array - items: - $ref: '#/components/schemas/ChatMessageContentItemText' - name: + description: Origin URL of the request + example: https://openrouter.ai/ + usage: + type: number + description: Usage amount in USD + example: 0.0015 + is_byok: + type: boolean + description: Whether this used bring-your-own-key + example: false + native_finish_reason: type: string - required: - - role - - content - - $ref: '#/components/schemas/AssistantMessage' - - $ref: '#/components/schemas/ToolResponseMessage' - type: object - ToolDefinitionJson: - type: object - properties: - type: - type: string - const: function - function: - type: object - properties: - name: - type: string - maxLength: 64 - description: - type: string - parameters: - type: object - propertyNames: - type: string - additionalProperties: {} - strict: - anyOf: - - type: boolean - - type: 'null' + nullable: true + description: Native finish reason as reported by provider + example: stop + external_user: + type: string + nullable: true + description: External user identifier + example: user-123 + api_type: + type: string + nullable: true + enum: + - completions + - embeddings + description: Type of API used for the generation required: - - name - required: - - type - - function - NamedToolChoice: - type: object - properties: - type: - type: string - const: function - function: + - id + - upstream_id + - total_cost + - cache_discount + - upstream_inference_cost + - created_at + - model + - app_id + - streamed + - cancelled + - provider_name + - latency + - moderation_latency + - generation_time + - finish_reason + - tokens_prompt + - tokens_completion + - native_tokens_prompt + - native_tokens_completion + - native_tokens_completion_images + - native_tokens_reasoning + - native_tokens_cached + - num_media_prompt + - num_input_audio_prompt + - num_media_completion + - num_search_results + - origin + - usage + - is_byok + - native_finish_reason + - external_user + - api_type + description: Generation data + required: + - data + description: Generation response + '401': + description: Unauthorized - Authentication required or invalid credentials + content: + application/json: + schema: + $ref: '#/components/schemas/UnauthorizedResponse' + '402': + description: Payment Required - Insufficient credits or quota to complete request + content: + application/json: + schema: + $ref: '#/components/schemas/PaymentRequiredResponse' + '404': + description: Not Found - Generation not found + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundResponse' + '429': + description: Too Many Requests - Rate limit exceeded + content: + application/json: + schema: + $ref: '#/components/schemas/TooManyRequestsResponse' + '500': + description: Internal Server Error - Unexpected server error + content: + application/json: + schema: + $ref: '#/components/schemas/InternalServerResponse' + '502': + description: Bad Gateway - Provider/upstream API failure + content: + application/json: + schema: + $ref: '#/components/schemas/BadGatewayResponse' + '524': + description: Infrastructure Timeout - Request timed out at our edge network + content: + application/json: + schema: + $ref: '#/components/schemas/EdgeNetworkTimeoutResponse' + '529': + description: Provider Overloaded - Provider is temporarily overloaded + content: + application/json: + schema: + $ref: '#/components/schemas/ProviderOverloadedResponse' + operationId: getGeneration + /models/count: + get: + tags: + - Models + x-speakeasy-name-override: count + summary: Get total count of available models + responses: + '200': + description: Returns the total count of available models + content: + application/json: + schema: + $ref: '#/components/schemas/ModelsCountResponse' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/InternalServerResponse' + operationId: listModelsCount + /models: + get: + tags: + - Models + x-speakeasy-name-override: list + summary: List all models and their properties + parameters: + - schema: + type: string + required: false + name: category + in: query + - schema: + type: string + required: false + name: supported_parameters + in: query + - schema: + type: string + required: false + name: use_rss + in: query + - schema: + type: string + required: false + name: use_rss_chat_links + in: query + responses: + '200': + description: Returns a list of models or RSS feed + content: + application/json: + schema: + $ref: '#/components/schemas/ModelsListResponse' + application/rss+xml: + schema: + type: string + '400': + description: Bad Request - Invalid request parameters + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestResponse' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/InternalServerResponse' + operationId: getModels + /models/user: + get: + tags: + - Models + x-speakeasy-name-override: listForUser + summary: List models filtered by user provider preferences + security: + - bearer: [] + responses: + '200': + description: Returns a list of models filtered by user provider preferences + content: + application/json: + schema: + $ref: '#/components/schemas/ModelsListResponse' + '401': + description: Unauthorized - Missing or invalid authentication + content: + application/json: + schema: + $ref: '#/components/schemas/UnauthorizedResponse' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/InternalServerResponse' + operationId: listModelsUser + /models/{author}/{slug}/endpoints: + get: + tags: + - Endpoints + operationId: listEndpoints + x-speakeasy-name-override: list + summary: List all endpoints for a model + parameters: + - schema: + type: string + required: true + name: author + in: path + - schema: + type: string + required: true + name: slug + in: path + responses: + '200': + description: Returns a list of endpoints + content: + application/json: + schema: + type: object + properties: + data: + $ref: '#/components/schemas/ListEndpointsResponse' + required: + - data + '404': + description: Not Found - Model does not exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundResponse' + '500': + description: Internal Server Error - Unexpected server error + content: + application/json: + schema: + $ref: '#/components/schemas/InternalServerResponse' + /endpoints/zdr: + get: + tags: + - Endpoints + x-speakeasy-name-override: listZdrEndpoints + summary: Preview the impact of ZDR on the available endpoints + responses: + '200': + description: Returns a list of endpoints + content: + application/json: + schema: + type: object + properties: + data: + type: array + items: + $ref: '#/components/schemas/PublicEndpoint' + required: + - data + '500': + description: Internal Server Error - Unexpected server error + content: + application/json: + schema: + $ref: '#/components/schemas/InternalServerResponse' + operationId: listEndpointsZdr + /parameters/{author}/{slug}: + get: + tags: + - Parameters + summary: Get a model's supported parameters and data about which are most popular + security: + - bearer: [] + parameters: + - schema: + type: string + required: true + name: author + in: path + - schema: + type: string + required: true + name: slug + in: path + - schema: + type: string + enum: + - AI21 + - AionLabs + - Alibaba + - Amazon Bedrock + - Amazon Nova + - Anthropic + - Arcee AI + - AtlasCloud + - Avian + - Azure + - BaseTen + - BytePlus + - Black Forest Labs + - Cerebras + - Chutes + - Cirrascale + - Clarifai + - Cloudflare + - Cohere + - Crusoe + - DeepInfra + - DeepSeek + - Featherless + - Fireworks + - Friendli + - GMICloud + - GoPomelo + - Google + - Google AI Studio + - Groq + - Hyperbolic + - Inception + - InferenceNet + - Infermatic + - Inflection + - Liquid + - Mancer 2 + - Minimax + - ModelRun + - Mistral + - Modular + - Moonshot AI + - Morph + - NCompass + - Nebius + - NextBit + - Novita + - Nvidia + - OpenAI + - OpenInference + - Parasail + - Perplexity + - Phala + - Relace + - SambaNova + - SiliconFlow + - Stealth + - StreamLake + - Switchpoint + - Targon + - Together + - Venice + - WandB + - xAI + - Z.AI + - FakeProvider + required: false + name: provider + in: query + responses: + '200': + description: Returns the parameters for the specified model + content: + application/json: + schema: + type: object + properties: + data: type: object properties: - name: - type: string + model: + type: string + description: Model identifier + example: openai/gpt-4 + supported_parameters: + type: array + items: + type: string + enum: + - temperature + - top_p + - top_k + - min_p + - top_a + - frequency_penalty + - presence_penalty + - repetition_penalty + - max_tokens + - logit_bias + - logprobs + - top_logprobs + - seed + - response_format + - structured_outputs + - stop + - tools + - tool_choice + - parallel_tool_calls + - include_reasoning + - reasoning + - web_search_options + - verbosity + description: List of parameters supported by this model + example: + - temperature + - top_p + - max_tokens required: - - name - required: - - type - - function - ToolChoiceOption: - anyOf: - - type: string - const: none - - type: string - const: auto - - type: string - const: required - - $ref: '#/components/schemas/NamedToolChoice' - ChatStreamOptions: - type: object - properties: - include_usage: - type: boolean - ChatGenerationParams: - type: object - properties: - messages: - minItems: 1 + - model + - supported_parameters + example: + model: openai/gpt-4 + supported_parameters: + - temperature + - top_p + - max_tokens + description: Parameter analytics data + required: + - data + example: + data: + model: openai/gpt-4 + supported_parameters: + - temperature + - top_p + - max_tokens + '401': + description: Unauthorized - Authentication required or invalid credentials + content: + application/json: + schema: + $ref: '#/components/schemas/UnauthorizedResponse' + '404': + description: Not Found - Model or provider does not exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundResponse' + '500': + description: Internal Server Error - Unexpected server error + content: + application/json: + schema: + $ref: '#/components/schemas/InternalServerResponse' + operationId: getParameters + /providers: + get: + tags: + - Providers + x-speakeasy-name-override: list + summary: List all providers + operationId: listProviders + responses: + '200': + description: Returns a list of providers + content: + application/json: + schema: + type: object + properties: + data: type: array items: - $ref: '#/components/schemas/Message' - model: - $ref: '#/components/schemas/ModelName' - models: + type: object + properties: + name: + type: string + description: Display name of the provider + example: OpenAI + slug: + type: string + description: URL-friendly identifier for the provider + example: openai + privacy_policy_url: + type: string + nullable: true + description: URL to the provider's privacy policy + example: https://openai.com/privacy + terms_of_service_url: + type: string + nullable: true + description: URL to the provider's terms of service + example: https://openai.com/terms + status_page_url: + type: string + nullable: true + description: URL to the provider's status page + example: https://status.openai.com + required: + - name + - slug + - privacy_policy_url + example: + name: OpenAI + slug: openai + privacy_policy_url: https://openai.com/privacy + terms_of_service_url: https://openai.com/terms + status_page_url: https://status.openai.com + required: + - data + '500': + description: Internal Server Error - Unexpected server error + content: + application/json: + schema: + $ref: '#/components/schemas/InternalServerResponse' + /keys: + get: + operationId: list + x-speakeasy-name-override: list + tags: + - API Keys + summary: List API keys + parameters: + - schema: + type: string + description: Whether to include disabled API keys in the response + example: 'false' + required: false + description: Whether to include disabled API keys in the response + name: include_disabled + in: query + - schema: + type: string + description: Number of API keys to skip for pagination + example: '0' + required: false + description: Number of API keys to skip for pagination + name: offset + in: query + responses: + '200': + description: List of API keys + content: + application/json: + schema: + type: object + properties: + data: type: array items: - $ref: '#/components/schemas/ModelName' - frequency_penalty: - anyOf: - - type: number - minimum: -2 - maximum: 2 - - type: 'null' - logit_bias: - anyOf: - - type: object - propertyNames: - type: string - additionalProperties: - type: number - - type: 'null' - logprobs: - anyOf: - - type: boolean - - type: 'null' - top_logprobs: - anyOf: - - type: number - minimum: 0 - maximum: 20 - - type: 'null' - max_completion_tokens: - anyOf: - - type: number - minimum: 1 - - type: 'null' - max_tokens: - anyOf: - - type: number - minimum: 1 - - type: 'null' - metadata: + type: object + properties: + hash: + type: string + description: Unique hash identifier for the API key + example: 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 + name: + type: string + description: Name of the API key + example: My Production Key + label: + type: string + description: Human-readable label for the API key + example: Production API Key + disabled: + type: boolean + description: Whether the API key is disabled + example: false + limit: + type: number + nullable: true + description: Spending limit for the API key in USD + example: 100 + limit_remaining: + type: number + nullable: true + description: Remaining spending limit in USD + example: 74.5 + limit_reset: + type: string + nullable: true + description: Type of limit reset for the API key + example: monthly + include_byok_in_limit: + type: boolean + description: Whether to include external BYOK usage in the credit limit + example: false + usage: + type: number + description: Total OpenRouter credit usage (in USD) for the API key + example: 25.5 + usage_daily: + type: number + description: OpenRouter credit usage (in USD) for the current UTC day + example: 25.5 + usage_weekly: + type: number + description: OpenRouter credit usage (in USD) for the current UTC week (Monday-Sunday) + example: 25.5 + usage_monthly: + type: number + description: OpenRouter credit usage (in USD) for the current UTC month + example: 25.5 + byok_usage: + type: number + description: Total external BYOK usage (in USD) for the API key + example: 17.38 + byok_usage_daily: + type: number + description: External BYOK usage (in USD) for the current UTC day + example: 17.38 + byok_usage_weekly: + type: number + description: External BYOK usage (in USD) for the current UTC week (Monday-Sunday) + example: 17.38 + byok_usage_monthly: + type: number + description: External BYOK usage (in USD) for current UTC month + example: 17.38 + created_at: + type: string + description: ISO 8601 timestamp of when the API key was created + example: '2025-08-24T10:30:00Z' + updated_at: + type: string + nullable: true + description: ISO 8601 timestamp of when the API key was last updated + example: '2025-08-24T15:45:00Z' + expires_at: + type: string + nullable: true + format: date-time + description: ISO 8601 UTC timestamp when the API key expires, or null if no expiration + example: '2027-12-31T23:59:59Z' + required: + - hash + - name + - label + - disabled + - limit + - limit_remaining + - limit_reset + - include_byok_in_limit + - usage + - usage_daily + - usage_weekly + - usage_monthly + - byok_usage + - byok_usage_daily + - byok_usage_weekly + - byok_usage_monthly + - created_at + - updated_at + example: + hash: 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 + name: My Production Key + label: Production API Key + disabled: false + limit: 100 + limit_remaining: 74.5 + limit_reset: monthly + include_byok_in_limit: false + usage: 25.5 + usage_daily: 25.5 + usage_weekly: 25.5 + usage_monthly: 25.5 + byok_usage: 17.38 + byok_usage_daily: 17.38 + byok_usage_weekly: 17.38 + byok_usage_monthly: 17.38 + created_at: '2025-08-24T10:30:00Z' + updated_at: '2025-08-24T15:45:00Z' + expires_at: '2027-12-31T23:59:59Z' + description: List of API keys + required: + - data + example: + data: + - hash: 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 + name: My Production Key + label: Production API Key + disabled: false + limit: 100 + limit_remaining: 74.5 + limit_reset: monthly + include_byok_in_limit: false + usage: 25.5 + usage_daily: 25.5 + usage_weekly: 25.5 + usage_monthly: 25.5 + byok_usage: 17.38 + byok_usage_daily: 17.38 + byok_usage_weekly: 17.38 + byok_usage_monthly: 17.38 + created_at: '2025-08-24T10:30:00Z' + updated_at: '2025-08-24T15:45:00Z' + expires_at: '2027-12-31T23:59:59Z' + '401': + description: Unauthorized - Missing or invalid authentication + content: + application/json: + schema: + $ref: '#/components/schemas/UnauthorizedResponse' + '429': + description: Too Many Requests - Rate limit exceeded + content: + application/json: + schema: + $ref: '#/components/schemas/TooManyRequestsResponse' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/InternalServerResponse' + post: + x-speakeasy-name-override: create + tags: + - API Keys + summary: Create a new API key + requestBody: + content: + application/json: + schema: + type: object + properties: + name: + type: string + minLength: 1 + description: Name for the new API key + example: My New API Key + limit: + type: number + nullable: true + description: Optional spending limit for the API key in USD + example: 50 + limit_reset: + type: string + nullable: true + enum: + - daily + - weekly + - monthly + description: >- + Type of limit reset for the API key (daily, weekly, monthly, or null for no reset). Resets happen + automatically at midnight UTC, and weeks are Monday through Sunday. + example: monthly + include_byok_in_limit: + type: boolean + description: Whether to include BYOK usage in the limit + example: true + expires_at: + type: string + nullable: true + format: date-time + description: >- + Optional ISO 8601 UTC timestamp when the API key should expire. Must be UTC, other timezones will be + rejected + example: '2027-12-31T23:59:59Z' + required: + - name + example: + name: My New API Key + limit: 50 + limit_reset: monthly + include_byok_in_limit: true + expires_at: '2027-12-31T23:59:59Z' + required: true + responses: + '201': + description: API key created successfully + content: + application/json: + schema: + type: object + properties: + data: type: object - propertyNames: + properties: + hash: type: string - additionalProperties: + description: Unique hash identifier for the API key + example: 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 + name: type: string - presence_penalty: - anyOf: - - type: number - minimum: -2 - maximum: 2 - - type: 'null' - reasoning: + description: Name of the API key + example: My Production Key + label: + type: string + description: Human-readable label for the API key + example: Production API Key + disabled: + type: boolean + description: Whether the API key is disabled + example: false + limit: + type: number + nullable: true + description: Spending limit for the API key in USD + example: 100 + limit_remaining: + type: number + nullable: true + description: Remaining spending limit in USD + example: 74.5 + limit_reset: + type: string + nullable: true + description: Type of limit reset for the API key + example: monthly + include_byok_in_limit: + type: boolean + description: Whether to include external BYOK usage in the credit limit + example: false + usage: + type: number + description: Total OpenRouter credit usage (in USD) for the API key + example: 25.5 + usage_daily: + type: number + description: OpenRouter credit usage (in USD) for the current UTC day + example: 25.5 + usage_weekly: + type: number + description: OpenRouter credit usage (in USD) for the current UTC week (Monday-Sunday) + example: 25.5 + usage_monthly: + type: number + description: OpenRouter credit usage (in USD) for the current UTC month + example: 25.5 + byok_usage: + type: number + description: Total external BYOK usage (in USD) for the API key + example: 17.38 + byok_usage_daily: + type: number + description: External BYOK usage (in USD) for the current UTC day + example: 17.38 + byok_usage_weekly: + type: number + description: External BYOK usage (in USD) for the current UTC week (Monday-Sunday) + example: 17.38 + byok_usage_monthly: + type: number + description: External BYOK usage (in USD) for current UTC month + example: 17.38 + created_at: + type: string + description: ISO 8601 timestamp of when the API key was created + example: '2025-08-24T10:30:00Z' + updated_at: + type: string + nullable: true + description: ISO 8601 timestamp of when the API key was last updated + example: '2025-08-24T15:45:00Z' + expires_at: + type: string + nullable: true + format: date-time + description: ISO 8601 UTC timestamp when the API key expires, or null if no expiration + example: '2027-12-31T23:59:59Z' + required: + - hash + - name + - label + - disabled + - limit + - limit_remaining + - limit_reset + - include_byok_in_limit + - usage + - usage_daily + - usage_weekly + - usage_monthly + - byok_usage + - byok_usage_daily + - byok_usage_weekly + - byok_usage_monthly + - created_at + - updated_at + example: + hash: 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 + name: My Production Key + label: Production API Key + disabled: false + limit: 100 + limit_remaining: 74.5 + limit_reset: monthly + include_byok_in_limit: false + usage: 25.5 + usage_daily: 25.5 + usage_weekly: 25.5 + usage_monthly: 25.5 + byok_usage: 17.38 + byok_usage_daily: 17.38 + byok_usage_weekly: 17.38 + byok_usage_monthly: 17.38 + created_at: '2025-08-24T10:30:00Z' + updated_at: '2025-08-24T15:45:00Z' + expires_at: '2027-12-31T23:59:59Z' + description: The created API key information + key: + type: string + description: The actual API key string (only shown once) + example: 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 + required: + - data + - key + example: + data: + hash: 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 + name: My New API Key + label: My New API Key + disabled: false + limit: 50 + limit_remaining: 50 + limit_reset: monthly + include_byok_in_limit: true + usage: 0 + usage_daily: 0 + usage_weekly: 0 + usage_monthly: 0 + byok_usage: 0 + byok_usage_daily: 0 + byok_usage_weekly: 0 + byok_usage_monthly: 0 + created_at: '2025-08-24T10:30:00Z' + updated_at: null + expires_at: '2027-12-31T23:59:59Z' + key: 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 + '400': + description: Bad Request - Invalid request parameters + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestResponse' + '401': + description: Unauthorized - Missing or invalid authentication + content: + application/json: + schema: + $ref: '#/components/schemas/UnauthorizedResponse' + '429': + description: Too Many Requests - Rate limit exceeded + content: + application/json: + schema: + $ref: '#/components/schemas/TooManyRequestsResponse' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/InternalServerResponse' + operationId: createKeys + /keys/{hash}: + patch: + x-speakeasy-name-override: update + tags: + - API Keys + summary: Update an API key + parameters: + - schema: + type: string + description: The hash identifier of the API key to update + example: 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 + required: true + description: The hash identifier of the API key to update + name: hash + in: path + requestBody: + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: New name for the API key + example: Updated API Key Name + disabled: + type: boolean + description: Whether to disable the API key + example: false + limit: + type: number + nullable: true + description: New spending limit for the API key in USD + example: 75 + limit_reset: + type: string + nullable: true + enum: + - daily + - weekly + - monthly + description: >- + New limit reset type for the API key (daily, weekly, monthly, or null for no reset). Resets happen + automatically at midnight UTC, and weeks are Monday through Sunday. + example: daily + include_byok_in_limit: + type: boolean + description: Whether to include BYOK usage in the limit + example: true + example: + name: Updated API Key Name + disabled: false + limit: 75 + limit_reset: daily + include_byok_in_limit: true + required: true + responses: + '200': + description: API key updated successfully + content: + application/json: + schema: + type: object + properties: + data: type: object properties: - effort: - anyOf: - - type: string - enum: - - none - - minimal - - low - - medium - - high - x-speakeasy-unknown-values: allow - - type: 'null' - summary: - anyOf: - - $ref: '#/components/schemas/ReasoningSummaryVerbosity' - - type: 'null' - response_format: - oneOf: - - type: object - properties: - type: - type: string - const: text - required: - - type - - type: object - properties: - type: - type: string - const: json_object - required: - - type - - $ref: '#/components/schemas/ResponseFormatJSONSchema' - - $ref: '#/components/schemas/ResponseFormatTextGrammar' - - type: object - properties: - type: - type: string - const: python - required: - - type - type: object - seed: - anyOf: - - type: integer - minimum: -9007199254740991 - maximum: 9007199254740991 - - type: 'null' - stop: - anyOf: - - anyOf: - - type: string - - maxItems: 4 - type: array - items: - type: string - - type: 'null' - stream: - default: false + hash: + type: string + description: Unique hash identifier for the API key + example: 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 + name: + type: string + description: Name of the API key + example: My Production Key + label: + type: string + description: Human-readable label for the API key + example: Production API Key + disabled: + type: boolean + description: Whether the API key is disabled + example: false + limit: + type: number + nullable: true + description: Spending limit for the API key in USD + example: 100 + limit_remaining: + type: number + nullable: true + description: Remaining spending limit in USD + example: 74.5 + limit_reset: + type: string + nullable: true + description: Type of limit reset for the API key + example: monthly + include_byok_in_limit: + type: boolean + description: Whether to include external BYOK usage in the credit limit + example: false + usage: + type: number + description: Total OpenRouter credit usage (in USD) for the API key + example: 25.5 + usage_daily: + type: number + description: OpenRouter credit usage (in USD) for the current UTC day + example: 25.5 + usage_weekly: + type: number + description: OpenRouter credit usage (in USD) for the current UTC week (Monday-Sunday) + example: 25.5 + usage_monthly: + type: number + description: OpenRouter credit usage (in USD) for the current UTC month + example: 25.5 + byok_usage: + type: number + description: Total external BYOK usage (in USD) for the API key + example: 17.38 + byok_usage_daily: + type: number + description: External BYOK usage (in USD) for the current UTC day + example: 17.38 + byok_usage_weekly: + type: number + description: External BYOK usage (in USD) for the current UTC week (Monday-Sunday) + example: 17.38 + byok_usage_monthly: + type: number + description: External BYOK usage (in USD) for current UTC month + example: 17.38 + created_at: + type: string + description: ISO 8601 timestamp of when the API key was created + example: '2025-08-24T10:30:00Z' + updated_at: + type: string + nullable: true + description: ISO 8601 timestamp of when the API key was last updated + example: '2025-08-24T15:45:00Z' + expires_at: + type: string + nullable: true + format: date-time + description: ISO 8601 UTC timestamp when the API key expires, or null if no expiration + example: '2027-12-31T23:59:59Z' + required: + - hash + - name + - label + - disabled + - limit + - limit_remaining + - limit_reset + - include_byok_in_limit + - usage + - usage_daily + - usage_weekly + - usage_monthly + - byok_usage + - byok_usage_daily + - byok_usage_weekly + - byok_usage_monthly + - created_at + - updated_at + example: + hash: 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 + name: My Production Key + label: Production API Key + disabled: false + limit: 100 + limit_remaining: 74.5 + limit_reset: monthly + include_byok_in_limit: false + usage: 25.5 + usage_daily: 25.5 + usage_weekly: 25.5 + usage_monthly: 25.5 + byok_usage: 17.38 + byok_usage_daily: 17.38 + byok_usage_weekly: 17.38 + byok_usage_monthly: 17.38 + created_at: '2025-08-24T10:30:00Z' + updated_at: '2025-08-24T15:45:00Z' + expires_at: '2027-12-31T23:59:59Z' + description: The updated API key information + required: + - data + example: + data: + hash: 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 + name: Updated API Key Name + label: Updated API Key Name + disabled: false + limit: 75 + limit_remaining: 49.5 + limit_reset: daily + include_byok_in_limit: true + usage: 25.5 + usage_daily: 25.5 + usage_weekly: 25.5 + usage_monthly: 25.5 + byok_usage: 17.38 + byok_usage_daily: 17.38 + byok_usage_weekly: 17.38 + byok_usage_monthly: 17.38 + created_at: '2025-08-24T10:30:00Z' + updated_at: '2025-08-24T16:00:00Z' + expires_at: null + '400': + description: Bad Request - Invalid request parameters + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestResponse' + '401': + description: Unauthorized - Missing or invalid authentication + content: + application/json: + schema: + $ref: '#/components/schemas/UnauthorizedResponse' + '404': + description: Not Found - API key does not exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundResponse' + '429': + description: Too Many Requests - Rate limit exceeded + content: + application/json: + schema: + $ref: '#/components/schemas/TooManyRequestsResponse' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/InternalServerResponse' + operationId: updateKeys + delete: + x-speakeasy-name-override: delete + tags: + - API Keys + summary: Delete an API key + parameters: + - schema: + type: string + description: The hash identifier of the API key to delete + example: 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 + required: true + description: The hash identifier of the API key to delete + name: hash + in: path + responses: + '200': + description: API key deleted successfully + content: + application/json: + schema: + type: object + properties: + deleted: type: boolean - stream_options: - anyOf: - - $ref: '#/components/schemas/ChatStreamOptions' - - type: 'null' - temperature: - default: 1 - anyOf: - - type: number - minimum: 0 - maximum: 2 - - type: 'null' - tool_choice: - $ref: '#/components/schemas/ToolChoiceOption' - tools: - type: array - items: - $ref: '#/components/schemas/ToolDefinitionJson' - top_p: - default: 1 - anyOf: - - type: number - minimum: 0 - maximum: 1 - - type: 'null' - user: - type: string - required: - - messages - ChatResponseChoice: - type: object - properties: - finish_reason: - $ref: '#/components/schemas/ChatCompletionFinishReason' - index: - type: number - message: - $ref: '#/components/schemas/AssistantMessage' - logprobs: - anyOf: - - $ref: '#/components/schemas/ChatMessageTokenLogprobs' - - type: 'null' - required: - - finish_reason - - index - - message - ChatStreamingMessageToolCall: - type: object - properties: - index: - type: number - id: - type: string - type: - type: string - const: function - function: - type: object - properties: - name: - type: string - arguments: - type: string - required: - - index - ChatStreamingMessageChunk: - type: object - properties: - role: - type: string - enum: - - assistant - content: - anyOf: - - type: string - - type: 'null' - reasoning: - anyOf: - - type: string - - type: 'null' - refusal: - anyOf: - - type: string - - type: 'null' - tool_calls: - type: array - items: - $ref: '#/components/schemas/ChatStreamingMessageToolCall' - ChatStreamingChoice: - type: object - properties: - delta: - $ref: '#/components/schemas/ChatStreamingMessageChunk' - finish_reason: - $ref: '#/components/schemas/ChatCompletionFinishReason' - index: - type: number - logprobs: - anyOf: - - $ref: '#/components/schemas/ChatMessageTokenLogprobs' - - type: 'null' - required: - - delta - - finish_reason - - index - ChatError: - type: object - properties: - error: + const: true + description: Confirmation that the API key was deleted + example: true + required: + - deleted + example: + deleted: true + '401': + description: Unauthorized - Missing or invalid authentication + content: + application/json: + schema: + $ref: '#/components/schemas/UnauthorizedResponse' + '404': + description: Not Found - API key does not exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundResponse' + '429': + description: Too Many Requests - Rate limit exceeded + content: + application/json: + schema: + $ref: '#/components/schemas/TooManyRequestsResponse' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/InternalServerResponse' + operationId: deleteKeys + get: + operationId: getKey + x-speakeasy-name-override: get + tags: + - API Keys + summary: Get a single API key + parameters: + - schema: + type: string + description: The hash identifier of the API key to retrieve + example: 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 + required: true + description: The hash identifier of the API key to retrieve + name: hash + in: path + responses: + '200': + description: API key details + content: + application/json: + schema: + type: object + properties: + data: type: object properties: - code: - anyOf: - - anyOf: - - type: string - - type: number - - type: 'null' - message: - type: string - param: - anyOf: - - type: string - - type: 'null' - type: - anyOf: - - type: string - - type: 'null' - required: - - code - - message - additionalProperties: false - required: - - error - additionalProperties: false - ChatResponse: - type: object - properties: - id: - type: string - choices: - type: array - items: - $ref: '#/components/schemas/ChatResponseChoice' - created: - type: number - model: - type: string - object: - type: string - const: chat.completion - system_fingerprint: - anyOf: - - type: string - - type: 'null' - usage: - $ref: '#/components/schemas/ChatGenerationTokenUsage' - required: - - id - - choices - - created - - model - - object - additionalProperties: false - ChatStreamingResponseChunk: - type: object - properties: - data: + hash: + type: string + description: Unique hash identifier for the API key + example: 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 + name: + type: string + description: Name of the API key + example: My Production Key + label: + type: string + description: Human-readable label for the API key + example: Production API Key + disabled: + type: boolean + description: Whether the API key is disabled + example: false + limit: + type: number + nullable: true + description: Spending limit for the API key in USD + example: 100 + limit_remaining: + type: number + nullable: true + description: Remaining spending limit in USD + example: 74.5 + limit_reset: + type: string + nullable: true + description: Type of limit reset for the API key + example: monthly + include_byok_in_limit: + type: boolean + description: Whether to include external BYOK usage in the credit limit + example: false + usage: + type: number + description: Total OpenRouter credit usage (in USD) for the API key + example: 25.5 + usage_daily: + type: number + description: OpenRouter credit usage (in USD) for the current UTC day + example: 25.5 + usage_weekly: + type: number + description: OpenRouter credit usage (in USD) for the current UTC week (Monday-Sunday) + example: 25.5 + usage_monthly: + type: number + description: OpenRouter credit usage (in USD) for the current UTC month + example: 25.5 + byok_usage: + type: number + description: Total external BYOK usage (in USD) for the API key + example: 17.38 + byok_usage_daily: + type: number + description: External BYOK usage (in USD) for the current UTC day + example: 17.38 + byok_usage_weekly: + type: number + description: External BYOK usage (in USD) for the current UTC week (Monday-Sunday) + example: 17.38 + byok_usage_monthly: + type: number + description: External BYOK usage (in USD) for current UTC month + example: 17.38 + created_at: + type: string + description: ISO 8601 timestamp of when the API key was created + example: '2025-08-24T10:30:00Z' + updated_at: + type: string + nullable: true + description: ISO 8601 timestamp of when the API key was last updated + example: '2025-08-24T15:45:00Z' + expires_at: + type: string + nullable: true + format: date-time + description: ISO 8601 UTC timestamp when the API key expires, or null if no expiration + example: '2027-12-31T23:59:59Z' + required: + - hash + - name + - label + - disabled + - limit + - limit_remaining + - limit_reset + - include_byok_in_limit + - usage + - usage_daily + - usage_weekly + - usage_monthly + - byok_usage + - byok_usage_daily + - byok_usage_weekly + - byok_usage_monthly + - created_at + - updated_at + example: + hash: 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 + name: My Production Key + label: Production API Key + disabled: false + limit: 100 + limit_remaining: 74.5 + limit_reset: monthly + include_byok_in_limit: false + usage: 25.5 + usage_daily: 25.5 + usage_weekly: 25.5 + usage_monthly: 25.5 + byok_usage: 17.38 + byok_usage_daily: 17.38 + byok_usage_weekly: 17.38 + byok_usage_monthly: 17.38 + created_at: '2025-08-24T10:30:00Z' + updated_at: '2025-08-24T15:45:00Z' + expires_at: '2027-12-31T23:59:59Z' + description: The API key information + required: + - data + example: + data: + hash: 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 + name: My Production Key + label: Production API Key + disabled: false + limit: 100 + limit_remaining: 74.5 + limit_reset: monthly + include_byok_in_limit: false + usage: 25.5 + usage_daily: 25.5 + usage_weekly: 25.5 + usage_monthly: 25.5 + byok_usage: 17.38 + byok_usage_daily: 17.38 + byok_usage_weekly: 17.38 + byok_usage_monthly: 17.38 + created_at: '2025-08-24T10:30:00Z' + updated_at: '2025-08-24T15:45:00Z' + expires_at: '2027-12-31T23:59:59Z' + '401': + description: Unauthorized - Missing or invalid authentication + content: + application/json: + schema: + $ref: '#/components/schemas/UnauthorizedResponse' + '404': + description: Not Found - API key does not exist + content: + application/json: + schema: + $ref: '#/components/schemas/NotFoundResponse' + '429': + description: Too Many Requests - Rate limit exceeded + content: + application/json: + schema: + $ref: '#/components/schemas/TooManyRequestsResponse' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/InternalServerResponse' + /key: + get: + operationId: getCurrentKey + x-speakeasy-name-override: getCurrentKeyMetadata + tags: + - API Keys + summary: Get current API key + description: Get information on the API key associated with the current authentication session + responses: + '200': + description: API key details + content: + application/json: + schema: + type: object + properties: + data: type: object properties: - id: - type: string - choices: - type: array - items: - $ref: '#/components/schemas/ChatStreamingChoice' - created: - type: number - model: - type: string - object: - type: string - const: chat.completion.chunk - system_fingerprint: - anyOf: - - type: string - - type: 'null' - error: - type: object - properties: - message: - type: string - code: - type: number - required: - - message - - code - additionalProperties: false - usage: - $ref: '#/components/schemas/ChatGenerationTokenUsage' - required: - - id - - choices - - created - - model - - object - additionalProperties: false - required: - - data - additionalProperties: false - CompletionFinishReason: - anyOf: - - type: string - enum: - - stop - - length - - content_filter - x-speakeasy-unknown-values: allow - - type: 'null' - CompletionLogprobs: - type: object - properties: - tokens: - type: array - items: + label: type: string - token_logprobs: - type: array - items: + description: Human-readable label for the API key + example: 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 + limit: type: number - top_logprobs: - anyOf: - - type: array - items: - type: object - propertyNames: - type: string - additionalProperties: - type: number - - type: 'null' - text_offset: - type: array - items: + nullable: true + description: Spending limit for the API key in USD + example: 100 + usage: type: number - required: - - tokens - - token_logprobs - - top_logprobs - - text_offset - CompletionUsage: - type: object - properties: - prompt_tokens: - type: number - completion_tokens: - type: number - total_tokens: - type: number - required: - - prompt_tokens - - completion_tokens - - total_tokens - CompletionCreateParams: - type: object - properties: - model: - $ref: '#/components/schemas/ModelName' - models: - type: array - items: - $ref: '#/components/schemas/ModelName' - prompt: - anyOf: - - type: string - - type: array - items: - type: string - - type: array - items: - type: number - - type: array - items: - type: array - items: - type: number - best_of: - anyOf: - - type: integer - minimum: 1 - maximum: 20 - - type: 'null' - echo: - anyOf: - - type: boolean - - type: 'null' - frequency_penalty: - anyOf: - - type: number - minimum: -2 - maximum: 2 - - type: 'null' - logit_bias: - anyOf: - - type: object - propertyNames: - type: string - additionalProperties: + description: Total OpenRouter credit usage (in USD) for the API key + example: 25.5 + usage_daily: + type: number + description: OpenRouter credit usage (in USD) for the current UTC day + example: 25.5 + usage_weekly: + type: number + description: OpenRouter credit usage (in USD) for the current UTC week (Monday-Sunday) + example: 25.5 + usage_monthly: + type: number + description: OpenRouter credit usage (in USD) for the current UTC month + example: 25.5 + byok_usage: + type: number + description: Total external BYOK usage (in USD) for the API key + example: 17.38 + byok_usage_daily: + type: number + description: External BYOK usage (in USD) for the current UTC day + example: 17.38 + byok_usage_weekly: + type: number + description: External BYOK usage (in USD) for the current UTC week (Monday-Sunday) + example: 17.38 + byok_usage_monthly: + type: number + description: External BYOK usage (in USD) for current UTC month + example: 17.38 + is_free_tier: + type: boolean + description: Whether this is a free tier API key + example: false + is_provisioning_key: + type: boolean + description: Whether this is a provisioning key + example: false + limit_remaining: + type: number + nullable: true + description: Remaining spending limit in USD + example: 74.5 + limit_reset: + type: string + nullable: true + description: Type of limit reset for the API key + example: monthly + include_byok_in_limit: + type: boolean + description: Whether to include external BYOK usage in the credit limit + example: false + expires_at: + type: string + nullable: true + format: date-time + description: ISO 8601 UTC timestamp when the API key expires, or null if no expiration + example: '2027-12-31T23:59:59Z' + rate_limit: + type: object + properties: + requests: type: number - - type: 'null' - logprobs: - anyOf: - - type: integer - minimum: 0 - maximum: 5 - - type: 'null' - max_tokens: - anyOf: - - type: integer - minimum: 1 - maximum: 9007199254740991 - - type: 'null' - 'n': - anyOf: - - type: integer - minimum: 1 - maximum: 128 - - type: 'null' - presence_penalty: - anyOf: - - type: number - minimum: -2 - maximum: 2 - - type: 'null' - seed: - anyOf: - - type: integer - minimum: -9007199254740991 - maximum: 9007199254740991 - - type: 'null' - stop: - anyOf: - - anyOf: - - type: string - - type: array - items: - type: string - - type: 'null' - stream: - default: false - type: boolean - stream_options: - anyOf: - - type: object - properties: - include_usage: - anyOf: - - type: boolean - - type: 'null' - - type: 'null' - suffix: - anyOf: - - type: string - - type: 'null' - temperature: - anyOf: - - type: number - minimum: 0 - maximum: 2 - - type: 'null' - top_p: - anyOf: - - type: number - minimum: 0 - maximum: 1 - - type: 'null' - user: - type: string - metadata: - anyOf: - - type: object - propertyNames: + description: Number of requests allowed per interval + example: 1000 + interval: type: string - additionalProperties: + description: Rate limit interval + example: 1h + note: type: string - - type: 'null' - response_format: - anyOf: - - oneOf: - - type: object - properties: - type: - type: string - const: text - required: - - type - - type: object - properties: - type: - type: string - const: json_object - required: - - type - - $ref: '#/components/schemas/ResponseFormatJSONSchema' - - $ref: '#/components/schemas/ResponseFormatTextGrammar' - - type: object - properties: - type: - type: string - const: python - required: - - type - type: object - - type: 'null' - required: - - prompt - CompletionChoice: - type: object - properties: - text: - type: string - index: - type: number - logprobs: - anyOf: - - $ref: '#/components/schemas/CompletionLogprobs' - - type: 'null' - finish_reason: - $ref: '#/components/schemas/CompletionFinishReason' - required: - - text - - index - - logprobs - - finish_reason - CompletionResponse: - type: object - properties: - id: - type: string - object: - type: string - const: text_completion - created: - type: number - model: - type: string - system_fingerprint: - type: string - choices: - type: array - items: - $ref: '#/components/schemas/CompletionChoice' - usage: - $ref: '#/components/schemas/CompletionUsage' - required: - - id - - object - - created - - model - - choices - additionalProperties: false - parameters: {AppIdentifier: {name: HTTP-Referer, in: header, schema: {type: string}, description: "The app identifier should be your app's URL and is used as the primary identifier for rankings.\nThis is used to track API usage per application.\n"}, AppDisplayName: {name: X-Title, in: header, schema: {type: string}, description: "The app display name allows you to customize how your app appears in OpenRouter's dashboard.\n"}} - securitySchemes: - apiKey: - type: http - scheme: bearer - description: API key as bearer token in Authorization header - bearer: - type: http - scheme: bearer - description: API key as bearer token in Authorization header -paths: - /responses: - post: - x-speakeasy-name-override: send - x-speakeasy-stream-request-field: stream - tags: - - beta.responses - summary: Create a response - description: Creates a streaming or non-streaming response using OpenResponses API format - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/OpenResponsesRequest' - required: true - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: '#/components/schemas/OpenResponsesNonStreamingResponse' - text/event-stream: - schema: - type: object - properties: - data: - $ref: '#/components/schemas/OpenResponsesStreamEvent' - required: - - data - x-speakeasy-sse-sentinel: '[DONE]' - '400': - description: Bad Request - Invalid request parameters or malformed input - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestResponse' - '401': - description: Unauthorized - Authentication required or invalid credentials - content: - application/json: - schema: - $ref: '#/components/schemas/UnauthorizedResponse' - '402': - description: Payment Required - Insufficient credits or quota to complete request - content: - application/json: - schema: - $ref: '#/components/schemas/PaymentRequiredResponse' - '404': - description: Not Found - Resource does not exist - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundResponse' - '408': - description: Request Timeout - Operation exceeded time limit - content: - application/json: - schema: - $ref: '#/components/schemas/RequestTimeoutResponse' - '413': - description: Payload Too Large - Request payload exceeds size limits - content: - application/json: - schema: - $ref: '#/components/schemas/PayloadTooLargeResponse' - '422': - description: Unprocessable Entity - Semantic validation failure - content: - application/json: - schema: - $ref: '#/components/schemas/UnprocessableEntityResponse' - '429': - description: Too Many Requests - Rate limit exceeded - content: - application/json: - schema: - $ref: '#/components/schemas/TooManyRequestsResponse' - '500': - description: Internal Server Error - Unexpected server error - content: - application/json: - schema: - $ref: '#/components/schemas/InternalServerResponse' - '502': - description: Bad Gateway - Provider/upstream API failure - content: - application/json: - schema: - $ref: '#/components/schemas/BadGatewayResponse' - '503': - description: Service Unavailable - Service temporarily unavailable - content: - application/json: - schema: - $ref: '#/components/schemas/ServiceUnavailableResponse' - '524': - description: Infrastructure Timeout - Request timed out at our edge network - content: - application/json: - schema: - $ref: '#/components/schemas/EdgeNetworkTimeoutResponse' - '529': - description: Provider Overloaded - Provider is temporarily overloaded - content: - application/json: - schema: - $ref: '#/components/schemas/ProviderOverloadedResponse' - operationId: createResponses - /activity: - get: - tags: - - Analytics - operationId: getUserActivity - summary: Get user activity grouped by endpoint - description: Returns user activity data grouped by endpoint for the last 30 (completed) UTC days - parameters: - - schema: - type: string - description: Filter by a single UTC date in the last 30 days (YYYY-MM-DD format). - example: '2025-08-24' - required: false - description: Filter by a single UTC date in the last 30 days (YYYY-MM-DD format). - name: date - in: query - responses: - '200': - description: Returns user activity data grouped by endpoint - content: - application/json: - schema: - type: object - properties: - data: - type: array - items: - $ref: '#/components/schemas/ActivityItem' - description: List of activity items - required: - - data - example: - data: - - date: '2025-08-24' - model: openai/gpt-4.1 - model_permaslug: openai/gpt-4.1-2025-04-14 - endpoint_id: 550e8400-e29b-41d4-a716-446655440000 - provider_name: OpenAI - usage: 0.015 - byok_usage_inference: 0.012 - requests: 5 - prompt_tokens: 50 - completion_tokens: 125 - reasoning_tokens: 25 - '400': - description: Bad Request - Invalid date format or date range - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestResponse' - '401': - description: Unauthorized - Authentication required or invalid credentials - content: - application/json: - schema: - $ref: '#/components/schemas/UnauthorizedResponse' - '403': - description: Forbidden - Only provisioning keys can fetch activity - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenResponse' - '500': - description: Internal Server Error - Unexpected server error - content: - application/json: - schema: - $ref: '#/components/schemas/InternalServerResponse' - /credits: - get: - x-speakeasy-name-override: getCredits - tags: - - Credits - summary: Get remaining credits - operationId: getCredits - description: Get total credits purchased and used for the authenticated user - responses: - '200': - description: Returns the total credits purchased and used - content: - application/json: - schema: - type: object - description: Total credits purchased and used - example: - data: - total_credits: 100.5 - total_usage: 25.75 - '401': - description: Unauthorized - Authentication required or invalid credentials - content: - application/json: - schema: - $ref: '#/components/schemas/UnauthorizedResponse' - '403': - description: Forbidden - Only provisioning keys can fetch credits - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenResponse' - '500': - description: Internal Server Error - Unexpected server error - content: - application/json: - schema: - $ref: '#/components/schemas/InternalServerResponse' - /credits/coinbase: - post: - security: - - bearer: [] - x-speakeasy-name-override: createCoinbaseCharge - tags: - - Credits - summary: Create a Coinbase charge for crypto payment - operationId: createCoinbaseCharge - description: Create a Coinbase charge for crypto payment - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/CreateChargeRequest' - required: true - responses: - '200': - description: Returns the calldata to fulfill the transaction - content: - application/json: - schema: - type: object - properties: - data: - type: object - properties: - id: - type: string - created_at: - type: string - expires_at: - type: string - web3_data: - type: object - properties: - transfer_intent: - type: object - properties: - call_data: - type: object - properties: - deadline: - type: string - fee_amount: - type: string - id: - type: string - operator: - type: string - prefix: - type: string - recipient: - type: string - recipient_amount: - type: string - recipient_currency: - type: string - refund_destination: - type: string - signature: - type: string - required: - - deadline - - fee_amount - - id - - operator - - prefix - - recipient - - recipient_amount - - recipient_currency - - refund_destination - - signature - metadata: - type: object - properties: - chain_id: - type: number - contract_address: - type: string - sender: - type: string - required: - - chain_id - - contract_address - - sender - required: - - call_data - - metadata - required: - - transfer_intent - required: - - id - - created_at - - expires_at - - web3_data - required: - - data - '400': - description: Bad Request - Invalid credit amount or request body - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestResponse' - '401': - description: Unauthorized - Authentication required or invalid credentials - content: - application/json: - schema: - $ref: '#/components/schemas/UnauthorizedResponse' - '429': - description: Too Many Requests - Rate limit exceeded - content: - application/json: - schema: - $ref: '#/components/schemas/TooManyRequestsResponse' - '500': - description: Internal Server Error - Unexpected server error - content: - application/json: - schema: - $ref: '#/components/schemas/InternalServerResponse' - /embeddings: - post: - x-speakeasy-name-override: generate - tags: - - Embeddings - summary: Submit an embedding request - description: Submits an embedding request to the embeddings router - requestBody: - content: - application/json: - schema: - type: object - properties: - input: - anyOf: - - type: string - - type: array - items: - type: string - - type: array - items: - type: number - - type: array - items: - type: array - items: - type: number - - type: array - items: - type: object - properties: - content: - type: array - items: - oneOf: - - type: object - properties: - type: - type: string - enum: - - text - text: - type: string - required: - - type - - text - - type: object - properties: - type: - type: string - enum: - - image_url - image_url: - type: object - properties: - url: - type: string - required: - - url - required: - - type - - image_url - required: - - content - model: - type: string - encoding_format: - type: string - enum: - - float - - base64 - x-speakeasy-unknown-values: allow - dimensions: - type: integer - minimum: 0 - exclusiveMinimum: true - user: - type: string - provider: - type: object - properties: - allow_fallbacks: - type: boolean - nullable: true - description: > - Whether to allow backup providers to serve requests - - - true: (default) when the primary provider (or your custom providers in "order") is unavailable, use the next best provider. - - - false: use only the primary/custom provider, and return the upstream error if it's unavailable. - - require_parameters: - type: boolean - nullable: true - description: >- - Whether to filter providers to only those that support the parameters you've provided. If this setting is omitted or set to false, then providers will receive only the parameters they support, and ignore the rest. - data_collection: - $ref: '#/components/schemas/DataCollection' - zdr: - type: boolean - nullable: true - description: >- - Whether to restrict routing to only ZDR (Zero Data Retention) endpoints. When true, only endpoints that do not retain prompts will be used. - example: true - enforce_distillable_text: - type: boolean - nullable: true - description: >- - Whether to restrict routing to only models that allow text distillation. When true, only models where the author has allowed distillation will be used. - example: true - order: - type: array - nullable: true - items: - anyOf: - - $ref: '#/components/schemas/ProviderName' - - type: string - description: >- - An ordered list of provider slugs. The router will attempt to use the first provider in the subset of this list that supports your requested model, and fall back to the next if it is unavailable. If no providers are available, the request will fail with an error message. - only: - type: array - nullable: true - items: - anyOf: - - $ref: '#/components/schemas/ProviderName' - - type: string - description: >- - List of provider slugs to allow. If provided, this list is merged with your account-wide allowed provider settings for this request. - ignore: - type: array - nullable: true - items: - anyOf: - - $ref: '#/components/schemas/ProviderName' - - type: string - description: >- - List of provider slugs to ignore. If provided, this list is merged with your account-wide ignored provider settings for this request. - quantizations: - type: array - nullable: true - items: - $ref: '#/components/schemas/Quantization' - description: A list of quantization levels to filter the provider by. - sort: - $ref: '#/components/schemas/ProviderSort' - max_price: - type: object - properties: - prompt: - $ref: '#/components/schemas/BigNumberUnion' - completion: - $ref: '#/components/schemas/BigNumberUnion' - image: - $ref: '#/components/schemas/BigNumberUnion' - audio: - $ref: '#/components/schemas/BigNumberUnion' - request: - $ref: '#/components/schemas/BigNumberUnion' - additionalProperties: false - description: >- - The object specifying the maximum price you want to pay for this request. USD price per million tokens, for prompt and completion. - input_type: - type: string - required: - - input - - model - required: true - responses: - '200': - description: Embedding response - content: - application/json: - schema: - type: object - properties: - id: - type: string - object: - type: string - enum: - - list - data: - type: array - items: - type: object - properties: - object: - type: string - enum: - - embedding - embedding: - anyOf: - - type: array - items: - type: number - - type: string - index: - type: number - required: - - object - - embedding - model: - type: string - usage: - type: object - properties: - prompt_tokens: - type: number - total_tokens: - type: number - cost: - type: number - required: - - prompt_tokens - - total_tokens - required: - - object - - data - - model - text/event-stream: - schema: - type: string - description: Not used for embeddings - embeddings do not support streaming - x-speakeasy-sse-sentinel: '[DONE]' - '400': - description: Bad Request - Invalid request parameters or malformed input - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestResponse' - '401': - description: Unauthorized - Authentication required or invalid credentials - content: - application/json: - schema: - $ref: '#/components/schemas/UnauthorizedResponse' - '402': - description: Payment Required - Insufficient credits or quota to complete request - content: - application/json: - schema: - $ref: '#/components/schemas/PaymentRequiredResponse' - '404': - description: Not Found - Resource does not exist - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundResponse' - '429': - description: Too Many Requests - Rate limit exceeded - content: - application/json: - schema: - $ref: '#/components/schemas/TooManyRequestsResponse' - '500': - description: Internal Server Error - Unexpected server error - content: - application/json: - schema: - $ref: '#/components/schemas/InternalServerResponse' - '502': - description: Bad Gateway - Provider/upstream API failure - content: - application/json: - schema: - $ref: '#/components/schemas/BadGatewayResponse' - '503': - description: Service Unavailable - Service temporarily unavailable - content: - application/json: - schema: - $ref: '#/components/schemas/ServiceUnavailableResponse' - '524': - description: Cloudflare Timeout - Provider request timed out at CDN edge - content: - application/json: - schema: - $ref: '#/components/schemas/EdgeNetworkTimeoutResponse' - '529': - description: Provider Overloaded - Provider is temporarily overloaded - content: - application/json: - schema: - $ref: '#/components/schemas/ProviderOverloadedResponse' - operationId: createEmbeddings - /embeddings/models: - get: - tags: - - Embeddings - x-speakeasy-name-override: listModels - summary: List all embeddings models - description: Returns a list of all available embeddings models and their properties - responses: - '200': - description: Returns a list of embeddings models - content: - application/json: - schema: - $ref: '#/components/schemas/ModelsListResponse' - '400': - description: Bad Request - Invalid request parameters - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestResponse' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/InternalServerResponse' - operationId: listEmbeddingsModels - /generation: - get: - tags: - - Generations - summary: Get request & usage metadata for a generation - parameters: - - schema: - type: string - minLength: 1 - required: true - name: id - in: query - responses: - '200': - description: Returns the request metadata for this generation - content: - application/json: - schema: - type: object - properties: - data: - type: object - properties: - id: - type: string - description: Unique identifier for the generation - example: gen-3bhGkxlo4XFrqiabUM7NDtwDzWwG - upstream_id: - type: string - nullable: true - description: Upstream provider's identifier for this generation - example: chatcmpl-791bcf62-080e-4568-87d0-94c72e3b4946 - total_cost: - type: number - description: Total cost of the generation in USD - example: 0.0015 - cache_discount: - type: number - nullable: true - description: Discount applied due to caching - example: 0.0002 - upstream_inference_cost: - type: number - nullable: true - description: Cost charged by the upstream provider - example: 0.0012 - created_at: - type: string - description: ISO 8601 timestamp of when the generation was created - example: '2024-07-15T23:33:19.433273+00:00' - model: - type: string - description: Model used for the generation - example: sao10k/l3-stheno-8b - app_id: - type: number - nullable: true - description: ID of the app that made the request - example: 12345 - streamed: - type: boolean - nullable: true - description: Whether the response was streamed - example: true - cancelled: - type: boolean - nullable: true - description: Whether the generation was cancelled - example: false - provider_name: - type: string - nullable: true - description: Name of the provider that served the request - example: Infermatic - latency: - type: number - nullable: true - description: Total latency in milliseconds - example: 1250 - moderation_latency: - type: number - nullable: true - description: Moderation latency in milliseconds - example: 50 - generation_time: - type: number - nullable: true - description: Time taken for generation in milliseconds - example: 1200 - finish_reason: - type: string - nullable: true - description: Reason the generation finished - example: stop - tokens_prompt: - type: number - nullable: true - description: Number of tokens in the prompt - example: 10 - tokens_completion: - type: number - nullable: true - description: Number of tokens in the completion - example: 25 - native_tokens_prompt: - type: number - nullable: true - description: Native prompt tokens as reported by provider - example: 10 - native_tokens_completion: - type: number - nullable: true - description: Native completion tokens as reported by provider - example: 25 - native_tokens_completion_images: - type: number - nullable: true - description: Native completion image tokens as reported by provider - example: 0 - native_tokens_reasoning: - type: number - nullable: true - description: Native reasoning tokens as reported by provider - example: 5 - native_tokens_cached: - type: number - nullable: true - description: Native cached tokens as reported by provider - example: 3 - num_media_prompt: - type: number - nullable: true - description: Number of media items in the prompt - example: 1 - num_input_audio_prompt: - type: number - nullable: true - description: Number of audio inputs in the prompt - example: 0 - num_media_completion: - type: number - nullable: true - description: Number of media items in the completion - example: 0 - num_search_results: - type: number - nullable: true - description: Number of search results included - example: 5 - origin: - type: string - description: Origin URL of the request - example: https://openrouter.ai/ - usage: - type: number - description: Usage amount in USD - example: 0.0015 - is_byok: - type: boolean - description: Whether this used bring-your-own-key - example: false - native_finish_reason: - type: string - nullable: true - description: Native finish reason as reported by provider - example: stop - external_user: - type: string - nullable: true - description: External user identifier - example: user-123 - api_type: - type: string - nullable: true - enum: - - completions - - embeddings - description: Type of API used for the generation - x-speakeasy-unknown-values: allow - required: - - id - - upstream_id - - total_cost - - cache_discount - - upstream_inference_cost - - created_at - - model - - app_id - - streamed - - cancelled - - provider_name - - latency - - moderation_latency - - generation_time - - finish_reason - - tokens_prompt - - tokens_completion - - native_tokens_prompt - - native_tokens_completion - - native_tokens_completion_images - - native_tokens_reasoning - - native_tokens_cached - - num_media_prompt - - num_input_audio_prompt - - num_media_completion - - num_search_results - - origin - - usage - - is_byok - - native_finish_reason - - external_user - - api_type - description: Generation data - required: - - data - description: Generation response - '401': - description: Unauthorized - Authentication required or invalid credentials - content: - application/json: - schema: - $ref: '#/components/schemas/UnauthorizedResponse' - '402': - description: Payment Required - Insufficient credits or quota to complete request - content: - application/json: - schema: - $ref: '#/components/schemas/PaymentRequiredResponse' - '404': - description: Not Found - Generation not found - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundResponse' - '429': - description: Too Many Requests - Rate limit exceeded - content: - application/json: - schema: - $ref: '#/components/schemas/TooManyRequestsResponse' - '500': - description: Internal Server Error - Unexpected server error - content: - application/json: - schema: - $ref: '#/components/schemas/InternalServerResponse' - '502': - description: Bad Gateway - Provider/upstream API failure - content: - application/json: - schema: - $ref: '#/components/schemas/BadGatewayResponse' - '524': - description: Infrastructure Timeout - Request timed out at our edge network - content: - application/json: - schema: - $ref: '#/components/schemas/EdgeNetworkTimeoutResponse' - '529': - description: Provider Overloaded - Provider is temporarily overloaded - content: - application/json: - schema: - $ref: '#/components/schemas/ProviderOverloadedResponse' - operationId: getGeneration - /models/count: - get: - tags: - - Models - x-speakeasy-name-override: count - summary: Get total count of available models - responses: - '200': - description: Returns the total count of available models - content: - application/json: - schema: - $ref: '#/components/schemas/ModelsCountResponse' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/InternalServerResponse' - operationId: listModelsCount - /models: - get: - tags: - - Models - x-speakeasy-name-override: list - summary: List all models and their properties - parameters: - - schema: - type: string - required: false - name: category - in: query - - schema: - type: string - required: false - name: supported_parameters - in: query - responses: - '200': - description: Returns a list of models or RSS feed - content: - application/json: - schema: - $ref: '#/components/schemas/ModelsListResponse' - '400': - description: Bad Request - Invalid request parameters - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestResponse' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/InternalServerResponse' - operationId: getModels - /models/user: - get: - tags: - - Models - x-speakeasy-name-override: listForUser - summary: List models filtered by user provider preferences - security: - - bearer: [] - responses: - '200': - description: Returns a list of models filtered by user provider preferences - content: - application/json: - schema: - $ref: '#/components/schemas/ModelsListResponse' - '401': - description: Unauthorized - Missing or invalid authentication - content: - application/json: - schema: - $ref: '#/components/schemas/UnauthorizedResponse' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/InternalServerResponse' - operationId: listModelsUser - /models/{author}/{slug}/endpoints: - get: - tags: - - Endpoints - operationId: listEndpoints - x-speakeasy-name-override: list - summary: List all endpoints for a model - parameters: - - schema: - type: string - required: true - name: author - in: path - - schema: - type: string - required: true - name: slug - in: path - responses: - '200': - description: Returns a list of endpoints - content: - application/json: - schema: - type: object - properties: - data: - $ref: '#/components/schemas/ListEndpointsResponse' - required: - - data - '404': - description: Not Found - Model does not exist - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundResponse' - '500': - description: Internal Server Error - Unexpected server error - content: - application/json: - schema: - $ref: '#/components/schemas/InternalServerResponse' - /endpoints/zdr: - get: - tags: - - Endpoints - x-speakeasy-name-override: listZdrEndpoints - summary: Preview the impact of ZDR on the available endpoints - responses: - '200': - description: Returns a list of endpoints - content: - application/json: - schema: - type: object - properties: - data: - type: array - items: - $ref: '#/components/schemas/PublicEndpoint' - required: - - data - '500': - description: Internal Server Error - Unexpected server error - content: - application/json: - schema: - $ref: '#/components/schemas/InternalServerResponse' - operationId: listEndpointsZdr - /parameters/{author}/{slug}: - get: - tags: - - Parameters - summary: Get a model's supported parameters and data about which are most popular - security: - - bearer: [] - parameters: - - schema: - type: string - required: true - name: author - in: path - - schema: - type: string - required: true - name: slug - in: path - - schema: - type: string - enum: - - AI21 - - AionLabs - - Alibaba - - Amazon Bedrock - - Anthropic - - Arcee - - AtlasCloud - - Avian - - Azure - - BaseTen - - Black Forest Labs - - Cerebras - - Chutes - - Cirrascale - - Clarifai - - Cloudflare - - Cohere - - Crusoe - - DeepInfra - - DeepSeek - - Featherless - - Fireworks - - Friendli - - GMICloud - - Google - - Google AI Studio - - Groq - - Hyperbolic - - Inception - - InferenceNet - - Infermatic - - Inflection - - Liquid - - Mancer 2 - - Minimax - - ModelRun - - Mistral - - Modular - - Moonshot AI - - Morph - - NCompass - - Nebius - - NextBit - - Novita - - Nvidia - - OpenAI - - OpenInference - - Parasail - - Perplexity - - Phala - - Relace - - SambaNova - - SiliconFlow - - Stealth - - Switchpoint - - Targon - - Together - - Venice - - WandB - - xAI - - Z.AI - - FakeProvider - x-speakeasy-unknown-values: allow - required: false - name: provider - in: query - responses: - '200': - description: Returns the parameters for the specified model - content: - application/json: - schema: - type: object - properties: - data: - type: object - properties: - model: - type: string - description: Model identifier - example: openai/gpt-4 - supported_parameters: - type: array - items: - type: string - enum: - - temperature - - top_p - - top_k - - min_p - - top_a - - frequency_penalty - - presence_penalty - - repetition_penalty - - max_tokens - - logit_bias - - logprobs - - top_logprobs - - seed - - response_format - - structured_outputs - - stop - - tools - - tool_choice - - parallel_tool_calls - - include_reasoning - - reasoning - - web_search_options - - verbosity - x-speakeasy-unknown-values: allow - description: List of parameters supported by this model - example: - - temperature - - top_p - - max_tokens - required: - - model - - supported_parameters - example: - model: openai/gpt-4 - supported_parameters: - - temperature - - top_p - - max_tokens - description: Parameter analytics data - required: - - data - example: - data: - model: openai/gpt-4 - supported_parameters: - - temperature - - top_p - - max_tokens - '401': - description: Unauthorized - Authentication required or invalid credentials - content: - application/json: - schema: - $ref: '#/components/schemas/UnauthorizedResponse' - '404': - description: Not Found - Model or provider does not exist - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundResponse' - '500': - description: Internal Server Error - Unexpected server error - content: - application/json: - schema: - $ref: '#/components/schemas/InternalServerResponse' - operationId: getParameters - /providers: - get: - tags: - - Providers - x-speakeasy-name-override: list - summary: List all providers - operationId: listProviders - responses: - '200': - description: Returns a list of providers - content: - application/json: - schema: - type: object - properties: - data: - type: array - items: - type: object - properties: - name: - type: string - description: Display name of the provider - example: OpenAI - slug: - type: string - description: URL-friendly identifier for the provider - example: openai - privacy_policy_url: - type: string - nullable: true - description: URL to the provider's privacy policy - example: https://openai.com/privacy - terms_of_service_url: - type: string - nullable: true - description: URL to the provider's terms of service - example: https://openai.com/terms - status_page_url: - type: string - nullable: true - description: URL to the provider's status page - example: https://status.openai.com - required: - - name - - slug - - privacy_policy_url - example: - name: OpenAI - slug: openai - privacy_policy_url: https://openai.com/privacy - terms_of_service_url: https://openai.com/terms - status_page_url: https://status.openai.com - required: - - data - '500': - description: Internal Server Error - Unexpected server error - content: - application/json: - schema: - $ref: '#/components/schemas/InternalServerResponse' - /keys: - get: - operationId: list - x-speakeasy-name-override: list - tags: - - API Keys - summary: List API keys - parameters: - - schema: - type: string - description: Whether to include disabled API keys in the response - example: 'false' - required: false - description: Whether to include disabled API keys in the response - name: include_disabled - in: query - - schema: - type: string - description: Number of API keys to skip for pagination - example: '0' - required: false - description: Number of API keys to skip for pagination - name: offset - in: query - responses: - '200': - description: List of API keys - content: - application/json: - schema: - type: object - properties: - data: - type: array - items: - type: object - properties: - hash: - type: string - description: Unique hash identifier for the API key - example: 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 - name: - type: string - description: Name of the API key - example: My Production Key - label: - type: string - description: Human-readable label for the API key - example: Production API Key - disabled: - type: boolean - description: Whether the API key is disabled - example: false - limit: - type: number - nullable: true - description: Spending limit for the API key in USD - example: 100 - limit_remaining: - type: number - nullable: true - description: Remaining spending limit in USD - example: 74.5 - limit_reset: - type: string - nullable: true - description: Type of limit reset for the API key - example: monthly - include_byok_in_limit: - type: boolean - description: Whether to include external BYOK usage in the credit limit - example: false - usage: - type: number - description: Total OpenRouter credit usage (in USD) for the API key - example: 25.5 - usage_daily: - type: number - description: OpenRouter credit usage (in USD) for the current UTC day - example: 25.5 - usage_weekly: - type: number - description: OpenRouter credit usage (in USD) for the current UTC week (Monday-Sunday) - example: 25.5 - usage_monthly: - type: number - description: OpenRouter credit usage (in USD) for the current UTC month - example: 25.5 - byok_usage: - type: number - description: Total external BYOK usage (in USD) for the API key - example: 17.38 - byok_usage_daily: - type: number - description: External BYOK usage (in USD) for the current UTC day - example: 17.38 - byok_usage_weekly: - type: number - description: External BYOK usage (in USD) for the current UTC week (Monday-Sunday) - example: 17.38 - byok_usage_monthly: - type: number - description: External BYOK usage (in USD) for current UTC month - example: 17.38 - created_at: - type: string - description: ISO 8601 timestamp of when the API key was created - example: '2025-08-24T10:30:00Z' - updated_at: - type: string - nullable: true - description: ISO 8601 timestamp of when the API key was last updated - example: '2025-08-24T15:45:00Z' - expires_at: - type: string - nullable: true - format: date-time - description: ISO 8601 UTC timestamp when the API key expires, or null if no expiration - example: '2027-12-31T23:59:59Z' - required: - - hash - - name - - label - - disabled - - limit - - limit_remaining - - limit_reset - - include_byok_in_limit - - usage - - usage_daily - - usage_weekly - - usage_monthly - - byok_usage - - byok_usage_daily - - byok_usage_weekly - - byok_usage_monthly - - created_at - - updated_at - example: - hash: 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 - name: My Production Key - label: Production API Key - disabled: false - limit: 100 - limit_remaining: 74.5 - limit_reset: monthly - include_byok_in_limit: false - usage: 25.5 - usage_daily: 25.5 - usage_weekly: 25.5 - usage_monthly: 25.5 - byok_usage: 17.38 - byok_usage_daily: 17.38 - byok_usage_weekly: 17.38 - byok_usage_monthly: 17.38 - created_at: '2025-08-24T10:30:00Z' - updated_at: '2025-08-24T15:45:00Z' - expires_at: '2027-12-31T23:59:59Z' - description: List of API keys - required: - - data - example: - data: - - hash: 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 - name: My Production Key - label: Production API Key - disabled: false - limit: 100 - limit_remaining: 74.5 - limit_reset: monthly - include_byok_in_limit: false - usage: 25.5 - usage_daily: 25.5 - usage_weekly: 25.5 - usage_monthly: 25.5 - byok_usage: 17.38 - byok_usage_daily: 17.38 - byok_usage_weekly: 17.38 - byok_usage_monthly: 17.38 - created_at: '2025-08-24T10:30:00Z' - updated_at: '2025-08-24T15:45:00Z' - expires_at: '2027-12-31T23:59:59Z' - '401': - description: Unauthorized - Missing or invalid authentication - content: - application/json: - schema: - $ref: '#/components/schemas/UnauthorizedResponse' - '429': - description: Too Many Requests - Rate limit exceeded - content: - application/json: - schema: - $ref: '#/components/schemas/TooManyRequestsResponse' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/InternalServerResponse' - post: - x-speakeasy-name-override: create - tags: - - API Keys - summary: Create a new API key - requestBody: - content: - application/json: - schema: - type: object - properties: - name: - type: string - minLength: 1 - description: Name for the new API key - example: My New API Key - limit: - type: number - nullable: true - description: Optional spending limit for the API key in USD - example: 50 - limit_reset: - type: string - nullable: true - enum: - - daily - - weekly - - monthly - description: >- - Type of limit reset for the API key (daily, weekly, monthly, or null for no reset). Resets happen automatically at midnight UTC, and weeks are Monday through Sunday. - example: monthly - x-speakeasy-unknown-values: allow - include_byok_in_limit: - type: boolean - description: Whether to include BYOK usage in the limit - example: true - expires_at: - type: string - nullable: true - format: date-time - description: >- - Optional ISO 8601 UTC timestamp when the API key should expire. Must be UTC, other timezones will be rejected - example: '2027-12-31T23:59:59Z' - required: - - name - example: - name: My New API Key - limit: 50 - limit_reset: monthly - include_byok_in_limit: true - expires_at: '2027-12-31T23:59:59Z' - required: true - responses: - '201': - description: API key created successfully - content: - application/json: - schema: - type: object - properties: - data: - type: object - properties: - hash: - type: string - description: Unique hash identifier for the API key - example: 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 - name: - type: string - description: Name of the API key - example: My Production Key - label: - type: string - description: Human-readable label for the API key - example: Production API Key - disabled: - type: boolean - description: Whether the API key is disabled - example: false - limit: - type: number - nullable: true - description: Spending limit for the API key in USD - example: 100 - limit_remaining: - type: number - nullable: true - description: Remaining spending limit in USD - example: 74.5 - limit_reset: - type: string - nullable: true - description: Type of limit reset for the API key - example: monthly - include_byok_in_limit: - type: boolean - description: Whether to include external BYOK usage in the credit limit - example: false - usage: - type: number - description: Total OpenRouter credit usage (in USD) for the API key - example: 25.5 - usage_daily: - type: number - description: OpenRouter credit usage (in USD) for the current UTC day - example: 25.5 - usage_weekly: - type: number - description: OpenRouter credit usage (in USD) for the current UTC week (Monday-Sunday) - example: 25.5 - usage_monthly: - type: number - description: OpenRouter credit usage (in USD) for the current UTC month - example: 25.5 - byok_usage: - type: number - description: Total external BYOK usage (in USD) for the API key - example: 17.38 - byok_usage_daily: - type: number - description: External BYOK usage (in USD) for the current UTC day - example: 17.38 - byok_usage_weekly: - type: number - description: External BYOK usage (in USD) for the current UTC week (Monday-Sunday) - example: 17.38 - byok_usage_monthly: - type: number - description: External BYOK usage (in USD) for current UTC month - example: 17.38 - created_at: - type: string - description: ISO 8601 timestamp of when the API key was created - example: '2025-08-24T10:30:00Z' - updated_at: - type: string - nullable: true - description: ISO 8601 timestamp of when the API key was last updated - example: '2025-08-24T15:45:00Z' - expires_at: - type: string - nullable: true - format: date-time - description: ISO 8601 UTC timestamp when the API key expires, or null if no expiration - example: '2027-12-31T23:59:59Z' - required: - - hash - - name - - label - - disabled - - limit - - limit_remaining - - limit_reset - - include_byok_in_limit - - usage - - usage_daily - - usage_weekly - - usage_monthly - - byok_usage - - byok_usage_daily - - byok_usage_weekly - - byok_usage_monthly - - created_at - - updated_at - example: - hash: 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 - name: My Production Key - label: Production API Key - disabled: false - limit: 100 - limit_remaining: 74.5 - limit_reset: monthly - include_byok_in_limit: false - usage: 25.5 - usage_daily: 25.5 - usage_weekly: 25.5 - usage_monthly: 25.5 - byok_usage: 17.38 - byok_usage_daily: 17.38 - byok_usage_weekly: 17.38 - byok_usage_monthly: 17.38 - created_at: '2025-08-24T10:30:00Z' - updated_at: '2025-08-24T15:45:00Z' - expires_at: '2027-12-31T23:59:59Z' - description: The created API key information - key: - type: string - description: The actual API key string (only shown once) - example: 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 - required: - - data - - key - example: - data: - hash: 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 - name: My New API Key - label: My New API Key - disabled: false - limit: 50 - limit_remaining: 50 - limit_reset: monthly - include_byok_in_limit: true - usage: 0 - usage_daily: 0 - usage_weekly: 0 - usage_monthly: 0 - byok_usage: 0 - byok_usage_daily: 0 - byok_usage_weekly: 0 - byok_usage_monthly: 0 - created_at: '2025-08-24T10:30:00Z' - updated_at: null - expires_at: '2027-12-31T23:59:59Z' - key: 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 - '400': - description: Bad Request - Invalid request parameters - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestResponse' - '401': - description: Unauthorized - Missing or invalid authentication - content: - application/json: - schema: - $ref: '#/components/schemas/UnauthorizedResponse' - '429': - description: Too Many Requests - Rate limit exceeded - content: - application/json: - schema: - $ref: '#/components/schemas/TooManyRequestsResponse' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/InternalServerResponse' - operationId: createKeys - /keys/{hash}: - patch: - x-speakeasy-name-override: update - tags: - - API Keys - summary: Update an API key - parameters: - - schema: - type: string - description: The hash identifier of the API key to update - example: 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 - required: true - description: The hash identifier of the API key to update - name: hash - in: path - requestBody: - content: - application/json: - schema: - type: object - properties: - name: - type: string - description: New name for the API key - example: Updated API Key Name - disabled: - type: boolean - description: Whether to disable the API key - example: false - limit: - type: number - nullable: true - description: New spending limit for the API key in USD - example: 75 - limit_reset: - type: string - nullable: true - enum: - - daily - - weekly - - monthly - description: >- - New limit reset type for the API key (daily, weekly, monthly, or null for no reset). Resets happen automatically at midnight UTC, and weeks are Monday through Sunday. - example: daily - x-speakeasy-unknown-values: allow - include_byok_in_limit: - type: boolean - description: Whether to include BYOK usage in the limit - example: true - example: - name: Updated API Key Name - disabled: false - limit: 75 - limit_reset: daily - include_byok_in_limit: true - required: true - responses: - '200': - description: API key updated successfully - content: - application/json: - schema: - type: object - properties: - data: - type: object - properties: - hash: - type: string - description: Unique hash identifier for the API key - example: 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 - name: - type: string - description: Name of the API key - example: My Production Key - label: - type: string - description: Human-readable label for the API key - example: Production API Key - disabled: - type: boolean - description: Whether the API key is disabled - example: false - limit: - type: number - nullable: true - description: Spending limit for the API key in USD - example: 100 - limit_remaining: - type: number - nullable: true - description: Remaining spending limit in USD - example: 74.5 - limit_reset: - type: string - nullable: true - description: Type of limit reset for the API key - example: monthly - include_byok_in_limit: - type: boolean - description: Whether to include external BYOK usage in the credit limit - example: false - usage: - type: number - description: Total OpenRouter credit usage (in USD) for the API key - example: 25.5 - usage_daily: - type: number - description: OpenRouter credit usage (in USD) for the current UTC day - example: 25.5 - usage_weekly: - type: number - description: OpenRouter credit usage (in USD) for the current UTC week (Monday-Sunday) - example: 25.5 - usage_monthly: - type: number - description: OpenRouter credit usage (in USD) for the current UTC month - example: 25.5 - byok_usage: - type: number - description: Total external BYOK usage (in USD) for the API key - example: 17.38 - byok_usage_daily: - type: number - description: External BYOK usage (in USD) for the current UTC day - example: 17.38 - byok_usage_weekly: - type: number - description: External BYOK usage (in USD) for the current UTC week (Monday-Sunday) - example: 17.38 - byok_usage_monthly: - type: number - description: External BYOK usage (in USD) for current UTC month - example: 17.38 - created_at: - type: string - description: ISO 8601 timestamp of when the API key was created - example: '2025-08-24T10:30:00Z' - updated_at: - type: string - nullable: true - description: ISO 8601 timestamp of when the API key was last updated - example: '2025-08-24T15:45:00Z' - expires_at: - type: string - nullable: true - format: date-time - description: ISO 8601 UTC timestamp when the API key expires, or null if no expiration - example: '2027-12-31T23:59:59Z' - required: - - hash - - name - - label - - disabled - - limit - - limit_remaining - - limit_reset - - include_byok_in_limit - - usage - - usage_daily - - usage_weekly - - usage_monthly - - byok_usage - - byok_usage_daily - - byok_usage_weekly - - byok_usage_monthly - - created_at - - updated_at - example: - hash: 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 - name: My Production Key - label: Production API Key - disabled: false - limit: 100 - limit_remaining: 74.5 - limit_reset: monthly - include_byok_in_limit: false - usage: 25.5 - usage_daily: 25.5 - usage_weekly: 25.5 - usage_monthly: 25.5 - byok_usage: 17.38 - byok_usage_daily: 17.38 - byok_usage_weekly: 17.38 - byok_usage_monthly: 17.38 - created_at: '2025-08-24T10:30:00Z' - updated_at: '2025-08-24T15:45:00Z' - expires_at: '2027-12-31T23:59:59Z' - description: The updated API key information - required: - - data - example: - data: - hash: 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 - name: Updated API Key Name - label: Updated API Key Name - disabled: false - limit: 75 - limit_remaining: 49.5 - limit_reset: daily - include_byok_in_limit: true - usage: 25.5 - usage_daily: 25.5 - usage_weekly: 25.5 - usage_monthly: 25.5 - byok_usage: 17.38 - byok_usage_daily: 17.38 - byok_usage_weekly: 17.38 - byok_usage_monthly: 17.38 - created_at: '2025-08-24T10:30:00Z' - updated_at: '2025-08-24T16:00:00Z' - expires_at: null - '400': - description: Bad Request - Invalid request parameters - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestResponse' - '401': - description: Unauthorized - Missing or invalid authentication - content: - application/json: - schema: - $ref: '#/components/schemas/UnauthorizedResponse' - '404': - description: Not Found - API key does not exist - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundResponse' - '429': - description: Too Many Requests - Rate limit exceeded - content: - application/json: - schema: - $ref: '#/components/schemas/TooManyRequestsResponse' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/InternalServerResponse' - operationId: updateKeys - delete: - x-speakeasy-name-override: delete - tags: - - API Keys - summary: Delete an API key - parameters: - - schema: - type: string - description: The hash identifier of the API key to delete + description: Note about the rate limit + example: This field is deprecated and safe to ignore. + required: + - requests + - interval + - note + description: Legacy rate limit information about a key. Will always return -1. + deprecated: true + example: + requests: 1000 + interval: 1h + note: This field is deprecated and safe to ignore. + required: + - label + - limit + - usage + - usage_daily + - usage_weekly + - usage_monthly + - byok_usage + - byok_usage_daily + - byok_usage_weekly + - byok_usage_monthly + - is_free_tier + - is_provisioning_key + - limit_remaining + - limit_reset + - include_byok_in_limit + - rate_limit + description: Current API key information + example: + label: sk-or-v1-au78b3456789012345678901234567890 + limit: 100 + usage: 25.5 + usage_daily: 25.5 + usage_weekly: 25.5 + usage_monthly: 25.5 + byok_usage: 17.38 + byok_usage_daily: 17.38 + byok_usage_weekly: 17.38 + byok_usage_monthly: 17.38 + is_free_tier: false + is_provisioning_key: false + limit_remaining: 74.5 + limit_reset: monthly + include_byok_in_limit: false + expires_at: '2027-12-31T23:59:59Z' + rate_limit: + requests: 1000 + interval: 1h + note: This field is deprecated and safe to ignore. + required: + - data + example: + data: + label: sk-or-v1-au78b3456789012345678901234567890 + limit: 100 + usage: 25.5 + usage_daily: 25.5 + usage_weekly: 25.5 + usage_monthly: 25.5 + byok_usage: 17.38 + byok_usage_daily: 17.38 + byok_usage_weekly: 17.38 + byok_usage_monthly: 17.38 + is_free_tier: false + is_provisioning_key: false + limit_remaining: 74.5 + limit_reset: monthly + include_byok_in_limit: false + expires_at: '2027-12-31T23:59:59Z' + rate_limit: + requests: 1000 + interval: 1h + note: This field is deprecated and safe to ignore. + '401': + description: Unauthorized - Authentication required or invalid credentials + content: + application/json: + schema: + $ref: '#/components/schemas/UnauthorizedResponse' + '500': + description: Internal Server Error - Unexpected server error + content: + application/json: + schema: + $ref: '#/components/schemas/InternalServerResponse' + /auth/keys: + post: + operationId: exchangeAuthCodeForAPIKey + tags: + - OAuth + summary: Exchange authorization code for API key + description: Exchange an authorization code from the PKCE flow for a user-controlled API key + requestBody: + content: + application/json: + schema: + type: object + properties: + code: + type: string + description: The authorization code received from the OAuth redirect + example: auth_code_abc123def456 + code_verifier: + type: string + description: The code verifier if code_challenge was used in the authorization request + example: dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk + code_challenge_method: + type: string + nullable: true + enum: + - S256 + - plain + description: The method used to generate the code challenge + example: S256 + required: + - code + example: + code: auth_code_abc123def456 + code_verifier: dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk + code_challenge_method: S256 + required: true + responses: + '200': + description: Successfully exchanged code for an API key + content: + application/json: + schema: + type: object + properties: + key: + type: string + description: The API key to use for OpenRouter requests example: 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 - required: true - description: The hash identifier of the API key to delete - name: hash - in: path - responses: - '200': - description: API key deleted successfully - content: - application/json: - schema: - type: object - properties: - deleted: - type: boolean - const: true - description: Confirmation that the API key was deleted - example: true - required: - - deleted - example: - deleted: true - '401': - description: Unauthorized - Missing or invalid authentication - content: - application/json: - schema: - $ref: '#/components/schemas/UnauthorizedResponse' - '404': - description: Not Found - API key does not exist - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundResponse' - '429': - description: Too Many Requests - Rate limit exceeded - content: - application/json: - schema: - $ref: '#/components/schemas/TooManyRequestsResponse' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/InternalServerResponse' - operationId: deleteKeys - get: - operationId: getKey - x-speakeasy-name-override: get - tags: - - API Keys - summary: Get a single API key - parameters: - - schema: + user_id: type: string - description: The hash identifier of the API key to retrieve - example: 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 - required: true - description: The hash identifier of the API key to retrieve - name: hash - in: path - responses: - '200': - description: API key details - content: - application/json: - schema: - type: object - properties: - data: - type: object - properties: - hash: - type: string - description: Unique hash identifier for the API key - example: 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 - name: - type: string - description: Name of the API key - example: My Production Key - label: - type: string - description: Human-readable label for the API key - example: Production API Key - disabled: - type: boolean - description: Whether the API key is disabled - example: false - limit: - type: number - nullable: true - description: Spending limit for the API key in USD - example: 100 - limit_remaining: - type: number - nullable: true - description: Remaining spending limit in USD - example: 74.5 - limit_reset: - type: string - nullable: true - description: Type of limit reset for the API key - example: monthly - include_byok_in_limit: - type: boolean - description: Whether to include external BYOK usage in the credit limit - example: false - usage: - type: number - description: Total OpenRouter credit usage (in USD) for the API key - example: 25.5 - usage_daily: - type: number - description: OpenRouter credit usage (in USD) for the current UTC day - example: 25.5 - usage_weekly: - type: number - description: OpenRouter credit usage (in USD) for the current UTC week (Monday-Sunday) - example: 25.5 - usage_monthly: - type: number - description: OpenRouter credit usage (in USD) for the current UTC month - example: 25.5 - byok_usage: - type: number - description: Total external BYOK usage (in USD) for the API key - example: 17.38 - byok_usage_daily: - type: number - description: External BYOK usage (in USD) for the current UTC day - example: 17.38 - byok_usage_weekly: - type: number - description: External BYOK usage (in USD) for the current UTC week (Monday-Sunday) - example: 17.38 - byok_usage_monthly: - type: number - description: External BYOK usage (in USD) for current UTC month - example: 17.38 - created_at: - type: string - description: ISO 8601 timestamp of when the API key was created - example: '2025-08-24T10:30:00Z' - updated_at: - type: string - nullable: true - description: ISO 8601 timestamp of when the API key was last updated - example: '2025-08-24T15:45:00Z' - expires_at: - type: string - nullable: true - format: date-time - description: ISO 8601 UTC timestamp when the API key expires, or null if no expiration - example: '2027-12-31T23:59:59Z' - required: - - hash - - name - - label - - disabled - - limit - - limit_remaining - - limit_reset - - include_byok_in_limit - - usage - - usage_daily - - usage_weekly - - usage_monthly - - byok_usage - - byok_usage_daily - - byok_usage_weekly - - byok_usage_monthly - - created_at - - updated_at - example: - hash: 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 - name: My Production Key - label: Production API Key - disabled: false - limit: 100 - limit_remaining: 74.5 - limit_reset: monthly - include_byok_in_limit: false - usage: 25.5 - usage_daily: 25.5 - usage_weekly: 25.5 - usage_monthly: 25.5 - byok_usage: 17.38 - byok_usage_daily: 17.38 - byok_usage_weekly: 17.38 - byok_usage_monthly: 17.38 - created_at: '2025-08-24T10:30:00Z' - updated_at: '2025-08-24T15:45:00Z' - expires_at: '2027-12-31T23:59:59Z' - description: The API key information - required: - - data - example: - data: - hash: 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 - name: My Production Key - label: Production API Key - disabled: false - limit: 100 - limit_remaining: 74.5 - limit_reset: monthly - include_byok_in_limit: false - usage: 25.5 - usage_daily: 25.5 - usage_weekly: 25.5 - usage_monthly: 25.5 - byok_usage: 17.38 - byok_usage_daily: 17.38 - byok_usage_weekly: 17.38 - byok_usage_monthly: 17.38 - created_at: '2025-08-24T10:30:00Z' - updated_at: '2025-08-24T15:45:00Z' - expires_at: '2027-12-31T23:59:59Z' - '401': - description: Unauthorized - Missing or invalid authentication - content: - application/json: - schema: - $ref: '#/components/schemas/UnauthorizedResponse' - '404': - description: Not Found - API key does not exist - content: - application/json: - schema: - $ref: '#/components/schemas/NotFoundResponse' - '429': - description: Too Many Requests - Rate limit exceeded - content: - application/json: - schema: - $ref: '#/components/schemas/TooManyRequestsResponse' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/InternalServerResponse' - /key: - get: - operationId: getCurrentKey - x-speakeasy-name-override: getCurrentKeyMetadata - tags: - - API Keys - summary: Get current API key - description: Get information on the API key associated with the current authentication session - responses: - '200': - description: API key details - content: - application/json: - schema: - type: object - properties: - data: - type: object - properties: - label: - type: string - description: Human-readable label for the API key - example: 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 - limit: - type: number - nullable: true - description: Spending limit for the API key in USD - example: 100 - usage: - type: number - description: Total OpenRouter credit usage (in USD) for the API key - example: 25.5 - usage_daily: - type: number - description: OpenRouter credit usage (in USD) for the current UTC day - example: 25.5 - usage_weekly: - type: number - description: OpenRouter credit usage (in USD) for the current UTC week (Monday-Sunday) - example: 25.5 - usage_monthly: - type: number - description: OpenRouter credit usage (in USD) for the current UTC month - example: 25.5 - byok_usage: - type: number - description: Total external BYOK usage (in USD) for the API key - example: 17.38 - byok_usage_daily: - type: number - description: External BYOK usage (in USD) for the current UTC day - example: 17.38 - byok_usage_weekly: - type: number - description: External BYOK usage (in USD) for the current UTC week (Monday-Sunday) - example: 17.38 - byok_usage_monthly: - type: number - description: External BYOK usage (in USD) for current UTC month - example: 17.38 - is_free_tier: - type: boolean - description: Whether this is a free tier API key - example: false - is_provisioning_key: - type: boolean - description: Whether this is a provisioning key - example: false - limit_remaining: - type: number - nullable: true - description: Remaining spending limit in USD - example: 74.5 - limit_reset: - type: string - nullable: true - description: Type of limit reset for the API key - example: monthly - include_byok_in_limit: - type: boolean - description: Whether to include external BYOK usage in the credit limit - example: false - expires_at: - type: string - nullable: true - format: date-time - description: ISO 8601 UTC timestamp when the API key expires, or null if no expiration - example: '2027-12-31T23:59:59Z' - rate_limit: - type: object - properties: - requests: - type: number - description: Number of requests allowed per interval - example: 1000 - interval: - type: string - description: Rate limit interval - example: 1h - note: - type: string - description: Note about the rate limit - example: This field is deprecated and safe to ignore. - required: - - requests - - interval - - note - description: Legacy rate limit information about a key. Will always return -1. - deprecated: true - example: - requests: 1000 - interval: 1h - note: This field is deprecated and safe to ignore. - required: - - label - - limit - - usage - - usage_daily - - usage_weekly - - usage_monthly - - byok_usage - - byok_usage_daily - - byok_usage_weekly - - byok_usage_monthly - - is_free_tier - - is_provisioning_key - - limit_remaining - - limit_reset - - include_byok_in_limit - - rate_limit - description: Current API key information - example: - label: sk-or-v1-au78b3456789012345678901234567890 - limit: 100 - usage: 25.5 - usage_daily: 25.5 - usage_weekly: 25.5 - usage_monthly: 25.5 - byok_usage: 17.38 - byok_usage_daily: 17.38 - byok_usage_weekly: 17.38 - byok_usage_monthly: 17.38 - is_free_tier: false - is_provisioning_key: false - limit_remaining: 74.5 - limit_reset: monthly - include_byok_in_limit: false - expires_at: '2027-12-31T23:59:59Z' - rate_limit: - requests: 1000 - interval: 1h - note: This field is deprecated and safe to ignore. - required: - - data - example: - data: - label: sk-or-v1-au78b3456789012345678901234567890 - limit: 100 - usage: 25.5 - usage_daily: 25.5 - usage_weekly: 25.5 - usage_monthly: 25.5 - byok_usage: 17.38 - byok_usage_daily: 17.38 - byok_usage_weekly: 17.38 - byok_usage_monthly: 17.38 - is_free_tier: false - is_provisioning_key: false - limit_remaining: 74.5 - limit_reset: monthly - include_byok_in_limit: false - expires_at: '2027-12-31T23:59:59Z' - rate_limit: - requests: 1000 - interval: 1h - note: This field is deprecated and safe to ignore. - '401': - description: Unauthorized - Authentication required or invalid credentials - content: - application/json: - schema: - $ref: '#/components/schemas/UnauthorizedResponse' - '500': - description: Internal Server Error - Unexpected server error - content: - application/json: - schema: - $ref: '#/components/schemas/InternalServerResponse' - /auth/keys: - post: - operationId: exchangeAuthCodeForAPIKey - tags: - - OAuth - summary: Exchange authorization code for API key - description: Exchange an authorization code from the PKCE flow for a user-controlled API key - requestBody: - content: - application/json: - schema: - type: object - properties: - code: - type: string - description: The authorization code received from the OAuth redirect - example: auth_code_abc123def456 - code_verifier: - type: string - description: The code verifier if code_challenge was used in the authorization request - example: dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk - code_challenge_method: - type: string - nullable: true - enum: - - S256 - - plain - description: The method used to generate the code challenge - example: S256 - x-speakeasy-unknown-values: allow - required: - - code - example: - code: auth_code_abc123def456 - code_verifier: dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk - code_challenge_method: S256 - required: true - responses: - '200': - description: Successfully exchanged code for an API key - content: - application/json: - schema: - type: object - properties: - key: - type: string - description: The API key to use for OpenRouter requests - example: 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 - user_id: - type: string - nullable: true - description: User ID associated with the API key - example: user_2yOPcMpKoQhcd4bVgSMlELRaIah - required: - - key - - user_id - example: - key: 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 - user_id: user_2yOPcMpKoQhcd4bVgSMlELRaIah - '400': - description: Bad Request - Invalid request parameters or malformed input - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestResponse' - '403': - description: Forbidden - Authentication successful but insufficient permissions - content: - application/json: - schema: - $ref: '#/components/schemas/ForbiddenResponse' - '500': - description: Internal Server Error - Unexpected server error - content: - application/json: - schema: - $ref: '#/components/schemas/InternalServerResponse' - /auth/keys/code: - post: - x-speakeasy-name-override: createAuthCode - tags: - - OAuth - summary: Create authorization code - description: Create an authorization code for the PKCE flow to generate a user-controlled API key - requestBody: - content: - application/json: - schema: - type: object - properties: - callback_url: - type: string - format: uri - description: >- - The callback URL to redirect to after authorization. Note, only https URLs on ports 443 and 3000 are allowed. - example: https://myapp.com/auth/callback - code_challenge: - type: string - description: PKCE code challenge for enhanced security - example: E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM - code_challenge_method: - type: string - enum: - - S256 - - plain - description: The method used to generate the code challenge - example: S256 - x-speakeasy-unknown-values: allow - limit: - type: number - description: Credit limit for the API key to be created - example: 100 - expires_at: - type: string - nullable: true - format: date-time - description: Optional expiration time for the API key to be created - required: - - callback_url - example: - callback_url: https://myapp.com/auth/callback - code_challenge: E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM - code_challenge_method: S256 - limit: 100 - required: true - responses: - '200': - description: Successfully created authorization code - content: - application/json: - schema: - type: object - properties: - data: - type: object - properties: - id: - type: string - description: The authorization code ID to use in the exchange request - example: auth_code_xyz789 - app_id: - type: number - description: The application ID associated with this auth code - example: 12345 - created_at: - type: string - description: ISO 8601 timestamp of when the auth code was created - example: '2025-08-24T10:30:00Z' - required: - - id - - app_id - - created_at - description: Auth code data - example: - id: auth_code_xyz789 - app_id: 12345 - created_at: '2025-08-24T10:30:00Z' - required: - - data - '400': - description: Bad Request - Invalid request parameters or malformed input - content: - application/json: - schema: - $ref: '#/components/schemas/BadRequestResponse' - '401': - description: Unauthorized - Authentication required or invalid credentials - content: - application/json: - schema: - $ref: '#/components/schemas/UnauthorizedResponse' - '500': - description: Internal Server Error - Unexpected server error - content: - application/json: - schema: - $ref: '#/components/schemas/InternalServerResponse' - operationId: createAuthKeysCode - /chat/completions: - post: - summary: Create a chat completion - operationId: sendChatCompletionRequest - x-speakeasy-group: chat - x-speakeasy-name-override: send - x-speakeasy-stream-request-field: stream - description: >- - Sends a request for a model response for the given chat conversation. Supports both streaming and non-streaming modes. - tags: - - Chat - requestBody: - required: true - description: Chat completion request parameters - content: - application/json: - schema: - $ref: '#/components/schemas/ChatGenerationParams' - responses: - '200': - description: Successful chat completion response - content: - application/json: - schema: - $ref: '#/components/schemas/ChatResponse' - description: Chat completion response - text/event-stream: - x-speakeasy-sse-sentinel: '[DONE]' - schema: - $ref: '#/components/schemas/ChatStreamingResponseChunk' - '400': - description: Bad request - invalid parameters - content: - application/json: - schema: - $ref: '#/components/schemas/ChatError' - '401': - description: Unauthorized - invalid API key - content: - application/json: - schema: - $ref: '#/components/schemas/ChatError' - '429': - description: Too many requests - rate limit exceeded - content: - application/json: - schema: - $ref: '#/components/schemas/ChatError' - '500': - description: Internal server error - content: - application/json: - schema: - $ref: '#/components/schemas/ChatError' - /completions: - post: - summary: Create a completion - x-speakeasy-group: completions - x-speakeasy-name-override: generate - x-speakeasy-stream-request-field: stream - description: Creates a completion for the provided prompt and parameters. Supports both streaming and non-streaming modes. - tags: - - Completions - requestBody: - required: true - description: Completion request parameters - content: - application/json: - schema: - $ref: '#/components/schemas/CompletionCreateParams' - responses: - '200': - description: Successful completion response - content: - application/json: - schema: - $ref: '#/components/schemas/CompletionResponse' - description: Completion response - '400': - description: Bad request - invalid parameters - content: - application/json: - schema: - $ref: '#/components/schemas/ChatError' - '401': - description: Unauthorized - invalid API key - content: - application/json: - schema: - $ref: '#/components/schemas/ChatError' - '429': - description: Too many requests - rate limit exceeded - content: - application/json: - schema: - $ref: '#/components/schemas/ChatError' - '500': - description: Internal server error - content: - application/json: - schema: - $ref: '#/components/schemas/ChatError' - operationId: createCompletions + nullable: true + description: User ID associated with the API key + example: user_2yOPcMpKoQhcd4bVgSMlELRaIah + required: + - key + - user_id + example: + key: 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 + user_id: user_2yOPcMpKoQhcd4bVgSMlELRaIah + '400': + description: Bad Request - Invalid request parameters or malformed input + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestResponse' + '403': + description: Forbidden - Authentication successful but insufficient permissions + content: + application/json: + schema: + $ref: '#/components/schemas/ForbiddenResponse' + '500': + description: Internal Server Error - Unexpected server error + content: + application/json: + schema: + $ref: '#/components/schemas/InternalServerResponse' + /auth/keys/code: + post: + x-speakeasy-name-override: createAuthCode + tags: + - OAuth + summary: Create authorization code + description: Create an authorization code for the PKCE flow to generate a user-controlled API key + requestBody: + content: + application/json: + schema: + type: object + properties: + callback_url: + type: string + format: uri + description: >- + The callback URL to redirect to after authorization. Note, only https URLs on ports 443 and 3000 are + allowed. + example: https://myapp.com/auth/callback + code_challenge: + type: string + description: PKCE code challenge for enhanced security + example: E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM + code_challenge_method: + type: string + enum: + - S256 + - plain + description: The method used to generate the code challenge + example: S256 + limit: + type: number + description: Credit limit for the API key to be created + example: 100 + expires_at: + type: string + nullable: true + format: date-time + description: Optional expiration time for the API key to be created + required: + - callback_url + example: + callback_url: https://myapp.com/auth/callback + code_challenge: E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM + code_challenge_method: S256 + limit: 100 + required: true + responses: + '200': + description: Successfully created authorization code + content: + application/json: + schema: + type: object + properties: + data: + type: object + properties: + id: + type: string + description: The authorization code ID to use in the exchange request + example: auth_code_xyz789 + app_id: + type: number + description: The application ID associated with this auth code + example: 12345 + created_at: + type: string + description: ISO 8601 timestamp of when the auth code was created + example: '2025-08-24T10:30:00Z' + required: + - id + - app_id + - created_at + description: Auth code data + example: + id: auth_code_xyz789 + app_id: 12345 + created_at: '2025-08-24T10:30:00Z' + required: + - data + '400': + description: Bad Request - Invalid request parameters or malformed input + content: + application/json: + schema: + $ref: '#/components/schemas/BadRequestResponse' + '401': + description: Unauthorized - Authentication required or invalid credentials + content: + application/json: + schema: + $ref: '#/components/schemas/UnauthorizedResponse' + '500': + description: Internal Server Error - Unexpected server error + content: + application/json: + schema: + $ref: '#/components/schemas/InternalServerResponse' + operationId: createAuthKeysCode + /chat/completions: + post: + summary: Create a chat completion + operationId: sendChatCompletionRequest + x-speakeasy-group: chat + x-speakeasy-name-override: send + x-speakeasy-stream-request-field: stream + description: >- + Sends a request for a model response for the given chat conversation. Supports both streaming and non-streaming + modes. + tags: + - Chat + requestBody: + required: true + description: Chat completion request parameters + content: + application/json: + schema: + $ref: '#/components/schemas/ChatGenerationParams' + responses: + '200': + description: Successful chat completion response + content: + application/json: + schema: + $ref: '#/components/schemas/ChatResponse' + description: Chat completion response + text/event-stream: + x-speakeasy-sse-sentinel: '[DONE]' + schema: + $ref: '#/components/schemas/ChatStreamingResponseChunk' + '400': + description: Bad request - invalid parameters + content: + application/json: + schema: + $ref: '#/components/schemas/ChatError' + '401': + description: Unauthorized - invalid API key + content: + application/json: + schema: + $ref: '#/components/schemas/ChatError' + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + $ref: '#/components/schemas/ChatError' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/ChatError' + /completions: + post: + summary: Create a completion + x-speakeasy-group: completions + x-speakeasy-name-override: generate + x-speakeasy-stream-request-field: stream + description: Creates a completion for the provided prompt and parameters. Supports both streaming and non-streaming modes. + tags: + - Completions + requestBody: + required: true + description: Completion request parameters + content: + application/json: + schema: + $ref: '#/components/schemas/CompletionCreateParams' + responses: + '200': + description: Successful completion response + content: + application/json: + schema: + $ref: '#/components/schemas/CompletionResponse' + description: Completion response + '400': + description: Bad request - invalid parameters + content: + application/json: + schema: + $ref: '#/components/schemas/ChatError' + '401': + description: Unauthorized - invalid API key + content: + application/json: + schema: + $ref: '#/components/schemas/ChatError' + '429': + description: Too many requests - rate limit exceeded + content: + application/json: + schema: + $ref: '#/components/schemas/ChatError' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/ChatError' + operationId: createCompletions servers: - - url: https://openrouter.ai/api/v1 - description: Production server - x-speakeasy-server-id: production + - url: https://openrouter.ai/api/v1 + description: Production server + x-speakeasy-server-id: production security: - - apiKey: [] + - apiKey: [] externalDocs: - description: OpenRouter Documentation - url: https://openrouter.ai/docs + description: OpenRouter Documentation + url: https://openrouter.ai/docs tags: - - name: API Keys - description: API key management endpoints - - name: Analytics - description: Analytics and usage endpoints - - name: Chat - description: Chat completion endpoints - - name: Completions - description: Text completion endpoints - - name: Credits - description: Credit management endpoints - - name: Embeddings - description: Text embedding endpoints - - name: Endpoints - description: Endpoint information - - name: Generations - description: Generation history endpoints - - name: Models - description: Model information endpoints - - name: OAuth - description: OAuth authentication endpoints - - name: Parameters - description: Parameters endpoints - - name: Providers - description: Provider information endpoints - - name: beta.responses - description: beta.responses endpoints + - name: API Keys + description: API key management endpoints + - name: Analytics + description: Analytics and usage endpoints + - name: Chat + description: Chat completion endpoints + - name: Completions + description: Text completion endpoints + - name: Credits + description: Credit management endpoints + - name: Embeddings + description: Text embedding endpoints + - name: Endpoints + description: Endpoint information + - name: Generations + description: Generation history endpoints + - name: Models + description: Model information endpoints + - name: OAuth + description: OAuth authentication endpoints + - name: Parameters + description: Parameters endpoints + - name: Providers + description: Provider information endpoints + - name: beta.responses + description: beta.responses endpoints x-fern-base-path: / x-retry-strategy: - type: exponential - initialDelay: 500 - maxDelay: 60000 - maxAttempts: 3 -x-speakeasy-globals: - parameters: - - $ref: "#/components/parameters/AppIdentifier" - - $ref: "#/components/parameters/AppDisplayName" + type: exponential + initialDelay: 500 + maxDelay: 60000 + maxAttempts: 3 diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml index 7e8d2898..59b3facd 100644 --- a/.speakeasy/out.openapi.yaml +++ b/.speakeasy/out.openapi.yaml @@ -3464,12 +3464,14 @@ components: - AionLabs - Alibaba - Amazon Bedrock + - Amazon Nova - Anthropic - - Arcee + - Arcee AI - AtlasCloud - Avian - Azure - BaseTen + - BytePlus - Black Forest Labs - Cerebras - Chutes @@ -3484,6 +3486,7 @@ components: - Fireworks - Friendli - GMICloud + - GoPomelo - Google - Google AI Studio - Groq @@ -3514,6 +3517,7 @@ components: - SambaNova - SiliconFlow - Stealth + - StreamLake - Switchpoint - Targon - Together @@ -3648,18 +3652,13 @@ components: nullable: true store: type: boolean - nullable: true + const: false + default: false service_tier: - allOf: - - $ref: '#/components/schemas/OpenAIResponsesServiceTier' - - enum: - - auto - - default - - flex - - scale - - priority - example: auto - x-speakeasy-unknown-values: allow + type: string + enum: + - auto + default: auto truncation: allOf: - $ref: '#/components/schemas/OpenAIResponsesTruncation' @@ -3803,6 +3802,14 @@ components: x-speakeasy-unknown-values: allow required: - id + - type: object + properties: + id: + type: string + enum: + - response-healing + required: + - id description: Plugins you want to enable for this request, including their settings. user: type: string @@ -4597,6 +4604,10 @@ components: status: default uptime_last_30m: 99.5 supports_implicit_caching: true + __schema0: + anyOf: + - $ref: '#/components/schemas/ChatCompletionFinishReason' + - type: 'null' ModelName: type: string ChatMessageContentItemText: @@ -4607,6 +4618,8 @@ components: const: text text: type: string + cache_control: + $ref: '#/components/schemas/ChatMessageContentItemCacheControl' required: - type - text @@ -4669,7 +4682,12 @@ components: type: string const: input_video video_url: - $ref: '#/components/schemas/VideoURL' + type: object + properties: + url: + type: string + required: + - url required: - type - video_url @@ -4689,40 +4707,12 @@ components: - type - video_url type: object - VideoURL: - type: object - properties: - url: - type: string - required: - - url - ChatMessageContentItemFile: - type: object - properties: - type: - type: string - const: file - file: - type: object - properties: - file_data: - type: string - file_id: - type: string - filename: - type: string - required: - - file_data - required: - - type - - file ChatMessageContentItem: oneOf: - $ref: '#/components/schemas/ChatMessageContentItemText' - $ref: '#/components/schemas/ChatMessageContentItemImage' - $ref: '#/components/schemas/ChatMessageContentItemAudio' - $ref: '#/components/schemas/ChatMessageContentItemVideo' - - $ref: '#/components/schemas/ChatMessageContentItemFile' type: object discriminator: propertyName: type @@ -4732,7 +4722,6 @@ components: input_audio: '#/components/schemas/ChatMessageContentItemAudio' input_video: '#/components/schemas/ChatMessageContentItemVideo' video_url: '#/components/schemas/ChatMessageContentItemVideo' - file: '#/components/schemas/ChatMessageContentItemFile' ChatMessageToolCall: type: object properties: @@ -4856,16 +4845,14 @@ components: - prompt_tokens - total_tokens ChatCompletionFinishReason: - anyOf: - - type: string - enum: - - tool_calls - - stop - - length - - content_filter - - error - x-speakeasy-unknown-values: allow - - type: 'null' + type: string + enum: + - tool_calls + - stop + - length + - content_filter + - error + x-speakeasy-unknown-values: allow JSONSchemaConfig: type: object properties: @@ -4907,6 +4894,20 @@ components: required: - type - grammar + ChatMessageContentItemCacheControl: + type: object + properties: + type: + type: string + const: ephemeral + ttl: + type: string + enum: + - 5m + - 1h + x-speakeasy-unknown-values: allow + required: + - type SystemMessage: type: object properties: @@ -5224,7 +5225,7 @@ components: type: object properties: finish_reason: - $ref: '#/components/schemas/ChatCompletionFinishReason' + $ref: '#/components/schemas/__schema0' index: type: number message: @@ -5285,7 +5286,7 @@ components: delta: $ref: '#/components/schemas/ChatStreamingMessageChunk' finish_reason: - $ref: '#/components/schemas/ChatCompletionFinishReason' + $ref: '#/components/schemas/__schema0' index: type: number logprobs: @@ -5618,6 +5619,12 @@ components: - type: 'null' finish_reason: $ref: '#/components/schemas/CompletionFinishReason' + native_finish_reason: + type: string + reasoning: + anyOf: + - type: string + - type: 'null' required: - text - index @@ -5635,6 +5642,8 @@ components: type: number model: type: string + provider: + type: string system_fingerprint: type: string choices: @@ -5853,6 +5862,26 @@ paths: application/json: schema: type: object + properties: + data: + type: object + properties: + total_credits: + type: number + description: Total credits purchased + example: 100.5 + total_usage: + type: number + description: Total credits used + example: 25.75 + required: + - total_credits + - total_usage + example: + total_credits: 100.5 + total_usage: 25.75 + required: + - data description: Total credits purchased and used example: data: @@ -6754,12 +6783,14 @@ paths: - AionLabs - Alibaba - Amazon Bedrock + - Amazon Nova - Anthropic - - Arcee + - Arcee AI - AtlasCloud - Avian - Azure - BaseTen + - BytePlus - Black Forest Labs - Cerebras - Chutes @@ -6774,6 +6805,7 @@ paths: - Fireworks - Friendli - GMICloud + - GoPomelo - Google - Google AI Studio - Groq @@ -6804,6 +6836,7 @@ paths: - SambaNova - SiliconFlow - Stealth + - StreamLake - Switchpoint - Targon - Together @@ -8413,5 +8446,3 @@ x-speakeasy-globals: parameters: - $ref: "#/components/parameters/AppIdentifier" - $ref: "#/components/parameters/AppDisplayName" - - $ref: "#/components/parameters/AppIdentifier" - - $ref: "#/components/parameters/AppDisplayName" diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 3f0d2fe6..11d9a2ca 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,24 +1,24 @@ -speakeasyVersion: 1.660.0 +speakeasyVersion: 1.666.0 sources: OpenRouter API: sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:01256c8494de6bfc13c36d82ae316a6a13d402194f844618bcd4d59e34f325f3 - sourceBlobDigest: sha256:4c80e48fd5e1cd030e68d664eb93984b4d5946867252ff1755a2bd2a05eccd4e + sourceRevisionDigest: sha256:430fa9a22e960fd04a393c99eb3c967b11b5fbda6b19a104bfcd745efe887df3 + sourceBlobDigest: sha256:c65ea29dcae3bb0b31cba1f207741a8a835620bc6e8921e614a7c371055d850c tags: - latest - - matt-cache-control + - updates - 1.0.0 targets: openrouter: source: OpenRouter API sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:01256c8494de6bfc13c36d82ae316a6a13d402194f844618bcd4d59e34f325f3 - sourceBlobDigest: sha256:4c80e48fd5e1cd030e68d664eb93984b4d5946867252ff1755a2bd2a05eccd4e + sourceRevisionDigest: sha256:430fa9a22e960fd04a393c99eb3c967b11b5fbda6b19a104bfcd745efe887df3 + sourceBlobDigest: sha256:c65ea29dcae3bb0b31cba1f207741a8a835620bc6e8921e614a7c371055d850c codeSamplesNamespace: open-router-chat-completions-api-typescript-code-samples - codeSamplesRevisionDigest: sha256:b9f865c93ad3b73a288706cfe0cdbb54a0a2fe160c405b59bc45f567118e554a + codeSamplesRevisionDigest: sha256:6f8f3b329dff31738a363e4df0f0c73002798aa996735b46a56968936e65b5f4 workflow: workflowVersion: 1.0.0 - speakeasyVersion: latest + speakeasyVersion: 1.666.0 sources: OpenRouter API: inputs: diff --git a/.speakeasy/workflow.yaml b/.speakeasy/workflow.yaml index 0d55eb8a..fd558b15 100644 --- a/.speakeasy/workflow.yaml +++ b/.speakeasy/workflow.yaml @@ -1,5 +1,5 @@ workflowVersion: 1.0.0 -speakeasyVersion: latest +speakeasyVersion: 1.666.0 sources: OpenRouter API: inputs: diff --git a/biome.json b/biome.json new file mode 100644 index 00000000..9b8af8ca --- /dev/null +++ b/biome.json @@ -0,0 +1,171 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.3.8/schema.json", + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true, + "defaultBranch": "main" + }, + "files": { + "ignoreUnknown": false, + "includes": [ + "**", + "./.vscode/extensions/**", + "!**/*.json", + "!**/*.test.ts.snap", + "!**/logger.ts" + ] + }, + "formatter": { + "enabled": true, + "indentStyle": "space", + "indentWidth": 2, + "lineWidth": 100, + "expand": "always", + "attributePosition": "multiline" + }, + "assist": { + "actions": { + "source": { + "organizeImports": { + "level": "on", + "options": { + "groups": [ + { + "type": true + }, + ":BLANK_LINE:", + { + "type": false + }, + [ + ":NODE:" + ], + ":BLANK_LINE:", + [ + "!@openrouter-monorepo/**" + ], + ":BLANK_LINE:", + [ + "@openrouter-monorepo/**", + "@/**" + ], + ":BLANK_LINE:", + ":ALIAS:" + ] + } + } + } + } + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "nursery": { + "noFloatingPromises": "off" + }, + "a11y": { + "useSemanticElements": "off" + }, + "complexity": { + "useLiteralKeys": "off", + "noExtraBooleanCast": "off", + "noForEach": "off", + "noBannedTypes": "error", + "noUselessSwitchCase": "off" + }, + "style": { + "noNonNullAssertion": "off", + "useNodejsImportProtocol": "error", + "useTemplate": "off", + "useBlockStatements": "error", + "noParameterAssign": "error", + "useConst": "error", + "useAsConstAssertion": "error", + "useDefaultParameterLast": "error", + "useEnumInitializers": "error", + "useSelfClosingElements": "error", + "useSingleVarDeclarator": "error", + "noUnusedTemplateLiteral": "error", + "useNumberNamespace": "error", + "noInferrableTypes": "error", + "noUselessElse": "error", + "useImportType": { + "level": "on", + "options": { + "style": "separatedType" + } + }, + "noRestrictedImports": { + "level": "error", + "options": { + "paths": { + "node:module": "Don't use `node:module`. Did you mean to import `wrap` from our `@openrouter-monorepo/type-utils/result-monad` package?", + "crypto": "Use `node:crypto` instead of `crypto` to follow the Node.js import protocol." + } + } + } + }, + "correctness": { + "noUnusedImports": "error", + "useExhaustiveDependencies": "off", + "noUnknownFunction": "off", + "noChildrenProp": "off", + "noInnerDeclarations": "error", + "useParseIntRadix": "error" + }, + "suspicious": { + "noExplicitAny": "warn", + "noArrayIndexKey": "off", + "noAssignInExpressions": "error", + "noAsyncPromiseExecutor": "off", + "noFallthroughSwitchClause": "error", + "noConsole": "error", + "noDoubleEquals": { + "level": "error", + "options": { + "ignoreNull": false + } + }, + "noExtraNonNullAssertion": "error", + "noUnknownAtRules": "off" + }, + "performance": { + "recommended": true, + "noAccumulatingSpread": "error" + }, + "security": { + "recommended": true + } + }, + "includes": [ + "**", + "!**/*.test.ts.snap" + ] + }, + "javascript": { + "formatter": { + "expand": "always", + "lineWidth": 100, + "arrowParentheses": "always", + "jsxQuoteStyle": "single", + "attributePosition": "multiline", + "quoteProperties": "asNeeded", + "trailingCommas": "all", + "semicolons": "always", + "bracketSpacing": true, + "bracketSameLine": false, + "quoteStyle": "single", + "enabled": true + } + }, + "css": { + "parser": { + "tailwindDirectives": true + }, + "formatter": { + "quoteStyle": "single" + } + } +} diff --git a/docs/models/assistantmessage.md b/docs/models/assistantmessage.md index 397fae22..93ce87bd 100644 --- a/docs/models/assistantmessage.md +++ b/docs/models/assistantmessage.md @@ -14,7 +14,7 @@ let value: AssistantMessage = { | Field | Type | Required | Description | | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | -| `role` | *string* | :heavy_check_mark: | N/A | +| `role` | *"assistant"* | :heavy_check_mark: | N/A | | `content` | *models.AssistantMessageContent* | :heavy_minus_sign: | N/A | | `name` | *string* | :heavy_minus_sign: | N/A | | `toolCalls` | [models.ChatMessageToolCall](../models/chatmessagetoolcall.md)[] | :heavy_minus_sign: | N/A | diff --git a/docs/models/chatgenerationparamsresponseformatjsonobject.md b/docs/models/chatgenerationparamsresponseformatjsonobject.md index 183130e2..814b5d85 100644 --- a/docs/models/chatgenerationparamsresponseformatjsonobject.md +++ b/docs/models/chatgenerationparamsresponseformatjsonobject.md @@ -14,4 +14,4 @@ let value: ChatGenerationParamsResponseFormatJSONObject = { | Field | Type | Required | Description | | ------------------ | ------------------ | ------------------ | ------------------ | -| `type` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file +| `type` | *"json_object"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/chatgenerationparamsresponseformatpython.md b/docs/models/chatgenerationparamsresponseformatpython.md index 0d9982fa..8b822ea3 100644 --- a/docs/models/chatgenerationparamsresponseformatpython.md +++ b/docs/models/chatgenerationparamsresponseformatpython.md @@ -14,4 +14,4 @@ let value: ChatGenerationParamsResponseFormatPython = { | Field | Type | Required | Description | | ------------------ | ------------------ | ------------------ | ------------------ | -| `type` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file +| `type` | *"python"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/chatgenerationparamsresponseformattext.md b/docs/models/chatgenerationparamsresponseformattext.md index e4cd2e76..1882e099 100644 --- a/docs/models/chatgenerationparamsresponseformattext.md +++ b/docs/models/chatgenerationparamsresponseformattext.md @@ -14,4 +14,4 @@ let value: ChatGenerationParamsResponseFormatText = { | Field | Type | Required | Description | | ------------------ | ------------------ | ------------------ | ------------------ | -| `type` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file +| `type` | *"text"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/chatmessagecontentitem.md b/docs/models/chatmessagecontentitem.md index d9fef05c..da9d3c15 100644 --- a/docs/models/chatmessagecontentitem.md +++ b/docs/models/chatmessagecontentitem.md @@ -57,14 +57,3 @@ const value: models.ChatMessageContentItemVideo = { }; ``` -### `models.ChatMessageContentItemFile` - -```typescript -const value: models.ChatMessageContentItemFile = { - type: "file", - file: { - fileData: "", - }, -}; -``` - diff --git a/docs/models/chatmessagecontentitemaudio.md b/docs/models/chatmessagecontentitemaudio.md index bb25a18e..e72e7a75 100644 --- a/docs/models/chatmessagecontentitemaudio.md +++ b/docs/models/chatmessagecontentitemaudio.md @@ -18,5 +18,5 @@ let value: ChatMessageContentItemAudio = { | Field | Type | Required | Description | | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -| `type` | *string* | :heavy_check_mark: | N/A | +| `type` | *"input_audio"* | :heavy_check_mark: | N/A | | `inputAudio` | [models.ChatMessageContentItemAudioInputAudio](../models/chatmessagecontentitemaudioinputaudio.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/chatmessagecontentitemcachecontrol.md b/docs/models/chatmessagecontentitemcachecontrol.md new file mode 100644 index 00000000..1ed1fa42 --- /dev/null +++ b/docs/models/chatmessagecontentitemcachecontrol.md @@ -0,0 +1,18 @@ +# ChatMessageContentItemCacheControl + +## Example Usage + +```typescript +import { ChatMessageContentItemCacheControl } from "@openrouter/sdk/models"; + +let value: ChatMessageContentItemCacheControl = { + type: "ephemeral", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | +| `type` | *"ephemeral"* | :heavy_check_mark: | N/A | +| `ttl` | [models.Ttl](../models/ttl.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/chatmessagecontentitemfile.md b/docs/models/chatmessagecontentitemfile.md deleted file mode 100644 index e2b0d1fb..00000000 --- a/docs/models/chatmessagecontentitemfile.md +++ /dev/null @@ -1,21 +0,0 @@ -# ChatMessageContentItemFile - -## Example Usage - -```typescript -import { ChatMessageContentItemFile } from "@openrouter/sdk/models"; - -let value: ChatMessageContentItemFile = { - type: "file", - file: { - fileData: "", - }, -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | -| `type` | *string* | :heavy_check_mark: | N/A | -| `file` | [models.FileT](../models/filet.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/chatmessagecontentitemimage.md b/docs/models/chatmessagecontentitemimage.md index aa9882d5..335bfe65 100644 --- a/docs/models/chatmessagecontentitemimage.md +++ b/docs/models/chatmessagecontentitemimage.md @@ -17,5 +17,5 @@ let value: ChatMessageContentItemImage = { | Field | Type | Required | Description | | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | -| `type` | *string* | :heavy_check_mark: | N/A | +| `type` | *"image_url"* | :heavy_check_mark: | N/A | | `imageUrl` | [models.ImageUrl](../models/imageurl.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/chatmessagecontentitemtext.md b/docs/models/chatmessagecontentitemtext.md index 621eef2b..1aa324dd 100644 --- a/docs/models/chatmessagecontentitemtext.md +++ b/docs/models/chatmessagecontentitemtext.md @@ -13,7 +13,8 @@ let value: ChatMessageContentItemText = { ## Fields -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `type` | *string* | :heavy_check_mark: | N/A | -| `text` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `type` | *"text"* | :heavy_check_mark: | N/A | +| `text` | *string* | :heavy_check_mark: | N/A | +| `cacheControl` | [models.ChatMessageContentItemCacheControl](../models/chatmessagecontentitemcachecontrol.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/chatmessagecontentitemvideoinputvideo.md b/docs/models/chatmessagecontentitemvideoinputvideo.md index 292a44ae..44fd3739 100644 --- a/docs/models/chatmessagecontentitemvideoinputvideo.md +++ b/docs/models/chatmessagecontentitemvideoinputvideo.md @@ -15,7 +15,7 @@ let value: ChatMessageContentItemVideoInputVideo = { ## Fields -| Field | Type | Required | Description | -| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | -| `type` | *string* | :heavy_check_mark: | N/A | -| `videoUrl` | [models.VideoURL](../models/videourl.md) | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | +| `type` | *"input_video"* | :heavy_check_mark: | N/A | +| `videoUrl` | [models.VideoUrl1](../models/videourl1.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/chatmessagecontentitemvideovideourl.md b/docs/models/chatmessagecontentitemvideovideourl.md index c8118e04..6853983e 100644 --- a/docs/models/chatmessagecontentitemvideovideourl.md +++ b/docs/models/chatmessagecontentitemvideovideourl.md @@ -15,7 +15,7 @@ let value: ChatMessageContentItemVideoVideoURL = { ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -| `type` | *string* | :heavy_check_mark: | N/A | -| `videoUrl` | [models.ChatMessageContentItemVideoVideoUrlVideoUrl](../models/chatmessagecontentitemvideovideourlvideourl.md) | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | +| `type` | *"video_url"* | :heavy_check_mark: | N/A | +| `videoUrl` | [models.VideoUrl2](../models/videourl2.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/chatmessagetoolcall.md b/docs/models/chatmessagetoolcall.md index 33215708..a56e6bc8 100644 --- a/docs/models/chatmessagetoolcall.md +++ b/docs/models/chatmessagetoolcall.md @@ -20,5 +20,5 @@ let value: ChatMessageToolCall = { | Field | Type | Required | Description | | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | | `id` | *string* | :heavy_check_mark: | N/A | -| `type` | *string* | :heavy_check_mark: | N/A | +| `type` | *"function"* | :heavy_check_mark: | N/A | | `function` | [models.ChatMessageToolCallFunction](../models/chatmessagetoolcallfunction.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/chatresponse.md b/docs/models/chatresponse.md index f9acf36c..2cab9bbc 100644 --- a/docs/models/chatresponse.md +++ b/docs/models/chatresponse.md @@ -22,6 +22,6 @@ let value: ChatResponse = { | `choices` | [models.ChatResponseChoice](../models/chatresponsechoice.md)[] | :heavy_check_mark: | N/A | | `created` | *number* | :heavy_check_mark: | N/A | | `model` | *string* | :heavy_check_mark: | N/A | -| `object` | *string* | :heavy_check_mark: | N/A | +| `object` | *"chat.completion"* | :heavy_check_mark: | N/A | | `systemFingerprint` | *string* | :heavy_minus_sign: | N/A | | `usage` | [models.ChatGenerationTokenUsage](../models/chatgenerationtokenusage.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/chatstreamingmessagetoolcall.md b/docs/models/chatstreamingmessagetoolcall.md index 5f7085db..d090a9e6 100644 --- a/docs/models/chatstreamingmessagetoolcall.md +++ b/docs/models/chatstreamingmessagetoolcall.md @@ -16,5 +16,5 @@ let value: ChatStreamingMessageToolCall = { | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | | `index` | *number* | :heavy_check_mark: | N/A | | `id` | *string* | :heavy_minus_sign: | N/A | -| `type` | *string* | :heavy_minus_sign: | N/A | +| `type` | *"function"* | :heavy_minus_sign: | N/A | | `function` | [models.ChatStreamingMessageToolCallFunction](../models/chatstreamingmessagetoolcallfunction.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/chatstreamingresponsechunkdata.md b/docs/models/chatstreamingresponsechunkdata.md index 550add27..65dbdc79 100644 --- a/docs/models/chatstreamingresponsechunkdata.md +++ b/docs/models/chatstreamingresponsechunkdata.md @@ -22,7 +22,7 @@ let value: ChatStreamingResponseChunkData = { | `choices` | [models.ChatStreamingChoice](../models/chatstreamingchoice.md)[] | :heavy_check_mark: | N/A | | `created` | *number* | :heavy_check_mark: | N/A | | `model` | *string* | :heavy_check_mark: | N/A | -| `object` | *string* | :heavy_check_mark: | N/A | +| `object` | *"chat.completion.chunk"* | :heavy_check_mark: | N/A | | `systemFingerprint` | *string* | :heavy_minus_sign: | N/A | | `error` | [models.ChatStreamingResponseChunkError](../models/chatstreamingresponsechunkerror.md) | :heavy_minus_sign: | N/A | | `usage` | [models.ChatGenerationTokenUsage](../models/chatgenerationtokenusage.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/completionchoice.md b/docs/models/completionchoice.md index 1c6a04db..6cccb1f7 100644 --- a/docs/models/completionchoice.md +++ b/docs/models/completionchoice.md @@ -33,4 +33,6 @@ let value: CompletionChoice = { | `text` | *string* | :heavy_check_mark: | N/A | | `index` | *number* | :heavy_check_mark: | N/A | | `logprobs` | [models.CompletionLogprobs](../models/completionlogprobs.md) | :heavy_check_mark: | N/A | -| `finishReason` | [models.CompletionFinishReason](../models/completionfinishreason.md) | :heavy_check_mark: | N/A | \ No newline at end of file +| `finishReason` | [models.CompletionFinishReason](../models/completionfinishreason.md) | :heavy_check_mark: | N/A | +| `nativeFinishReason` | *string* | :heavy_minus_sign: | N/A | +| `reasoning` | *string* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/completioncreateparamsresponseformatjsonobject.md b/docs/models/completioncreateparamsresponseformatjsonobject.md index 9c88b1c8..22c66a74 100644 --- a/docs/models/completioncreateparamsresponseformatjsonobject.md +++ b/docs/models/completioncreateparamsresponseformatjsonobject.md @@ -14,4 +14,4 @@ let value: CompletionCreateParamsResponseFormatJSONObject = { | Field | Type | Required | Description | | ------------------ | ------------------ | ------------------ | ------------------ | -| `type` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file +| `type` | *"json_object"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/completioncreateparamsresponseformatpython.md b/docs/models/completioncreateparamsresponseformatpython.md index f04eadbd..ac8fe047 100644 --- a/docs/models/completioncreateparamsresponseformatpython.md +++ b/docs/models/completioncreateparamsresponseformatpython.md @@ -14,4 +14,4 @@ let value: CompletionCreateParamsResponseFormatPython = { | Field | Type | Required | Description | | ------------------ | ------------------ | ------------------ | ------------------ | -| `type` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file +| `type` | *"python"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/completioncreateparamsresponseformattext.md b/docs/models/completioncreateparamsresponseformattext.md index 5a182dda..5b405e04 100644 --- a/docs/models/completioncreateparamsresponseformattext.md +++ b/docs/models/completioncreateparamsresponseformattext.md @@ -14,4 +14,4 @@ let value: CompletionCreateParamsResponseFormatText = { | Field | Type | Required | Description | | ------------------ | ------------------ | ------------------ | ------------------ | -| `type` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file +| `type` | *"text"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/completionresponse.md b/docs/models/completionresponse.md index 325daa5c..f4cc1b4a 100644 --- a/docs/models/completionresponse.md +++ b/docs/models/completionresponse.md @@ -19,9 +19,10 @@ let value: CompletionResponse = { | Field | Type | Required | Description | | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | | `id` | *string* | :heavy_check_mark: | N/A | -| `object` | *string* | :heavy_check_mark: | N/A | +| `object` | *"text_completion"* | :heavy_check_mark: | N/A | | `created` | *number* | :heavy_check_mark: | N/A | | `model` | *string* | :heavy_check_mark: | N/A | +| `provider` | *string* | :heavy_minus_sign: | N/A | | `systemFingerprint` | *string* | :heavy_minus_sign: | N/A | | `choices` | [models.CompletionChoice](../models/completionchoice.md)[] | :heavy_check_mark: | N/A | | `usage` | [models.CompletionUsage](../models/completionusage.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/filecitation.md b/docs/models/filecitation.md index 892579f7..adfa205a 100644 --- a/docs/models/filecitation.md +++ b/docs/models/filecitation.md @@ -15,9 +15,9 @@ let value: FileCitation = { ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -| `type` | [models.FileCitationType](../models/filecitationtype.md) | :heavy_check_mark: | N/A | -| `fileId` | *string* | :heavy_check_mark: | N/A | -| `filename` | *string* | :heavy_check_mark: | N/A | -| `index` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `type` | *"file_citation"* | :heavy_check_mark: | N/A | +| `fileId` | *string* | :heavy_check_mark: | N/A | +| `filename` | *string* | :heavy_check_mark: | N/A | +| `index` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/filecitationtype.md b/docs/models/filecitationtype.md deleted file mode 100644 index a7b13048..00000000 --- a/docs/models/filecitationtype.md +++ /dev/null @@ -1,15 +0,0 @@ -# FileCitationType - -## Example Usage - -```typescript -import { FileCitationType } from "@openrouter/sdk/models"; - -let value: FileCitationType = "file_citation"; -``` - -## Values - -```typescript -"file_citation" -``` \ No newline at end of file diff --git a/docs/models/filepath.md b/docs/models/filepath.md index 3f7cd3b1..1401b28f 100644 --- a/docs/models/filepath.md +++ b/docs/models/filepath.md @@ -14,8 +14,8 @@ let value: FilePath = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | -| `type` | [models.FilePathType](../models/filepathtype.md) | :heavy_check_mark: | N/A | -| `fileId` | *string* | :heavy_check_mark: | N/A | -| `index` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `type` | *"file_path"* | :heavy_check_mark: | N/A | +| `fileId` | *string* | :heavy_check_mark: | N/A | +| `index` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/filepathtype.md b/docs/models/filepathtype.md deleted file mode 100644 index 8d73e233..00000000 --- a/docs/models/filepathtype.md +++ /dev/null @@ -1,15 +0,0 @@ -# FilePathType - -## Example Usage - -```typescript -import { FilePathType } from "@openrouter/sdk/models"; - -let value: FilePathType = "file_path"; -``` - -## Values - -```typescript -"file_path" -``` \ No newline at end of file diff --git a/docs/models/filet.md b/docs/models/filet.md deleted file mode 100644 index 432f7d3c..00000000 --- a/docs/models/filet.md +++ /dev/null @@ -1,19 +0,0 @@ -# FileT - -## Example Usage - -```typescript -import { FileT } from "@openrouter/sdk/models"; - -let value: FileT = { - fileData: "", -}; -``` - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `fileData` | *string* | :heavy_check_mark: | N/A | -| `fileId` | *string* | :heavy_minus_sign: | N/A | -| `filename` | *string* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/idfileparser.md b/docs/models/idfileparser.md deleted file mode 100644 index be3f38d0..00000000 --- a/docs/models/idfileparser.md +++ /dev/null @@ -1,15 +0,0 @@ -# IdFileParser - -## Example Usage - -```typescript -import { IdFileParser } from "@openrouter/sdk/models"; - -let value: IdFileParser = "file-parser"; -``` - -## Values - -```typescript -"file-parser" -``` \ No newline at end of file diff --git a/docs/models/idmoderation.md b/docs/models/idmoderation.md deleted file mode 100644 index 231b5f86..00000000 --- a/docs/models/idmoderation.md +++ /dev/null @@ -1,15 +0,0 @@ -# IdModeration - -## Example Usage - -```typescript -import { IdModeration } from "@openrouter/sdk/models"; - -let value: IdModeration = "moderation"; -``` - -## Values - -```typescript -"moderation" -``` \ No newline at end of file diff --git a/docs/models/idweb.md b/docs/models/idweb.md deleted file mode 100644 index b7fa3a36..00000000 --- a/docs/models/idweb.md +++ /dev/null @@ -1,15 +0,0 @@ -# IdWeb - -## Example Usage - -```typescript -import { IdWeb } from "@openrouter/sdk/models"; - -let value: IdWeb = "web"; -``` - -## Values - -```typescript -"web" -``` \ No newline at end of file diff --git a/docs/models/messagedeveloper.md b/docs/models/messagedeveloper.md index b695c064..7ea3ecb5 100644 --- a/docs/models/messagedeveloper.md +++ b/docs/models/messagedeveloper.md @@ -15,6 +15,6 @@ let value: MessageDeveloper = { | Field | Type | Required | Description | | ----------------------- | ----------------------- | ----------------------- | ----------------------- | -| `role` | *string* | :heavy_check_mark: | N/A | +| `role` | *"developer"* | :heavy_check_mark: | N/A | | `content` | *models.MessageContent* | :heavy_check_mark: | N/A | | `name` | *string* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/namedtoolchoice.md b/docs/models/namedtoolchoice.md index 1e9383c4..a1fb1102 100644 --- a/docs/models/namedtoolchoice.md +++ b/docs/models/namedtoolchoice.md @@ -17,5 +17,5 @@ let value: NamedToolChoice = { | Field | Type | Required | Description | | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | -| `type` | *string* | :heavy_check_mark: | N/A | +| `type` | *"function"* | :heavy_check_mark: | N/A | | `function` | [models.NamedToolChoiceFunction](../models/namedtoolchoicefunction.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/openairesponsesrefusalcontent.md b/docs/models/openairesponsesrefusalcontent.md index 4ba066a5..6e2def30 100644 --- a/docs/models/openairesponsesrefusalcontent.md +++ b/docs/models/openairesponsesrefusalcontent.md @@ -13,7 +13,7 @@ let value: OpenAIResponsesRefusalContent = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | -| `type` | [models.OpenAIResponsesRefusalContentType](../models/openairesponsesrefusalcontenttype.md) | :heavy_check_mark: | N/A | -| `refusal` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `type` | *"refusal"* | :heavy_check_mark: | N/A | +| `refusal` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/openairesponsesrefusalcontenttype.md b/docs/models/openairesponsesrefusalcontenttype.md deleted file mode 100644 index 33d435d2..00000000 --- a/docs/models/openairesponsesrefusalcontenttype.md +++ /dev/null @@ -1,15 +0,0 @@ -# OpenAIResponsesRefusalContentType - -## Example Usage - -```typescript -import { OpenAIResponsesRefusalContentType } from "@openrouter/sdk/models"; - -let value: OpenAIResponsesRefusalContentType = "refusal"; -``` - -## Values - -```typescript -"refusal" -``` \ No newline at end of file diff --git a/docs/models/openresponseserrorevent.md b/docs/models/openresponseserrorevent.md index e0b958e6..2f7c6c1c 100644 --- a/docs/models/openresponseserrorevent.md +++ b/docs/models/openresponseserrorevent.md @@ -18,10 +18,10 @@ let value: OpenResponsesErrorEvent = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | -| `type` | [models.OpenResponsesErrorEventType](../models/openresponseserroreventtype.md) | :heavy_check_mark: | N/A | -| `code` | *string* | :heavy_check_mark: | N/A | -| `message` | *string* | :heavy_check_mark: | N/A | -| `param` | *string* | :heavy_check_mark: | N/A | -| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `type` | *"error"* | :heavy_check_mark: | N/A | +| `code` | *string* | :heavy_check_mark: | N/A | +| `message` | *string* | :heavy_check_mark: | N/A | +| `param` | *string* | :heavy_check_mark: | N/A | +| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/openresponseserroreventtype.md b/docs/models/openresponseserroreventtype.md deleted file mode 100644 index 1d2c02c4..00000000 --- a/docs/models/openresponseserroreventtype.md +++ /dev/null @@ -1,15 +0,0 @@ -# OpenResponsesErrorEventType - -## Example Usage - -```typescript -import { OpenResponsesErrorEventType } from "@openrouter/sdk/models"; - -let value: OpenResponsesErrorEventType = "error"; -``` - -## Values - -```typescript -"error" -``` \ No newline at end of file diff --git a/docs/models/openresponsesimagegencallcompleted.md b/docs/models/openresponsesimagegencallcompleted.md index ca3618f8..da20b2b6 100644 --- a/docs/models/openresponsesimagegencallcompleted.md +++ b/docs/models/openresponsesimagegencallcompleted.md @@ -17,9 +17,9 @@ let value: OpenResponsesImageGenCallCompleted = { ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | -| `type` | [models.OpenResponsesImageGenCallCompletedType](../models/openresponsesimagegencallcompletedtype.md) | :heavy_check_mark: | N/A | -| `itemId` | *string* | :heavy_check_mark: | N/A | -| `outputIndex` | *number* | :heavy_check_mark: | N/A | -| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | +| `type` | *"response.image_generation_call.completed"* | :heavy_check_mark: | N/A | +| `itemId` | *string* | :heavy_check_mark: | N/A | +| `outputIndex` | *number* | :heavy_check_mark: | N/A | +| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/openresponsesimagegencallcompletedtype.md b/docs/models/openresponsesimagegencallcompletedtype.md deleted file mode 100644 index 91c408e4..00000000 --- a/docs/models/openresponsesimagegencallcompletedtype.md +++ /dev/null @@ -1,16 +0,0 @@ -# OpenResponsesImageGenCallCompletedType - -## Example Usage - -```typescript -import { OpenResponsesImageGenCallCompletedType } from "@openrouter/sdk/models"; - -let value: OpenResponsesImageGenCallCompletedType = - "response.image_generation_call.completed"; -``` - -## Values - -```typescript -"response.image_generation_call.completed" -``` \ No newline at end of file diff --git a/docs/models/openresponsesimagegencallgenerating.md b/docs/models/openresponsesimagegencallgenerating.md index 812305fd..9764abb6 100644 --- a/docs/models/openresponsesimagegencallgenerating.md +++ b/docs/models/openresponsesimagegencallgenerating.md @@ -17,9 +17,9 @@ let value: OpenResponsesImageGenCallGenerating = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | -| `type` | [models.OpenResponsesImageGenCallGeneratingType](../models/openresponsesimagegencallgeneratingtype.md) | :heavy_check_mark: | N/A | -| `itemId` | *string* | :heavy_check_mark: | N/A | -| `outputIndex` | *number* | :heavy_check_mark: | N/A | -| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | +| `type` | *"response.image_generation_call.generating"* | :heavy_check_mark: | N/A | +| `itemId` | *string* | :heavy_check_mark: | N/A | +| `outputIndex` | *number* | :heavy_check_mark: | N/A | +| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/openresponsesimagegencallgeneratingtype.md b/docs/models/openresponsesimagegencallgeneratingtype.md deleted file mode 100644 index 51b8bfde..00000000 --- a/docs/models/openresponsesimagegencallgeneratingtype.md +++ /dev/null @@ -1,16 +0,0 @@ -# OpenResponsesImageGenCallGeneratingType - -## Example Usage - -```typescript -import { OpenResponsesImageGenCallGeneratingType } from "@openrouter/sdk/models"; - -let value: OpenResponsesImageGenCallGeneratingType = - "response.image_generation_call.generating"; -``` - -## Values - -```typescript -"response.image_generation_call.generating" -``` \ No newline at end of file diff --git a/docs/models/openresponsesimagegencallinprogress.md b/docs/models/openresponsesimagegencallinprogress.md index 37892214..8314f08b 100644 --- a/docs/models/openresponsesimagegencallinprogress.md +++ b/docs/models/openresponsesimagegencallinprogress.md @@ -17,9 +17,9 @@ let value: OpenResponsesImageGenCallInProgress = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | -| `type` | [models.OpenResponsesImageGenCallInProgressType](../models/openresponsesimagegencallinprogresstype.md) | :heavy_check_mark: | N/A | -| `itemId` | *string* | :heavy_check_mark: | N/A | -| `outputIndex` | *number* | :heavy_check_mark: | N/A | -| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | +| `type` | *"response.image_generation_call.in_progress"* | :heavy_check_mark: | N/A | +| `itemId` | *string* | :heavy_check_mark: | N/A | +| `outputIndex` | *number* | :heavy_check_mark: | N/A | +| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/openresponsesimagegencallinprogresstype.md b/docs/models/openresponsesimagegencallinprogresstype.md deleted file mode 100644 index 34035740..00000000 --- a/docs/models/openresponsesimagegencallinprogresstype.md +++ /dev/null @@ -1,16 +0,0 @@ -# OpenResponsesImageGenCallInProgressType - -## Example Usage - -```typescript -import { OpenResponsesImageGenCallInProgressType } from "@openrouter/sdk/models"; - -let value: OpenResponsesImageGenCallInProgressType = - "response.image_generation_call.in_progress"; -``` - -## Values - -```typescript -"response.image_generation_call.in_progress" -``` \ No newline at end of file diff --git a/docs/models/openresponsesimagegencallpartialimage.md b/docs/models/openresponsesimagegencallpartialimage.md index 53c1c2f3..78fe0e8d 100644 --- a/docs/models/openresponsesimagegencallpartialimage.md +++ b/docs/models/openresponsesimagegencallpartialimage.md @@ -19,11 +19,11 @@ let value: OpenResponsesImageGenCallPartialImage = { ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | -| `type` | [models.OpenResponsesImageGenCallPartialImageType](../models/openresponsesimagegencallpartialimagetype.md) | :heavy_check_mark: | N/A | -| `itemId` | *string* | :heavy_check_mark: | N/A | -| `outputIndex` | *number* | :heavy_check_mark: | N/A | -| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | -| `partialImageB64` | *string* | :heavy_check_mark: | N/A | -| `partialImageIndex` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | +| `type` | *"response.image_generation_call.partial_image"* | :heavy_check_mark: | N/A | +| `itemId` | *string* | :heavy_check_mark: | N/A | +| `outputIndex` | *number* | :heavy_check_mark: | N/A | +| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | +| `partialImageB64` | *string* | :heavy_check_mark: | N/A | +| `partialImageIndex` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/openresponsesimagegencallpartialimagetype.md b/docs/models/openresponsesimagegencallpartialimagetype.md deleted file mode 100644 index b8e1869a..00000000 --- a/docs/models/openresponsesimagegencallpartialimagetype.md +++ /dev/null @@ -1,16 +0,0 @@ -# OpenResponsesImageGenCallPartialImageType - -## Example Usage - -```typescript -import { OpenResponsesImageGenCallPartialImageType } from "@openrouter/sdk/models"; - -let value: OpenResponsesImageGenCallPartialImageType = - "response.image_generation_call.partial_image"; -``` - -## Values - -```typescript -"response.image_generation_call.partial_image" -``` \ No newline at end of file diff --git a/docs/models/openresponsesnonstreamingresponsetoolfunction.md b/docs/models/openresponsesnonstreamingresponsetoolfunction.md index 78454132..db249bb9 100644 --- a/docs/models/openresponsesnonstreamingresponsetoolfunction.md +++ b/docs/models/openresponsesnonstreamingresponsetoolfunction.md @@ -35,10 +35,10 @@ let value: OpenResponsesNonStreamingResponseToolFunction = { ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -| `type` | [models.OpenResponsesNonStreamingResponseType](../models/openresponsesnonstreamingresponsetype.md) | :heavy_check_mark: | N/A | -| `name` | *string* | :heavy_check_mark: | N/A | -| `description` | *string* | :heavy_minus_sign: | N/A | -| `strict` | *boolean* | :heavy_minus_sign: | N/A | -| `parameters` | Record | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------- | --------------------- | --------------------- | --------------------- | +| `type` | *"function"* | :heavy_check_mark: | N/A | +| `name` | *string* | :heavy_check_mark: | N/A | +| `description` | *string* | :heavy_minus_sign: | N/A | +| `strict` | *boolean* | :heavy_minus_sign: | N/A | +| `parameters` | Record | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/openresponsesnonstreamingresponsetype.md b/docs/models/openresponsesnonstreamingresponsetype.md deleted file mode 100644 index 4cb0cd83..00000000 --- a/docs/models/openresponsesnonstreamingresponsetype.md +++ /dev/null @@ -1,15 +0,0 @@ -# OpenResponsesNonStreamingResponseType - -## Example Usage - -```typescript -import { OpenResponsesNonStreamingResponseType } from "@openrouter/sdk/models"; - -let value: OpenResponsesNonStreamingResponseType = "function"; -``` - -## Values - -```typescript -"function" -``` \ No newline at end of file diff --git a/docs/models/openresponsesreasoningdeltaevent.md b/docs/models/openresponsesreasoningdeltaevent.md index a3040807..e76dc175 100644 --- a/docs/models/openresponsesreasoningdeltaevent.md +++ b/docs/models/openresponsesreasoningdeltaevent.md @@ -19,11 +19,11 @@ let value: OpenResponsesReasoningDeltaEvent = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | -| `type` | [models.OpenResponsesReasoningDeltaEventType](../models/openresponsesreasoningdeltaeventtype.md) | :heavy_check_mark: | N/A | -| `outputIndex` | *number* | :heavy_check_mark: | N/A | -| `itemId` | *string* | :heavy_check_mark: | N/A | -| `contentIndex` | *number* | :heavy_check_mark: | N/A | -| `delta` | *string* | :heavy_check_mark: | N/A | -| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- | +| `type` | *"response.reasoning_text.delta"* | :heavy_check_mark: | N/A | +| `outputIndex` | *number* | :heavy_check_mark: | N/A | +| `itemId` | *string* | :heavy_check_mark: | N/A | +| `contentIndex` | *number* | :heavy_check_mark: | N/A | +| `delta` | *string* | :heavy_check_mark: | N/A | +| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/openresponsesreasoningdeltaeventtype.md b/docs/models/openresponsesreasoningdeltaeventtype.md deleted file mode 100644 index 68421441..00000000 --- a/docs/models/openresponsesreasoningdeltaeventtype.md +++ /dev/null @@ -1,16 +0,0 @@ -# OpenResponsesReasoningDeltaEventType - -## Example Usage - -```typescript -import { OpenResponsesReasoningDeltaEventType } from "@openrouter/sdk/models"; - -let value: OpenResponsesReasoningDeltaEventType = - "response.reasoning_text.delta"; -``` - -## Values - -```typescript -"response.reasoning_text.delta" -``` \ No newline at end of file diff --git a/docs/models/openresponsesreasoningdoneevent.md b/docs/models/openresponsesreasoningdoneevent.md index d6a84c71..75667ccc 100644 --- a/docs/models/openresponsesreasoningdoneevent.md +++ b/docs/models/openresponsesreasoningdoneevent.md @@ -20,11 +20,11 @@ let value: OpenResponsesReasoningDoneEvent = { ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | -| `type` | [models.OpenResponsesReasoningDoneEventType](../models/openresponsesreasoningdoneeventtype.md) | :heavy_check_mark: | N/A | -| `outputIndex` | *number* | :heavy_check_mark: | N/A | -| `itemId` | *string* | :heavy_check_mark: | N/A | -| `contentIndex` | *number* | :heavy_check_mark: | N/A | -| `text` | *string* | :heavy_check_mark: | N/A | -| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | +| `type` | *"response.reasoning_text.done"* | :heavy_check_mark: | N/A | +| `outputIndex` | *number* | :heavy_check_mark: | N/A | +| `itemId` | *string* | :heavy_check_mark: | N/A | +| `contentIndex` | *number* | :heavy_check_mark: | N/A | +| `text` | *string* | :heavy_check_mark: | N/A | +| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/openresponsesreasoningdoneeventtype.md b/docs/models/openresponsesreasoningdoneeventtype.md deleted file mode 100644 index ac02e7c3..00000000 --- a/docs/models/openresponsesreasoningdoneeventtype.md +++ /dev/null @@ -1,15 +0,0 @@ -# OpenResponsesReasoningDoneEventType - -## Example Usage - -```typescript -import { OpenResponsesReasoningDoneEventType } from "@openrouter/sdk/models"; - -let value: OpenResponsesReasoningDoneEventType = "response.reasoning_text.done"; -``` - -## Values - -```typescript -"response.reasoning_text.done" -``` \ No newline at end of file diff --git a/docs/models/openresponsesreasoningsummarypartaddedevent.md b/docs/models/openresponsesreasoningsummarypartaddedevent.md index 90634fff..d7561a17 100644 --- a/docs/models/openresponsesreasoningsummarypartaddedevent.md +++ b/docs/models/openresponsesreasoningsummarypartaddedevent.md @@ -22,11 +22,11 @@ let value: OpenResponsesReasoningSummaryPartAddedEvent = { ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | -| `type` | [models.OpenResponsesReasoningSummaryPartAddedEventType](../models/openresponsesreasoningsummarypartaddedeventtype.md) | :heavy_check_mark: | N/A | | -| `outputIndex` | *number* | :heavy_check_mark: | N/A | | -| `itemId` | *string* | :heavy_check_mark: | N/A | | -| `summaryIndex` | *number* | :heavy_check_mark: | N/A | | -| `part` | [models.ReasoningSummaryText](../models/reasoningsummarytext.md) | :heavy_check_mark: | N/A | {
"type": "summary_text",
"text": "Analyzed the problem using first principles"
} | -| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| `type` | *"response.reasoning_summary_part.added"* | :heavy_check_mark: | N/A | | +| `outputIndex` | *number* | :heavy_check_mark: | N/A | | +| `itemId` | *string* | :heavy_check_mark: | N/A | | +| `summaryIndex` | *number* | :heavy_check_mark: | N/A | | +| `part` | [models.ReasoningSummaryText](../models/reasoningsummarytext.md) | :heavy_check_mark: | N/A | {
"type": "summary_text",
"text": "Analyzed the problem using first principles"
} | +| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/models/openresponsesreasoningsummarypartaddedeventtype.md b/docs/models/openresponsesreasoningsummarypartaddedeventtype.md deleted file mode 100644 index 365c3bfe..00000000 --- a/docs/models/openresponsesreasoningsummarypartaddedeventtype.md +++ /dev/null @@ -1,16 +0,0 @@ -# OpenResponsesReasoningSummaryPartAddedEventType - -## Example Usage - -```typescript -import { OpenResponsesReasoningSummaryPartAddedEventType } from "@openrouter/sdk/models"; - -let value: OpenResponsesReasoningSummaryPartAddedEventType = - "response.reasoning_summary_part.added"; -``` - -## Values - -```typescript -"response.reasoning_summary_part.added" -``` \ No newline at end of file diff --git a/docs/models/openresponsesreasoningsummarytextdeltaevent.md b/docs/models/openresponsesreasoningsummarytextdeltaevent.md index dc385172..86a83262 100644 --- a/docs/models/openresponsesreasoningsummarytextdeltaevent.md +++ b/docs/models/openresponsesreasoningsummarytextdeltaevent.md @@ -19,11 +19,11 @@ let value: OpenResponsesReasoningSummaryTextDeltaEvent = { ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | -| `type` | [models.OpenResponsesReasoningSummaryTextDeltaEventType](../models/openresponsesreasoningsummarytextdeltaeventtype.md) | :heavy_check_mark: | N/A | -| `itemId` | *string* | :heavy_check_mark: | N/A | -| `outputIndex` | *number* | :heavy_check_mark: | N/A | -| `summaryIndex` | *number* | :heavy_check_mark: | N/A | -| `delta` | *string* | :heavy_check_mark: | N/A | -| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | +| `type` | *"response.reasoning_summary_text.delta"* | :heavy_check_mark: | N/A | +| `itemId` | *string* | :heavy_check_mark: | N/A | +| `outputIndex` | *number* | :heavy_check_mark: | N/A | +| `summaryIndex` | *number* | :heavy_check_mark: | N/A | +| `delta` | *string* | :heavy_check_mark: | N/A | +| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/openresponsesreasoningsummarytextdeltaeventtype.md b/docs/models/openresponsesreasoningsummarytextdeltaeventtype.md deleted file mode 100644 index 5d7245d7..00000000 --- a/docs/models/openresponsesreasoningsummarytextdeltaeventtype.md +++ /dev/null @@ -1,16 +0,0 @@ -# OpenResponsesReasoningSummaryTextDeltaEventType - -## Example Usage - -```typescript -import { OpenResponsesReasoningSummaryTextDeltaEventType } from "@openrouter/sdk/models"; - -let value: OpenResponsesReasoningSummaryTextDeltaEventType = - "response.reasoning_summary_text.delta"; -``` - -## Values - -```typescript -"response.reasoning_summary_text.delta" -``` \ No newline at end of file diff --git a/docs/models/openresponsesreasoningsummarytextdoneevent.md b/docs/models/openresponsesreasoningsummarytextdoneevent.md index a8ff5002..458d59b3 100644 --- a/docs/models/openresponsesreasoningsummarytextdoneevent.md +++ b/docs/models/openresponsesreasoningsummarytextdoneevent.md @@ -19,11 +19,11 @@ let value: OpenResponsesReasoningSummaryTextDoneEvent = { ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -| `type` | [models.OpenResponsesReasoningSummaryTextDoneEventType](../models/openresponsesreasoningsummarytextdoneeventtype.md) | :heavy_check_mark: | N/A | -| `itemId` | *string* | :heavy_check_mark: | N/A | -| `outputIndex` | *number* | :heavy_check_mark: | N/A | -| `summaryIndex` | *number* | :heavy_check_mark: | N/A | -| `text` | *string* | :heavy_check_mark: | N/A | -| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | +| `type` | *"response.reasoning_summary_text.done"* | :heavy_check_mark: | N/A | +| `itemId` | *string* | :heavy_check_mark: | N/A | +| `outputIndex` | *number* | :heavy_check_mark: | N/A | +| `summaryIndex` | *number* | :heavy_check_mark: | N/A | +| `text` | *string* | :heavy_check_mark: | N/A | +| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/openresponsesreasoningsummarytextdoneeventtype.md b/docs/models/openresponsesreasoningsummarytextdoneeventtype.md deleted file mode 100644 index eb399877..00000000 --- a/docs/models/openresponsesreasoningsummarytextdoneeventtype.md +++ /dev/null @@ -1,16 +0,0 @@ -# OpenResponsesReasoningSummaryTextDoneEventType - -## Example Usage - -```typescript -import { OpenResponsesReasoningSummaryTextDoneEventType } from "@openrouter/sdk/models"; - -let value: OpenResponsesReasoningSummaryTextDoneEventType = - "response.reasoning_summary_text.done"; -``` - -## Values - -```typescript -"response.reasoning_summary_text.done" -``` \ No newline at end of file diff --git a/docs/models/openresponsesrequest.md b/docs/models/openresponsesrequest.md index 08bafb3e..236be0bb 100644 --- a/docs/models/openresponsesrequest.md +++ b/docs/models/openresponsesrequest.md @@ -34,8 +34,8 @@ let value: OpenResponsesRequest = {}; | `include` | [models.OpenAIResponsesIncludable](../models/openairesponsesincludable.md)[] | :heavy_minus_sign: | N/A | | | `background` | *boolean* | :heavy_minus_sign: | N/A | | | `safetyIdentifier` | *string* | :heavy_minus_sign: | N/A | | -| `store` | *boolean* | :heavy_minus_sign: | N/A | | -| `serviceTier` | [models.ServiceTier](../models/servicetier.md) | :heavy_minus_sign: | N/A | auto | +| `store` | *false* | :heavy_minus_sign: | N/A | | +| `serviceTier` | [models.ServiceTier](../models/servicetier.md) | :heavy_minus_sign: | N/A | | | `truncation` | [models.Truncation](../models/truncation.md) | :heavy_minus_sign: | N/A | auto | | `stream` | *boolean* | :heavy_minus_sign: | N/A | | | `provider` | [models.Provider](../models/provider.md) | :heavy_minus_sign: | When multiple model providers are available, optionally indicate your routing preference. | | diff --git a/docs/models/openresponsesrequesttoolfunction.md b/docs/models/openresponsesrequesttoolfunction.md index db8c2b4b..ca21d15d 100644 --- a/docs/models/openresponsesrequesttoolfunction.md +++ b/docs/models/openresponsesrequesttoolfunction.md @@ -35,10 +35,10 @@ let value: OpenResponsesRequestToolFunction = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | -| `type` | [models.OpenResponsesRequestType](../models/openresponsesrequesttype.md) | :heavy_check_mark: | N/A | -| `name` | *string* | :heavy_check_mark: | N/A | -| `description` | *string* | :heavy_minus_sign: | N/A | -| `strict` | *boolean* | :heavy_minus_sign: | N/A | -| `parameters` | Record | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------- | --------------------- | --------------------- | --------------------- | +| `type` | *"function"* | :heavy_check_mark: | N/A | +| `name` | *string* | :heavy_check_mark: | N/A | +| `description` | *string* | :heavy_minus_sign: | N/A | +| `strict` | *boolean* | :heavy_minus_sign: | N/A | +| `parameters` | Record | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/openresponsesrequesttype.md b/docs/models/openresponsesrequesttype.md deleted file mode 100644 index bdc7ee89..00000000 --- a/docs/models/openresponsesrequesttype.md +++ /dev/null @@ -1,15 +0,0 @@ -# OpenResponsesRequestType - -## Example Usage - -```typescript -import { OpenResponsesRequestType } from "@openrouter/sdk/models"; - -let value: OpenResponsesRequestType = "function"; -``` - -## Values - -```typescript -"function" -``` \ No newline at end of file diff --git a/docs/models/openresponsesstreameventresponsecompleted.md b/docs/models/openresponsesstreameventresponsecompleted.md index 78df7289..fb9d4c85 100644 --- a/docs/models/openresponsesstreameventresponsecompleted.md +++ b/docs/models/openresponsesstreameventresponsecompleted.md @@ -45,6 +45,6 @@ let value: OpenResponsesStreamEventResponseCompleted = { | Field | Type | Required | Description | Example | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `type` | [models.TypeResponseCompleted](../models/typeresponsecompleted.md) | :heavy_check_mark: | N/A | | +| `type` | *"response.completed"* | :heavy_check_mark: | N/A | | | `response` | [models.OpenResponsesNonStreamingResponse](../models/openresponsesnonstreamingresponse.md) | :heavy_check_mark: | Complete non-streaming response from the Responses API | {
"id": "resp-abc123",
"object": "response",
"created_at": 1704067200,
"model": "gpt-4",
"status": "completed",
"output": [
{
"type": "message",
"id": "msg-abc123",
"status": "completed",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "Hello! How can I help you today?",
"annotations": []
}
]
}
],
"usage": {
"input_tokens": 10,
"output_tokens": 25,
"total_tokens": 35,
"input_tokens_details": {
"cached_tokens": 0
},
"output_tokens_details": {
"reasoning_tokens": 0
}
},
"tools": [],
"tool_choice": "auto",
"parallel_tool_calls": true,
"error": null,
"incomplete_details": null,
"temperature": null,
"top_p": null,
"max_output_tokens": null,
"metadata": null,
"instructions": null
} | | `sequenceNumber` | *number* | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/models/openresponsesstreameventresponsecontentpartadded.md b/docs/models/openresponsesstreameventresponsecontentpartadded.md index be64779a..c8d189a5 100644 --- a/docs/models/openresponsesstreameventresponsecontentpartadded.md +++ b/docs/models/openresponsesstreameventresponsecontentpartadded.md @@ -22,11 +22,11 @@ let value: OpenResponsesStreamEventResponseContentPartAdded = { ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -| `type` | [models.TypeResponseContentPartAdded](../models/typeresponsecontentpartadded.md) | :heavy_check_mark: | N/A | -| `outputIndex` | *number* | :heavy_check_mark: | N/A | -| `itemId` | *string* | :heavy_check_mark: | N/A | -| `contentIndex` | *number* | :heavy_check_mark: | N/A | -| `part` | *models.Part1* | :heavy_check_mark: | N/A | -| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `type` | *"response.content_part.added"* | :heavy_check_mark: | N/A | +| `outputIndex` | *number* | :heavy_check_mark: | N/A | +| `itemId` | *string* | :heavy_check_mark: | N/A | +| `contentIndex` | *number* | :heavy_check_mark: | N/A | +| `part` | *models.Part1* | :heavy_check_mark: | N/A | +| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/openresponsesstreameventresponsecontentpartdone.md b/docs/models/openresponsesstreameventresponsecontentpartdone.md index 4d07ca6d..107bc14e 100644 --- a/docs/models/openresponsesstreameventresponsecontentpartdone.md +++ b/docs/models/openresponsesstreameventresponsecontentpartdone.md @@ -22,11 +22,11 @@ let value: OpenResponsesStreamEventResponseContentPartDone = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | -| `type` | [models.TypeResponseContentPartDone](../models/typeresponsecontentpartdone.md) | :heavy_check_mark: | N/A | -| `outputIndex` | *number* | :heavy_check_mark: | N/A | -| `itemId` | *string* | :heavy_check_mark: | N/A | -| `contentIndex` | *number* | :heavy_check_mark: | N/A | -| `part` | *models.Part2* | :heavy_check_mark: | N/A | -| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | +| `type` | *"response.content_part.done"* | :heavy_check_mark: | N/A | +| `outputIndex` | *number* | :heavy_check_mark: | N/A | +| `itemId` | *string* | :heavy_check_mark: | N/A | +| `contentIndex` | *number* | :heavy_check_mark: | N/A | +| `part` | *models.Part2* | :heavy_check_mark: | N/A | +| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/openresponsesstreameventresponsecreated.md b/docs/models/openresponsesstreameventresponsecreated.md index 6979157b..5edc0ed7 100644 --- a/docs/models/openresponsesstreameventresponsecreated.md +++ b/docs/models/openresponsesstreameventresponsecreated.md @@ -33,6 +33,6 @@ let value: OpenResponsesStreamEventResponseCreated = { | Field | Type | Required | Description | Example | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `type` | [models.TypeResponseCreated](../models/typeresponsecreated.md) | :heavy_check_mark: | N/A | | +| `type` | *"response.created"* | :heavy_check_mark: | N/A | | | `response` | [models.OpenResponsesNonStreamingResponse](../models/openresponsesnonstreamingresponse.md) | :heavy_check_mark: | Complete non-streaming response from the Responses API | {
"id": "resp-abc123",
"object": "response",
"created_at": 1704067200,
"model": "gpt-4",
"status": "completed",
"output": [
{
"type": "message",
"id": "msg-abc123",
"status": "completed",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "Hello! How can I help you today?",
"annotations": []
}
]
}
],
"usage": {
"input_tokens": 10,
"output_tokens": 25,
"total_tokens": 35,
"input_tokens_details": {
"cached_tokens": 0
},
"output_tokens_details": {
"reasoning_tokens": 0
}
},
"tools": [],
"tool_choice": "auto",
"parallel_tool_calls": true,
"error": null,
"incomplete_details": null,
"temperature": null,
"top_p": null,
"max_output_tokens": null,
"metadata": null,
"instructions": null
} | | `sequenceNumber` | *number* | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/models/openresponsesstreameventresponsefailed.md b/docs/models/openresponsesstreameventresponsefailed.md index 651c831d..e9ec0bad 100644 --- a/docs/models/openresponsesstreameventresponsefailed.md +++ b/docs/models/openresponsesstreameventresponsefailed.md @@ -33,6 +33,6 @@ let value: OpenResponsesStreamEventResponseFailed = { | Field | Type | Required | Description | Example | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `type` | [models.TypeResponseFailed](../models/typeresponsefailed.md) | :heavy_check_mark: | N/A | | +| `type` | *"response.failed"* | :heavy_check_mark: | N/A | | | `response` | [models.OpenResponsesNonStreamingResponse](../models/openresponsesnonstreamingresponse.md) | :heavy_check_mark: | Complete non-streaming response from the Responses API | {
"id": "resp-abc123",
"object": "response",
"created_at": 1704067200,
"model": "gpt-4",
"status": "completed",
"output": [
{
"type": "message",
"id": "msg-abc123",
"status": "completed",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "Hello! How can I help you today?",
"annotations": []
}
]
}
],
"usage": {
"input_tokens": 10,
"output_tokens": 25,
"total_tokens": 35,
"input_tokens_details": {
"cached_tokens": 0
},
"output_tokens_details": {
"reasoning_tokens": 0
}
},
"tools": [],
"tool_choice": "auto",
"parallel_tool_calls": true,
"error": null,
"incomplete_details": null,
"temperature": null,
"top_p": null,
"max_output_tokens": null,
"metadata": null,
"instructions": null
} | | `sequenceNumber` | *number* | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/models/openresponsesstreameventresponsefunctioncallargumentsdelta.md b/docs/models/openresponsesstreameventresponsefunctioncallargumentsdelta.md index 4204b87c..7c52c801 100644 --- a/docs/models/openresponsesstreameventresponsefunctioncallargumentsdelta.md +++ b/docs/models/openresponsesstreameventresponsefunctioncallargumentsdelta.md @@ -18,10 +18,10 @@ let value: OpenResponsesStreamEventResponseFunctionCallArgumentsDelta = { ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | -| `type` | [models.TypeResponseFunctionCallArgumentsDelta](../models/typeresponsefunctioncallargumentsdelta.md) | :heavy_check_mark: | N/A | -| `itemId` | *string* | :heavy_check_mark: | N/A | -| `outputIndex` | *number* | :heavy_check_mark: | N/A | -| `delta` | *string* | :heavy_check_mark: | N/A | -| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | +| `type` | *"response.function_call_arguments.delta"* | :heavy_check_mark: | N/A | +| `itemId` | *string* | :heavy_check_mark: | N/A | +| `outputIndex` | *number* | :heavy_check_mark: | N/A | +| `delta` | *string* | :heavy_check_mark: | N/A | +| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/openresponsesstreameventresponsefunctioncallargumentsdone.md b/docs/models/openresponsesstreameventresponsefunctioncallargumentsdone.md index 6c5319a8..59d76784 100644 --- a/docs/models/openresponsesstreameventresponsefunctioncallargumentsdone.md +++ b/docs/models/openresponsesstreameventresponsefunctioncallargumentsdone.md @@ -19,11 +19,11 @@ let value: OpenResponsesStreamEventResponseFunctionCallArgumentsDone = { ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -| `type` | [models.TypeResponseFunctionCallArgumentsDone](../models/typeresponsefunctioncallargumentsdone.md) | :heavy_check_mark: | N/A | -| `itemId` | *string* | :heavy_check_mark: | N/A | -| `outputIndex` | *number* | :heavy_check_mark: | N/A | -| `name` | *string* | :heavy_check_mark: | N/A | -| `arguments` | *string* | :heavy_check_mark: | N/A | -| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | +| `type` | *"response.function_call_arguments.done"* | :heavy_check_mark: | N/A | +| `itemId` | *string* | :heavy_check_mark: | N/A | +| `outputIndex` | *number* | :heavy_check_mark: | N/A | +| `name` | *string* | :heavy_check_mark: | N/A | +| `arguments` | *string* | :heavy_check_mark: | N/A | +| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/openresponsesstreameventresponseincomplete.md b/docs/models/openresponsesstreameventresponseincomplete.md index 6657cb4f..708abc70 100644 --- a/docs/models/openresponsesstreameventresponseincomplete.md +++ b/docs/models/openresponsesstreameventresponseincomplete.md @@ -33,6 +33,6 @@ let value: OpenResponsesStreamEventResponseIncomplete = { | Field | Type | Required | Description | Example | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `type` | [models.TypeResponseIncomplete](../models/typeresponseincomplete.md) | :heavy_check_mark: | N/A | | +| `type` | *"response.incomplete"* | :heavy_check_mark: | N/A | | | `response` | [models.OpenResponsesNonStreamingResponse](../models/openresponsesnonstreamingresponse.md) | :heavy_check_mark: | Complete non-streaming response from the Responses API | {
"id": "resp-abc123",
"object": "response",
"created_at": 1704067200,
"model": "gpt-4",
"status": "completed",
"output": [
{
"type": "message",
"id": "msg-abc123",
"status": "completed",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "Hello! How can I help you today?",
"annotations": []
}
]
}
],
"usage": {
"input_tokens": 10,
"output_tokens": 25,
"total_tokens": 35,
"input_tokens_details": {
"cached_tokens": 0
},
"output_tokens_details": {
"reasoning_tokens": 0
}
},
"tools": [],
"tool_choice": "auto",
"parallel_tool_calls": true,
"error": null,
"incomplete_details": null,
"temperature": null,
"top_p": null,
"max_output_tokens": null,
"metadata": null,
"instructions": null
} | | `sequenceNumber` | *number* | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/models/openresponsesstreameventresponseinprogress.md b/docs/models/openresponsesstreameventresponseinprogress.md index c789e969..a5d342b1 100644 --- a/docs/models/openresponsesstreameventresponseinprogress.md +++ b/docs/models/openresponsesstreameventresponseinprogress.md @@ -33,6 +33,6 @@ let value: OpenResponsesStreamEventResponseInProgress = { | Field | Type | Required | Description | Example | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `type` | [models.TypeResponseInProgress](../models/typeresponseinprogress.md) | :heavy_check_mark: | N/A | | +| `type` | *"response.in_progress"* | :heavy_check_mark: | N/A | | | `response` | [models.OpenResponsesNonStreamingResponse](../models/openresponsesnonstreamingresponse.md) | :heavy_check_mark: | Complete non-streaming response from the Responses API | {
"id": "resp-abc123",
"object": "response",
"created_at": 1704067200,
"model": "gpt-4",
"status": "completed",
"output": [
{
"type": "message",
"id": "msg-abc123",
"status": "completed",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "Hello! How can I help you today?",
"annotations": []
}
]
}
],
"usage": {
"input_tokens": 10,
"output_tokens": 25,
"total_tokens": 35,
"input_tokens_details": {
"cached_tokens": 0
},
"output_tokens_details": {
"reasoning_tokens": 0
}
},
"tools": [],
"tool_choice": "auto",
"parallel_tool_calls": true,
"error": null,
"incomplete_details": null,
"temperature": null,
"top_p": null,
"max_output_tokens": null,
"metadata": null,
"instructions": null
} | | `sequenceNumber` | *number* | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/models/openresponsesstreameventresponseoutputitemadded.md b/docs/models/openresponsesstreameventresponseoutputitemadded.md index 2ecc4bf2..c83b4e4c 100644 --- a/docs/models/openresponsesstreameventresponseoutputitemadded.md +++ b/docs/models/openresponsesstreameventresponseoutputitemadded.md @@ -24,7 +24,7 @@ let value: OpenResponsesStreamEventResponseOutputItemAdded = { | Field | Type | Required | Description | Example | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `type` | [models.TypeResponseOutputItemAdded](../models/typeresponseoutputitemadded.md) | :heavy_check_mark: | N/A | | +| `type` | *"response.output_item.added"* | :heavy_check_mark: | N/A | | | `outputIndex` | *number* | :heavy_check_mark: | N/A | | | `item` | *models.ResponsesOutputItem* | :heavy_check_mark: | An output item from the response | {
"id": "msg-abc123",
"role": "assistant",
"type": "message",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "Hello! How can I help you today?"
}
]
} | | `sequenceNumber` | *number* | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/models/openresponsesstreameventresponseoutputitemdone.md b/docs/models/openresponsesstreameventresponseoutputitemdone.md index 23ed3a45..3957c895 100644 --- a/docs/models/openresponsesstreameventresponseoutputitemdone.md +++ b/docs/models/openresponsesstreameventresponseoutputitemdone.md @@ -29,7 +29,7 @@ let value: OpenResponsesStreamEventResponseOutputItemDone = { | Field | Type | Required | Description | Example | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `type` | [models.TypeResponseOutputItemDone](../models/typeresponseoutputitemdone.md) | :heavy_check_mark: | N/A | | +| `type` | *"response.output_item.done"* | :heavy_check_mark: | N/A | | | `outputIndex` | *number* | :heavy_check_mark: | N/A | | | `item` | *models.ResponsesOutputItem* | :heavy_check_mark: | An output item from the response | {
"id": "msg-abc123",
"role": "assistant",
"type": "message",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "Hello! How can I help you today?"
}
]
} | | `sequenceNumber` | *number* | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/models/openresponsesstreameventresponseoutputtextannotationadded.md b/docs/models/openresponsesstreameventresponseoutputtextannotationadded.md index 82c5e4c2..86b18986 100644 --- a/docs/models/openresponsesstreameventresponseoutputtextannotationadded.md +++ b/docs/models/openresponsesstreameventresponseoutputtextannotationadded.md @@ -26,12 +26,12 @@ let value: OpenResponsesStreamEventResponseOutputTextAnnotationAdded = { ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -| `type` | [models.TypeResponseOutputTextAnnotationAdded](../models/typeresponseoutputtextannotationadded.md) | :heavy_check_mark: | N/A | -| `outputIndex` | *number* | :heavy_check_mark: | N/A | -| `itemId` | *string* | :heavy_check_mark: | N/A | -| `contentIndex` | *number* | :heavy_check_mark: | N/A | -| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | -| `annotationIndex` | *number* | :heavy_check_mark: | N/A | -| `annotation` | *models.OpenAIResponsesAnnotation* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | +| `type` | *"response.output_text.annotation.added"* | :heavy_check_mark: | N/A | +| `outputIndex` | *number* | :heavy_check_mark: | N/A | +| `itemId` | *string* | :heavy_check_mark: | N/A | +| `contentIndex` | *number* | :heavy_check_mark: | N/A | +| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | +| `annotationIndex` | *number* | :heavy_check_mark: | N/A | +| `annotation` | *models.OpenAIResponsesAnnotation* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/openresponsesstreameventresponseoutputtextdelta.md b/docs/models/openresponsesstreameventresponseoutputtextdelta.md index b2acc734..f6253562 100644 --- a/docs/models/openresponsesstreameventresponseoutputtextdelta.md +++ b/docs/models/openresponsesstreameventresponseoutputtextdelta.md @@ -20,12 +20,12 @@ let value: OpenResponsesStreamEventResponseOutputTextDelta = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | -| `type` | [models.TypeResponseOutputTextDelta](../models/typeresponseoutputtextdelta.md) | :heavy_check_mark: | N/A | -| `logprobs` | [models.OpenResponsesLogProbs](../models/openresponseslogprobs.md)[] | :heavy_check_mark: | N/A | -| `outputIndex` | *number* | :heavy_check_mark: | N/A | -| `itemId` | *string* | :heavy_check_mark: | N/A | -| `contentIndex` | *number* | :heavy_check_mark: | N/A | -| `delta` | *string* | :heavy_check_mark: | N/A | -| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `type` | *"response.output_text.delta"* | :heavy_check_mark: | N/A | +| `logprobs` | [models.OpenResponsesLogProbs](../models/openresponseslogprobs.md)[] | :heavy_check_mark: | N/A | +| `outputIndex` | *number* | :heavy_check_mark: | N/A | +| `itemId` | *string* | :heavy_check_mark: | N/A | +| `contentIndex` | *number* | :heavy_check_mark: | N/A | +| `delta` | *string* | :heavy_check_mark: | N/A | +| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/openresponsesstreameventresponseoutputtextdone.md b/docs/models/openresponsesstreameventresponseoutputtextdone.md index 79fe72f7..411ff0a1 100644 --- a/docs/models/openresponsesstreameventresponseoutputtextdone.md +++ b/docs/models/openresponsesstreameventresponseoutputtextdone.md @@ -20,12 +20,12 @@ let value: OpenResponsesStreamEventResponseOutputTextDone = { ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | -| `type` | [models.TypeResponseOutputTextDone](../models/typeresponseoutputtextdone.md) | :heavy_check_mark: | N/A | -| `outputIndex` | *number* | :heavy_check_mark: | N/A | -| `itemId` | *string* | :heavy_check_mark: | N/A | -| `contentIndex` | *number* | :heavy_check_mark: | N/A | -| `text` | *string* | :heavy_check_mark: | N/A | -| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | -| `logprobs` | [models.OpenResponsesLogProbs](../models/openresponseslogprobs.md)[] | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `type` | *"response.output_text.done"* | :heavy_check_mark: | N/A | +| `outputIndex` | *number* | :heavy_check_mark: | N/A | +| `itemId` | *string* | :heavy_check_mark: | N/A | +| `contentIndex` | *number* | :heavy_check_mark: | N/A | +| `text` | *string* | :heavy_check_mark: | N/A | +| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | +| `logprobs` | [models.OpenResponsesLogProbs](../models/openresponseslogprobs.md)[] | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/openresponsesstreameventresponsereasoningsummarypartdone.md b/docs/models/openresponsesstreameventresponsereasoningsummarypartdone.md index d594ccea..80da7496 100644 --- a/docs/models/openresponsesstreameventresponsereasoningsummarypartdone.md +++ b/docs/models/openresponsesstreameventresponsereasoningsummarypartdone.md @@ -22,11 +22,11 @@ let value: OpenResponsesStreamEventResponseReasoningSummaryPartDone = { ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | -| `type` | [models.TypeResponseReasoningSummaryPartDone](../models/typeresponsereasoningsummarypartdone.md) | :heavy_check_mark: | N/A | | -| `outputIndex` | *number* | :heavy_check_mark: | N/A | | -| `itemId` | *string* | :heavy_check_mark: | N/A | | -| `summaryIndex` | *number* | :heavy_check_mark: | N/A | | -| `part` | [models.ReasoningSummaryText](../models/reasoningsummarytext.md) | :heavy_check_mark: | N/A | {
"type": "summary_text",
"text": "Analyzed the problem using first principles"
} | -| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| `type` | *"response.reasoning_summary_part.done"* | :heavy_check_mark: | N/A | | +| `outputIndex` | *number* | :heavy_check_mark: | N/A | | +| `itemId` | *string* | :heavy_check_mark: | N/A | | +| `summaryIndex` | *number* | :heavy_check_mark: | N/A | | +| `part` | [models.ReasoningSummaryText](../models/reasoningsummarytext.md) | :heavy_check_mark: | N/A | {
"type": "summary_text",
"text": "Analyzed the problem using first principles"
} | +| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/models/openresponsesstreameventresponserefusaldelta.md b/docs/models/openresponsesstreameventresponserefusaldelta.md index 6c44659e..28b1abb0 100644 --- a/docs/models/openresponsesstreameventresponserefusaldelta.md +++ b/docs/models/openresponsesstreameventresponserefusaldelta.md @@ -19,11 +19,11 @@ let value: OpenResponsesStreamEventResponseRefusalDelta = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | -| `type` | [models.TypeResponseRefusalDelta](../models/typeresponserefusaldelta.md) | :heavy_check_mark: | N/A | -| `outputIndex` | *number* | :heavy_check_mark: | N/A | -| `itemId` | *string* | :heavy_check_mark: | N/A | -| `contentIndex` | *number* | :heavy_check_mark: | N/A | -| `delta` | *string* | :heavy_check_mark: | N/A | -| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------- | -------------------------- | -------------------------- | -------------------------- | +| `type` | *"response.refusal.delta"* | :heavy_check_mark: | N/A | +| `outputIndex` | *number* | :heavy_check_mark: | N/A | +| `itemId` | *string* | :heavy_check_mark: | N/A | +| `contentIndex` | *number* | :heavy_check_mark: | N/A | +| `delta` | *string* | :heavy_check_mark: | N/A | +| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/openresponsesstreameventresponserefusaldone.md b/docs/models/openresponsesstreameventresponserefusaldone.md index 68b6fff7..ca13a4cb 100644 --- a/docs/models/openresponsesstreameventresponserefusaldone.md +++ b/docs/models/openresponsesstreameventresponserefusaldone.md @@ -19,11 +19,11 @@ let value: OpenResponsesStreamEventResponseRefusalDone = { ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | -| `type` | [models.TypeResponseRefusalDone](../models/typeresponserefusaldone.md) | :heavy_check_mark: | N/A | -| `outputIndex` | *number* | :heavy_check_mark: | N/A | -| `itemId` | *string* | :heavy_check_mark: | N/A | -| `contentIndex` | *number* | :heavy_check_mark: | N/A | -| `refusal` | *string* | :heavy_check_mark: | N/A | -| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------- | ------------------------- | ------------------------- | ------------------------- | +| `type` | *"response.refusal.done"* | :heavy_check_mark: | N/A | +| `outputIndex` | *number* | :heavy_check_mark: | N/A | +| `itemId` | *string* | :heavy_check_mark: | N/A | +| `contentIndex` | *number* | :heavy_check_mark: | N/A | +| `refusal` | *string* | :heavy_check_mark: | N/A | +| `sequenceNumber` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/openresponseswebsearch20250826tool.md b/docs/models/openresponseswebsearch20250826tool.md index 594d329b..9cd8ec3a 100644 --- a/docs/models/openresponseswebsearch20250826tool.md +++ b/docs/models/openresponseswebsearch20250826tool.md @@ -16,7 +16,7 @@ let value: OpenResponsesWebSearch20250826Tool = { | Field | Type | Required | Description | Example | | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | -| `type` | [models.OpenResponsesWebSearch20250826ToolType](../models/openresponseswebsearch20250826tooltype.md) | :heavy_check_mark: | N/A | | +| `type` | *"web_search_2025_08_26"* | :heavy_check_mark: | N/A | | | `filters` | [models.OpenResponsesWebSearch20250826ToolFilters](../models/openresponseswebsearch20250826toolfilters.md) | :heavy_minus_sign: | N/A | | | `searchContextSize` | [models.ResponsesSearchContextSize](../models/responsessearchcontextsize.md) | :heavy_minus_sign: | Size of the search context for web search tools | medium | | `userLocation` | [models.ResponsesWebSearchUserLocation](../models/responseswebsearchuserlocation.md) | :heavy_minus_sign: | User location information for web search | {
"type": "approximate",
"city": "San Francisco",
"country": "USA",
"region": "California",
"timezone": "America/Los_Angeles"
} | \ No newline at end of file diff --git a/docs/models/openresponseswebsearch20250826tooltype.md b/docs/models/openresponseswebsearch20250826tooltype.md deleted file mode 100644 index 4f32bd23..00000000 --- a/docs/models/openresponseswebsearch20250826tooltype.md +++ /dev/null @@ -1,15 +0,0 @@ -# OpenResponsesWebSearch20250826ToolType - -## Example Usage - -```typescript -import { OpenResponsesWebSearch20250826ToolType } from "@openrouter/sdk/models"; - -let value: OpenResponsesWebSearch20250826ToolType = "web_search_2025_08_26"; -``` - -## Values - -```typescript -"web_search_2025_08_26" -``` \ No newline at end of file diff --git a/docs/models/openresponseswebsearchpreview20250311tool.md b/docs/models/openresponseswebsearchpreview20250311tool.md index 4b569f6f..bb47786c 100644 --- a/docs/models/openresponseswebsearchpreview20250311tool.md +++ b/docs/models/openresponseswebsearchpreview20250311tool.md @@ -14,8 +14,8 @@ let value: OpenResponsesWebSearchPreview20250311Tool = { ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | -| `type` | [models.OpenResponsesWebSearchPreview20250311ToolType](../models/openresponseswebsearchpreview20250311tooltype.md) | :heavy_check_mark: | N/A | | -| `searchContextSize` | [models.ResponsesSearchContextSize](../models/responsessearchcontextsize.md) | :heavy_minus_sign: | Size of the search context for web search tools | medium | -| `userLocation` | [models.WebSearchPreviewToolUserLocation](../models/websearchpreviewtooluserlocation.md) | :heavy_minus_sign: | N/A | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `type` | *"web_search_preview_2025_03_11"* | :heavy_check_mark: | N/A | | +| `searchContextSize` | [models.ResponsesSearchContextSize](../models/responsessearchcontextsize.md) | :heavy_minus_sign: | Size of the search context for web search tools | medium | +| `userLocation` | [models.WebSearchPreviewToolUserLocation](../models/websearchpreviewtooluserlocation.md) | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/openresponseswebsearchpreview20250311tooltype.md b/docs/models/openresponseswebsearchpreview20250311tooltype.md deleted file mode 100644 index d869ef9d..00000000 --- a/docs/models/openresponseswebsearchpreview20250311tooltype.md +++ /dev/null @@ -1,16 +0,0 @@ -# OpenResponsesWebSearchPreview20250311ToolType - -## Example Usage - -```typescript -import { OpenResponsesWebSearchPreview20250311ToolType } from "@openrouter/sdk/models"; - -let value: OpenResponsesWebSearchPreview20250311ToolType = - "web_search_preview_2025_03_11"; -``` - -## Values - -```typescript -"web_search_preview_2025_03_11" -``` \ No newline at end of file diff --git a/docs/models/openresponseswebsearchpreviewtool.md b/docs/models/openresponseswebsearchpreviewtool.md index ba5a8ef0..69f214f2 100644 --- a/docs/models/openresponseswebsearchpreviewtool.md +++ b/docs/models/openresponseswebsearchpreviewtool.md @@ -14,8 +14,8 @@ let value: OpenResponsesWebSearchPreviewTool = { ## Fields -| Field | Type | Required | Description | Example | -| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -| `type` | [models.OpenResponsesWebSearchPreviewToolType](../models/openresponseswebsearchpreviewtooltype.md) | :heavy_check_mark: | N/A | | -| `searchContextSize` | [models.ResponsesSearchContextSize](../models/responsessearchcontextsize.md) | :heavy_minus_sign: | Size of the search context for web search tools | medium | -| `userLocation` | [models.WebSearchPreviewToolUserLocation](../models/websearchpreviewtooluserlocation.md) | :heavy_minus_sign: | N/A | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `type` | *"web_search_preview"* | :heavy_check_mark: | N/A | | +| `searchContextSize` | [models.ResponsesSearchContextSize](../models/responsessearchcontextsize.md) | :heavy_minus_sign: | Size of the search context for web search tools | medium | +| `userLocation` | [models.WebSearchPreviewToolUserLocation](../models/websearchpreviewtooluserlocation.md) | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/openresponseswebsearchpreviewtooltype.md b/docs/models/openresponseswebsearchpreviewtooltype.md deleted file mode 100644 index 1cc60bdd..00000000 --- a/docs/models/openresponseswebsearchpreviewtooltype.md +++ /dev/null @@ -1,15 +0,0 @@ -# OpenResponsesWebSearchPreviewToolType - -## Example Usage - -```typescript -import { OpenResponsesWebSearchPreviewToolType } from "@openrouter/sdk/models"; - -let value: OpenResponsesWebSearchPreviewToolType = "web_search_preview"; -``` - -## Values - -```typescript -"web_search_preview" -``` \ No newline at end of file diff --git a/docs/models/openresponseswebsearchtool.md b/docs/models/openresponseswebsearchtool.md index 3c1a076e..067f0c26 100644 --- a/docs/models/openresponseswebsearchtool.md +++ b/docs/models/openresponseswebsearchtool.md @@ -16,7 +16,7 @@ let value: OpenResponsesWebSearchTool = { | Field | Type | Required | Description | Example | | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | -| `type` | [models.OpenResponsesWebSearchToolType](../models/openresponseswebsearchtooltype.md) | :heavy_check_mark: | N/A | | +| `type` | *"web_search"* | :heavy_check_mark: | N/A | | | `filters` | [models.OpenResponsesWebSearchToolFilters](../models/openresponseswebsearchtoolfilters.md) | :heavy_minus_sign: | N/A | | | `searchContextSize` | [models.ResponsesSearchContextSize](../models/responsessearchcontextsize.md) | :heavy_minus_sign: | Size of the search context for web search tools | medium | | `userLocation` | [models.ResponsesWebSearchUserLocation](../models/responseswebsearchuserlocation.md) | :heavy_minus_sign: | User location information for web search | {
"type": "approximate",
"city": "San Francisco",
"country": "USA",
"region": "California",
"timezone": "America/Los_Angeles"
} | \ No newline at end of file diff --git a/docs/models/openresponseswebsearchtooltype.md b/docs/models/openresponseswebsearchtooltype.md deleted file mode 100644 index 01413791..00000000 --- a/docs/models/openresponseswebsearchtooltype.md +++ /dev/null @@ -1,15 +0,0 @@ -# OpenResponsesWebSearchToolType - -## Example Usage - -```typescript -import { OpenResponsesWebSearchToolType } from "@openrouter/sdk/models"; - -let value: OpenResponsesWebSearchToolType = "web_search"; -``` - -## Values - -```typescript -"web_search" -``` \ No newline at end of file diff --git a/docs/models/operations/contentimageurl.md b/docs/models/operations/contentimageurl.md index c59de439..07dae3ef 100644 --- a/docs/models/operations/contentimageurl.md +++ b/docs/models/operations/contentimageurl.md @@ -15,7 +15,7 @@ let value: ContentImageURL = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | -| `type` | [operations.TypeImageURL](../../models/operations/typeimageurl.md) | :heavy_check_mark: | N/A | -| `imageUrl` | [operations.ImageUrl](../../models/operations/imageurl.md) | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | +| `type` | *"image_url"* | :heavy_check_mark: | N/A | +| `imageUrl` | [operations.ImageUrl](../../models/operations/imageurl.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/contenttext.md b/docs/models/operations/contenttext.md index c0343ca4..85b3a967 100644 --- a/docs/models/operations/contenttext.md +++ b/docs/models/operations/contenttext.md @@ -13,7 +13,7 @@ let value: ContentText = { ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | -| `type` | [operations.TypeText](../../models/operations/typetext.md) | :heavy_check_mark: | N/A | -| `text` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `type` | *"text"* | :heavy_check_mark: | N/A | +| `text` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/deletekeysresponse.md b/docs/models/operations/deletekeysresponse.md index 5717ce71..5bab0e60 100644 --- a/docs/models/operations/deletekeysresponse.md +++ b/docs/models/operations/deletekeysresponse.md @@ -16,4 +16,4 @@ let value: DeleteKeysResponse = { | Field | Type | Required | Description | Example | | ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | -| `deleted` | *boolean* | :heavy_check_mark: | Confirmation that the API key was deleted | true | \ No newline at end of file +| `deleted` | *true* | :heavy_check_mark: | Confirmation that the API key was deleted | true | \ No newline at end of file diff --git a/docs/models/operations/getcreditsdata.md b/docs/models/operations/getcreditsdata.md new file mode 100644 index 00000000..ce61a38e --- /dev/null +++ b/docs/models/operations/getcreditsdata.md @@ -0,0 +1,19 @@ +# GetCreditsData + +## Example Usage + +```typescript +import { GetCreditsData } from "@openrouter/sdk/models/operations"; + +let value: GetCreditsData = { + totalCredits: 100.5, + totalUsage: 25.75, +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------- | ----------------------- | ----------------------- | ----------------------- | ----------------------- | +| `totalCredits` | *number* | :heavy_check_mark: | Total credits purchased | 100.5 | +| `totalUsage` | *number* | :heavy_check_mark: | Total credits used | 25.75 | \ No newline at end of file diff --git a/docs/models/operations/getcreditsresponse.md b/docs/models/operations/getcreditsresponse.md index b8c56af7..04088051 100644 --- a/docs/models/operations/getcreditsresponse.md +++ b/docs/models/operations/getcreditsresponse.md @@ -7,10 +7,16 @@ Total credits purchased and used ```typescript import { GetCreditsResponse } from "@openrouter/sdk/models/operations"; -let value: GetCreditsResponse = {}; +let value: GetCreditsResponse = { + data: { + totalCredits: 100.5, + totalUsage: 25.75, + }, +}; ``` ## Fields -| Field | Type | Required | Description | -| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | +| `data` | [operations.GetCreditsData](../../models/operations/getcreditsdata.md) | :heavy_check_mark: | N/A | {
"total_credits": 100.5,
"total_usage": 25.75
} | \ No newline at end of file diff --git a/docs/models/operations/getparametersprovider.md b/docs/models/operations/getparametersprovider.md index 3000d45f..2e686954 100644 --- a/docs/models/operations/getparametersprovider.md +++ b/docs/models/operations/getparametersprovider.md @@ -5,7 +5,7 @@ ```typescript import { GetParametersProvider } from "@openrouter/sdk/models/operations"; -let value: GetParametersProvider = "Google AI Studio"; +let value: GetParametersProvider = "Google"; ``` ## Values @@ -13,5 +13,5 @@ let value: GetParametersProvider = "Google AI Studio"; This is an open enum. Unrecognized values will be captured as the `Unrecognized` branded type. ```typescript -"AI21" | "AionLabs" | "Alibaba" | "Amazon Bedrock" | "Anthropic" | "Arcee" | "AtlasCloud" | "Avian" | "Azure" | "BaseTen" | "Black Forest Labs" | "Cerebras" | "Chutes" | "Cirrascale" | "Clarifai" | "Cloudflare" | "Cohere" | "Crusoe" | "DeepInfra" | "DeepSeek" | "Featherless" | "Fireworks" | "Friendli" | "GMICloud" | "Google" | "Google AI Studio" | "Groq" | "Hyperbolic" | "Inception" | "InferenceNet" | "Infermatic" | "Inflection" | "Liquid" | "Mancer 2" | "Minimax" | "ModelRun" | "Mistral" | "Modular" | "Moonshot AI" | "Morph" | "NCompass" | "Nebius" | "NextBit" | "Novita" | "Nvidia" | "OpenAI" | "OpenInference" | "Parasail" | "Perplexity" | "Phala" | "Relace" | "SambaNova" | "SiliconFlow" | "Stealth" | "Switchpoint" | "Targon" | "Together" | "Venice" | "WandB" | "xAI" | "Z.AI" | "FakeProvider" | Unrecognized +"AI21" | "AionLabs" | "Alibaba" | "Amazon Bedrock" | "Amazon Nova" | "Anthropic" | "Arcee AI" | "AtlasCloud" | "Avian" | "Azure" | "BaseTen" | "BytePlus" | "Black Forest Labs" | "Cerebras" | "Chutes" | "Cirrascale" | "Clarifai" | "Cloudflare" | "Cohere" | "Crusoe" | "DeepInfra" | "DeepSeek" | "Featherless" | "Fireworks" | "Friendli" | "GMICloud" | "GoPomelo" | "Google" | "Google AI Studio" | "Groq" | "Hyperbolic" | "Inception" | "InferenceNet" | "Infermatic" | "Inflection" | "Liquid" | "Mancer 2" | "Minimax" | "ModelRun" | "Mistral" | "Modular" | "Moonshot AI" | "Morph" | "NCompass" | "Nebius" | "NextBit" | "Novita" | "Nvidia" | "OpenAI" | "OpenInference" | "Parasail" | "Perplexity" | "Phala" | "Relace" | "SambaNova" | "SiliconFlow" | "Stealth" | "StreamLake" | "Switchpoint" | "Targon" | "Together" | "Venice" | "WandB" | "xAI" | "Z.AI" | "FakeProvider" | Unrecognized ``` \ No newline at end of file diff --git a/docs/models/operations/typeimageurl.md b/docs/models/operations/typeimageurl.md deleted file mode 100644 index 1bbb306d..00000000 --- a/docs/models/operations/typeimageurl.md +++ /dev/null @@ -1,15 +0,0 @@ -# TypeImageURL - -## Example Usage - -```typescript -import { TypeImageURL } from "@openrouter/sdk/models/operations"; - -let value: TypeImageURL = "image_url"; -``` - -## Values - -```typescript -"image_url" -``` \ No newline at end of file diff --git a/docs/models/operations/typetext.md b/docs/models/operations/typetext.md deleted file mode 100644 index fa9f96fe..00000000 --- a/docs/models/operations/typetext.md +++ /dev/null @@ -1,15 +0,0 @@ -# TypeText - -## Example Usage - -```typescript -import { TypeText } from "@openrouter/sdk/models/operations"; - -let value: TypeText = "text"; -``` - -## Values - -```typescript -"text" -``` \ No newline at end of file diff --git a/docs/models/plugin.md b/docs/models/plugin.md index a7b20a73..97fae341 100644 --- a/docs/models/plugin.md +++ b/docs/models/plugin.md @@ -27,3 +27,11 @@ const value: models.PluginFileParser = { }; ``` +### `models.PluginResponseHealing` + +```typescript +const value: models.PluginResponseHealing = { + id: "response-healing", +}; +``` + diff --git a/docs/models/pluginfileparser.md b/docs/models/pluginfileparser.md index 22035248..942b84c1 100644 --- a/docs/models/pluginfileparser.md +++ b/docs/models/pluginfileparser.md @@ -12,8 +12,8 @@ let value: PluginFileParser = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | -| `id` | [models.IdFileParser](../models/idfileparser.md) | :heavy_check_mark: | N/A | -| `maxFiles` | *number* | :heavy_minus_sign: | N/A | -| `pdf` | [models.Pdf](../models/pdf.md) | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | +| `id` | *"file-parser"* | :heavy_check_mark: | N/A | +| `maxFiles` | *number* | :heavy_minus_sign: | N/A | +| `pdf` | [models.Pdf](../models/pdf.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/pluginmoderation.md b/docs/models/pluginmoderation.md index c5c4a8ab..69a9dba0 100644 --- a/docs/models/pluginmoderation.md +++ b/docs/models/pluginmoderation.md @@ -12,6 +12,6 @@ let value: PluginModeration = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | -| `id` | [models.IdModeration](../models/idmoderation.md) | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *"moderation"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/pluginresponsehealing.md b/docs/models/pluginresponsehealing.md new file mode 100644 index 00000000..e331d5dd --- /dev/null +++ b/docs/models/pluginresponsehealing.md @@ -0,0 +1,17 @@ +# PluginResponseHealing + +## Example Usage + +```typescript +import { PluginResponseHealing } from "@openrouter/sdk/models"; + +let value: PluginResponseHealing = { + id: "response-healing", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| -------------------- | -------------------- | -------------------- | -------------------- | +| `id` | *"response-healing"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/pluginweb.md b/docs/models/pluginweb.md index 5cfb0228..673a5fd6 100644 --- a/docs/models/pluginweb.md +++ b/docs/models/pluginweb.md @@ -14,7 +14,7 @@ let value: PluginWeb = { | Field | Type | Required | Description | | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | -| `id` | [models.IdWeb](../models/idweb.md) | :heavy_check_mark: | N/A | +| `id` | *"web"* | :heavy_check_mark: | N/A | | `maxResults` | *number* | :heavy_minus_sign: | N/A | | `searchPrompt` | *string* | :heavy_minus_sign: | N/A | | `engine` | [models.Engine](../models/engine.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/providername.md b/docs/models/providername.md index 01c9fc45..6d238928 100644 --- a/docs/models/providername.md +++ b/docs/models/providername.md @@ -13,5 +13,5 @@ let value: ProviderName = "OpenAI"; This is an open enum. Unrecognized values will be captured as the `Unrecognized` branded type. ```typescript -"AI21" | "AionLabs" | "Alibaba" | "Amazon Bedrock" | "Anthropic" | "Arcee" | "AtlasCloud" | "Avian" | "Azure" | "BaseTen" | "Black Forest Labs" | "Cerebras" | "Chutes" | "Cirrascale" | "Clarifai" | "Cloudflare" | "Cohere" | "Crusoe" | "DeepInfra" | "DeepSeek" | "Featherless" | "Fireworks" | "Friendli" | "GMICloud" | "Google" | "Google AI Studio" | "Groq" | "Hyperbolic" | "Inception" | "InferenceNet" | "Infermatic" | "Inflection" | "Liquid" | "Mancer 2" | "Minimax" | "ModelRun" | "Mistral" | "Modular" | "Moonshot AI" | "Morph" | "NCompass" | "Nebius" | "NextBit" | "Novita" | "Nvidia" | "OpenAI" | "OpenInference" | "Parasail" | "Perplexity" | "Phala" | "Relace" | "SambaNova" | "SiliconFlow" | "Stealth" | "Switchpoint" | "Targon" | "Together" | "Venice" | "WandB" | "xAI" | "Z.AI" | "FakeProvider" | Unrecognized +"AI21" | "AionLabs" | "Alibaba" | "Amazon Bedrock" | "Amazon Nova" | "Anthropic" | "Arcee AI" | "AtlasCloud" | "Avian" | "Azure" | "BaseTen" | "BytePlus" | "Black Forest Labs" | "Cerebras" | "Chutes" | "Cirrascale" | "Clarifai" | "Cloudflare" | "Cohere" | "Crusoe" | "DeepInfra" | "DeepSeek" | "Featherless" | "Fireworks" | "Friendli" | "GMICloud" | "GoPomelo" | "Google" | "Google AI Studio" | "Groq" | "Hyperbolic" | "Inception" | "InferenceNet" | "Infermatic" | "Inflection" | "Liquid" | "Mancer 2" | "Minimax" | "ModelRun" | "Mistral" | "Modular" | "Moonshot AI" | "Morph" | "NCompass" | "Nebius" | "NextBit" | "Novita" | "Nvidia" | "OpenAI" | "OpenInference" | "Parasail" | "Perplexity" | "Phala" | "Relace" | "SambaNova" | "SiliconFlow" | "Stealth" | "StreamLake" | "Switchpoint" | "Targon" | "Together" | "Venice" | "WandB" | "xAI" | "Z.AI" | "FakeProvider" | Unrecognized ``` \ No newline at end of file diff --git a/docs/models/responseformatjsonschema.md b/docs/models/responseformatjsonschema.md index 7a72cb82..176cbbe3 100644 --- a/docs/models/responseformatjsonschema.md +++ b/docs/models/responseformatjsonschema.md @@ -17,5 +17,5 @@ let value: ResponseFormatJSONSchema = { | Field | Type | Required | Description | | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -| `type` | *string* | :heavy_check_mark: | N/A | +| `type` | *"json_schema"* | :heavy_check_mark: | N/A | | `jsonSchema` | [models.JSONSchemaConfig](../models/jsonschemaconfig.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/responseformattextgrammar.md b/docs/models/responseformattextgrammar.md index 7173f553..b3176d02 100644 --- a/docs/models/responseformattextgrammar.md +++ b/docs/models/responseformattextgrammar.md @@ -15,5 +15,5 @@ let value: ResponseFormatTextGrammar = { | Field | Type | Required | Description | | ------------------ | ------------------ | ------------------ | ------------------ | -| `type` | *string* | :heavy_check_mark: | N/A | +| `type` | *"grammar"* | :heavy_check_mark: | N/A | | `grammar` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/responseinputaudio.md b/docs/models/responseinputaudio.md index cad24bad..3fa1dcdb 100644 --- a/docs/models/responseinputaudio.md +++ b/docs/models/responseinputaudio.md @@ -20,5 +20,5 @@ let value: ResponseInputAudio = { | Field | Type | Required | Description | | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -| `type` | [models.ResponseInputAudioType](../models/responseinputaudiotype.md) | :heavy_check_mark: | N/A | +| `type` | *"input_audio"* | :heavy_check_mark: | N/A | | `inputAudio` | [models.ResponseInputAudioInputAudio](../models/responseinputaudioinputaudio.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/responseinputaudiotype.md b/docs/models/responseinputaudiotype.md deleted file mode 100644 index cb04089f..00000000 --- a/docs/models/responseinputaudiotype.md +++ /dev/null @@ -1,15 +0,0 @@ -# ResponseInputAudioType - -## Example Usage - -```typescript -import { ResponseInputAudioType } from "@openrouter/sdk/models"; - -let value: ResponseInputAudioType = "input_audio"; -``` - -## Values - -```typescript -"input_audio" -``` \ No newline at end of file diff --git a/docs/models/responseinputfile.md b/docs/models/responseinputfile.md index 93138048..24bc213c 100644 --- a/docs/models/responseinputfile.md +++ b/docs/models/responseinputfile.md @@ -14,10 +14,10 @@ let value: ResponseInputFile = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | -| `type` | [models.ResponseInputFileType](../models/responseinputfiletype.md) | :heavy_check_mark: | N/A | -| `fileId` | *string* | :heavy_minus_sign: | N/A | -| `fileData` | *string* | :heavy_minus_sign: | N/A | -| `filename` | *string* | :heavy_minus_sign: | N/A | -| `fileUrl` | *string* | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `type` | *"input_file"* | :heavy_check_mark: | N/A | +| `fileId` | *string* | :heavy_minus_sign: | N/A | +| `fileData` | *string* | :heavy_minus_sign: | N/A | +| `filename` | *string* | :heavy_minus_sign: | N/A | +| `fileUrl` | *string* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/responseinputfiletype.md b/docs/models/responseinputfiletype.md deleted file mode 100644 index 41549fc1..00000000 --- a/docs/models/responseinputfiletype.md +++ /dev/null @@ -1,15 +0,0 @@ -# ResponseInputFileType - -## Example Usage - -```typescript -import { ResponseInputFileType } from "@openrouter/sdk/models"; - -let value: ResponseInputFileType = "input_file"; -``` - -## Values - -```typescript -"input_file" -``` \ No newline at end of file diff --git a/docs/models/responseinputimage.md b/docs/models/responseinputimage.md index f59b3fe8..fedb0ffe 100644 --- a/docs/models/responseinputimage.md +++ b/docs/models/responseinputimage.md @@ -17,6 +17,6 @@ let value: ResponseInputImage = { | Field | Type | Required | Description | | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | -| `type` | [models.ResponseInputImageType](../models/responseinputimagetype.md) | :heavy_check_mark: | N/A | +| `type` | *"input_image"* | :heavy_check_mark: | N/A | | `detail` | [models.ResponseInputImageDetail](../models/responseinputimagedetail.md) | :heavy_check_mark: | N/A | | `imageUrl` | *string* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/responseinputimagetype.md b/docs/models/responseinputimagetype.md deleted file mode 100644 index 17e83452..00000000 --- a/docs/models/responseinputimagetype.md +++ /dev/null @@ -1,15 +0,0 @@ -# ResponseInputImageType - -## Example Usage - -```typescript -import { ResponseInputImageType } from "@openrouter/sdk/models"; - -let value: ResponseInputImageType = "input_image"; -``` - -## Values - -```typescript -"input_image" -``` \ No newline at end of file diff --git a/docs/models/responseinputtext.md b/docs/models/responseinputtext.md index 0d152b19..cb509e89 100644 --- a/docs/models/responseinputtext.md +++ b/docs/models/responseinputtext.md @@ -15,7 +15,7 @@ let value: ResponseInputText = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | -| `type` | [models.ResponseInputTextType](../models/responseinputtexttype.md) | :heavy_check_mark: | N/A | -| `text` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `type` | *"input_text"* | :heavy_check_mark: | N/A | +| `text` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/responseinputtexttype.md b/docs/models/responseinputtexttype.md deleted file mode 100644 index 54b1700e..00000000 --- a/docs/models/responseinputtexttype.md +++ /dev/null @@ -1,15 +0,0 @@ -# ResponseInputTextType - -## Example Usage - -```typescript -import { ResponseInputTextType } from "@openrouter/sdk/models"; - -let value: ResponseInputTextType = "input_text"; -``` - -## Values - -```typescript -"input_text" -``` \ No newline at end of file diff --git a/docs/models/responseoutputtext.md b/docs/models/responseoutputtext.md index d6c70640..ea27fa62 100644 --- a/docs/models/responseoutputtext.md +++ b/docs/models/responseoutputtext.md @@ -13,8 +13,8 @@ let value: ResponseOutputText = { ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -| `type` | [models.ResponseOutputTextType](../models/responseoutputtexttype.md) | :heavy_check_mark: | N/A | -| `text` | *string* | :heavy_check_mark: | N/A | -| `annotations` | *models.OpenAIResponsesAnnotation*[] | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `type` | *"output_text"* | :heavy_check_mark: | N/A | +| `text` | *string* | :heavy_check_mark: | N/A | +| `annotations` | *models.OpenAIResponsesAnnotation*[] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/responseoutputtexttype.md b/docs/models/responseoutputtexttype.md deleted file mode 100644 index 0bd0b6ff..00000000 --- a/docs/models/responseoutputtexttype.md +++ /dev/null @@ -1,15 +0,0 @@ -# ResponseOutputTextType - -## Example Usage - -```typescript -import { ResponseOutputTextType } from "@openrouter/sdk/models"; - -let value: ResponseOutputTextType = "output_text"; -``` - -## Values - -```typescript -"output_text" -``` \ No newline at end of file diff --git a/docs/models/responsesformatjsonobject.md b/docs/models/responsesformatjsonobject.md index f7b71412..8cd57234 100644 --- a/docs/models/responsesformatjsonobject.md +++ b/docs/models/responsesformatjsonobject.md @@ -14,6 +14,6 @@ let value: ResponsesFormatJSONObject = { ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | -| `type` | [models.ResponsesFormatJSONObjectType](../models/responsesformatjsonobjecttype.md) | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `type` | *"json_object"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/responsesformatjsonobjecttype.md b/docs/models/responsesformatjsonobjecttype.md deleted file mode 100644 index eb52f640..00000000 --- a/docs/models/responsesformatjsonobjecttype.md +++ /dev/null @@ -1,15 +0,0 @@ -# ResponsesFormatJSONObjectType - -## Example Usage - -```typescript -import { ResponsesFormatJSONObjectType } from "@openrouter/sdk/models"; - -let value: ResponsesFormatJSONObjectType = "json_object"; -``` - -## Values - -```typescript -"json_object" -``` \ No newline at end of file diff --git a/docs/models/responsesformattext.md b/docs/models/responsesformattext.md index 2f42de4f..c2bbe935 100644 --- a/docs/models/responsesformattext.md +++ b/docs/models/responsesformattext.md @@ -14,6 +14,6 @@ let value: ResponsesFormatText = { ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | -| `type` | [models.ResponsesFormatTextType](../models/responsesformattexttype.md) | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `type` | *"text"* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/responsesformattextjsonschemaconfig.md b/docs/models/responsesformattextjsonschemaconfig.md index c641450e..fe60ef06 100644 --- a/docs/models/responsesformattextjsonschemaconfig.md +++ b/docs/models/responsesformattextjsonschemaconfig.md @@ -19,10 +19,10 @@ let value: ResponsesFormatTextJSONSchemaConfig = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | -| `type` | [models.ResponsesFormatTextJSONSchemaConfigType](../models/responsesformattextjsonschemaconfigtype.md) | :heavy_check_mark: | N/A | -| `name` | *string* | :heavy_check_mark: | N/A | -| `description` | *string* | :heavy_minus_sign: | N/A | -| `strict` | *boolean* | :heavy_minus_sign: | N/A | -| `schema` | Record | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------- | --------------------- | --------------------- | --------------------- | +| `type` | *"json_schema"* | :heavy_check_mark: | N/A | +| `name` | *string* | :heavy_check_mark: | N/A | +| `description` | *string* | :heavy_minus_sign: | N/A | +| `strict` | *boolean* | :heavy_minus_sign: | N/A | +| `schema` | Record | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/responsesformattextjsonschemaconfigtype.md b/docs/models/responsesformattextjsonschemaconfigtype.md deleted file mode 100644 index ef44ea20..00000000 --- a/docs/models/responsesformattextjsonschemaconfigtype.md +++ /dev/null @@ -1,15 +0,0 @@ -# ResponsesFormatTextJSONSchemaConfigType - -## Example Usage - -```typescript -import { ResponsesFormatTextJSONSchemaConfigType } from "@openrouter/sdk/models"; - -let value: ResponsesFormatTextJSONSchemaConfigType = "json_schema"; -``` - -## Values - -```typescript -"json_schema" -``` \ No newline at end of file diff --git a/docs/models/responsesformattexttype.md b/docs/models/responsesformattexttype.md deleted file mode 100644 index c91ce63d..00000000 --- a/docs/models/responsesformattexttype.md +++ /dev/null @@ -1,15 +0,0 @@ -# ResponsesFormatTextType - -## Example Usage - -```typescript -import { ResponsesFormatTextType } from "@openrouter/sdk/models"; - -let value: ResponsesFormatTextType = "text"; -``` - -## Values - -```typescript -"text" -``` \ No newline at end of file diff --git a/docs/models/servicetier.md b/docs/models/servicetier.md index 005485f0..3e5b0ddd 100644 --- a/docs/models/servicetier.md +++ b/docs/models/servicetier.md @@ -10,8 +10,6 @@ let value: ServiceTier = "auto"; ## Values -This is an open enum. Unrecognized values will be captured as the `Unrecognized` branded type. - ```typescript -"auto" | "default" | "flex" | "priority" | "scale" | Unrecognized +"auto" ``` \ No newline at end of file diff --git a/docs/models/systemmessage.md b/docs/models/systemmessage.md index 2b748473..5f7c34b4 100644 --- a/docs/models/systemmessage.md +++ b/docs/models/systemmessage.md @@ -15,6 +15,6 @@ let value: SystemMessage = { | Field | Type | Required | Description | | ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- | -| `role` | *string* | :heavy_check_mark: | N/A | +| `role` | *"system"* | :heavy_check_mark: | N/A | | `content` | *models.SystemMessageContent* | :heavy_check_mark: | N/A | | `name` | *string* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/tooldefinitionjson.md b/docs/models/tooldefinitionjson.md index 7a0360f0..d8993e62 100644 --- a/docs/models/tooldefinitionjson.md +++ b/docs/models/tooldefinitionjson.md @@ -17,5 +17,5 @@ let value: ToolDefinitionJson = { | Field | Type | Required | Description | | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | -| `type` | *string* | :heavy_check_mark: | N/A | +| `type` | *"function"* | :heavy_check_mark: | N/A | | `function` | [models.ToolDefinitionJsonFunction](../models/tooldefinitionjsonfunction.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/toolresponsemessage.md b/docs/models/toolresponsemessage.md index 9f43a201..0d66edc9 100644 --- a/docs/models/toolresponsemessage.md +++ b/docs/models/toolresponsemessage.md @@ -16,6 +16,6 @@ let value: ToolResponseMessage = { | Field | Type | Required | Description | | ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | -| `role` | *string* | :heavy_check_mark: | N/A | +| `role` | *"tool"* | :heavy_check_mark: | N/A | | `content` | *models.ToolResponseMessageContent* | :heavy_check_mark: | N/A | | `toolCallId` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/ttl.md b/docs/models/ttl.md new file mode 100644 index 00000000..34f35ace --- /dev/null +++ b/docs/models/ttl.md @@ -0,0 +1,17 @@ +# Ttl + +## Example Usage + +```typescript +import { Ttl } from "@openrouter/sdk/models"; + +let value: Ttl = "5m"; +``` + +## Values + +This is an open enum. Unrecognized values will be captured as the `Unrecognized` branded type. + +```typescript +"5m" | "1h" | Unrecognized +``` \ No newline at end of file diff --git a/docs/models/typeresponsecompleted.md b/docs/models/typeresponsecompleted.md deleted file mode 100644 index 5a960069..00000000 --- a/docs/models/typeresponsecompleted.md +++ /dev/null @@ -1,15 +0,0 @@ -# TypeResponseCompleted - -## Example Usage - -```typescript -import { TypeResponseCompleted } from "@openrouter/sdk/models"; - -let value: TypeResponseCompleted = "response.completed"; -``` - -## Values - -```typescript -"response.completed" -``` \ No newline at end of file diff --git a/docs/models/typeresponsecontentpartadded.md b/docs/models/typeresponsecontentpartadded.md deleted file mode 100644 index 1b488042..00000000 --- a/docs/models/typeresponsecontentpartadded.md +++ /dev/null @@ -1,15 +0,0 @@ -# TypeResponseContentPartAdded - -## Example Usage - -```typescript -import { TypeResponseContentPartAdded } from "@openrouter/sdk/models"; - -let value: TypeResponseContentPartAdded = "response.content_part.added"; -``` - -## Values - -```typescript -"response.content_part.added" -``` \ No newline at end of file diff --git a/docs/models/typeresponsecontentpartdone.md b/docs/models/typeresponsecontentpartdone.md deleted file mode 100644 index 517631f3..00000000 --- a/docs/models/typeresponsecontentpartdone.md +++ /dev/null @@ -1,15 +0,0 @@ -# TypeResponseContentPartDone - -## Example Usage - -```typescript -import { TypeResponseContentPartDone } from "@openrouter/sdk/models"; - -let value: TypeResponseContentPartDone = "response.content_part.done"; -``` - -## Values - -```typescript -"response.content_part.done" -``` \ No newline at end of file diff --git a/docs/models/typeresponsecreated.md b/docs/models/typeresponsecreated.md deleted file mode 100644 index b6c6550e..00000000 --- a/docs/models/typeresponsecreated.md +++ /dev/null @@ -1,15 +0,0 @@ -# TypeResponseCreated - -## Example Usage - -```typescript -import { TypeResponseCreated } from "@openrouter/sdk/models"; - -let value: TypeResponseCreated = "response.created"; -``` - -## Values - -```typescript -"response.created" -``` \ No newline at end of file diff --git a/docs/models/typeresponsefailed.md b/docs/models/typeresponsefailed.md deleted file mode 100644 index 5b89fbe5..00000000 --- a/docs/models/typeresponsefailed.md +++ /dev/null @@ -1,15 +0,0 @@ -# TypeResponseFailed - -## Example Usage - -```typescript -import { TypeResponseFailed } from "@openrouter/sdk/models"; - -let value: TypeResponseFailed = "response.failed"; -``` - -## Values - -```typescript -"response.failed" -``` \ No newline at end of file diff --git a/docs/models/typeresponsefunctioncallargumentsdelta.md b/docs/models/typeresponsefunctioncallargumentsdelta.md deleted file mode 100644 index 2ab49027..00000000 --- a/docs/models/typeresponsefunctioncallargumentsdelta.md +++ /dev/null @@ -1,16 +0,0 @@ -# TypeResponseFunctionCallArgumentsDelta - -## Example Usage - -```typescript -import { TypeResponseFunctionCallArgumentsDelta } from "@openrouter/sdk/models"; - -let value: TypeResponseFunctionCallArgumentsDelta = - "response.function_call_arguments.delta"; -``` - -## Values - -```typescript -"response.function_call_arguments.delta" -``` \ No newline at end of file diff --git a/docs/models/typeresponsefunctioncallargumentsdone.md b/docs/models/typeresponsefunctioncallargumentsdone.md deleted file mode 100644 index 67a34ff4..00000000 --- a/docs/models/typeresponsefunctioncallargumentsdone.md +++ /dev/null @@ -1,16 +0,0 @@ -# TypeResponseFunctionCallArgumentsDone - -## Example Usage - -```typescript -import { TypeResponseFunctionCallArgumentsDone } from "@openrouter/sdk/models"; - -let value: TypeResponseFunctionCallArgumentsDone = - "response.function_call_arguments.done"; -``` - -## Values - -```typescript -"response.function_call_arguments.done" -``` \ No newline at end of file diff --git a/docs/models/typeresponseincomplete.md b/docs/models/typeresponseincomplete.md deleted file mode 100644 index a5661685..00000000 --- a/docs/models/typeresponseincomplete.md +++ /dev/null @@ -1,15 +0,0 @@ -# TypeResponseIncomplete - -## Example Usage - -```typescript -import { TypeResponseIncomplete } from "@openrouter/sdk/models"; - -let value: TypeResponseIncomplete = "response.incomplete"; -``` - -## Values - -```typescript -"response.incomplete" -``` \ No newline at end of file diff --git a/docs/models/typeresponseinprogress.md b/docs/models/typeresponseinprogress.md deleted file mode 100644 index 33d0b0f4..00000000 --- a/docs/models/typeresponseinprogress.md +++ /dev/null @@ -1,15 +0,0 @@ -# TypeResponseInProgress - -## Example Usage - -```typescript -import { TypeResponseInProgress } from "@openrouter/sdk/models"; - -let value: TypeResponseInProgress = "response.in_progress"; -``` - -## Values - -```typescript -"response.in_progress" -``` \ No newline at end of file diff --git a/docs/models/typeresponseoutputitemadded.md b/docs/models/typeresponseoutputitemadded.md deleted file mode 100644 index d315d045..00000000 --- a/docs/models/typeresponseoutputitemadded.md +++ /dev/null @@ -1,15 +0,0 @@ -# TypeResponseOutputItemAdded - -## Example Usage - -```typescript -import { TypeResponseOutputItemAdded } from "@openrouter/sdk/models"; - -let value: TypeResponseOutputItemAdded = "response.output_item.added"; -``` - -## Values - -```typescript -"response.output_item.added" -``` \ No newline at end of file diff --git a/docs/models/typeresponseoutputitemdone.md b/docs/models/typeresponseoutputitemdone.md deleted file mode 100644 index acf5d4ec..00000000 --- a/docs/models/typeresponseoutputitemdone.md +++ /dev/null @@ -1,15 +0,0 @@ -# TypeResponseOutputItemDone - -## Example Usage - -```typescript -import { TypeResponseOutputItemDone } from "@openrouter/sdk/models"; - -let value: TypeResponseOutputItemDone = "response.output_item.done"; -``` - -## Values - -```typescript -"response.output_item.done" -``` \ No newline at end of file diff --git a/docs/models/typeresponseoutputtextannotationadded.md b/docs/models/typeresponseoutputtextannotationadded.md deleted file mode 100644 index ef71545b..00000000 --- a/docs/models/typeresponseoutputtextannotationadded.md +++ /dev/null @@ -1,16 +0,0 @@ -# TypeResponseOutputTextAnnotationAdded - -## Example Usage - -```typescript -import { TypeResponseOutputTextAnnotationAdded } from "@openrouter/sdk/models"; - -let value: TypeResponseOutputTextAnnotationAdded = - "response.output_text.annotation.added"; -``` - -## Values - -```typescript -"response.output_text.annotation.added" -``` \ No newline at end of file diff --git a/docs/models/typeresponseoutputtextdelta.md b/docs/models/typeresponseoutputtextdelta.md deleted file mode 100644 index 607d72de..00000000 --- a/docs/models/typeresponseoutputtextdelta.md +++ /dev/null @@ -1,15 +0,0 @@ -# TypeResponseOutputTextDelta - -## Example Usage - -```typescript -import { TypeResponseOutputTextDelta } from "@openrouter/sdk/models"; - -let value: TypeResponseOutputTextDelta = "response.output_text.delta"; -``` - -## Values - -```typescript -"response.output_text.delta" -``` \ No newline at end of file diff --git a/docs/models/typeresponseoutputtextdone.md b/docs/models/typeresponseoutputtextdone.md deleted file mode 100644 index d4ff897c..00000000 --- a/docs/models/typeresponseoutputtextdone.md +++ /dev/null @@ -1,15 +0,0 @@ -# TypeResponseOutputTextDone - -## Example Usage - -```typescript -import { TypeResponseOutputTextDone } from "@openrouter/sdk/models"; - -let value: TypeResponseOutputTextDone = "response.output_text.done"; -``` - -## Values - -```typescript -"response.output_text.done" -``` \ No newline at end of file diff --git a/docs/models/typeresponsereasoningsummarypartdone.md b/docs/models/typeresponsereasoningsummarypartdone.md deleted file mode 100644 index af98210b..00000000 --- a/docs/models/typeresponsereasoningsummarypartdone.md +++ /dev/null @@ -1,16 +0,0 @@ -# TypeResponseReasoningSummaryPartDone - -## Example Usage - -```typescript -import { TypeResponseReasoningSummaryPartDone } from "@openrouter/sdk/models"; - -let value: TypeResponseReasoningSummaryPartDone = - "response.reasoning_summary_part.done"; -``` - -## Values - -```typescript -"response.reasoning_summary_part.done" -``` \ No newline at end of file diff --git a/docs/models/typeresponserefusaldelta.md b/docs/models/typeresponserefusaldelta.md deleted file mode 100644 index f3b2e039..00000000 --- a/docs/models/typeresponserefusaldelta.md +++ /dev/null @@ -1,15 +0,0 @@ -# TypeResponseRefusalDelta - -## Example Usage - -```typescript -import { TypeResponseRefusalDelta } from "@openrouter/sdk/models"; - -let value: TypeResponseRefusalDelta = "response.refusal.delta"; -``` - -## Values - -```typescript -"response.refusal.delta" -``` \ No newline at end of file diff --git a/docs/models/typeresponserefusaldone.md b/docs/models/typeresponserefusaldone.md deleted file mode 100644 index b425be6c..00000000 --- a/docs/models/typeresponserefusaldone.md +++ /dev/null @@ -1,15 +0,0 @@ -# TypeResponseRefusalDone - -## Example Usage - -```typescript -import { TypeResponseRefusalDone } from "@openrouter/sdk/models"; - -let value: TypeResponseRefusalDone = "response.refusal.done"; -``` - -## Values - -```typescript -"response.refusal.done" -``` \ No newline at end of file diff --git a/docs/models/urlcitation.md b/docs/models/urlcitation.md index cc7c350b..284cac10 100644 --- a/docs/models/urlcitation.md +++ b/docs/models/urlcitation.md @@ -16,10 +16,10 @@ let value: URLCitation = { ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | -| `type` | [models.URLCitationType](../models/urlcitationtype.md) | :heavy_check_mark: | N/A | -| `url` | *string* | :heavy_check_mark: | N/A | -| `title` | *string* | :heavy_check_mark: | N/A | -| `startIndex` | *number* | :heavy_check_mark: | N/A | -| `endIndex` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `type` | *"url_citation"* | :heavy_check_mark: | N/A | +| `url` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | +| `startIndex` | *number* | :heavy_check_mark: | N/A | +| `endIndex` | *number* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/urlcitationtype.md b/docs/models/urlcitationtype.md deleted file mode 100644 index 271ee45a..00000000 --- a/docs/models/urlcitationtype.md +++ /dev/null @@ -1,15 +0,0 @@ -# URLCitationType - -## Example Usage - -```typescript -import { URLCitationType } from "@openrouter/sdk/models"; - -let value: URLCitationType = "url_citation"; -``` - -## Values - -```typescript -"url_citation" -``` \ No newline at end of file diff --git a/docs/models/usermessage.md b/docs/models/usermessage.md index 4a060604..792d86b7 100644 --- a/docs/models/usermessage.md +++ b/docs/models/usermessage.md @@ -15,6 +15,6 @@ let value: UserMessage = { | Field | Type | Required | Description | | --------------------------- | --------------------------- | --------------------------- | --------------------------- | -| `role` | *string* | :heavy_check_mark: | N/A | +| `role` | *"user"* | :heavy_check_mark: | N/A | | `content` | *models.UserMessageContent* | :heavy_check_mark: | N/A | | `name` | *string* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/chatmessagecontentitemvideovideourlvideourl.md b/docs/models/videourl1.md similarity index 56% rename from docs/models/chatmessagecontentitemvideovideourlvideourl.md rename to docs/models/videourl1.md index b29a8e52..aa61751a 100644 --- a/docs/models/chatmessagecontentitemvideovideourlvideourl.md +++ b/docs/models/videourl1.md @@ -1,12 +1,12 @@ -# ChatMessageContentItemVideoVideoUrlVideoUrl +# VideoUrl1 ## Example Usage ```typescript -import { ChatMessageContentItemVideoVideoUrlVideoUrl } from "@openrouter/sdk/models"; +import { VideoUrl1 } from "@openrouter/sdk/models"; -let value: ChatMessageContentItemVideoVideoUrlVideoUrl = { - url: "https://perfumed-testimonial.net/", +let value: VideoUrl1 = { + url: "https://colorless-milestone.net/", }; ``` diff --git a/docs/models/videourl.md b/docs/models/videourl2.md similarity index 70% rename from docs/models/videourl.md rename to docs/models/videourl2.md index f591deb7..0ec1780e 100644 --- a/docs/models/videourl.md +++ b/docs/models/videourl2.md @@ -1,12 +1,12 @@ -# VideoURL +# VideoUrl2 ## Example Usage ```typescript -import { VideoURL } from "@openrouter/sdk/models"; +import { VideoUrl2 } from "@openrouter/sdk/models"; -let value: VideoURL = { - url: "https://oval-vision.biz/", +let value: VideoUrl2 = { + url: "https://triangular-soup.info", }; ``` diff --git a/examples/chatCompletions.example.ts b/examples/chatCompletions.example.ts index 14efa894..4fc5622a 100644 --- a/examples/chatCompletions.example.ts +++ b/examples/chatCompletions.example.ts @@ -2,8 +2,10 @@ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ -import dotenv from "dotenv"; +import dotenv from 'dotenv'; + dotenv.config(); + /** * Example usage of the @openrouter/sdk SDK for chat completions * @@ -11,47 +13,39 @@ dotenv.config(); * bun run chatCompletions.example.ts */ -import { OpenRouter } from "@openrouter/sdk"; +import { OpenRouter } from '@openrouter/sdk'; - -if (!process.env["OPENROUTER_API_KEY"]) { - throw new Error("Missing OPENROUTER_API_KEY environment variable"); +if (!process.env['OPENROUTER_API_KEY']) { + throw new Error('Missing OPENROUTER_API_KEY environment variable'); } const openRouter = new OpenRouter({ - apiKey: process.env["OPENROUTER_API_KEY"] ?? "", - debugLogger: console + apiKey: process.env['OPENROUTER_API_KEY'] ?? '', + debugLogger: console, }); async function nonStreamingExample() { - console.log("=== Non-Streaming Example ===\n"); - const result = await openRouter.chat.send({ - model: "qwen/qwen3-max", + model: 'qwen/qwen3-max', messages: [ { - role: "user", - content: "Tell me a short joke about programming", + role: 'user', + content: 'Tell me a short joke about programming', }, ], stream: false, }); - if ("choices" in result) { - console.log("Model:", result.model); - console.log("Response:", result.choices[0].message.content); - console.log("Usage:", result.usage); + if ('choices' in result) { } } async function streamingExample() { - console.log("\n=== Streaming Example ===\n"); - const result = await openRouter.chat.send({ - model: "qwen/qwen3-max", + model: 'qwen/qwen3-max', messages: [ { - role: "user", - content: "Write a haiku about TypeScript", + role: 'user', + content: 'Write a haiku about TypeScript', }, ], stream: true, @@ -60,24 +54,20 @@ async function streamingExample() { }, }); - if (result && typeof result === "object" && Symbol.asyncIterator in result) { - const stream = result - console.log("Streaming response:"); - let fullContent = ""; + if (result && typeof result === 'object' && Symbol.asyncIterator in result) { + const stream = result; + let _fullContent = ''; for await (const chunk of stream) { - if (chunk.choices && chunk.choices[0]?.delta?.content) { + if (chunk.choices?.[0]?.delta?.content) { const content = chunk.choices[0].delta.content; process.stdout.write(content); - fullContent += content; + _fullContent += content; } if (chunk.usage) { - console.log("\n\nStream usage:", chunk.usage); } } - - console.log("\n\nFull response:", fullContent); } } @@ -85,9 +75,7 @@ async function main() { try { await nonStreamingExample(); await streamingExample(); - } catch (error) { - console.error("Error:", error); - } + } catch (_error) {} } -main(); \ No newline at end of file +main(); diff --git a/examples/embeddings.example.ts b/examples/embeddings.example.ts new file mode 100644 index 00000000..fa03b09a --- /dev/null +++ b/examples/embeddings.example.ts @@ -0,0 +1,216 @@ +import dotenv from 'dotenv'; + +dotenv.config(); + +/** + * Example usage of the @openrouter/sdk SDK for embeddings + * + * To run this example from the examples directory with Bun: + * bun run embeddings.example.ts + */ + +import { OpenRouter } from '@openrouter/sdk'; + +if (!process.env['OPENROUTER_API_KEY']) { + throw new Error('Missing OPENROUTER_API_KEY environment variable'); +} + +const openRouter = new OpenRouter({ + apiKey: process.env['OPENROUTER_API_KEY'] ?? '', +}); + +/** + * Basic embedding generation with a single text input + */ +async function singleTextEmbedding() { + console.log('=== Single Text Embedding ===\n'); + + const response = await openRouter.embeddings.generate({ + input: 'The quick brown fox jumps over the lazy dog', + model: 'openai/text-embedding-3-small', + }); + + if (typeof response === 'object' && 'data' in response) { + console.log(`Model: ${response.model}`); + console.log(`Number of embeddings: ${response.data.length}`); + + const embedding = response.data[0]; + if (embedding && Array.isArray(embedding.embedding)) { + console.log(`Embedding dimensions: ${embedding.embedding.length}`); + console.log(`First 5 values: [${embedding.embedding.slice(0, 5).join(', ')}...]`); + } + + if (response.usage) { + console.log(`Tokens used: ${response.usage.totalTokens}`); + } + } + + console.log(''); +} + +/** + * Batch embedding generation with multiple text inputs + */ +async function batchEmbeddings() { + console.log('=== Batch Embeddings ===\n'); + + const texts = [ + 'Machine learning is a subset of artificial intelligence.', + 'Natural language processing helps computers understand text.', + 'Embeddings represent text as numerical vectors.', + ]; + + const response = await openRouter.embeddings.generate({ + input: texts, + model: 'openai/text-embedding-3-small', + }); + + if (typeof response === 'object' && 'data' in response) { + console.log(`Generated ${response.data.length} embeddings for ${texts.length} texts`); + + response.data.forEach((item, index) => { + if (item && Array.isArray(item.embedding)) { + console.log(` Text ${index + 1}: ${item.embedding.length} dimensions`); + } + }); + + if (response.usage) { + console.log(`Total tokens used: ${response.usage.totalTokens}`); + } + } + + console.log(''); +} + +/** + * Generate embeddings with custom dimensions (if supported by the model) + */ +async function customDimensionsEmbedding() { + console.log('=== Custom Dimensions Embedding ===\n'); + + const response = await openRouter.embeddings.generate({ + input: 'This text will be embedded with reduced dimensions.', + model: 'openai/text-embedding-3-small', + dimensions: 256, // Request smaller embedding size + }); + + if (typeof response === 'object' && 'data' in response) { + const embedding = response.data[0]; + if (embedding && Array.isArray(embedding.embedding)) { + console.log(`Requested dimensions: 256`); + console.log(`Actual dimensions: ${embedding.embedding.length}`); + } + } + + console.log(''); +} + +/** + * List available embedding models + */ +async function listEmbeddingModels() { + console.log('=== Available Embedding Models ===\n'); + + const response = await openRouter.embeddings.listModels(); + + if (response.data) { + console.log(`Found ${response.data.length} embedding models:\n`); + + // Show first 5 models + response.data.slice(0, 5).forEach((model) => { + console.log(` - ${model.id}`); + if (model.pricing) { + console.log(` Pricing: $${model.pricing.prompt}/1M prompt tokens`); + } + }); + + if (response.data.length > 5) { + console.log(` ... and ${response.data.length - 5} more`); + } + } + + console.log(''); +} + +/** + * Calculate cosine similarity between two embeddings + */ +function cosineSimilarity(a: number[], b: number[]): number { + if (a.length !== b.length) throw new Error('Vectors must have same length'); + + let dotProduct = 0; + let normA = 0; + let normB = 0; + + for (let i = 0; i < a.length; i++) { + dotProduct += a[i] * b[i]; + normA += a[i] * a[i]; + normB += b[i] * b[i]; + } + + return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB)); +} + +/** + * Demonstrate semantic similarity using embeddings + */ +async function semanticSimilarity() { + console.log('=== Semantic Similarity ===\n'); + + const texts = [ + 'The cat sat on the mat.', + 'A feline rested on the rug.', + 'The stock market crashed today.', + ]; + + const response = await openRouter.embeddings.generate({ + input: texts, + model: 'openai/text-embedding-3-small', + }); + + if (typeof response === 'object' && 'data' in response) { + const embeddings = response.data + .map((item) => (Array.isArray(item?.embedding) ? item.embedding : null)) + .filter((e): e is number[] => e !== null); + + if (embeddings.length === 3) { + const sim01 = cosineSimilarity(embeddings[0], embeddings[1]); + const sim02 = cosineSimilarity(embeddings[0], embeddings[2]); + const sim12 = cosineSimilarity(embeddings[1], embeddings[2]); + + console.log('Comparing semantic similarity:\n'); + console.log(` "${texts[0]}"`); + console.log(` "${texts[1]}"`); + console.log(` Similarity: ${(sim01 * 100).toFixed(2)}%\n`); + + console.log(` "${texts[0]}"`); + console.log(` "${texts[2]}"`); + console.log(` Similarity: ${(sim02 * 100).toFixed(2)}%\n`); + + console.log(` "${texts[1]}"`); + console.log(` "${texts[2]}"`); + console.log(` Similarity: ${(sim12 * 100).toFixed(2)}%\n`); + + console.log('Note: Higher similarity = more semantically related'); + } + } + + console.log(''); +} + +async function main() { + try { + await singleTextEmbedding(); + await batchEmbeddings(); + await customDimensionsEmbedding(); + await listEmbeddingModels(); + await semanticSimilarity(); + + console.log('All examples completed successfully!'); + } catch (error) { + console.error('Error running examples:', error); + process.exit(1); + } +} + +main(); diff --git a/examples/nextjs-example/eslint.config.mjs b/examples/nextjs-example/eslint.config.mjs index 719cea2b..672b7a00 100644 --- a/examples/nextjs-example/eslint.config.mjs +++ b/examples/nextjs-example/eslint.config.mjs @@ -1,6 +1,6 @@ -import { dirname } from "path"; -import { fileURLToPath } from "url"; -import { FlatCompat } from "@eslint/eslintrc"; +import { dirname } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { FlatCompat } from '@eslint/eslintrc'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); @@ -10,14 +10,14 @@ const compat = new FlatCompat({ }); const eslintConfig = [ - ...compat.extends("next/core-web-vitals", "next/typescript"), + ...compat.extends('next/core-web-vitals', 'next/typescript'), { ignores: [ - "node_modules/**", - ".next/**", - "out/**", - "build/**", - "next-env.d.ts", + 'node_modules/**', + '.next/**', + 'out/**', + 'build/**', + 'next-env.d.ts', ], }, ]; diff --git a/examples/nextjs-example/next.config.ts b/examples/nextjs-example/next.config.ts index e9ffa308..5e891cf0 100644 --- a/examples/nextjs-example/next.config.ts +++ b/examples/nextjs-example/next.config.ts @@ -1,4 +1,4 @@ -import type { NextConfig } from "next"; +import type { NextConfig } from 'next'; const nextConfig: NextConfig = { /* config options here */ diff --git a/examples/nextjs-example/package-lock.json b/examples/nextjs-example/package-lock.json deleted file mode 100644 index 400e30d6..00000000 --- a/examples/nextjs-example/package-lock.json +++ /dev/null @@ -1,6883 +0,0 @@ -{ - "name": "nextjs-example", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "nextjs-example", - "version": "0.1.0", - "dependencies": { - "@openrouter/sdk": "file:../..", - "@radix-ui/react-dialog": "^1.1.15", - "@radix-ui/react-select": "^2.2.6", - "@radix-ui/react-slot": "^1.2.3", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "lucide-react": "^0.544.0", - "next": "15.5.4", - "react": "19.1.0", - "react-dom": "19.1.0", - "tailwind-merge": "^3.3.1", - "usehooks-ts": "^3.1.1" - }, - "devDependencies": { - "@eslint/eslintrc": "^3", - "@tailwindcss/postcss": "^4", - "@types/node": "^20", - "@types/react": "^19", - "@types/react-dom": "^19", - "eslint": "^9", - "eslint-config-next": "15.5.4", - "tailwindcss": "^4", - "tw-animate-css": "^1.4.0", - "typescript": "^5" - } - }, - "../..": { - "name": "@openrouter/sdk", - "version": "0.1.27", - "license": "Apache-2.0", - "dependencies": { - "zod": "^3.25.0 || ^4.0.0" - }, - "devDependencies": { - "@eslint/js": "^9.19.0", - "@types/node": "^22.13.12", - "dotenv": "^16.4.7", - "eslint": "^9.19.0", - "globals": "^15.14.0", - "typescript": "~5.8.3", - "typescript-eslint": "^8.26.0", - "vitest": "^3.2.4" - } - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@emnapi/core": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.6.0.tgz", - "integrity": "sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.1.0", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.6.0.tgz", - "integrity": "sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==", - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", - "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", - "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.7", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.1.tgz", - "integrity": "sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.16.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/core": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", - "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "9.38.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.38.0.tgz", - "integrity": "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", - "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", - "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.16.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@floating-ui/core": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", - "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", - "license": "MIT", - "dependencies": { - "@floating-ui/utils": "^0.2.10" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", - "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", - "license": "MIT", - "dependencies": { - "@floating-ui/core": "^1.7.3", - "@floating-ui/utils": "^0.2.10" - } - }, - "node_modules/@floating-ui/react-dom": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", - "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", - "license": "MIT", - "dependencies": { - "@floating-ui/dom": "^1.7.4" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@floating-ui/utils": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", - "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", - "license": "MIT" - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@img/colour": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", - "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.4.tgz", - "integrity": "sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.2.3" - } - }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.4.tgz", - "integrity": "sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.2.3" - } - }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.3.tgz", - "integrity": "sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.3.tgz", - "integrity": "sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.3.tgz", - "integrity": "sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==", - "cpu": [ - "arm" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.3.tgz", - "integrity": "sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.3.tgz", - "integrity": "sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==", - "cpu": [ - "ppc64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.3.tgz", - "integrity": "sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==", - "cpu": [ - "s390x" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.3.tgz", - "integrity": "sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.3.tgz", - "integrity": "sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.3.tgz", - "integrity": "sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.4.tgz", - "integrity": "sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==", - "cpu": [ - "arm" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.2.3" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.4.tgz", - "integrity": "sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.2.3" - } - }, - "node_modules/@img/sharp-linux-ppc64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.4.tgz", - "integrity": "sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==", - "cpu": [ - "ppc64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-ppc64": "1.2.3" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.4.tgz", - "integrity": "sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==", - "cpu": [ - "s390x" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.2.3" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.4.tgz", - "integrity": "sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.2.3" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.4.tgz", - "integrity": "sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.2.3" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.4.tgz", - "integrity": "sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.2.3" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.4.tgz", - "integrity": "sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==", - "cpu": [ - "wasm32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.5.0" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.4.tgz", - "integrity": "sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.4.tgz", - "integrity": "sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==", - "cpu": [ - "ia32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.4.tgz", - "integrity": "sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", - "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@tybys/wasm-util": "^0.10.0" - } - }, - "node_modules/@next/env": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.4.tgz", - "integrity": "sha512-27SQhYp5QryzIT5uO8hq99C69eLQ7qkzkDPsk3N+GuS2XgOgoYEeOav7Pf8Tn4drECOVDsDg8oj+/DVy8qQL2A==", - "license": "MIT" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.5.4.tgz", - "integrity": "sha512-SR1vhXNNg16T4zffhJ4TS7Xn7eq4NfKfcOsRwea7RIAHrjRpI9ALYbamqIJqkAhowLlERffiwk0FMvTLNdnVtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-glob": "3.3.1" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.4.tgz", - "integrity": "sha512-nopqz+Ov6uvorej8ndRX6HlxCYWCO3AHLfKK2TYvxoSB2scETOcfm/HSS3piPqc3A+MUgyHoqE6je4wnkjfrOA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.4.tgz", - "integrity": "sha512-QOTCFq8b09ghfjRJKfb68kU9k2K+2wsC4A67psOiMn849K9ZXgCSRQr0oVHfmKnoqCbEmQWG1f2h1T2vtJJ9mA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.4.tgz", - "integrity": "sha512-eRD5zkts6jS3VfE/J0Kt1VxdFqTnMc3QgO5lFE5GKN3KDI/uUpSyK3CjQHmfEkYR4wCOl0R0XrsjpxfWEA++XA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.4.tgz", - "integrity": "sha512-TOK7iTxmXFc45UrtKqWdZ1shfxuL4tnVAOuuJK4S88rX3oyVV4ZkLjtMT85wQkfBrOOvU55aLty+MV8xmcJR8A==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.4.tgz", - "integrity": "sha512-7HKolaj+481FSW/5lL0BcTkA4Ueam9SPYWyN/ib/WGAFZf0DGAN8frNpNZYFHtM4ZstrHZS3LY3vrwlIQfsiMA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.4.tgz", - "integrity": "sha512-nlQQ6nfgN0nCO/KuyEUwwOdwQIGjOs4WNMjEUtpIQJPR2NUfmGpW2wkJln1d4nJ7oUzd1g4GivH5GoEPBgfsdw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.4.tgz", - "integrity": "sha512-PcR2bN7FlM32XM6eumklmyWLLbu2vs+D7nJX8OAIoWy69Kef8mfiN4e8TUv2KohprwifdpFKPzIP1njuCjD0YA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.4.tgz", - "integrity": "sha512-1ur2tSHZj8Px/KMAthmuI9FMp/YFusMMGoRNJaRZMOlSkgvLjzosSdQI0cJAKogdHl3qXUQKL9MGaYvKwA7DXg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@openrouter/sdk": { - "resolved": "../..", - "link": true - }, - "node_modules/@radix-ui/number": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", - "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", - "license": "MIT" - }, - "node_modules/@radix-ui/primitive": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", - "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", - "license": "MIT" - }, - "node_modules/@radix-ui/react-arrow": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", - "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-collection": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", - "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-context": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", - "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dialog": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", - "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-direction": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", - "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", - "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-escape-keydown": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", - "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", - "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-id": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", - "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-popper": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", - "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", - "license": "MIT", - "dependencies": { - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-rect": "1.1.1", - "@radix-ui/react-use-size": "1.1.1", - "@radix-ui/rect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-portal": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", - "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-presence": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", - "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-primitive": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", - "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-slot": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-select": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz", - "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-visually-hidden": "1.2.3", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", - "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", - "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-effect-event": "0.0.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-effect-event": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", - "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", - "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", - "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-previous": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", - "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-rect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", - "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", - "license": "MIT", - "dependencies": { - "@radix-ui/rect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", - "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-visually-hidden": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", - "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/rect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", - "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", - "license": "MIT" - }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.14.1.tgz", - "integrity": "sha512-jGTk8UD/RdjsNZW8qq10r0RBvxL8OWtoT+kImlzPDFilmozzM+9QmIJsmze9UiSBrFU45ZxhTYBypn9q9z/VfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@swc/helpers": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@tailwindcss/node": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.16.tgz", - "integrity": "sha512-BX5iaSsloNuvKNHRN3k2RcCuTEgASTo77mofW0vmeHkfrDWaoFAFvNHpEgtu0eqyypcyiBkDWzSMxJhp3AUVcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/remapping": "^2.3.4", - "enhanced-resolve": "^5.18.3", - "jiti": "^2.6.1", - "lightningcss": "1.30.2", - "magic-string": "^0.30.19", - "source-map-js": "^1.2.1", - "tailwindcss": "4.1.16" - } - }, - "node_modules/@tailwindcss/oxide": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.16.tgz", - "integrity": "sha512-2OSv52FRuhdlgyOQqgtQHuCgXnS8nFSYRp2tJ+4WZXKgTxqPy7SMSls8c3mPT5pkZ17SBToGM5LHEJBO7miEdg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - }, - "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.1.16", - "@tailwindcss/oxide-darwin-arm64": "4.1.16", - "@tailwindcss/oxide-darwin-x64": "4.1.16", - "@tailwindcss/oxide-freebsd-x64": "4.1.16", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.16", - "@tailwindcss/oxide-linux-arm64-gnu": "4.1.16", - "@tailwindcss/oxide-linux-arm64-musl": "4.1.16", - "@tailwindcss/oxide-linux-x64-gnu": "4.1.16", - "@tailwindcss/oxide-linux-x64-musl": "4.1.16", - "@tailwindcss/oxide-wasm32-wasi": "4.1.16", - "@tailwindcss/oxide-win32-arm64-msvc": "4.1.16", - "@tailwindcss/oxide-win32-x64-msvc": "4.1.16" - } - }, - "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.16.tgz", - "integrity": "sha512-8+ctzkjHgwDJ5caq9IqRSgsP70xhdhJvm+oueS/yhD5ixLhqTw9fSL1OurzMUhBwE5zK26FXLCz2f/RtkISqHA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.16.tgz", - "integrity": "sha512-C3oZy5042v2FOALBZtY0JTDnGNdS6w7DxL/odvSny17ORUnaRKhyTse8xYi3yKGyfnTUOdavRCdmc8QqJYwFKA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.16.tgz", - "integrity": "sha512-vjrl/1Ub9+JwU6BP0emgipGjowzYZMjbWCDqwA2Z4vCa+HBSpP4v6U2ddejcHsolsYxwL5r4bPNoamlV0xDdLg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.16.tgz", - "integrity": "sha512-TSMpPYpQLm+aR1wW5rKuUuEruc/oOX3C7H0BTnPDn7W/eMw8W+MRMpiypKMkXZfwH8wqPIRKppuZoedTtNj2tg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.16.tgz", - "integrity": "sha512-p0GGfRg/w0sdsFKBjMYvvKIiKy/LNWLWgV/plR4lUgrsxFAoQBFrXkZ4C0w8IOXfslB9vHK/JGASWD2IefIpvw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.16.tgz", - "integrity": "sha512-DoixyMmTNO19rwRPdqviTrG1rYzpxgyYJl8RgQvdAQUzxC1ToLRqtNJpU/ATURSKgIg6uerPw2feW0aS8SNr/w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.16.tgz", - "integrity": "sha512-H81UXMa9hJhWhaAUca6bU2wm5RRFpuHImrwXBUvPbYb+3jo32I9VIwpOX6hms0fPmA6f2pGVlybO6qU8pF4fzQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.16.tgz", - "integrity": "sha512-ZGHQxDtFC2/ruo7t99Qo2TTIvOERULPl5l0K1g0oK6b5PGqjYMga+FcY1wIUnrUxY56h28FxybtDEla+ICOyew==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.16.tgz", - "integrity": "sha512-Oi1tAaa0rcKf1Og9MzKeINZzMLPbhxvm7rno5/zuP1WYmpiG0bEHq4AcRUiG2165/WUzvxkW4XDYCscZWbTLZw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-wasm32-wasi": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.16.tgz", - "integrity": "sha512-B01u/b8LteGRwucIBmCQ07FVXLzImWESAIMcUU6nvFt/tYsQ6IHz8DmZ5KtvmwxD+iTYBtM1xwoGXswnlu9v0Q==", - "bundleDependencies": [ - "@napi-rs/wasm-runtime", - "@emnapi/core", - "@emnapi/runtime", - "@tybys/wasm-util", - "@emnapi/wasi-threads", - "tslib" - ], - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.5.0", - "@emnapi/runtime": "^1.5.0", - "@emnapi/wasi-threads": "^1.1.0", - "@napi-rs/wasm-runtime": "^1.0.7", - "@tybys/wasm-util": "^0.10.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.16.tgz", - "integrity": "sha512-zX+Q8sSkGj6HKRTMJXuPvOcP8XfYON24zJBRPlszcH1Np7xuHXhWn8qfFjIujVzvH3BHU+16jBXwgpl20i+v9A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.16.tgz", - "integrity": "sha512-m5dDFJUEejbFqP+UXVstd4W/wnxA4F61q8SoL+mqTypId2T2ZpuxosNSgowiCnLp2+Z+rivdU0AqpfgiD7yCBg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/postcss": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.16.tgz", - "integrity": "sha512-Qn3SFGPXYQMKR/UtqS+dqvPrzEeBZHrFA92maT4zijCVggdsXnDBMsPFJo1eArX3J+O+Gi+8pV4PkqjLCNBk3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "@tailwindcss/node": "4.1.16", - "@tailwindcss/oxide": "4.1.16", - "postcss": "^8.4.41", - "tailwindcss": "4.1.16" - } - }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "20.19.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.24.tgz", - "integrity": "sha512-FE5u0ezmi6y9OZEzlJfg37mqqf6ZDSF2V/NLjUyGrR9uTZ7Sb9F7bLNZ03S4XVUNRWGA7Ck4c1kK+YnuWjl+DA==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/react": { - "version": "19.2.2", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz", - "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "19.2.2", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.2.tgz", - "integrity": "sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==", - "devOptional": true, - "license": "MIT", - "peerDependencies": { - "@types/react": "^19.2.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.2.tgz", - "integrity": "sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.46.2", - "@typescript-eslint/type-utils": "8.46.2", - "@typescript-eslint/utils": "8.46.2", - "@typescript-eslint/visitor-keys": "8.46.2", - "graphemer": "^1.4.0", - "ignore": "^7.0.0", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.46.2", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.2.tgz", - "integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.46.2", - "@typescript-eslint/types": "8.46.2", - "@typescript-eslint/typescript-estree": "8.46.2", - "@typescript-eslint/visitor-keys": "8.46.2", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.2.tgz", - "integrity": "sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.46.2", - "@typescript-eslint/types": "^8.46.2", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.2.tgz", - "integrity": "sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.46.2", - "@typescript-eslint/visitor-keys": "8.46.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.2.tgz", - "integrity": "sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.2.tgz", - "integrity": "sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.46.2", - "@typescript-eslint/typescript-estree": "8.46.2", - "@typescript-eslint/utils": "8.46.2", - "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.2.tgz", - "integrity": "sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.2.tgz", - "integrity": "sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.46.2", - "@typescript-eslint/tsconfig-utils": "8.46.2", - "@typescript-eslint/types": "8.46.2", - "@typescript-eslint/visitor-keys": "8.46.2", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.2.tgz", - "integrity": "sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.46.2", - "@typescript-eslint/types": "8.46.2", - "@typescript-eslint/typescript-estree": "8.46.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.2.tgz", - "integrity": "sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.46.2", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@unrs/resolver-binding-android-arm-eabi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", - "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-android-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", - "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", - "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", - "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-freebsd-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", - "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", - "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", - "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", - "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", - "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", - "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", - "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", - "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", - "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", - "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", - "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", - "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.11" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", - "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", - "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", - "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/aria-hidden": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", - "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.0", - "es-object-atoms": "^1.1.1", - "get-intrinsic": "^1.3.0", - "is-string": "^1.1.1", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", - "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-shim-unscopables": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.0.tgz", - "integrity": "sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==", - "dev": true, - "license": "MPL-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001751", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz", - "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/class-variance-authority": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", - "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", - "license": "Apache-2.0", - "dependencies": { - "clsx": "^2.1.1" - }, - "funding": { - "url": "https://polar.sh/cva" - } - }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", - "license": "MIT" - }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "devOptional": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node-es": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", - "license": "MIT" - }, - "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/enhanced-resolve": { - "version": "5.18.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", - "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.3.0", - "get-proto": "^1.0.1", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.1", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.4", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "stop-iteration-iterator": "^1.1.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.19" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.6", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.4", - "safe-array-concat": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "9.38.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.38.0.tgz", - "integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.1", - "@eslint/config-helpers": "^0.4.1", - "@eslint/core": "^0.16.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.38.0", - "@eslint/plugin-kit": "^0.4.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-config-next": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.5.4.tgz", - "integrity": "sha512-BzgVVuT3kfJes8i2GHenC1SRJ+W3BTML11lAOYFOOPzrk2xp66jBOAGEFRw+3LkYCln5UzvFsLhojrshb5Zfaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@next/eslint-plugin-next": "15.5.4", - "@rushstack/eslint-patch": "^1.10.3", - "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jsx-a11y": "^6.10.0", - "eslint-plugin-react": "^7.37.0", - "eslint-plugin-react-hooks": "^5.0.0" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", - "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.4.0", - "get-tsconfig": "^4.10.0", - "is-bun-module": "^2.0.0", - "stable-hash": "^0.0.5", - "tinyglobby": "^0.2.13", - "unrs-resolver": "^1.6.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-import-resolver-typescript" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*", - "eslint-plugin-import-x": "*" - }, - "peerDependenciesMeta": { - "eslint-plugin-import": { - "optional": true - }, - "eslint-plugin-import-x": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", - "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.32.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", - "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.9", - "array.prototype.findlastindex": "^1.2.6", - "array.prototype.flat": "^1.3.3", - "array.prototype.flatmap": "^1.3.3", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.1", - "hasown": "^2.0.2", - "is-core-module": "^2.16.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.1", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.9", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", - "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "aria-query": "^5.3.2", - "array-includes": "^3.1.8", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "^4.10.0", - "axobject-query": "^4.1.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "hasown": "^2.0.2", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "safe-regex-test": "^1.0.3", - "string.prototype.includes": "^2.0.1" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.37.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", - "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.3", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.2.1", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.9", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.1", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.12", - "string.prototype.repeat": "^1.0.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", - "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC" - }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/generator-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", - "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-nonce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", - "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", - "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bun-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", - "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.7.1" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-generator-function": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", - "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.4", - "generator-function": "^2.0.0", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/iterator.prototype": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", - "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "get-proto": "^1.0.0", - "has-symbols": "^1.1.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/jiti": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", - "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "dev": true, - "license": "MIT", - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lightningcss": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", - "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-android-arm64": "1.30.2", - "lightningcss-darwin-arm64": "1.30.2", - "lightningcss-darwin-x64": "1.30.2", - "lightningcss-freebsd-x64": "1.30.2", - "lightningcss-linux-arm-gnueabihf": "1.30.2", - "lightningcss-linux-arm64-gnu": "1.30.2", - "lightningcss-linux-arm64-musl": "1.30.2", - "lightningcss-linux-x64-gnu": "1.30.2", - "lightningcss-linux-x64-musl": "1.30.2", - "lightningcss-win32-arm64-msvc": "1.30.2", - "lightningcss-win32-x64-msvc": "1.30.2" - } - }, - "node_modules/lightningcss-android-arm64": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", - "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", - "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", - "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", - "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", - "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", - "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", - "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", - "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", - "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", - "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", - "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lucide-react": { - "version": "0.544.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.544.0.tgz", - "integrity": "sha512-t5tS44bqd825zAW45UQxpG2CvcC4urOwn2TrwSH8u+MjeE+1NnWl6QqeQ/6NdjMqdOygyiT9p3Ev0p1NJykxjw==", - "license": "ISC", - "peerDependencies": { - "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/napi-postinstall": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", - "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", - "dev": true, - "license": "MIT", - "bin": { - "napi-postinstall": "lib/cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/napi-postinstall" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/next": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/next/-/next-15.5.4.tgz", - "integrity": "sha512-xH4Yjhb82sFYQfY3vbkJfgSDgXvBB6a8xPs9i35k6oZJRoQRihZH+4s9Yo2qsWpzBmZ3lPXaJ2KPXLfkvW4LnA==", - "license": "MIT", - "dependencies": { - "@next/env": "15.5.4", - "@swc/helpers": "0.5.15", - "caniuse-lite": "^1.0.30001579", - "postcss": "8.4.31", - "styled-jsx": "5.1.6" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "15.5.4", - "@next/swc-darwin-x64": "15.5.4", - "@next/swc-linux-arm64-gnu": "15.5.4", - "@next/swc-linux-arm64-musl": "15.5.4", - "@next/swc-linux-x64-gnu": "15.5.4", - "@next/swc-linux-x64-musl": "15.5.4", - "@next/swc-win32-arm64-msvc": "15.5.4", - "@next/swc-win32-x64-msvc": "15.5.4", - "sharp": "^0.34.3" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "@playwright/test": "^1.51.1", - "babel-plugin-react-compiler": "*", - "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "@playwright/test": { - "optional": true - }, - "babel-plugin-react-compiler": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/next/node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", - "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.values": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", - "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", - "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", - "license": "MIT", - "dependencies": { - "scheduler": "^0.26.0" - }, - "peerDependencies": { - "react": "^19.1.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/react-remove-scroll": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", - "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", - "license": "MIT", - "dependencies": { - "react-remove-scroll-bar": "^2.3.7", - "react-style-singleton": "^2.2.3", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.3", - "use-sidecar": "^1.1.3" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-remove-scroll-bar": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", - "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", - "license": "MIT", - "dependencies": { - "react-style-singleton": "^2.2.2", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-style-singleton": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", - "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", - "license": "MIT", - "dependencies": { - "get-nonce": "^1.0.0", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", - "license": "MIT" - }, - "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "devOptional": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/sharp": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.4.tgz", - "integrity": "sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==", - "hasInstallScript": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@img/colour": "^1.0.0", - "detect-libc": "^2.1.0", - "semver": "^7.7.2" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.4", - "@img/sharp-darwin-x64": "0.34.4", - "@img/sharp-libvips-darwin-arm64": "1.2.3", - "@img/sharp-libvips-darwin-x64": "1.2.3", - "@img/sharp-libvips-linux-arm": "1.2.3", - "@img/sharp-libvips-linux-arm64": "1.2.3", - "@img/sharp-libvips-linux-ppc64": "1.2.3", - "@img/sharp-libvips-linux-s390x": "1.2.3", - "@img/sharp-libvips-linux-x64": "1.2.3", - "@img/sharp-libvips-linuxmusl-arm64": "1.2.3", - "@img/sharp-libvips-linuxmusl-x64": "1.2.3", - "@img/sharp-linux-arm": "0.34.4", - "@img/sharp-linux-arm64": "0.34.4", - "@img/sharp-linux-ppc64": "0.34.4", - "@img/sharp-linux-s390x": "0.34.4", - "@img/sharp-linux-x64": "0.34.4", - "@img/sharp-linuxmusl-arm64": "0.34.4", - "@img/sharp-linuxmusl-x64": "0.34.4", - "@img/sharp-wasm32": "0.34.4", - "@img/sharp-win32-arm64": "0.34.4", - "@img/sharp-win32-ia32": "0.34.4", - "@img/sharp-win32-x64": "0.34.4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stable-hash": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", - "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", - "dev": true, - "license": "MIT" - }, - "node_modules/stop-iteration-iterator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "internal-slot": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string.prototype.includes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", - "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", - "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "regexp.prototype.flags": "^1.5.3", - "set-function-name": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/styled-jsx": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", - "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", - "license": "MIT", - "dependencies": { - "client-only": "0.0.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tailwind-merge": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.3.1.tgz", - "integrity": "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/dcastil" - } - }, - "node_modules/tailwindcss": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.16.tgz", - "integrity": "sha512-pONL5awpaQX4LN5eiv7moSiSPd/DLDzKVRJz8Q9PgzmAdd1R4307GQS2ZpfiN7ZmekdQrfhZZiSE5jkLR4WNaA==", - "dev": true, - "license": "MIT" - }, - "node_modules/tapable": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", - "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/tw-animate-css": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz", - "integrity": "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/Wombosvideo" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/unrs-resolver": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", - "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "napi-postinstall": "^0.3.0" - }, - "funding": { - "url": "https://opencollective.com/unrs-resolver" - }, - "optionalDependencies": { - "@unrs/resolver-binding-android-arm-eabi": "1.11.1", - "@unrs/resolver-binding-android-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-x64": "1.11.1", - "@unrs/resolver-binding-freebsd-x64": "1.11.1", - "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", - "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", - "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-musl": "1.11.1", - "@unrs/resolver-binding-wasm32-wasi": "1.11.1", - "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", - "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", - "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/use-callback-ref": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", - "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-sidecar": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", - "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", - "license": "MIT", - "dependencies": { - "detect-node-es": "^1.1.0", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/usehooks-ts": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/usehooks-ts/-/usehooks-ts-3.1.1.tgz", - "integrity": "sha512-I4diPp9Cq6ieSUH2wu+fDAVQO43xwtulo+fKEidHUwZPnYImbtkTjzIJYcDcJqxgmX31GVqNFURodvcgHcW0pA==", - "license": "MIT", - "dependencies": { - "lodash.debounce": "^4.0.8" - }, - "engines": { - "node": ">=16.15.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17 || ^18 || ^19 || ^19.0.0-rc" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.1.0", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.2.1", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.1.0", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/examples/nextjs-example/package.lock.json b/examples/nextjs-example/package.lock.json deleted file mode 100644 index 761fa30c..00000000 --- a/examples/nextjs-example/package.lock.json +++ /dev/null @@ -1,6945 +0,0 @@ -{ - "name": "nextjs-example", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "nextjs-example", - "version": "0.1.0", - "dependencies": { - "@openrouter/sdk": "file:../..", - "@radix-ui/react-dialog": "^1.1.15", - "@radix-ui/react-select": "^2.2.6", - "@radix-ui/react-slot": "^1.2.3", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "lucide-react": "^0.544.0", - "next": "15.5.4", - "react": "19.1.0", - "react-dom": "19.1.0", - "tailwind-merge": "^3.3.1", - "usehooks-ts": "^3.1.1" - }, - "devDependencies": { - "@eslint/eslintrc": "^3", - "@tailwindcss/postcss": "^4", - "@types/node": "^20", - "@types/react": "^19", - "@types/react-dom": "^19", - "eslint": "^9", - "eslint-config-next": "15.5.4", - "tailwindcss": "^4", - "tw-animate-css": "^1.4.0", - "typescript": "^5" - } - }, - "...": { - "extraneous": true - }, - "../..": { - "name": "@openrouter/sdk", - "version": "0.0.0-beta.38", - "dependencies": { - "zod": "^3.20.0" - }, - "devDependencies": { - "@eslint/js": "^9.19.0", - "@tanstack/react-query": "^5.61.4", - "@types/react": "^18.3.12", - "eslint": "^9.19.0", - "globals": "^15.14.0", - "tshy": "^2.0.0", - "typescript": "~5.8.3", - "typescript-eslint": "^8.26.0", - "vitest": "^3.2.4" - }, - "peerDependencies": { - "@tanstack/react-query": "^5", - "react": "^18 || ^19", - "react-dom": "^18 || ^19" - }, - "peerDependenciesMeta": { - "@tanstack/react-query": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@emnapi/core": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.5.0.tgz", - "integrity": "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.1.0", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz", - "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", - "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", - "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.6", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", - "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/core": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", - "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "9.36.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.36.0.tgz", - "integrity": "sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", - "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.15.2", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@floating-ui/core": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", - "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", - "license": "MIT", - "dependencies": { - "@floating-ui/utils": "^0.2.10" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", - "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", - "license": "MIT", - "dependencies": { - "@floating-ui/core": "^1.7.3", - "@floating-ui/utils": "^0.2.10" - } - }, - "node_modules/@floating-ui/react-dom": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", - "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", - "license": "MIT", - "dependencies": { - "@floating-ui/dom": "^1.7.4" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@floating-ui/utils": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", - "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", - "license": "MIT" - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@img/colour": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", - "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.4.tgz", - "integrity": "sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.2.3" - } - }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.4.tgz", - "integrity": "sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.2.3" - } - }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.3.tgz", - "integrity": "sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.3.tgz", - "integrity": "sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.3.tgz", - "integrity": "sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==", - "cpu": [ - "arm" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.3.tgz", - "integrity": "sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.3.tgz", - "integrity": "sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==", - "cpu": [ - "ppc64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.3.tgz", - "integrity": "sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==", - "cpu": [ - "s390x" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.3.tgz", - "integrity": "sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.3.tgz", - "integrity": "sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.3.tgz", - "integrity": "sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.4.tgz", - "integrity": "sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==", - "cpu": [ - "arm" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.2.3" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.4.tgz", - "integrity": "sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.2.3" - } - }, - "node_modules/@img/sharp-linux-ppc64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.4.tgz", - "integrity": "sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==", - "cpu": [ - "ppc64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-ppc64": "1.2.3" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.4.tgz", - "integrity": "sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==", - "cpu": [ - "s390x" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.2.3" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.4.tgz", - "integrity": "sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.2.3" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.4.tgz", - "integrity": "sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.2.3" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.4.tgz", - "integrity": "sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.2.3" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.4.tgz", - "integrity": "sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==", - "cpu": [ - "wasm32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.5.0" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.4.tgz", - "integrity": "sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.4.tgz", - "integrity": "sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==", - "cpu": [ - "ia32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.4.tgz", - "integrity": "sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.4" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", - "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@tybys/wasm-util": "^0.10.0" - } - }, - "node_modules/@next/env": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.4.tgz", - "integrity": "sha512-27SQhYp5QryzIT5uO8hq99C69eLQ7qkzkDPsk3N+GuS2XgOgoYEeOav7Pf8Tn4drECOVDsDg8oj+/DVy8qQL2A==", - "license": "MIT" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.5.4.tgz", - "integrity": "sha512-SR1vhXNNg16T4zffhJ4TS7Xn7eq4NfKfcOsRwea7RIAHrjRpI9ALYbamqIJqkAhowLlERffiwk0FMvTLNdnVtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-glob": "3.3.1" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.4.tgz", - "integrity": "sha512-nopqz+Ov6uvorej8ndRX6HlxCYWCO3AHLfKK2TYvxoSB2scETOcfm/HSS3piPqc3A+MUgyHoqE6je4wnkjfrOA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.4.tgz", - "integrity": "sha512-QOTCFq8b09ghfjRJKfb68kU9k2K+2wsC4A67psOiMn849K9ZXgCSRQr0oVHfmKnoqCbEmQWG1f2h1T2vtJJ9mA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.4.tgz", - "integrity": "sha512-eRD5zkts6jS3VfE/J0Kt1VxdFqTnMc3QgO5lFE5GKN3KDI/uUpSyK3CjQHmfEkYR4wCOl0R0XrsjpxfWEA++XA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.4.tgz", - "integrity": "sha512-TOK7iTxmXFc45UrtKqWdZ1shfxuL4tnVAOuuJK4S88rX3oyVV4ZkLjtMT85wQkfBrOOvU55aLty+MV8xmcJR8A==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.4.tgz", - "integrity": "sha512-7HKolaj+481FSW/5lL0BcTkA4Ueam9SPYWyN/ib/WGAFZf0DGAN8frNpNZYFHtM4ZstrHZS3LY3vrwlIQfsiMA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.4.tgz", - "integrity": "sha512-nlQQ6nfgN0nCO/KuyEUwwOdwQIGjOs4WNMjEUtpIQJPR2NUfmGpW2wkJln1d4nJ7oUzd1g4GivH5GoEPBgfsdw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.4.tgz", - "integrity": "sha512-PcR2bN7FlM32XM6eumklmyWLLbu2vs+D7nJX8OAIoWy69Kef8mfiN4e8TUv2KohprwifdpFKPzIP1njuCjD0YA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.4.tgz", - "integrity": "sha512-1ur2tSHZj8Px/KMAthmuI9FMp/YFusMMGoRNJaRZMOlSkgvLjzosSdQI0cJAKogdHl3qXUQKL9MGaYvKwA7DXg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@openrouter/sdk": { - "resolved": "../..", - "link": true - }, - "node_modules/@radix-ui/number": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", - "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", - "license": "MIT" - }, - "node_modules/@radix-ui/primitive": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", - "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", - "license": "MIT" - }, - "node_modules/@radix-ui/react-arrow": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", - "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-collection": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", - "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-context": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", - "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dialog": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", - "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-direction": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", - "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", - "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-escape-keydown": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", - "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", - "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-id": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", - "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-popper": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", - "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", - "license": "MIT", - "dependencies": { - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-rect": "1.1.1", - "@radix-ui/react-use-size": "1.1.1", - "@radix-ui/rect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-portal": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", - "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-presence": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", - "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-primitive": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", - "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-slot": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-select": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz", - "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-visually-hidden": "1.2.3", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", - "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", - "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-effect-event": "0.0.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-effect-event": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", - "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", - "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", - "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-previous": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", - "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-rect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", - "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", - "license": "MIT", - "dependencies": { - "@radix-ui/rect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", - "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-visually-hidden": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", - "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/rect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", - "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", - "license": "MIT" - }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.12.0.tgz", - "integrity": "sha512-5EwMtOqvJMMa3HbmxLlF74e+3/HhwBTMcvt3nqVJgGCozO6hzIPOBlwm8mGVNR9SN2IJpxSnlxczyDjcn7qIyw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@swc/helpers": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@tailwindcss/node": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.13.tgz", - "integrity": "sha512-eq3ouolC1oEFOAvOMOBAmfCIqZBJuvWvvYWh5h5iOYfe1HFC6+GZ6EIL0JdM3/niGRJmnrOc+8gl9/HGUaaptw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/remapping": "^2.3.4", - "enhanced-resolve": "^5.18.3", - "jiti": "^2.5.1", - "lightningcss": "1.30.1", - "magic-string": "^0.30.18", - "source-map-js": "^1.2.1", - "tailwindcss": "4.1.13" - } - }, - "node_modules/@tailwindcss/oxide": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.13.tgz", - "integrity": "sha512-CPgsM1IpGRa880sMbYmG1s4xhAy3xEt1QULgTJGQmZUeNgXFR7s1YxYygmJyBGtou4SyEosGAGEeYqY7R53bIA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "detect-libc": "^2.0.4", - "tar": "^7.4.3" - }, - "engines": { - "node": ">= 10" - }, - "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.1.13", - "@tailwindcss/oxide-darwin-arm64": "4.1.13", - "@tailwindcss/oxide-darwin-x64": "4.1.13", - "@tailwindcss/oxide-freebsd-x64": "4.1.13", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.13", - "@tailwindcss/oxide-linux-arm64-gnu": "4.1.13", - "@tailwindcss/oxide-linux-arm64-musl": "4.1.13", - "@tailwindcss/oxide-linux-x64-gnu": "4.1.13", - "@tailwindcss/oxide-linux-x64-musl": "4.1.13", - "@tailwindcss/oxide-wasm32-wasi": "4.1.13", - "@tailwindcss/oxide-win32-arm64-msvc": "4.1.13", - "@tailwindcss/oxide-win32-x64-msvc": "4.1.13" - } - }, - "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.13.tgz", - "integrity": "sha512-BrpTrVYyejbgGo57yc8ieE+D6VT9GOgnNdmh5Sac6+t0m+v+sKQevpFVpwX3pBrM2qKrQwJ0c5eDbtjouY/+ew==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.13.tgz", - "integrity": "sha512-YP+Jksc4U0KHcu76UhRDHq9bx4qtBftp9ShK/7UGfq0wpaP96YVnnjFnj3ZFrUAjc5iECzODl/Ts0AN7ZPOANQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.13.tgz", - "integrity": "sha512-aAJ3bbwrn/PQHDxCto9sxwQfT30PzyYJFG0u/BWZGeVXi5Hx6uuUOQEI2Fa43qvmUjTRQNZnGqe9t0Zntexeuw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.13.tgz", - "integrity": "sha512-Wt8KvASHwSXhKE/dJLCCWcTSVmBj3xhVhp/aF3RpAhGeZ3sVo7+NTfgiN8Vey/Fi8prRClDs6/f0KXPDTZE6nQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.13.tgz", - "integrity": "sha512-mbVbcAsW3Gkm2MGwA93eLtWrwajz91aXZCNSkGTx/R5eb6KpKD5q8Ueckkh9YNboU8RH7jiv+ol/I7ZyQ9H7Bw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.13.tgz", - "integrity": "sha512-wdtfkmpXiwej/yoAkrCP2DNzRXCALq9NVLgLELgLim1QpSfhQM5+ZxQQF8fkOiEpuNoKLp4nKZ6RC4kmeFH0HQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.13.tgz", - "integrity": "sha512-hZQrmtLdhyqzXHB7mkXfq0IYbxegaqTmfa1p9MBj72WPoDD3oNOh1Lnxf6xZLY9C3OV6qiCYkO1i/LrzEdW2mg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.13.tgz", - "integrity": "sha512-uaZTYWxSXyMWDJZNY1Ul7XkJTCBRFZ5Fo6wtjrgBKzZLoJNrG+WderJwAjPzuNZOnmdrVg260DKwXCFtJ/hWRQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.13.tgz", - "integrity": "sha512-oXiPj5mi4Hdn50v5RdnuuIms0PVPI/EG4fxAfFiIKQh5TgQgX7oSuDWntHW7WNIi/yVLAiS+CRGW4RkoGSSgVQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-wasm32-wasi": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.13.tgz", - "integrity": "sha512-+LC2nNtPovtrDwBc/nqnIKYh/W2+R69FA0hgoeOn64BdCX522u19ryLh3Vf3F8W49XBcMIxSe665kwy21FkhvA==", - "bundleDependencies": [ - "@napi-rs/wasm-runtime", - "@emnapi/core", - "@emnapi/runtime", - "@tybys/wasm-util", - "@emnapi/wasi-threads", - "tslib" - ], - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.4.5", - "@emnapi/runtime": "^1.4.5", - "@emnapi/wasi-threads": "^1.0.4", - "@napi-rs/wasm-runtime": "^0.2.12", - "@tybys/wasm-util": "^0.10.0", - "tslib": "^2.8.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.13.tgz", - "integrity": "sha512-dziTNeQXtoQ2KBXmrjCxsuPk3F3CQ/yb7ZNZNA+UkNTeiTGgfeh+gH5Pi7mRncVgcPD2xgHvkFCh/MhZWSgyQg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.13.tgz", - "integrity": "sha512-3+LKesjXydTkHk5zXX01b5KMzLV1xl2mcktBJkje7rhFUpUlYJy7IMOLqjIRQncLTa1WZZiFY/foAeB5nmaiTw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/postcss": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.13.tgz", - "integrity": "sha512-HLgx6YSFKJT7rJqh9oJs/TkBFhxuMOfUKSBEPYwV+t78POOBsdQ7crhZLzwcH3T0UyUuOzU/GK5pk5eKr3wCiQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "@tailwindcss/node": "4.1.13", - "@tailwindcss/oxide": "4.1.13", - "postcss": "^8.4.41", - "tailwindcss": "4.1.13" - } - }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "20.19.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.17.tgz", - "integrity": "sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/react": { - "version": "19.1.13", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.13.tgz", - "integrity": "sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "19.1.9", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.9.tgz", - "integrity": "sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==", - "devOptional": true, - "license": "MIT", - "peerDependencies": { - "@types/react": "^19.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.44.1.tgz", - "integrity": "sha512-molgphGqOBT7t4YKCSkbasmu1tb1MgrZ2szGzHbclF7PNmOkSTQVHy+2jXOSnxvR3+Xe1yySHFZoqMpz3TfQsw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.44.1", - "@typescript-eslint/type-utils": "8.44.1", - "@typescript-eslint/utils": "8.44.1", - "@typescript-eslint/visitor-keys": "8.44.1", - "graphemer": "^1.4.0", - "ignore": "^7.0.0", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.44.1", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.44.1.tgz", - "integrity": "sha512-EHrrEsyhOhxYt8MTg4zTF+DJMuNBzWwgvvOYNj/zm1vnaD/IC5zCXFehZv94Piqa2cRFfXrTFxIvO95L7Qc/cw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.44.1", - "@typescript-eslint/types": "8.44.1", - "@typescript-eslint/typescript-estree": "8.44.1", - "@typescript-eslint/visitor-keys": "8.44.1", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.44.1.tgz", - "integrity": "sha512-ycSa60eGg8GWAkVsKV4E6Nz33h+HjTXbsDT4FILyL8Obk5/mx4tbvCNsLf9zret3ipSumAOG89UcCs/KRaKYrA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.44.1", - "@typescript-eslint/types": "^8.44.1", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.44.1.tgz", - "integrity": "sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.44.1", - "@typescript-eslint/visitor-keys": "8.44.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.44.1.tgz", - "integrity": "sha512-B5OyACouEjuIvof3o86lRMvyDsFwZm+4fBOqFHccIctYgBjqR3qT39FBYGN87khcgf0ExpdCBeGKpKRhSFTjKQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.44.1.tgz", - "integrity": "sha512-KdEerZqHWXsRNKjF9NYswNISnFzXfXNDfPxoTh7tqohU/PRIbwTmsjGK6V9/RTYWau7NZvfo52lgVk+sJh0K3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.44.1", - "@typescript-eslint/typescript-estree": "8.44.1", - "@typescript-eslint/utils": "8.44.1", - "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.44.1.tgz", - "integrity": "sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.44.1.tgz", - "integrity": "sha512-qnQJ+mVa7szevdEyvfItbO5Vo+GfZ4/GZWWDRRLjrxYPkhM+6zYB2vRYwCsoJLzqFCdZT4mEqyJoyzkunsZ96A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.44.1", - "@typescript-eslint/tsconfig-utils": "8.44.1", - "@typescript-eslint/types": "8.44.1", - "@typescript-eslint/visitor-keys": "8.44.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.44.1.tgz", - "integrity": "sha512-DpX5Fp6edTlocMCwA+mHY8Mra+pPjRZ0TfHkXI8QFelIKcbADQz1LUPNtzOFUriBB2UYqw4Pi9+xV4w9ZczHFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.44.1", - "@typescript-eslint/types": "8.44.1", - "@typescript-eslint/typescript-estree": "8.44.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.44.1.tgz", - "integrity": "sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.44.1", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@unrs/resolver-binding-android-arm-eabi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", - "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-android-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", - "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", - "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", - "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-freebsd-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", - "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", - "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", - "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", - "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", - "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", - "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", - "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", - "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", - "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", - "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", - "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", - "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.11" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", - "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", - "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", - "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/aria-hidden": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", - "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.0", - "es-object-atoms": "^1.1.1", - "get-intrinsic": "^1.3.0", - "is-string": "^1.1.1", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", - "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-shim-unscopables": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", - "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", - "dev": true, - "license": "MPL-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001743", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001743.tgz", - "integrity": "sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/class-variance-authority": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", - "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", - "license": "Apache-2.0", - "dependencies": { - "clsx": "^2.1.1" - }, - "funding": { - "url": "https://polar.sh/cva" - } - }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", - "license": "MIT" - }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/detect-libc": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.1.tgz", - "integrity": "sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==", - "devOptional": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node-es": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", - "license": "MIT" - }, - "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/enhanced-resolve": { - "version": "5.18.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", - "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.3.0", - "get-proto": "^1.0.1", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.1", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.4", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "stop-iteration-iterator": "^1.1.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.19" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.6", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.4", - "safe-array-concat": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "9.36.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.36.0.tgz", - "integrity": "sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.1", - "@eslint/core": "^0.15.2", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.36.0", - "@eslint/plugin-kit": "^0.3.5", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-config-next": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.5.4.tgz", - "integrity": "sha512-BzgVVuT3kfJes8i2GHenC1SRJ+W3BTML11lAOYFOOPzrk2xp66jBOAGEFRw+3LkYCln5UzvFsLhojrshb5Zfaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@next/eslint-plugin-next": "15.5.4", - "@rushstack/eslint-patch": "^1.10.3", - "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jsx-a11y": "^6.10.0", - "eslint-plugin-react": "^7.37.0", - "eslint-plugin-react-hooks": "^5.0.0" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", - "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.4.0", - "get-tsconfig": "^4.10.0", - "is-bun-module": "^2.0.0", - "stable-hash": "^0.0.5", - "tinyglobby": "^0.2.13", - "unrs-resolver": "^1.6.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-import-resolver-typescript" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*", - "eslint-plugin-import-x": "*" - }, - "peerDependenciesMeta": { - "eslint-plugin-import": { - "optional": true - }, - "eslint-plugin-import-x": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", - "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.32.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", - "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.9", - "array.prototype.findlastindex": "^1.2.6", - "array.prototype.flat": "^1.3.3", - "array.prototype.flatmap": "^1.3.3", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.1", - "hasown": "^2.0.2", - "is-core-module": "^2.16.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.1", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.9", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", - "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "aria-query": "^5.3.2", - "array-includes": "^3.1.8", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "^4.10.0", - "axobject-query": "^4.1.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "hasown": "^2.0.2", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "safe-regex-test": "^1.0.3", - "string.prototype.includes": "^2.0.1" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.37.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", - "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.3", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.2.1", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.9", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.1", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.12", - "string.prototype.repeat": "^1.0.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", - "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC" - }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-nonce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", - "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", - "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bun-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", - "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.7.1" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/iterator.prototype": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", - "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "get-proto": "^1.0.0", - "has-symbols": "^1.1.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/jiti": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.0.tgz", - "integrity": "sha512-VXe6RjJkBPj0ohtqaO8vSWP3ZhAKo66fKrFNCll4BTcwljPLz03pCbaNKfzGP5MbrCYcbJ7v0nOYYwUzTEIdXQ==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "dev": true, - "license": "MIT", - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lightningcss": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", - "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-darwin-arm64": "1.30.1", - "lightningcss-darwin-x64": "1.30.1", - "lightningcss-freebsd-x64": "1.30.1", - "lightningcss-linux-arm-gnueabihf": "1.30.1", - "lightningcss-linux-arm64-gnu": "1.30.1", - "lightningcss-linux-arm64-musl": "1.30.1", - "lightningcss-linux-x64-gnu": "1.30.1", - "lightningcss-linux-x64-musl": "1.30.1", - "lightningcss-win32-arm64-msvc": "1.30.1", - "lightningcss-win32-x64-msvc": "1.30.1" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", - "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", - "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", - "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", - "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", - "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", - "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", - "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", - "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", - "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", - "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lucide-react": { - "version": "0.544.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.544.0.tgz", - "integrity": "sha512-t5tS44bqd825zAW45UQxpG2CvcC4urOwn2TrwSH8u+MjeE+1NnWl6QqeQ/6NdjMqdOygyiT9p3Ev0p1NJykxjw==", - "license": "ISC", - "peerDependencies": { - "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/magic-string": { - "version": "0.30.19", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", - "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minizlib": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", - "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.1.2" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/napi-postinstall": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.3.tgz", - "integrity": "sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow==", - "dev": true, - "license": "MIT", - "bin": { - "napi-postinstall": "lib/cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/napi-postinstall" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/next": { - "version": "15.5.4", - "resolved": "https://registry.npmjs.org/next/-/next-15.5.4.tgz", - "integrity": "sha512-xH4Yjhb82sFYQfY3vbkJfgSDgXvBB6a8xPs9i35k6oZJRoQRihZH+4s9Yo2qsWpzBmZ3lPXaJ2KPXLfkvW4LnA==", - "license": "MIT", - "dependencies": { - "@next/env": "15.5.4", - "@swc/helpers": "0.5.15", - "caniuse-lite": "^1.0.30001579", - "postcss": "8.4.31", - "styled-jsx": "5.1.6" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "15.5.4", - "@next/swc-darwin-x64": "15.5.4", - "@next/swc-linux-arm64-gnu": "15.5.4", - "@next/swc-linux-arm64-musl": "15.5.4", - "@next/swc-linux-x64-gnu": "15.5.4", - "@next/swc-linux-x64-musl": "15.5.4", - "@next/swc-win32-arm64-msvc": "15.5.4", - "@next/swc-win32-x64-msvc": "15.5.4", - "sharp": "^0.34.3" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "@playwright/test": "^1.51.1", - "babel-plugin-react-compiler": "*", - "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "@playwright/test": { - "optional": true - }, - "babel-plugin-react-compiler": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/next/node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", - "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.values": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", - "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", - "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", - "license": "MIT", - "dependencies": { - "scheduler": "^0.26.0" - }, - "peerDependencies": { - "react": "^19.1.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/react-remove-scroll": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", - "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", - "license": "MIT", - "dependencies": { - "react-remove-scroll-bar": "^2.3.7", - "react-style-singleton": "^2.2.3", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.3", - "use-sidecar": "^1.1.3" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-remove-scroll-bar": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", - "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", - "license": "MIT", - "dependencies": { - "react-style-singleton": "^2.2.2", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-style-singleton": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", - "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", - "license": "MIT", - "dependencies": { - "get-nonce": "^1.0.0", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", - "license": "MIT" - }, - "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "devOptional": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/sharp": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.4.tgz", - "integrity": "sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==", - "hasInstallScript": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@img/colour": "^1.0.0", - "detect-libc": "^2.1.0", - "semver": "^7.7.2" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.4", - "@img/sharp-darwin-x64": "0.34.4", - "@img/sharp-libvips-darwin-arm64": "1.2.3", - "@img/sharp-libvips-darwin-x64": "1.2.3", - "@img/sharp-libvips-linux-arm": "1.2.3", - "@img/sharp-libvips-linux-arm64": "1.2.3", - "@img/sharp-libvips-linux-ppc64": "1.2.3", - "@img/sharp-libvips-linux-s390x": "1.2.3", - "@img/sharp-libvips-linux-x64": "1.2.3", - "@img/sharp-libvips-linuxmusl-arm64": "1.2.3", - "@img/sharp-libvips-linuxmusl-x64": "1.2.3", - "@img/sharp-linux-arm": "0.34.4", - "@img/sharp-linux-arm64": "0.34.4", - "@img/sharp-linux-ppc64": "0.34.4", - "@img/sharp-linux-s390x": "0.34.4", - "@img/sharp-linux-x64": "0.34.4", - "@img/sharp-linuxmusl-arm64": "0.34.4", - "@img/sharp-linuxmusl-x64": "0.34.4", - "@img/sharp-wasm32": "0.34.4", - "@img/sharp-win32-arm64": "0.34.4", - "@img/sharp-win32-ia32": "0.34.4", - "@img/sharp-win32-x64": "0.34.4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stable-hash": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", - "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", - "dev": true, - "license": "MIT" - }, - "node_modules/stop-iteration-iterator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "internal-slot": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string.prototype.includes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", - "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", - "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "regexp.prototype.flags": "^1.5.3", - "set-function-name": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/styled-jsx": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", - "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", - "license": "MIT", - "dependencies": { - "client-only": "0.0.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tailwind-merge": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.3.1.tgz", - "integrity": "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/dcastil" - } - }, - "node_modules/tailwindcss": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.13.tgz", - "integrity": "sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w==", - "dev": true, - "license": "MIT" - }, - "node_modules/tapable": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.3.tgz", - "integrity": "sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/tar": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", - "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", - "dev": true, - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.1.0", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/tw-animate-css": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz", - "integrity": "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/Wombosvideo" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", - "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/unrs-resolver": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", - "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "napi-postinstall": "^0.3.0" - }, - "funding": { - "url": "https://opencollective.com/unrs-resolver" - }, - "optionalDependencies": { - "@unrs/resolver-binding-android-arm-eabi": "1.11.1", - "@unrs/resolver-binding-android-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-x64": "1.11.1", - "@unrs/resolver-binding-freebsd-x64": "1.11.1", - "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", - "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", - "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-musl": "1.11.1", - "@unrs/resolver-binding-wasm32-wasi": "1.11.1", - "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", - "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", - "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/use-callback-ref": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", - "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-sidecar": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", - "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", - "license": "MIT", - "dependencies": { - "detect-node-es": "^1.1.0", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/usehooks-ts": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/usehooks-ts/-/usehooks-ts-3.1.1.tgz", - "integrity": "sha512-I4diPp9Cq6ieSUH2wu+fDAVQO43xwtulo+fKEidHUwZPnYImbtkTjzIJYcDcJqxgmX31GVqNFURodvcgHcW0pA==", - "license": "MIT", - "dependencies": { - "lodash.debounce": "^4.0.8" - }, - "engines": { - "node": ">=16.15.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17 || ^18 || ^19 || ^19.0.0-rc" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.1.0", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.2.1", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.1.0", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} \ No newline at end of file diff --git a/examples/nextjs-example/pnpm-lock.yaml b/examples/nextjs-example/pnpm-lock.yaml new file mode 100644 index 00000000..a7738bab --- /dev/null +++ b/examples/nextjs-example/pnpm-lock.yaml @@ -0,0 +1,4487 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@openrouter/sdk': + specifier: file:../.. + version: file:../.. + '@radix-ui/react-dialog': + specifier: ^1.1.15 + version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-select': + specifier: ^2.2.6 + version: 2.2.6(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': + specifier: ^1.2.3 + version: 1.2.4(@types/react@19.2.7)(react@19.1.0) + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + lucide-react: + specifier: ^0.544.0 + version: 0.544.0(react@19.1.0) + next: + specifier: 15.5.4 + version: 15.5.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: + specifier: 19.1.0 + version: 19.1.0 + react-dom: + specifier: 19.1.0 + version: 19.1.0(react@19.1.0) + tailwind-merge: + specifier: ^3.3.1 + version: 3.4.0 + usehooks-ts: + specifier: ^3.1.1 + version: 3.1.1(react@19.1.0) + devDependencies: + '@eslint/eslintrc': + specifier: ^3 + version: 3.3.3 + '@tailwindcss/postcss': + specifier: ^4 + version: 4.1.17 + '@types/node': + specifier: ^20 + version: 20.19.25 + '@types/react': + specifier: ^19 + version: 19.2.7 + '@types/react-dom': + specifier: ^19 + version: 19.2.3(@types/react@19.2.7) + eslint: + specifier: ^9 + version: 9.39.1(jiti@2.6.1) + eslint-config-next: + specifier: 15.5.4 + version: 15.5.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + tailwindcss: + specifier: ^4 + version: 4.1.17 + tw-animate-css: + specifier: ^1.4.0 + version: 1.4.0 + typescript: + specifier: ^5 + version: 5.9.3 + +packages: + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@emnapi/core@1.7.1': + resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} + + '@emnapi/runtime@1.7.1': + resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} + + '@emnapi/wasi-threads@1.1.0': + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.21.1': + resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.3': + resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.39.1': + resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@floating-ui/core@1.7.3': + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} + + '@floating-ui/dom@1.7.4': + resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} + + '@floating-ui/react-dom@2.1.6': + resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.10': + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@img/colour@1.0.0': + resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@napi-rs/wasm-runtime@0.2.12': + resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + + '@next/env@15.5.4': + resolution: {integrity: sha512-27SQhYp5QryzIT5uO8hq99C69eLQ7qkzkDPsk3N+GuS2XgOgoYEeOav7Pf8Tn4drECOVDsDg8oj+/DVy8qQL2A==} + + '@next/eslint-plugin-next@15.5.4': + resolution: {integrity: sha512-SR1vhXNNg16T4zffhJ4TS7Xn7eq4NfKfcOsRwea7RIAHrjRpI9ALYbamqIJqkAhowLlERffiwk0FMvTLNdnVtw==} + + '@next/swc-darwin-arm64@15.5.4': + resolution: {integrity: sha512-nopqz+Ov6uvorej8ndRX6HlxCYWCO3AHLfKK2TYvxoSB2scETOcfm/HSS3piPqc3A+MUgyHoqE6je4wnkjfrOA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@15.5.4': + resolution: {integrity: sha512-QOTCFq8b09ghfjRJKfb68kU9k2K+2wsC4A67psOiMn849K9ZXgCSRQr0oVHfmKnoqCbEmQWG1f2h1T2vtJJ9mA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@15.5.4': + resolution: {integrity: sha512-eRD5zkts6jS3VfE/J0Kt1VxdFqTnMc3QgO5lFE5GKN3KDI/uUpSyK3CjQHmfEkYR4wCOl0R0XrsjpxfWEA++XA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-arm64-musl@15.5.4': + resolution: {integrity: sha512-TOK7iTxmXFc45UrtKqWdZ1shfxuL4tnVAOuuJK4S88rX3oyVV4ZkLjtMT85wQkfBrOOvU55aLty+MV8xmcJR8A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-x64-gnu@15.5.4': + resolution: {integrity: sha512-7HKolaj+481FSW/5lL0BcTkA4Ueam9SPYWyN/ib/WGAFZf0DGAN8frNpNZYFHtM4ZstrHZS3LY3vrwlIQfsiMA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-linux-x64-musl@15.5.4': + resolution: {integrity: sha512-nlQQ6nfgN0nCO/KuyEUwwOdwQIGjOs4WNMjEUtpIQJPR2NUfmGpW2wkJln1d4nJ7oUzd1g4GivH5GoEPBgfsdw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-win32-arm64-msvc@15.5.4': + resolution: {integrity: sha512-PcR2bN7FlM32XM6eumklmyWLLbu2vs+D7nJX8OAIoWy69Kef8mfiN4e8TUv2KohprwifdpFKPzIP1njuCjD0YA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@15.5.4': + resolution: {integrity: sha512-1ur2tSHZj8Px/KMAthmuI9FMp/YFusMMGoRNJaRZMOlSkgvLjzosSdQI0cJAKogdHl3qXUQKL9MGaYvKwA7DXg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nolyfill/is-core-module@1.0.39': + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} + + '@openrouter/sdk@file:../..': + resolution: {directory: ../.., type: directory} + + '@radix-ui/number@1.1.1': + resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} + + '@radix-ui/primitive@1.1.3': + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + + '@radix-ui/react-arrow@1.1.7': + resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-collection@1.1.7': + resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-compose-refs@1.1.2': + resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context@1.1.2': + resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dialog@1.1.15': + resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-direction@1.1.1': + resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dismissable-layer@1.1.11': + resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-focus-guards@1.1.3': + resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-focus-scope@1.1.7': + resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-id@1.1.1': + resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-popper@1.2.8': + resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.1.9': + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-presence@1.1.5': + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-select@2.2.6': + resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slot@1.2.3': + resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-slot@1.2.4': + resolution: {integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-callback-ref@1.1.1': + resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-controllable-state@1.2.2': + resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-effect-event@0.0.2': + resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-escape-keydown@1.1.1': + resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.1.1': + resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-previous@1.1.1': + resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-rect@1.1.1': + resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-size@1.1.1': + resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-visually-hidden@1.2.3': + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/rect@1.1.1': + resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@rushstack/eslint-patch@1.15.0': + resolution: {integrity: sha512-ojSshQPKwVvSMR8yT2L/QtUkV5SXi/IfDiJ4/8d6UbTPjiHVmxZzUAzGD8Tzks1b9+qQkZa0isUOvYObedITaw==} + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@tailwindcss/node@4.1.17': + resolution: {integrity: sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==} + + '@tailwindcss/oxide-android-arm64@4.1.17': + resolution: {integrity: sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.1.17': + resolution: {integrity: sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.1.17': + resolution: {integrity: sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.1.17': + resolution: {integrity: sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17': + resolution: {integrity: sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.17': + resolution: {integrity: sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.1.17': + resolution: {integrity: sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.1.17': + resolution: {integrity: sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.1.17': + resolution: {integrity: sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-wasm32-wasi@4.1.17': + resolution: {integrity: sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.17': + resolution: {integrity: sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.1.17': + resolution: {integrity: sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.1.17': + resolution: {integrity: sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA==} + engines: {node: '>= 10'} + + '@tailwindcss/postcss@4.1.17': + resolution: {integrity: sha512-+nKl9N9mN5uJ+M7dBOOCzINw94MPstNR/GtIhz1fpZysxL/4a+No64jCBD6CPN+bIHWFx3KWuu8XJRrj/572Dw==} + + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/node@20.19.25': + resolution: {integrity: sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==} + + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} + peerDependencies: + '@types/react': ^19.2.0 + + '@types/react@19.2.7': + resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==} + + '@typescript-eslint/eslint-plugin@8.48.1': + resolution: {integrity: sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.48.1 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/parser@8.48.1': + resolution: {integrity: sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/project-service@8.48.1': + resolution: {integrity: sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/scope-manager@8.48.1': + resolution: {integrity: sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.48.1': + resolution: {integrity: sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/type-utils@8.48.1': + resolution: {integrity: sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/types@8.48.1': + resolution: {integrity: sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.48.1': + resolution: {integrity: sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/utils@8.48.1': + resolution: {integrity: sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/visitor-keys@8.48.1': + resolution: {integrity: sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} + cpu: [arm] + os: [android] + + '@unrs/resolver-binding-android-arm64@1.11.1': + resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} + cpu: [arm64] + os: [android] + + '@unrs/resolver-binding-darwin-arm64@1.11.1': + resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} + cpu: [arm64] + os: [darwin] + + '@unrs/resolver-binding-darwin-x64@1.11.1': + resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} + cpu: [x64] + os: [darwin] + + '@unrs/resolver-binding-freebsd-x64@1.11.1': + resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} + cpu: [x64] + os: [freebsd] + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} + cpu: [ppc64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} + cpu: [s390x] + os: [linux] + + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-linux-x64-musl@1.11.1': + resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-wasm32-wasi@1.11.1': + resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} + cpu: [arm64] + os: [win32] + + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} + cpu: [ia32] + os: [win32] + + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} + cpu: [x64] + os: [win32] + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-hidden@1.2.6: + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-includes@3.1.9: + resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.6: + resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axe-core@4.11.0: + resolution: {integrity: sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==} + engines: {node: '>=4'} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001757: + resolution: {integrity: sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + enhanced-resolve@5.18.3: + resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} + engines: {node: '>=10.13.0'} + + es-abstract@1.24.0: + resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-iterator-helpers@1.2.1: + resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.1.0: + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-next@15.5.4: + resolution: {integrity: sha512-BzgVVuT3kfJes8i2GHenC1SRJ+W3BTML11lAOYFOOPzrk2xp66jBOAGEFRw+3LkYCln5UzvFsLhojrshb5Zfaw==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-import-resolver-typescript@3.10.1: + resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + + eslint-module-utils@2.12.1: + resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-import@2.32.0: + resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-jsx-a11y@6.10.2: + resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + + eslint-plugin-react-hooks@5.2.0: + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react@7.37.5: + resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.39.1: + resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.13.0: + resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-bun-module@2.0.0: + resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} + engines: {node: '>= 0.4'} + + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lightningcss-android-arm64@1.30.2: + resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.30.2: + resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.30.2: + resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.30.2: + resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.30.2: + resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.30.2: + resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.30.2: + resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.30.2: + resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.30.2: + resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.30.2: + resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.30.2: + resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.30.2: + resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} + engines: {node: '>= 12.0.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lucide-react@0.544.0: + resolution: {integrity: sha512-t5tS44bqd825zAW45UQxpG2CvcC4urOwn2TrwSH8u+MjeE+1NnWl6QqeQ/6NdjMqdOygyiT9p3Ev0p1NJykxjw==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + napi-postinstall@0.3.4: + resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + next@15.5.4: + resolution: {integrity: sha512-xH4Yjhb82sFYQfY3vbkJfgSDgXvBB6a8xPs9i35k6oZJRoQRihZH+4s9Yo2qsWpzBmZ3lPXaJ2KPXLfkvW4LnA==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.51.1 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.entries@1.1.9: + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + react-dom@19.1.0: + resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} + peerDependencies: + react: ^19.1.0 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.7.2: + resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react@19.1.0: + resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + engines: {node: '>=0.10.0'} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + engines: {node: '>= 0.4'} + hasBin: true + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + scheduler@0.26.0: + resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + stable-hash@0.0.5: + resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} + + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + + string.prototype.includes@2.0.1: + resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} + engines: {node: '>= 0.4'} + + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + tailwind-merge@3.4.0: + resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==} + + tailwindcss@4.1.17: + resolution: {integrity: sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==} + + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + engines: {node: '>=6'} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tw-animate-css@1.4.0: + resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + unrs-resolver@1.11.1: + resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + usehooks-ts@3.1.1: + resolution: {integrity: sha512-I4diPp9Cq6ieSUH2wu+fDAVQO43xwtulo+fKEidHUwZPnYImbtkTjzIJYcDcJqxgmX31GVqNFURodvcgHcW0pA==} + engines: {node: '>=16.15.0'} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 || ^19 || ^19.0.0-rc + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zod@4.1.13: + resolution: {integrity: sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==} + +snapshots: + + '@alloc/quick-lru@5.2.0': {} + + '@emnapi/core@1.7.1': + dependencies: + '@emnapi/wasi-threads': 1.1.0 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.7.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.1.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1(jiti@2.6.1))': + dependencies: + eslint: 9.39.1(jiti@2.6.1) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.21.1': + dependencies: + '@eslint/object-schema': 2.1.7 + debug: 4.4.3 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.2': + dependencies: + '@eslint/core': 0.17.0 + + '@eslint/core@0.17.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.3': + dependencies: + ajv: 6.12.6 + debug: 4.4.3 + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.1 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.39.1': {} + + '@eslint/object-schema@2.1.7': {} + + '@eslint/plugin-kit@0.4.1': + dependencies: + '@eslint/core': 0.17.0 + levn: 0.4.1 + + '@floating-ui/core@1.7.3': + dependencies: + '@floating-ui/utils': 0.2.10 + + '@floating-ui/dom@1.7.4': + dependencies: + '@floating-ui/core': 1.7.3 + '@floating-ui/utils': 0.2.10 + + '@floating-ui/react-dom@2.1.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@floating-ui/dom': 1.7.4 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + '@floating-ui/utils@0.2.10': {} + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@img/colour@1.0.0': + optional: true + + '@img/sharp-darwin-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + optional: true + + '@img/sharp-darwin-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true + + '@img/sharp-linux-arm@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true + + '@img/sharp-linux-ppc64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true + + '@img/sharp-linux-riscv64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 + optional: true + + '@img/sharp-linux-s390x@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.4 + optional: true + + '@img/sharp-linux-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': + dependencies: + '@emnapi/runtime': 1.7.1 + optional: true + + '@img/sharp-win32-arm64@0.34.5': + optional: true + + '@img/sharp-win32-ia32@0.34.5': + optional: true + + '@img/sharp-win32-x64@0.34.5': + optional: true + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@napi-rs/wasm-runtime@0.2.12': + dependencies: + '@emnapi/core': 1.7.1 + '@emnapi/runtime': 1.7.1 + '@tybys/wasm-util': 0.10.1 + optional: true + + '@next/env@15.5.4': {} + + '@next/eslint-plugin-next@15.5.4': + dependencies: + fast-glob: 3.3.1 + + '@next/swc-darwin-arm64@15.5.4': + optional: true + + '@next/swc-darwin-x64@15.5.4': + optional: true + + '@next/swc-linux-arm64-gnu@15.5.4': + optional: true + + '@next/swc-linux-arm64-musl@15.5.4': + optional: true + + '@next/swc-linux-x64-gnu@15.5.4': + optional: true + + '@next/swc-linux-x64-musl@15.5.4': + optional: true + + '@next/swc-win32-arm64-msvc@15.5.4': + optional: true + + '@next/swc-win32-x64-msvc@15.5.4': + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@nolyfill/is-core-module@1.0.39': {} + + '@openrouter/sdk@file:../..': + dependencies: + zod: 4.1.13 + + '@radix-ui/number@1.1.1': {} + + '@radix-ui/primitive@1.1.3': {} + + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.2.7 + '@types/react-dom': 19.2.3(@types/react@19.2.7) + + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.7)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.2.7 + '@types/react-dom': 19.2.3(@types/react@19.2.7) + + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.7)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.2.7 + + '@radix-ui/react-context@1.1.2(@types/react@19.2.7)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.2.7 + + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.1.0) + aria-hidden: 1.2.6 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-remove-scroll: 2.7.2(@types/react@19.2.7)(react@19.1.0) + optionalDependencies: + '@types/react': 19.2.7 + '@types/react-dom': 19.2.3(@types/react@19.2.7) + + '@radix-ui/react-direction@1.1.1(@types/react@19.2.7)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.2.7 + + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.7)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.2.7 + '@types/react-dom': 19.2.3(@types/react@19.2.7) + + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.7)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.2.7 + + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.2.7 + '@types/react-dom': 19.2.3(@types/react@19.2.7) + + '@radix-ui/react-id@1.1.1(@types/react@19.2.7)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.2.7 + + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@floating-ui/react-dom': 2.1.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/rect': 1.1.1 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.2.7 + '@types/react-dom': 19.2.3(@types/react@19.2.7) + + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.2.7 + '@types/react-dom': 19.2.3(@types/react@19.2.7) + + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.2.7 + '@types/react-dom': 19.2.3(@types/react@19.2.7) + + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.7)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.2.7 + '@types/react-dom': 19.2.3(@types/react@19.2.7) + + '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + aria-hidden: 1.2.6 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-remove-scroll: 2.7.2(@types/react@19.2.7)(react@19.1.0) + optionalDependencies: + '@types/react': 19.2.7 + '@types/react-dom': 19.2.3(@types/react@19.2.7) + + '@radix-ui/react-slot@1.2.3(@types/react@19.2.7)(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.2.7 + + '@radix-ui/react-slot@1.2.4(@types/react@19.2.7)(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.2.7 + + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.7)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.2.7 + + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.7)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.7)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.2.7 + + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.7)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.2.7 + + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.7)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.2.7 + + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.7)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.2.7 + + '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.7)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.2.7 + + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.7)(react@19.1.0)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 19.1.0 + optionalDependencies: + '@types/react': 19.2.7 + + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.7)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.2.7 + + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.2.7 + '@types/react-dom': 19.2.3(@types/react@19.2.7) + + '@radix-ui/rect@1.1.1': {} + + '@rtsao/scc@1.1.0': {} + + '@rushstack/eslint-patch@1.15.0': {} + + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + + '@tailwindcss/node@4.1.17': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.18.3 + jiti: 2.6.1 + lightningcss: 1.30.2 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.1.17 + + '@tailwindcss/oxide-android-arm64@4.1.17': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.1.17': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.1.17': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.1.17': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.17': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.1.17': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.1.17': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.1.17': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.1.17': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.17': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.1.17': + optional: true + + '@tailwindcss/oxide@4.1.17': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.1.17 + '@tailwindcss/oxide-darwin-arm64': 4.1.17 + '@tailwindcss/oxide-darwin-x64': 4.1.17 + '@tailwindcss/oxide-freebsd-x64': 4.1.17 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.17 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.17 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.17 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.17 + '@tailwindcss/oxide-linux-x64-musl': 4.1.17 + '@tailwindcss/oxide-wasm32-wasi': 4.1.17 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.17 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.17 + + '@tailwindcss/postcss@4.1.17': + dependencies: + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.1.17 + '@tailwindcss/oxide': 4.1.17 + postcss: 8.5.6 + tailwindcss: 4.1.17 + + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/estree@1.0.8': {} + + '@types/json-schema@7.0.15': {} + + '@types/json5@0.0.29': {} + + '@types/node@20.19.25': + dependencies: + undici-types: 6.21.0 + + '@types/react-dom@19.2.3(@types/react@19.2.7)': + dependencies: + '@types/react': 19.2.7 + + '@types/react@19.2.7': + dependencies: + csstype: 3.2.3 + + '@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.48.1 + '@typescript-eslint/type-utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.48.1 + eslint: 9.39.1(jiti@2.6.1) + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.48.1 + '@typescript-eslint/types': 8.48.1 + '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.48.1 + debug: 4.4.3 + eslint: 9.39.1(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.48.1(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.9.3) + '@typescript-eslint/types': 8.48.1 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.48.1': + dependencies: + '@typescript-eslint/types': 8.48.1 + '@typescript-eslint/visitor-keys': 8.48.1 + + '@typescript-eslint/tsconfig-utils@8.48.1(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/type-utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.48.1 + '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + debug: 4.4.3 + eslint: 9.39.1(jiti@2.6.1) + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.48.1': {} + + '@typescript-eslint/typescript-estree@8.48.1(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.48.1(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.9.3) + '@typescript-eslint/types': 8.48.1 + '@typescript-eslint/visitor-keys': 8.48.1 + debug: 4.4.3 + minimatch: 9.0.5 + semver: 7.7.3 + tinyglobby: 0.2.15 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.48.1 + '@typescript-eslint/types': 8.48.1 + '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3) + eslint: 9.39.1(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.48.1': + dependencies: + '@typescript-eslint/types': 8.48.1 + eslint-visitor-keys: 4.2.1 + + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + optional: true + + '@unrs/resolver-binding-android-arm64@1.11.1': + optional: true + + '@unrs/resolver-binding-darwin-arm64@1.11.1': + optional: true + + '@unrs/resolver-binding-darwin-x64@1.11.1': + optional: true + + '@unrs/resolver-binding-freebsd-x64@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-x64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-wasm32-wasi@1.11.1': + dependencies: + '@napi-rs/wasm-runtime': 0.2.12 + optional: true + + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + optional: true + + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + optional: true + + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + optional: true + + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + argparse@2.0.1: {} + + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 + + aria-query@5.3.2: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + array-includes@3.1.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + is-string: 1.1.1 + math-intrinsics: 1.1.0 + + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 + + array.prototype.findlastindex@1.2.6: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 + + array.prototype.flat@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-shim-unscopables: 1.1.0 + + array.prototype.flatmap@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-shim-unscopables: 1.1.0 + + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-shim-unscopables: 1.1.0 + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + ast-types-flow@0.0.8: {} + + async-function@1.0.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + axe-core@4.11.0: {} + + axobject-query@4.1.0: {} + + balanced-match@1.0.2: {} + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001757: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + + client-only@0.0.1: {} + + clsx@2.1.1: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + concat-map@0.0.1: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + csstype@3.2.3: {} + + damerau-levenshtein@1.0.8: {} + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + deep-is@0.1.4: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + detect-libc@2.1.2: {} + + detect-node-es@1.1.0: {} + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + emoji-regex@9.2.2: {} + + enhanced-resolve@5.18.3: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.0 + + es-abstract@1.24.0: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.19 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-iterator-helpers@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-set-tostringtag: 2.1.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + iterator.prototype: 1.1.5 + safe-array-concat: 1.1.3 + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-shim-unscopables@1.1.0: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + escape-string-regexp@4.0.0: {} + + eslint-config-next@15.5.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3): + dependencies: + '@next/eslint-plugin-next': 15.5.4 + '@rushstack/eslint-patch': 1.15.0 + '@typescript-eslint/eslint-plugin': 8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.1(jiti@2.6.1) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-react: 7.37.5(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.39.1(jiti@2.6.1)) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + + eslint-import-resolver-node@0.3.9: + dependencies: + debug: 3.2.7 + is-core-module: 2.16.1 + resolve: 1.22.11 + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.3 + eslint: 9.39.1(jiti@2.6.1) + get-tsconfig: 4.13.0 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.15 + unrs-resolver: 1.11.1 + optionalDependencies: + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.1(jiti@2.6.1) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)) + transitivePeerDependencies: + - supports-color + + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.39.1(jiti@2.6.1) + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.1(jiti@2.6.1)): + dependencies: + aria-query: 5.3.2 + array-includes: 3.1.9 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.11.0 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 9.39.1(jiti@2.6.1) + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 + + eslint-plugin-react-hooks@5.2.0(eslint@9.39.1(jiti@2.6.1)): + dependencies: + eslint: 9.39.1(jiti@2.6.1) + + eslint-plugin-react@7.37.5(eslint@9.39.1(jiti@2.6.1)): + dependencies: + array-includes: 3.1.9 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.2.1 + eslint: 9.39.1(jiti@2.6.1) + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.9 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint@9.39.1(jiti@2.6.1): + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.1 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.3 + '@eslint/js': 9.39.1 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.6.1 + transitivePeerDependencies: + - supports-color + + espree@10.4.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.1: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flatted@3.3.3: {} + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + function-bind@1.1.2: {} + + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + + generator-function@2.0.1: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-nonce@1.0.1: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + get-tsconfig@4.13.0: + dependencies: + resolve-pkg-maps: 1.0.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@14.0.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + has-bigints@1.1.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + ignore@5.3.2: {} + + ignore@7.0.5: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-bun-module@2.0.0: + dependencies: + semver: 7.7.3 + + is-callable@1.2.7: {} + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-generator-function@1.1.2: + dependencies: + call-bound: 1.0.4 + generator-function: 2.0.1 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-map@2.0.3: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 + + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + iterator.prototype@1.1.5: + dependencies: + define-data-property: 1.1.4 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + has-symbols: 1.1.0 + set-function-name: 2.0.2 + + jiti@2.6.1: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.1.9 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + language-subtag-registry@0.3.23: {} + + language-tags@1.0.9: + dependencies: + language-subtag-registry: 0.3.23 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lightningcss-android-arm64@1.30.2: + optional: true + + lightningcss-darwin-arm64@1.30.2: + optional: true + + lightningcss-darwin-x64@1.30.2: + optional: true + + lightningcss-freebsd-x64@1.30.2: + optional: true + + lightningcss-linux-arm-gnueabihf@1.30.2: + optional: true + + lightningcss-linux-arm64-gnu@1.30.2: + optional: true + + lightningcss-linux-arm64-musl@1.30.2: + optional: true + + lightningcss-linux-x64-gnu@1.30.2: + optional: true + + lightningcss-linux-x64-musl@1.30.2: + optional: true + + lightningcss-win32-arm64-msvc@1.30.2: + optional: true + + lightningcss-win32-x64-msvc@1.30.2: + optional: true + + lightningcss@1.30.2: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.30.2 + lightningcss-darwin-arm64: 1.30.2 + lightningcss-darwin-x64: 1.30.2 + lightningcss-freebsd-x64: 1.30.2 + lightningcss-linux-arm-gnueabihf: 1.30.2 + lightningcss-linux-arm64-gnu: 1.30.2 + lightningcss-linux-arm64-musl: 1.30.2 + lightningcss-linux-x64-gnu: 1.30.2 + lightningcss-linux-x64-musl: 1.30.2 + lightningcss-win32-arm64-msvc: 1.30.2 + lightningcss-win32-x64-msvc: 1.30.2 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.debounce@4.0.8: {} + + lodash.merge@4.6.2: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lucide-react@0.544.0(react@19.1.0): + dependencies: + react: 19.1.0 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + math-intrinsics@1.1.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + minimist@1.2.8: {} + + ms@2.1.3: {} + + nanoid@3.3.11: {} + + napi-postinstall@0.3.4: {} + + natural-compare@1.4.0: {} + + next@15.5.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@next/env': 15.5.4 + '@swc/helpers': 0.5.15 + caniuse-lite: 1.0.30001757 + postcss: 8.4.31 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + styled-jsx: 5.1.6(react@19.1.0) + optionalDependencies: + '@next/swc-darwin-arm64': 15.5.4 + '@next/swc-darwin-x64': 15.5.4 + '@next/swc-linux-arm64-gnu': 15.5.4 + '@next/swc-linux-arm64-musl': 15.5.4 + '@next/swc-linux-x64-gnu': 15.5.4 + '@next/swc-linux-x64-musl': 15.5.4 + '@next/swc-win32-arm64-msvc': 15.5.4 + '@next/swc-win32-x64-msvc': 15.5.4 + sharp: 0.34.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} + + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.entries@1.1.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + + object.values@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.3: {} + + possible-typed-array-names@1.1.0: {} + + postcss@8.4.31: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + react-dom@19.1.0(react@19.1.0): + dependencies: + react: 19.1.0 + scheduler: 0.26.0 + + react-is@16.13.1: {} + + react-remove-scroll-bar@2.3.8(@types/react@19.2.7)(react@19.1.0): + dependencies: + react: 19.1.0 + react-style-singleton: 2.2.3(@types/react@19.2.7)(react@19.1.0) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.7 + + react-remove-scroll@2.7.2(@types/react@19.2.7)(react@19.1.0): + dependencies: + react: 19.1.0 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.7)(react@19.1.0) + react-style-singleton: 2.2.3(@types/react@19.2.7)(react@19.1.0) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.2.7)(react@19.1.0) + use-sidecar: 1.1.3(@types/react@19.2.7)(react@19.1.0) + optionalDependencies: + '@types/react': 19.2.7 + + react-style-singleton@2.2.3(@types/react@19.2.7)(react@19.1.0): + dependencies: + get-nonce: 1.0.1 + react: 19.1.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.7 + + react@19.1.0: {} + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + resolve-from@4.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve@1.22.11: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + resolve@2.0.0-next.5: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.1.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + scheduler@0.26.0: {} + + semver@6.3.1: {} + + semver@7.7.3: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + + sharp@0.34.5: + dependencies: + '@img/colour': 1.0.0 + detect-libc: 2.1.2 + semver: 7.7.3 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 + optional: true + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + source-map-js@1.2.1: {} + + stable-hash@0.0.5: {} + + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + + string.prototype.includes@2.0.1: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + + string.prototype.matchall@4.0.12: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 + set-function-name: 2.0.2 + side-channel: 1.1.0 + + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.24.0 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + strip-bom@3.0.0: {} + + strip-json-comments@3.1.1: {} + + styled-jsx@5.1.6(react@19.1.0): + dependencies: + client-only: 0.0.1 + react: 19.1.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + tailwind-merge@3.4.0: {} + + tailwindcss@4.1.17: {} + + tapable@2.3.0: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + ts-api-utils@2.1.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tslib@2.8.1: {} + + tw-animate-css@1.4.0: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + typescript@5.9.3: {} + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + undici-types@6.21.0: {} + + unrs-resolver@1.11.1: + dependencies: + napi-postinstall: 0.3.4 + optionalDependencies: + '@unrs/resolver-binding-android-arm-eabi': 1.11.1 + '@unrs/resolver-binding-android-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-x64': 1.11.1 + '@unrs/resolver-binding-freebsd-x64': 1.11.1 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 + '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-musl': 1.11.1 + '@unrs/resolver-binding-wasm32-wasi': 1.11.1 + '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 + '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 + '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + use-callback-ref@1.3.3(@types/react@19.2.7)(react@19.1.0): + dependencies: + react: 19.1.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.7 + + use-sidecar@1.1.3(@types/react@19.2.7)(react@19.1.0): + dependencies: + detect-node-es: 1.1.0 + react: 19.1.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.7 + + usehooks-ts@3.1.1(react@19.1.0): + dependencies: + lodash.debounce: 4.0.8 + react: 19.1.0 + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.2 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.19 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + yocto-queue@0.1.0: {} + + zod@4.1.13: {} diff --git a/examples/nextjs-example/postcss.config.mjs b/examples/nextjs-example/postcss.config.mjs index c7bcb4b1..4470b424 100644 --- a/examples/nextjs-example/postcss.config.mjs +++ b/examples/nextjs-example/postcss.config.mjs @@ -1,5 +1,7 @@ const config = { - plugins: ["@tailwindcss/postcss"], + plugins: [ + '@tailwindcss/postcss', + ], }; export default config; diff --git a/examples/nextjs-example/src/app/(app)/chat/_dialogs/not-connected.tsx b/examples/nextjs-example/src/app/(app)/chat/_dialogs/not-connected.tsx index b9d4aa64..990a9ca7 100644 --- a/examples/nextjs-example/src/app/(app)/chat/_dialogs/not-connected.tsx +++ b/examples/nextjs-example/src/app/(app)/chat/_dialogs/not-connected.tsx @@ -1,16 +1,16 @@ -"use client"; +'use client'; -import { Button } from "@/components/ui/button"; +import { ExternalLink } from 'lucide-react'; +import { Button } from '@/components/ui/button'; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, -} from "@/components/ui/dialog"; -import { OAUTH_CALLBACK_URL, OPENROUTER_CODE_VERIFIER_KEY } from "@/lib/config"; -import { useOpenRouter } from "@/lib/hooks/use-openrouter-client"; -import { ExternalLink } from "lucide-react"; +} from '@/components/ui/dialog'; +import { OAUTH_CALLBACK_URL, OPENROUTER_CODE_VERIFIER_KEY } from '@/lib/config'; +import { useOpenRouter } from '@/lib/hooks/use-openrouter-client'; interface NotConnectedDialogProps { open: boolean; @@ -20,13 +20,12 @@ export function NotConnectedDialog({ open }: NotConnectedDialogProps) { const { client } = useOpenRouter(); const handleGotoOAuth = async () => { - const { codeChallenge, codeVerifier } = - await client.oAuth.createSHA256CodeChallenge(); + const { codeChallenge, codeVerifier } = await client.oAuth.createSHA256CodeChallenge(); const url = await client.oAuth.createAuthorizationUrl({ codeChallenge, callbackUrl: OAUTH_CALLBACK_URL, - codeChallengeMethod: "S256", + codeChallengeMethod: 'S256', }); localStorage.setItem(OPENROUTER_CODE_VERIFIER_KEY, codeVerifier); @@ -34,7 +33,10 @@ export function NotConnectedDialog({ open }: NotConnectedDialogProps) { }; return ( - {}}> + {}} + > e.preventDefault()} @@ -44,20 +46,22 @@ export function NotConnectedDialog({ open }: NotConnectedDialogProps) { Connect to OpenRouter - You need to connect your OpenRouter account to use this chat - application. Click the button below to authenticate and start - chatting. + You need to connect your OpenRouter account to use this chat application. Click the + button below to authenticate and start chatting. -
-

- OpenRouter provides access to multiple AI models including GPT-4, - Claude, and more. Authentication is required to make API calls. +

+

+ OpenRouter provides access to multiple AI models including GPT-4, Claude, and more. + Authentication is required to make API calls.

-
diff --git a/examples/nextjs-example/src/app/(app)/chat/page.tsx b/examples/nextjs-example/src/app/(app)/chat/page.tsx index 59a621d8..b8a9c18d 100644 --- a/examples/nextjs-example/src/app/(app)/chat/page.tsx +++ b/examples/nextjs-example/src/app/(app)/chat/page.tsx @@ -1,23 +1,23 @@ -"use client"; +'use client'; -import type React from "react"; +import type { Message as OpenRouterMessageRequest } from '@openrouter/sdk/models'; +import type React from 'react'; -import { Button } from "@/components/ui/button"; -import { Card } from "@/components/ui/card"; -import { Input } from "@/components/ui/input"; +import { Bot, MessageSquare, Send, Settings, User } from 'lucide-react'; +import { useEffect, useRef, useState } from 'react'; +import { Button } from '@/components/ui/button'; +import { Card } from '@/components/ui/card'; +import { Input } from '@/components/ui/input'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, -} from "@/components/ui/select"; -import { useApiKey } from "@/lib/hooks/use-api-key"; -import { useOpenRouter } from "@/lib/hooks/use-openrouter-client"; -import { Message as OpenRouterMessageRequest } from "@openrouter/sdk/models"; -import { Bot, MessageSquare, Send, Settings, User } from "lucide-react"; -import { useEffect, useRef, useState } from "react"; -import { NotConnectedDialog } from "./_dialogs/not-connected"; +} from '@/components/ui/select'; +import { useApiKey } from '@/lib/hooks/use-api-key'; +import { useOpenRouter } from '@/lib/hooks/use-openrouter-client'; +import { NotConnectedDialog } from './_dialogs/not-connected'; type Message = OpenRouterMessageRequest & { id: string; @@ -31,35 +31,43 @@ export default function Page() { const [messages, setMessages] = useState([ { id: crypto.randomUUID(), - role: "assistant", + role: 'assistant', content: "Hello! I'm your AI assistant powered by OpenRouter. I can help you with a wide variety of tasks. What would you like to know or discuss today?", }, ]); - const [selectedModel, setSelectedModel] = useState("gpt-4"); + const [selectedModel, setSelectedModel] = useState('gpt-4'); const [isLoading, setIsLoading] = useState(false); const messagesEndRef = useRef(null); const inputRef = useRef(null); const scrollToBottom = () => { - messagesEndRef.current?.scrollIntoView({ behavior: "smooth" }); + messagesEndRef.current?.scrollIntoView({ + behavior: 'smooth', + }); }; useEffect(() => { scrollToBottom(); - }, [messages]); + }, [ + messages, + ]); const handleSend = async () => { const input = inputRef.current?.value; - if (!input) return; + if (!input) { + return; + } setIsLoading(true); - if (!input.trim() || isLoading) return; + if (!input.trim() || isLoading) { + return; + } const userMessage: OpenRouterMessageRequest = { - role: "user", + role: 'user', content: input, }; @@ -73,24 +81,27 @@ export default function Page() { ]; setMessages(updatedMessages); - inputRef.current!.value = ""; + inputRef.current!.value = ''; // Add an empty assistant message to stream into const assistantMessage: Message = { id: crypto.randomUUID(), - role: "assistant", - content: "", + role: 'assistant', + content: '', created: Date.now(), }; - setMessages((prev) => [...prev, assistantMessage]); + setMessages((prev) => [ + ...prev, + assistantMessage, + ]); if (!apiKey) { - throw new Error("API key is required but not present."); + throw new Error('API key is required but not present.'); } const result = await openRouter.chat.send({ - model: "openai/gpt-4o", + model: 'openai/gpt-4o', maxTokens: 1000, messages: updatedMessages, stream: true, @@ -99,13 +110,15 @@ export default function Page() { // Stream chunks into the latest message const chunks: string[] = []; for await (const chunk of result) { - chunks.push(chunk.choices[0].delta.content || ""); + chunks.push(chunk.choices[0].delta.content || ''); setMessages((prev) => { - const newMessages = [...prev]; + const newMessages = [ + ...prev, + ]; const lastMessage = newMessages[newMessages.length - 1]; - if (lastMessage && lastMessage.role === "assistant") { - lastMessage.content = chunks.join(""); + if (lastMessage && lastMessage.role === 'assistant') { + lastMessage.content = chunks.join(''); } return newMessages; @@ -116,7 +129,7 @@ export default function Page() { }; const handleKeyPress = (e: React.KeyboardEvent) => { - if (e.key === "Enter" && !e.shiftKey) { + if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); handleSend(); } @@ -125,78 +138,78 @@ export default function Page() { return ( <> -
+
{/* Header */} -
-
-
-
- -

AI Chat

+
+
+
+
+ +

AI Chat

-
- + - GPT-4 - GPT-3.5 Turbo - Claude 3 - Gemini Pro + GPT-4 + GPT-3.5 Turbo + Claude 3 + Gemini Pro -
{/* Messages */} -
+
{messages.map((message) => { const isIncomingMessage = - message.role === "assistant" && - message === messages.at(-1) && - isLoading; + message.role === 'assistant' && message === messages.at(-1) && isLoading; return (
- {message.role === "assistant" && ( -
-
- + {message.role === 'assistant' && ( +
+
+
)} -
+
-

- {message.content?.toString() || - (isIncomingMessage ? "..." : "")} +

+ {message.content?.toString() || (isIncomingMessage ? '...' : '')}

- - {message.created && - new Date(message.created).toLocaleString()} + + {message.created && new Date(message.created).toLocaleString()}
- {message.role === "user" && ( -
-
- + {message.role === 'user' && ( +
+
+
)} @@ -208,20 +221,24 @@ export default function Page() {
{/* Input */} -
-
+
+
-
-

+

Press Enter to send, Shift+Enter for new line

diff --git a/examples/nextjs-example/src/app/(app)/layout.tsx b/examples/nextjs-example/src/app/(app)/layout.tsx index da6fa9c1..a746a011 100644 --- a/examples/nextjs-example/src/app/(app)/layout.tsx +++ b/examples/nextjs-example/src/app/(app)/layout.tsx @@ -1,6 +1,6 @@ -"use client"; +'use client'; -import { OpenRouterClientProvider } from "@/lib/hooks/use-openrouter-client"; +import { OpenRouterClientProvider } from '@/lib/hooks/use-openrouter-client'; export default function Layout({ children, diff --git a/examples/nextjs-example/src/app/(app)/page.tsx b/examples/nextjs-example/src/app/(app)/page.tsx index f1acea30..2078a247 100644 --- a/examples/nextjs-example/src/app/(app)/page.tsx +++ b/examples/nextjs-example/src/app/(app)/page.tsx @@ -1,6 +1,10 @@ -"use client"; +'use client'; -import { Button } from "@/components/ui/button"; +import { ArrowRightIcon, ExternalLink, Key, MessageSquare, Zap } from 'lucide-react'; +import Link from 'next/link'; +import { useRouter } from 'next/navigation'; +import { useEffect, useState } from 'react'; +import { Button } from '@/components/ui/button'; import { Card, CardContent, @@ -8,51 +12,53 @@ import { CardFooter, CardHeader, CardTitle, -} from "@/components/ui/card"; +} from '@/components/ui/card'; import { OAUTH_CALLBACK_URL, OPENROUTER_CODE_VERIFIER_KEY, OPENROUTER_KEY_LOCALSTORAGE_KEY, -} from "@/lib/config"; -import { useApiKey } from "@/lib/hooks/use-api-key"; -import { useOpenRouter } from "@/lib/hooks/use-openrouter-client"; -import { - ArrowRightIcon, - ExternalLink, - Key, - MessageSquare, - Zap, -} from "lucide-react"; -import Link from "next/link"; -import { useRouter } from "next/navigation"; -import { useEffect, useState } from "react"; +} from '@/lib/config'; +import { useApiKey } from '@/lib/hooks/use-api-key'; +import { useOpenRouter } from '@/lib/hooks/use-openrouter-client'; -export default function Page({ searchParams }: { searchParams: Promise<{ code?: string; error?: string }> }) { +export default function Page({ + searchParams, +}: { + searchParams: Promise<{ + code?: string; + error?: string; + }>; +}) { const [connectionState, setConnectionState] = useState< - "disconnected" | "connecting" | "connected" | "initializing" | "error" - >("initializing"); + 'disconnected' | 'connecting' | 'connected' | 'initializing' | 'error' + >('initializing'); const [code, setCode] = useState(); useEffect(() => { - if (localStorage.getItem(OPENROUTER_KEY_LOCALSTORAGE_KEY)) - return setConnectionState("connected"); + if (localStorage.getItem(OPENROUTER_KEY_LOCALSTORAGE_KEY)) { + return setConnectionState('connected'); + } searchParams.then((p) => { if (p.code) { - setConnectionState("connecting"); + setConnectionState('connecting'); setCode(p.code.toString()); } else if (p.error) { - setConnectionState("error"); - } else setConnectionState("disconnected"); + setConnectionState('error'); + } else { + setConnectionState('disconnected'); + } }); - }, [searchParams]); + }, [ + searchParams, + ]); switch (connectionState) { - case "initializing": + case 'initializing': return ; - case "connecting": + case 'connecting': return ; - case "connected": + case 'connected': return ; default: return ; @@ -61,15 +67,13 @@ export default function Page({ searchParams }: { searchParams: Promise<{ code?: function InitializingPageContent() { return ( -
-
-
- -

ACME Chat

+
+
+
+ +

ACME Chat

-

- Initializing... -

+

Initializing...

); @@ -85,8 +89,7 @@ function ConnectingPageContent(props: { code: string }) { const codeVerifier = localStorage.getItem(OPENROUTER_CODE_VERIFIER_KEY); if (!codeVerifier) { - console.error("Code verifier not found in localStorage"); - router.push("/?error=missing_verifier"); + router.push('/?error=missing_verifier'); return; } @@ -95,7 +98,7 @@ function ConnectingPageContent(props: { code: string }) { const result = await openRouter.oAuth.exchangeAuthCodeForAPIKey({ code: props.code, codeVerifier, - codeChallengeMethod: "S256", + codeChallengeMethod: 'S256', }); // Store the key and user ID @@ -107,24 +110,26 @@ function ConnectingPageContent(props: { code: string }) { localStorage.removeItem(OPENROUTER_CODE_VERIFIER_KEY); // Redirect to chat - router.push("/chat"); - } catch (error) { - console.error("Failed to exchange authorization code:", error); - router.push("/?error=exchange_failed"); + router.push('/chat'); + } catch (_error) { + router.push('/?error=exchange_failed'); } }; exchangeCode(); - }, [props.code, router]); + }, [ + props.code, + router, + ]); return ( -
-
-
- -

AI Chat

+
+
+
+ +

AI Chat

-

+

Connecting with code: {props.code}

@@ -134,36 +139,34 @@ function ConnectingPageContent(props: { code: string }) { function ConnectedPageContent() { return ( -
-
-
- -

ACME Chat

+
+
+
+ +

ACME Chat

-

+

Connect your OpenRouter account to start chatting with AI models.

- + -
- +
+ OpenRouter Integration
- Securely connect your OpenRouter account to access multiple AI - models through a single API + Securely connect your OpenRouter account to access multiple AI models through a single + API - - You are connected to OpenRouter! - - - + You are connected to OpenRouter! + + @@ -182,16 +185,13 @@ function DisconnectedPageContent() { const challenge = await openRouter.oAuth.createSHA256CodeChallenge(); // Store the code verifier for later use in the callback - localStorage.setItem( - OPENROUTER_CODE_VERIFIER_KEY, - challenge.codeVerifier, - ); + localStorage.setItem(OPENROUTER_CODE_VERIFIER_KEY, challenge.codeVerifier); // Generate authorization URL with PKCE const url = await openRouter.oAuth.createAuthorizationUrl({ callbackUrl: OAUTH_CALLBACK_URL, codeChallenge: challenge.codeChallenge, - codeChallengeMethod: "S256", + codeChallengeMethod: 'S256', }); setAuthUrl(url); @@ -201,71 +201,73 @@ function DisconnectedPageContent() { }, []); return ( -
-
-
- -

ACME Chat

+
+
+
+ +

ACME Chat

-

+

Connect your OpenRouter account to start chatting with AI models

- + -
- +
+ OpenRouter Integration Demo
- This app demonstrates how to connect to OpenRouter using OAuth 2.0 - with PKCE for enhanced security. + This app demonstrates how to connect to OpenRouter using OAuth 2.0 with PKCE for + enhanced security. - -
-
-
- + +
+
+
+
-

Multiple Models

-

- Access GPT, Claude, and more -

+

Multiple Models

+

Access GPT, Claude, and more

-
- +
+
-

Secure OAuth

-

- Safe authentication with PKCE -

+

Secure OAuth

+

Safe authentication with PKCE

-
- +
+
-

Easy Setup

-

- One-click connection -

+

Easy Setup

+

One-click connection

{authUrl ? ( - - ) : ( - )} @@ -275,14 +277,13 @@ function DisconnectedPageContent() { - What is OpenRouter? + What is OpenRouter? -

- OpenRouter provides unified access to multiple AI models including - GPT-4, Claude, Gemini, and many others through a single API. Connect - your account to start chatting with the latest AI models with - competitive pricing and reliable performance. +

+ OpenRouter provides unified access to multiple AI models including GPT-4, Claude, + Gemini, and many others through a single API. Connect your account to start chatting + with the latest AI models with competitive pricing and reliable performance.

diff --git a/examples/nextjs-example/src/app/globals.css b/examples/nextjs-example/src/app/globals.css index dc98be74..31ec2d75 100644 --- a/examples/nextjs-example/src/app/globals.css +++ b/examples/nextjs-example/src/app/globals.css @@ -1,5 +1,5 @@ -@import "tailwindcss"; -@import "tw-animate-css"; +@import 'tailwindcss'; +@import 'tw-animate-css'; @custom-variant dark (&:is(.dark *)); diff --git a/examples/nextjs-example/src/app/layout.tsx b/examples/nextjs-example/src/app/layout.tsx index ec03ad13..042caaa8 100644 --- a/examples/nextjs-example/src/app/layout.tsx +++ b/examples/nextjs-example/src/app/layout.tsx @@ -1,20 +1,25 @@ -import { Metadata } from "next"; -import { Geist, Geist_Mono } from "next/font/google"; -import "./globals.css"; +import type { Metadata } from 'next'; + +import { Geist, Geist_Mono } from 'next/font/google'; +import './globals.css'; const geistSans = Geist({ - variable: "--font-geist-sans", - subsets: ["latin"], + variable: '--font-geist-sans', + subsets: [ + 'latin', + ], }); const geistMono = Geist_Mono({ - variable: "--font-geist-mono", - subsets: ["latin"], + variable: '--font-geist-mono', + subsets: [ + 'latin', + ], }); export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", + title: 'Create Next App', + description: 'Generated by create next app', }; export default function RootLayout({ @@ -23,12 +28,8 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( - - - {children} - + + {children} ); } diff --git a/examples/nextjs-example/src/app/oauth/callback/route.ts b/examples/nextjs-example/src/app/oauth/callback/route.ts index f2167de8..2e46a0c5 100644 --- a/examples/nextjs-example/src/app/oauth/callback/route.ts +++ b/examples/nextjs-example/src/app/oauth/callback/route.ts @@ -1,11 +1,11 @@ -import { redirect } from "next/navigation"; +import { redirect } from 'next/navigation'; export async function GET(request: Request) { const url = new URL(request.url); - const code = url.searchParams.get("code"); + const code = url.searchParams.get('code'); if (!code) { - return redirect("/?error=missing_code"); + return redirect('/?error=missing_code'); } // Redirect to the main page with the code diff --git a/examples/nextjs-example/src/components/ui/alert.tsx b/examples/nextjs-example/src/components/ui/alert.tsx index 14213546..ad5dbd34 100644 --- a/examples/nextjs-example/src/components/ui/alert.tsx +++ b/examples/nextjs-example/src/components/ui/alert.tsx @@ -1,66 +1,66 @@ -import * as React from "react" -import { cva, type VariantProps } from "class-variance-authority" +import type { VariantProps } from 'class-variance-authority'; +import type * as React from 'react'; -import { cn } from "@/lib/utils" +import { cva } from 'class-variance-authority'; +import { cn } from '@/lib/utils'; const alertVariants = cva( - "relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current", + 'relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current', { variants: { variant: { - default: "bg-card text-card-foreground", + default: 'bg-card text-card-foreground', destructive: - "text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90", + 'text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90', }, }, defaultVariants: { - variant: "default", + variant: 'default', }, - } -) + }, +); function Alert({ className, variant, ...props -}: React.ComponentProps<"div"> & VariantProps) { +}: React.ComponentProps<'div'> & VariantProps) { return (
- ) + ); } -function AlertTitle({ className, ...props }: React.ComponentProps<"div">) { +function AlertTitle({ className, ...props }: React.ComponentProps<'div'>) { return (
- ) + ); } -function AlertDescription({ - className, - ...props -}: React.ComponentProps<"div">) { +function AlertDescription({ className, ...props }: React.ComponentProps<'div'>) { return (
- ) + ); } -export { Alert, AlertTitle, AlertDescription } +export { Alert, AlertTitle, AlertDescription }; diff --git a/examples/nextjs-example/src/components/ui/badge.tsx b/examples/nextjs-example/src/components/ui/badge.tsx index 02054139..719dce64 100644 --- a/examples/nextjs-example/src/components/ui/badge.tsx +++ b/examples/nextjs-example/src/components/ui/badge.tsx @@ -1,46 +1,52 @@ -import * as React from "react" -import { Slot } from "@radix-ui/react-slot" -import { cva, type VariantProps } from "class-variance-authority" +import type { VariantProps } from 'class-variance-authority'; +import type * as React from 'react'; -import { cn } from "@/lib/utils" +import { Slot } from '@radix-ui/react-slot'; +import { cva } from 'class-variance-authority'; +import { cn } from '@/lib/utils'; const badgeVariants = cva( - "inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden", + 'inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden', { variants: { variant: { - default: - "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90", + default: 'border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90', secondary: - "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90", + 'border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90', destructive: - "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", - outline: - "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground", + 'border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60', + outline: 'text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground', }, }, defaultVariants: { - variant: "default", + variant: 'default', }, - } -) + }, +); function Badge({ className, variant, asChild = false, ...props -}: React.ComponentProps<"span"> & - VariantProps & { asChild?: boolean }) { - const Comp = asChild ? Slot : "span" +}: React.ComponentProps<'span'> & + VariantProps & { + asChild?: boolean; + }) { + const Comp = asChild ? Slot : 'span'; return ( - ) + ); } -export { Badge, badgeVariants } +export { Badge, badgeVariants }; diff --git a/examples/nextjs-example/src/components/ui/button.tsx b/examples/nextjs-example/src/components/ui/button.tsx index d96719c0..a2f72331 100644 --- a/examples/nextjs-example/src/components/ui/button.tsx +++ b/examples/nextjs-example/src/components/ui/button.tsx @@ -1,38 +1,37 @@ -import * as React from "react" -import { Slot } from "@radix-ui/react-slot" -import { cva, type VariantProps } from "class-variance-authority" +import type { VariantProps } from 'class-variance-authority'; +import type * as React from 'react'; -import { cn } from "@/lib/utils" +import { Slot } from '@radix-ui/react-slot'; +import { cva } from 'class-variance-authority'; +import { cn } from '@/lib/utils'; const buttonVariants = cva( "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", { variants: { variant: { - default: "bg-primary text-primary-foreground hover:bg-primary/90", + default: 'bg-primary text-primary-foreground hover:bg-primary/90', destructive: - "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", + 'bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60', outline: - "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50", - secondary: - "bg-secondary text-secondary-foreground hover:bg-secondary/80", - ghost: - "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50", - link: "text-primary underline-offset-4 hover:underline", + 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50', + secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80', + ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50', + link: 'text-primary underline-offset-4 hover:underline', }, size: { - default: "h-9 px-4 py-2 has-[>svg]:px-3", - sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5", - lg: "h-10 rounded-md px-6 has-[>svg]:px-4", - icon: "size-9", + default: 'h-9 px-4 py-2 has-[>svg]:px-3', + sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5', + lg: 'h-10 rounded-md px-6 has-[>svg]:px-4', + icon: 'size-9', }, }, defaultVariants: { - variant: "default", - size: "default", + variant: 'default', + size: 'default', }, - } -) + }, +); function Button({ className, @@ -40,19 +39,25 @@ function Button({ size, asChild = false, ...props -}: React.ComponentProps<"button"> & +}: React.ComponentProps<'button'> & VariantProps & { - asChild?: boolean + asChild?: boolean; }) { - const Comp = asChild ? Slot : "button" + const Comp = asChild ? Slot : 'button'; return ( - ) + ); } -export { Button, buttonVariants } +export { Button, buttonVariants }; diff --git a/examples/nextjs-example/src/components/ui/card.tsx b/examples/nextjs-example/src/components/ui/card.tsx index d05bbc6c..65a6365e 100644 --- a/examples/nextjs-example/src/components/ui/card.tsx +++ b/examples/nextjs-example/src/components/ui/card.tsx @@ -1,92 +1,81 @@ -import * as React from "react" +import type * as React from 'react'; -import { cn } from "@/lib/utils" +import { cn } from '@/lib/utils'; -function Card({ className, ...props }: React.ComponentProps<"div">) { +function Card({ className, ...props }: React.ComponentProps<'div'>) { return (
- ) + ); } -function CardHeader({ className, ...props }: React.ComponentProps<"div">) { +function CardHeader({ className, ...props }: React.ComponentProps<'div'>) { return (
- ) + ); } -function CardTitle({ className, ...props }: React.ComponentProps<"div">) { +function CardTitle({ className, ...props }: React.ComponentProps<'div'>) { return (
- ) + ); } -function CardDescription({ className, ...props }: React.ComponentProps<"div">) { +function CardDescription({ className, ...props }: React.ComponentProps<'div'>) { return (
- ) + ); } -function CardAction({ className, ...props }: React.ComponentProps<"div">) { +function CardAction({ className, ...props }: React.ComponentProps<'div'>) { return (
- ) + ); } -function CardContent({ className, ...props }: React.ComponentProps<"div">) { +function CardContent({ className, ...props }: React.ComponentProps<'div'>) { return (
- ) + ); } -function CardFooter({ className, ...props }: React.ComponentProps<"div">) { +function CardFooter({ className, ...props }: React.ComponentProps<'div'>) { return (
- ) + ); } -export { - Card, - CardHeader, - CardFooter, - CardTitle, - CardAction, - CardDescription, - CardContent, -} +export { Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent }; diff --git a/examples/nextjs-example/src/components/ui/dialog.tsx b/examples/nextjs-example/src/components/ui/dialog.tsx index d9ccec91..cc75f57d 100644 --- a/examples/nextjs-example/src/components/ui/dialog.tsx +++ b/examples/nextjs-example/src/components/ui/dialog.tsx @@ -1,33 +1,45 @@ -"use client" +'use client'; -import * as React from "react" -import * as DialogPrimitive from "@radix-ui/react-dialog" -import { XIcon } from "lucide-react" +import type * as React from 'react'; -import { cn } from "@/lib/utils" +import * as DialogPrimitive from '@radix-ui/react-dialog'; +import { XIcon } from 'lucide-react'; +import { cn } from '@/lib/utils'; -function Dialog({ - ...props -}: React.ComponentProps) { - return +function Dialog({ ...props }: React.ComponentProps) { + return ( + + ); } -function DialogTrigger({ - ...props -}: React.ComponentProps) { - return +function DialogTrigger({ ...props }: React.ComponentProps) { + return ( + + ); } -function DialogPortal({ - ...props -}: React.ComponentProps) { - return +function DialogPortal({ ...props }: React.ComponentProps) { + return ( + + ); } -function DialogClose({ - ...props -}: React.ComponentProps) { - return +function DialogClose({ ...props }: React.ComponentProps) { + return ( + + ); } function DialogOverlay({ @@ -36,14 +48,14 @@ function DialogOverlay({ }: React.ComponentProps) { return ( - ) + ); } function DialogContent({ @@ -52,68 +64,62 @@ function DialogContent({ showCloseButton = true, ...props }: React.ComponentProps & { - showCloseButton?: boolean + showCloseButton?: boolean; }) { return ( - + {children} {showCloseButton && ( - Close + Close )} - ) + ); } -function DialogHeader({ className, ...props }: React.ComponentProps<"div">) { +function DialogHeader({ className, ...props }: React.ComponentProps<'div'>) { return (
- ) + ); } -function DialogFooter({ className, ...props }: React.ComponentProps<"div">) { +function DialogFooter({ className, ...props }: React.ComponentProps<'div'>) { return (
- ) + ); } -function DialogTitle({ - className, - ...props -}: React.ComponentProps) { +function DialogTitle({ className, ...props }: React.ComponentProps) { return ( - ) + ); } function DialogDescription({ @@ -122,11 +128,11 @@ function DialogDescription({ }: React.ComponentProps) { return ( - ) + ); } export { @@ -140,4 +146,4 @@ export { DialogPortal, DialogTitle, DialogTrigger, -} +}; diff --git a/examples/nextjs-example/src/components/ui/input.tsx b/examples/nextjs-example/src/components/ui/input.tsx index 89169058..ba658bdc 100644 --- a/examples/nextjs-example/src/components/ui/input.tsx +++ b/examples/nextjs-example/src/components/ui/input.tsx @@ -1,21 +1,21 @@ -import * as React from "react" +import type * as React from 'react'; -import { cn } from "@/lib/utils" +import { cn } from '@/lib/utils'; -function Input({ className, type, ...props }: React.ComponentProps<"input">) { +function Input({ className, type, ...props }: React.ComponentProps<'input'>) { return ( - ) + ); } -export { Input } +export { Input }; diff --git a/examples/nextjs-example/src/components/ui/select.tsx b/examples/nextjs-example/src/components/ui/select.tsx index dcbbc0ca..9bcb1482 100644 --- a/examples/nextjs-example/src/components/ui/select.tsx +++ b/examples/nextjs-example/src/components/ui/select.tsx @@ -1,70 +1,79 @@ -"use client" +'use client'; -import * as React from "react" -import * as SelectPrimitive from "@radix-ui/react-select" -import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from "lucide-react" +import type * as React from 'react'; -import { cn } from "@/lib/utils" +import * as SelectPrimitive from '@radix-ui/react-select'; +import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react'; +import { cn } from '@/lib/utils'; -function Select({ - ...props -}: React.ComponentProps) { - return +function Select({ ...props }: React.ComponentProps) { + return ( + + ); } -function SelectGroup({ - ...props -}: React.ComponentProps) { - return +function SelectGroup({ ...props }: React.ComponentProps) { + return ( + + ); } -function SelectValue({ - ...props -}: React.ComponentProps) { - return +function SelectValue({ ...props }: React.ComponentProps) { + return ( + + ); } function SelectTrigger({ className, - size = "default", + size = 'default', children, ...props }: React.ComponentProps & { - size?: "sm" | "default" + size?: 'sm' | 'default'; }) { return ( {children} - + - ) + ); } function SelectContent({ className, children, - position = "popper", + position = 'popper', ...props }: React.ComponentProps) { return ( {children} @@ -82,20 +91,17 @@ function SelectContent({ - ) + ); } -function SelectLabel({ - className, - ...props -}: React.ComponentProps) { +function SelectLabel({ className, ...props }: React.ComponentProps) { return ( - ) + ); } function SelectItem({ @@ -105,21 +111,21 @@ function SelectItem({ }: React.ComponentProps) { return ( - + - + {children} - ) + ); } function SelectSeparator({ @@ -128,11 +134,11 @@ function SelectSeparator({ }: React.ComponentProps) { return ( - ) + ); } function SelectScrollUpButton({ @@ -141,16 +147,13 @@ function SelectScrollUpButton({ }: React.ComponentProps) { return ( - + - ) + ); } function SelectScrollDownButton({ @@ -159,16 +162,13 @@ function SelectScrollDownButton({ }: React.ComponentProps) { return ( - + - ) + ); } export { @@ -182,4 +182,4 @@ export { SelectSeparator, SelectTrigger, SelectValue, -} +}; diff --git a/examples/nextjs-example/src/lib/config.ts b/examples/nextjs-example/src/lib/config.ts index 7abe3124..9f2e4b70 100644 --- a/examples/nextjs-example/src/lib/config.ts +++ b/examples/nextjs-example/src/lib/config.ts @@ -1,5 +1,5 @@ -export const OAUTH_CALLBACK_URL = "http://localhost:3000/oauth/callback"; +export const OAUTH_CALLBACK_URL = 'http://localhost:3000/oauth/callback'; -export const OPENROUTER_KEY_LOCALSTORAGE_KEY = "openrouter_key"; -export const OPENROUTER_USER_ID_LOCALSTORAGE_KEY = "openrouter_user_id"; -export const OPENROUTER_CODE_VERIFIER_KEY = "openrouter_code_verifier"; +export const OPENROUTER_KEY_LOCALSTORAGE_KEY = 'openrouter_key'; +export const OPENROUTER_USER_ID_LOCALSTORAGE_KEY = 'openrouter_user_id'; +export const OPENROUTER_CODE_VERIFIER_KEY = 'openrouter_code_verifier'; diff --git a/examples/nextjs-example/src/lib/hooks/use-api-key.tsx b/examples/nextjs-example/src/lib/hooks/use-api-key.tsx index 11ef86fc..d6cc6a7f 100644 --- a/examples/nextjs-example/src/lib/hooks/use-api-key.tsx +++ b/examples/nextjs-example/src/lib/hooks/use-api-key.tsx @@ -1,7 +1,7 @@ -import { useLocalStorage } from "usehooks-ts"; -import { OPENROUTER_KEY_LOCALSTORAGE_KEY } from "../config"; +import { useLocalStorage } from 'usehooks-ts'; +import { OPENROUTER_KEY_LOCALSTORAGE_KEY } from '../config'; -const EMPTY_VALUE = ""; +const EMPTY_VALUE = ''; const FALLBACK_VALUE = undefined; /** @@ -15,13 +15,9 @@ const FALLBACK_VALUE = undefined; * ``` */ export function useApiKey() { - return useLocalStorage( - OPENROUTER_KEY_LOCALSTORAGE_KEY, - undefined, - { - deserializer: (value) => (value !== EMPTY_VALUE ? value : FALLBACK_VALUE), - serializer: (value) => value || EMPTY_VALUE, - initializeWithValue: false, - }, - ); + return useLocalStorage(OPENROUTER_KEY_LOCALSTORAGE_KEY, undefined, { + deserializer: (value) => (value !== EMPTY_VALUE ? value : FALLBACK_VALUE), + serializer: (value) => value || EMPTY_VALUE, + initializeWithValue: false, + }); } diff --git a/examples/nextjs-example/src/lib/hooks/use-openrouter-client.tsx b/examples/nextjs-example/src/lib/hooks/use-openrouter-client.tsx index e2f26d55..37215a72 100644 --- a/examples/nextjs-example/src/lib/hooks/use-openrouter-client.tsx +++ b/examples/nextjs-example/src/lib/hooks/use-openrouter-client.tsx @@ -1,32 +1,32 @@ -"use client"; +'use client'; -import { OpenRouter } from "@openrouter/sdk"; -import React from "react"; -import { useApiKey } from "./use-api-key"; +import { OpenRouter } from '@openrouter/sdk'; +import React from 'react'; +import { useApiKey } from './use-api-key'; interface OpenRouterClientContextApi { client: OpenRouter; } -const OpenRouterClientContext = React.createContext( - null!, -); +const OpenRouterClientContext = React.createContext(null!); -export function OpenRouterClientProvider({ - children, -}: { - children: React.ReactNode; -}) { +export function OpenRouterClientProvider({ children }: { children: React.ReactNode }) { const [apiKey] = useApiKey(); const client = React.useMemo(() => { return new OpenRouter({ apiKey: apiKey, }); - }, [apiKey]); + }, [ + apiKey, + ]); return ( - + {children} ); @@ -35,9 +35,7 @@ export function OpenRouterClientProvider({ export function useOpenRouter() { const context = React.useContext(OpenRouterClientContext); if (!context) { - throw new Error( - "useOpenRouter must be used within an OpenRouterClientProvider", - ); + throw new Error('useOpenRouter must be used within an OpenRouterClientProvider'); } return context; diff --git a/examples/nextjs-example/src/lib/utils.ts b/examples/nextjs-example/src/lib/utils.ts index b3131fcb..d4cedc33 100644 --- a/examples/nextjs-example/src/lib/utils.ts +++ b/examples/nextjs-example/src/lib/utils.ts @@ -1,10 +1,12 @@ -import { clsx, type ClassValue } from "clsx"; -import { twMerge } from "tailwind-merge"; +import type { ClassValue } from 'clsx'; + +import { clsx } from 'clsx'; +import { twMerge } from 'tailwind-merge'; export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } export function isBrowser() { - return typeof window !== "undefined"; + return typeof window !== 'undefined'; } diff --git a/examples/pnpm-lock.yaml b/examples/pnpm-lock.yaml new file mode 100644 index 00000000..b08c0e31 --- /dev/null +++ b/examples/pnpm-lock.yaml @@ -0,0 +1,357 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@openrouter/sdk': + specifier: file:.. + version: file:.. + devDependencies: + '@types/node': + specifier: ^20.0.0 + version: 20.19.25 + dotenv: + specifier: ^16.4.5 + version: 16.6.1 + tsx: + specifier: ^4.19.2 + version: 4.21.0 + +packages: + + '@esbuild/aix-ppc64@0.27.0': + resolution: {integrity: sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.27.0': + resolution: {integrity: sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.27.0': + resolution: {integrity: sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.27.0': + resolution: {integrity: sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.27.0': + resolution: {integrity: sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.0': + resolution: {integrity: sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.27.0': + resolution: {integrity: sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.0': + resolution: {integrity: sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.27.0': + resolution: {integrity: sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.27.0': + resolution: {integrity: sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.27.0': + resolution: {integrity: sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.27.0': + resolution: {integrity: sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.27.0': + resolution: {integrity: sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.27.0': + resolution: {integrity: sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.0': + resolution: {integrity: sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.27.0': + resolution: {integrity: sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.27.0': + resolution: {integrity: sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.27.0': + resolution: {integrity: sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.0': + resolution: {integrity: sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.27.0': + resolution: {integrity: sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.0': + resolution: {integrity: sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.27.0': + resolution: {integrity: sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.27.0': + resolution: {integrity: sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.27.0': + resolution: {integrity: sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.27.0': + resolution: {integrity: sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.27.0': + resolution: {integrity: sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@openrouter/sdk@file:..': + resolution: {directory: .., type: directory} + + '@types/node@20.19.25': + resolution: {integrity: sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==} + + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + + esbuild@0.27.0: + resolution: {integrity: sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==} + engines: {node: '>=18'} + hasBin: true + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + get-tsconfig@4.13.0: + resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + tsx@4.21.0: + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + engines: {node: '>=18.0.0'} + hasBin: true + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + zod@4.1.13: + resolution: {integrity: sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==} + +snapshots: + + '@esbuild/aix-ppc64@0.27.0': + optional: true + + '@esbuild/android-arm64@0.27.0': + optional: true + + '@esbuild/android-arm@0.27.0': + optional: true + + '@esbuild/android-x64@0.27.0': + optional: true + + '@esbuild/darwin-arm64@0.27.0': + optional: true + + '@esbuild/darwin-x64@0.27.0': + optional: true + + '@esbuild/freebsd-arm64@0.27.0': + optional: true + + '@esbuild/freebsd-x64@0.27.0': + optional: true + + '@esbuild/linux-arm64@0.27.0': + optional: true + + '@esbuild/linux-arm@0.27.0': + optional: true + + '@esbuild/linux-ia32@0.27.0': + optional: true + + '@esbuild/linux-loong64@0.27.0': + optional: true + + '@esbuild/linux-mips64el@0.27.0': + optional: true + + '@esbuild/linux-ppc64@0.27.0': + optional: true + + '@esbuild/linux-riscv64@0.27.0': + optional: true + + '@esbuild/linux-s390x@0.27.0': + optional: true + + '@esbuild/linux-x64@0.27.0': + optional: true + + '@esbuild/netbsd-arm64@0.27.0': + optional: true + + '@esbuild/netbsd-x64@0.27.0': + optional: true + + '@esbuild/openbsd-arm64@0.27.0': + optional: true + + '@esbuild/openbsd-x64@0.27.0': + optional: true + + '@esbuild/openharmony-arm64@0.27.0': + optional: true + + '@esbuild/sunos-x64@0.27.0': + optional: true + + '@esbuild/win32-arm64@0.27.0': + optional: true + + '@esbuild/win32-ia32@0.27.0': + optional: true + + '@esbuild/win32-x64@0.27.0': + optional: true + + '@openrouter/sdk@file:..': + dependencies: + zod: 4.1.13 + + '@types/node@20.19.25': + dependencies: + undici-types: 6.21.0 + + dotenv@16.6.1: {} + + esbuild@0.27.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.0 + '@esbuild/android-arm': 0.27.0 + '@esbuild/android-arm64': 0.27.0 + '@esbuild/android-x64': 0.27.0 + '@esbuild/darwin-arm64': 0.27.0 + '@esbuild/darwin-x64': 0.27.0 + '@esbuild/freebsd-arm64': 0.27.0 + '@esbuild/freebsd-x64': 0.27.0 + '@esbuild/linux-arm': 0.27.0 + '@esbuild/linux-arm64': 0.27.0 + '@esbuild/linux-ia32': 0.27.0 + '@esbuild/linux-loong64': 0.27.0 + '@esbuild/linux-mips64el': 0.27.0 + '@esbuild/linux-ppc64': 0.27.0 + '@esbuild/linux-riscv64': 0.27.0 + '@esbuild/linux-s390x': 0.27.0 + '@esbuild/linux-x64': 0.27.0 + '@esbuild/netbsd-arm64': 0.27.0 + '@esbuild/netbsd-x64': 0.27.0 + '@esbuild/openbsd-arm64': 0.27.0 + '@esbuild/openbsd-x64': 0.27.0 + '@esbuild/openharmony-arm64': 0.27.0 + '@esbuild/sunos-x64': 0.27.0 + '@esbuild/win32-arm64': 0.27.0 + '@esbuild/win32-ia32': 0.27.0 + '@esbuild/win32-x64': 0.27.0 + + fsevents@2.3.3: + optional: true + + get-tsconfig@4.13.0: + dependencies: + resolve-pkg-maps: 1.0.0 + + resolve-pkg-maps@1.0.0: {} + + tsx@4.21.0: + dependencies: + esbuild: 0.27.0 + get-tsconfig: 4.13.0 + optionalDependencies: + fsevents: 2.3.3 + + undici-types@6.21.0: {} + + zod@4.1.13: {} diff --git a/examples/tools-example.ts b/examples/tools-example.ts index e814df5c..39f883f1 100644 --- a/examples/tools-example.ts +++ b/examples/tools-example.ts @@ -19,14 +19,14 @@ * - Context includes: numberOfTurns, messageHistory, model/models */ -import { OpenRouter, ToolType } from "../src/index.js"; -import { z } from "zod/v4"; -import * as dotenv from "dotenv"; +import * as dotenv from 'dotenv'; +import { z } from 'zod/v4'; +import { OpenRouter, ToolType } from '../src/index.js'; dotenv.config(); const client = new OpenRouter({ - apiKey: process.env.OPENROUTER_API_KEY || "", + apiKey: process.env.OPENROUTER_API_KEY || '', }); /** @@ -35,28 +35,29 @@ const client = new OpenRouter({ * Note: The context parameter is optional for backward compatibility */ async function basicToolExample() { - console.log("\n=== Example 1: Basic Tool with Execute Function ===\n"); - const weatherTool = { type: ToolType.Function, function: { - name: "get_weather", - description: "Get current weather for a location", + name: 'get_weather', + description: 'Get current weather for a location', inputSchema: z.object({ - location: z.string().describe("City and country (e.g., San Francisco, CA)"), + location: z.string().describe('City and country (e.g., San Francisco, CA)'), }), outputSchema: z.object({ temperature: z.number(), description: z.string(), humidity: z.number(), }), - execute: async (params: { location: string }, context) => { - console.log(`Executing get_weather for: ${params.location}`); - console.log(`Turn ${context.numberOfTurns} - Model: ${context.model || context.models?.join(", ")}`); + execute: async ( + _params: { + location: string; + }, + _context, + ) => { // In real usage, you would call a weather API here return { temperature: 72, - description: "Sunny", + description: 'Sunny', humidity: 45, }; }, @@ -64,23 +65,22 @@ async function basicToolExample() { }; const response = client.callModel({ - model: "openai/gpt-4o", + model: 'openai/gpt-4o', input: "What's the weather like in San Francisco?", - tools: [weatherTool], + tools: [ + weatherTool, + ], // Example: limit to 3 turns using a function maxToolRounds: (context) => { - console.log(`Checking if we should continue (currently on turn ${context.numberOfTurns})`); return context.numberOfTurns < 3; // Allow up to 3 turns }, }); // Tools are automatically executed! Just get the final message - const message = await response.getMessage(); - console.log("\nFinal message after automatic tool execution:", message.content); + const _message = await response.getMessage(); // You can also check what tool calls were made initially - const toolCalls = await response.getToolCalls(); - console.log("\nInitial tool calls:", JSON.stringify(toolCalls, null, 2)); + const _toolCalls = await response.getToolCalls(); } /** @@ -88,19 +88,20 @@ async function basicToolExample() { * Shows how to use async generators for streaming intermediate results */ async function generatorToolExample() { - console.log("\n=== Example 2: Generator Tool with Preliminary Results ===\n"); - const processingTool = { type: ToolType.Function, function: { - name: "process_data", - description: "Process data with progress updates", + name: 'process_data', + description: 'Process data with progress updates', inputSchema: z.object({ - data: z.string().describe("Data to process"), + data: z.string().describe('Data to process'), }), // Events emitted during processing (validated against eventSchema) eventSchema: z.object({ - type: z.enum(["start", "progress"]), + type: z.enum([ + 'start', + 'progress', + ]), message: z.string(), progress: z.number().min(0).max(100).optional(), }), @@ -109,13 +110,17 @@ async function generatorToolExample() { result: z.string(), processingTime: z.number(), }), - execute: async function* (params: { data: string }, context) { - console.log(`Generator tool - Turn ${context.numberOfTurns}`); + execute: async function* ( + params: { + data: string; + }, + _context, + ) { const startTime = Date.now(); // Preliminary event 1 yield { - type: "start" as const, + type: 'start' as const, message: `Started processing: ${params.data}`, progress: 0, }; @@ -124,8 +129,8 @@ async function generatorToolExample() { // Preliminary event 2 yield { - type: "progress" as const, - message: "Processing halfway done", + type: 'progress' as const, + message: 'Processing halfway done', progress: 50, }; @@ -141,24 +146,21 @@ async function generatorToolExample() { }; const response = client.callModel({ - model: "openai/gpt-4o", - input: "Process this data: hello world", - tools: [processingTool], + model: 'openai/gpt-4o', + input: 'Process this data: hello world', + tools: [ + processingTool, + ], }); - - // Stream preliminary results as they arrive - console.log("Streaming tool events including preliminary results:\n"); for await (const event of response.getToolStream()) { - if (event.type === "preliminary_result") { - console.log(`Preliminary result from ${event.toolCallId}:`, event.result); - } else if (event.type === "delta") { + if (event.type === 'preliminary_result') { + } else if (event.type === 'delta') { process.stdout.write(event.content); } } // Tools are automatically executed with preliminary results available - const message = await response.getMessage(); - console.log("\n\nFinal message:", message.content); + const _message = await response.getMessage(); } /** @@ -166,15 +168,13 @@ async function generatorToolExample() { * Define a tool without execute function for manual handling */ async function manualToolExample() { - console.log("\n=== Example 3: Manual Tool Execution ===\n"); - const calculatorTool = { type: ToolType.Function, function: { - name: "calculate", - description: "Perform mathematical calculations", + name: 'calculate', + description: 'Perform mathematical calculations', inputSchema: z.object({ - expression: z.string().describe("Math expression to evaluate"), + expression: z.string().describe('Math expression to evaluate'), }), outputSchema: z.object({ result: z.number(), @@ -184,29 +184,30 @@ async function manualToolExample() { }; const response = client.callModel({ - model: "openai/gpt-4o", - input: "What is 25 * 4 + 10?", - tools: [calculatorTool], + model: 'openai/gpt-4o', + input: 'What is 25 * 4 + 10?', + tools: [ + calculatorTool, + ], }); // Since there's no execute function, tool calls are returned but not executed const toolCalls = await response.getToolCalls(); - console.log("Tool calls (not auto-executed):", toolCalls); // You can manually handle tool execution here for (const toolCall of toolCalls) { - if (toolCall.name === "calculate") { - const expression = (toolCall.arguments as { expression: string }).expression; - console.log(`Manually executing calculation: ${expression}`); + if (toolCall.name === 'calculate') { + const expression = ( + toolCall.arguments as { + expression: string; + } + ).expression; // In a real app, you would safely evaluate this // For demo purposes only - don't use eval in production! try { - const result = eval(expression); - console.log(`Result: ${result}`); - } catch (error) { - console.error("Calculation error:", error); - } + const _result = eval(expression); + } catch (_error) {} } } @@ -220,15 +221,13 @@ async function manualToolExample() { * Note: This tool doesn't use context - demonstrating backward compatibility */ async function streamingToolCallsExample() { - console.log("\n=== Example 4: Streaming Tool Calls ===\n"); - const searchTool = { type: ToolType.Function, function: { - name: "search", - description: "Search for information", + name: 'search', + description: 'Search for information', inputSchema: z.object({ - query: z.string().describe("Search query"), + query: z.string().describe('Search query'), }), outputSchema: z.object({ results: z.array(z.string()), @@ -246,16 +245,15 @@ async function streamingToolCallsExample() { }; const response = client.callModel({ - model: "openai/gpt-4o", - input: "Search for information about TypeScript", - tools: [searchTool], + model: 'openai/gpt-4o', + input: 'Search for information about TypeScript', + tools: [ + searchTool, + ], }); - console.log("Streaming tool calls as they arrive:\n"); - // Stream structured tool call objects - for await (const toolCall of response.getToolCallsStream()) { - console.log("Tool call:", JSON.stringify(toolCall, null, 2)); + for await (const _toolCall of response.getToolCallsStream()) { } } @@ -265,14 +263,12 @@ async function streamingToolCallsExample() { * Note: Shows mixing tools with and without context parameter */ async function multipleToolsExample() { - console.log("\n=== Example 5: Multiple Tools ===\n"); - const tools = [ { type: ToolType.Function, function: { - name: "get_time", - description: "Get current time", + name: 'get_time', + description: 'Get current time', inputSchema: z.object({ timezone: z.string().optional(), }), @@ -280,10 +276,15 @@ async function multipleToolsExample() { time: z.string(), timezone: z.string(), }), - execute: async (params: { timezone?: string }, context) => { + execute: async ( + params: { + timezone?: string; + }, + _context, + ) => { return { time: new Date().toISOString(), - timezone: params.timezone || "UTC", + timezone: params.timezone || 'UTC', }; }, }, @@ -291,8 +292,8 @@ async function multipleToolsExample() { { type: ToolType.Function, function: { - name: "get_weather", - description: "Get weather information", + name: 'get_weather', + description: 'Get weather information', inputSchema: z.object({ location: z.string(), }), @@ -300,11 +301,11 @@ async function multipleToolsExample() { temperature: z.number(), description: z.string(), }), - execute: async (params: { location: string }) => { + execute: async (_params: { location: string }) => { // This tool doesn't need context return { temperature: 68, - description: "Partly cloudy", + description: 'Partly cloudy', }; }, }, @@ -312,18 +313,16 @@ async function multipleToolsExample() { ]; const response = client.callModel({ - model: "openai/gpt-4o", + model: 'openai/gpt-4o', input: "What time is it and what's the weather in New York?", tools, }); // Tools are automatically executed! - const message = await response.getMessage(); - console.log("Final message:", message.content); + const _message = await response.getMessage(); // You can check which tools were called - const toolCalls = await response.getToolCalls(); - console.log("\nTools that were called:", toolCalls.map(tc => tc.name)); + const _toolCalls = await response.getToolCalls(); } // Run examples @@ -334,9 +333,7 @@ async function main() { await manualToolExample(); await streamingToolCallsExample(); await multipleToolsExample(); - } catch (error) { - console.error("Error running examples:", error); - } + } catch (_error) {} } // Only run if this file is executed directly diff --git a/jsr.json b/jsr.json index 27ade2d4..c424701f 100644 --- a/jsr.json +++ b/jsr.json @@ -2,7 +2,7 @@ { "name": "@openrouter/sdk", - "version": "0.1.27", + "version": "0.2.6", "exports": { ".": "./src/index.ts", "./models/errors": "./src/models/errors/index.ts", diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index c846df18..00000000 --- a/package-lock.json +++ /dev/null @@ -1,3234 +0,0 @@ -{ - "name": "@openrouter/sdk", - "version": "0.1.27", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "@openrouter/sdk", - "version": "0.1.27", - "license": "Apache-2.0", - "dependencies": { - "zod": "^3.25.0 || ^4.0.0" - }, - "devDependencies": { - "@eslint/js": "^9.19.0", - "@types/node": "^22.13.12", - "dotenv": "^16.4.7", - "eslint": "^9.19.0", - "globals": "^15.14.0", - "typescript": "~5.8.3", - "typescript-eslint": "^8.26.0", - "vitest": "^3.2.4" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz", - "integrity": "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.10.tgz", - "integrity": "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz", - "integrity": "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.10.tgz", - "integrity": "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz", - "integrity": "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz", - "integrity": "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz", - "integrity": "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz", - "integrity": "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz", - "integrity": "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz", - "integrity": "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz", - "integrity": "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz", - "integrity": "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz", - "integrity": "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz", - "integrity": "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz", - "integrity": "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz", - "integrity": "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz", - "integrity": "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz", - "integrity": "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz", - "integrity": "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz", - "integrity": "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz", - "integrity": "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz", - "integrity": "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz", - "integrity": "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz", - "integrity": "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz", - "integrity": "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz", - "integrity": "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", - "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.6", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", - "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/core": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", - "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "9.33.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.33.0.tgz", - "integrity": "sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", - "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.15.2", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.4.tgz", - "integrity": "sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.4.tgz", - "integrity": "sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.4.tgz", - "integrity": "sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.4.tgz", - "integrity": "sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.4.tgz", - "integrity": "sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.4.tgz", - "integrity": "sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.4.tgz", - "integrity": "sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.4.tgz", - "integrity": "sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.4.tgz", - "integrity": "sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.4.tgz", - "integrity": "sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.4.tgz", - "integrity": "sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.4.tgz", - "integrity": "sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.4.tgz", - "integrity": "sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.4.tgz", - "integrity": "sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.4.tgz", - "integrity": "sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.4.tgz", - "integrity": "sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.4.tgz", - "integrity": "sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.4.tgz", - "integrity": "sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.4.tgz", - "integrity": "sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.4.tgz", - "integrity": "sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.4.tgz", - "integrity": "sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.4.tgz", - "integrity": "sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@types/chai": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz", - "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/deep-eql": "*" - } - }, - "node_modules/@types/deep-eql": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", - "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.18.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.13.tgz", - "integrity": "sha512-Bo45YKIjnmFtv6I1TuC8AaHBbqXtIo+Om5fE4QiU1Tj8QR/qt+8O3BAtOimG5IFmwaWiPmB3Mv3jtYzBA4Us2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.40.0.tgz", - "integrity": "sha512-w/EboPlBwnmOBtRbiOvzjD+wdiZdgFeo17lkltrtn7X37vagKKWJABvyfsJXTlHe6XBzugmYgd4A4nW+k8Mixw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.40.0", - "@typescript-eslint/type-utils": "8.40.0", - "@typescript-eslint/utils": "8.40.0", - "@typescript-eslint/visitor-keys": "8.40.0", - "graphemer": "^1.4.0", - "ignore": "^7.0.0", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.40.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.40.0.tgz", - "integrity": "sha512-jCNyAuXx8dr5KJMkecGmZ8KI61KBUhkCob+SD+C+I5+Y1FWI2Y3QmY4/cxMCC5WAsZqoEtEETVhUiUMIGCf6Bw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.40.0", - "@typescript-eslint/types": "8.40.0", - "@typescript-eslint/typescript-estree": "8.40.0", - "@typescript-eslint/visitor-keys": "8.40.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.40.0.tgz", - "integrity": "sha512-/A89vz7Wf5DEXsGVvcGdYKbVM9F7DyFXj52lNYUDS1L9yJfqjW/fIp5PgMuEJL/KeqVTe2QSbXAGUZljDUpArw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.40.0", - "@typescript-eslint/types": "^8.40.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.40.0.tgz", - "integrity": "sha512-y9ObStCcdCiZKzwqsE8CcpyuVMwRouJbbSrNuThDpv16dFAj429IkM6LNb1dZ2m7hK5fHyzNcErZf7CEeKXR4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.40.0", - "@typescript-eslint/visitor-keys": "8.40.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.40.0.tgz", - "integrity": "sha512-jtMytmUaG9d/9kqSl/W3E3xaWESo4hFDxAIHGVW/WKKtQhesnRIJSAJO6XckluuJ6KDB5woD1EiqknriCtAmcw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.40.0.tgz", - "integrity": "sha512-eE60cK4KzAc6ZrzlJnflXdrMqOBaugeukWICO2rB0KNvwdIMaEaYiywwHMzA1qFpTxrLhN9Lp4E/00EgWcD3Ow==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.40.0", - "@typescript-eslint/typescript-estree": "8.40.0", - "@typescript-eslint/utils": "8.40.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.40.0.tgz", - "integrity": "sha512-ETdbFlgbAmXHyFPwqUIYrfc12ArvpBhEVgGAxVYSwli26dn8Ko+lIo4Su9vI9ykTZdJn+vJprs/0eZU0YMAEQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.40.0.tgz", - "integrity": "sha512-k1z9+GJReVVOkc1WfVKs1vBrR5MIKKbdAjDTPvIK3L8De6KbFfPFt6BKpdkdk7rZS2GtC/m6yI5MYX+UsuvVYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.40.0", - "@typescript-eslint/tsconfig-utils": "8.40.0", - "@typescript-eslint/types": "8.40.0", - "@typescript-eslint/visitor-keys": "8.40.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.40.0.tgz", - "integrity": "sha512-Cgzi2MXSZyAUOY+BFwGs17s7ad/7L+gKt6Y8rAVVWS+7o6wrjeFN4nVfTpbE25MNcxyJ+iYUXflbs2xR9h4UBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.40.0", - "@typescript-eslint/types": "8.40.0", - "@typescript-eslint/typescript-estree": "8.40.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.40.0.tgz", - "integrity": "sha512-8CZ47QwalyRjsypfwnbI3hKy5gJDPmrkLjkgMxhi0+DZZ2QNx2naS6/hWoVYUHU7LU2zleF68V9miaVZvhFfTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.40.0", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@vitest/expect": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", - "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/chai": "^5.2.2", - "@vitest/spy": "3.2.4", - "@vitest/utils": "3.2.4", - "chai": "^5.2.0", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/mocker": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", - "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/spy": "3.2.4", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.17" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, - "node_modules/@vitest/pretty-format": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", - "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", - "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/utils": "3.2.4", - "pathe": "^2.0.3", - "strip-literal": "^3.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/snapshot": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", - "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "3.2.4", - "magic-string": "^0.30.17", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/spy": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", - "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyspy": "^4.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/utils": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", - "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "3.2.4", - "loupe": "^3.1.4", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/chai": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", - "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "assertion-error": "^2.0.1", - "check-error": "^2.1.1", - "deep-eql": "^5.0.1", - "loupe": "^3.1.0", - "pathval": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/check-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-eql": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/dotenv": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", - "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/esbuild": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz", - "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.10", - "@esbuild/android-arm": "0.25.10", - "@esbuild/android-arm64": "0.25.10", - "@esbuild/android-x64": "0.25.10", - "@esbuild/darwin-arm64": "0.25.10", - "@esbuild/darwin-x64": "0.25.10", - "@esbuild/freebsd-arm64": "0.25.10", - "@esbuild/freebsd-x64": "0.25.10", - "@esbuild/linux-arm": "0.25.10", - "@esbuild/linux-arm64": "0.25.10", - "@esbuild/linux-ia32": "0.25.10", - "@esbuild/linux-loong64": "0.25.10", - "@esbuild/linux-mips64el": "0.25.10", - "@esbuild/linux-ppc64": "0.25.10", - "@esbuild/linux-riscv64": "0.25.10", - "@esbuild/linux-s390x": "0.25.10", - "@esbuild/linux-x64": "0.25.10", - "@esbuild/netbsd-arm64": "0.25.10", - "@esbuild/netbsd-x64": "0.25.10", - "@esbuild/openbsd-arm64": "0.25.10", - "@esbuild/openbsd-x64": "0.25.10", - "@esbuild/openharmony-arm64": "0.25.10", - "@esbuild/sunos-x64": "0.25.10", - "@esbuild/win32-arm64": "0.25.10", - "@esbuild/win32-ia32": "0.25.10", - "@esbuild/win32-x64": "0.25.10" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "9.33.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.33.0.tgz", - "integrity": "sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.1", - "@eslint/core": "^0.15.2", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.33.0", - "@eslint/plugin-kit": "^0.3.5", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expect-type": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz", - "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/loupe": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", - "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/magic-string": { - "version": "0.30.19", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", - "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/pathval": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", - "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.16" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rollup": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.4.tgz", - "integrity": "sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.52.4", - "@rollup/rollup-android-arm64": "4.52.4", - "@rollup/rollup-darwin-arm64": "4.52.4", - "@rollup/rollup-darwin-x64": "4.52.4", - "@rollup/rollup-freebsd-arm64": "4.52.4", - "@rollup/rollup-freebsd-x64": "4.52.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.52.4", - "@rollup/rollup-linux-arm-musleabihf": "4.52.4", - "@rollup/rollup-linux-arm64-gnu": "4.52.4", - "@rollup/rollup-linux-arm64-musl": "4.52.4", - "@rollup/rollup-linux-loong64-gnu": "4.52.4", - "@rollup/rollup-linux-ppc64-gnu": "4.52.4", - "@rollup/rollup-linux-riscv64-gnu": "4.52.4", - "@rollup/rollup-linux-riscv64-musl": "4.52.4", - "@rollup/rollup-linux-s390x-gnu": "4.52.4", - "@rollup/rollup-linux-x64-gnu": "4.52.4", - "@rollup/rollup-linux-x64-musl": "4.52.4", - "@rollup/rollup-openharmony-arm64": "4.52.4", - "@rollup/rollup-win32-arm64-msvc": "4.52.4", - "@rollup/rollup-win32-ia32-msvc": "4.52.4", - "@rollup/rollup-win32-x64-gnu": "4.52.4", - "@rollup/rollup-win32-x64-msvc": "4.52.4", - "fsevents": "~2.3.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true, - "license": "ISC" - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true, - "license": "MIT" - }, - "node_modules/std-env": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", - "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", - "dev": true, - "license": "MIT" - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-literal": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", - "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^9.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tinybench": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/tinypool": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", - "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.0.0 || >=20.0.0" - } - }, - "node_modules/tinyrainbow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", - "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tinyspy": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", - "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typescript-eslint": { - "version": "8.40.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.40.0.tgz", - "integrity": "sha512-Xvd2l+ZmFDPEt4oj1QEXzA4A2uUK6opvKu3eGN9aGjB8au02lIVcLyi375w94hHyejTOmzIU77L8ol2sRg9n7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "8.40.0", - "@typescript-eslint/parser": "8.40.0", - "@typescript-eslint/typescript-estree": "8.40.0", - "@typescript-eslint/utils": "8.40.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/vite": { - "version": "7.1.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.9.tgz", - "integrity": "sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.25.0", - "fdir": "^6.5.0", - "picomatch": "^4.0.3", - "postcss": "^8.5.6", - "rollup": "^4.43.0", - "tinyglobby": "^0.2.15" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "lightningcss": "^1.21.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vite-node": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", - "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.4.1", - "es-module-lexer": "^1.7.0", - "pathe": "^2.0.3", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vite/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/vitest": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", - "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/chai": "^5.2.2", - "@vitest/expect": "3.2.4", - "@vitest/mocker": "3.2.4", - "@vitest/pretty-format": "^3.2.4", - "@vitest/runner": "3.2.4", - "@vitest/snapshot": "3.2.4", - "@vitest/spy": "3.2.4", - "@vitest/utils": "3.2.4", - "chai": "^5.2.0", - "debug": "^4.4.1", - "expect-type": "^1.2.1", - "magic-string": "^0.30.17", - "pathe": "^2.0.3", - "picomatch": "^4.0.2", - "std-env": "^3.9.0", - "tinybench": "^2.9.0", - "tinyexec": "^0.3.2", - "tinyglobby": "^0.2.14", - "tinypool": "^1.1.1", - "tinyrainbow": "^2.0.0", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", - "vite-node": "3.2.4", - "why-is-node-running": "^2.3.0" - }, - "bin": { - "vitest": "vitest.mjs" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@types/debug": "^4.1.12", - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.2.4", - "@vitest/ui": "3.2.4", - "happy-dom": "*", - "jsdom": "*" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@types/debug": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@vitest/browser": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - } - } - }, - "node_modules/vitest/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/why-is-node-running": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", - "dev": true, - "license": "MIT", - "dependencies": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" - }, - "bin": { - "why-is-node-running": "cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } -} diff --git a/package.json b/package.json index 099dc891..733183f0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@openrouter/sdk", - "version": "0.1.27", + "version": "0.2.6", "author": "OpenRouter", "description": "The OpenRouter TypeScript SDK is a type-safe toolkit for building AI applications with access to 300+ language models through a unified API.", "keywords": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cbe25e0a..fd569708 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,9 +8,6 @@ importers: .: dependencies: - react: - specifier: ^18 || ^19 - version: 19.2.0 zod: specifier: ^3.25.0 || ^4.0.0 version: 4.1.12 @@ -18,18 +15,12 @@ importers: '@eslint/js': specifier: ^9.19.0 version: 9.38.0 - '@tanstack/react-query': - specifier: ^5.61.4 - version: 5.90.5(react@19.2.0) '@types/node': specifier: ^22.13.12 version: 22.18.13 - '@types/react': - specifier: ^18.3.12 - version: 18.3.26 dotenv: - specifier: ^17.2.3 - version: 17.2.3 + specifier: ^16.4.7 + version: 16.6.1 eslint: specifier: ^9.19.0 version: 9.38.0 @@ -383,14 +374,6 @@ packages: cpu: [x64] os: [win32] - '@tanstack/query-core@5.90.5': - resolution: {integrity: sha512-wLamYp7FaDq6ZnNehypKI5fNvxHPfTYylE0m/ZpuuzJfJqhR5Pxg9gvGBHZx4n7J+V5Rg5mZxHHTlv25Zt5u+w==} - - '@tanstack/react-query@5.90.5': - resolution: {integrity: sha512-pN+8UWpxZkEJ/Rnnj2v2Sxpx1WFlaa9L6a4UO89p6tTQbeo+m0MS8oYDjbggrR8QcTyjKoYWKS3xJQGr3ExT8Q==} - peerDependencies: - react: ^18 || ^19 - '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -406,12 +389,6 @@ packages: '@types/node@22.18.13': resolution: {integrity: sha512-Bo45YKIjnmFtv6I1TuC8AaHBbqXtIo+Om5fE4QiU1Tj8QR/qt+8O3BAtOimG5IFmwaWiPmB3Mv3jtYzBA4Us2A==} - '@types/prop-types@15.7.15': - resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} - - '@types/react@18.3.26': - resolution: {integrity: sha512-RFA/bURkcKzx/X9oumPG9Vp3D3JUgus/d0b67KB0t5S/raciymilkOa66olh78MUI92QLbEJevO7rvqU/kjwKA==} - '@typescript-eslint/eslint-plugin@8.46.2': resolution: {integrity: sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -571,9 +548,6 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -590,8 +564,8 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dotenv@17.2.3: - resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} es-module-lexer@1.7.0: @@ -877,10 +851,6 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - react@19.2.0: - resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} - engines: {node: '>=0.10.0'} - resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -1299,13 +1269,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.52.5': optional: true - '@tanstack/query-core@5.90.5': {} - - '@tanstack/react-query@5.90.5(react@19.2.0)': - dependencies: - '@tanstack/query-core': 5.90.5 - react: 19.2.0 - '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 @@ -1321,13 +1284,6 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/prop-types@15.7.15': {} - - '@types/react@18.3.26': - dependencies: - '@types/prop-types': 15.7.15 - csstype: 3.1.3 - '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0)(typescript@5.8.3))(eslint@9.38.0)(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.2 @@ -1532,8 +1488,6 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - csstype@3.1.3: {} - debug@4.4.3: dependencies: ms: 2.1.3 @@ -1542,7 +1496,7 @@ snapshots: deep-is@0.1.4: {} - dotenv@17.2.3: {} + dotenv@16.6.1: {} es-module-lexer@1.7.0: {} @@ -1832,8 +1786,6 @@ snapshots: queue-microtask@1.2.3: {} - react@19.2.0: {} - resolve-from@4.0.0: {} reusify@1.1.0: {} diff --git a/src/funcs/callModel.ts b/src/funcs/callModel.ts index 625724f3..b2d79ec5 100644 --- a/src/funcs/callModel.ts +++ b/src/funcs/callModel.ts @@ -1,33 +1,36 @@ -import { OpenRouterCore } from "../core.js"; -import { RequestOptions } from "../lib/sdks.js"; -import { ResponseWrapper } from "../lib/response-wrapper.js"; -import * as models from "../models/index.js"; -import { EnhancedTool, MaxToolRounds } from "../lib/tool-types.js"; -import { convertEnhancedToolsToAPIFormat } from "../lib/tool-executor.js"; +import type { OpenRouterCore } from '../core.js'; +import type { RequestOptions } from '../lib/sdks.js'; +import type { Tool, MaxToolRounds } from '../lib/tool-types.js'; +import type * as models from '../models/index.js'; + +import { ResponseWrapper } from '../lib/response-wrapper.js'; +import { convertToolsToAPIFormat } from '../lib/tool-executor.js'; /** * Input type that accepts both chat-style messages and responses-style input */ -export type CallModelInput = - | models.OpenResponsesInput - | models.Message[]; +export type CallModelInput = models.OpenResponsesInput | models.Message[]; /** * Tool type that accepts chat-style, responses-style, or enhanced tools */ export type CallModelTools = - | EnhancedTool[] + | Tool[] | models.ToolDefinitionJson[] - | models.OpenResponsesRequest["tools"]; + | models.OpenResponsesRequest['tools']; /** * Check if input is chat-style messages (Message[]) */ function isChatStyleMessages(input: CallModelInput): input is models.Message[] { - if (!Array.isArray(input)) return false; - if (input.length === 0) return false; + if (!Array.isArray(input)) { + return false; + } + if (input.length === 0) { + return false; + } - const first = input[0] as any; + const first = input[0] as Record; // Chat-style messages have role but no 'type' field at top level // Responses-style items have 'type' field (like 'message', 'function_call', etc.) return first && 'role' in first && !('type' in first); @@ -37,76 +40,97 @@ function isChatStyleMessages(input: CallModelInput): input is models.Message[] { * Check if tools are chat-style (ToolDefinitionJson[]) */ function isChatStyleTools(tools: CallModelTools): tools is models.ToolDefinitionJson[] { - if (!Array.isArray(tools)) return false; - if (tools.length === 0) return false; + if (!Array.isArray(tools)) { + return false; + } + if (tools.length === 0) { + return false; + } - const first = tools[0] as any; + const first = tools[0] as Record; // Chat-style tools have nested 'function' property with 'name' inside // Enhanced tools have 'function' with 'inputSchema' // Responses-style tools have 'name' at top level - return first && 'function' in first && first.function && 'name' in first.function && !('inputSchema' in first.function); + const fn = first?.['function'] as Record | undefined; + return ( + first && + 'function' in first && + fn !== undefined && + fn !== null && + 'name' in fn && + !('inputSchema' in fn) + ); } /** * Convert chat-style tools to responses-style */ -function convertChatToResponsesTools(tools: models.ToolDefinitionJson[]): models.OpenResponsesRequest["tools"] { - return tools.map((tool): models.OpenResponsesRequestToolFunction => ({ - type: "function", - name: tool.function.name, - description: tool.function.description ?? null, - strict: tool.function.strict ?? null, - parameters: tool.function.parameters ?? null, - })); +function convertChatToResponsesTools( + tools: models.ToolDefinitionJson[], +): models.OpenResponsesRequest['tools'] { + return tools.map( + (tool): models.OpenResponsesRequestToolFunction => ({ + type: 'function', + name: tool.function.name, + description: tool.function.description ?? null, + strict: tool.function.strict ?? null, + parameters: tool.function.parameters ?? null, + }), + ); } /** * Convert chat-style messages to responses-style input */ function convertChatToResponsesInput(messages: models.Message[]): models.OpenResponsesInput { - return messages.map((msg): models.OpenResponsesEasyInputMessage | models.OpenResponsesFunctionCallOutput => { - // Extract extra fields like cache_control - const { role, content, ...extraFields } = msg as any; + return messages.map( + (msg): models.OpenResponsesEasyInputMessage | models.OpenResponsesFunctionCallOutput => { + // Extract extra fields like cache_control + const { role, content, ...extraFields } = msg as models.Message & Record; + + if (role === 'tool') { + const toolMsg = msg as models.ToolResponseMessage; + return { + type: 'function_call_output', + callId: toolMsg.toolCallId, + output: + typeof toolMsg.content === 'string' ? toolMsg.content : JSON.stringify(toolMsg.content), + ...extraFields, + } as models.OpenResponsesFunctionCallOutput; + } + + // Handle assistant messages with tool calls + if (role === 'assistant') { + const assistantMsg = msg as models.AssistantMessage; + // If it has tool calls, we need to convert them + // For now, just convert the content part + return { + role: 'assistant', + content: + typeof assistantMsg.content === 'string' + ? assistantMsg.content + : assistantMsg.content === null + ? '' + : JSON.stringify(assistantMsg.content), + ...extraFields, + } as models.OpenResponsesEasyInputMessage; + } + + // System, user, developer messages + const convertedContent = + typeof content === 'string' + ? content + : content === null || content === undefined + ? '' + : JSON.stringify(content); - if (role === "tool") { - const toolMsg = msg as models.ToolResponseMessage; - return { - type: "function_call_output", - callId: toolMsg.toolCallId, - output: typeof toolMsg.content === "string" ? toolMsg.content : JSON.stringify(toolMsg.content), - ...extraFields, - } as models.OpenResponsesFunctionCallOutput; - } - - // Handle assistant messages with tool calls - if (role === "assistant") { - const assistantMsg = msg as models.AssistantMessage; - // If it has tool calls, we need to convert them - // For now, just convert the content part return { - role: "assistant", - content: typeof assistantMsg.content === "string" - ? assistantMsg.content - : assistantMsg.content === null - ? "" - : JSON.stringify(assistantMsg.content), + role: role as 'user' | 'system' | 'developer', + content: convertedContent, ...extraFields, } as models.OpenResponsesEasyInputMessage; - } - - // System, user, developer messages - const convertedContent = typeof content === "string" - ? content - : content === null || content === undefined - ? "" - : JSON.stringify(content); - - return { - role: role as "user" | "system" | "developer", - content: convertedContent, - ...extraFields, - } as models.OpenResponsesEasyInputMessage; - }) as models.OpenResponsesInput; + }, + ) as models.OpenResponsesInput; } /** @@ -179,7 +203,7 @@ function convertChatToResponsesInput(messages: models.Message[]): models.OpenRes */ export function callModel( client: OpenRouterCore, - request: Omit & { + request: Omit & { input?: CallModelInput; tools?: CallModelTools; maxToolRounds?: MaxToolRounds; @@ -189,9 +213,8 @@ export function callModel( const { tools, maxToolRounds, input, ...restRequest } = request; // Convert chat-style messages to responses-style input if needed - const convertedInput = input && isChatStyleMessages(input) - ? convertChatToResponsesInput(input) - : input; + const convertedInput = + input && isChatStyleMessages(input) ? convertChatToResponsesInput(input) : input; const apiRequest = { ...restRequest, @@ -203,34 +226,38 @@ export function callModel( let isChatTools = false; if (tools && Array.isArray(tools) && tools.length > 0) { - const firstTool = tools[0] as any; - isEnhancedTools = "function" in firstTool && firstTool.function && "inputSchema" in firstTool.function; + const firstTool = tools[0] as Record; + const fn = firstTool?.['function'] as Record | undefined; + isEnhancedTools = + 'function' in firstTool && fn !== undefined && fn !== null && 'inputSchema' in fn; isChatTools = !isEnhancedTools && isChatStyleTools(tools); } - const enhancedTools = isEnhancedTools ? (tools as EnhancedTool[]) : undefined; + const enhancedTools = isEnhancedTools ? (tools as Tool[]) : undefined; // Convert tools to API format based on their type - let apiTools: models.OpenResponsesRequest["tools"]; + let apiTools: models.OpenResponsesRequest['tools']; if (enhancedTools) { - apiTools = convertEnhancedToolsToAPIFormat(enhancedTools); + apiTools = convertToolsToAPIFormat(enhancedTools); } else if (isChatTools) { apiTools = convertChatToResponsesTools(tools as models.ToolDefinitionJson[]); } else { - apiTools = tools as models.OpenResponsesRequest["tools"]; + apiTools = tools as models.OpenResponsesRequest['tools']; } // Build the request with converted tools const finalRequest: models.OpenResponsesRequest = { ...apiRequest, - ...(apiTools && { tools: apiTools }), + ...(apiTools && { + tools: apiTools, + }), } as models.OpenResponsesRequest; const wrapperOptions: { client: OpenRouterCore; request: models.OpenResponsesRequest; options: RequestOptions; - tools?: EnhancedTool[]; + tools?: Tool[]; maxToolRounds?: MaxToolRounds; } = { client, diff --git a/src/funcs/oAuthCreateAuthorizationUrl.ts b/src/funcs/oAuthCreateAuthorizationUrl.ts index 3be2ae74..6873aa76 100644 --- a/src/funcs/oAuthCreateAuthorizationUrl.ts +++ b/src/funcs/oAuthCreateAuthorizationUrl.ts @@ -1,24 +1,29 @@ -import z from "zod/v3"; -import { OpenRouterCore } from "../core.js"; -import { serverURLFromOptions } from "../lib/config.js"; -import { Result } from "../types/fp.js"; +import type { OpenRouterCore } from '../core.js'; +import type { Result } from '../types/fp.js'; + +import z from 'zod/v3'; +import { serverURLFromOptions } from '../lib/config.js'; const CreateAuthorizationUrlBaseSchema = z.object({ - callbackUrl: z.union([z.string().url(), z.instanceof(URL)]), + callbackUrl: z.union([ + z.string().url(), + z.instanceof(URL), + ]), limit: z.number().optional(), }); const CreateAuthorizationurlParamsSchema = z.union([ CreateAuthorizationUrlBaseSchema.extend({ - codeChallengeMethod: z.enum(["S256", "plain"]), + codeChallengeMethod: z.enum([ + 'S256', + 'plain', + ]), codeChallenge: z.string(), }), CreateAuthorizationUrlBaseSchema, ]); -export type CreateAuthorizationUrlRequest = z.infer< - typeof CreateAuthorizationurlParamsSchema ->; +export type CreateAuthorizationUrlRequest = z.infer; /** * Generate a OAuth2 authorization URL @@ -35,32 +40,37 @@ export function oAuthCreateAuthorizationUrl( params: CreateAuthorizationUrlRequest, ): Result { const parsedParams = CreateAuthorizationurlParamsSchema.safeParse(params); - if (!parsedParams.success) return { ok: false, error: parsedParams.error }; + if (!parsedParams.success) { + return { + ok: false, + error: parsedParams.error, + }; + } const baseURL = serverURLFromOptions(client._options); if (!baseURL) { - return { ok: false, error: new Error("No server URL configured") }; + return { + ok: false, + error: new Error('No server URL configured'), + }; } // Clone the URL to avoid mutating the original - const authURL = new URL("/auth", baseURL); + const authURL = new URL('/auth', baseURL); - authURL.searchParams.set( - "callback_url", - parsedParams.data.callbackUrl.toString(), - ); + authURL.searchParams.set('callback_url', parsedParams.data.callbackUrl.toString()); - if ("codeChallengeMethod" in parsedParams.data) { - authURL.searchParams.set("code_challenge", parsedParams.data.codeChallenge); - authURL.searchParams.set( - "code_challenge_method", - parsedParams.data.codeChallengeMethod, - ); + if ('codeChallengeMethod' in parsedParams.data) { + authURL.searchParams.set('code_challenge', parsedParams.data.codeChallenge); + authURL.searchParams.set('code_challenge_method', parsedParams.data.codeChallengeMethod); } if (parsedParams.data.limit !== undefined) { - authURL.searchParams.set("limit", parsedParams.data.limit.toString()); + authURL.searchParams.set('limit', parsedParams.data.limit.toString()); } - return { ok: true, value: authURL.toString() }; + return { + ok: true, + value: authURL.toString(), + }; } diff --git a/src/funcs/oAuthCreateSHA256CodeChallenge.ts b/src/funcs/oAuthCreateSHA256CodeChallenge.ts index 95b3345a..dbb6abce 100644 --- a/src/funcs/oAuthCreateSHA256CodeChallenge.ts +++ b/src/funcs/oAuthCreateSHA256CodeChallenge.ts @@ -1,5 +1,6 @@ -import z from "zod/v3"; -import { Result } from "../types/fp.js"; +import type { Result } from '../types/fp.js'; + +import z from 'zod/v3'; const CreateSHA256CodeChallengeRequestSchema = z.object({ /** @@ -9,11 +10,11 @@ const CreateSHA256CodeChallengeRequestSchema = z.object({ */ codeVerifier: z .string() - .min(43, "Code verifier must be at least 43 characters") - .max(128, "Code verifier must be at most 128 characters") + .min(43, 'Code verifier must be at least 43 characters') + .max(128, 'Code verifier must be at most 128 characters') .regex( /^[A-Za-z0-9\-._~]+$/, - "Code verifier must only contain unreserved characters: [A-Za-z0-9-._~]", + 'Code verifier must only contain unreserved characters: [A-Za-z0-9-._~]', ) .optional(), }); @@ -31,14 +32,11 @@ export type CreateSHA256CodeChallengeResponse = { * Convert a Uint8Array to base64url encoding (RFC 4648) */ function arrayBufferToBase64Url(buffer: Uint8Array): string { - let binary = ""; + let binary = ''; for (let i = 0; i < buffer.length; i++) { binary += String.fromCharCode(buffer[i]!); } - return btoa(binary) - .replace(/\+/g, "-") - .replace(/\//g, "_") - .replace(/=+$/, ""); + return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); } /** @@ -67,14 +65,19 @@ export async function oAuthCreateSHA256CodeChallenge( params: CreateSHA256CodeChallengeRequest = {}, ): Promise> { const parsedParams = CreateSHA256CodeChallengeRequestSchema.safeParse(params); - if (!parsedParams.success) return { ok: false, error: parsedParams.error }; + if (!parsedParams.success) { + return { + ok: false, + error: parsedParams.error, + }; + } const { codeVerifier = generateCodeVerifier() } = parsedParams.data; // Generate SHA-256 hash const encoder = new TextEncoder(); const data = encoder.encode(codeVerifier); - const hash = await crypto.subtle.digest("SHA-256", data); + const hash = await crypto.subtle.digest('SHA-256', data); // Convert hash to base64url const hashArray = new Uint8Array(hash); diff --git a/src/hooks/registration.ts b/src/hooks/registration.ts index 70649734..4a017c4e 100644 --- a/src/hooks/registration.ts +++ b/src/hooks/registration.ts @@ -1,4 +1,4 @@ -import { Hooks } from "./types.js"; +import type { Hooks } from './types.js'; /* * This file is only ever generated once on the first generation and then is free to be modified. @@ -6,8 +6,7 @@ import { Hooks } from "./types.js"; * in this file or in separate files in the hooks folder. */ -// @ts-expect-error remove this line when you add your first hook and hooks is used -export function initHooks(hooks: Hooks) { +export function initHooks(_hooks: Hooks) { // Add hooks by calling hooks.register{ClientInit/BeforeCreateRequest/BeforeRequest/AfterSuccess/AfterError}Hook // with an instance of a hook that implements that specific Hook interface // Hooks are registered per SDK instance, and are valid for the lifetime of the SDK instance diff --git a/src/lib/config.ts b/src/lib/config.ts index 30bae632..9414e75a 100644 --- a/src/lib/config.ts +++ b/src/lib/config.ts @@ -69,7 +69,7 @@ export function serverURLFromOptions(options: SDKOptions): URL | null { export const SDK_METADATA = { language: "typescript", openapiDocVersion: "1.0.0", - sdkVersion: "0.1.27", - genVersion: "2.760.2", - userAgent: "speakeasy-sdk/typescript 0.1.27 2.760.2 1.0.0 @openrouter/sdk", + sdkVersion: "0.2.6", + genVersion: "2.768.0", + userAgent: "speakeasy-sdk/typescript 0.2.6 2.768.0 1.0.0 @openrouter/sdk", } as const; diff --git a/src/lib/encodings.ts b/src/lib/encodings.ts index 25c9dcba..31cd3733 100644 --- a/src/lib/encodings.ts +++ b/src/lib/encodings.ts @@ -102,8 +102,9 @@ export function encodeLabel( }); encValue = mapped?.join("").slice(1); } else { - const k = - options?.explode && isPlainObject(value) ? `${encodeString(pk)}=` : ""; + const k = options?.explode && isPlainObject(value) + ? `${encodeString(pk)}=` + : ""; encValue = `${k}${encodeValue(pv)}`; } @@ -426,6 +427,7 @@ export function queryJoin(...args: (string | undefined)[]): string { type QueryEncoderOptions = { explode?: boolean; charEncoding?: "percent" | "none"; + allowEmptyValue?: string[]; }; type QueryEncoder = ( @@ -440,7 +442,7 @@ type BulkQueryEncoder = ( ) => string; export function queryEncoder(f: QueryEncoder): BulkQueryEncoder { - const bulkEncode = function ( + const bulkEncode = function( values: Record, options?: QueryEncoderOptions, ): string { @@ -450,7 +452,19 @@ export function queryEncoder(f: QueryEncoder): BulkQueryEncoder { charEncoding: options?.charEncoding ?? "percent", }; + const allowEmptySet = new Set(options?.allowEmptyValue ?? []); + const encoded = Object.entries(values).map(([key, value]) => { + if (allowEmptySet.has(key)) { + if ( + value === undefined + || value === null + || value === "" + || (Array.isArray(value) && value.length === 0) + ) { + return `${encodeURIComponent(key)}=`; + } + } return f(key, value, opts); }); return queryJoin(...encoded); diff --git a/src/lib/response-wrapper.ts b/src/lib/response-wrapper.ts index 134a256f..fc5e1bf2 100644 --- a/src/lib/response-wrapper.ts +++ b/src/lib/response-wrapper.ts @@ -1,39 +1,38 @@ -import { OpenRouterCore } from "../core.js"; -import { EventStream } from "./event-streams.js"; -import { RequestOptions } from "./sdks.js"; -import * as models from "../models/index.js"; -import { betaResponsesSend } from "../funcs/betaResponsesSend.js"; -import { ReusableReadableStream } from "./reusable-stream.js"; +import type { OpenRouterCore } from '../core.js'; +import type * as models from '../models/index.js'; +import type { EventStream } from './event-streams.js'; +import type { RequestOptions } from './sdks.js'; +import type { + ChatStreamEvent, + EnhancedResponseStreamEvent, + Tool, + MaxToolRounds, + ParsedToolCall, + ToolStreamEvent, + TurnContext, +} from './tool-types.js'; + +import { betaResponsesSend } from '../funcs/betaResponsesSend.js'; +import { ReusableReadableStream } from './reusable-stream.js'; import { - extractTextDeltas, - extractReasoningDeltas, - extractToolDeltas, buildMessageStream, + buildToolCallStream, consumeStreamForCompletion, extractMessageFromResponse, + extractReasoningDeltas, + extractTextDeltas, extractTextFromResponse, extractToolCallsFromResponse, - buildToolCallStream, -} from "./stream-transformers.js"; -import { - EnhancedTool, - ParsedToolCall, - MaxToolRounds, - TurnContext, - hasExecuteFunction, - EnhancedResponseStreamEvent, - ToolStreamEvent, - ChatStreamEvent, -} from "./tool-types.js"; -import { - executeTool, -} from "./tool-executor.js"; + extractToolDeltas, +} from './stream-transformers.js'; +import { executeTool } from './tool-executor.js'; +import { hasExecuteFunction } from './tool-types.js'; export interface GetResponseOptions { request: models.OpenResponsesRequest; client: OpenRouterCore; options?: RequestOptions; - tools?: EnhancedTool[]; + tools?: Tool[]; maxToolRounds?: MaxToolRounds; } @@ -81,7 +80,10 @@ export class ResponseWrapper { this.initPromise = (async () => { // Force stream mode - const request = { ...this.options.request, stream: true as const }; + const request = { + ...this.options.request, + stream: true as const, + }; // Create the stream promise this.streamPromise = betaResponsesSend( @@ -116,18 +118,17 @@ export class ResponseWrapper { await this.initStream(); if (!this.reusableStream) { - throw new Error("Stream not initialized"); + throw new Error('Stream not initialized'); } // Get the initial response const initialResponse = await consumeStreamForCompletion(this.reusableStream); // Check if we have tools and if auto-execution is enabled - const shouldAutoExecute = this.options.tools && - this.options.tools.length > 0 && - initialResponse.output.some( - (item) => "type" in item && item.type === "function_call" - ); + const shouldAutoExecute = + this.options.tools && + this.options.tools.length > 0 && + initialResponse.output.some((item) => 'type' in item && item.type === 'function_call'); if (!shouldAutoExecute) { // No tools to execute, use initial response @@ -174,17 +175,21 @@ export class ResponseWrapper { } // Check if we should continue based on maxToolRounds - if (typeof maxToolRounds === "number") { + if (typeof maxToolRounds === 'number') { if (currentRound >= maxToolRounds) { break; } - } else if (typeof maxToolRounds === "function") { + } else if (typeof maxToolRounds === 'function') { // Function signature: (context: TurnContext) => boolean const turnContext: TurnContext = { numberOfTurns: currentRound + 1, messageHistory: currentInput, - ...(this.options.request.model && { model: this.options.request.model }), - ...(this.options.request.models && { models: this.options.request.models }), + ...(this.options.request.model && { + model: this.options.request.model, + }), + ...(this.options.request.models && { + models: this.options.request.models, + }), }; const shouldContinue = maxToolRounds(turnContext); if (!shouldContinue) { @@ -203,8 +208,12 @@ export class ResponseWrapper { const turnContext: TurnContext = { numberOfTurns: currentRound + 1, // 1-indexed messageHistory: currentInput, - ...(this.options.request.model && { model: this.options.request.model }), - ...(this.options.request.models && { models: this.options.request.models }), + ...(this.options.request.model && { + model: this.options.request.model, + }), + ...(this.options.request.models && { + models: this.options.request.models, + }), }; // Execute all tool calls @@ -225,11 +234,13 @@ export class ResponseWrapper { } toolResults.push({ - type: "function_call_output" as const, + type: 'function_call_output' as const, id: `output_${toolCall.id}`, callId: toolCall.id, output: result.error - ? JSON.stringify({ error: result.error.message }) + ? JSON.stringify({ + error: result.error.message, + }) : JSON.stringify(result.result), }); } @@ -237,7 +248,11 @@ export class ResponseWrapper { // Build new input with tool results // For the Responses API, we need to include the tool results in the input const newInput: models.OpenResponsesInput = [ - ...(Array.isArray(currentResponse.output) ? currentResponse.output : [currentResponse.output]), + ...(Array.isArray(currentResponse.output) + ? currentResponse.output + : [ + currentResponse.output, + ]), ...toolResults, ]; @@ -254,7 +269,7 @@ export class ResponseWrapper { const newResult = await betaResponsesSend( this.options.client, newRequest, - this.options.options + this.options.options, ); if (!newResult.ok) { @@ -263,9 +278,11 @@ export class ResponseWrapper { // Handle the result - it might be a stream or a response const value = newResult.value; - if (value && typeof value === "object" && "toReadableStream" in value) { + if (value && typeof value === 'object' && 'toReadableStream' in value) { // It's a stream, consume it - const stream = new ReusableReadableStream(value as EventStream); + const stream = new ReusableReadableStream( + value as EventStream, + ); currentResponse = await consumeStreamForCompletion(stream); } else { currentResponse = value as models.OpenResponsesNonStreamingResponse; @@ -294,7 +311,7 @@ export class ResponseWrapper { await this.executeToolsIfNeeded(); if (!this.finalResponse) { - throw new Error("Response not available"); + throw new Error('Response not available'); } return extractMessageFromResponse(this.finalResponse); @@ -316,7 +333,7 @@ export class ResponseWrapper { await this.executeToolsIfNeeded(); if (!this.finalResponse) { - throw new Error("Response not available"); + throw new Error('Response not available'); } return extractTextFromResponse(this.finalResponse); @@ -334,7 +351,7 @@ export class ResponseWrapper { await this.executeToolsIfNeeded(); if (!this.finalResponse) { - throw new Error("Response not available"); + throw new Error('Response not available'); } return this.finalResponse; @@ -346,10 +363,10 @@ export class ResponseWrapper { * Includes preliminary tool result events after tool execution. */ getFullResponsesStream(): AsyncIterableIterator { - return (async function* (this: ResponseWrapper) { + return async function* (this: ResponseWrapper) { await this.initStream(); if (!this.reusableStream) { - throw new Error("Stream not initialized"); + throw new Error('Stream not initialized'); } const consumer = this.reusableStream.createConsumer(); @@ -366,14 +383,14 @@ export class ResponseWrapper { for (const [toolCallId, results] of this.preliminaryResults) { for (const result of results) { yield { - type: "tool.preliminary_result" as const, + type: 'tool.preliminary_result' as const, toolCallId, result, timestamp: Date.now(), }; } } - }.call(this)); + }.call(this); } /** @@ -381,14 +398,14 @@ export class ResponseWrapper { * This filters the full event stream to only yield text content. */ getTextStream(): AsyncIterableIterator { - return (async function* (this: ResponseWrapper) { + return async function* (this: ResponseWrapper) { await this.initStream(); if (!this.reusableStream) { - throw new Error("Stream not initialized"); + throw new Error('Stream not initialized'); } yield* extractTextDeltas(this.reusableStream); - }.call(this)); + }.call(this); } /** @@ -397,11 +414,13 @@ export class ResponseWrapper { * Also yields ToolResponseMessages after tool execution completes. * Returns AssistantMessage or ToolResponseMessage in chat format. */ - getNewMessagesStream(): AsyncIterableIterator { - return (async function* (this: ResponseWrapper) { + getNewMessagesStream(): AsyncIterableIterator< + models.AssistantMessage | models.ToolResponseMessage + > { + return async function* (this: ResponseWrapper) { await this.initStream(); if (!this.reusableStream) { - throw new Error("Stream not initialized"); + throw new Error('Stream not initialized'); } // First yield assistant messages from the stream @@ -421,14 +440,15 @@ export class ResponseWrapper { // Get the result from preliminary results or construct from the response const prelimResults = this.preliminaryResults.get(toolCall.id); - const result = prelimResults && prelimResults.length > 0 - ? prelimResults[prelimResults.length - 1] // Last result is the final output - : undefined; + const result = + prelimResults && prelimResults.length > 0 + ? prelimResults[prelimResults.length - 1] // Last result is the final output + : undefined; // Yield tool response message yield { - role: "tool" as const, - content: result !== undefined ? JSON.stringify(result) : "", + role: 'tool' as const, + content: result !== undefined ? JSON.stringify(result) : '', toolCallId: toolCall.id, } as models.ToolResponseMessage; } @@ -438,13 +458,13 @@ export class ResponseWrapper { if (this.finalResponse && this.allToolExecutionRounds.length > 0) { // Check if the final response contains a message const hasMessage = this.finalResponse.output.some( - (item) => "type" in item && item.type === "message" + (item) => 'type' in item && item.type === 'message', ); if (hasMessage) { yield extractMessageFromResponse(this.finalResponse); } } - }.call(this)); + }.call(this); } /** @@ -452,14 +472,14 @@ export class ResponseWrapper { * This filters the full event stream to only yield reasoning content. */ getReasoningStream(): AsyncIterableIterator { - return (async function* (this: ResponseWrapper) { + return async function* (this: ResponseWrapper) { await this.initStream(); if (!this.reusableStream) { - throw new Error("Stream not initialized"); + throw new Error('Stream not initialized'); } yield* extractReasoningDeltas(this.reusableStream); - }.call(this)); + }.call(this); } /** @@ -469,15 +489,18 @@ export class ResponseWrapper { * - Preliminary results as { type: "preliminary_result", toolCallId, result } */ getToolStream(): AsyncIterableIterator { - return (async function* (this: ResponseWrapper) { + return async function* (this: ResponseWrapper) { await this.initStream(); if (!this.reusableStream) { - throw new Error("Stream not initialized"); + throw new Error('Stream not initialized'); } // Yield tool deltas as structured events for await (const delta of extractToolDeltas(this.reusableStream)) { - yield { type: "delta" as const, content: delta }; + yield { + type: 'delta' as const, + content: delta, + }; } // After stream completes, check if tools were executed and emit preliminary results @@ -487,13 +510,13 @@ export class ResponseWrapper { for (const [toolCallId, results] of this.preliminaryResults) { for (const result of results) { yield { - type: "preliminary_result" as const, + type: 'preliminary_result' as const, toolCallId, result, }; } } - }.call(this)); + }.call(this); } /** @@ -507,29 +530,31 @@ export class ResponseWrapper { * this may not be a perfect mapping. */ getFullChatStream(): AsyncIterableIterator { - return (async function* (this: ResponseWrapper) { + return async function* (this: ResponseWrapper) { await this.initStream(); if (!this.reusableStream) { - throw new Error("Stream not initialized"); + throw new Error('Stream not initialized'); } const consumer = this.reusableStream.createConsumer(); for await (const event of consumer) { - if (!("type" in event)) continue; + if (!('type' in event)) { + continue; + } // Transform responses events to chat-like format // This is a simplified transformation - you may need to adjust based on your needs - if (event.type === "response.output_text.delta") { + if (event.type === 'response.output_text.delta') { const deltaEvent = event as models.OpenResponsesStreamEventResponseOutputTextDelta; yield { - type: "content.delta" as const, + type: 'content.delta' as const, delta: deltaEvent.delta, }; - } else if (event.type === "response.completed") { + } else if (event.type === 'response.completed') { const completedEvent = event as models.OpenResponsesStreamEventResponseCompleted; yield { - type: "message.complete" as const, + type: 'message.complete' as const, response: completedEvent.response, }; } else { @@ -548,13 +573,13 @@ export class ResponseWrapper { for (const [toolCallId, results] of this.preliminaryResults) { for (const result of results) { yield { - type: "tool.preliminary_result" as const, + type: 'tool.preliminary_result' as const, toolCallId, result, }; } } - }.call(this)); + }.call(this); } /** @@ -566,7 +591,7 @@ export class ResponseWrapper { async getToolCalls(): Promise { await this.initStream(); if (!this.reusableStream) { - throw new Error("Stream not initialized"); + throw new Error('Stream not initialized'); } const completedResponse = await consumeStreamForCompletion(this.reusableStream); @@ -578,17 +603,16 @@ export class ResponseWrapper { * Each iteration yields a complete tool call with parsed arguments. */ getToolCallsStream(): AsyncIterableIterator { - return (async function* (this: ResponseWrapper) { + return async function* (this: ResponseWrapper) { await this.initStream(); if (!this.reusableStream) { - throw new Error("Stream not initialized"); + throw new Error('Stream not initialized'); } yield* buildToolCallStream(this.reusableStream); - }.call(this)); + }.call(this); } - /** * Cancel the underlying stream and all consumers */ diff --git a/src/lib/reusable-stream.ts b/src/lib/reusable-stream.ts index 89d27d95..715f5321 100644 --- a/src/lib/reusable-stream.ts +++ b/src/lib/reusable-stream.ts @@ -44,11 +44,17 @@ export class ReusableReadableStream { async next(): Promise> { const consumer = self.consumers.get(consumerId); if (!consumer) { - return { done: true, value: undefined }; + return { + done: true, + value: undefined, + }; } if (consumer.cancelled) { - return { done: true, value: undefined }; + return { + done: true, + value: undefined, + }; } // If we have buffered data at this position, return it @@ -56,13 +62,19 @@ export class ReusableReadableStream { const value = self.buffer[consumer.position]!; consumer.position++; // Note: We don't clean up buffer to allow sequential/reusable access - return { done: false, value }; + return { + done: false, + value, + }; } // If source is complete and we've read everything, we're done if (self.sourceComplete) { self.consumers.delete(consumerId); - return { done: true, value: undefined }; + return { + done: true, + value: undefined, + }; } // If source had an error, propagate it @@ -74,7 +86,10 @@ export class ReusableReadableStream { // Wait for more data - but check conditions after setting up the promise // to avoid race condition where source completes between check and wait const waitPromise = new Promise((resolve, reject) => { - consumer.waitingPromise = { resolve, reject }; + consumer.waitingPromise = { + resolve, + reject, + }; }); // Double-check conditions after setting up promise to handle race @@ -98,10 +113,13 @@ export class ReusableReadableStream { consumer.cancelled = true; self.consumers.delete(consumerId); } - return { done: true, value: undefined }; + return { + done: true, + value: undefined, + }; }, - async throw(e?: any): Promise> { + async throw(e?: unknown): Promise> { const consumer = self.consumers.get(consumerId); if (consumer) { consumer.cancelled = true; @@ -120,7 +138,9 @@ export class ReusableReadableStream { * Start pumping data from the source stream into the buffer */ private startPump(): void { - if (this.pumpStarted) return; + if (this.pumpStarted) { + return; + } this.pumpStarted = true; this.sourceReader = this.sourceStream.getReader(); @@ -168,7 +188,6 @@ export class ReusableReadableStream { } } - /** * Cancel the source stream and all consumers */ @@ -192,6 +211,9 @@ export class ReusableReadableStream { interface ConsumerState { position: number; - waitingPromise: { resolve: () => void; reject: (error: Error) => void } | null; + waitingPromise: { + resolve: () => void; + reject: (error: Error) => void; + } | null; cancelled: boolean; } diff --git a/src/lib/stream-transformers.ts b/src/lib/stream-transformers.ts index 9e7dca6f..46dbfe84 100644 --- a/src/lib/stream-transformers.ts +++ b/src/lib/stream-transformers.ts @@ -1,6 +1,6 @@ -import * as models from "../models/index.js"; -import { ReusableReadableStream } from "./reusable-stream.js"; -import { ParsedToolCall } from "./tool-types.js"; +import type * as models from '../models/index.js'; +import type { ReusableReadableStream } from './reusable-stream.js'; +import type { ParsedToolCall } from './tool-types.js'; /** * Extract text deltas from responses stream events @@ -11,7 +11,7 @@ export async function* extractTextDeltas( const consumer = stream.createConsumer(); for await (const event of consumer) { - if ("type" in event && event.type === "response.output_text.delta") { + if ('type' in event && event.type === 'response.output_text.delta') { const deltaEvent = event as models.OpenResponsesStreamEventResponseOutputTextDelta; if (deltaEvent.delta) { yield deltaEvent.delta; @@ -29,7 +29,7 @@ export async function* extractReasoningDeltas( const consumer = stream.createConsumer(); for await (const event of consumer) { - if ("type" in event && event.type === "response.reasoning_text.delta") { + if ('type' in event && event.type === 'response.reasoning_text.delta') { const deltaEvent = event as models.OpenResponsesReasoningDeltaEvent; if (deltaEvent.delta) { yield deltaEvent.delta; @@ -47,7 +47,7 @@ export async function* extractToolDeltas( const consumer = stream.createConsumer(); for await (const event of consumer) { - if ("type" in event && event.type === "response.function_call_arguments.delta") { + if ('type' in event && event.type === 'response.function_call_arguments.delta') { const deltaEvent = event as models.OpenResponsesStreamEventResponseFunctionCallArgumentsDelta; if (deltaEvent.delta) { yield deltaEvent.delta; @@ -66,39 +66,45 @@ export async function* buildMessageStream( const consumer = stream.createConsumer(); // Track the accumulated text - let currentText = ""; + let currentText = ''; let hasStarted = false; for await (const event of consumer) { - if (!("type" in event)) continue; + if (!('type' in event)) { + continue; + } switch (event.type) { - case "response.output_item.added": { + case 'response.output_item.added': { const itemEvent = event as models.OpenResponsesStreamEventResponseOutputItemAdded; - if (itemEvent.item && "type" in itemEvent.item && itemEvent.item.type === "message") { + if (itemEvent.item && 'type' in itemEvent.item && itemEvent.item.type === 'message') { hasStarted = true; - currentText = ""; + currentText = ''; } break; } - case "response.output_text.delta": { + case 'response.output_text.delta': { const deltaEvent = event as models.OpenResponsesStreamEventResponseOutputTextDelta; if (hasStarted && deltaEvent.delta) { currentText += deltaEvent.delta; // Yield updated message yield { - role: "assistant" as const, + role: 'assistant' as const, content: currentText, }; } break; } - case "response.output_item.done": { + case 'response.output_item.done': { const itemDoneEvent = event as models.OpenResponsesStreamEventResponseOutputItemDone; - if (itemDoneEvent.item && "type" in itemDoneEvent.item && itemDoneEvent.item.type === "message") { + if ( + itemDoneEvent.item && + 'type' in itemDoneEvent.item && + itemDoneEvent.item.type === 'message' + ) { // Yield final complete message const outputMessage = itemDoneEvent.item as models.ResponsesOutputMessage; yield convertToAssistantMessage(outputMessage); @@ -118,27 +124,29 @@ export async function consumeStreamForCompletion( const consumer = stream.createConsumer(); for await (const event of consumer) { - if (!("type" in event)) continue; + if (!('type' in event)) { + continue; + } - if (event.type === "response.completed") { + if (event.type === 'response.completed') { const completedEvent = event as models.OpenResponsesStreamEventResponseCompleted; return completedEvent.response; } - if (event.type === "response.failed") { + if (event.type === 'response.failed') { const failedEvent = event as models.OpenResponsesStreamEventResponseFailed; // The failed event contains the full response with error information throw new Error(`Response failed: ${JSON.stringify(failedEvent.response.error)}`); } - if (event.type === "response.incomplete") { + if (event.type === 'response.incomplete') { const incompleteEvent = event as models.OpenResponsesStreamEventResponseIncomplete; // Return the incomplete response return incompleteEvent.response; } } - throw new Error("Stream ended without completion event"); + throw new Error('Stream ended without completion event'); } /** @@ -149,14 +157,14 @@ function convertToAssistantMessage( ): models.AssistantMessage { // Extract text content const textContent = outputMessage.content - .filter((part): part is models.ResponseOutputText => - "type" in part && part.type === "output_text" + .filter( + (part): part is models.ResponseOutputText => 'type' in part && part.type === 'output_text', ) .map((part) => part.text) - .join(""); + .join(''); return { - role: "assistant" as const, + role: 'assistant' as const, content: textContent || null, }; } @@ -168,12 +176,11 @@ export function extractMessageFromResponse( response: models.OpenResponsesNonStreamingResponse, ): models.AssistantMessage { const messageItem = response.output.find( - (item): item is models.ResponsesOutputMessage => - "type" in item && item.type === "message" + (item): item is models.ResponsesOutputMessage => 'type' in item && item.type === 'message', ); if (!messageItem) { - throw new Error("No message found in response output"); + throw new Error('No message found in response output'); } return convertToAssistantMessage(messageItem); @@ -194,11 +201,11 @@ export function extractTextFromResponse( const message = extractMessageFromResponse(response); // AssistantMessage.content is string | Array | null | undefined - if (typeof message.content === "string") { + if (typeof message.content === 'string') { return message.content; } - return ""; + return ''; } /** @@ -211,7 +218,7 @@ export function extractToolCallsFromResponse( const toolCalls: ParsedToolCall[] = []; for (const item of response.output) { - if ("type" in item && item.type === "function_call") { + if ('type' in item && item.type === 'function_call') { const functionCallItem = item as models.ResponsesOutputItemFunctionCall; try { @@ -222,11 +229,7 @@ export function extractToolCallsFromResponse( name: functionCallItem.name, arguments: parsedArguments, }); - } catch (error) { - console.error( - `Failed to parse tool call arguments for ${functionCallItem.name}:`, - error - ); + } catch (_error) { // Include the tool call with unparsed arguments toolCalls.push({ id: functionCallItem.callId, @@ -260,27 +263,25 @@ export async function* buildToolCallStream( >(); for await (const event of consumer) { - if (!("type" in event)) continue; + if (!('type' in event)) { + continue; + } switch (event.type) { - case "response.output_item.added": { + case 'response.output_item.added': { const itemEvent = event as models.OpenResponsesStreamEventResponseOutputItemAdded; - if ( - itemEvent.item && - "type" in itemEvent.item && - itemEvent.item.type === "function_call" - ) { + if (itemEvent.item && 'type' in itemEvent.item && itemEvent.item.type === 'function_call') { const functionCallItem = itemEvent.item as models.ResponsesOutputItemFunctionCall; toolCallsInProgress.set(functionCallItem.callId, { id: functionCallItem.callId, name: functionCallItem.name, - argumentsAccumulated: "", + argumentsAccumulated: '', }); } break; } - case "response.function_call_arguments.delta": { + case 'response.function_call_arguments.delta': { const deltaEvent = event as models.OpenResponsesStreamEventResponseFunctionCallArgumentsDelta; const toolCall = toolCallsInProgress.get(deltaEvent.itemId); @@ -290,9 +291,8 @@ export async function* buildToolCallStream( break; } - case "response.function_call_arguments.done": { - const doneEvent = - event as models.OpenResponsesStreamEventResponseFunctionCallArgumentsDone; + case 'response.function_call_arguments.done': { + const doneEvent = event as models.OpenResponsesStreamEventResponseFunctionCallArgumentsDone; const toolCall = toolCallsInProgress.get(doneEvent.itemId); if (toolCall) { @@ -304,7 +304,7 @@ export async function* buildToolCallStream( name: doneEvent.name, arguments: parsedArguments, }; - } catch (error) { + } catch (_error) { // Yield with unparsed arguments if parsing fails yield { id: toolCall.id, @@ -319,12 +319,12 @@ export async function* buildToolCallStream( break; } - case "response.output_item.done": { + case 'response.output_item.done': { const itemDoneEvent = event as models.OpenResponsesStreamEventResponseOutputItemDone; if ( itemDoneEvent.item && - "type" in itemDoneEvent.item && - itemDoneEvent.item.type === "function_call" + 'type' in itemDoneEvent.item && + itemDoneEvent.item.type === 'function_call' ) { const functionCallItem = itemDoneEvent.item as models.ResponsesOutputItemFunctionCall; @@ -337,7 +337,7 @@ export async function* buildToolCallStream( name: functionCallItem.name, arguments: parsedArguments, }; - } catch (error) { + } catch (_error) { yield { id: functionCallItem.callId, name: functionCallItem.name, @@ -357,10 +357,6 @@ export async function* buildToolCallStream( /** * Check if a response contains any tool calls */ -export function responseHasToolCalls( - response: models.OpenResponsesNonStreamingResponse, -): boolean { - return response.output.some( - (item) => "type" in item && item.type === "function_call" - ); +export function responseHasToolCalls(response: models.OpenResponsesNonStreamingResponse): boolean { + return response.output.some((item) => 'type' in item && item.type === 'function_call'); } diff --git a/src/lib/tool-executor.ts b/src/lib/tool-executor.ts index 557ff7c1..c9f149f0 100644 --- a/src/lib/tool-executor.ts +++ b/src/lib/tool-executor.ts @@ -1,37 +1,35 @@ -import { ZodError, toJSONSchema, type ZodType } from "zod/v4"; -import { - EnhancedTool, - ToolExecutionResult, - ParsedToolCall, +import type { ZodType } from 'zod/v4'; +import type { APITool, + Tool, + ParsedToolCall, + ToolExecutionResult, TurnContext, - hasExecuteFunction, - isGeneratorTool, - isRegularExecuteTool, -} from "./tool-types.js"; +} from './tool-types.js'; + +import { toJSONSchema, ZodError } from 'zod/v4'; +import { hasExecuteFunction, isGeneratorTool, isRegularExecuteTool } from './tool-types.js'; /** * Convert a Zod schema to JSON Schema using Zod v4's toJSONSchema function */ -export function convertZodToJsonSchema(zodSchema: ZodType): Record { - const jsonSchema = toJSONSchema(zodSchema as any, { - target: "openapi-3.0", - } as any); - return jsonSchema as Record; +export function convertZodToJsonSchema(zodSchema: ZodType): Record { + const jsonSchema = toJSONSchema(zodSchema, { + target: 'openapi-3.0', + }); + return jsonSchema as Record; } /** - * Convert enhanced tools to OpenRouter API format + * Convert tools to OpenRouter API format */ -export function convertEnhancedToolsToAPIFormat( - tools: EnhancedTool[] -): APITool[] { +export function convertToolsToAPIFormat(tools: Tool[]): APITool[] { return tools.map((tool) => ({ - type: "function" as const, + type: 'function' as const, name: tool.function.name, description: tool.function.description || null, strict: null, - parameters: convertZodToJsonSchema(tool.function.inputSchema as any), + parameters: convertZodToJsonSchema(tool.function.inputSchema), })); } @@ -61,7 +59,7 @@ export function parseToolCallArguments(argumentsString: string): unknown { throw new Error( `Failed to parse tool call arguments: ${ error instanceof Error ? error.message : String(error) - }` + }`, ); } } @@ -70,34 +68,29 @@ export function parseToolCallArguments(argumentsString: string): unknown { * Execute a regular (non-generator) tool */ export async function executeRegularTool( - tool: EnhancedTool, + tool: Tool, toolCall: ParsedToolCall, - context: TurnContext + context: TurnContext, ): Promise { if (!isRegularExecuteTool(tool)) { throw new Error( - `Tool "${toolCall.name}" is not a regular execute tool or has no execute function` + `Tool "${toolCall.name}" is not a regular execute tool or has no execute function`, ); } try { - // Validate input + // Validate input - the schema validation ensures type safety at runtime const validatedInput = validateToolInput( tool.function.inputSchema, - toolCall.arguments - ); + toolCall.arguments, + ) as Parameters[0]; // Execute tool with context - const result = await Promise.resolve( - tool.function.execute(validatedInput as any, context) - ); + const result = await Promise.resolve(tool.function.execute(validatedInput, context)); // Validate output if schema is provided if (tool.function.outputSchema) { - const validatedOutput = validateToolOutput( - tool.function.outputSchema, - result - ); + const validatedOutput = validateToolOutput(tool.function.outputSchema, result); return { toolCallId: toolCall.id, @@ -128,28 +121,28 @@ export async function executeRegularTool( * - Generator must emit at least one value */ export async function executeGeneratorTool( - tool: EnhancedTool, + tool: Tool, toolCall: ParsedToolCall, context: TurnContext, - onPreliminaryResult?: (toolCallId: string, result: unknown) => void + onPreliminaryResult?: (toolCallId: string, result: unknown) => void, ): Promise { if (!isGeneratorTool(tool)) { throw new Error(`Tool "${toolCall.name}" is not a generator tool`); } try { - // Validate input + // Validate input - the schema validation ensures type safety at runtime const validatedInput = validateToolInput( tool.function.inputSchema, - toolCall.arguments - ); + toolCall.arguments, + ) as Parameters[0]; // Execute generator and collect all results const preliminaryResults: unknown[] = []; let lastEmittedValue: unknown = null; let hasEmittedValue = false; - for await (const event of tool.function.execute(validatedInput as any, context)) { + for await (const event of tool.function.execute(validatedInput, context)) { hasEmittedValue = true; // Validate event against eventSchema @@ -166,16 +159,11 @@ export async function executeGeneratorTool( // Generator must emit at least one value if (!hasEmittedValue) { - throw new Error( - `Generator tool "${toolCall.name}" completed without emitting any values` - ); + throw new Error(`Generator tool "${toolCall.name}" completed without emitting any values`); } // Validate the last emitted value against outputSchema (this is the final result) - const finalResult = validateToolOutput( - tool.function.outputSchema, - lastEmittedValue - ); + const finalResult = validateToolOutput(tool.function.outputSchema, lastEmittedValue); // Remove last item from preliminaryResults since it's the final output preliminaryResults.pop(); @@ -201,15 +189,13 @@ export async function executeGeneratorTool( * Automatically detects if it's a regular or generator tool */ export async function executeTool( - tool: EnhancedTool, + tool: Tool, toolCall: ParsedToolCall, context: TurnContext, - onPreliminaryResult?: (toolCallId: string, result: unknown) => void + onPreliminaryResult?: (toolCallId: string, result: unknown) => void, ): Promise { if (!hasExecuteFunction(tool)) { - throw new Error( - `Tool "${toolCall.name}" has no execute function. Use manual tool execution.` - ); + throw new Error(`Tool "${toolCall.name}" has no execute function. Use manual tool execution.`); } if (isGeneratorTool(tool)) { @@ -222,10 +208,7 @@ export async function executeTool( /** * Find a tool by name in the tools array */ -export function findToolByName( - tools: EnhancedTool[], - name: string -): EnhancedTool | undefined { +export function findToolByName(tools: Tool[], name: string): Tool | undefined { return tools.find((tool) => tool.function.name === name); } @@ -246,21 +229,14 @@ export function formatToolResultForModel(result: ToolExecutionResult): string { /** * Create a user-friendly error message for tool execution errors */ -export function formatToolExecutionError( - error: Error, - toolCall: ParsedToolCall -): string { +export function formatToolExecutionError(error: Error, toolCall: ParsedToolCall): string { if (error instanceof ZodError) { const issues = error.issues.map((issue) => ({ - path: issue.path.join("."), + path: issue.path.join('.'), message: issue.message, })); - return `Tool "${toolCall.name}" validation error:\n${JSON.stringify( - issues, - null, - 2 - )}`; + return `Tool "${toolCall.name}" validation error:\n${JSON.stringify(issues, null, 2)}`; } return `Tool "${toolCall.name}" execution error: ${error.message}`; diff --git a/src/lib/tool-orchestrator.ts b/src/lib/tool-orchestrator.ts index d5524bd7..7373e586 100644 --- a/src/lib/tool-orchestrator.ts +++ b/src/lib/tool-orchestrator.ts @@ -1,17 +1,9 @@ -import * as models from "../models/index.js"; -import { - EnhancedTool, - ToolExecutionResult, - hasExecuteFunction, -} from "./tool-types.js"; -import { - executeTool, - findToolByName, -} from "./tool-executor.js"; -import { - extractToolCallsFromResponse, - responseHasToolCalls, -} from "./stream-transformers.js"; +import type * as models from '../models/index.js'; +import type { APITool, Tool, ToolExecutionResult } from './tool-types.js'; + +import { extractToolCallsFromResponse, responseHasToolCalls } from './stream-transformers.js'; +import { executeTool, findToolByName } from './tool-executor.js'; +import { hasExecuteFunction } from './tool-types.js'; /** * Options for tool execution @@ -45,12 +37,12 @@ export interface ToolOrchestrationResult { export async function executeToolLoop( sendRequest: ( input: models.OpenResponsesInput, - tools: any[] + tools: APITool[], ) => Promise, initialInput: models.OpenResponsesInput, - tools: EnhancedTool[], - apiTools: any[], - options: ToolExecutionOptions = {} + tools: Tool[], + apiTools: APITool[], + options: ToolExecutionOptions = {}, ): Promise { const maxRounds = options.maxRounds ?? 5; const onPreliminaryResult = options.onPreliminaryResult; @@ -111,7 +103,7 @@ export async function executeToolLoop( } // Build turn context - const turnContext: import("./tool-types.js").TurnContext = { + const turnContext: import('./tool-types.js').TurnContext = { numberOfTurns: currentRound, messageHistory: conversationInput, }; @@ -147,9 +139,7 @@ export async function executeToolLoop( /** * Convert tool execution results to a map for easy lookup */ -export function toolResultsToMap( - results: ToolExecutionResult[] -): Map< +export function toolResultsToMap(results: ToolExecutionResult[]): Map< string, { result: unknown; @@ -171,9 +161,7 @@ export function toolResultsToMap( /** * Build a summary of tool executions for debugging/logging */ -export function summarizeToolExecutions( - results: ToolExecutionResult[] -): string { +export function summarizeToolExecutions(results: ToolExecutionResult[]): string { const lines: string[] = []; for (const result of results) { @@ -181,12 +169,12 @@ export function summarizeToolExecutions( lines.push(`❌ ${result.toolName} (${result.toolCallId}): ERROR - ${result.error.message}`); } else { const prelimCount = result.preliminaryResults?.length ?? 0; - const prelimInfo = prelimCount > 0 ? ` (${prelimCount} preliminary results)` : ""; + const prelimInfo = prelimCount > 0 ? ` (${prelimCount} preliminary results)` : ''; lines.push(`✅ ${result.toolName} (${result.toolCallId}): SUCCESS${prelimInfo}`); } } - return lines.join("\n"); + return lines.join('\n'); } /** @@ -200,7 +188,5 @@ export function hasToolExecutionErrors(results: ToolExecutionResult[]): boolean * Get all tool execution errors */ export function getToolExecutionErrors(results: ToolExecutionResult[]): Error[] { - return results - .filter((result) => result.error !== undefined) - .map((result) => result.error!); + return results.filter((result) => result.error !== undefined).map((result) => result.error!); } diff --git a/src/lib/tool-types.ts b/src/lib/tool-types.ts index ef6bb089..5797c7a1 100644 --- a/src/lib/tool-types.ts +++ b/src/lib/tool-types.ts @@ -1,12 +1,13 @@ -import { z, type ZodType, type ZodObject, type ZodRawShape } from "zod/v4"; -import * as models from "../models/index.js"; -import type { OpenResponsesStreamEvent } from "../models/index.js"; +import type { ZodObject, ZodRawShape, ZodType, z } from 'zod/v4'; +import type * as models from '../models/index.js'; +import type { OpenResponsesStreamEvent } from '../models/index.js'; +import type { ResponseWrapper } from './response-wrapper.js'; /** * Tool type enum for enhanced tools */ export enum ToolType { - Function = "function", + Function = 'function', } /** @@ -38,12 +39,12 @@ export interface BaseToolFunction> { */ export interface ToolFunctionWithExecute< TInput extends ZodObject, - TOutput extends ZodType = ZodType + TOutput extends ZodType = ZodType, > extends BaseToolFunction { outputSchema?: TOutput; execute: ( params: z.infer, - context?: TurnContext + context?: TurnContext, ) => Promise> | z.infer; } @@ -67,15 +68,12 @@ export interface ToolFunctionWithExecute< */ export interface ToolFunctionWithGenerator< TInput extends ZodObject, - TEvent extends ZodType = ZodType, - TOutput extends ZodType = ZodType + TEvent extends ZodType = ZodType, + TOutput extends ZodType = ZodType, > extends BaseToolFunction { eventSchema: TEvent; outputSchema: TOutput; - execute: ( - params: z.infer, - context?: TurnContext - ) => AsyncGenerator>; + execute: (params: z.infer, context?: TurnContext) => AsyncGenerator>; } /** @@ -83,7 +81,7 @@ export interface ToolFunctionWithGenerator< */ export interface ManualToolFunction< TInput extends ZodObject, - TOutput extends ZodType = ZodType + TOutput extends ZodType = ZodType, > extends BaseToolFunction { outputSchema?: TOutput; } @@ -93,7 +91,7 @@ export interface ManualToolFunction< */ export type ToolWithExecute< TInput extends ZodObject = ZodObject, - TOutput extends ZodType = ZodType + TOutput extends ZodType = ZodType, > = { type: ToolType.Function; function: ToolFunctionWithExecute; @@ -104,8 +102,8 @@ export type ToolWithExecute< */ export type ToolWithGenerator< TInput extends ZodObject = ZodObject, - TEvent extends ZodType = ZodType, - TOutput extends ZodType = ZodType + TEvent extends ZodType = ZodType, + TOutput extends ZodType = ZodType, > = { type: ToolType.Function; function: ToolFunctionWithGenerator; @@ -116,7 +114,7 @@ export type ToolWithGenerator< */ export type ManualTool< TInput extends ZodObject = ZodObject, - TOutput extends ZodType = ZodType + TOutput extends ZodType = ZodType, > = { type: ToolType.Function; function: ManualToolFunction; @@ -125,35 +123,31 @@ export type ManualTool< /** * Union type of all enhanced tool types */ -export type EnhancedTool = - | ToolWithExecute - | ToolWithGenerator - | ManualTool; +export type Tool = + | ToolWithExecute, ZodType> + | ToolWithGenerator, ZodType, ZodType> + | ManualTool, ZodType>; /** * Type guard to check if a tool has an execute function */ export function hasExecuteFunction( - tool: EnhancedTool + tool: Tool, ): tool is ToolWithExecute | ToolWithGenerator { - return "execute" in tool.function && typeof tool.function.execute === "function"; + return 'execute' in tool.function && typeof tool.function.execute === 'function'; } /** * Type guard to check if a tool uses a generator (has eventSchema) */ -export function isGeneratorTool( - tool: EnhancedTool -): tool is ToolWithGenerator { - return "eventSchema" in tool.function; +export function isGeneratorTool(tool: Tool): tool is ToolWithGenerator { + return 'eventSchema' in tool.function; } /** * Type guard to check if a tool is a regular execution tool (not generator) */ -export function isRegularExecuteTool( - tool: EnhancedTool -): tool is ToolWithExecute { +export function isRegularExecuteTool(tool: Tool): tool is ToolWithExecute { return hasExecuteFunction(tool) && !isGeneratorTool(tool); } @@ -180,16 +174,14 @@ export interface ToolExecutionResult { /** * Type for maxToolRounds - can be a number or a function that determines if execution should continue */ -export type MaxToolRounds = - | number - | ((context: TurnContext) => boolean); // Return true to allow another turn, false to stop +export type MaxToolRounds = number | ((context: TurnContext) => boolean); // Return true to allow another turn, false to stop /** * Result of executeTools operation */ export interface ExecuteToolsResult { - finalResponse: any; // ResponseWrapper (avoiding circular dependency) - allResponses: any[]; // All ResponseWrappers from each round + finalResponse: ResponseWrapper; + allResponses: ResponseWrapper[]; toolResults: Map< string, { @@ -204,18 +196,20 @@ export interface ExecuteToolsResult { * Matches OpenResponsesRequestToolFunction structure */ export interface APITool { - type: "function"; + type: 'function'; name: string; description?: string | null; strict?: boolean | null; - parameters: { [k: string]: any | null } | null; + parameters: { + [k: string]: unknown; + } | null; } /** * Tool preliminary result event emitted during generator tool execution */ export type ToolPreliminaryResultEvent = { - type: "tool.preliminary_result"; + type: 'tool.preliminary_result'; toolCallId: string; result: unknown; timestamp: number; @@ -225,17 +219,15 @@ export type ToolPreliminaryResultEvent = { * Enhanced stream event types for getFullResponsesStream * Extends OpenResponsesStreamEvent with tool preliminary results */ -export type EnhancedResponseStreamEvent = - | OpenResponsesStreamEvent - | ToolPreliminaryResultEvent; +export type EnhancedResponseStreamEvent = OpenResponsesStreamEvent | ToolPreliminaryResultEvent; /** * Type guard to check if an event is a tool preliminary result event */ export function isToolPreliminaryResultEvent( - event: EnhancedResponseStreamEvent + event: EnhancedResponseStreamEvent, ): event is ToolPreliminaryResultEvent { - return event.type === "tool.preliminary_result"; + return event.type === 'tool.preliminary_result'; } /** @@ -243,9 +235,12 @@ export function isToolPreliminaryResultEvent( * Includes both argument deltas and preliminary results */ export type ToolStreamEvent = - | { type: "delta"; content: string } | { - type: "preliminary_result"; + type: 'delta'; + content: string; + } + | { + type: 'preliminary_result'; toolCallId: string; result: unknown; }; @@ -255,11 +250,20 @@ export type ToolStreamEvent = * Includes content deltas, completion events, and tool preliminary results */ export type ChatStreamEvent = - | { type: "content.delta"; delta: string } - | { type: "message.complete"; response: any } | { - type: "tool.preliminary_result"; + type: 'content.delta'; + delta: string; + } + | { + type: 'message.complete'; + response: models.OpenResponsesNonStreamingResponse; + } + | { + type: 'tool.preliminary_result'; toolCallId: string; result: unknown; } - | { type: string; event: any }; // Pass-through for other events + | { + type: string; + event: OpenResponsesStreamEvent; + }; // Pass-through for other events diff --git a/src/models/chatcompletionfinishreason.ts b/src/models/chatcompletionfinishreason.ts new file mode 100644 index 00000000..57f8af17 --- /dev/null +++ b/src/models/chatcompletionfinishreason.ts @@ -0,0 +1,24 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import * as openEnums from "../types/enums.js"; +import { OpenEnum } from "../types/enums.js"; + +export const ChatCompletionFinishReason = { + ToolCalls: "tool_calls", + Stop: "stop", + Length: "length", + ContentFilter: "content_filter", + Error: "error", +} as const; +export type ChatCompletionFinishReason = OpenEnum< + typeof ChatCompletionFinishReason +>; + +/** @internal */ +export const ChatCompletionFinishReason$inboundSchema: z.ZodType< + ChatCompletionFinishReason, + unknown +> = openEnums.inboundSchema(ChatCompletionFinishReason); diff --git a/src/models/chatgenerationparams.ts b/src/models/chatgenerationparams.ts index b50b2dac..c861290f 100644 --- a/src/models/chatgenerationparams.ts +++ b/src/models/chatgenerationparams.ts @@ -63,10 +63,10 @@ export type ChatGenerationParamsResponseFormatText = { }; export type ChatGenerationParamsResponseFormatUnion = - | ResponseFormatJSONSchema - | ResponseFormatTextGrammar | ChatGenerationParamsResponseFormatText | ChatGenerationParamsResponseFormatJSONObject + | ResponseFormatJSONSchema + | ResponseFormatTextGrammar | ChatGenerationParamsResponseFormatPython; export type ChatGenerationParamsStop = string | Array; @@ -85,10 +85,10 @@ export type ChatGenerationParams = { presencePenalty?: number | null | undefined; reasoning?: Reasoning | undefined; responseFormat?: - | ResponseFormatJSONSchema - | ResponseFormatTextGrammar | ChatGenerationParamsResponseFormatText | ChatGenerationParamsResponseFormatJSONObject + | ResponseFormatJSONSchema + | ResponseFormatTextGrammar | ChatGenerationParamsResponseFormatPython | undefined; seed?: number | null | undefined; @@ -200,10 +200,10 @@ export function chatGenerationParamsResponseFormatTextToJSON( /** @internal */ export type ChatGenerationParamsResponseFormatUnion$Outbound = - | ResponseFormatJSONSchema$Outbound - | ResponseFormatTextGrammar$Outbound | ChatGenerationParamsResponseFormatText$Outbound | ChatGenerationParamsResponseFormatJSONObject$Outbound + | ResponseFormatJSONSchema$Outbound + | ResponseFormatTextGrammar$Outbound | ChatGenerationParamsResponseFormatPython$Outbound; /** @internal */ @@ -211,10 +211,10 @@ export const ChatGenerationParamsResponseFormatUnion$outboundSchema: z.ZodType< ChatGenerationParamsResponseFormatUnion$Outbound, ChatGenerationParamsResponseFormatUnion > = z.union([ - ResponseFormatJSONSchema$outboundSchema, - ResponseFormatTextGrammar$outboundSchema, z.lazy(() => ChatGenerationParamsResponseFormatText$outboundSchema), z.lazy(() => ChatGenerationParamsResponseFormatJSONObject$outboundSchema), + ResponseFormatJSONSchema$outboundSchema, + ResponseFormatTextGrammar$outboundSchema, z.lazy(() => ChatGenerationParamsResponseFormatPython$outboundSchema), ]); @@ -261,10 +261,10 @@ export type ChatGenerationParams$Outbound = { presence_penalty?: number | null | undefined; reasoning?: Reasoning$Outbound | undefined; response_format?: - | ResponseFormatJSONSchema$Outbound - | ResponseFormatTextGrammar$Outbound | ChatGenerationParamsResponseFormatText$Outbound | ChatGenerationParamsResponseFormatJSONObject$Outbound + | ResponseFormatJSONSchema$Outbound + | ResponseFormatTextGrammar$Outbound | ChatGenerationParamsResponseFormatPython$Outbound | undefined; seed?: number | null | undefined; @@ -296,10 +296,10 @@ export const ChatGenerationParams$outboundSchema: z.ZodType< presencePenalty: z.nullable(z.number()).optional(), reasoning: z.lazy(() => Reasoning$outboundSchema).optional(), responseFormat: z.union([ - ResponseFormatJSONSchema$outboundSchema, - ResponseFormatTextGrammar$outboundSchema, z.lazy(() => ChatGenerationParamsResponseFormatText$outboundSchema), z.lazy(() => ChatGenerationParamsResponseFormatJSONObject$outboundSchema), + ResponseFormatJSONSchema$outboundSchema, + ResponseFormatTextGrammar$outboundSchema, z.lazy(() => ChatGenerationParamsResponseFormatPython$outboundSchema), ]).optional(), seed: z.nullable(z.int()).optional(), diff --git a/src/models/chatmessagecontentitem.ts b/src/models/chatmessagecontentitem.ts index 5cb3bbc8..6a361798 100644 --- a/src/models/chatmessagecontentitem.ts +++ b/src/models/chatmessagecontentitem.ts @@ -11,12 +11,6 @@ import { ChatMessageContentItemAudio$Outbound, ChatMessageContentItemAudio$outboundSchema, } from "./chatmessagecontentitemaudio.js"; -import { - ChatMessageContentItemFile, - ChatMessageContentItemFile$inboundSchema, - ChatMessageContentItemFile$Outbound, - ChatMessageContentItemFile$outboundSchema, -} from "./chatmessagecontentitemfile.js"; import { ChatMessageContentItemImage, ChatMessageContentItemImage$inboundSchema, @@ -38,10 +32,9 @@ import { import { SDKValidationError } from "./errors/sdkvalidationerror.js"; export type ChatMessageContentItem = - | (ChatMessageContentItemText & { type: "text" }) - | (ChatMessageContentItemImage & { type: "image_url" }) - | (ChatMessageContentItemAudio & { type: "input_audio" }) - | (ChatMessageContentItemFile & { type: "file" }) + | ChatMessageContentItemText + | ChatMessageContentItemImage + | ChatMessageContentItemAudio | (ChatMessageContentItemVideo & { type: "input_video" }) | (ChatMessageContentItemVideo & { type: "video_url" }); @@ -50,18 +43,9 @@ export const ChatMessageContentItem$inboundSchema: z.ZodType< ChatMessageContentItem, unknown > = z.union([ - ChatMessageContentItemText$inboundSchema.and( - z.object({ type: z.literal("text") }), - ), - ChatMessageContentItemImage$inboundSchema.and( - z.object({ type: z.literal("image_url") }), - ), - ChatMessageContentItemAudio$inboundSchema.and( - z.object({ type: z.literal("input_audio") }), - ), - ChatMessageContentItemFile$inboundSchema.and( - z.object({ type: z.literal("file") }), - ), + ChatMessageContentItemText$inboundSchema, + ChatMessageContentItemImage$inboundSchema, + ChatMessageContentItemAudio$inboundSchema, ChatMessageContentItemVideo$inboundSchema.and( z.object({ type: z.literal("input_video") }), ), @@ -71,10 +55,9 @@ export const ChatMessageContentItem$inboundSchema: z.ZodType< ]); /** @internal */ export type ChatMessageContentItem$Outbound = - | (ChatMessageContentItemText$Outbound & { type: "text" }) - | (ChatMessageContentItemImage$Outbound & { type: "image_url" }) - | (ChatMessageContentItemAudio$Outbound & { type: "input_audio" }) - | (ChatMessageContentItemFile$Outbound & { type: "file" }) + | ChatMessageContentItemText$Outbound + | ChatMessageContentItemImage$Outbound + | ChatMessageContentItemAudio$Outbound | (ChatMessageContentItemVideo$Outbound & { type: "input_video" }) | (ChatMessageContentItemVideo$Outbound & { type: "video_url" }); @@ -83,18 +66,9 @@ export const ChatMessageContentItem$outboundSchema: z.ZodType< ChatMessageContentItem$Outbound, ChatMessageContentItem > = z.union([ - ChatMessageContentItemText$outboundSchema.and( - z.object({ type: z.literal("text") }), - ), - ChatMessageContentItemImage$outboundSchema.and( - z.object({ type: z.literal("image_url") }), - ), - ChatMessageContentItemAudio$outboundSchema.and( - z.object({ type: z.literal("input_audio") }), - ), - ChatMessageContentItemFile$outboundSchema.and( - z.object({ type: z.literal("file") }), - ), + ChatMessageContentItemText$outboundSchema, + ChatMessageContentItemImage$outboundSchema, + ChatMessageContentItemAudio$outboundSchema, ChatMessageContentItemVideo$outboundSchema.and( z.object({ type: z.literal("input_video") }), ), diff --git a/src/models/chatmessagecontentitemcachecontrol.ts b/src/models/chatmessagecontentitemcachecontrol.ts new file mode 100644 index 00000000..17e69859 --- /dev/null +++ b/src/models/chatmessagecontentitemcachecontrol.ts @@ -0,0 +1,71 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { safeParse } from "../lib/schemas.js"; +import * as openEnums from "../types/enums.js"; +import { OpenEnum } from "../types/enums.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export const Ttl = { + Fivem: "5m", + Oneh: "1h", +} as const; +export type Ttl = OpenEnum; + +export type ChatMessageContentItemCacheControl = { + type: "ephemeral"; + ttl?: Ttl | undefined; +}; + +/** @internal */ +export const Ttl$inboundSchema: z.ZodType = openEnums + .inboundSchema(Ttl); +/** @internal */ +export const Ttl$outboundSchema: z.ZodType = openEnums + .outboundSchema(Ttl); + +/** @internal */ +export const ChatMessageContentItemCacheControl$inboundSchema: z.ZodType< + ChatMessageContentItemCacheControl, + unknown +> = z.object({ + type: z.literal("ephemeral"), + ttl: Ttl$inboundSchema.optional(), +}); +/** @internal */ +export type ChatMessageContentItemCacheControl$Outbound = { + type: "ephemeral"; + ttl?: string | undefined; +}; + +/** @internal */ +export const ChatMessageContentItemCacheControl$outboundSchema: z.ZodType< + ChatMessageContentItemCacheControl$Outbound, + ChatMessageContentItemCacheControl +> = z.object({ + type: z.literal("ephemeral"), + ttl: Ttl$outboundSchema.optional(), +}); + +export function chatMessageContentItemCacheControlToJSON( + chatMessageContentItemCacheControl: ChatMessageContentItemCacheControl, +): string { + return JSON.stringify( + ChatMessageContentItemCacheControl$outboundSchema.parse( + chatMessageContentItemCacheControl, + ), + ); +} +export function chatMessageContentItemCacheControlFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => + ChatMessageContentItemCacheControl$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'ChatMessageContentItemCacheControl' from JSON`, + ); +} diff --git a/src/models/chatmessagecontentitemfile.ts b/src/models/chatmessagecontentitemfile.ts deleted file mode 100644 index 3cf1d81e..00000000 --- a/src/models/chatmessagecontentitemfile.ts +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. - */ - -import * as z from "zod/v4"; -import { remap as remap$ } from "../lib/primitives.js"; -import { safeParse } from "../lib/schemas.js"; -import { Result as SafeParseResult } from "../types/fp.js"; -import { SDKValidationError } from "./errors/sdkvalidationerror.js"; - -export type FileT = { - fileData: string; - fileId?: string | undefined; - filename?: string | undefined; -}; - -export type ChatMessageContentItemFile = { - type: "file"; - file: FileT; -}; - -/** @internal */ -export const FileT$inboundSchema: z.ZodType = z.object({ - file_data: z.string(), - file_id: z.string().optional(), - filename: z.string().optional(), -}).transform((v) => { - return remap$(v, { - "file_data": "fileData", - "file_id": "fileId", - }); -}); -/** @internal */ -export type FileT$Outbound = { - file_data: string; - file_id?: string | undefined; - filename?: string | undefined; -}; - -/** @internal */ -export const FileT$outboundSchema: z.ZodType = z.object({ - fileData: z.string(), - fileId: z.string().optional(), - filename: z.string().optional(), -}).transform((v) => { - return remap$(v, { - fileData: "file_data", - fileId: "file_id", - }); -}); - -export function fileToJSON(fileT: FileT): string { - return JSON.stringify(FileT$outboundSchema.parse(fileT)); -} -export function fileFromJSON( - jsonString: string, -): SafeParseResult { - return safeParse( - jsonString, - (x) => FileT$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'FileT' from JSON`, - ); -} - -/** @internal */ -export const ChatMessageContentItemFile$inboundSchema: z.ZodType< - ChatMessageContentItemFile, - unknown -> = z.object({ - type: z.literal("file"), - file: z.lazy(() => FileT$inboundSchema), -}); -/** @internal */ -export type ChatMessageContentItemFile$Outbound = { - type: "file"; - file: FileT$Outbound; -}; - -/** @internal */ -export const ChatMessageContentItemFile$outboundSchema: z.ZodType< - ChatMessageContentItemFile$Outbound, - ChatMessageContentItemFile -> = z.object({ - type: z.literal("file"), - file: z.lazy(() => FileT$outboundSchema), -}); - -export function chatMessageContentItemFileToJSON( - chatMessageContentItemFile: ChatMessageContentItemFile, -): string { - return JSON.stringify( - ChatMessageContentItemFile$outboundSchema.parse(chatMessageContentItemFile), - ); -} -export function chatMessageContentItemFileFromJSON( - jsonString: string, -): SafeParseResult { - return safeParse( - jsonString, - (x) => ChatMessageContentItemFile$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'ChatMessageContentItemFile' from JSON`, - ); -} diff --git a/src/models/chatmessagecontentitemtext.ts b/src/models/chatmessagecontentitemtext.ts index 327eb8fe..c5218834 100644 --- a/src/models/chatmessagecontentitemtext.ts +++ b/src/models/chatmessagecontentitemtext.ts @@ -3,13 +3,21 @@ */ import * as z from "zod/v4"; +import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; import { Result as SafeParseResult } from "../types/fp.js"; +import { + ChatMessageContentItemCacheControl, + ChatMessageContentItemCacheControl$inboundSchema, + ChatMessageContentItemCacheControl$Outbound, + ChatMessageContentItemCacheControl$outboundSchema, +} from "./chatmessagecontentitemcachecontrol.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; export type ChatMessageContentItemText = { type: "text"; text: string; + cacheControl?: ChatMessageContentItemCacheControl | undefined; }; /** @internal */ @@ -19,11 +27,17 @@ export const ChatMessageContentItemText$inboundSchema: z.ZodType< > = z.object({ type: z.literal("text"), text: z.string(), + cache_control: ChatMessageContentItemCacheControl$inboundSchema.optional(), +}).transform((v) => { + return remap$(v, { + "cache_control": "cacheControl", + }); }); /** @internal */ export type ChatMessageContentItemText$Outbound = { type: "text"; text: string; + cache_control?: ChatMessageContentItemCacheControl$Outbound | undefined; }; /** @internal */ @@ -33,6 +47,11 @@ export const ChatMessageContentItemText$outboundSchema: z.ZodType< > = z.object({ type: z.literal("text"), text: z.string(), + cacheControl: ChatMessageContentItemCacheControl$outboundSchema.optional(), +}).transform((v) => { + return remap$(v, { + cacheControl: "cache_control", + }); }); export function chatMessageContentItemTextToJSON( diff --git a/src/models/chatmessagecontentitemvideo.ts b/src/models/chatmessagecontentitemvideo.ts index 947bd452..d4d3f3f3 100644 --- a/src/models/chatmessagecontentitemvideo.ts +++ b/src/models/chatmessagecontentitemvideo.ts @@ -7,25 +7,23 @@ import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -import { - VideoURL, - VideoURL$inboundSchema, - VideoURL$Outbound, - VideoURL$outboundSchema, -} from "./videourl.js"; - -export type ChatMessageContentItemVideoVideoUrlVideoUrl = { + +export type VideoUrl2 = { url: string; }; export type ChatMessageContentItemVideoVideoURL = { type: "video_url"; - videoUrl: ChatMessageContentItemVideoVideoUrlVideoUrl; + videoUrl: VideoUrl2; +}; + +export type VideoUrl1 = { + url: string; }; export type ChatMessageContentItemVideoInputVideo = { type: "input_video"; - videoUrl: VideoURL; + videoUrl: VideoUrl1; }; export type ChatMessageContentItemVideo = @@ -33,47 +31,32 @@ export type ChatMessageContentItemVideo = | ChatMessageContentItemVideoVideoURL; /** @internal */ -export const ChatMessageContentItemVideoVideoUrlVideoUrl$inboundSchema: - z.ZodType = z.object({ - url: z.string(), - }); +export const VideoUrl2$inboundSchema: z.ZodType = z.object({ + url: z.string(), +}); /** @internal */ -export type ChatMessageContentItemVideoVideoUrlVideoUrl$Outbound = { +export type VideoUrl2$Outbound = { url: string; }; /** @internal */ -export const ChatMessageContentItemVideoVideoUrlVideoUrl$outboundSchema: - z.ZodType< - ChatMessageContentItemVideoVideoUrlVideoUrl$Outbound, - ChatMessageContentItemVideoVideoUrlVideoUrl - > = z.object({ - url: z.string(), - }); +export const VideoUrl2$outboundSchema: z.ZodType< + VideoUrl2$Outbound, + VideoUrl2 +> = z.object({ + url: z.string(), +}); -export function chatMessageContentItemVideoVideoUrlVideoUrlToJSON( - chatMessageContentItemVideoVideoUrlVideoUrl: - ChatMessageContentItemVideoVideoUrlVideoUrl, -): string { - return JSON.stringify( - ChatMessageContentItemVideoVideoUrlVideoUrl$outboundSchema.parse( - chatMessageContentItemVideoVideoUrlVideoUrl, - ), - ); +export function videoUrl2ToJSON(videoUrl2: VideoUrl2): string { + return JSON.stringify(VideoUrl2$outboundSchema.parse(videoUrl2)); } -export function chatMessageContentItemVideoVideoUrlVideoUrlFromJSON( +export function videoUrl2FromJSON( jsonString: string, -): SafeParseResult< - ChatMessageContentItemVideoVideoUrlVideoUrl, - SDKValidationError -> { +): SafeParseResult { return safeParse( jsonString, - (x) => - ChatMessageContentItemVideoVideoUrlVideoUrl$inboundSchema.parse( - JSON.parse(x), - ), - `Failed to parse 'ChatMessageContentItemVideoVideoUrlVideoUrl' from JSON`, + (x) => VideoUrl2$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'VideoUrl2' from JSON`, ); } @@ -83,9 +66,7 @@ export const ChatMessageContentItemVideoVideoURL$inboundSchema: z.ZodType< unknown > = z.object({ type: z.literal("video_url"), - video_url: z.lazy(() => - ChatMessageContentItemVideoVideoUrlVideoUrl$inboundSchema - ), + video_url: z.lazy(() => VideoUrl2$inboundSchema), }).transform((v) => { return remap$(v, { "video_url": "videoUrl", @@ -94,7 +75,7 @@ export const ChatMessageContentItemVideoVideoURL$inboundSchema: z.ZodType< /** @internal */ export type ChatMessageContentItemVideoVideoURL$Outbound = { type: "video_url"; - video_url: ChatMessageContentItemVideoVideoUrlVideoUrl$Outbound; + video_url: VideoUrl2$Outbound; }; /** @internal */ @@ -103,9 +84,7 @@ export const ChatMessageContentItemVideoVideoURL$outboundSchema: z.ZodType< ChatMessageContentItemVideoVideoURL > = z.object({ type: z.literal("video_url"), - videoUrl: z.lazy(() => - ChatMessageContentItemVideoVideoUrlVideoUrl$outboundSchema - ), + videoUrl: z.lazy(() => VideoUrl2$outboundSchema), }).transform((v) => { return remap$(v, { videoUrl: "video_url", @@ -132,13 +111,43 @@ export function chatMessageContentItemVideoVideoURLFromJSON( ); } +/** @internal */ +export const VideoUrl1$inboundSchema: z.ZodType = z.object({ + url: z.string(), +}); +/** @internal */ +export type VideoUrl1$Outbound = { + url: string; +}; + +/** @internal */ +export const VideoUrl1$outboundSchema: z.ZodType< + VideoUrl1$Outbound, + VideoUrl1 +> = z.object({ + url: z.string(), +}); + +export function videoUrl1ToJSON(videoUrl1: VideoUrl1): string { + return JSON.stringify(VideoUrl1$outboundSchema.parse(videoUrl1)); +} +export function videoUrl1FromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => VideoUrl1$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'VideoUrl1' from JSON`, + ); +} + /** @internal */ export const ChatMessageContentItemVideoInputVideo$inboundSchema: z.ZodType< ChatMessageContentItemVideoInputVideo, unknown > = z.object({ type: z.literal("input_video"), - video_url: VideoURL$inboundSchema, + video_url: z.lazy(() => VideoUrl1$inboundSchema), }).transform((v) => { return remap$(v, { "video_url": "videoUrl", @@ -147,7 +156,7 @@ export const ChatMessageContentItemVideoInputVideo$inboundSchema: z.ZodType< /** @internal */ export type ChatMessageContentItemVideoInputVideo$Outbound = { type: "input_video"; - video_url: VideoURL$Outbound; + video_url: VideoUrl1$Outbound; }; /** @internal */ @@ -156,7 +165,7 @@ export const ChatMessageContentItemVideoInputVideo$outboundSchema: z.ZodType< ChatMessageContentItemVideoInputVideo > = z.object({ type: z.literal("input_video"), - videoUrl: VideoURL$outboundSchema, + videoUrl: z.lazy(() => VideoUrl1$outboundSchema), }).transform((v) => { return remap$(v, { videoUrl: "video_url", diff --git a/src/models/chatresponsechoice.ts b/src/models/chatresponsechoice.ts index 6b604438..d48b6d72 100644 --- a/src/models/chatresponsechoice.ts +++ b/src/models/chatresponsechoice.ts @@ -5,34 +5,21 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; -import * as openEnums from "../types/enums.js"; -import { OpenEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { AssistantMessage, AssistantMessage$inboundSchema, } from "./assistantmessage.js"; +import { + ChatCompletionFinishReason, + ChatCompletionFinishReason$inboundSchema, +} from "./chatcompletionfinishreason.js"; import { ChatMessageTokenLogprobs, ChatMessageTokenLogprobs$inboundSchema, } from "./chatmessagetokenlogprobs.js"; -import { - ChatStreamingMessageChunk, - ChatStreamingMessageChunk$inboundSchema, -} from "./chatstreamingmessagechunk.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export const ChatCompletionFinishReason = { - ToolCalls: "tool_calls", - Stop: "stop", - Length: "length", - ContentFilter: "content_filter", - Error: "error", -} as const; -export type ChatCompletionFinishReason = OpenEnum< - typeof ChatCompletionFinishReason ->; - export type ChatResponseChoice = { finishReason: ChatCompletionFinishReason | null; index: number; @@ -40,19 +27,6 @@ export type ChatResponseChoice = { logprobs?: ChatMessageTokenLogprobs | null | undefined; }; -export type ChatStreamingChoice = { - delta: ChatStreamingMessageChunk; - finishReason: ChatCompletionFinishReason | null; - index: number; - logprobs?: ChatMessageTokenLogprobs | null | undefined; -}; - -/** @internal */ -export const ChatCompletionFinishReason$inboundSchema: z.ZodType< - ChatCompletionFinishReason, - unknown -> = openEnums.inboundSchema(ChatCompletionFinishReason); - /** @internal */ export const ChatResponseChoice$inboundSchema: z.ZodType< ChatResponseChoice, @@ -77,28 +51,3 @@ export function chatResponseChoiceFromJSON( `Failed to parse 'ChatResponseChoice' from JSON`, ); } - -/** @internal */ -export const ChatStreamingChoice$inboundSchema: z.ZodType< - ChatStreamingChoice, - unknown -> = z.object({ - delta: ChatStreamingMessageChunk$inboundSchema, - finish_reason: z.nullable(ChatCompletionFinishReason$inboundSchema), - index: z.number(), - logprobs: z.nullable(ChatMessageTokenLogprobs$inboundSchema).optional(), -}).transform((v) => { - return remap$(v, { - "finish_reason": "finishReason", - }); -}); - -export function chatStreamingChoiceFromJSON( - jsonString: string, -): SafeParseResult { - return safeParse( - jsonString, - (x) => ChatStreamingChoice$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'ChatStreamingChoice' from JSON`, - ); -} diff --git a/src/models/chatstreamingchoice.ts b/src/models/chatstreamingchoice.ts new file mode 100644 index 00000000..c1a817ce --- /dev/null +++ b/src/models/chatstreamingchoice.ts @@ -0,0 +1,53 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod/v4"; +import { remap as remap$ } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { + ChatCompletionFinishReason, + ChatCompletionFinishReason$inboundSchema, +} from "./chatcompletionfinishreason.js"; +import { + ChatMessageTokenLogprobs, + ChatMessageTokenLogprobs$inboundSchema, +} from "./chatmessagetokenlogprobs.js"; +import { + ChatStreamingMessageChunk, + ChatStreamingMessageChunk$inboundSchema, +} from "./chatstreamingmessagechunk.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +export type ChatStreamingChoice = { + delta: ChatStreamingMessageChunk; + finishReason: ChatCompletionFinishReason | null; + index: number; + logprobs?: ChatMessageTokenLogprobs | null | undefined; +}; + +/** @internal */ +export const ChatStreamingChoice$inboundSchema: z.ZodType< + ChatStreamingChoice, + unknown +> = z.object({ + delta: ChatStreamingMessageChunk$inboundSchema, + finish_reason: z.nullable(ChatCompletionFinishReason$inboundSchema), + index: z.number(), + logprobs: z.nullable(ChatMessageTokenLogprobs$inboundSchema).optional(), +}).transform((v) => { + return remap$(v, { + "finish_reason": "finishReason", + }); +}); + +export function chatStreamingChoiceFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => ChatStreamingChoice$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'ChatStreamingChoice' from JSON`, + ); +} diff --git a/src/models/chatstreamingresponsechunk.ts b/src/models/chatstreamingresponsechunk.ts index 8e01c999..def0e6c9 100644 --- a/src/models/chatstreamingresponsechunk.ts +++ b/src/models/chatstreamingresponsechunk.ts @@ -13,7 +13,7 @@ import { import { ChatStreamingChoice, ChatStreamingChoice$inboundSchema, -} from "./chatresponsechoice.js"; +} from "./chatstreamingchoice.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; export type ChatStreamingResponseChunkError = { diff --git a/src/models/completionchoice.ts b/src/models/completionchoice.ts index ea525d2c..326299b1 100644 --- a/src/models/completionchoice.ts +++ b/src/models/completionchoice.ts @@ -26,6 +26,8 @@ export type CompletionChoice = { index: number; logprobs: CompletionLogprobs | null; finishReason: CompletionFinishReason | null; + nativeFinishReason?: string | undefined; + reasoning?: string | null | undefined; }; /** @internal */ @@ -43,9 +45,12 @@ export const CompletionChoice$inboundSchema: z.ZodType< index: z.number(), logprobs: z.nullable(CompletionLogprobs$inboundSchema), finish_reason: z.nullable(CompletionFinishReason$inboundSchema), + native_finish_reason: z.string().optional(), + reasoning: z.nullable(z.string()).optional(), }).transform((v) => { return remap$(v, { "finish_reason": "finishReason", + "native_finish_reason": "nativeFinishReason", }); }); diff --git a/src/models/completioncreateparams.ts b/src/models/completioncreateparams.ts index 3227fb77..cd68cfa2 100644 --- a/src/models/completioncreateparams.ts +++ b/src/models/completioncreateparams.ts @@ -40,10 +40,10 @@ export type CompletionCreateParamsResponseFormatText = { }; export type CompletionCreateParamsResponseFormatUnion = - | ResponseFormatJSONSchema - | ResponseFormatTextGrammar | CompletionCreateParamsResponseFormatText | CompletionCreateParamsResponseFormatJSONObject + | ResponseFormatJSONSchema + | ResponseFormatTextGrammar | CompletionCreateParamsResponseFormatPython; export type CompletionCreateParams = { @@ -68,10 +68,10 @@ export type CompletionCreateParams = { user?: string | undefined; metadata?: { [k: string]: string } | null | undefined; responseFormat?: - | ResponseFormatJSONSchema - | ResponseFormatTextGrammar | CompletionCreateParamsResponseFormatText | CompletionCreateParamsResponseFormatJSONObject + | ResponseFormatJSONSchema + | ResponseFormatTextGrammar | CompletionCreateParamsResponseFormatPython | null | undefined; @@ -211,10 +211,10 @@ export function completionCreateParamsResponseFormatTextToJSON( /** @internal */ export type CompletionCreateParamsResponseFormatUnion$Outbound = - | ResponseFormatJSONSchema$Outbound - | ResponseFormatTextGrammar$Outbound | CompletionCreateParamsResponseFormatText$Outbound | CompletionCreateParamsResponseFormatJSONObject$Outbound + | ResponseFormatJSONSchema$Outbound + | ResponseFormatTextGrammar$Outbound | CompletionCreateParamsResponseFormatPython$Outbound; /** @internal */ @@ -223,10 +223,10 @@ export const CompletionCreateParamsResponseFormatUnion$outboundSchema: CompletionCreateParamsResponseFormatUnion$Outbound, CompletionCreateParamsResponseFormatUnion > = z.union([ - ResponseFormatJSONSchema$outboundSchema, - ResponseFormatTextGrammar$outboundSchema, z.lazy(() => CompletionCreateParamsResponseFormatText$outboundSchema), z.lazy(() => CompletionCreateParamsResponseFormatJSONObject$outboundSchema), + ResponseFormatJSONSchema$outboundSchema, + ResponseFormatTextGrammar$outboundSchema, z.lazy(() => CompletionCreateParamsResponseFormatPython$outboundSchema), ]); @@ -264,10 +264,10 @@ export type CompletionCreateParams$Outbound = { user?: string | undefined; metadata?: { [k: string]: string } | null | undefined; response_format?: - | ResponseFormatJSONSchema$Outbound - | ResponseFormatTextGrammar$Outbound | CompletionCreateParamsResponseFormatText$Outbound | CompletionCreateParamsResponseFormatJSONObject$Outbound + | ResponseFormatJSONSchema$Outbound + | ResponseFormatTextGrammar$Outbound | CompletionCreateParamsResponseFormatPython$Outbound | null | undefined; @@ -306,12 +306,12 @@ export const CompletionCreateParams$outboundSchema: z.ZodType< metadata: z.nullable(z.record(z.string(), z.string())).optional(), responseFormat: z.nullable( z.union([ - ResponseFormatJSONSchema$outboundSchema, - ResponseFormatTextGrammar$outboundSchema, z.lazy(() => CompletionCreateParamsResponseFormatText$outboundSchema), z.lazy(() => CompletionCreateParamsResponseFormatJSONObject$outboundSchema ), + ResponseFormatJSONSchema$outboundSchema, + ResponseFormatTextGrammar$outboundSchema, z.lazy(() => CompletionCreateParamsResponseFormatPython$outboundSchema), ]), ).optional(), diff --git a/src/models/completionresponse.ts b/src/models/completionresponse.ts index c866e9da..9dc714bf 100644 --- a/src/models/completionresponse.ts +++ b/src/models/completionresponse.ts @@ -21,6 +21,7 @@ export type CompletionResponse = { object: "text_completion"; created: number; model: string; + provider?: string | undefined; systemFingerprint?: string | undefined; choices: Array; usage?: CompletionUsage | undefined; @@ -35,6 +36,7 @@ export const CompletionResponse$inboundSchema: z.ZodType< object: z.literal("text_completion"), created: z.number(), model: z.string(), + provider: z.string().optional(), system_fingerprint: z.string().optional(), choices: z.array(CompletionChoice$inboundSchema), usage: CompletionUsage$inboundSchema.optional(), diff --git a/src/models/filecitation.ts b/src/models/filecitation.ts index cd3723da..00b7a5d7 100644 --- a/src/models/filecitation.ts +++ b/src/models/filecitation.ts @@ -5,35 +5,20 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export const FileCitationType = { - FileCitation: "file_citation", -} as const; -export type FileCitationType = ClosedEnum; - export type FileCitation = { - type: FileCitationType; + type: "file_citation"; fileId: string; filename: string; index: number; }; -/** @internal */ -export const FileCitationType$inboundSchema: z.ZodEnum< - typeof FileCitationType -> = z.enum(FileCitationType); -/** @internal */ -export const FileCitationType$outboundSchema: z.ZodEnum< - typeof FileCitationType -> = FileCitationType$inboundSchema; - /** @internal */ export const FileCitation$inboundSchema: z.ZodType = z .object({ - type: FileCitationType$inboundSchema, + type: z.literal("file_citation"), file_id: z.string(), filename: z.string(), index: z.number(), @@ -44,7 +29,7 @@ export const FileCitation$inboundSchema: z.ZodType = z }); /** @internal */ export type FileCitation$Outbound = { - type: string; + type: "file_citation"; file_id: string; filename: string; index: number; @@ -55,7 +40,7 @@ export const FileCitation$outboundSchema: z.ZodType< FileCitation$Outbound, FileCitation > = z.object({ - type: FileCitationType$outboundSchema, + type: z.literal("file_citation"), fileId: z.string(), filename: z.string(), index: z.number(), diff --git a/src/models/filepath.ts b/src/models/filepath.ts index 32b84dd3..08abb411 100644 --- a/src/models/filepath.ts +++ b/src/models/filepath.ts @@ -5,31 +5,18 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export const FilePathType = { - FilePath: "file_path", -} as const; -export type FilePathType = ClosedEnum; - export type FilePath = { - type: FilePathType; + type: "file_path"; fileId: string; index: number; }; -/** @internal */ -export const FilePathType$inboundSchema: z.ZodEnum = z - .enum(FilePathType); -/** @internal */ -export const FilePathType$outboundSchema: z.ZodEnum = - FilePathType$inboundSchema; - /** @internal */ export const FilePath$inboundSchema: z.ZodType = z.object({ - type: FilePathType$inboundSchema, + type: z.literal("file_path"), file_id: z.string(), index: z.number(), }).transform((v) => { @@ -39,7 +26,7 @@ export const FilePath$inboundSchema: z.ZodType = z.object({ }); /** @internal */ export type FilePath$Outbound = { - type: string; + type: "file_path"; file_id: string; index: number; }; @@ -47,7 +34,7 @@ export type FilePath$Outbound = { /** @internal */ export const FilePath$outboundSchema: z.ZodType = z .object({ - type: FilePathType$outboundSchema, + type: z.literal("file_path"), fileId: z.string(), index: z.number(), }).transform((v) => { diff --git a/src/models/index.ts b/src/models/index.ts index 6f4712ea..29a24c1f 100644 --- a/src/models/index.ts +++ b/src/models/index.ts @@ -6,12 +6,13 @@ export * from "./activityitem.js"; export * from "./assistantmessage.js"; export * from "./badgatewayresponseerrordata.js"; export * from "./badrequestresponseerrordata.js"; +export * from "./chatcompletionfinishreason.js"; export * from "./chaterror.js"; export * from "./chatgenerationparams.js"; export * from "./chatgenerationtokenusage.js"; export * from "./chatmessagecontentitem.js"; export * from "./chatmessagecontentitemaudio.js"; -export * from "./chatmessagecontentitemfile.js"; +export * from "./chatmessagecontentitemcachecontrol.js"; export * from "./chatmessagecontentitemimage.js"; export * from "./chatmessagecontentitemtext.js"; export * from "./chatmessagecontentitemvideo.js"; @@ -20,6 +21,7 @@ export * from "./chatmessagetokenlogprobs.js"; export * from "./chatmessagetoolcall.js"; export * from "./chatresponse.js"; export * from "./chatresponsechoice.js"; +export * from "./chatstreamingchoice.js"; export * from "./chatstreamingmessagechunk.js"; export * from "./chatstreamingmessagetoolcall.js"; export * from "./chatstreamingresponsechunk.js"; @@ -142,6 +144,5 @@ export * from "./unauthorizedresponseerrordata.js"; export * from "./unprocessableentityresponseerrordata.js"; export * from "./urlcitation.js"; export * from "./usermessage.js"; -export * from "./videourl.js"; export * from "./websearchpreviewtooluserlocation.js"; export * from "./websearchstatus.js"; diff --git a/src/models/message.ts b/src/models/message.ts index a28aff78..616bb498 100644 --- a/src/models/message.ts +++ b/src/models/message.ts @@ -38,11 +38,11 @@ export type MessageDeveloper = { }; export type Message = - | ToolResponseMessage | SystemMessage | UserMessage | MessageDeveloper - | AssistantMessage; + | AssistantMessage + | ToolResponseMessage; /** @internal */ export type MessageContent$Outbound = @@ -89,20 +89,20 @@ export function messageDeveloperToJSON( /** @internal */ export type Message$Outbound = - | ToolResponseMessage$Outbound | SystemMessage$Outbound | UserMessage$Outbound | MessageDeveloper$Outbound - | AssistantMessage$Outbound; + | AssistantMessage$Outbound + | ToolResponseMessage$Outbound; /** @internal */ export const Message$outboundSchema: z.ZodType = z .union([ - ToolResponseMessage$outboundSchema, SystemMessage$outboundSchema, UserMessage$outboundSchema, z.lazy(() => MessageDeveloper$outboundSchema), AssistantMessage$outboundSchema, + ToolResponseMessage$outboundSchema, ]); export function messageToJSON(message: Message): string { diff --git a/src/models/openairesponsesannotation.ts b/src/models/openairesponsesannotation.ts index 23596614..7720e9dc 100644 --- a/src/models/openairesponsesannotation.ts +++ b/src/models/openairesponsesannotation.ts @@ -25,21 +25,21 @@ import { URLCitation$outboundSchema, } from "./urlcitation.js"; -export type OpenAIResponsesAnnotation = URLCitation | FileCitation | FilePath; +export type OpenAIResponsesAnnotation = FileCitation | URLCitation | FilePath; /** @internal */ export const OpenAIResponsesAnnotation$inboundSchema: z.ZodType< OpenAIResponsesAnnotation, unknown > = z.union([ - URLCitation$inboundSchema, FileCitation$inboundSchema, + URLCitation$inboundSchema, FilePath$inboundSchema, ]); /** @internal */ export type OpenAIResponsesAnnotation$Outbound = - | URLCitation$Outbound | FileCitation$Outbound + | URLCitation$Outbound | FilePath$Outbound; /** @internal */ @@ -47,8 +47,8 @@ export const OpenAIResponsesAnnotation$outboundSchema: z.ZodType< OpenAIResponsesAnnotation$Outbound, OpenAIResponsesAnnotation > = z.union([ - URLCitation$outboundSchema, FileCitation$outboundSchema, + URLCitation$outboundSchema, FilePath$outboundSchema, ]); diff --git a/src/models/openairesponsesinputunion.ts b/src/models/openairesponsesinputunion.ts index 388f13d4..73702880 100644 --- a/src/models/openairesponsesinputunion.ts +++ b/src/models/openairesponsesinputunion.ts @@ -99,10 +99,10 @@ export type OpenAIResponsesInputRoleUnion2 = | OpenAIResponsesInputRoleDeveloper2; export type OpenAIResponsesInputContent3 = - | (ResponseInputText & { type: "input_text" }) - | (ResponseInputImage & { type: "input_image" }) - | (ResponseInputAudio & { type: "input_audio" }) - | (ResponseInputFile & { type: "input_file" }); + | ResponseInputText + | ResponseInputImage + | ResponseInputFile + | ResponseInputAudio; export type OpenAIResponsesInputMessage2 = { id: string; @@ -112,10 +112,10 @@ export type OpenAIResponsesInputMessage2 = { | OpenAIResponsesInputRoleSystem2 | OpenAIResponsesInputRoleDeveloper2; content: Array< - | (ResponseInputText & { type: "input_text" }) - | (ResponseInputImage & { type: "input_image" }) - | (ResponseInputAudio & { type: "input_audio" }) - | (ResponseInputFile & { type: "input_file" }) + | ResponseInputText + | ResponseInputImage + | ResponseInputFile + | ResponseInputAudio >; }; @@ -161,17 +161,17 @@ export type OpenAIResponsesInputRoleUnion1 = | OpenAIResponsesInputRoleDeveloper1; export type OpenAIResponsesInputContent1 = - | (ResponseInputText & { type: "input_text" }) - | (ResponseInputImage & { type: "input_image" }) - | (ResponseInputAudio & { type: "input_audio" }) - | (ResponseInputFile & { type: "input_file" }); + | ResponseInputText + | ResponseInputImage + | ResponseInputFile + | ResponseInputAudio; export type OpenAIResponsesInputContent2 = | Array< - | (ResponseInputText & { type: "input_text" }) - | (ResponseInputImage & { type: "input_image" }) - | (ResponseInputAudio & { type: "input_audio" }) - | (ResponseInputFile & { type: "input_file" }) + | ResponseInputText + | ResponseInputImage + | ResponseInputFile + | ResponseInputAudio > | string; @@ -184,10 +184,10 @@ export type OpenAIResponsesInputMessage1 = { | OpenAIResponsesInputRoleDeveloper1; content: | Array< - | (ResponseInputText & { type: "input_text" }) - | (ResponseInputImage & { type: "input_image" }) - | (ResponseInputAudio & { type: "input_audio" }) - | (ResponseInputFile & { type: "input_file" }) + | ResponseInputText + | ResponseInputImage + | ResponseInputFile + | ResponseInputAudio > | string; }; @@ -322,18 +322,10 @@ export const OpenAIResponsesInputContent3$inboundSchema: z.ZodType< OpenAIResponsesInputContent3, unknown > = z.union([ - ResponseInputText$inboundSchema.and( - z.object({ type: z.literal("input_text") }), - ), - ResponseInputImage$inboundSchema.and( - z.object({ type: z.literal("input_image") }), - ), - ResponseInputAudio$inboundSchema.and( - z.object({ type: z.literal("input_audio") }), - ), - ResponseInputFile$inboundSchema.and( - z.object({ type: z.literal("input_file") }), - ), + ResponseInputText$inboundSchema, + ResponseInputImage$inboundSchema, + ResponseInputFile$inboundSchema, + ResponseInputAudio$inboundSchema, ]); export function openAIResponsesInputContent3FromJSON( @@ -360,18 +352,10 @@ export const OpenAIResponsesInputMessage2$inboundSchema: z.ZodType< ]), content: z.array( z.union([ - ResponseInputText$inboundSchema.and( - z.object({ type: z.literal("input_text") }), - ), - ResponseInputImage$inboundSchema.and( - z.object({ type: z.literal("input_image") }), - ), - ResponseInputAudio$inboundSchema.and( - z.object({ type: z.literal("input_audio") }), - ), - ResponseInputFile$inboundSchema.and( - z.object({ type: z.literal("input_file") }), - ), + ResponseInputText$inboundSchema, + ResponseInputImage$inboundSchema, + ResponseInputFile$inboundSchema, + ResponseInputAudio$inboundSchema, ]), ), }); @@ -437,18 +421,10 @@ export const OpenAIResponsesInputContent1$inboundSchema: z.ZodType< OpenAIResponsesInputContent1, unknown > = z.union([ - ResponseInputText$inboundSchema.and( - z.object({ type: z.literal("input_text") }), - ), - ResponseInputImage$inboundSchema.and( - z.object({ type: z.literal("input_image") }), - ), - ResponseInputAudio$inboundSchema.and( - z.object({ type: z.literal("input_audio") }), - ), - ResponseInputFile$inboundSchema.and( - z.object({ type: z.literal("input_file") }), - ), + ResponseInputText$inboundSchema, + ResponseInputImage$inboundSchema, + ResponseInputFile$inboundSchema, + ResponseInputAudio$inboundSchema, ]); export function openAIResponsesInputContent1FromJSON( @@ -468,18 +444,10 @@ export const OpenAIResponsesInputContent2$inboundSchema: z.ZodType< > = z.union([ z.array( z.union([ - ResponseInputText$inboundSchema.and( - z.object({ type: z.literal("input_text") }), - ), - ResponseInputImage$inboundSchema.and( - z.object({ type: z.literal("input_image") }), - ), - ResponseInputAudio$inboundSchema.and( - z.object({ type: z.literal("input_audio") }), - ), - ResponseInputFile$inboundSchema.and( - z.object({ type: z.literal("input_file") }), - ), + ResponseInputText$inboundSchema, + ResponseInputImage$inboundSchema, + ResponseInputFile$inboundSchema, + ResponseInputAudio$inboundSchema, ]), ), z.string(), @@ -510,18 +478,10 @@ export const OpenAIResponsesInputMessage1$inboundSchema: z.ZodType< content: z.union([ z.array( z.union([ - ResponseInputText$inboundSchema.and( - z.object({ type: z.literal("input_text") }), - ), - ResponseInputImage$inboundSchema.and( - z.object({ type: z.literal("input_image") }), - ), - ResponseInputAudio$inboundSchema.and( - z.object({ type: z.literal("input_audio") }), - ), - ResponseInputFile$inboundSchema.and( - z.object({ type: z.literal("input_file") }), - ), + ResponseInputText$inboundSchema, + ResponseInputImage$inboundSchema, + ResponseInputFile$inboundSchema, + ResponseInputAudio$inboundSchema, ]), ), z.string(), diff --git a/src/models/openairesponsesrefusalcontent.ts b/src/models/openairesponsesrefusalcontent.ts index 0e9d2c92..dd3273b1 100644 --- a/src/models/openairesponsesrefusalcontent.ts +++ b/src/models/openairesponsesrefusalcontent.ts @@ -4,42 +4,25 @@ import * as z from "zod/v4"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export const OpenAIResponsesRefusalContentType = { - Refusal: "refusal", -} as const; -export type OpenAIResponsesRefusalContentType = ClosedEnum< - typeof OpenAIResponsesRefusalContentType ->; - export type OpenAIResponsesRefusalContent = { - type: OpenAIResponsesRefusalContentType; + type: "refusal"; refusal: string; }; -/** @internal */ -export const OpenAIResponsesRefusalContentType$inboundSchema: z.ZodEnum< - typeof OpenAIResponsesRefusalContentType -> = z.enum(OpenAIResponsesRefusalContentType); -/** @internal */ -export const OpenAIResponsesRefusalContentType$outboundSchema: z.ZodEnum< - typeof OpenAIResponsesRefusalContentType -> = OpenAIResponsesRefusalContentType$inboundSchema; - /** @internal */ export const OpenAIResponsesRefusalContent$inboundSchema: z.ZodType< OpenAIResponsesRefusalContent, unknown > = z.object({ - type: OpenAIResponsesRefusalContentType$inboundSchema, + type: z.literal("refusal"), refusal: z.string(), }); /** @internal */ export type OpenAIResponsesRefusalContent$Outbound = { - type: string; + type: "refusal"; refusal: string; }; @@ -48,7 +31,7 @@ export const OpenAIResponsesRefusalContent$outboundSchema: z.ZodType< OpenAIResponsesRefusalContent$Outbound, OpenAIResponsesRefusalContent > = z.object({ - type: OpenAIResponsesRefusalContentType$outboundSchema, + type: z.literal("refusal"), refusal: z.string(), }); diff --git a/src/models/openresponseseasyinputmessage.ts b/src/models/openresponseseasyinputmessage.ts index f1ecffdd..5e75df15 100644 --- a/src/models/openresponseseasyinputmessage.ts +++ b/src/models/openresponseseasyinputmessage.ts @@ -67,17 +67,17 @@ export type OpenResponsesEasyInputMessageRoleUnion = | OpenResponsesEasyInputMessageRoleDeveloper; export type OpenResponsesEasyInputMessageContent1 = - | (ResponseInputText & { type: "input_text" }) - | (ResponseInputImage & { type: "input_image" }) - | (ResponseInputAudio & { type: "input_audio" }) - | (ResponseInputFile & { type: "input_file" }); + | ResponseInputText + | ResponseInputImage + | ResponseInputFile + | ResponseInputAudio; export type OpenResponsesEasyInputMessageContent2 = | Array< - | (ResponseInputText & { type: "input_text" }) - | (ResponseInputImage & { type: "input_image" }) - | (ResponseInputAudio & { type: "input_audio" }) - | (ResponseInputFile & { type: "input_file" }) + | ResponseInputText + | ResponseInputImage + | ResponseInputFile + | ResponseInputAudio > | string; @@ -90,10 +90,10 @@ export type OpenResponsesEasyInputMessage = { | OpenResponsesEasyInputMessageRoleDeveloper; content: | Array< - | (ResponseInputText & { type: "input_text" }) - | (ResponseInputImage & { type: "input_image" }) - | (ResponseInputAudio & { type: "input_audio" }) - | (ResponseInputFile & { type: "input_file" }) + | ResponseInputText + | ResponseInputImage + | ResponseInputFile + | ResponseInputAudio > | string; }; @@ -156,28 +156,20 @@ export function openResponsesEasyInputMessageRoleUnionToJSON( /** @internal */ export type OpenResponsesEasyInputMessageContent1$Outbound = - | (ResponseInputText$Outbound & { type: "input_text" }) - | (ResponseInputImage$Outbound & { type: "input_image" }) - | (ResponseInputAudio$Outbound & { type: "input_audio" }) - | (ResponseInputFile$Outbound & { type: "input_file" }); + | ResponseInputText$Outbound + | ResponseInputImage$Outbound + | ResponseInputFile$Outbound + | ResponseInputAudio$Outbound; /** @internal */ export const OpenResponsesEasyInputMessageContent1$outboundSchema: z.ZodType< OpenResponsesEasyInputMessageContent1$Outbound, OpenResponsesEasyInputMessageContent1 > = z.union([ - ResponseInputText$outboundSchema.and( - z.object({ type: z.literal("input_text") }), - ), - ResponseInputImage$outboundSchema.and( - z.object({ type: z.literal("input_image") }), - ), - ResponseInputAudio$outboundSchema.and( - z.object({ type: z.literal("input_audio") }), - ), - ResponseInputFile$outboundSchema.and( - z.object({ type: z.literal("input_file") }), - ), + ResponseInputText$outboundSchema, + ResponseInputImage$outboundSchema, + ResponseInputFile$outboundSchema, + ResponseInputAudio$outboundSchema, ]); export function openResponsesEasyInputMessageContent1ToJSON( @@ -193,10 +185,10 @@ export function openResponsesEasyInputMessageContent1ToJSON( /** @internal */ export type OpenResponsesEasyInputMessageContent2$Outbound = | Array< - | (ResponseInputText$Outbound & { type: "input_text" }) - | (ResponseInputImage$Outbound & { type: "input_image" }) - | (ResponseInputAudio$Outbound & { type: "input_audio" }) - | (ResponseInputFile$Outbound & { type: "input_file" }) + | ResponseInputText$Outbound + | ResponseInputImage$Outbound + | ResponseInputFile$Outbound + | ResponseInputAudio$Outbound > | string; @@ -207,18 +199,10 @@ export const OpenResponsesEasyInputMessageContent2$outboundSchema: z.ZodType< > = z.union([ z.array( z.union([ - ResponseInputText$outboundSchema.and( - z.object({ type: z.literal("input_text") }), - ), - ResponseInputImage$outboundSchema.and( - z.object({ type: z.literal("input_image") }), - ), - ResponseInputAudio$outboundSchema.and( - z.object({ type: z.literal("input_audio") }), - ), - ResponseInputFile$outboundSchema.and( - z.object({ type: z.literal("input_file") }), - ), + ResponseInputText$outboundSchema, + ResponseInputImage$outboundSchema, + ResponseInputFile$outboundSchema, + ResponseInputAudio$outboundSchema, ]), ), z.string(), @@ -240,10 +224,10 @@ export type OpenResponsesEasyInputMessage$Outbound = { role: string | string | string | string; content: | Array< - | (ResponseInputText$Outbound & { type: "input_text" }) - | (ResponseInputImage$Outbound & { type: "input_image" }) - | (ResponseInputAudio$Outbound & { type: "input_audio" }) - | (ResponseInputFile$Outbound & { type: "input_file" }) + | ResponseInputText$Outbound + | ResponseInputImage$Outbound + | ResponseInputFile$Outbound + | ResponseInputAudio$Outbound > | string; }; @@ -263,18 +247,10 @@ export const OpenResponsesEasyInputMessage$outboundSchema: z.ZodType< content: z.union([ z.array( z.union([ - ResponseInputText$outboundSchema.and( - z.object({ type: z.literal("input_text") }), - ), - ResponseInputImage$outboundSchema.and( - z.object({ type: z.literal("input_image") }), - ), - ResponseInputAudio$outboundSchema.and( - z.object({ type: z.literal("input_audio") }), - ), - ResponseInputFile$outboundSchema.and( - z.object({ type: z.literal("input_file") }), - ), + ResponseInputText$outboundSchema, + ResponseInputImage$outboundSchema, + ResponseInputFile$outboundSchema, + ResponseInputAudio$outboundSchema, ]), ), z.string(), diff --git a/src/models/openresponseserrorevent.ts b/src/models/openresponseserrorevent.ts index 9ec64921..ad39bdad 100644 --- a/src/models/openresponseserrorevent.ts +++ b/src/models/openresponseserrorevent.ts @@ -5,39 +5,26 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export const OpenResponsesErrorEventType = { - Error: "error", -} as const; -export type OpenResponsesErrorEventType = ClosedEnum< - typeof OpenResponsesErrorEventType ->; - /** * Event emitted when an error occurs during streaming */ export type OpenResponsesErrorEvent = { - type: OpenResponsesErrorEventType; + type: "error"; code: string | null; message: string; param: string | null; sequenceNumber: number; }; -/** @internal */ -export const OpenResponsesErrorEventType$inboundSchema: z.ZodEnum< - typeof OpenResponsesErrorEventType -> = z.enum(OpenResponsesErrorEventType); - /** @internal */ export const OpenResponsesErrorEvent$inboundSchema: z.ZodType< OpenResponsesErrorEvent, unknown > = z.object({ - type: OpenResponsesErrorEventType$inboundSchema, + type: z.literal("error"), code: z.nullable(z.string()), message: z.string(), param: z.nullable(z.string()), diff --git a/src/models/openresponsesimagegencallcompleted.ts b/src/models/openresponsesimagegencallcompleted.ts index 7d0cc6ba..83345a07 100644 --- a/src/models/openresponsesimagegencallcompleted.ts +++ b/src/models/openresponsesimagegencallcompleted.ts @@ -5,39 +5,25 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export const OpenResponsesImageGenCallCompletedType = { - ResponseImageGenerationCallCompleted: - "response.image_generation_call.completed", -} as const; -export type OpenResponsesImageGenCallCompletedType = ClosedEnum< - typeof OpenResponsesImageGenCallCompletedType ->; - /** * Image generation call completed */ export type OpenResponsesImageGenCallCompleted = { - type: OpenResponsesImageGenCallCompletedType; + type: "response.image_generation_call.completed"; itemId: string; outputIndex: number; sequenceNumber: number; }; -/** @internal */ -export const OpenResponsesImageGenCallCompletedType$inboundSchema: z.ZodEnum< - typeof OpenResponsesImageGenCallCompletedType -> = z.enum(OpenResponsesImageGenCallCompletedType); - /** @internal */ export const OpenResponsesImageGenCallCompleted$inboundSchema: z.ZodType< OpenResponsesImageGenCallCompleted, unknown > = z.object({ - type: OpenResponsesImageGenCallCompletedType$inboundSchema, + type: z.literal("response.image_generation_call.completed"), item_id: z.string(), output_index: z.number(), sequence_number: z.number(), diff --git a/src/models/openresponsesimagegencallgenerating.ts b/src/models/openresponsesimagegencallgenerating.ts index bf1a51f3..71facbf7 100644 --- a/src/models/openresponsesimagegencallgenerating.ts +++ b/src/models/openresponsesimagegencallgenerating.ts @@ -5,39 +5,25 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export const OpenResponsesImageGenCallGeneratingType = { - ResponseImageGenerationCallGenerating: - "response.image_generation_call.generating", -} as const; -export type OpenResponsesImageGenCallGeneratingType = ClosedEnum< - typeof OpenResponsesImageGenCallGeneratingType ->; - /** * Image generation call is generating */ export type OpenResponsesImageGenCallGenerating = { - type: OpenResponsesImageGenCallGeneratingType; + type: "response.image_generation_call.generating"; itemId: string; outputIndex: number; sequenceNumber: number; }; -/** @internal */ -export const OpenResponsesImageGenCallGeneratingType$inboundSchema: z.ZodEnum< - typeof OpenResponsesImageGenCallGeneratingType -> = z.enum(OpenResponsesImageGenCallGeneratingType); - /** @internal */ export const OpenResponsesImageGenCallGenerating$inboundSchema: z.ZodType< OpenResponsesImageGenCallGenerating, unknown > = z.object({ - type: OpenResponsesImageGenCallGeneratingType$inboundSchema, + type: z.literal("response.image_generation_call.generating"), item_id: z.string(), output_index: z.number(), sequence_number: z.number(), diff --git a/src/models/openresponsesimagegencallinprogress.ts b/src/models/openresponsesimagegencallinprogress.ts index 4dfe4986..04bb03c9 100644 --- a/src/models/openresponsesimagegencallinprogress.ts +++ b/src/models/openresponsesimagegencallinprogress.ts @@ -5,39 +5,25 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export const OpenResponsesImageGenCallInProgressType = { - ResponseImageGenerationCallInProgress: - "response.image_generation_call.in_progress", -} as const; -export type OpenResponsesImageGenCallInProgressType = ClosedEnum< - typeof OpenResponsesImageGenCallInProgressType ->; - /** * Image generation call in progress */ export type OpenResponsesImageGenCallInProgress = { - type: OpenResponsesImageGenCallInProgressType; + type: "response.image_generation_call.in_progress"; itemId: string; outputIndex: number; sequenceNumber: number; }; -/** @internal */ -export const OpenResponsesImageGenCallInProgressType$inboundSchema: z.ZodEnum< - typeof OpenResponsesImageGenCallInProgressType -> = z.enum(OpenResponsesImageGenCallInProgressType); - /** @internal */ export const OpenResponsesImageGenCallInProgress$inboundSchema: z.ZodType< OpenResponsesImageGenCallInProgress, unknown > = z.object({ - type: OpenResponsesImageGenCallInProgressType$inboundSchema, + type: z.literal("response.image_generation_call.in_progress"), item_id: z.string(), output_index: z.number(), sequence_number: z.number(), diff --git a/src/models/openresponsesimagegencallpartialimage.ts b/src/models/openresponsesimagegencallpartialimage.ts index ad7cda33..e21d39d5 100644 --- a/src/models/openresponsesimagegencallpartialimage.ts +++ b/src/models/openresponsesimagegencallpartialimage.ts @@ -5,23 +5,14 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export const OpenResponsesImageGenCallPartialImageType = { - ResponseImageGenerationCallPartialImage: - "response.image_generation_call.partial_image", -} as const; -export type OpenResponsesImageGenCallPartialImageType = ClosedEnum< - typeof OpenResponsesImageGenCallPartialImageType ->; - /** * Image generation call with partial image */ export type OpenResponsesImageGenCallPartialImage = { - type: OpenResponsesImageGenCallPartialImageType; + type: "response.image_generation_call.partial_image"; itemId: string; outputIndex: number; sequenceNumber: number; @@ -29,17 +20,12 @@ export type OpenResponsesImageGenCallPartialImage = { partialImageIndex: number; }; -/** @internal */ -export const OpenResponsesImageGenCallPartialImageType$inboundSchema: z.ZodEnum< - typeof OpenResponsesImageGenCallPartialImageType -> = z.enum(OpenResponsesImageGenCallPartialImageType); - /** @internal */ export const OpenResponsesImageGenCallPartialImage$inboundSchema: z.ZodType< OpenResponsesImageGenCallPartialImage, unknown > = z.object({ - type: OpenResponsesImageGenCallPartialImageType$inboundSchema, + type: z.literal("response.image_generation_call.partial_image"), item_id: z.string(), output_index: z.number(), sequence_number: z.number(), diff --git a/src/models/openresponsesinputmessageitem.ts b/src/models/openresponsesinputmessageitem.ts index f5d1f28f..4f210753 100644 --- a/src/models/openresponsesinputmessageitem.ts +++ b/src/models/openresponsesinputmessageitem.ts @@ -59,10 +59,10 @@ export type OpenResponsesInputMessageItemRoleUnion = | OpenResponsesInputMessageItemRoleDeveloper; export type OpenResponsesInputMessageItemContent = - | (ResponseInputText & { type: "input_text" }) - | (ResponseInputImage & { type: "input_image" }) - | (ResponseInputAudio & { type: "input_audio" }) - | (ResponseInputFile & { type: "input_file" }); + | ResponseInputText + | ResponseInputImage + | ResponseInputFile + | ResponseInputAudio; export type OpenResponsesInputMessageItem = { id?: string | undefined; @@ -72,10 +72,10 @@ export type OpenResponsesInputMessageItem = { | OpenResponsesInputMessageItemRoleSystem | OpenResponsesInputMessageItemRoleDeveloper; content: Array< - | (ResponseInputText & { type: "input_text" }) - | (ResponseInputImage & { type: "input_image" }) - | (ResponseInputAudio & { type: "input_audio" }) - | (ResponseInputFile & { type: "input_file" }) + | ResponseInputText + | ResponseInputImage + | ResponseInputFile + | ResponseInputAudio >; }; @@ -129,28 +129,20 @@ export function openResponsesInputMessageItemRoleUnionToJSON( /** @internal */ export type OpenResponsesInputMessageItemContent$Outbound = - | (ResponseInputText$Outbound & { type: "input_text" }) - | (ResponseInputImage$Outbound & { type: "input_image" }) - | (ResponseInputAudio$Outbound & { type: "input_audio" }) - | (ResponseInputFile$Outbound & { type: "input_file" }); + | ResponseInputText$Outbound + | ResponseInputImage$Outbound + | ResponseInputFile$Outbound + | ResponseInputAudio$Outbound; /** @internal */ export const OpenResponsesInputMessageItemContent$outboundSchema: z.ZodType< OpenResponsesInputMessageItemContent$Outbound, OpenResponsesInputMessageItemContent > = z.union([ - ResponseInputText$outboundSchema.and( - z.object({ type: z.literal("input_text") }), - ), - ResponseInputImage$outboundSchema.and( - z.object({ type: z.literal("input_image") }), - ), - ResponseInputAudio$outboundSchema.and( - z.object({ type: z.literal("input_audio") }), - ), - ResponseInputFile$outboundSchema.and( - z.object({ type: z.literal("input_file") }), - ), + ResponseInputText$outboundSchema, + ResponseInputImage$outboundSchema, + ResponseInputFile$outboundSchema, + ResponseInputAudio$outboundSchema, ]); export function openResponsesInputMessageItemContentToJSON( @@ -169,10 +161,10 @@ export type OpenResponsesInputMessageItem$Outbound = { type?: string | undefined; role: string | string | string; content: Array< - | (ResponseInputText$Outbound & { type: "input_text" }) - | (ResponseInputImage$Outbound & { type: "input_image" }) - | (ResponseInputAudio$Outbound & { type: "input_audio" }) - | (ResponseInputFile$Outbound & { type: "input_file" }) + | ResponseInputText$Outbound + | ResponseInputImage$Outbound + | ResponseInputFile$Outbound + | ResponseInputAudio$Outbound >; }; @@ -190,18 +182,10 @@ export const OpenResponsesInputMessageItem$outboundSchema: z.ZodType< ]), content: z.array( z.union([ - ResponseInputText$outboundSchema.and( - z.object({ type: z.literal("input_text") }), - ), - ResponseInputImage$outboundSchema.and( - z.object({ type: z.literal("input_image") }), - ), - ResponseInputAudio$outboundSchema.and( - z.object({ type: z.literal("input_audio") }), - ), - ResponseInputFile$outboundSchema.and( - z.object({ type: z.literal("input_file") }), - ), + ResponseInputText$outboundSchema, + ResponseInputImage$outboundSchema, + ResponseInputFile$outboundSchema, + ResponseInputAudio$outboundSchema, ]), ), }); diff --git a/src/models/openresponsesnonstreamingresponse.ts b/src/models/openresponsesnonstreamingresponse.ts index 7b5172f9..2467beaa 100644 --- a/src/models/openresponsesnonstreamingresponse.ts +++ b/src/models/openresponsesnonstreamingresponse.ts @@ -78,18 +78,11 @@ export const ObjectT = { } as const; export type ObjectT = ClosedEnum; -export const OpenResponsesNonStreamingResponseType = { - Function: "function", -} as const; -export type OpenResponsesNonStreamingResponseType = ClosedEnum< - typeof OpenResponsesNonStreamingResponseType ->; - /** * Function tool definition */ export type OpenResponsesNonStreamingResponseToolFunction = { - type: OpenResponsesNonStreamingResponseType; + type: "function"; name: string; description?: string | null | undefined; strict?: boolean | null | undefined; @@ -161,15 +154,10 @@ export type OpenResponsesNonStreamingResponse = { /** @internal */ export const ObjectT$inboundSchema: z.ZodEnum = z.enum(ObjectT); -/** @internal */ -export const OpenResponsesNonStreamingResponseType$inboundSchema: z.ZodEnum< - typeof OpenResponsesNonStreamingResponseType -> = z.enum(OpenResponsesNonStreamingResponseType); - /** @internal */ export const OpenResponsesNonStreamingResponseToolFunction$inboundSchema: z.ZodType = z.object({ - type: OpenResponsesNonStreamingResponseType$inboundSchema, + type: z.literal("function"), name: z.string(), description: z.nullable(z.string()).optional(), strict: z.nullable(z.boolean()).optional(), diff --git a/src/models/openresponsesreasoningdeltaevent.ts b/src/models/openresponsesreasoningdeltaevent.ts index ee3adf9e..82853c01 100644 --- a/src/models/openresponsesreasoningdeltaevent.ts +++ b/src/models/openresponsesreasoningdeltaevent.ts @@ -5,22 +5,14 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export const OpenResponsesReasoningDeltaEventType = { - ResponseReasoningTextDelta: "response.reasoning_text.delta", -} as const; -export type OpenResponsesReasoningDeltaEventType = ClosedEnum< - typeof OpenResponsesReasoningDeltaEventType ->; - /** * Event emitted when reasoning text delta is streamed */ export type OpenResponsesReasoningDeltaEvent = { - type: OpenResponsesReasoningDeltaEventType; + type: "response.reasoning_text.delta"; outputIndex: number; itemId: string; contentIndex: number; @@ -28,17 +20,12 @@ export type OpenResponsesReasoningDeltaEvent = { sequenceNumber: number; }; -/** @internal */ -export const OpenResponsesReasoningDeltaEventType$inboundSchema: z.ZodEnum< - typeof OpenResponsesReasoningDeltaEventType -> = z.enum(OpenResponsesReasoningDeltaEventType); - /** @internal */ export const OpenResponsesReasoningDeltaEvent$inboundSchema: z.ZodType< OpenResponsesReasoningDeltaEvent, unknown > = z.object({ - type: OpenResponsesReasoningDeltaEventType$inboundSchema, + type: z.literal("response.reasoning_text.delta"), output_index: z.number(), item_id: z.string(), content_index: z.number(), diff --git a/src/models/openresponsesreasoningdoneevent.ts b/src/models/openresponsesreasoningdoneevent.ts index a164feef..5d037417 100644 --- a/src/models/openresponsesreasoningdoneevent.ts +++ b/src/models/openresponsesreasoningdoneevent.ts @@ -5,22 +5,14 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export const OpenResponsesReasoningDoneEventType = { - ResponseReasoningTextDone: "response.reasoning_text.done", -} as const; -export type OpenResponsesReasoningDoneEventType = ClosedEnum< - typeof OpenResponsesReasoningDoneEventType ->; - /** * Event emitted when reasoning text streaming is complete */ export type OpenResponsesReasoningDoneEvent = { - type: OpenResponsesReasoningDoneEventType; + type: "response.reasoning_text.done"; outputIndex: number; itemId: string; contentIndex: number; @@ -28,17 +20,12 @@ export type OpenResponsesReasoningDoneEvent = { sequenceNumber: number; }; -/** @internal */ -export const OpenResponsesReasoningDoneEventType$inboundSchema: z.ZodEnum< - typeof OpenResponsesReasoningDoneEventType -> = z.enum(OpenResponsesReasoningDoneEventType); - /** @internal */ export const OpenResponsesReasoningDoneEvent$inboundSchema: z.ZodType< OpenResponsesReasoningDoneEvent, unknown > = z.object({ - type: OpenResponsesReasoningDoneEventType$inboundSchema, + type: z.literal("response.reasoning_text.done"), output_index: z.number(), item_id: z.string(), content_index: z.number(), diff --git a/src/models/openresponsesreasoningsummarypartaddedevent.ts b/src/models/openresponsesreasoningsummarypartaddedevent.ts index f6ecdca9..2aed51bb 100644 --- a/src/models/openresponsesreasoningsummarypartaddedevent.ts +++ b/src/models/openresponsesreasoningsummarypartaddedevent.ts @@ -5,7 +5,6 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; import { @@ -13,18 +12,11 @@ import { ReasoningSummaryText$inboundSchema, } from "./reasoningsummarytext.js"; -export const OpenResponsesReasoningSummaryPartAddedEventType = { - ResponseReasoningSummaryPartAdded: "response.reasoning_summary_part.added", -} as const; -export type OpenResponsesReasoningSummaryPartAddedEventType = ClosedEnum< - typeof OpenResponsesReasoningSummaryPartAddedEventType ->; - /** * Event emitted when a reasoning summary part is added */ export type OpenResponsesReasoningSummaryPartAddedEvent = { - type: OpenResponsesReasoningSummaryPartAddedEventType; + type: "response.reasoning_summary_part.added"; outputIndex: number; itemId: string; summaryIndex: number; @@ -32,16 +24,10 @@ export type OpenResponsesReasoningSummaryPartAddedEvent = { sequenceNumber: number; }; -/** @internal */ -export const OpenResponsesReasoningSummaryPartAddedEventType$inboundSchema: - z.ZodEnum = z.enum( - OpenResponsesReasoningSummaryPartAddedEventType, - ); - /** @internal */ export const OpenResponsesReasoningSummaryPartAddedEvent$inboundSchema: z.ZodType = z.object({ - type: OpenResponsesReasoningSummaryPartAddedEventType$inboundSchema, + type: z.literal("response.reasoning_summary_part.added"), output_index: z.number(), item_id: z.string(), summary_index: z.number(), diff --git a/src/models/openresponsesreasoningsummarytextdeltaevent.ts b/src/models/openresponsesreasoningsummarytextdeltaevent.ts index a7e07d74..c0160cd6 100644 --- a/src/models/openresponsesreasoningsummarytextdeltaevent.ts +++ b/src/models/openresponsesreasoningsummarytextdeltaevent.ts @@ -5,22 +5,14 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export const OpenResponsesReasoningSummaryTextDeltaEventType = { - ResponseReasoningSummaryTextDelta: "response.reasoning_summary_text.delta", -} as const; -export type OpenResponsesReasoningSummaryTextDeltaEventType = ClosedEnum< - typeof OpenResponsesReasoningSummaryTextDeltaEventType ->; - /** * Event emitted when reasoning summary text delta is streamed */ export type OpenResponsesReasoningSummaryTextDeltaEvent = { - type: OpenResponsesReasoningSummaryTextDeltaEventType; + type: "response.reasoning_summary_text.delta"; itemId: string; outputIndex: number; summaryIndex: number; @@ -28,16 +20,10 @@ export type OpenResponsesReasoningSummaryTextDeltaEvent = { sequenceNumber: number; }; -/** @internal */ -export const OpenResponsesReasoningSummaryTextDeltaEventType$inboundSchema: - z.ZodEnum = z.enum( - OpenResponsesReasoningSummaryTextDeltaEventType, - ); - /** @internal */ export const OpenResponsesReasoningSummaryTextDeltaEvent$inboundSchema: z.ZodType = z.object({ - type: OpenResponsesReasoningSummaryTextDeltaEventType$inboundSchema, + type: z.literal("response.reasoning_summary_text.delta"), item_id: z.string(), output_index: z.number(), summary_index: z.number(), diff --git a/src/models/openresponsesreasoningsummarytextdoneevent.ts b/src/models/openresponsesreasoningsummarytextdoneevent.ts index ee5782dd..cced6a23 100644 --- a/src/models/openresponsesreasoningsummarytextdoneevent.ts +++ b/src/models/openresponsesreasoningsummarytextdoneevent.ts @@ -5,22 +5,14 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export const OpenResponsesReasoningSummaryTextDoneEventType = { - ResponseReasoningSummaryTextDone: "response.reasoning_summary_text.done", -} as const; -export type OpenResponsesReasoningSummaryTextDoneEventType = ClosedEnum< - typeof OpenResponsesReasoningSummaryTextDoneEventType ->; - /** * Event emitted when reasoning summary text streaming is complete */ export type OpenResponsesReasoningSummaryTextDoneEvent = { - type: OpenResponsesReasoningSummaryTextDoneEventType; + type: "response.reasoning_summary_text.done"; itemId: string; outputIndex: number; summaryIndex: number; @@ -28,16 +20,10 @@ export type OpenResponsesReasoningSummaryTextDoneEvent = { sequenceNumber: number; }; -/** @internal */ -export const OpenResponsesReasoningSummaryTextDoneEventType$inboundSchema: - z.ZodEnum = z.enum( - OpenResponsesReasoningSummaryTextDoneEventType, - ); - /** @internal */ export const OpenResponsesReasoningSummaryTextDoneEvent$inboundSchema: z.ZodType = z.object({ - type: OpenResponsesReasoningSummaryTextDoneEventType$inboundSchema, + type: z.literal("response.reasoning_summary_text.done"), item_id: z.string(), output_index: z.number(), summary_index: z.number(), diff --git a/src/models/openresponsesrequest.ts b/src/models/openresponsesrequest.ts index 142399b9..88b4583b 100644 --- a/src/models/openresponsesrequest.ts +++ b/src/models/openresponsesrequest.ts @@ -63,18 +63,11 @@ import { ProviderName, ProviderName$outboundSchema } from "./providername.js"; import { ProviderSort, ProviderSort$outboundSchema } from "./providersort.js"; import { Quantization, Quantization$outboundSchema } from "./quantization.js"; -export const OpenResponsesRequestType = { - Function: "function", -} as const; -export type OpenResponsesRequestType = ClosedEnum< - typeof OpenResponsesRequestType ->; - /** * Function tool definition */ export type OpenResponsesRequestToolFunction = { - type: OpenResponsesRequestType; + type: "function"; name: string; description?: string | null | undefined; strict?: boolean | null | undefined; @@ -90,12 +83,8 @@ export type OpenResponsesRequestToolUnion = export const ServiceTier = { Auto: "auto", - Default: "default", - Flex: "flex", - Priority: "priority", - Scale: "scale", } as const; -export type ServiceTier = OpenEnum; +export type ServiceTier = ClosedEnum; export const Truncation = { Auto: "auto", @@ -194,10 +183,9 @@ export type Provider = { maxPrice?: MaxPrice | undefined; }; -export const IdFileParser = { - FileParser: "file-parser", -} as const; -export type IdFileParser = ClosedEnum; +export type PluginResponseHealing = { + id: "response-healing"; +}; export const PdfEngine = { MistralOcr: "mistral-ocr", @@ -211,16 +199,11 @@ export type Pdf = { }; export type PluginFileParser = { - id: IdFileParser; + id: "file-parser"; maxFiles?: number | undefined; pdf?: Pdf | undefined; }; -export const IdWeb = { - Web: "web", -} as const; -export type IdWeb = ClosedEnum; - export const Engine = { Native: "native", Exa: "exa", @@ -228,22 +211,21 @@ export const Engine = { export type Engine = OpenEnum; export type PluginWeb = { - id: IdWeb; + id: "web"; maxResults?: number | undefined; searchPrompt?: string | undefined; engine?: Engine | undefined; }; -export const IdModeration = { - Moderation: "moderation", -} as const; -export type IdModeration = ClosedEnum; - export type PluginModeration = { - id: IdModeration; + id: "moderation"; }; -export type Plugin = PluginModeration | PluginWeb | PluginFileParser; +export type Plugin = + | PluginModeration + | PluginWeb + | PluginFileParser + | PluginResponseHealing; /** * Request schema for Responses endpoint @@ -289,8 +271,8 @@ export type OpenResponsesRequest = { include?: Array | null | undefined; background?: boolean | null | undefined; safetyIdentifier?: string | null | undefined; - store?: boolean | null | undefined; - serviceTier?: ServiceTier | null | undefined; + store?: false | undefined; + serviceTier?: ServiceTier | undefined; truncation?: Truncation | null | undefined; stream?: boolean | undefined; /** @@ -300,21 +282,20 @@ export type OpenResponsesRequest = { /** * Plugins you want to enable for this request, including their settings. */ - plugins?: Array | undefined; + plugins?: + | Array< + PluginModeration | PluginWeb | PluginFileParser | PluginResponseHealing + > + | undefined; /** * A unique identifier representing your end-user, which helps distinguish between different users of your app. This allows your app to identify specific users in case of abuse reports, preventing your entire app from being affected by the actions of individual users. Maximum of 128 characters. */ user?: string | undefined; }; -/** @internal */ -export const OpenResponsesRequestType$outboundSchema: z.ZodEnum< - typeof OpenResponsesRequestType -> = z.enum(OpenResponsesRequestType); - /** @internal */ export type OpenResponsesRequestToolFunction$Outbound = { - type: string; + type: "function"; name: string; description?: string | null | undefined; strict?: boolean | null | undefined; @@ -326,7 +307,7 @@ export const OpenResponsesRequestToolFunction$outboundSchema: z.ZodType< OpenResponsesRequestToolFunction$Outbound, OpenResponsesRequestToolFunction > = z.object({ - type: OpenResponsesRequestType$outboundSchema, + type: z.literal("function"), name: z.string(), description: z.nullable(z.string()).optional(), strict: z.nullable(z.boolean()).optional(), @@ -374,8 +355,9 @@ export function openResponsesRequestToolUnionToJSON( } /** @internal */ -export const ServiceTier$outboundSchema: z.ZodType = - openEnums.outboundSchema(ServiceTier); +export const ServiceTier$outboundSchema: z.ZodEnum = z.enum( + ServiceTier, +); /** @internal */ export const Truncation$outboundSchema: z.ZodType = @@ -491,8 +473,25 @@ export function providerToJSON(provider: Provider): string { } /** @internal */ -export const IdFileParser$outboundSchema: z.ZodEnum = z - .enum(IdFileParser); +export type PluginResponseHealing$Outbound = { + id: "response-healing"; +}; + +/** @internal */ +export const PluginResponseHealing$outboundSchema: z.ZodType< + PluginResponseHealing$Outbound, + PluginResponseHealing +> = z.object({ + id: z.literal("response-healing"), +}); + +export function pluginResponseHealingToJSON( + pluginResponseHealing: PluginResponseHealing, +): string { + return JSON.stringify( + PluginResponseHealing$outboundSchema.parse(pluginResponseHealing), + ); +} /** @internal */ export const PdfEngine$outboundSchema: z.ZodType = openEnums @@ -514,7 +513,7 @@ export function pdfToJSON(pdf: Pdf): string { /** @internal */ export type PluginFileParser$Outbound = { - id: string; + id: "file-parser"; max_files?: number | undefined; pdf?: Pdf$Outbound | undefined; }; @@ -524,7 +523,7 @@ export const PluginFileParser$outboundSchema: z.ZodType< PluginFileParser$Outbound, PluginFileParser > = z.object({ - id: IdFileParser$outboundSchema, + id: z.literal("file-parser"), maxFiles: z.number().optional(), pdf: z.lazy(() => Pdf$outboundSchema).optional(), }).transform((v) => { @@ -541,16 +540,13 @@ export function pluginFileParserToJSON( ); } -/** @internal */ -export const IdWeb$outboundSchema: z.ZodEnum = z.enum(IdWeb); - /** @internal */ export const Engine$outboundSchema: z.ZodType = openEnums .outboundSchema(Engine); /** @internal */ export type PluginWeb$Outbound = { - id: string; + id: "web"; max_results?: number | undefined; search_prompt?: string | undefined; engine?: string | undefined; @@ -561,7 +557,7 @@ export const PluginWeb$outboundSchema: z.ZodType< PluginWeb$Outbound, PluginWeb > = z.object({ - id: IdWeb$outboundSchema, + id: z.literal("web"), maxResults: z.number().optional(), searchPrompt: z.string().optional(), engine: Engine$outboundSchema.optional(), @@ -576,13 +572,9 @@ export function pluginWebToJSON(pluginWeb: PluginWeb): string { return JSON.stringify(PluginWeb$outboundSchema.parse(pluginWeb)); } -/** @internal */ -export const IdModeration$outboundSchema: z.ZodEnum = z - .enum(IdModeration); - /** @internal */ export type PluginModeration$Outbound = { - id: string; + id: "moderation"; }; /** @internal */ @@ -590,7 +582,7 @@ export const PluginModeration$outboundSchema: z.ZodType< PluginModeration$Outbound, PluginModeration > = z.object({ - id: IdModeration$outboundSchema, + id: z.literal("moderation"), }); export function pluginModerationToJSON( @@ -605,7 +597,8 @@ export function pluginModerationToJSON( export type Plugin$Outbound = | PluginModeration$Outbound | PluginWeb$Outbound - | PluginFileParser$Outbound; + | PluginFileParser$Outbound + | PluginResponseHealing$Outbound; /** @internal */ export const Plugin$outboundSchema: z.ZodType = z @@ -613,6 +606,7 @@ export const Plugin$outboundSchema: z.ZodType = z z.lazy(() => PluginModeration$outboundSchema), z.lazy(() => PluginWeb$outboundSchema), z.lazy(() => PluginFileParser$outboundSchema), + z.lazy(() => PluginResponseHealing$outboundSchema), ]); export function pluginToJSON(plugin: Plugin): string { @@ -649,14 +643,17 @@ export type OpenResponsesRequest$Outbound = { include?: Array | null | undefined; background?: boolean | null | undefined; safety_identifier?: string | null | undefined; - store?: boolean | null | undefined; - service_tier?: string | null | undefined; + store: false; + service_tier: string; truncation?: string | null | undefined; stream: boolean; provider?: Provider$Outbound | null | undefined; plugins?: | Array< - PluginModeration$Outbound | PluginWeb$Outbound | PluginFileParser$Outbound + | PluginModeration$Outbound + | PluginWeb$Outbound + | PluginFileParser$Outbound + | PluginResponseHealing$Outbound > | undefined; user?: string | undefined; @@ -696,8 +693,8 @@ export const OpenResponsesRequest$outboundSchema: z.ZodType< .optional(), background: z.nullable(z.boolean()).optional(), safetyIdentifier: z.nullable(z.string()).optional(), - store: z.nullable(z.boolean()).optional(), - serviceTier: z.nullable(ServiceTier$outboundSchema).optional(), + store: z.literal(false).default(false as const), + serviceTier: ServiceTier$outboundSchema.default("auto"), truncation: z.nullable(Truncation$outboundSchema).optional(), stream: z.boolean().default(false), provider: z.nullable(z.lazy(() => Provider$outboundSchema)).optional(), @@ -706,6 +703,7 @@ export const OpenResponsesRequest$outboundSchema: z.ZodType< z.lazy(() => PluginModeration$outboundSchema), z.lazy(() => PluginWeb$outboundSchema), z.lazy(() => PluginFileParser$outboundSchema), + z.lazy(() => PluginResponseHealing$outboundSchema), ]), ).optional(), user: z.string().optional(), diff --git a/src/models/openresponsesstreamevent.ts b/src/models/openresponsesstreamevent.ts index 4de1d671..f38f9125 100644 --- a/src/models/openresponsesstreamevent.ts +++ b/src/models/openresponsesstreamevent.ts @@ -5,7 +5,6 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; import { @@ -81,18 +80,11 @@ import { ResponsesOutputItem$inboundSchema, } from "./responsesoutputitem.js"; -export const TypeResponseReasoningSummaryPartDone = { - ResponseReasoningSummaryPartDone: "response.reasoning_summary_part.done", -} as const; -export type TypeResponseReasoningSummaryPartDone = ClosedEnum< - typeof TypeResponseReasoningSummaryPartDone ->; - /** * Event emitted when a reasoning summary part is complete */ export type OpenResponsesStreamEventResponseReasoningSummaryPartDone = { - type: TypeResponseReasoningSummaryPartDone; + type: "response.reasoning_summary_part.done"; outputIndex: number; itemId: string; summaryIndex: number; @@ -100,18 +92,11 @@ export type OpenResponsesStreamEventResponseReasoningSummaryPartDone = { sequenceNumber: number; }; -export const TypeResponseFunctionCallArgumentsDone = { - ResponseFunctionCallArgumentsDone: "response.function_call_arguments.done", -} as const; -export type TypeResponseFunctionCallArgumentsDone = ClosedEnum< - typeof TypeResponseFunctionCallArgumentsDone ->; - /** * Event emitted when function call arguments streaming is complete */ export type OpenResponsesStreamEventResponseFunctionCallArgumentsDone = { - type: TypeResponseFunctionCallArgumentsDone; + type: "response.function_call_arguments.done"; itemId: string; outputIndex: number; name: string; @@ -119,36 +104,22 @@ export type OpenResponsesStreamEventResponseFunctionCallArgumentsDone = { sequenceNumber: number; }; -export const TypeResponseFunctionCallArgumentsDelta = { - ResponseFunctionCallArgumentsDelta: "response.function_call_arguments.delta", -} as const; -export type TypeResponseFunctionCallArgumentsDelta = ClosedEnum< - typeof TypeResponseFunctionCallArgumentsDelta ->; - /** * Event emitted when function call arguments are being streamed */ export type OpenResponsesStreamEventResponseFunctionCallArgumentsDelta = { - type: TypeResponseFunctionCallArgumentsDelta; + type: "response.function_call_arguments.delta"; itemId: string; outputIndex: number; delta: string; sequenceNumber: number; }; -export const TypeResponseOutputTextAnnotationAdded = { - ResponseOutputTextAnnotationAdded: "response.output_text.annotation.added", -} as const; -export type TypeResponseOutputTextAnnotationAdded = ClosedEnum< - typeof TypeResponseOutputTextAnnotationAdded ->; - /** * Event emitted when a text annotation is added to output */ export type OpenResponsesStreamEventResponseOutputTextAnnotationAdded = { - type: TypeResponseOutputTextAnnotationAdded; + type: "response.output_text.annotation.added"; outputIndex: number; itemId: string; contentIndex: number; @@ -157,18 +128,11 @@ export type OpenResponsesStreamEventResponseOutputTextAnnotationAdded = { annotation: OpenAIResponsesAnnotation; }; -export const TypeResponseRefusalDone = { - ResponseRefusalDone: "response.refusal.done", -} as const; -export type TypeResponseRefusalDone = ClosedEnum< - typeof TypeResponseRefusalDone ->; - /** * Event emitted when refusal streaming is complete */ export type OpenResponsesStreamEventResponseRefusalDone = { - type: TypeResponseRefusalDone; + type: "response.refusal.done"; outputIndex: number; itemId: string; contentIndex: number; @@ -176,18 +140,11 @@ export type OpenResponsesStreamEventResponseRefusalDone = { sequenceNumber: number; }; -export const TypeResponseRefusalDelta = { - ResponseRefusalDelta: "response.refusal.delta", -} as const; -export type TypeResponseRefusalDelta = ClosedEnum< - typeof TypeResponseRefusalDelta ->; - /** * Event emitted when a refusal delta is streamed */ export type OpenResponsesStreamEventResponseRefusalDelta = { - type: TypeResponseRefusalDelta; + type: "response.refusal.delta"; outputIndex: number; itemId: string; contentIndex: number; @@ -195,18 +152,11 @@ export type OpenResponsesStreamEventResponseRefusalDelta = { sequenceNumber: number; }; -export const TypeResponseOutputTextDone = { - ResponseOutputTextDone: "response.output_text.done", -} as const; -export type TypeResponseOutputTextDone = ClosedEnum< - typeof TypeResponseOutputTextDone ->; - /** * Event emitted when text streaming is complete */ export type OpenResponsesStreamEventResponseOutputTextDone = { - type: TypeResponseOutputTextDone; + type: "response.output_text.done"; outputIndex: number; itemId: string; contentIndex: number; @@ -215,18 +165,11 @@ export type OpenResponsesStreamEventResponseOutputTextDone = { logprobs: Array; }; -export const TypeResponseOutputTextDelta = { - ResponseOutputTextDelta: "response.output_text.delta", -} as const; -export type TypeResponseOutputTextDelta = ClosedEnum< - typeof TypeResponseOutputTextDelta ->; - /** * Event emitted when a text delta is streamed */ export type OpenResponsesStreamEventResponseOutputTextDelta = { - type: TypeResponseOutputTextDelta; + type: "response.output_text.delta"; logprobs: Array; outputIndex: number; itemId: string; @@ -235,72 +178,51 @@ export type OpenResponsesStreamEventResponseOutputTextDelta = { sequenceNumber: number; }; -export const TypeResponseContentPartDone = { - ResponseContentPartDone: "response.content_part.done", -} as const; -export type TypeResponseContentPartDone = ClosedEnum< - typeof TypeResponseContentPartDone ->; - export type Part2 = | ResponseOutputText - | ReasoningTextContent + | (ReasoningTextContent & { type: "reasoning_text" }) | OpenAIResponsesRefusalContent; /** * Event emitted when a content part is complete */ export type OpenResponsesStreamEventResponseContentPartDone = { - type: TypeResponseContentPartDone; + type: "response.content_part.done"; outputIndex: number; itemId: string; contentIndex: number; part: | ResponseOutputText - | ReasoningTextContent + | (ReasoningTextContent & { type: "reasoning_text" }) | OpenAIResponsesRefusalContent; sequenceNumber: number; }; -export const TypeResponseContentPartAdded = { - ResponseContentPartAdded: "response.content_part.added", -} as const; -export type TypeResponseContentPartAdded = ClosedEnum< - typeof TypeResponseContentPartAdded ->; - export type Part1 = | ResponseOutputText - | ReasoningTextContent + | (ReasoningTextContent & { type: "reasoning_text" }) | OpenAIResponsesRefusalContent; /** * Event emitted when a new content part is added to an output item */ export type OpenResponsesStreamEventResponseContentPartAdded = { - type: TypeResponseContentPartAdded; + type: "response.content_part.added"; outputIndex: number; itemId: string; contentIndex: number; part: | ResponseOutputText - | ReasoningTextContent + | (ReasoningTextContent & { type: "reasoning_text" }) | OpenAIResponsesRefusalContent; sequenceNumber: number; }; -export const TypeResponseOutputItemDone = { - ResponseOutputItemDone: "response.output_item.done", -} as const; -export type TypeResponseOutputItemDone = ClosedEnum< - typeof TypeResponseOutputItemDone ->; - /** * Event emitted when an output item is complete */ export type OpenResponsesStreamEventResponseOutputItemDone = { - type: TypeResponseOutputItemDone; + type: "response.output_item.done"; outputIndex: number; /** * An output item from the response @@ -309,18 +231,11 @@ export type OpenResponsesStreamEventResponseOutputItemDone = { sequenceNumber: number; }; -export const TypeResponseOutputItemAdded = { - ResponseOutputItemAdded: "response.output_item.added", -} as const; -export type TypeResponseOutputItemAdded = ClosedEnum< - typeof TypeResponseOutputItemAdded ->; - /** * Event emitted when a new output item is added to the response */ export type OpenResponsesStreamEventResponseOutputItemAdded = { - type: TypeResponseOutputItemAdded; + type: "response.output_item.added"; outputIndex: number; /** * An output item from the response @@ -329,16 +244,11 @@ export type OpenResponsesStreamEventResponseOutputItemAdded = { sequenceNumber: number; }; -export const TypeResponseFailed = { - ResponseFailed: "response.failed", -} as const; -export type TypeResponseFailed = ClosedEnum; - /** * Event emitted when a response has failed */ export type OpenResponsesStreamEventResponseFailed = { - type: TypeResponseFailed; + type: "response.failed"; /** * Complete non-streaming response from the Responses API */ @@ -346,16 +256,11 @@ export type OpenResponsesStreamEventResponseFailed = { sequenceNumber: number; }; -export const TypeResponseIncomplete = { - ResponseIncomplete: "response.incomplete", -} as const; -export type TypeResponseIncomplete = ClosedEnum; - /** * Event emitted when a response is incomplete */ export type OpenResponsesStreamEventResponseIncomplete = { - type: TypeResponseIncomplete; + type: "response.incomplete"; /** * Complete non-streaming response from the Responses API */ @@ -363,16 +268,11 @@ export type OpenResponsesStreamEventResponseIncomplete = { sequenceNumber: number; }; -export const TypeResponseCompleted = { - ResponseCompleted: "response.completed", -} as const; -export type TypeResponseCompleted = ClosedEnum; - /** * Event emitted when a response has completed successfully */ export type OpenResponsesStreamEventResponseCompleted = { - type: TypeResponseCompleted; + type: "response.completed"; /** * Complete non-streaming response from the Responses API */ @@ -380,16 +280,11 @@ export type OpenResponsesStreamEventResponseCompleted = { sequenceNumber: number; }; -export const TypeResponseInProgress = { - ResponseInProgress: "response.in_progress", -} as const; -export type TypeResponseInProgress = ClosedEnum; - /** * Event emitted when a response is in progress */ export type OpenResponsesStreamEventResponseInProgress = { - type: TypeResponseInProgress; + type: "response.in_progress"; /** * Complete non-streaming response from the Responses API */ @@ -397,16 +292,11 @@ export type OpenResponsesStreamEventResponseInProgress = { sequenceNumber: number; }; -export const TypeResponseCreated = { - ResponseCreated: "response.created", -} as const; -export type TypeResponseCreated = ClosedEnum; - /** * Event emitted when a response is created */ export type OpenResponsesStreamEventResponseCreated = { - type: TypeResponseCreated; + type: "response.created"; /** * Complete non-streaming response from the Responses API */ @@ -418,13 +308,22 @@ export type OpenResponsesStreamEventResponseCreated = { * Union of all possible event types emitted during response streaming */ export type OpenResponsesStreamEvent = - | OpenResponsesStreamEventResponseOutputTextDelta - | OpenResponsesStreamEventResponseOutputTextDone - | OpenResponsesStreamEventResponseOutputTextAnnotationAdded + | OpenResponsesStreamEventResponseCreated + | OpenResponsesStreamEventResponseInProgress + | OpenResponsesStreamEventResponseCompleted + | OpenResponsesStreamEventResponseIncomplete + | OpenResponsesStreamEventResponseFailed + | OpenResponsesErrorEvent + | OpenResponsesStreamEventResponseOutputItemAdded + | OpenResponsesStreamEventResponseOutputItemDone | OpenResponsesStreamEventResponseContentPartAdded | OpenResponsesStreamEventResponseContentPartDone + | OpenResponsesStreamEventResponseOutputTextDelta + | OpenResponsesStreamEventResponseOutputTextDone | OpenResponsesStreamEventResponseRefusalDelta | OpenResponsesStreamEventResponseRefusalDone + | OpenResponsesStreamEventResponseOutputTextAnnotationAdded + | OpenResponsesStreamEventResponseFunctionCallArgumentsDelta | OpenResponsesStreamEventResponseFunctionCallArgumentsDone | OpenResponsesReasoningDeltaEvent | OpenResponsesReasoningDoneEvent @@ -432,30 +331,16 @@ export type OpenResponsesStreamEvent = | OpenResponsesStreamEventResponseReasoningSummaryPartDone | OpenResponsesReasoningSummaryTextDeltaEvent | OpenResponsesReasoningSummaryTextDoneEvent - | OpenResponsesImageGenCallPartialImage - | OpenResponsesErrorEvent - | OpenResponsesStreamEventResponseFunctionCallArgumentsDelta - | OpenResponsesStreamEventResponseOutputItemAdded - | OpenResponsesStreamEventResponseOutputItemDone | OpenResponsesImageGenCallInProgress | OpenResponsesImageGenCallGenerating - | OpenResponsesImageGenCallCompleted - | OpenResponsesStreamEventResponseCreated - | OpenResponsesStreamEventResponseInProgress - | OpenResponsesStreamEventResponseCompleted - | OpenResponsesStreamEventResponseIncomplete - | OpenResponsesStreamEventResponseFailed; - -/** @internal */ -export const TypeResponseReasoningSummaryPartDone$inboundSchema: z.ZodEnum< - typeof TypeResponseReasoningSummaryPartDone -> = z.enum(TypeResponseReasoningSummaryPartDone); + | OpenResponsesImageGenCallPartialImage + | OpenResponsesImageGenCallCompleted; /** @internal */ export const OpenResponsesStreamEventResponseReasoningSummaryPartDone$inboundSchema: z.ZodType = z.object({ - type: TypeResponseReasoningSummaryPartDone$inboundSchema, + type: z.literal("response.reasoning_summary_part.done"), output_index: z.number(), item_id: z.string(), summary_index: z.number(), @@ -485,18 +370,13 @@ export function openResponsesStreamEventResponseReasoningSummaryPartDoneFromJSON ); } -/** @internal */ -export const TypeResponseFunctionCallArgumentsDone$inboundSchema: z.ZodEnum< - typeof TypeResponseFunctionCallArgumentsDone -> = z.enum(TypeResponseFunctionCallArgumentsDone); - /** @internal */ export const OpenResponsesStreamEventResponseFunctionCallArgumentsDone$inboundSchema: z.ZodType< OpenResponsesStreamEventResponseFunctionCallArgumentsDone, unknown > = z.object({ - type: TypeResponseFunctionCallArgumentsDone$inboundSchema, + type: z.literal("response.function_call_arguments.done"), item_id: z.string(), output_index: z.number(), name: z.string(), @@ -525,18 +405,13 @@ export function openResponsesStreamEventResponseFunctionCallArgumentsDoneFromJSO ); } -/** @internal */ -export const TypeResponseFunctionCallArgumentsDelta$inboundSchema: z.ZodEnum< - typeof TypeResponseFunctionCallArgumentsDelta -> = z.enum(TypeResponseFunctionCallArgumentsDelta); - /** @internal */ export const OpenResponsesStreamEventResponseFunctionCallArgumentsDelta$inboundSchema: z.ZodType< OpenResponsesStreamEventResponseFunctionCallArgumentsDelta, unknown > = z.object({ - type: TypeResponseFunctionCallArgumentsDelta$inboundSchema, + type: z.literal("response.function_call_arguments.delta"), item_id: z.string(), output_index: z.number(), delta: z.string(), @@ -564,18 +439,13 @@ export function openResponsesStreamEventResponseFunctionCallArgumentsDeltaFromJS ); } -/** @internal */ -export const TypeResponseOutputTextAnnotationAdded$inboundSchema: z.ZodEnum< - typeof TypeResponseOutputTextAnnotationAdded -> = z.enum(TypeResponseOutputTextAnnotationAdded); - /** @internal */ export const OpenResponsesStreamEventResponseOutputTextAnnotationAdded$inboundSchema: z.ZodType< OpenResponsesStreamEventResponseOutputTextAnnotationAdded, unknown > = z.object({ - type: TypeResponseOutputTextAnnotationAdded$inboundSchema, + type: z.literal("response.output_text.annotation.added"), output_index: z.number(), item_id: z.string(), content_index: z.number(), @@ -607,15 +477,10 @@ export function openResponsesStreamEventResponseOutputTextAnnotationAddedFromJSO ); } -/** @internal */ -export const TypeResponseRefusalDone$inboundSchema: z.ZodEnum< - typeof TypeResponseRefusalDone -> = z.enum(TypeResponseRefusalDone); - /** @internal */ export const OpenResponsesStreamEventResponseRefusalDone$inboundSchema: z.ZodType = z.object({ - type: TypeResponseRefusalDone$inboundSchema, + type: z.literal("response.refusal.done"), output_index: z.number(), item_id: z.string(), content_index: z.number(), @@ -646,15 +511,10 @@ export function openResponsesStreamEventResponseRefusalDoneFromJSON( ); } -/** @internal */ -export const TypeResponseRefusalDelta$inboundSchema: z.ZodEnum< - typeof TypeResponseRefusalDelta -> = z.enum(TypeResponseRefusalDelta); - /** @internal */ export const OpenResponsesStreamEventResponseRefusalDelta$inboundSchema: z.ZodType = z.object({ - type: TypeResponseRefusalDelta$inboundSchema, + type: z.literal("response.refusal.delta"), output_index: z.number(), item_id: z.string(), content_index: z.number(), @@ -685,16 +545,11 @@ export function openResponsesStreamEventResponseRefusalDeltaFromJSON( ); } -/** @internal */ -export const TypeResponseOutputTextDone$inboundSchema: z.ZodEnum< - typeof TypeResponseOutputTextDone -> = z.enum(TypeResponseOutputTextDone); - /** @internal */ export const OpenResponsesStreamEventResponseOutputTextDone$inboundSchema: z.ZodType = z.object( { - type: TypeResponseOutputTextDone$inboundSchema, + type: z.literal("response.output_text.done"), output_index: z.number(), item_id: z.string(), content_index: z.number(), @@ -727,16 +582,11 @@ export function openResponsesStreamEventResponseOutputTextDoneFromJSON( ); } -/** @internal */ -export const TypeResponseOutputTextDelta$inboundSchema: z.ZodEnum< - typeof TypeResponseOutputTextDelta -> = z.enum(TypeResponseOutputTextDelta); - /** @internal */ export const OpenResponsesStreamEventResponseOutputTextDelta$inboundSchema: z.ZodType = z .object({ - type: TypeResponseOutputTextDelta$inboundSchema, + type: z.literal("response.output_text.delta"), logprobs: z.array(OpenResponsesLogProbs$inboundSchema), output_index: z.number(), item_id: z.string(), @@ -768,15 +618,12 @@ export function openResponsesStreamEventResponseOutputTextDeltaFromJSON( ); } -/** @internal */ -export const TypeResponseContentPartDone$inboundSchema: z.ZodEnum< - typeof TypeResponseContentPartDone -> = z.enum(TypeResponseContentPartDone); - /** @internal */ export const Part2$inboundSchema: z.ZodType = z.union([ ResponseOutputText$inboundSchema, - ReasoningTextContent$inboundSchema, + ReasoningTextContent$inboundSchema.and( + z.object({ type: z.literal("reasoning_text") }), + ), OpenAIResponsesRefusalContent$inboundSchema, ]); @@ -794,13 +641,15 @@ export function part2FromJSON( export const OpenResponsesStreamEventResponseContentPartDone$inboundSchema: z.ZodType = z .object({ - type: TypeResponseContentPartDone$inboundSchema, + type: z.literal("response.content_part.done"), output_index: z.number(), item_id: z.string(), content_index: z.number(), part: z.union([ ResponseOutputText$inboundSchema, - ReasoningTextContent$inboundSchema, + ReasoningTextContent$inboundSchema.and( + z.object({ type: z.literal("reasoning_text") }), + ), OpenAIResponsesRefusalContent$inboundSchema, ]), sequence_number: z.number(), @@ -829,15 +678,12 @@ export function openResponsesStreamEventResponseContentPartDoneFromJSON( ); } -/** @internal */ -export const TypeResponseContentPartAdded$inboundSchema: z.ZodEnum< - typeof TypeResponseContentPartAdded -> = z.enum(TypeResponseContentPartAdded); - /** @internal */ export const Part1$inboundSchema: z.ZodType = z.union([ ResponseOutputText$inboundSchema, - ReasoningTextContent$inboundSchema, + ReasoningTextContent$inboundSchema.and( + z.object({ type: z.literal("reasoning_text") }), + ), OpenAIResponsesRefusalContent$inboundSchema, ]); @@ -855,13 +701,15 @@ export function part1FromJSON( export const OpenResponsesStreamEventResponseContentPartAdded$inboundSchema: z.ZodType = z .object({ - type: TypeResponseContentPartAdded$inboundSchema, + type: z.literal("response.content_part.added"), output_index: z.number(), item_id: z.string(), content_index: z.number(), part: z.union([ ResponseOutputText$inboundSchema, - ReasoningTextContent$inboundSchema, + ReasoningTextContent$inboundSchema.and( + z.object({ type: z.literal("reasoning_text") }), + ), OpenAIResponsesRefusalContent$inboundSchema, ]), sequence_number: z.number(), @@ -890,16 +738,11 @@ export function openResponsesStreamEventResponseContentPartAddedFromJSON( ); } -/** @internal */ -export const TypeResponseOutputItemDone$inboundSchema: z.ZodEnum< - typeof TypeResponseOutputItemDone -> = z.enum(TypeResponseOutputItemDone); - /** @internal */ export const OpenResponsesStreamEventResponseOutputItemDone$inboundSchema: z.ZodType = z.object( { - type: TypeResponseOutputItemDone$inboundSchema, + type: z.literal("response.output_item.done"), output_index: z.number(), item: ResponsesOutputItem$inboundSchema, sequence_number: z.number(), @@ -927,16 +770,11 @@ export function openResponsesStreamEventResponseOutputItemDoneFromJSON( ); } -/** @internal */ -export const TypeResponseOutputItemAdded$inboundSchema: z.ZodEnum< - typeof TypeResponseOutputItemAdded -> = z.enum(TypeResponseOutputItemAdded); - /** @internal */ export const OpenResponsesStreamEventResponseOutputItemAdded$inboundSchema: z.ZodType = z .object({ - type: TypeResponseOutputItemAdded$inboundSchema, + type: z.literal("response.output_item.added"), output_index: z.number(), item: ResponsesOutputItem$inboundSchema, sequence_number: z.number(), @@ -963,17 +801,12 @@ export function openResponsesStreamEventResponseOutputItemAddedFromJSON( ); } -/** @internal */ -export const TypeResponseFailed$inboundSchema: z.ZodEnum< - typeof TypeResponseFailed -> = z.enum(TypeResponseFailed); - /** @internal */ export const OpenResponsesStreamEventResponseFailed$inboundSchema: z.ZodType< OpenResponsesStreamEventResponseFailed, unknown > = z.object({ - type: TypeResponseFailed$inboundSchema, + type: z.literal("response.failed"), response: OpenResponsesNonStreamingResponse$inboundSchema, sequence_number: z.number(), }).transform((v) => { @@ -993,15 +826,10 @@ export function openResponsesStreamEventResponseFailedFromJSON( ); } -/** @internal */ -export const TypeResponseIncomplete$inboundSchema: z.ZodEnum< - typeof TypeResponseIncomplete -> = z.enum(TypeResponseIncomplete); - /** @internal */ export const OpenResponsesStreamEventResponseIncomplete$inboundSchema: z.ZodType = z.object({ - type: TypeResponseIncomplete$inboundSchema, + type: z.literal("response.incomplete"), response: OpenResponsesNonStreamingResponse$inboundSchema, sequence_number: z.number(), }).transform((v) => { @@ -1026,17 +854,12 @@ export function openResponsesStreamEventResponseIncompleteFromJSON( ); } -/** @internal */ -export const TypeResponseCompleted$inboundSchema: z.ZodEnum< - typeof TypeResponseCompleted -> = z.enum(TypeResponseCompleted); - /** @internal */ export const OpenResponsesStreamEventResponseCompleted$inboundSchema: z.ZodType< OpenResponsesStreamEventResponseCompleted, unknown > = z.object({ - type: TypeResponseCompleted$inboundSchema, + type: z.literal("response.completed"), response: OpenResponsesNonStreamingResponse$inboundSchema, sequence_number: z.number(), }).transform((v) => { @@ -1061,15 +884,10 @@ export function openResponsesStreamEventResponseCompletedFromJSON( ); } -/** @internal */ -export const TypeResponseInProgress$inboundSchema: z.ZodEnum< - typeof TypeResponseInProgress -> = z.enum(TypeResponseInProgress); - /** @internal */ export const OpenResponsesStreamEventResponseInProgress$inboundSchema: z.ZodType = z.object({ - type: TypeResponseInProgress$inboundSchema, + type: z.literal("response.in_progress"), response: OpenResponsesNonStreamingResponse$inboundSchema, sequence_number: z.number(), }).transform((v) => { @@ -1094,17 +912,12 @@ export function openResponsesStreamEventResponseInProgressFromJSON( ); } -/** @internal */ -export const TypeResponseCreated$inboundSchema: z.ZodEnum< - typeof TypeResponseCreated -> = z.enum(TypeResponseCreated); - /** @internal */ export const OpenResponsesStreamEventResponseCreated$inboundSchema: z.ZodType< OpenResponsesStreamEventResponseCreated, unknown > = z.object({ - type: TypeResponseCreated$inboundSchema, + type: z.literal("response.created"), response: OpenResponsesNonStreamingResponse$inboundSchema, sequence_number: z.number(), }).transform((v) => { @@ -1134,15 +947,26 @@ export const OpenResponsesStreamEvent$inboundSchema: z.ZodType< OpenResponsesStreamEvent, unknown > = z.union([ + z.lazy(() => OpenResponsesStreamEventResponseCreated$inboundSchema), + z.lazy(() => OpenResponsesStreamEventResponseInProgress$inboundSchema), + z.lazy(() => OpenResponsesStreamEventResponseCompleted$inboundSchema), + z.lazy(() => OpenResponsesStreamEventResponseIncomplete$inboundSchema), + z.lazy(() => OpenResponsesStreamEventResponseFailed$inboundSchema), + OpenResponsesErrorEvent$inboundSchema, + z.lazy(() => OpenResponsesStreamEventResponseOutputItemAdded$inboundSchema), + z.lazy(() => OpenResponsesStreamEventResponseOutputItemDone$inboundSchema), + z.lazy(() => OpenResponsesStreamEventResponseContentPartAdded$inboundSchema), + z.lazy(() => OpenResponsesStreamEventResponseContentPartDone$inboundSchema), z.lazy(() => OpenResponsesStreamEventResponseOutputTextDelta$inboundSchema), z.lazy(() => OpenResponsesStreamEventResponseOutputTextDone$inboundSchema), + z.lazy(() => OpenResponsesStreamEventResponseRefusalDelta$inboundSchema), + z.lazy(() => OpenResponsesStreamEventResponseRefusalDone$inboundSchema), z.lazy(() => OpenResponsesStreamEventResponseOutputTextAnnotationAdded$inboundSchema ), - z.lazy(() => OpenResponsesStreamEventResponseContentPartAdded$inboundSchema), - z.lazy(() => OpenResponsesStreamEventResponseContentPartDone$inboundSchema), - z.lazy(() => OpenResponsesStreamEventResponseRefusalDelta$inboundSchema), - z.lazy(() => OpenResponsesStreamEventResponseRefusalDone$inboundSchema), + z.lazy(() => + OpenResponsesStreamEventResponseFunctionCallArgumentsDelta$inboundSchema + ), z.lazy(() => OpenResponsesStreamEventResponseFunctionCallArgumentsDone$inboundSchema ), @@ -1154,21 +978,10 @@ export const OpenResponsesStreamEvent$inboundSchema: z.ZodType< ), OpenResponsesReasoningSummaryTextDeltaEvent$inboundSchema, OpenResponsesReasoningSummaryTextDoneEvent$inboundSchema, - OpenResponsesImageGenCallPartialImage$inboundSchema, - OpenResponsesErrorEvent$inboundSchema, - z.lazy(() => - OpenResponsesStreamEventResponseFunctionCallArgumentsDelta$inboundSchema - ), - z.lazy(() => OpenResponsesStreamEventResponseOutputItemAdded$inboundSchema), - z.lazy(() => OpenResponsesStreamEventResponseOutputItemDone$inboundSchema), OpenResponsesImageGenCallInProgress$inboundSchema, OpenResponsesImageGenCallGenerating$inboundSchema, + OpenResponsesImageGenCallPartialImage$inboundSchema, OpenResponsesImageGenCallCompleted$inboundSchema, - z.lazy(() => OpenResponsesStreamEventResponseCreated$inboundSchema), - z.lazy(() => OpenResponsesStreamEventResponseInProgress$inboundSchema), - z.lazy(() => OpenResponsesStreamEventResponseCompleted$inboundSchema), - z.lazy(() => OpenResponsesStreamEventResponseIncomplete$inboundSchema), - z.lazy(() => OpenResponsesStreamEventResponseFailed$inboundSchema), ]); export function openResponsesStreamEventFromJSON( diff --git a/src/models/openresponseswebsearch20250826tool.ts b/src/models/openresponseswebsearch20250826tool.ts index 180c7705..2b54b4f1 100644 --- a/src/models/openresponseswebsearch20250826tool.ts +++ b/src/models/openresponseswebsearch20250826tool.ts @@ -5,7 +5,6 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; import { @@ -20,13 +19,6 @@ import { ResponsesWebSearchUserLocation$outboundSchema, } from "./responseswebsearchuserlocation.js"; -export const OpenResponsesWebSearch20250826ToolType = { - WebSearch20250826: "web_search_2025_08_26", -} as const; -export type OpenResponsesWebSearch20250826ToolType = ClosedEnum< - typeof OpenResponsesWebSearch20250826ToolType ->; - export type OpenResponsesWebSearch20250826ToolFilters = { allowedDomains?: Array | null | undefined; }; @@ -35,7 +27,7 @@ export type OpenResponsesWebSearch20250826ToolFilters = { * Web search tool configuration (2025-08-26 version) */ export type OpenResponsesWebSearch20250826Tool = { - type: OpenResponsesWebSearch20250826ToolType; + type: "web_search_2025_08_26"; filters?: OpenResponsesWebSearch20250826ToolFilters | null | undefined; /** * Size of the search context for web search tools @@ -47,15 +39,6 @@ export type OpenResponsesWebSearch20250826Tool = { userLocation?: ResponsesWebSearchUserLocation | null | undefined; }; -/** @internal */ -export const OpenResponsesWebSearch20250826ToolType$inboundSchema: z.ZodEnum< - typeof OpenResponsesWebSearch20250826ToolType -> = z.enum(OpenResponsesWebSearch20250826ToolType); -/** @internal */ -export const OpenResponsesWebSearch20250826ToolType$outboundSchema: z.ZodEnum< - typeof OpenResponsesWebSearch20250826ToolType -> = OpenResponsesWebSearch20250826ToolType$inboundSchema; - /** @internal */ export const OpenResponsesWebSearch20250826ToolFilters$inboundSchema: z.ZodType< OpenResponsesWebSearch20250826ToolFilters, @@ -116,7 +99,7 @@ export const OpenResponsesWebSearch20250826Tool$inboundSchema: z.ZodType< OpenResponsesWebSearch20250826Tool, unknown > = z.object({ - type: OpenResponsesWebSearch20250826ToolType$inboundSchema, + type: z.literal("web_search_2025_08_26"), filters: z.nullable( z.lazy(() => OpenResponsesWebSearch20250826ToolFilters$inboundSchema), ).optional(), @@ -131,7 +114,7 @@ export const OpenResponsesWebSearch20250826Tool$inboundSchema: z.ZodType< }); /** @internal */ export type OpenResponsesWebSearch20250826Tool$Outbound = { - type: string; + type: "web_search_2025_08_26"; filters?: | OpenResponsesWebSearch20250826ToolFilters$Outbound | null @@ -145,7 +128,7 @@ export const OpenResponsesWebSearch20250826Tool$outboundSchema: z.ZodType< OpenResponsesWebSearch20250826Tool$Outbound, OpenResponsesWebSearch20250826Tool > = z.object({ - type: OpenResponsesWebSearch20250826ToolType$outboundSchema, + type: z.literal("web_search_2025_08_26"), filters: z.nullable( z.lazy(() => OpenResponsesWebSearch20250826ToolFilters$outboundSchema), ).optional(), diff --git a/src/models/openresponseswebsearchpreview20250311tool.ts b/src/models/openresponseswebsearchpreview20250311tool.ts index a9ba0d63..a2ef0deb 100644 --- a/src/models/openresponseswebsearchpreview20250311tool.ts +++ b/src/models/openresponseswebsearchpreview20250311tool.ts @@ -5,7 +5,6 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; import { @@ -20,18 +19,11 @@ import { WebSearchPreviewToolUserLocation$outboundSchema, } from "./websearchpreviewtooluserlocation.js"; -export const OpenResponsesWebSearchPreview20250311ToolType = { - WebSearchPreview20250311: "web_search_preview_2025_03_11", -} as const; -export type OpenResponsesWebSearchPreview20250311ToolType = ClosedEnum< - typeof OpenResponsesWebSearchPreview20250311ToolType ->; - /** * Web search preview tool configuration (2025-03-11 version) */ export type OpenResponsesWebSearchPreview20250311Tool = { - type: OpenResponsesWebSearchPreview20250311ToolType; + type: "web_search_preview_2025_03_11"; /** * Size of the search context for web search tools */ @@ -39,22 +31,12 @@ export type OpenResponsesWebSearchPreview20250311Tool = { userLocation?: WebSearchPreviewToolUserLocation | null | undefined; }; -/** @internal */ -export const OpenResponsesWebSearchPreview20250311ToolType$inboundSchema: - z.ZodEnum = z.enum( - OpenResponsesWebSearchPreview20250311ToolType, - ); -/** @internal */ -export const OpenResponsesWebSearchPreview20250311ToolType$outboundSchema: - z.ZodEnum = - OpenResponsesWebSearchPreview20250311ToolType$inboundSchema; - /** @internal */ export const OpenResponsesWebSearchPreview20250311Tool$inboundSchema: z.ZodType< OpenResponsesWebSearchPreview20250311Tool, unknown > = z.object({ - type: OpenResponsesWebSearchPreview20250311ToolType$inboundSchema, + type: z.literal("web_search_preview_2025_03_11"), search_context_size: ResponsesSearchContextSize$inboundSchema.optional(), user_location: z.nullable(WebSearchPreviewToolUserLocation$inboundSchema) .optional(), @@ -66,7 +48,7 @@ export const OpenResponsesWebSearchPreview20250311Tool$inboundSchema: z.ZodType< }); /** @internal */ export type OpenResponsesWebSearchPreview20250311Tool$Outbound = { - type: string; + type: "web_search_preview_2025_03_11"; search_context_size?: string | undefined; user_location?: WebSearchPreviewToolUserLocation$Outbound | null | undefined; }; @@ -77,7 +59,7 @@ export const OpenResponsesWebSearchPreview20250311Tool$outboundSchema: OpenResponsesWebSearchPreview20250311Tool$Outbound, OpenResponsesWebSearchPreview20250311Tool > = z.object({ - type: OpenResponsesWebSearchPreview20250311ToolType$outboundSchema, + type: z.literal("web_search_preview_2025_03_11"), searchContextSize: ResponsesSearchContextSize$outboundSchema.optional(), userLocation: z.nullable(WebSearchPreviewToolUserLocation$outboundSchema) .optional(), diff --git a/src/models/openresponseswebsearchpreviewtool.ts b/src/models/openresponseswebsearchpreviewtool.ts index 2ee856fc..02bf2042 100644 --- a/src/models/openresponseswebsearchpreviewtool.ts +++ b/src/models/openresponseswebsearchpreviewtool.ts @@ -5,7 +5,6 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; import { @@ -20,18 +19,11 @@ import { WebSearchPreviewToolUserLocation$outboundSchema, } from "./websearchpreviewtooluserlocation.js"; -export const OpenResponsesWebSearchPreviewToolType = { - WebSearchPreview: "web_search_preview", -} as const; -export type OpenResponsesWebSearchPreviewToolType = ClosedEnum< - typeof OpenResponsesWebSearchPreviewToolType ->; - /** * Web search preview tool configuration */ export type OpenResponsesWebSearchPreviewTool = { - type: OpenResponsesWebSearchPreviewToolType; + type: "web_search_preview"; /** * Size of the search context for web search tools */ @@ -39,21 +31,12 @@ export type OpenResponsesWebSearchPreviewTool = { userLocation?: WebSearchPreviewToolUserLocation | null | undefined; }; -/** @internal */ -export const OpenResponsesWebSearchPreviewToolType$inboundSchema: z.ZodEnum< - typeof OpenResponsesWebSearchPreviewToolType -> = z.enum(OpenResponsesWebSearchPreviewToolType); -/** @internal */ -export const OpenResponsesWebSearchPreviewToolType$outboundSchema: z.ZodEnum< - typeof OpenResponsesWebSearchPreviewToolType -> = OpenResponsesWebSearchPreviewToolType$inboundSchema; - /** @internal */ export const OpenResponsesWebSearchPreviewTool$inboundSchema: z.ZodType< OpenResponsesWebSearchPreviewTool, unknown > = z.object({ - type: OpenResponsesWebSearchPreviewToolType$inboundSchema, + type: z.literal("web_search_preview"), search_context_size: ResponsesSearchContextSize$inboundSchema.optional(), user_location: z.nullable(WebSearchPreviewToolUserLocation$inboundSchema) .optional(), @@ -65,7 +48,7 @@ export const OpenResponsesWebSearchPreviewTool$inboundSchema: z.ZodType< }); /** @internal */ export type OpenResponsesWebSearchPreviewTool$Outbound = { - type: string; + type: "web_search_preview"; search_context_size?: string | undefined; user_location?: WebSearchPreviewToolUserLocation$Outbound | null | undefined; }; @@ -75,7 +58,7 @@ export const OpenResponsesWebSearchPreviewTool$outboundSchema: z.ZodType< OpenResponsesWebSearchPreviewTool$Outbound, OpenResponsesWebSearchPreviewTool > = z.object({ - type: OpenResponsesWebSearchPreviewToolType$outboundSchema, + type: z.literal("web_search_preview"), searchContextSize: ResponsesSearchContextSize$outboundSchema.optional(), userLocation: z.nullable(WebSearchPreviewToolUserLocation$outboundSchema) .optional(), diff --git a/src/models/openresponseswebsearchtool.ts b/src/models/openresponseswebsearchtool.ts index 8b683f1c..24137408 100644 --- a/src/models/openresponseswebsearchtool.ts +++ b/src/models/openresponseswebsearchtool.ts @@ -5,7 +5,6 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; import { @@ -20,13 +19,6 @@ import { ResponsesWebSearchUserLocation$outboundSchema, } from "./responseswebsearchuserlocation.js"; -export const OpenResponsesWebSearchToolType = { - WebSearch: "web_search", -} as const; -export type OpenResponsesWebSearchToolType = ClosedEnum< - typeof OpenResponsesWebSearchToolType ->; - export type OpenResponsesWebSearchToolFilters = { allowedDomains?: Array | null | undefined; }; @@ -35,7 +27,7 @@ export type OpenResponsesWebSearchToolFilters = { * Web search tool configuration */ export type OpenResponsesWebSearchTool = { - type: OpenResponsesWebSearchToolType; + type: "web_search"; filters?: OpenResponsesWebSearchToolFilters | null | undefined; /** * Size of the search context for web search tools @@ -47,15 +39,6 @@ export type OpenResponsesWebSearchTool = { userLocation?: ResponsesWebSearchUserLocation | null | undefined; }; -/** @internal */ -export const OpenResponsesWebSearchToolType$inboundSchema: z.ZodEnum< - typeof OpenResponsesWebSearchToolType -> = z.enum(OpenResponsesWebSearchToolType); -/** @internal */ -export const OpenResponsesWebSearchToolType$outboundSchema: z.ZodEnum< - typeof OpenResponsesWebSearchToolType -> = OpenResponsesWebSearchToolType$inboundSchema; - /** @internal */ export const OpenResponsesWebSearchToolFilters$inboundSchema: z.ZodType< OpenResponsesWebSearchToolFilters, @@ -108,7 +91,7 @@ export const OpenResponsesWebSearchTool$inboundSchema: z.ZodType< OpenResponsesWebSearchTool, unknown > = z.object({ - type: OpenResponsesWebSearchToolType$inboundSchema, + type: z.literal("web_search"), filters: z.nullable( z.lazy(() => OpenResponsesWebSearchToolFilters$inboundSchema), ).optional(), @@ -123,7 +106,7 @@ export const OpenResponsesWebSearchTool$inboundSchema: z.ZodType< }); /** @internal */ export type OpenResponsesWebSearchTool$Outbound = { - type: string; + type: "web_search"; filters?: OpenResponsesWebSearchToolFilters$Outbound | null | undefined; search_context_size?: string | undefined; user_location?: ResponsesWebSearchUserLocation$Outbound | null | undefined; @@ -134,7 +117,7 @@ export const OpenResponsesWebSearchTool$outboundSchema: z.ZodType< OpenResponsesWebSearchTool$Outbound, OpenResponsesWebSearchTool > = z.object({ - type: OpenResponsesWebSearchToolType$outboundSchema, + type: z.literal("web_search"), filters: z.nullable( z.lazy(() => OpenResponsesWebSearchToolFilters$outboundSchema), ).optional(), diff --git a/src/models/operations/createembeddings.ts b/src/models/operations/createembeddings.ts index 9b438cc4..b533bbad 100644 --- a/src/models/operations/createembeddings.ts +++ b/src/models/operations/createembeddings.ts @@ -11,27 +11,17 @@ import { Result as SafeParseResult } from "../../types/fp.js"; import { SDKValidationError } from "../errors/sdkvalidationerror.js"; import * as models from "../index.js"; -export const TypeImageURL = { - ImageUrl: "image_url", -} as const; -export type TypeImageURL = ClosedEnum; - export type ImageUrl = { url: string; }; export type ContentImageURL = { - type: TypeImageURL; + type: "image_url"; imageUrl: ImageUrl; }; -export const TypeText = { - Text: "text", -} as const; -export type TypeText = ClosedEnum; - export type ContentText = { - type: TypeText; + type: "text"; text: string; }; @@ -194,10 +184,6 @@ export type CreateEmbeddingsResponseBody = { export type CreateEmbeddingsResponse = CreateEmbeddingsResponseBody | string; -/** @internal */ -export const TypeImageURL$outboundSchema: z.ZodEnum = z - .enum(TypeImageURL); - /** @internal */ export type ImageUrl$Outbound = { url: string; @@ -215,7 +201,7 @@ export function imageUrlToJSON(imageUrl: ImageUrl): string { /** @internal */ export type ContentImageURL$Outbound = { - type: string; + type: "image_url"; image_url: ImageUrl$Outbound; }; @@ -224,7 +210,7 @@ export const ContentImageURL$outboundSchema: z.ZodType< ContentImageURL$Outbound, ContentImageURL > = z.object({ - type: TypeImageURL$outboundSchema, + type: z.literal("image_url"), imageUrl: z.lazy(() => ImageUrl$outboundSchema), }).transform((v) => { return remap$(v, { @@ -238,14 +224,9 @@ export function contentImageURLToJSON( return JSON.stringify(ContentImageURL$outboundSchema.parse(contentImageURL)); } -/** @internal */ -export const TypeText$outboundSchema: z.ZodEnum = z.enum( - TypeText, -); - /** @internal */ export type ContentText$Outbound = { - type: string; + type: "text"; text: string; }; @@ -254,7 +235,7 @@ export const ContentText$outboundSchema: z.ZodType< ContentText$Outbound, ContentText > = z.object({ - type: TypeText$outboundSchema, + type: z.literal("text"), text: z.string(), }); diff --git a/src/models/operations/getcredits.ts b/src/models/operations/getcredits.ts index 345dbbe6..6a9562ec 100644 --- a/src/models/operations/getcredits.ts +++ b/src/models/operations/getcredits.ts @@ -3,20 +3,58 @@ */ import * as z from "zod/v4"; +import { remap as remap$ } from "../../lib/primitives.js"; import { safeParse } from "../../lib/schemas.js"; import { Result as SafeParseResult } from "../../types/fp.js"; import { SDKValidationError } from "../errors/sdkvalidationerror.js"; +export type GetCreditsData = { + /** + * Total credits purchased + */ + totalCredits: number; + /** + * Total credits used + */ + totalUsage: number; +}; + /** * Total credits purchased and used */ -export type GetCreditsResponse = {}; +export type GetCreditsResponse = { + data: GetCreditsData; +}; + +/** @internal */ +export const GetCreditsData$inboundSchema: z.ZodType = + z.object({ + total_credits: z.number(), + total_usage: z.number(), + }).transform((v) => { + return remap$(v, { + "total_credits": "totalCredits", + "total_usage": "totalUsage", + }); + }); + +export function getCreditsDataFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => GetCreditsData$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'GetCreditsData' from JSON`, + ); +} /** @internal */ export const GetCreditsResponse$inboundSchema: z.ZodType< GetCreditsResponse, unknown -> = z.object({}); +> = z.object({ + data: z.lazy(() => GetCreditsData$inboundSchema), +}); export function getCreditsResponseFromJSON( jsonString: string, diff --git a/src/models/operations/getparameters.ts b/src/models/operations/getparameters.ts index 0a287de5..a9ce83a4 100644 --- a/src/models/operations/getparameters.ts +++ b/src/models/operations/getparameters.ts @@ -19,12 +19,14 @@ export const GetParametersProvider = { AionLabs: "AionLabs", Alibaba: "Alibaba", AmazonBedrock: "Amazon Bedrock", + AmazonNova: "Amazon Nova", Anthropic: "Anthropic", - Arcee: "Arcee", + ArceeAI: "Arcee AI", AtlasCloud: "AtlasCloud", Avian: "Avian", Azure: "Azure", BaseTen: "BaseTen", + BytePlus: "BytePlus", BlackForestLabs: "Black Forest Labs", Cerebras: "Cerebras", Chutes: "Chutes", @@ -39,6 +41,7 @@ export const GetParametersProvider = { Fireworks: "Fireworks", Friendli: "Friendli", GMICloud: "GMICloud", + GoPomelo: "GoPomelo", Google: "Google", GoogleAIStudio: "Google AI Studio", Groq: "Groq", @@ -69,6 +72,7 @@ export const GetParametersProvider = { SambaNova: "SambaNova", SiliconFlow: "SiliconFlow", Stealth: "Stealth", + StreamLake: "StreamLake", Switchpoint: "Switchpoint", Targon: "Targon", Together: "Together", diff --git a/src/models/providername.ts b/src/models/providername.ts index 484fdb81..dd49404a 100644 --- a/src/models/providername.ts +++ b/src/models/providername.ts @@ -11,12 +11,14 @@ export const ProviderName = { AionLabs: "AionLabs", Alibaba: "Alibaba", AmazonBedrock: "Amazon Bedrock", + AmazonNova: "Amazon Nova", Anthropic: "Anthropic", - Arcee: "Arcee", + ArceeAI: "Arcee AI", AtlasCloud: "AtlasCloud", Avian: "Avian", Azure: "Azure", BaseTen: "BaseTen", + BytePlus: "BytePlus", BlackForestLabs: "Black Forest Labs", Cerebras: "Cerebras", Chutes: "Chutes", @@ -31,6 +33,7 @@ export const ProviderName = { Fireworks: "Fireworks", Friendli: "Friendli", GMICloud: "GMICloud", + GoPomelo: "GoPomelo", Google: "Google", GoogleAIStudio: "Google AI Studio", Groq: "Groq", @@ -61,6 +64,7 @@ export const ProviderName = { SambaNova: "SambaNova", SiliconFlow: "SiliconFlow", Stealth: "Stealth", + StreamLake: "StreamLake", Switchpoint: "Switchpoint", Targon: "Targon", Together: "Together", diff --git a/src/models/responseformattextconfig.ts b/src/models/responseformattextconfig.ts index a62c7d8b..1deaf3cf 100644 --- a/src/models/responseformattextconfig.ts +++ b/src/models/responseformattextconfig.ts @@ -29,33 +29,33 @@ import { * Text response format configuration */ export type ResponseFormatTextConfig = - | ResponsesFormatTextJSONSchemaConfig | ResponsesFormatText - | ResponsesFormatJSONObject; + | ResponsesFormatJSONObject + | ResponsesFormatTextJSONSchemaConfig; /** @internal */ export const ResponseFormatTextConfig$inboundSchema: z.ZodType< ResponseFormatTextConfig, unknown > = z.union([ - ResponsesFormatTextJSONSchemaConfig$inboundSchema, ResponsesFormatText$inboundSchema, ResponsesFormatJSONObject$inboundSchema, + ResponsesFormatTextJSONSchemaConfig$inboundSchema, ]); /** @internal */ export type ResponseFormatTextConfig$Outbound = - | ResponsesFormatTextJSONSchemaConfig$Outbound | ResponsesFormatText$Outbound - | ResponsesFormatJSONObject$Outbound; + | ResponsesFormatJSONObject$Outbound + | ResponsesFormatTextJSONSchemaConfig$Outbound; /** @internal */ export const ResponseFormatTextConfig$outboundSchema: z.ZodType< ResponseFormatTextConfig$Outbound, ResponseFormatTextConfig > = z.union([ - ResponsesFormatTextJSONSchemaConfig$outboundSchema, ResponsesFormatText$outboundSchema, ResponsesFormatJSONObject$outboundSchema, + ResponsesFormatTextJSONSchemaConfig$outboundSchema, ]); export function responseFormatTextConfigToJSON( diff --git a/src/models/responseinputaudio.ts b/src/models/responseinputaudio.ts index c52ffda7..da7b24b1 100644 --- a/src/models/responseinputaudio.ts +++ b/src/models/responseinputaudio.ts @@ -6,15 +6,10 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; import * as openEnums from "../types/enums.js"; -import { ClosedEnum, OpenEnum } from "../types/enums.js"; +import { OpenEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export const ResponseInputAudioType = { - InputAudio: "input_audio", -} as const; -export type ResponseInputAudioType = ClosedEnum; - export const ResponseInputAudioFormat = { Mp3: "mp3", Wav: "wav", @@ -32,19 +27,10 @@ export type ResponseInputAudioInputAudio = { * Audio input content item */ export type ResponseInputAudio = { - type: ResponseInputAudioType; + type: "input_audio"; inputAudio: ResponseInputAudioInputAudio; }; -/** @internal */ -export const ResponseInputAudioType$inboundSchema: z.ZodEnum< - typeof ResponseInputAudioType -> = z.enum(ResponseInputAudioType); -/** @internal */ -export const ResponseInputAudioType$outboundSchema: z.ZodEnum< - typeof ResponseInputAudioType -> = ResponseInputAudioType$inboundSchema; - /** @internal */ export const ResponseInputAudioFormat$inboundSchema: z.ZodType< ResponseInputAudioFormat, @@ -103,7 +89,7 @@ export const ResponseInputAudio$inboundSchema: z.ZodType< ResponseInputAudio, unknown > = z.object({ - type: ResponseInputAudioType$inboundSchema, + type: z.literal("input_audio"), input_audio: z.lazy(() => ResponseInputAudioInputAudio$inboundSchema), }).transform((v) => { return remap$(v, { @@ -112,7 +98,7 @@ export const ResponseInputAudio$inboundSchema: z.ZodType< }); /** @internal */ export type ResponseInputAudio$Outbound = { - type: string; + type: "input_audio"; input_audio: ResponseInputAudioInputAudio$Outbound; }; @@ -121,7 +107,7 @@ export const ResponseInputAudio$outboundSchema: z.ZodType< ResponseInputAudio$Outbound, ResponseInputAudio > = z.object({ - type: ResponseInputAudioType$outboundSchema, + type: z.literal("input_audio"), inputAudio: z.lazy(() => ResponseInputAudioInputAudio$outboundSchema), }).transform((v) => { return remap$(v, { diff --git a/src/models/responseinputfile.ts b/src/models/responseinputfile.ts index 7774bd2c..8f59ccd2 100644 --- a/src/models/responseinputfile.ts +++ b/src/models/responseinputfile.ts @@ -5,41 +5,26 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export const ResponseInputFileType = { - InputFile: "input_file", -} as const; -export type ResponseInputFileType = ClosedEnum; - /** * File input content item */ export type ResponseInputFile = { - type: ResponseInputFileType; + type: "input_file"; fileId?: string | null | undefined; fileData?: string | undefined; filename?: string | undefined; fileUrl?: string | undefined; }; -/** @internal */ -export const ResponseInputFileType$inboundSchema: z.ZodEnum< - typeof ResponseInputFileType -> = z.enum(ResponseInputFileType); -/** @internal */ -export const ResponseInputFileType$outboundSchema: z.ZodEnum< - typeof ResponseInputFileType -> = ResponseInputFileType$inboundSchema; - /** @internal */ export const ResponseInputFile$inboundSchema: z.ZodType< ResponseInputFile, unknown > = z.object({ - type: ResponseInputFileType$inboundSchema, + type: z.literal("input_file"), file_id: z.nullable(z.string()).optional(), file_data: z.string().optional(), filename: z.string().optional(), @@ -53,7 +38,7 @@ export const ResponseInputFile$inboundSchema: z.ZodType< }); /** @internal */ export type ResponseInputFile$Outbound = { - type: string; + type: "input_file"; file_id?: string | null | undefined; file_data?: string | undefined; filename?: string | undefined; @@ -65,7 +50,7 @@ export const ResponseInputFile$outboundSchema: z.ZodType< ResponseInputFile$Outbound, ResponseInputFile > = z.object({ - type: ResponseInputFileType$outboundSchema, + type: z.literal("input_file"), fileId: z.nullable(z.string()).optional(), fileData: z.string().optional(), filename: z.string().optional(), diff --git a/src/models/responseinputimage.ts b/src/models/responseinputimage.ts index 1e9aa447..1e26f22b 100644 --- a/src/models/responseinputimage.ts +++ b/src/models/responseinputimage.ts @@ -6,15 +6,10 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; import * as openEnums from "../types/enums.js"; -import { ClosedEnum, OpenEnum } from "../types/enums.js"; +import { OpenEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export const ResponseInputImageType = { - InputImage: "input_image", -} as const; -export type ResponseInputImageType = ClosedEnum; - export const ResponseInputImageDetail = { Auto: "auto", High: "high", @@ -28,20 +23,11 @@ export type ResponseInputImageDetail = OpenEnum< * Image input content item */ export type ResponseInputImage = { - type: ResponseInputImageType; + type: "input_image"; detail: ResponseInputImageDetail; imageUrl?: string | null | undefined; }; -/** @internal */ -export const ResponseInputImageType$inboundSchema: z.ZodEnum< - typeof ResponseInputImageType -> = z.enum(ResponseInputImageType); -/** @internal */ -export const ResponseInputImageType$outboundSchema: z.ZodEnum< - typeof ResponseInputImageType -> = ResponseInputImageType$inboundSchema; - /** @internal */ export const ResponseInputImageDetail$inboundSchema: z.ZodType< ResponseInputImageDetail, @@ -58,7 +44,7 @@ export const ResponseInputImage$inboundSchema: z.ZodType< ResponseInputImage, unknown > = z.object({ - type: ResponseInputImageType$inboundSchema, + type: z.literal("input_image"), detail: ResponseInputImageDetail$inboundSchema, image_url: z.nullable(z.string()).optional(), }).transform((v) => { @@ -68,7 +54,7 @@ export const ResponseInputImage$inboundSchema: z.ZodType< }); /** @internal */ export type ResponseInputImage$Outbound = { - type: string; + type: "input_image"; detail: string; image_url?: string | null | undefined; }; @@ -78,7 +64,7 @@ export const ResponseInputImage$outboundSchema: z.ZodType< ResponseInputImage$Outbound, ResponseInputImage > = z.object({ - type: ResponseInputImageType$outboundSchema, + type: z.literal("input_image"), detail: ResponseInputImageDetail$outboundSchema, imageUrl: z.nullable(z.string()).optional(), }).transform((v) => { diff --git a/src/models/responseinputtext.ts b/src/models/responseinputtext.ts index d97504a5..56f8bb7a 100644 --- a/src/models/responseinputtext.ts +++ b/src/models/responseinputtext.ts @@ -4,43 +4,28 @@ import * as z from "zod/v4"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export const ResponseInputTextType = { - InputText: "input_text", -} as const; -export type ResponseInputTextType = ClosedEnum; - /** * Text input content item */ export type ResponseInputText = { - type: ResponseInputTextType; + type: "input_text"; text: string; }; -/** @internal */ -export const ResponseInputTextType$inboundSchema: z.ZodEnum< - typeof ResponseInputTextType -> = z.enum(ResponseInputTextType); -/** @internal */ -export const ResponseInputTextType$outboundSchema: z.ZodEnum< - typeof ResponseInputTextType -> = ResponseInputTextType$inboundSchema; - /** @internal */ export const ResponseInputText$inboundSchema: z.ZodType< ResponseInputText, unknown > = z.object({ - type: ResponseInputTextType$inboundSchema, + type: z.literal("input_text"), text: z.string(), }); /** @internal */ export type ResponseInputText$Outbound = { - type: string; + type: "input_text"; text: string; }; @@ -49,7 +34,7 @@ export const ResponseInputText$outboundSchema: z.ZodType< ResponseInputText$Outbound, ResponseInputText > = z.object({ - type: ResponseInputTextType$outboundSchema, + type: z.literal("input_text"), text: z.string(), }); diff --git a/src/models/responseoutputtext.ts b/src/models/responseoutputtext.ts index 3d3a6534..6b6f99bb 100644 --- a/src/models/responseoutputtext.ts +++ b/src/models/responseoutputtext.ts @@ -4,7 +4,6 @@ import * as z from "zod/v4"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; import { @@ -14,38 +13,24 @@ import { OpenAIResponsesAnnotation$outboundSchema, } from "./openairesponsesannotation.js"; -export const ResponseOutputTextType = { - OutputText: "output_text", -} as const; -export type ResponseOutputTextType = ClosedEnum; - export type ResponseOutputText = { - type: ResponseOutputTextType; + type: "output_text"; text: string; annotations?: Array | undefined; }; -/** @internal */ -export const ResponseOutputTextType$inboundSchema: z.ZodEnum< - typeof ResponseOutputTextType -> = z.enum(ResponseOutputTextType); -/** @internal */ -export const ResponseOutputTextType$outboundSchema: z.ZodEnum< - typeof ResponseOutputTextType -> = ResponseOutputTextType$inboundSchema; - /** @internal */ export const ResponseOutputText$inboundSchema: z.ZodType< ResponseOutputText, unknown > = z.object({ - type: ResponseOutputTextType$inboundSchema, + type: z.literal("output_text"), text: z.string(), annotations: z.array(OpenAIResponsesAnnotation$inboundSchema).optional(), }); /** @internal */ export type ResponseOutputText$Outbound = { - type: string; + type: "output_text"; text: string; annotations?: Array | undefined; }; @@ -55,7 +40,7 @@ export const ResponseOutputText$outboundSchema: z.ZodType< ResponseOutputText$Outbound, ResponseOutputText > = z.object({ - type: ResponseOutputTextType$outboundSchema, + type: z.literal("output_text"), text: z.string(), annotations: z.array(OpenAIResponsesAnnotation$outboundSchema).optional(), }); diff --git a/src/models/responsesformatjsonobject.ts b/src/models/responsesformatjsonobject.ts index 9a59e149..a13fdf60 100644 --- a/src/models/responsesformatjsonobject.ts +++ b/src/models/responsesformatjsonobject.ts @@ -4,43 +4,26 @@ import * as z from "zod/v4"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export const ResponsesFormatJSONObjectType = { - JsonObject: "json_object", -} as const; -export type ResponsesFormatJSONObjectType = ClosedEnum< - typeof ResponsesFormatJSONObjectType ->; - /** * JSON object response format */ export type ResponsesFormatJSONObject = { - type: ResponsesFormatJSONObjectType; + type: "json_object"; }; -/** @internal */ -export const ResponsesFormatJSONObjectType$inboundSchema: z.ZodEnum< - typeof ResponsesFormatJSONObjectType -> = z.enum(ResponsesFormatJSONObjectType); -/** @internal */ -export const ResponsesFormatJSONObjectType$outboundSchema: z.ZodEnum< - typeof ResponsesFormatJSONObjectType -> = ResponsesFormatJSONObjectType$inboundSchema; - /** @internal */ export const ResponsesFormatJSONObject$inboundSchema: z.ZodType< ResponsesFormatJSONObject, unknown > = z.object({ - type: ResponsesFormatJSONObjectType$inboundSchema, + type: z.literal("json_object"), }); /** @internal */ export type ResponsesFormatJSONObject$Outbound = { - type: string; + type: "json_object"; }; /** @internal */ @@ -48,7 +31,7 @@ export const ResponsesFormatJSONObject$outboundSchema: z.ZodType< ResponsesFormatJSONObject$Outbound, ResponsesFormatJSONObject > = z.object({ - type: ResponsesFormatJSONObjectType$outboundSchema, + type: z.literal("json_object"), }); export function responsesFormatJSONObjectToJSON( diff --git a/src/models/responsesformattext.ts b/src/models/responsesformattext.ts index de5a4e67..3e45270a 100644 --- a/src/models/responsesformattext.ts +++ b/src/models/responsesformattext.ts @@ -4,43 +4,26 @@ import * as z from "zod/v4"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export const ResponsesFormatTextType = { - Text: "text", -} as const; -export type ResponsesFormatTextType = ClosedEnum< - typeof ResponsesFormatTextType ->; - /** * Plain text response format */ export type ResponsesFormatText = { - type: ResponsesFormatTextType; + type: "text"; }; -/** @internal */ -export const ResponsesFormatTextType$inboundSchema: z.ZodEnum< - typeof ResponsesFormatTextType -> = z.enum(ResponsesFormatTextType); -/** @internal */ -export const ResponsesFormatTextType$outboundSchema: z.ZodEnum< - typeof ResponsesFormatTextType -> = ResponsesFormatTextType$inboundSchema; - /** @internal */ export const ResponsesFormatText$inboundSchema: z.ZodType< ResponsesFormatText, unknown > = z.object({ - type: ResponsesFormatTextType$inboundSchema, + type: z.literal("text"), }); /** @internal */ export type ResponsesFormatText$Outbound = { - type: string; + type: "text"; }; /** @internal */ @@ -48,7 +31,7 @@ export const ResponsesFormatText$outboundSchema: z.ZodType< ResponsesFormatText$Outbound, ResponsesFormatText > = z.object({ - type: ResponsesFormatTextType$outboundSchema, + type: z.literal("text"), }); export function responsesFormatTextToJSON( diff --git a/src/models/responsesformattextjsonschemaconfig.ts b/src/models/responsesformattextjsonschemaconfig.ts index 9e4ef10e..e5c98a85 100644 --- a/src/models/responsesformattextjsonschemaconfig.ts +++ b/src/models/responsesformattextjsonschemaconfig.ts @@ -4,43 +4,26 @@ import * as z from "zod/v4"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export const ResponsesFormatTextJSONSchemaConfigType = { - JsonSchema: "json_schema", -} as const; -export type ResponsesFormatTextJSONSchemaConfigType = ClosedEnum< - typeof ResponsesFormatTextJSONSchemaConfigType ->; - /** * JSON schema constrained response format */ export type ResponsesFormatTextJSONSchemaConfig = { - type: ResponsesFormatTextJSONSchemaConfigType; + type: "json_schema"; name: string; description?: string | undefined; strict?: boolean | null | undefined; schema: { [k: string]: any | null }; }; -/** @internal */ -export const ResponsesFormatTextJSONSchemaConfigType$inboundSchema: z.ZodEnum< - typeof ResponsesFormatTextJSONSchemaConfigType -> = z.enum(ResponsesFormatTextJSONSchemaConfigType); -/** @internal */ -export const ResponsesFormatTextJSONSchemaConfigType$outboundSchema: z.ZodEnum< - typeof ResponsesFormatTextJSONSchemaConfigType -> = ResponsesFormatTextJSONSchemaConfigType$inboundSchema; - /** @internal */ export const ResponsesFormatTextJSONSchemaConfig$inboundSchema: z.ZodType< ResponsesFormatTextJSONSchemaConfig, unknown > = z.object({ - type: ResponsesFormatTextJSONSchemaConfigType$inboundSchema, + type: z.literal("json_schema"), name: z.string(), description: z.string().optional(), strict: z.nullable(z.boolean()).optional(), @@ -48,7 +31,7 @@ export const ResponsesFormatTextJSONSchemaConfig$inboundSchema: z.ZodType< }); /** @internal */ export type ResponsesFormatTextJSONSchemaConfig$Outbound = { - type: string; + type: "json_schema"; name: string; description?: string | undefined; strict?: boolean | null | undefined; @@ -60,7 +43,7 @@ export const ResponsesFormatTextJSONSchemaConfig$outboundSchema: z.ZodType< ResponsesFormatTextJSONSchemaConfig$Outbound, ResponsesFormatTextJSONSchemaConfig > = z.object({ - type: ResponsesFormatTextJSONSchemaConfigType$outboundSchema, + type: z.literal("json_schema"), name: z.string(), description: z.string().optional(), strict: z.nullable(z.boolean()).optional(), diff --git a/src/models/responsesoutputitem.ts b/src/models/responsesoutputitem.ts index cd83fb3b..3ae6f029 100644 --- a/src/models/responsesoutputitem.ts +++ b/src/models/responsesoutputitem.ts @@ -35,24 +35,36 @@ import { * An output item from the response */ export type ResponsesOutputItem = - | ResponsesOutputMessage - | ResponsesOutputItemFunctionCall - | ResponsesOutputItemFileSearchCall - | ResponsesOutputItemReasoning - | ResponsesWebSearchCallOutput - | ResponsesImageGenerationCall; + | (ResponsesOutputMessage & { type: "message" }) + | (ResponsesOutputItemReasoning & { type: "reasoning" }) + | (ResponsesOutputItemFunctionCall & { type: "function_call" }) + | (ResponsesWebSearchCallOutput & { type: "web_search_call" }) + | (ResponsesOutputItemFileSearchCall & { type: "file_search_call" }) + | (ResponsesImageGenerationCall & { type: "image_generation_call" }); /** @internal */ export const ResponsesOutputItem$inboundSchema: z.ZodType< ResponsesOutputItem, unknown > = z.union([ - ResponsesOutputMessage$inboundSchema, - ResponsesOutputItemFunctionCall$inboundSchema, - ResponsesOutputItemFileSearchCall$inboundSchema, - ResponsesOutputItemReasoning$inboundSchema, - ResponsesWebSearchCallOutput$inboundSchema, - ResponsesImageGenerationCall$inboundSchema, + ResponsesOutputMessage$inboundSchema.and( + z.object({ type: z.literal("message") }), + ), + ResponsesOutputItemReasoning$inboundSchema.and( + z.object({ type: z.literal("reasoning") }), + ), + ResponsesOutputItemFunctionCall$inboundSchema.and( + z.object({ type: z.literal("function_call") }), + ), + ResponsesWebSearchCallOutput$inboundSchema.and( + z.object({ type: z.literal("web_search_call") }), + ), + ResponsesOutputItemFileSearchCall$inboundSchema.and( + z.object({ type: z.literal("file_search_call") }), + ), + ResponsesImageGenerationCall$inboundSchema.and( + z.object({ type: z.literal("image_generation_call") }), + ), ]); export function responsesOutputItemFromJSON( diff --git a/src/models/urlcitation.ts b/src/models/urlcitation.ts index 0b88d1f7..69471973 100644 --- a/src/models/urlcitation.ts +++ b/src/models/urlcitation.ts @@ -5,34 +5,21 @@ import * as z from "zod/v4"; import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; -import { ClosedEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; -export const URLCitationType = { - UrlCitation: "url_citation", -} as const; -export type URLCitationType = ClosedEnum; - export type URLCitation = { - type: URLCitationType; + type: "url_citation"; url: string; title: string; startIndex: number; endIndex: number; }; -/** @internal */ -export const URLCitationType$inboundSchema: z.ZodEnum = - z.enum(URLCitationType); -/** @internal */ -export const URLCitationType$outboundSchema: z.ZodEnum = - URLCitationType$inboundSchema; - /** @internal */ export const URLCitation$inboundSchema: z.ZodType = z .object({ - type: URLCitationType$inboundSchema, + type: z.literal("url_citation"), url: z.string(), title: z.string(), start_index: z.number(), @@ -45,7 +32,7 @@ export const URLCitation$inboundSchema: z.ZodType = z }); /** @internal */ export type URLCitation$Outbound = { - type: string; + type: "url_citation"; url: string; title: string; start_index: number; @@ -57,7 +44,7 @@ export const URLCitation$outboundSchema: z.ZodType< URLCitation$Outbound, URLCitation > = z.object({ - type: URLCitationType$outboundSchema, + type: z.literal("url_citation"), url: z.string(), title: z.string(), startIndex: z.number(), diff --git a/src/models/videourl.ts b/src/models/videourl.ts deleted file mode 100644 index 459a102b..00000000 --- a/src/models/videourl.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. - */ - -import * as z from "zod/v4"; -import { safeParse } from "../lib/schemas.js"; -import { Result as SafeParseResult } from "../types/fp.js"; -import { SDKValidationError } from "./errors/sdkvalidationerror.js"; - -export type VideoURL = { - url: string; -}; - -/** @internal */ -export const VideoURL$inboundSchema: z.ZodType = z.object({ - url: z.string(), -}); -/** @internal */ -export type VideoURL$Outbound = { - url: string; -}; - -/** @internal */ -export const VideoURL$outboundSchema: z.ZodType = z - .object({ - url: z.string(), - }); - -export function videoURLToJSON(videoURL: VideoURL): string { - return JSON.stringify(VideoURL$outboundSchema.parse(videoURL)); -} -export function videoURLFromJSON( - jsonString: string, -): SafeParseResult { - return safeParse( - jsonString, - (x) => VideoURL$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'VideoURL' from JSON`, - ); -} diff --git a/src/sdk/oauth.ts b/src/sdk/oauth.ts index fb8d4730..1cae78b7 100644 --- a/src/sdk/oauth.ts +++ b/src/sdk/oauth.ts @@ -8,14 +8,10 @@ import { ClientSDK, RequestOptions } from "../lib/sdks.js"; import * as operations from "../models/operations/index.js"; import { unwrapAsync } from "../types/fp.js"; // #region imports -import { - CreateAuthorizationUrlRequest, - oAuthCreateAuthorizationUrl, -} from "../funcs/oAuthCreateAuthorizationUrl.js"; -import { - CreateSHA256CodeChallengeResponse, - oAuthCreateSHA256CodeChallenge, -} from "../funcs/oAuthCreateSHA256CodeChallenge.js"; +import type { CreateAuthorizationUrlRequest } from "../funcs/oAuthCreateAuthorizationUrl.js"; +import { oAuthCreateAuthorizationUrl } from "../funcs/oAuthCreateAuthorizationUrl.js"; +import type { CreateSHA256CodeChallengeResponse } from "../funcs/oAuthCreateSHA256CodeChallenge.js"; +import { oAuthCreateSHA256CodeChallenge } from "../funcs/oAuthCreateSHA256CodeChallenge.js"; // #endregion imports export class OAuth extends ClientSDK { diff --git a/src/sdk/sdk.ts b/src/sdk/sdk.ts index 0e0566fc..fbaf5fd5 100644 --- a/src/sdk/sdk.ts +++ b/src/sdk/sdk.ts @@ -18,12 +18,14 @@ import { ParametersT } from "./parameters.js"; import { Providers } from "./providers.js"; // #region imports import { callModel as callModelFunc } from "../funcs/callModel.js"; -import { ResponseWrapper } from "../lib/response-wrapper.js"; -import { RequestOptions } from "../lib/sdks.js"; -import { EnhancedTool, MaxToolRounds, ToolType } from "../lib/tool-types.js"; -import * as models from "../models/index.js"; +import type { ResponseWrapper } from "../lib/response-wrapper.js"; +import type { RequestOptions } from "../lib/sdks.js"; +import { type MaxToolRounds, Tool, ToolType } from "../lib/tool-types.js"; +import type { OpenResponsesInput } from "../models/openresponsesinput.js"; +import type { OpenResponsesRequest } from "../models/openresponsesrequest.js"; + export { ToolType }; -export type { EnhancedTool, MaxToolRounds }; +export type { MaxToolRounds }; // #endregion imports export class OpenRouter extends ClientSDK { @@ -94,9 +96,9 @@ export class OpenRouter extends ClientSDK { // #region sdk-class-body callModel( - request: Omit & { - input?: import("../funcs/callModel.js").CallModelInput; - tools?: import("../funcs/callModel.js").CallModelTools; + request: Omit & { + input?: OpenResponsesInput; + tools?: Tool[]; maxToolRounds?: MaxToolRounds; }, options?: RequestOptions, diff --git a/src/types/unrecognized.ts b/src/types/unrecognized.ts index 08227f26..b7a2a13f 100644 --- a/src/types/unrecognized.ts +++ b/src/types/unrecognized.ts @@ -16,8 +16,16 @@ export function startCountingUnrecognized() { refCount++; const start = globalCount; return { - end: () => { + /** + * Ends counting and returns the delta. + * @param delta - If provided, only this amount is added to the parent counter + * (used for nested unions where we only want to record the winning option's count). + * If not provided, records all counts since start(). + */ + end: (delta?: number) => { const count = globalCount - start; + // Reset globalCount back to start, then add only the specified delta + globalCount = start + (delta ?? count); if (--refCount === 0) globalCount = 0; return count; }, diff --git a/tests/e2e/callModel-tools.test.ts b/tests/e2e/callModel-tools.test.ts index 00bb49fe..68a08310 100644 --- a/tests/e2e/callModel-tools.test.ts +++ b/tests/e2e/callModel-tools.test.ts @@ -1,37 +1,41 @@ -import { describe, it, expect, beforeAll } from "vitest"; -import { OpenRouter, ToolType } from "../../src/index.js"; -import { z, toJSONSchema } from "zod/v4"; -import * as dotenv from "dotenv"; +import * as dotenv from 'dotenv'; +import { beforeAll, describe, expect, it } from 'vitest'; +import { toJSONSchema, z } from 'zod/v4'; +import { OpenRouter, ToolType } from '../../src/index.js'; dotenv.config(); -describe("Enhanced Tool Support for callModel", () => { +describe('Enhanced Tool Support for callModel', () => { let client: OpenRouter; beforeAll(() => { const apiKey = process.env.OPENROUTER_API_KEY; if (!apiKey) { - throw new Error("OPENROUTER_API_KEY environment variable is required"); + throw new Error('OPENROUTER_API_KEY environment variable is required'); } - client = new OpenRouter({ apiKey }); + client = new OpenRouter({ + apiKey, + }); }); - describe("Zod Schema Conversion", () => { - it("should convert Zod schema to JSON Schema using v4 toJSONSchema()", () => { + describe('Zod Schema Conversion', () => { + it('should convert Zod schema to JSON Schema using v4 toJSONSchema()', () => { const schema = z.object({ name: z.string().describe("The user's name"), age: z.number().min(0).describe("The user's age"), }); - const jsonSchema = toJSONSchema(schema, { target: "openapi-3.0" }); + const jsonSchema = toJSONSchema(schema, { + target: 'openapi-3.0', + }); - expect(jsonSchema).toHaveProperty("type", "object"); - expect(jsonSchema).toHaveProperty("properties"); - expect(jsonSchema.properties).toHaveProperty("name"); - expect(jsonSchema.properties).toHaveProperty("age"); + expect(jsonSchema).toHaveProperty('type', 'object'); + expect(jsonSchema).toHaveProperty('properties'); + expect(jsonSchema.properties).toHaveProperty('name'); + expect(jsonSchema.properties).toHaveProperty('age'); }); - it("should handle complex nested schemas", () => { + it('should handle complex nested schemas', () => { const schema = z.object({ user: z.object({ name: z.string(), @@ -43,73 +47,89 @@ describe("Enhanced Tool Support for callModel", () => { tags: z.array(z.string()), }); - const jsonSchema = toJSONSchema(schema, { target: "openapi-3.0" }); + const jsonSchema = toJSONSchema(schema, { + target: 'openapi-3.0', + }); - expect(jsonSchema.properties.user).toBeDefined(); - expect(jsonSchema.properties.tags).toBeDefined(); + expect(jsonSchema.properties?.user).toBeDefined(); + expect(jsonSchema.properties?.tags).toBeDefined(); }); - it("should preserve descriptions and metadata", () => { + it('should preserve descriptions and metadata', () => { const schema = z.object({ - location: z.string().describe("City and country e.g. Bogotá, Colombia"), + location: z.string().describe('City and country e.g. Bogotá, Colombia'), }); - const jsonSchema = toJSONSchema(schema, { target: "openapi-3.0" }); + const jsonSchema = toJSONSchema(schema, { + target: 'openapi-3.0', + }); - expect(jsonSchema.properties.location.description).toBe( - "City and country e.g. Bogotá, Colombia" + // @ts-expect-error - description is not a property of _JSONSchema + expect(jsonSchema.properties?.location?.description).toBe( + 'City and country e.g. Bogotá, Colombia', ); }); }); - describe("Tool Definition", () => { - it("should define tool with inputSchema", async () => { + describe('Tool Definition', () => { + it('should define tool with inputSchema', async () => { const weatherTool = { type: ToolType.Function, function: { - name: "get_weather", - description: "Get current temperature for a given location.", + name: 'get_weather', + description: 'Get current temperature for a given location.', inputSchema: z.object({ - location: z.string().describe("City and country e.g. Bogotá, Colombia"), + location: z.string().describe('City and country e.g. Bogotá, Colombia'), }), outputSchema: z.object({ temperature: z.number(), description: z.string(), }), - execute: async (parameters: { location: string }, context) => { + execute: async ( + _parameters: { + location: string; + }, + _context, + ) => { return { temperature: 20, - description: "Clear skies", + description: 'Clear skies', }; }, }, }; // Tool definition should be valid - expect(weatherTool.function.name).toBe("get_weather"); + expect(weatherTool.function.name).toBe('get_weather'); expect(weatherTool.function.inputSchema).toBeDefined(); expect(weatherTool.function.outputSchema).toBeDefined(); }); - it("should validate input against Zod schema", () => { + it('should validate input against Zod schema', () => { const schema = z.object({ location: z.string(), temperature: z.number(), }); - const validInput = { location: "Tokyo", temperature: 25 }; + const validInput = { + location: 'Tokyo', + temperature: 25, + }; const result = schema.safeParse(validInput); expect(result.success).toBe(true); }); - it("should reject invalid input with ZodError", () => { + it('should reject invalid input with ZodError', () => { const schema = z.object({ location: z.string(), temperature: z.number(), }); - const invalidInput = { location: "Tokyo", temperature: "hot" }; // Wrong type + const invalidInput = { + location: 'Tokyo', + temperature: 'hot', + }; // Wrong type const result = schema.safeParse(invalidInput); @@ -120,13 +140,13 @@ describe("Enhanced Tool Support for callModel", () => { }); }); - describe("Regular Tool Execution", () => { - it("should execute tool with valid input", async () => { + describe('Regular Tool Execution', () => { + it('should execute tool with valid input', async () => { const addTool = { type: ToolType.Function, function: { - name: "add_numbers", - description: "Add two numbers together", + name: 'add_numbers', + description: 'Add two numbers together', inputSchema: z.object({ a: z.number(), b: z.number(), @@ -134,8 +154,16 @@ describe("Enhanced Tool Support for callModel", () => { outputSchema: z.object({ result: z.number(), }), - execute: async (params: { a: number; b: number }, context) => { - return { result: params.a + params.b }; + execute: async ( + params: { + a: number; + b: number; + }, + _context, + ) => { + return { + result: params.a + params.b, + }; }, }, }; @@ -143,33 +171,42 @@ describe("Enhanced Tool Support for callModel", () => { const mockContext = { numberOfTurns: 1, messageHistory: [], - model: "test-model", + model: 'test-model', }; - const result = await addTool.function.execute({ a: 5, b: 3 }, mockContext); + const result = await addTool.function.execute( + { + a: 5, + b: 3, + }, + mockContext, + ); expect(result.result).toBe(8); }); - it("should validate output against outputSchema", () => { + it('should validate output against outputSchema', () => { const schema = z.object({ temperature: z.number(), description: z.string(), }); - const output = { temperature: 72, description: "Sunny" }; + const output = { + temperature: 72, + description: 'Sunny', + }; const result = schema.safeParse(output); expect(result.success).toBe(true); }); - it("should handle execution errors gracefully", async () => { + it('should handle execution errors gracefully', async () => { const errorTool = { type: ToolType.Function, function: { - name: "error_tool", + name: 'error_tool', inputSchema: z.object({}), - execute: async (params, context) => { - throw new Error("Tool execution failed"); + execute: async (_params, _context) => { + throw new Error('Tool execution failed'); }, }, }; @@ -177,18 +214,21 @@ describe("Enhanced Tool Support for callModel", () => { const mockContext = { numberOfTurns: 1, messageHistory: [], - model: "test-model", + model: 'test-model', }; await expect(errorTool.function.execute({}, mockContext)).rejects.toThrow( - "Tool execution failed" + 'Tool execution failed', ); }); }); - describe("Generator Tools (Preliminary Results)", () => { - it("should collect all yielded values as preliminary results", async () => { + describe('Generator Tools (Preliminary Results)', () => { + it('should collect all yielded values as preliminary results', async () => { const eventSchema = z.object({ - type: z.enum(["start", "update"]), + type: z.enum([ + 'start', + 'update', + ]), data: z .object({ location: z.string().optional(), @@ -207,23 +247,36 @@ describe("Enhanced Tool Support for callModel", () => { const generatorTool = { type: ToolType.Function, function: { - name: "get_weather_with_updates", - description: "Get weather with streaming updates", + name: 'get_weather_with_updates', + description: 'Get weather with streaming updates', inputSchema: z.object({ location: z.string(), }), eventSchema, outputSchema, - execute: async function* (params: { location: string }, context) { - yield { type: "start" as const, data: { location: params.location } }; + execute: async function* ( + params: { + location: string; + }, + _context, + ) { + yield { + type: 'start' as const, + data: { + location: params.location, + }, + }; yield { - type: "update" as const, - data: { temperature: 20, description: "Clear skies" }, + type: 'update' as const, + data: { + temperature: 20, + description: 'Clear skies', + }, }; // Final output (different schema) yield { temperature: 20, - description: "Clear skies", + description: 'Clear skies', location: params.location, }; }, @@ -233,38 +286,69 @@ describe("Enhanced Tool Support for callModel", () => { const mockContext = { numberOfTurns: 1, messageHistory: [], - model: "test-model", + model: 'test-model', }; const results: unknown[] = []; - for await (const result of generatorTool.function.execute({ - location: "Tokyo", - }, mockContext)) { + for await (const result of generatorTool.function.execute( + { + location: 'Tokyo', + }, + mockContext, + )) { results.push(result); } expect(results).toHaveLength(3); - expect(results[0]).toEqual({ type: "start", data: { location: "Tokyo" } }); - expect(results[1]).toEqual({ type: "update", data: { temperature: 20, description: "Clear skies" } }); - expect(results[2]).toEqual({ temperature: 20, description: "Clear skies", location: "Tokyo" }); + expect(results[0]).toEqual({ + type: 'start', + data: { + location: 'Tokyo', + }, + }); + expect(results[1]).toEqual({ + type: 'update', + data: { + temperature: 20, + description: 'Clear skies', + }, + }); + expect(results[2]).toEqual({ + temperature: 20, + description: 'Clear skies', + location: 'Tokyo', + }); }); - it("should send only final (last) yield to model", async () => { + it('should send only final (last) yield to model', async () => { const generatorTool = { type: ToolType.Function, function: { - name: "process_data", - inputSchema: z.object({ data: z.string() }), + name: 'process_data', + inputSchema: z.object({ + data: z.string(), + }), eventSchema: z.object({ status: z.string(), }), outputSchema: z.object({ result: z.string(), }), - execute: async function* (params: { data: string }, context) { - yield { status: "processing" }; - yield { status: "almost_done" }; + execute: async function* ( + params: { + data: string; + }, + _context, + ) { + yield { + status: 'processing', + }; + yield { + status: 'almost_done', + }; // Final output (different schema) - yield { result: `Processed: ${params.data}` }; + yield { + result: `Processed: ${params.data}`, + }; }, }, }; @@ -272,33 +356,52 @@ describe("Enhanced Tool Support for callModel", () => { const mockContext = { numberOfTurns: 1, messageHistory: [], - model: "test-model", + model: 'test-model', }; - const results = []; - for await (const result of generatorTool.function.execute({ data: "test" }, mockContext)) { + const results: unknown[] = []; + for await (const result of generatorTool.function.execute( + { + data: 'test', + }, + mockContext, + )) { results.push(result); } const finalResult = results[results.length - 1]; - expect(finalResult).toEqual({ result: "Processed: test" }); + expect(finalResult).toEqual({ + result: 'Processed: test', + }); }); - it("should validate all events against eventSchema", async () => { + it('should validate all events against eventSchema', async () => { const eventSchema = z.object({ - type: z.enum(["start", "end"]), + type: z.enum([ + 'start', + 'end', + ]), message: z.string(), }); - const validEvent1 = { type: "start" as const, message: "Starting" }; - const validEvent2 = { type: "end" as const, message: "Done" }; - const invalidEvent = { type: "middle", message: "Processing" }; + const validEvent1 = { + type: 'start' as const, + message: 'Starting', + }; + const validEvent2 = { + type: 'end' as const, + message: 'Done', + }; + const invalidEvent = { + type: 'middle', + message: 'Processing', + }; expect(eventSchema.safeParse(validEvent1).success).toBe(true); expect(eventSchema.safeParse(validEvent2).success).toBe(true); expect(eventSchema.safeParse(invalidEvent).success).toBe(false); }); - it("should handle async generators", async () => { + it('should handle async generators', async () => { async function* testGenerator() { yield 1; await new Promise((resolve) => setTimeout(resolve, 10)); @@ -307,29 +410,55 @@ describe("Enhanced Tool Support for callModel", () => { yield 3; } - const results = []; + const results: unknown[] = []; for await (const value of testGenerator()) { results.push(value); } - expect(results).toEqual([1, 2, 3]); + expect(results).toEqual([ + 1, + 2, + 3, + ]); }); - it("should emit preliminary results via callback", async () => { - const preliminaryResults: any[] = []; + it('should emit preliminary results via callback', async () => { + const preliminaryResults: unknown[] = []; const generatorTool = { type: ToolType.Function, function: { - name: "streaming_tool", - inputSchema: z.object({ input: z.string() }), - eventSchema: z.object({ progress: z.number(), message: z.string() }), - outputSchema: z.object({ completed: z.boolean(), finalProgress: z.number() }), - execute: async function* (params: { input: string }, context) { - yield { progress: 25, message: "Quarter done" }; - yield { progress: 50, message: "Half done" }; + name: 'streaming_tool', + inputSchema: z.object({ + input: z.string(), + }), + eventSchema: z.object({ + progress: z.number(), + message: z.string(), + }), + outputSchema: z.object({ + completed: z.boolean(), + finalProgress: z.number(), + }), + execute: async function* ( + _params: { + input: string; + }, + _context, + ) { + yield { + progress: 25, + message: 'Quarter done', + }; + yield { + progress: 50, + message: 'Half done', + }; // Final output (different schema) - yield { completed: true, finalProgress: 100 }; + yield { + completed: true, + finalProgress: 100, + }; }, }, }; @@ -337,28 +466,46 @@ describe("Enhanced Tool Support for callModel", () => { const mockContext = { numberOfTurns: 1, messageHistory: [], - model: "test-model", + model: 'test-model', }; // Simulate callback - for await (const result of generatorTool.function.execute({ input: "test" }, mockContext)) { + for await (const result of generatorTool.function.execute( + { + input: 'test', + }, + mockContext, + )) { preliminaryResults.push(result); } expect(preliminaryResults).toHaveLength(3); - expect(preliminaryResults[0]).toEqual({ progress: 25, message: "Quarter done" }); - expect(preliminaryResults[1]).toEqual({ progress: 50, message: "Half done" }); - expect(preliminaryResults[2]).toEqual({ completed: true, finalProgress: 100 }); + expect(preliminaryResults[0]).toEqual({ + progress: 25, + message: 'Quarter done', + }); + expect(preliminaryResults[1]).toEqual({ + progress: 50, + message: 'Half done', + }); + expect(preliminaryResults[2]).toEqual({ + completed: true, + finalProgress: 100, + }); }); - it("should throw error if generator completes without emitting values", async () => { + it('should throw error if generator completes without emitting values', async () => { const generatorTool = { type: ToolType.Function, function: { - name: "empty_generator", + name: 'empty_generator', inputSchema: z.object({}), - eventSchema: z.object({ status: z.string() }), - outputSchema: z.object({ result: z.string() }), - execute: async function* (params, context) { + eventSchema: z.object({ + status: z.string(), + }), + outputSchema: z.object({ + result: z.string(), + }), + execute: async function* (_params, _context) { // Emit nothing }, }, @@ -367,7 +514,7 @@ describe("Enhanced Tool Support for callModel", () => { const mockContext = { numberOfTurns: 1, messageHistory: [], - model: "test-model", + model: 'test-model', }; const results = []; @@ -379,13 +526,13 @@ describe("Enhanced Tool Support for callModel", () => { }); }); - describe("Manual Tool Execution", () => { - it("should define tool without execute function", () => { + describe('Manual Tool Execution', () => { + it('should define tool without execute function', () => { const manualTool = { type: ToolType.Function, function: { - name: "manual_tool", - description: "A tool that requires manual handling", + name: 'manual_tool', + description: 'A tool that requires manual handling', inputSchema: z.object({ query: z.string(), }), @@ -395,86 +542,100 @@ describe("Enhanced Tool Support for callModel", () => { }, }; - expect(manualTool.function.name).toBe("manual_tool"); - expect(manualTool.function).not.toHaveProperty("execute"); + expect(manualTool.function.name).toBe('manual_tool'); + expect(manualTool.function).not.toHaveProperty('execute'); }); }); - describe("Integration with OpenRouter API", () => { - it.skip("should send tool call to API and receive tool call response", async () => { + describe('Integration with OpenRouter API', () => { + it.skip('should send tool call to API and receive tool call response', async () => { // This test requires actual API integration which we'll implement const weatherTool = { type: ToolType.Function, function: { - name: "get_weather", - description: "Get the current weather for a location", + name: 'get_weather', + description: 'Get the current weather for a location', inputSchema: z.object({ - location: z.string().describe("The city and country"), + location: z.string().describe('The city and country'), }), outputSchema: z.object({ temperature: z.number(), description: z.string(), }), - execute: async (params: { location: string }, context) => { + execute: async ( + _params: { + location: string; + }, + _context, + ) => { return { temperature: 72, - description: "Sunny", + description: 'Sunny', }; }, }, }; const response = await client.callModel({ - model: "openai/gpt-4o", - messages: [ + model: 'openai/gpt-4o', + input: [ { - role: "user", + role: 'user', content: "What's the weather like in San Francisco?", }, ], - tools: [weatherTool], + tools: [ + weatherTool, + ], }); const message = await response.getMessage(); expect(message).toBeDefined(); }, 30000); - it.skip("should handle multi-turn conversation with tool execution", async () => { + it.skip('should handle multi-turn conversation with tool execution', async () => { // This will test the full loop: request -> tool call -> execute -> send result -> final response const calculatorTool = { type: ToolType.Function, function: { - name: "calculate", - description: "Perform a mathematical calculation", + name: 'calculate', + description: 'Perform a mathematical calculation', inputSchema: z.object({ - expression: z.string().describe("Math expression to evaluate"), + expression: z.string().describe('Math expression to evaluate'), }), outputSchema: z.object({ result: z.number(), }), - execute: async (params: { expression: string }, context) => { + execute: async ( + params: { + expression: string; + }, + _context, + ) => { // Simple eval for testing (don't use in production!) + // biome-ignore lint/security/noGlobalEval: this is just a test const result = eval(params.expression); - return { result }; + return { + result, + }; }, }, }; const response = await client.callModel( { - model: "openai/gpt-4o", - messages: [ + model: 'openai/gpt-4o', + input: [ { - role: "user", - content: "What is 25 * 4?", + role: 'user', + content: 'What is 25 * 4?', }, ], - tools: [calculatorTool], - }, - { - autoExecuteTools: true, + tools: [ + calculatorTool, + ], maxToolRounds: 3, - } + }, ); const finalMessage = await response.getMessage(); @@ -483,90 +644,112 @@ describe("Enhanced Tool Support for callModel", () => { }, 30000); }); - describe("Error Handling", () => { - it("should handle Zod input validation errors", () => { + describe('Error Handling', () => { + it('should handle Zod input validation errors', () => { const schema = z.object({ name: z.string(), age: z.number().positive(), }); - const invalidInput = { name: "John", age: -5 }; + const invalidInput = { + name: 'John', + age: -5, + }; const result = schema.safeParse(invalidInput); expect(result.success).toBe(false); if (!result.success) { expect(result.error.issues).toHaveLength(1); - expect(result.error.issues[0].path).toEqual(["age"]); + expect(result.error.issues[0].path).toEqual([ + 'age', + ]); } }); - it("should handle Zod output validation errors", () => { + it('should handle Zod output validation errors', () => { const schema = z.object({ temperature: z.number(), description: z.string(), }); - const invalidOutput = { temperature: "hot", description: "Sunny" }; + const invalidOutput = { + temperature: 'hot', + description: 'Sunny', + }; const result = schema.safeParse(invalidOutput); expect(result.success).toBe(false); }); - it("should provide clear error messages for validation failures", () => { + it('should provide clear error messages for validation failures', () => { const schema = z.object({ email: z.string().email(), age: z.number().min(18), }); - const invalidData = { email: "not-an-email", age: 15 }; + const invalidData = { + email: 'not-an-email', + age: 15, + }; const result = schema.safeParse(invalidData); if (!result.success) { expect(result.error.issues.length).toBeGreaterThan(0); const issues = result.error.issues; - expect(issues.some((i) => i.path.includes("email"))).toBe(true); - expect(issues.some((i) => i.path.includes("age"))).toBe(true); + expect(issues.some((i) => i.path.includes('email'))).toBe(true); + expect(issues.some((i) => i.path.includes('age'))).toBe(true); } }); }); - describe("Type Safety", () => { - it("should infer correct parameter types from inputSchema", () => { + describe('Type Safety', () => { + it('should infer correct parameter types from inputSchema', () => { const weatherTool = { type: ToolType.Function, function: { - name: "get_weather", + name: 'get_weather', inputSchema: z.object({ location: z.string(), - units: z.enum(["celsius", "fahrenheit"]).optional(), + units: z + .enum([ + 'celsius', + 'fahrenheit', + ]) + .optional(), }), - execute: async (params: z.infer, context) => { + execute: async (params: z.infer, _context) => { // TypeScript should infer: { location: string; units?: "celsius" | "fahrenheit" } const location: string = params.location; - const units: "celsius" | "fahrenheit" | undefined = params.units; - return { location, units }; + const units: 'celsius' | 'fahrenheit' | undefined = params.units; + return { + location, + units, + }; }, }, }; - expect(weatherTool.function.name).toBe("get_weather"); + expect(weatherTool.function.name).toBe('get_weather'); }); - it("should infer correct return types from outputSchema", () => { + it('should infer correct return types from outputSchema', () => { const outputSchema = z.object({ temperature: z.number(), - unit: z.enum(["C", "F"]), + unit: z.enum([ + 'C', + 'F', + ]), }); type OutputType = z.infer; const output: OutputType = { temperature: 72, - unit: "F", + unit: 'F', }; expect(output.temperature).toBe(72); - expect(output.unit).toBe("F"); + expect(output.unit).toBe('F'); }); }); }); diff --git a/tests/e2e/callModel.test.ts b/tests/e2e/callModel.test.ts index 17a210e7..b9c645ae 100644 --- a/tests/e2e/callModel.test.ts +++ b/tests/e2e/callModel.test.ts @@ -1,19 +1,20 @@ -import { beforeAll, describe, expect, it } from "vitest"; -import { OpenRouter, ToolType } from "../../src/sdk/sdk.js"; -import { Message } from "../../src/models/message.js"; -import { AssistantMessage } from "../../src/models/assistantmessage.js"; -import { ToolResponseMessage } from "../../src/models/toolresponsemessage.js"; -import { z } from "zod/v4"; - -describe("callModel E2E Tests", () => { +import type { ChatStreamEvent, EnhancedResponseStreamEvent } from '../../src/lib/tool-types.js'; +import type { AssistantMessage } from '../../src/models/assistantmessage.js'; +import type { ToolResponseMessage } from '../../src/models/toolresponsemessage.js'; + +import { beforeAll, describe, expect, it } from 'vitest'; +import { z } from 'zod/v4'; +import { OpenRouter, ToolType } from '../../src/sdk/sdk.js'; +import { OpenResponsesNonStreamingResponse } from '../../src/models/openresponsesnonstreamingresponse.js'; +import { OpenResponsesStreamEvent } from '../../src/models/openresponsesstreamevent.js'; + +describe('callModel E2E Tests', () => { let client: OpenRouter; beforeAll(() => { const apiKey = process.env.OPENROUTER_API_KEY; if (!apiKey) { - throw new Error( - "OPENROUTER_API_KEY environment variable is required for e2e tests" - ); + throw new Error('OPENROUTER_API_KEY environment variable is required for e2e tests'); } client = new OpenRouter({ @@ -21,17 +22,17 @@ describe("callModel E2E Tests", () => { }); }); - describe("Chat-style messages support", () => { - it("should accept chat-style Message array as input", async () => { + describe('Chat-style messages support', () => { + it('should accept chat-style Message array as input', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "system", - content: "You are a helpful assistant.", + role: 'system', + content: 'You are a helpful assistant.', }, { - role: "user", + role: 'user', content: "Say 'chat test' and nothing else.", }, ], @@ -40,25 +41,25 @@ describe("callModel E2E Tests", () => { const text = await response.getText(); expect(text).toBeDefined(); - expect(typeof text).toBe("string"); + expect(typeof text).toBe('string'); expect(text.length).toBeGreaterThan(0); }); - it("should handle multi-turn chat-style conversation", async () => { + it('should handle multi-turn chat-style conversation', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", - content: "My favorite color is blue.", + role: 'user', + content: 'My favorite color is blue.', }, { - role: "assistant", + role: 'assistant', content: "That's nice! Blue is a calming color.", }, { - role: "user", - content: "What is my favorite color?", + role: 'user', + content: 'What is my favorite color?', }, ], }); @@ -66,20 +67,20 @@ describe("callModel E2E Tests", () => { const text = await response.getText(); expect(text).toBeDefined(); - expect(text.toLowerCase()).toContain("blue"); + expect(text.toLowerCase()).toContain('blue'); }); - it("should handle system message in chat-style input", async () => { + it('should handle system message in chat-style input', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "system", - content: "Always respond with exactly one word.", + role: 'system', + content: 'Always respond with exactly one word.', }, { - role: "user", - content: "Say hello.", + role: 'user', + content: 'Say hello.', }, ], }); @@ -87,33 +88,36 @@ describe("callModel E2E Tests", () => { const text = await response.getText(); expect(text).toBeDefined(); - expect(typeof text).toBe("string"); + expect(typeof text).toBe('string'); }); - it("should accept chat-style tools (ToolDefinitionJson)", async () => { + it('should accept chat-style tools (ToolDefinitionJson)', async () => { const response = client.callModel({ - model: "qwen/qwen3-vl-8b-instruct", + model: 'qwen/qwen3-vl-8b-instruct', input: [ { - role: "user", + role: 'user', content: "What's the weather in Paris? Use the get_weather tool.", }, ], tools: [ { - type: "function" as const, + type: ToolType.Function, function: { - name: "get_weather", - description: "Get weather for a location", - parameters: { - type: "object", - properties: { - location: { - type: "string", - description: "City name", - }, - }, - required: ["location"], + name: 'get_weather', + description: 'Get weather for a location', + inputSchema: z.object({ + location: z.string().describe('City name'), + }), + outputSchema: z.object({ + temperature: z.number(), + condition: z.string(), + }), + execute: async (_params) => { + return { + temperature: 22, + condition: 'Sunny', + }; }, }, }, @@ -124,35 +128,41 @@ describe("callModel E2E Tests", () => { // Model should call the tool expect(toolCalls.length).toBeGreaterThan(0); - expect(toolCalls[0].name).toBe("get_weather"); + expect(toolCalls[0].name).toBe('get_weather'); expect(toolCalls[0].arguments).toBeDefined(); }, 30000); - it("should work with chat-style messages and chat-style tools together", async () => { + it('should work with chat-style messages and chat-style tools together', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.1-8b-instruct", + model: 'meta-llama/llama-3.1-8b-instruct', input: [ { - role: "system", - content: "You are a helpful assistant. Use tools when needed.", + role: 'system', + content: 'You are a helpful assistant. Use tools when needed.', }, { - role: "user", - content: "Get the weather in Tokyo using the weather tool.", + role: 'user', + content: 'Get the weather in Tokyo using the weather tool.', }, ], tools: [ { - type: "function" as const, + type: ToolType.Function, function: { - name: "get_weather", - description: "Get current weather", - parameters: { - type: "object", - properties: { - city: { type: "string" }, - }, - required: ["city"], + name: 'get_weather', + description: 'Get current weather', + inputSchema: z.object({ + city: z.string(), + }), + outputSchema: z.object({ + temperature: z.number(), + condition: z.string(), + }), + execute: async (_params) => { + return { + temperature: 22, + condition: 'Sunny', + }; }, }, }, @@ -162,17 +172,17 @@ describe("callModel E2E Tests", () => { const toolCalls = await response.getToolCalls(); expect(toolCalls.length).toBeGreaterThan(0); - expect(toolCalls[0].name).toBe("get_weather"); + expect(toolCalls[0].name).toBe('get_weather'); }, 30000); }); - describe("response.text - Text extraction", () => { - it("should successfully get text from a response", async () => { + describe('response.text - Text extraction', () => { + it('should successfully get text from a response', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", + role: 'user', content: "Say 'Hello, World!' and nothing else.", }, ], @@ -181,26 +191,26 @@ describe("callModel E2E Tests", () => { const text = await response.getText(); expect(text).toBeDefined(); - expect(typeof text).toBe("string"); + expect(typeof text).toBe('string'); expect(text.length).toBeGreaterThan(0); - expect(text.toLowerCase()).toContain("hello"); + expect(text.toLowerCase()).toContain('hello'); }); - it("should handle multi-turn conversations", async () => { + it('should handle multi-turn conversations', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", - content: "My name is Bob.", + role: 'user', + content: 'My name is Bob.', }, { - role: "assistant", - content: "Hello Bob! How can I help you today?", + role: 'assistant', + content: 'Hello Bob! How can I help you today?', }, { - role: "user", - content: "What is my name?", + role: 'user', + content: 'What is my name?', }, ], }); @@ -208,18 +218,17 @@ describe("callModel E2E Tests", () => { const text = await response.getText(); expect(text).toBeDefined(); - expect(text.toLowerCase()).toContain("bob"); - console.log(text) + expect(text.toLowerCase()).toContain('bob'); }); }); - describe("response.message - Complete message extraction", () => { - it("should successfully get a complete message from response", async () => { + describe('response.message - Complete message extraction', () => { + it('should successfully get a complete message from response', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", + role: 'user', content: "Say 'test message' and nothing else.", }, ], @@ -228,28 +237,32 @@ describe("callModel E2E Tests", () => { const message = await response.getMessage(); expect(message).toBeDefined(); - expect(message.role).toBe("assistant"); - expect(Array.isArray(message.content) || typeof message.content === "string" || message.content === null).toBe(true); + expect(message.role).toBe('assistant'); + expect( + Array.isArray(message.content) || + typeof message.content === 'string' || + message.content === null, + ).toBe(true); if (Array.isArray(message.content)) { expect(message.content.length).toBeGreaterThan(0); const firstContent = message.content[0]; expect(firstContent).toBeDefined(); - expect("type" in firstContent).toBe(true); - } else if (typeof message.content === "string") { + expect('type' in firstContent).toBe(true); + } else if (typeof message.content === 'string') { expect(message.content.length).toBeGreaterThan(0); } else if (message.content === null) { expect(message.content).toBeNull(); } }); - it("should have proper message structure", async () => { + it('should have proper message structure', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", - content: "Respond with a simple greeting.", + role: 'user', + content: 'Respond with a simple greeting.', }, ], }); @@ -258,18 +271,18 @@ describe("callModel E2E Tests", () => { // Ensure the message fully matches the OpenAI Chat API assistant message shape expect(message).toMatchObject({ - role: "assistant", + role: 'assistant', content: expect.anything(), }); // content can be string, array, or null according to OpenAI spec // Check rest of top-level shape expect(Object.keys(message)).toEqual( expect.arrayContaining([ - "role", - "content", + 'role', + 'content', // Optionally some implementations may also include: // "tool_calls", "function_call", "tool_call_id", "name" - ]) + ]), ); // If content is array, match OpenAI content block shape if (Array.isArray(message.content)) { @@ -281,7 +294,7 @@ describe("callModel E2E Tests", () => { } } // If present, tool_calls in OpenAI schema must be an array of objects - if (message.role === "assistant" && message.toolCalls) { + if (message.role === 'assistant' && message.toolCalls) { expect(Array.isArray(message.toolCalls)).toBe(true); for (const call of message.toolCalls) { expect(call).toMatchObject({ @@ -297,19 +310,19 @@ describe("callModel E2E Tests", () => { } expect(message).toBeDefined(); - expect(message.role).toBe("assistant"); + expect(message.role).toBe('assistant'); expect(message.content).toBeDefined(); }); }); - describe("response.textStream - Streaming text deltas", () => { - it("should successfully stream text deltas", async () => { + describe('response.textStream - Streaming text deltas', () => { + it('should successfully stream text deltas', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", - content: "Count from 1 to 5.", + role: 'user', + content: 'Count from 1 to 5.', }, ], }); @@ -317,24 +330,24 @@ describe("callModel E2E Tests", () => { const deltas: string[] = []; for await (const delta of response.getTextStream()) { - expect(typeof delta).toBe("string"); + expect(typeof delta).toBe('string'); deltas.push(delta); } expect(deltas.length).toBeGreaterThan(0); // Verify we can reconstruct the full text - const fullText = deltas.join(""); + const fullText = deltas.join(''); expect(fullText.length).toBeGreaterThan(0); }); - it("should stream progressively without waiting for completion", async () => { + it('should stream progressively without waiting for completion', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", - content: "Write a short poem.", + role: 'user', + content: 'Write a short poem.', }, ], }); @@ -343,7 +356,7 @@ describe("callModel E2E Tests", () => { let lastDeltaTime: number | null = null; let deltaCount = 0; - for await (const delta of response.getTextStream()) { + for await (const _delta of response.getTextStream()) { if (!firstDeltaTime) { firstDeltaTime = Date.now(); } @@ -362,13 +375,13 @@ describe("callModel E2E Tests", () => { }, 15000); }); - describe("response.newMessagesStream - Streaming message updates", () => { - it("should successfully stream incremental message updates", async () => { + describe('response.newMessagesStream - Streaming message updates', () => { + it('should successfully stream incremental message updates', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", + role: 'user', content: "Say 'streaming test'.", }, ], @@ -378,8 +391,8 @@ describe("callModel E2E Tests", () => { for await (const message of response.getNewMessagesStream()) { expect(message).toBeDefined(); - expect(message.role).toBe("assistant"); - expect(typeof message.content).toBe("string"); + expect(message.role).toBe('assistant'); + expect(typeof message.content).toBe('string'); messages.push(message); } @@ -390,19 +403,19 @@ describe("callModel E2E Tests", () => { const firstMessage = messages[0]; const lastMessage = messages[messages.length - 1]; - const firstText = (firstMessage.content as string) || ""; - const lastText = (lastMessage.content as string) || ""; + const firstText = (firstMessage.content as string) || ''; + const lastText = (lastMessage.content as string) || ''; expect(lastText.length).toBeGreaterThanOrEqual(firstText.length); } }, 15000); - it("should return AssistantMessages with correct shape", async () => { + it('should return AssistantMessages with correct shape', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", + role: 'user', content: "Say 'hello world'.", }, ], @@ -414,17 +427,17 @@ describe("callModel E2E Tests", () => { messages.push(message); // Deep validation of AssistantMessage shape - expect(message).toHaveProperty("role"); - expect(message).toHaveProperty("content"); + expect(message).toHaveProperty('role'); + expect(message).toHaveProperty('content'); - if (message.role === "assistant") { + if (message.role === 'assistant') { // Validate AssistantMessage structure - expect(message.role).toBe("assistant"); + expect(message.role).toBe('assistant'); // content must be string, array, null, or undefined const contentType = typeof message.content; const isValidContent = - contentType === "string" || + contentType === 'string' || Array.isArray(message.content) || message.content === null || message.content === undefined; @@ -433,24 +446,24 @@ describe("callModel E2E Tests", () => { // If content is an array, each item must have a type if (Array.isArray(message.content)) { for (const item of message.content) { - expect(item).toHaveProperty("type"); - expect(typeof item.type).toBe("string"); + expect(item).toHaveProperty('type'); + expect(typeof item.type).toBe('string'); } } // If toolCalls present, validate their shape - if ("toolCalls" in message && message.toolCalls) { + if ('toolCalls' in message && message.toolCalls) { expect(Array.isArray(message.toolCalls)).toBe(true); for (const toolCall of message.toolCalls) { - expect(toolCall).toHaveProperty("id"); - expect(toolCall).toHaveProperty("type"); - expect(toolCall).toHaveProperty("function"); - expect(typeof toolCall.id).toBe("string"); - expect(typeof toolCall.type).toBe("string"); - expect(toolCall.function).toHaveProperty("name"); - expect(toolCall.function).toHaveProperty("arguments"); - expect(typeof toolCall.function.name).toBe("string"); - expect(typeof toolCall.function.arguments).toBe("string"); + expect(toolCall).toHaveProperty('id'); + expect(toolCall).toHaveProperty('type'); + expect(toolCall).toHaveProperty('function'); + expect(typeof toolCall.id).toBe('string'); + expect(typeof toolCall.type).toBe('string'); + expect(toolCall.function).toHaveProperty('name'); + expect(toolCall.function).toHaveProperty('arguments'); + expect(typeof toolCall.function.name).toBe('string'); + expect(typeof toolCall.function.arguments).toBe('string'); } } } @@ -460,15 +473,15 @@ describe("callModel E2E Tests", () => { // Verify last message has the complete assistant response shape const lastMessage = messages[messages.length - 1]; - expect(lastMessage.role).toBe("assistant"); + expect(lastMessage.role).toBe('assistant'); }, 15000); - it("should include ToolResponseMessages with correct shape when tools are executed", async () => { + it('should include ToolResponseMessages with correct shape when tools are executed', async () => { const response = client.callModel({ - model: "openai/gpt-4o-mini", + model: 'openai/gpt-4o-mini', input: [ { - role: "user", + role: 'user', content: "What's the weather in Tokyo? Use the get_weather tool.", }, ], @@ -476,19 +489,19 @@ describe("callModel E2E Tests", () => { { type: ToolType.Function, function: { - name: "get_weather", - description: "Get weather for a location", + name: 'get_weather', + description: 'Get weather for a location', inputSchema: z.object({ - location: z.string().describe("City name"), + location: z.string().describe('City name'), }), outputSchema: z.object({ temperature: z.number(), condition: z.string(), }), - execute: async (params: { location: string }) => { + execute: async (_params) => { return { temperature: 22, - condition: "Sunny", + condition: 'Sunny', }; }, }, @@ -504,44 +517,42 @@ describe("callModel E2E Tests", () => { messages.push(message); // Validate each message has correct shape based on role - expect(message).toHaveProperty("role"); - expect(message).toHaveProperty("content"); + expect(message).toHaveProperty('role'); + expect(message).toHaveProperty('content'); - if (message.role === "assistant") { + if (message.role === 'assistant') { hasAssistantMessage = true; // Validate AssistantMessage shape const contentType = typeof message.content; const isValidContent = - contentType === "string" || + contentType === 'string' || Array.isArray(message.content) || message.content === null || message.content === undefined; expect(isValidContent).toBe(true); - } else if (message.role === "tool") { + } else if (message.role === 'tool') { hasToolResponseMessage = true; // Deep validation of ToolResponseMessage shape - expect(message).toHaveProperty("toolCallId"); - expect(typeof (message as ToolResponseMessage).toolCallId).toBe("string"); + expect(message).toHaveProperty('toolCallId'); + expect(typeof (message as ToolResponseMessage).toolCallId).toBe('string'); expect((message as ToolResponseMessage).toolCallId.length).toBeGreaterThan(0); // content must be string or array const contentType = typeof message.content; - const isValidContent = - contentType === "string" || - Array.isArray(message.content); + const isValidContent = contentType === 'string' || Array.isArray(message.content); expect(isValidContent).toBe(true); // If content is string, it should be parseable JSON (our tool result) - if (typeof message.content === "string" && message.content.length > 0) { + if (typeof message.content === 'string' && message.content.length > 0) { const parsed = JSON.parse(message.content); expect(parsed).toBeDefined(); // Verify it matches our tool output schema - expect(parsed).toHaveProperty("temperature"); - expect(parsed).toHaveProperty("condition"); - expect(typeof parsed.temperature).toBe("number"); - expect(typeof parsed.condition).toBe("string"); + expect(parsed).toHaveProperty('temperature'); + expect(parsed).toHaveProperty('condition'); + expect(typeof parsed.temperature).toBe('number'); + expect(typeof parsed.condition).toBe('string'); } } } @@ -552,10 +563,14 @@ describe("callModel E2E Tests", () => { // If the model provided a final text response, verify proper ordering if (hasAssistantMessage) { - const lastToolIndex = messages.reduce((lastIdx, m, i) => - m.role === "tool" ? i : lastIdx, -1); - const lastAssistantIndex = messages.reduce((lastIdx, m, i) => - m.role === "assistant" ? i : lastIdx, -1); + const lastToolIndex = messages.reduce( + (lastIdx, m, i) => (m.role === 'tool' ? i : lastIdx), + -1, + ); + const lastAssistantIndex = messages.reduce( + (lastIdx, m, i) => (m.role === 'assistant' ? i : lastIdx), + -1, + ); // The final assistant message should come after tool responses if (lastToolIndex !== -1 && lastAssistantIndex !== -1) { @@ -564,66 +579,75 @@ describe("callModel E2E Tests", () => { } }, 30000); - it("should return messages with all required fields and correct types", async () => { + it('should return messages with all required fields and correct types', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", - content: "Count from 1 to 3.", + role: 'user', + content: 'Count from 1 to 3.', }, ], }); for await (const message of response.getNewMessagesStream()) { // role must be a string and one of the valid values - expect(typeof message.role).toBe("string"); - expect(["assistant", "tool"]).toContain(message.role); + expect(typeof message.role).toBe('string'); + expect([ + 'assistant', + 'tool', + ]).toContain(message.role); // content must exist (even if null) - expect("content" in message).toBe(true); + expect('content' in message).toBe(true); - if (message.role === "assistant") { + if (message.role === 'assistant') { // AssistantMessage specific validations - const validContentTypes = ["string", "object", "undefined"]; + const validContentTypes = [ + 'string', + 'object', + 'undefined', + ]; expect(validContentTypes).toContain(typeof message.content); // If content is array, validate structure if (Array.isArray(message.content)) { - expect(message.content.every(item => - typeof item === "object" && item !== null && "type" in item - )).toBe(true); + expect( + message.content.every( + (item) => typeof item === 'object' && item !== null && 'type' in item, + ), + ).toBe(true); } - } else if (message.role === "tool") { + } else if (message.role === 'tool') { // ToolResponseMessage specific validations const toolMsg = message as ToolResponseMessage; - expect(typeof toolMsg.toolCallId).toBe("string"); + expect(typeof toolMsg.toolCallId).toBe('string'); expect(toolMsg.toolCallId.length).toBeGreaterThan(0); } } }, 15000); }); - describe("response.reasoningStream - Streaming reasoning deltas", () => { - it("should successfully stream reasoning deltas for reasoning models", async () => { + describe('response.reasoningStream - Streaming reasoning deltas', () => { + it.skip('should successfully stream reasoning deltas for reasoning models', async () => { const response = client.callModel({ - model: "minimax/minimax-m2", + model: 'minimax/minimax-m2', input: [ { - role: "user", - content: "What is 2+2?", + role: 'user', + content: 'What is 2+2?', }, ], reasoning: { enabled: true, - effort: "low", + effort: 'low', }, }); const reasoningDeltas: string[] = []; for await (const delta of response.getReasoningStream()) { - expect(typeof delta).toBe("string"); + expect(typeof delta).toBe('string'); reasoningDeltas.push(delta); } @@ -634,30 +658,35 @@ describe("callModel E2E Tests", () => { }, 30000); }); - describe("response.toolStream - Streaming tool call deltas", () => { - it("should successfully stream tool call deltas when tools are called", async () => { + describe('response.toolStream - Streaming tool call deltas', () => { + it('should successfully stream tool call deltas when tools are called', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.1-8b-instruct", + model: 'meta-llama/llama-3.1-8b-instruct', input: [ { - role: "user", + role: 'user', content: "What's the weather like in Paris? Use the get_weather tool to find out.", }, ], tools: [ { - type: "function" as const, - name: "get_weather", - description: "Get the current weather for a location", - parameters: { - type: "object", - properties: { - location: { - type: "string", - description: "The city name, e.g. Paris", - }, + type: ToolType.Function, + function: { + name: 'get_weather', + description: 'Get the current weather for a location', + inputSchema: z.object({ + location: z.string().describe('The city name, e.g. Paris'), + }), + outputSchema: z.object({ + temperature: z.number(), + condition: z.string(), + }), + execute: async (_params) => { + return { + temperature: 22, + condition: 'Sunny', + }; }, - required: ["location"], }, }, ], @@ -666,10 +695,10 @@ describe("callModel E2E Tests", () => { const toolDeltas: string[] = []; for await (const event of response.getToolStream()) { - expect(typeof event).toBe("object"); - expect(event).toHaveProperty("type"); - if (event.type === "delta") { - expect(typeof event.content).toBe("string"); + expect(typeof event).toBe('object'); + expect(event).toHaveProperty('type'); + if (event.type === 'delta') { + expect(typeof event.content).toBe('string'); toolDeltas.push(event.content); } } @@ -679,29 +708,29 @@ describe("callModel E2E Tests", () => { // If the model made a tool call, we should have deltas if (toolDeltas.length > 0) { - const fullToolCall = toolDeltas.join(""); + const fullToolCall = toolDeltas.join(''); expect(fullToolCall.length).toBeGreaterThan(0); } }, 30000); }); - describe("response.fullResponsesStream - Streaming all events", () => { - it("should successfully stream all response events", async () => { + describe('response.fullResponsesStream - Streaming all events', () => { + it('should successfully stream all response events', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", + role: 'user', content: "Say 'hello'.", }, ], }); - const events: any[] = []; + const events: EnhancedResponseStreamEvent[] = []; for await (const event of response.getFullResponsesStream()) { expect(event).toBeDefined(); - expect("type" in event).toBe(true); + expect('type' in event).toBe(true); events.push(event); } @@ -713,26 +742,26 @@ describe("callModel E2E Tests", () => { // Should have completion event const hasCompletionEvent = events.some( - (e) => e.type === "response.completed" || e.type === "response.incomplete" + (e) => e.type === 'response.completed' || e.type === 'response.incomplete', ); expect(hasCompletionEvent).toBe(true); }, 15000); - it("should include text delta events", async () => { + it('should include text delta events', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", - content: "Count to 3.", + role: 'user', + content: 'Count to 3.', }, ], }); - const textDeltaEvents: any[] = []; + const textDeltaEvents: EnhancedResponseStreamEvent[] = []; for await (const event of response.getFullResponsesStream()) { - if (event.type === "response.output_text.delta") { + if (event.type === 'response.output_text.delta') { textDeltaEvents.push(event); } } @@ -741,24 +770,28 @@ describe("callModel E2E Tests", () => { // Verify delta events have the expected structure const firstDelta = textDeltaEvents[0]; - expect(firstDelta.delta).toBeDefined(); - expect(typeof firstDelta.delta).toBe("string"); + if(firstDelta.type === 'response.output_text.delta') { + expect(firstDelta.delta).toBeDefined(); + expect(typeof firstDelta.delta).toBe('string'); + } else { + expect(firstDelta.type).toBe('response.reasoning_text.delta'); + } }, 15000); }); - describe("response.fullChatStream - Chat-compatible streaming", () => { - it("should successfully stream in chat-compatible format", async () => { + describe('response.fullChatStream - Chat-compatible streaming', () => { + it('should successfully stream in chat-compatible format', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", + role: 'user', content: "Say 'test'.", }, ], }); - const chunks: any[] = []; + const chunks: ChatStreamEvent[] = []; for await (const chunk of response.getFullChatStream()) { expect(chunk).toBeDefined(); @@ -769,63 +802,63 @@ describe("callModel E2E Tests", () => { expect(chunks.length).toBeGreaterThan(0); // Should have content deltas - const hasContentDeltas = chunks.some((c) => c.type === "content.delta"); + const hasContentDeltas = chunks.some((c) => c.type === 'content.delta'); expect(hasContentDeltas).toBe(true); }, 15000); - it("should return events with correct shape for each event type", async () => { + it('should return events with correct shape for each event type', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", - content: "Count from 1 to 3.", + role: 'user', + content: 'Count from 1 to 3.', }, ], }); let hasContentDelta = false; - let hasMessageComplete = false; + let _hasMessageComplete = false; for await (const event of response.getFullChatStream()) { // Every event must have a type - expect(event).toHaveProperty("type"); - expect(typeof event.type).toBe("string"); + expect(event).toHaveProperty('type'); + expect(typeof event.type).toBe('string'); expect(event.type.length).toBeGreaterThan(0); // Validate shape based on event type switch (event.type) { - case "content.delta": + case 'content.delta': hasContentDelta = true; // Must have delta property - expect(event).toHaveProperty("delta"); - expect(typeof event.delta).toBe("string"); + expect((event as { delta: string }).delta).toBeDefined(); + expect(typeof (event as { delta: string }).delta).toBe('string'); // Delta can be empty string but must be string break; - case "message.complete": - hasMessageComplete = true; + case 'message.complete': + _hasMessageComplete = true; // Must have response property - expect(event).toHaveProperty("response"); - expect(event.response).toBeDefined(); + expect(event).toHaveProperty('response'); + expect((event as { response: OpenResponsesNonStreamingResponse }).response).toBeDefined(); // Response should be an object (the full response) - expect(typeof event.response).toBe("object"); - expect(event.response).not.toBeNull(); + expect(typeof (event as { response: OpenResponsesNonStreamingResponse }).response).toBe('object'); + expect((event as { response: OpenResponsesNonStreamingResponse }).response).not.toBeNull(); break; - case "tool.preliminary_result": + case 'tool.preliminary_result': // Must have toolCallId and result - expect(event).toHaveProperty("toolCallId"); - expect(event).toHaveProperty("result"); - expect(typeof event.toolCallId).toBe("string"); - expect(event.toolCallId.length).toBeGreaterThan(0); + expect(event).toHaveProperty('toolCallId'); + expect(event).toHaveProperty('result'); + expect(typeof (event as { toolCallId: string }).toolCallId).toBe('string'); + expect((event as { toolCallId: string }).toolCallId.length).toBeGreaterThan(0); // result can be any type break; default: // Pass-through events must have event property - expect(event).toHaveProperty("event"); - expect(event.event).toBeDefined(); + expect(event).toHaveProperty('event'); + expect((event as { event: OpenResponsesStreamEvent }).event).toBeDefined(); break; } } @@ -834,60 +867,60 @@ describe("callModel E2E Tests", () => { expect(hasContentDelta).toBe(true); }, 15000); - it("should validate content.delta events have proper structure", async () => { + it('should validate content.delta events have proper structure', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", + role: 'user', content: "Say 'hello world'.", }, ], }); - const contentDeltas: any[] = []; + const contentDeltas: ChatStreamEvent[] = []; for await (const event of response.getFullChatStream()) { - if (event.type === "content.delta") { + if (event.type === 'content.delta') { contentDeltas.push(event); // Validate exact shape const keys = Object.keys(event); - expect(keys).toContain("type"); - expect(keys).toContain("delta"); + expect(keys).toContain('type'); + expect(keys).toContain('delta'); // type must be exactly "content.delta" - expect(event.type).toBe("content.delta"); + expect(event.type).toBe('content.delta'); // delta must be a string - expect(typeof event.delta).toBe("string"); + expect(typeof (event as { delta: string }).delta).toBe('string'); } } expect(contentDeltas.length).toBeGreaterThan(0); // Concatenated deltas should form readable text - const fullText = contentDeltas.map(e => e.delta).join(""); + const fullText = contentDeltas.map((e) => (e as { delta: string }).delta).join(''); expect(fullText.length).toBeGreaterThan(0); }, 15000); - it("should include tool.preliminary_result events with correct shape when generator tools are executed", async () => { + it('should include tool.preliminary_result events with correct shape when generator tools are executed', async () => { const response = client.callModel({ - model: "openai/gpt-4o-mini", + model: 'openai/gpt-4o-mini', input: [ { - role: "user", - content: "What time is it? Use the get_time tool.", + role: 'user', + content: 'What time is it? Use the get_time tool.', }, ], tools: [ { type: ToolType.Function, function: { - name: "get_time", - description: "Get current time", + name: 'get_time', + description: 'Get current time', inputSchema: z.object({ - timezone: z.string().optional().describe("Timezone"), + timezone: z.string().optional().describe('Timezone'), }), // Generator tools need eventSchema for intermediate results eventSchema: z.object({ @@ -900,12 +933,14 @@ describe("callModel E2E Tests", () => { // Use generator function to emit preliminary results execute: async function* (params: { timezone?: string }) { // Emit preliminary result (validated against eventSchema) - yield { status: "fetching time..." }; + yield { + status: 'fetching time...', + }; // Final result (validated against outputSchema) yield { - time: "14:30:00", - timezone: params.timezone || "UTC", + time: '14:30:00', + timezone: params.timezone || 'UTC', }; }, }, @@ -914,26 +949,26 @@ describe("callModel E2E Tests", () => { }); let hasPreliminaryResult = false; - const preliminaryResults: any[] = []; + const preliminaryResults: ChatStreamEvent[] = []; for await (const event of response.getFullChatStream()) { - expect(event).toHaveProperty("type"); - expect(typeof event.type).toBe("string"); + expect(event).toHaveProperty('type'); + expect(typeof event.type).toBe('string'); - if (event.type === "tool.preliminary_result") { + if (event.type === 'tool.preliminary_result') { hasPreliminaryResult = true; preliminaryResults.push(event); // Validate exact shape - expect(event).toHaveProperty("toolCallId"); - expect(event).toHaveProperty("result"); + expect(event).toHaveProperty('toolCallId'); + expect(event).toHaveProperty('result'); // toolCallId must be non-empty string - expect(typeof event.toolCallId).toBe("string"); - expect(event.toolCallId.length).toBeGreaterThan(0); + expect(typeof (event as { toolCallId: string }).toolCallId).toBe('string'); + expect((event as { toolCallId: string }).toolCallId.length).toBeGreaterThan(0); // result is defined - expect(event.result).toBeDefined(); + expect((event as { result: unknown }).result).toBeDefined(); } } @@ -943,10 +978,10 @@ describe("callModel E2E Tests", () => { // Should have status update or final result const hasStatusUpdate = preliminaryResults.some( - (e) => e.result && typeof e.result === "object" && "status" in e.result + (e) => 'result' in e && e.result && typeof e.result === 'object' && 'status' in e.result, ); const hasFinalResult = preliminaryResults.some( - (e) => e.result && typeof e.result === "object" && "time" in e.result + (e) => 'result' in e && e.result && typeof e.result === 'object' && 'time' in e.result, ); expect(hasStatusUpdate || hasFinalResult).toBe(true); @@ -957,13 +992,13 @@ describe("callModel E2E Tests", () => { }, 30000); }); - describe("Multiple concurrent consumption patterns", () => { - it("should allow reading text and streaming simultaneously", async () => { + describe('Multiple concurrent consumption patterns', () => { + it('should allow reading text and streaming simultaneously', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", + role: 'user', content: "Say 'concurrent test'.", }, ], @@ -980,23 +1015,26 @@ describe("callModel E2E Tests", () => { })(); // Wait for both - const [text, deltas] = await Promise.all([textPromise, streamPromise]); + const [text, deltas] = await Promise.all([ + textPromise, + streamPromise, + ]); expect(deltas.length).toBeGreaterThan(0); expect(text.length).toBeGreaterThan(0); // Verify deltas reconstruct the full text - const reconstructed = deltas.join(""); + const reconstructed = deltas.join(''); expect(reconstructed).toBe(text); }, 30000); - it("should allow multiple stream consumers", async () => { + it('should allow multiple stream consumers', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", - content: "Write a short sentence.", + role: 'user', + content: 'Write a short sentence.', }, ], }); @@ -1011,7 +1049,7 @@ describe("callModel E2E Tests", () => { })(); const newMessagesStreamPromise = (async () => { - const messages: any[] = []; + const messages: (AssistantMessage | ToolResponseMessage)[] = []; for await (const message of response.getNewMessagesStream()) { messages.push(message); } @@ -1027,19 +1065,19 @@ describe("callModel E2E Tests", () => { expect(messages.length).toBeGreaterThan(0); // Verify consistency between streams - const textFromDeltas = textDeltas.join(""); + const textFromDeltas = textDeltas.join(''); const lastMessage = messages[messages.length - 1]; - const textFromMessage = (lastMessage.content as string) || ""; + const textFromMessage = (lastMessage.content as string) || ''; expect(textFromDeltas).toBe(textFromMessage); }, 20000); - it("should allow sequential consumption - text then stream", async () => { + it('should allow sequential consumption - text then stream', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", + role: 'user', content: "Say 'sequential test'.", }, ], @@ -1053,23 +1091,23 @@ describe("callModel E2E Tests", () => { // Then, try to stream (should get same data from buffer) const deltas: string[] = []; for await (const delta of response.getTextStream()) { - expect(typeof delta).toBe("string"); + expect(typeof delta).toBe('string'); deltas.push(delta); } expect(deltas.length).toBeGreaterThan(0); // Verify both give same result - const reconstructed = deltas.join(""); + const reconstructed = deltas.join(''); expect(reconstructed).toBe(text); }, 20000); - it("should allow sequential consumption - stream then text", async () => { + it('should allow sequential consumption - stream then text', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", + role: 'user', content: "Say 'reverse test'.", }, ], @@ -1078,7 +1116,7 @@ describe("callModel E2E Tests", () => { // First, collect deltas from stream const deltas: string[] = []; for await (const delta of response.getTextStream()) { - expect(typeof delta).toBe("string"); + expect(typeof delta).toBe('string'); deltas.push(delta); } expect(deltas.length).toBeGreaterThan(0); @@ -1089,19 +1127,19 @@ describe("callModel E2E Tests", () => { expect(text.length).toBeGreaterThan(0); // Verify both give same result - const reconstructed = deltas.join(""); + const reconstructed = deltas.join(''); expect(reconstructed).toBe(text); }, 20000); }); - describe("Error handling", () => { - it("should handle invalid model gracefully", async () => { + describe('Error handling', () => { + it('should handle invalid model gracefully', async () => { const response = client.callModel({ - model: "invalid/model-that-does-not-exist", + model: 'invalid/model-that-does-not-exist', input: [ { - role: "user", - content: "Test", + role: 'user', + content: 'Test', }, ], }); @@ -1109,9 +1147,9 @@ describe("callModel E2E Tests", () => { await expect(response.getText()).rejects.toThrow(); }); - it("should handle empty input", async () => { + it('should handle empty input', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [], }); @@ -1125,13 +1163,13 @@ describe("callModel E2E Tests", () => { }); }); - describe("response.getResponse - Full response with usage", () => { - it("should return full response with correct shape", async () => { + describe('response.getResponse - Full response with usage', () => { + it('should return full response with correct shape', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", + role: 'user', content: "Say 'hello'.", }, ], @@ -1141,43 +1179,43 @@ describe("callModel E2E Tests", () => { // Verify top-level response shape expect(fullResponse).toBeDefined(); - expect(typeof fullResponse.id).toBe("string"); + expect(typeof fullResponse.id).toBe('string'); expect(fullResponse.id.length).toBeGreaterThan(0); - expect(fullResponse.object).toBe("response"); - expect(typeof fullResponse.createdAt).toBe("number"); - expect(typeof fullResponse.model).toBe("string"); + expect(fullResponse.object).toBe('response'); + expect(typeof fullResponse.createdAt).toBe('number'); + expect(typeof fullResponse.model).toBe('string'); expect(Array.isArray(fullResponse.output)).toBe(true); expect(fullResponse.output.length).toBeGreaterThan(0); // Verify output items have correct shape for (const item of fullResponse.output) { - expect(item).toHaveProperty("type"); - expect(typeof (item as any).type).toBe("string"); + expect(item).toHaveProperty('type'); + expect(typeof (item as { type: string }).type).toBe('string'); } // Verify temperature and topP are present (can be null) - expect("temperature" in fullResponse).toBe(true); - expect("topP" in fullResponse).toBe(true); + expect('temperature' in fullResponse).toBe(true); + expect('topP' in fullResponse).toBe(true); // Verify metadata shape - expect("metadata" in fullResponse).toBe(true); + expect('metadata' in fullResponse).toBe(true); // Verify tools array exists expect(Array.isArray(fullResponse.tools)).toBe(true); // Verify toolChoice exists - expect("toolChoice" in fullResponse).toBe(true); + expect('toolChoice' in fullResponse).toBe(true); // Verify parallelToolCalls is boolean - expect(typeof fullResponse.parallelToolCalls).toBe("boolean"); + expect(typeof fullResponse.parallelToolCalls).toBe('boolean'); }); - it("should return usage with correct shape including all token details", async () => { + it('should return usage with correct shape including all token details', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", + role: 'user', content: "Say 'hello'.", }, ], @@ -1190,47 +1228,50 @@ describe("callModel E2E Tests", () => { const usage = fullResponse.usage!; // Verify top-level usage fields - expect(typeof usage.inputTokens).toBe("number"); + expect(typeof usage.inputTokens).toBe('number'); expect(usage.inputTokens).toBeGreaterThan(0); - expect(typeof usage.outputTokens).toBe("number"); + expect(typeof usage.outputTokens).toBe('number'); expect(usage.outputTokens).toBeGreaterThan(0); - expect(typeof usage.totalTokens).toBe("number"); + expect(typeof usage.totalTokens).toBe('number'); expect(usage.totalTokens).toBe(usage.inputTokens + usage.outputTokens); // Verify inputTokensDetails shape with cachedTokens expect(usage.inputTokensDetails).toBeDefined(); - expect(typeof usage.inputTokensDetails.cachedTokens).toBe("number"); + expect(typeof usage.inputTokensDetails.cachedTokens).toBe('number'); expect(usage.inputTokensDetails.cachedTokens).toBeGreaterThanOrEqual(0); // Verify outputTokensDetails shape with reasoningTokens expect(usage.outputTokensDetails).toBeDefined(); - expect(typeof usage.outputTokensDetails.reasoningTokens).toBe("number"); + expect(typeof usage.outputTokensDetails.reasoningTokens).toBe('number'); expect(usage.outputTokensDetails.reasoningTokens).toBeGreaterThanOrEqual(0); // Verify optional cost fields if present if (usage.cost !== undefined && usage.cost !== null) { - expect(typeof usage.cost).toBe("number"); + expect(typeof usage.cost).toBe('number'); } if (usage.isByok !== undefined) { - expect(typeof usage.isByok).toBe("boolean"); + expect(typeof usage.isByok).toBe('boolean'); } if (usage.costDetails !== undefined) { - expect(typeof usage.costDetails.upstreamInferenceInputCost).toBe("number"); - expect(typeof usage.costDetails.upstreamInferenceOutputCost).toBe("number"); - if (usage.costDetails.upstreamInferenceCost !== undefined && usage.costDetails.upstreamInferenceCost !== null) { - expect(typeof usage.costDetails.upstreamInferenceCost).toBe("number"); + expect(typeof usage.costDetails.upstreamInferenceInputCost).toBe('number'); + expect(typeof usage.costDetails.upstreamInferenceOutputCost).toBe('number'); + if ( + usage.costDetails.upstreamInferenceCost !== undefined && + usage.costDetails.upstreamInferenceCost !== null + ) { + expect(typeof usage.costDetails.upstreamInferenceCost).toBe('number'); } } }); - it("should return error and incompleteDetails fields with correct shape", async () => { + it('should return error and incompleteDetails fields with correct shape', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", + role: 'user', content: "Say 'test'.", }, ], @@ -1239,24 +1280,24 @@ describe("callModel E2E Tests", () => { const fullResponse = await response.getResponse(); // error can be null or an object - expect("error" in fullResponse).toBe(true); + expect('error' in fullResponse).toBe(true); if (fullResponse.error !== null) { - expect(typeof fullResponse.error).toBe("object"); + expect(typeof fullResponse.error).toBe('object'); } // incompleteDetails can be null or an object - expect("incompleteDetails" in fullResponse).toBe(true); + expect('incompleteDetails' in fullResponse).toBe(true); if (fullResponse.incompleteDetails !== null) { - expect(typeof fullResponse.incompleteDetails).toBe("object"); + expect(typeof fullResponse.incompleteDetails).toBe('object'); } }); - it("should allow concurrent access with other methods", async () => { + it('should allow concurrent access with other methods', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", + role: 'user', content: "Say 'test'.", }, ], @@ -1269,7 +1310,7 @@ describe("callModel E2E Tests", () => { ]); expect(text).toBeDefined(); - expect(typeof text).toBe("string"); + expect(typeof text).toBe('string'); expect(fullResponse).toBeDefined(); expect(fullResponse.usage).toBeDefined(); @@ -1279,12 +1320,12 @@ describe("callModel E2E Tests", () => { } }); - it("should return consistent results on multiple calls", async () => { + it('should return consistent results on multiple calls', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", + role: 'user', content: "Say 'consistent'.", }, ], @@ -1297,18 +1338,20 @@ describe("callModel E2E Tests", () => { expect(firstCall.id).toBe(secondCall.id); expect(firstCall.usage?.inputTokens).toBe(secondCall.usage?.inputTokens); expect(firstCall.usage?.outputTokens).toBe(secondCall.usage?.outputTokens); - expect(firstCall.usage?.inputTokensDetails?.cachedTokens).toBe(secondCall.usage?.inputTokensDetails?.cachedTokens); + expect(firstCall.usage?.inputTokensDetails?.cachedTokens).toBe( + secondCall.usage?.inputTokensDetails?.cachedTokens, + ); }); }); - describe("Response parameters", () => { - it("should respect maxOutputTokens parameter", async () => { + describe('Response parameters', () => { + it('should respect maxOutputTokens parameter', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", - content: "Write a long story about a cat.", + role: 'user', + content: 'Write a long story about a cat.', }, ], maxOutputTokens: 10, @@ -1318,35 +1361,35 @@ describe("callModel E2E Tests", () => { expect(text).toBeDefined(); // Text should be relatively short due to token limit - expect(text.split(" ").length).toBeLessThan(50); + expect(text.split(' ').length).toBeLessThan(50); }); - it("should work with instructions parameter", async () => { + it('should work with instructions parameter', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", + role: 'user', content: "Say exactly: 'test complete'", }, ], - instructions: "You are a helpful assistant. Keep responses concise.", + instructions: 'You are a helpful assistant. Keep responses concise.', }); const text = await response.getText(); expect(text).toBeDefined(); - expect(typeof text).toBe("string"); + expect(typeof text).toBe('string'); expect(text.length).toBeGreaterThan(0); // Just verify instructions parameter is accepted, not that model follows it perfectly }); - it("should support provider parameter with correct shape", async () => { + it('should support provider parameter with correct shape', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", + role: 'user', content: "Say 'provider test'.", }, ], @@ -1363,17 +1406,20 @@ describe("callModel E2E Tests", () => { expect(fullResponse.usage?.inputTokens).toBeGreaterThan(0); }); - it("should support provider with order preference", async () => { + it('should support provider with order preference', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", + role: 'user', content: "Say 'ordered provider'.", }, ], provider: { - order: ["Together", "Fireworks"], + order: [ + 'Together', + 'Fireworks', + ], allowFallbacks: true, }, }); @@ -1381,21 +1427,23 @@ describe("callModel E2E Tests", () => { const text = await response.getText(); expect(text).toBeDefined(); - expect(typeof text).toBe("string"); + expect(typeof text).toBe('string'); expect(text.length).toBeGreaterThan(0); }); - it("should support provider with ignore list", async () => { + it('should support provider with ignore list', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", + role: 'user', content: "Say 'ignore test'.", }, ], provider: { - ignore: ["SomeProvider"], + ignore: [ + 'SomeProvider', + ], allowFallbacks: true, }, }); @@ -1403,15 +1451,15 @@ describe("callModel E2E Tests", () => { const text = await response.getText(); expect(text).toBeDefined(); - expect(typeof text).toBe("string"); + expect(typeof text).toBe('string'); }); - it("should support provider with quantizations filter", async () => { + it('should support provider with quantizations filter', async () => { const response = client.callModel({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - role: "user", + role: 'user', content: "Say 'quantization test'.", }, ], diff --git a/tests/e2e/chat.test.ts b/tests/e2e/chat.test.ts index 2de98443..b5ad310a 100644 --- a/tests/e2e/chat.test.ts +++ b/tests/e2e/chat.test.ts @@ -1,16 +1,15 @@ -import { beforeAll, describe, expect, it } from "vitest"; -import { OpenRouter } from "../../src/sdk/sdk.js"; -import { ChatStreamingResponseChunkData } from "../../src/models/chatstreamingresponsechunk.js"; +import type { ChatStreamingResponseChunkData } from '../../src/models/chatstreamingresponsechunk.js'; -describe("Chat E2E Tests", () => { +import { beforeAll, describe, expect, it } from 'vitest'; +import { OpenRouter } from '../../src/sdk/sdk.js'; + +describe('Chat E2E Tests', () => { let client: OpenRouter; beforeAll(() => { const apiKey = process.env.OPENROUTER_API_KEY; if (!apiKey) { - throw new Error( - "OPENROUTER_API_KEY environment variable is required for e2e tests" - ); + throw new Error('OPENROUTER_API_KEY environment variable is required for e2e tests'); } client = new OpenRouter({ @@ -18,13 +17,13 @@ describe("Chat E2E Tests", () => { }); }); - describe("chat.send() - Non-streaming", () => { - it("should successfully send a chat request and get a response", async () => { + describe('chat.send() - Non-streaming', () => { + it('should successfully send a chat request and get a response', async () => { const response = await client.chat.send({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', messages: [ { - role: "user", + role: 'user', content: "Say 'Hello, World!' and nothing else.", }, ], @@ -33,7 +32,6 @@ describe("Chat E2E Tests", () => { expect(response).toBeDefined(); - expect(Array.isArray(response.choices)).toBe(true); expect(response.choices.length).toBeGreaterThan(0); @@ -41,29 +39,28 @@ describe("Chat E2E Tests", () => { expect(firstChoice).toBeDefined(); expect(firstChoice?.message).toBeDefined(); expect(firstChoice?.message?.content).toBeDefined(); - expect(typeof firstChoice?.message?.content).toBe("string"); + expect(typeof firstChoice?.message?.content).toBe('string'); // Verify it has usage information expect(response.usage).toBeDefined(); expect(response.usage?.totalTokens).toBeGreaterThan(0); - }); - it("should handle multi-turn conversations", async () => { + it('should handle multi-turn conversations', async () => { const response = await client.chat.send({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', messages: [ { - role: "user", - content: "My name is Alice.", + role: 'user', + content: 'My name is Alice.', }, { - role: "assistant", - content: "Hello Alice! How can I help you today?", + role: 'assistant', + content: 'Hello Alice! How can I help you today?', }, { - role: "user", - content: "What is my name?", + role: 'user', + content: 'What is my name?', }, ], stream: false, @@ -71,19 +68,24 @@ describe("Chat E2E Tests", () => { expect(response).toBeDefined(); - const content = typeof response.choices[0]?.message?.content === "string" ? response.choices[0]?.message?.content?.toLowerCase() : response.choices[0]?.message?.content?.map((item) => item.type === "text" ? item.text : "").join("").toLowerCase(); + const content = + typeof response.choices[0]?.message?.content === 'string' + ? response.choices[0]?.message?.content?.toLowerCase() + : response.choices[0]?.message?.content + ?.map((item) => (item.type === 'text' ? item.text : '')) + .join('') + .toLowerCase(); expect(content).toBeDefined(); - expect(content).toContain("alice"); - + expect(content).toContain('alice'); }); - it("should respect max_tokens parameter", async () => { + it('should respect max_tokens parameter', async () => { const response = await client.chat.send({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', messages: [ { - role: "user", - content: "Write a long story about a cat.", + role: 'user', + content: 'Write a long story about a cat.', }, ], maxTokens: 10, @@ -93,18 +95,17 @@ describe("Chat E2E Tests", () => { expect(response).toBeDefined(); expect(response.usage?.completionTokens).toBeLessThanOrEqual(10); - }); }); - describe("chat.send() - Streaming", () => { - it("should successfully stream chat responses", async () => { + describe('chat.send() - Streaming', () => { + it('should successfully stream chat responses', async () => { const response = await client.chat.send({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', messages: [ { - role: "user", - content: "Count from 1 to 5.", + role: 'user', + content: 'Count from 1 to 5.', }, ], stream: true, @@ -125,15 +126,14 @@ describe("Chat E2E Tests", () => { const firstChunk = chunks[0]; expect(firstChunk?.choices).toBeDefined(); expect(Array.isArray(firstChunk?.choices)).toBe(true); - }); - it("should stream complete content progressively", async () => { + it('should stream complete content progressively', async () => { const response = await client.chat.send({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', messages: [ { - role: "user", + role: 'user', content: "Say 'test'.", }, ], @@ -142,7 +142,7 @@ describe("Chat E2E Tests", () => { expect(response).toBeDefined(); - let fullContent = ""; + let fullContent = ''; let chunkCount = 0; for await (const chunk of response) { @@ -155,14 +155,14 @@ describe("Chat E2E Tests", () => { expect(chunkCount).toBeGreaterThan(0); expect(fullContent.length).toBeGreaterThan(0); - }, 10000) + }, 10000); - it("should include finish_reason in final chunk", async () => { + it('should include finish_reason in final chunk', async () => { const response = await client.chat.send({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', messages: [ { - role: "user", + role: 'user', content: "Say 'done'.", }, ], @@ -177,11 +177,11 @@ describe("Chat E2E Tests", () => { const finishReason = chunk.choices?.[0]?.finishReason; if (finishReason) { foundFinishReason = true; - expect(typeof finishReason).toBe("string"); + expect(typeof finishReason).toBe('string'); } } expect(foundFinishReason).toBe(true); - }, 10000) + }, 10000); }); }); diff --git a/tests/e2e/embeddings.test.ts b/tests/e2e/embeddings.test.ts index 6b09be4d..8db60466 100644 --- a/tests/e2e/embeddings.test.ts +++ b/tests/e2e/embeddings.test.ts @@ -1,15 +1,13 @@ -import { beforeAll, describe, expect, it } from "vitest"; -import { OpenRouter } from "../../src/sdk/sdk.js"; +import { beforeAll, describe, expect, it } from 'vitest'; +import { OpenRouter } from '../../src/sdk/sdk.js'; -describe("Embeddings E2E Tests", () => { +describe('Embeddings E2E Tests', () => { let client: OpenRouter; beforeAll(() => { const apiKey = process.env.OPENROUTER_API_KEY; if (!apiKey) { - throw new Error( - "OPENROUTER_API_KEY environment variable is required for e2e tests" - ); + throw new Error('OPENROUTER_API_KEY environment variable is required for e2e tests'); } client = new OpenRouter({ @@ -17,17 +15,17 @@ describe("Embeddings E2E Tests", () => { }); }); - describe("embeddings.generate()", () => { - it("should successfully generate embeddings for a single text input", async () => { + describe('embeddings.generate()', () => { + it('should successfully generate embeddings for a single text input', async () => { const response = await client.embeddings.generate({ - input: "The quick brown fox jumps over the lazy dog", - model: "openai/text-embedding-3-small", + input: 'The quick brown fox jumps over the lazy dog', + model: 'openai/text-embedding-3-small', }); expect(response).toBeDefined(); // Check if response is an object (not a string) - if (typeof response === "object") { + if (typeof response === 'object') { expect(response.data).toBeDefined(); expect(Array.isArray(response.data)).toBe(true); expect(response.data.length).toBeGreaterThan(0); @@ -41,9 +39,9 @@ describe("Embeddings E2E Tests", () => { expect(firstEmbedding.embedding.length).toBeGreaterThan(0); // Verify embedding values are numbers const firstValue = firstEmbedding.embedding[0]; - expect(typeof firstValue).toBe("number"); + expect(typeof firstValue).toBe('number'); } else { - expect(typeof firstEmbedding?.embedding).toBe("string"); + expect(typeof firstEmbedding?.embedding).toBe('string'); } // Verify usage information if available @@ -53,21 +51,21 @@ describe("Embeddings E2E Tests", () => { } }); - it("should generate embeddings for multiple text inputs", async () => { + it('should generate embeddings for multiple text inputs', async () => { const inputs = [ - "Hello, world!", - "OpenRouter is amazing", - "Embeddings are vector representations of text", + 'Hello, world!', + 'OpenRouter is amazing', + 'Embeddings are vector representations of text', ]; const response = await client.embeddings.generate({ input: inputs, - model: "openai/text-embedding-3-small", + model: 'openai/text-embedding-3-small', }); expect(response).toBeDefined(); - if (typeof response === "object") { + if (typeof response === 'object') { expect(response.data).toBeDefined(); expect(Array.isArray(response.data)).toBe(true); expect(response.data.length).toBe(inputs.length); @@ -80,7 +78,7 @@ describe("Embeddings E2E Tests", () => { if (Array.isArray(embedding?.embedding)) { expect(embedding.embedding.length).toBeGreaterThan(0); } else { - expect(typeof embedding?.embedding).toBe("string"); + expect(typeof embedding?.embedding).toBe('string'); } expect(embedding?.index).toBe(index); @@ -88,15 +86,18 @@ describe("Embeddings E2E Tests", () => { } }); - it("should generate consistent embedding dimensions", async () => { + it('should generate consistent embedding dimensions', async () => { const response = await client.embeddings.generate({ - input: ["First text", "Second text"], - model: "openai/text-embedding-3-small", + input: [ + 'First text', + 'Second text', + ], + model: 'openai/text-embedding-3-small', }); expect(response).toBeDefined(); - if (typeof response === "object") { + if (typeof response === 'object') { expect(response.data.length).toBe(2); const firstEmbedding = response.data[0]?.embedding; @@ -113,15 +114,15 @@ describe("Embeddings E2E Tests", () => { } }); - it("should handle empty string input gracefully", async () => { + it('should handle empty string input gracefully', async () => { const response = await client.embeddings.generate({ - input: "", - model: "openai/text-embedding-3-small", + input: '', + model: 'openai/text-embedding-3-small', }); expect(response).toBeDefined(); - if (typeof response === "object") { + if (typeof response === 'object') { expect(response.data).toBeDefined(); expect(Array.isArray(response.data)).toBe(true); @@ -132,24 +133,24 @@ describe("Embeddings E2E Tests", () => { } }); - it("should include model information in response", async () => { - const modelName = "openai/text-embedding-3-small"; + it('should include model information in response', async () => { + const modelName = 'openai/text-embedding-3-small'; const response = await client.embeddings.generate({ - input: "Test input for model verification", + input: 'Test input for model verification', model: modelName, }); expect(response).toBeDefined(); - if (typeof response === "object") { + if (typeof response === 'object') { expect(response.model).toBeDefined(); - expect(typeof response.model).toBe("string"); + expect(typeof response.model).toBe('string'); if (response.usage) { expect(response.usage.promptTokens).toBeDefined(); expect(response.usage.totalTokens).toBeDefined(); - expect(typeof response.usage.promptTokens).toBe("number"); - expect(typeof response.usage.totalTokens).toBe("number"); + expect(typeof response.usage.promptTokens).toBe('number'); + expect(typeof response.usage.totalTokens).toBe('number'); expect(response.usage.totalTokens).toBeGreaterThan(0); } } diff --git a/tests/e2e/models.test.ts b/tests/e2e/models.test.ts index 6c7d3fe8..c744f7c3 100644 --- a/tests/e2e/models.test.ts +++ b/tests/e2e/models.test.ts @@ -1,15 +1,13 @@ -import { beforeAll, describe, expect, it } from "vitest"; -import { OpenRouter } from "../../src/sdk/sdk.js"; +import { beforeAll, describe, expect, it } from 'vitest'; +import { OpenRouter } from '../../src/sdk/sdk.js'; -describe("Models E2E Tests", () => { +describe('Models E2E Tests', () => { let client: OpenRouter; beforeAll(() => { const apiKey = process.env.OPENROUTER_API_KEY; if (!apiKey) { - throw new Error( - "OPENROUTER_API_KEY environment variable is required for e2e tests" - ); + throw new Error('OPENROUTER_API_KEY environment variable is required for e2e tests'); } client = new OpenRouter({ @@ -17,8 +15,8 @@ describe("Models E2E Tests", () => { }); }); - describe("models.list()", () => { - it("should successfully fetch models list", async () => { + describe('models.list()', () => { + it('should successfully fetch models list', async () => { const response = await client.models.list(); expect(response).toBeDefined(); @@ -27,26 +25,24 @@ describe("Models E2E Tests", () => { expect(response.data.length).toBeGreaterThan(0); }); - it("should return models with expected properties", async () => { + it('should return models with expected properties', async () => { const response = await client.models.list(); const firstModel = response.data[0]; expect(firstModel).toBeDefined(); expect(firstModel?.id).toBeDefined(); - expect(typeof firstModel?.id).toBe("string"); + expect(typeof firstModel?.id).toBe('string'); expect(firstModel?.name).toBeDefined(); }); - - }); - describe("models.count()", () => { - it("should successfully fetch models count", async () => { + describe('models.count()', () => { + it('should successfully fetch models count', async () => { const response = await client.models.count(); expect(response).toBeDefined(); expect(response.data.count).toBeDefined(); - expect(typeof response.data.count).toBe("number"); + expect(typeof response.data.count).toBe('number'); expect(response.data.count).toBeGreaterThan(0); }); }); diff --git a/tests/e2e/responses.test.ts b/tests/e2e/responses.test.ts index eccf2da4..79881c0b 100644 --- a/tests/e2e/responses.test.ts +++ b/tests/e2e/responses.test.ts @@ -1,15 +1,16 @@ -import { beforeAll, describe, expect, it } from "vitest"; -import { OpenRouter } from "../../src/sdk/sdk.js"; +import type { OpenResponsesStreamEvent } from '../../src/models/openresponsesstreamevent.js'; -describe("Beta Responses E2E Tests", () => { +import { beforeAll, describe, expect, it } from 'vitest'; +import { OpenRouter } from '../../src/sdk/sdk.js'; +import { ResponsesOutputMessage } from '../../src/models/responsesoutputmessage.js'; + +describe('Beta Responses E2E Tests', () => { let client: OpenRouter; beforeAll(() => { const apiKey = process.env.OPENROUTER_API_KEY; if (!apiKey) { - throw new Error( - "OPENROUTER_API_KEY environment variable is required for e2e tests" - ); + throw new Error('OPENROUTER_API_KEY environment variable is required for e2e tests'); } client = new OpenRouter({ @@ -17,14 +18,14 @@ describe("Beta Responses E2E Tests", () => { }); }); - describe("beta.responses.send() - Non-streaming", () => { - it("should successfully send a responses request and get a response", async () => { + describe('beta.responses.send() - Non-streaming', () => { + it('should successfully send a responses request and get a response', async () => { const response = await client.beta.responses.send({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - type: "message", - role: "user", + type: 'message', + role: 'user', content: "Say 'Hello, World!' and nothing else.", }, ], @@ -33,8 +34,8 @@ describe("Beta Responses E2E Tests", () => { expect(response).toBeDefined(); expect(response.id).toBeDefined(); - expect(typeof response.id).toBe("string"); - expect(response.object).toBe("response"); + expect(typeof response.id).toBe('string'); + expect(response.object).toBe('response'); expect(response.model).toBeDefined(); expect(response.createdAt).toBeGreaterThan(0); @@ -44,8 +45,9 @@ describe("Beta Responses E2E Tests", () => { const firstOutput = response.output[0]; expect(firstOutput).toBeDefined(); - expect(firstOutput?.type).toBe("message"); - expect(firstOutput?.role).toBe("assistant"); + expect(firstOutput?.type).toBe('message'); + // TODO improve typing here + expect((firstOutput as unknown as ResponsesOutputMessage).role).toBe('assistant'); // Verify usage information expect(response.usage).toBeDefined(); @@ -54,24 +56,24 @@ describe("Beta Responses E2E Tests", () => { expect(response.usage?.outputTokens).toBeGreaterThan(0); }); - it("should handle multi-turn conversations", async () => { + it('should handle multi-turn conversations', async () => { const response = await client.beta.responses.send({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - type: "message", - role: "user", - content: "My name is Alice.", + type: 'message', + role: 'user', + content: 'My name is Alice.', }, { - type: "message", - role: "assistant", - content: "Hello Alice! How can I help you today?", + type: 'message', + role: 'assistant', + content: 'Hello Alice! How can I help you today?', }, { - type: "message", - role: "user", - content: "What is my name?", + type: 'message', + role: 'user', + content: 'What is my name?', }, ], stream: false, @@ -85,25 +87,25 @@ describe("Beta Responses E2E Tests", () => { expect(firstOutput).toBeDefined(); // Verify the response includes a valid message response - if (firstOutput?.type === "message" && Array.isArray(firstOutput.content)) { + if (firstOutput?.type === 'message' && Array.isArray(firstOutput.content)) { const textContent = firstOutput.content - .filter((item) => item.type === "output_text") - .map((item) => item.type === "output_text" ? item.text : "") - .join(""); + .filter((item) => item.type === 'output_text') + .map((item) => (item.type === 'output_text' ? item.text : '')) + .join(''); // Just verify we got a text response (some models may not recall context perfectly) expect(textContent.length).toBeGreaterThan(0); } }); - it("should respect maxOutputTokens parameter", async () => { + it('should respect maxOutputTokens parameter', async () => { const response = await client.beta.responses.send({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - type: "message", - role: "user", - content: "Write a long story about a cat.", + type: 'message', + role: 'user', + content: 'Write a long story about a cat.', }, ], maxOutputTokens: 10, @@ -114,19 +116,19 @@ describe("Beta Responses E2E Tests", () => { expect(response.usage?.outputTokens).toBeLessThanOrEqual(10); }); - it("should handle metadata in request", async () => { + it('should handle metadata in request', async () => { const response = await client.beta.responses.send({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - type: "message", - role: "user", - content: "Say hello.", + type: 'message', + role: 'user', + content: 'Say hello.', }, ], metadata: { - user_id: "test-user-123", - session_id: "test-session-456", + user_id: 'test-user-123', + session_id: 'test-session-456', }, stream: false, }); @@ -137,17 +139,17 @@ describe("Beta Responses E2E Tests", () => { expect(response.metadata).toBeDefined(); }); - it("should handle instructions parameter", async () => { + it('should handle instructions parameter', async () => { const response = await client.beta.responses.send({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - type: "message", - role: "user", - content: "What should I do?", + type: 'message', + role: 'user', + content: 'What should I do?', }, ], - instructions: "Always respond in a friendly and helpful manner.", + instructions: 'Always respond in a friendly and helpful manner.', stream: false, }); @@ -157,15 +159,15 @@ describe("Beta Responses E2E Tests", () => { }); }); - describe("beta.responses.send() - Streaming", () => { - it("should successfully stream responses", async () => { + describe('beta.responses.send() - Streaming', () => { + it('should successfully stream responses', async () => { const response = await client.beta.responses.send({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - type: "message", - role: "user", - content: "Count from 1 to 5.", + type: 'message', + role: 'user', + content: 'Count from 1 to 5.', }, ], stream: true, @@ -173,7 +175,7 @@ describe("Beta Responses E2E Tests", () => { expect(response).toBeDefined(); - const events: any[] = []; + const events: OpenResponsesStreamEvent[] = []; for await (const event of response) { expect(event).toBeDefined(); @@ -183,23 +185,23 @@ describe("Beta Responses E2E Tests", () => { expect(events.length).toBeGreaterThan(0); // Verify we got a response.created event - const createdEvent = events.find((e) => e.type === "response.created"); + const createdEvent = events.find((e) => e.type === 'response.created'); expect(createdEvent).toBeDefined(); // Verify we got response.in_progress or response.completed events const hasProgressOrCompleted = events.some( - (e) => e.type === "response.in_progress" || e.type === "response.completed" + (e) => e.type === 'response.in_progress' || e.type === 'response.completed', ); expect(hasProgressOrCompleted).toBe(true); }, 10000); - it("should stream complete content progressively", async () => { + it('should stream complete content progressively', async () => { const response = await client.beta.responses.send({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - type: "message", - role: "user", + type: 'message', + role: 'user', content: "Say 'test'.", }, ], @@ -216,8 +218,8 @@ describe("Beta Responses E2E Tests", () => { // Check for content in various event types if ( - event.type === "response.output_text.delta" || - event.type === "response.output_text.done" + event.type === 'response.output_text.delta' || + event.type === 'response.output_text.done' ) { hasContent = true; } @@ -227,13 +229,13 @@ describe("Beta Responses E2E Tests", () => { expect(hasContent).toBe(true); }, 10000); - it("should include response.completed event in stream", async () => { + it('should include response.completed event in stream', async () => { const response = await client.beta.responses.send({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - type: "message", - role: "user", + type: 'message', + role: 'user', content: "Say 'done'.", }, ], @@ -245,7 +247,7 @@ describe("Beta Responses E2E Tests", () => { let foundCompleted = false; for await (const event of response) { - if (event.type === "response.completed") { + if (event.type === 'response.completed') { foundCompleted = true; expect(event.response).toBeDefined(); expect(event.response?.usage).toBeDefined(); @@ -255,18 +257,18 @@ describe("Beta Responses E2E Tests", () => { expect(foundCompleted).toBe(true); }, 10000); - it("should handle streaming with metadata", async () => { + it('should handle streaming with metadata', async () => { const response = await client.beta.responses.send({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - type: "message", - role: "user", - content: "Hello", + type: 'message', + role: 'user', + content: 'Hello', }, ], metadata: { - test_key: "test_value", + test_key: 'test_value', }, stream: true, }); @@ -283,13 +285,13 @@ describe("Beta Responses E2E Tests", () => { expect(eventCount).toBeGreaterThan(0); }, 10000); - it("should concatenate streaming chunks into complete sentence", async () => { + it('should concatenate streaming chunks into complete sentence', async () => { const response = await client.beta.responses.send({ - model: "meta-llama/llama-3.2-1b-instruct", + model: 'meta-llama/llama-3.2-1b-instruct', input: [ { - type: "message", - role: "user", + type: 'message', + role: 'user', content: "Say exactly 'The quick brown fox jumps over the lazy dog' and nothing else.", }, ], @@ -298,11 +300,11 @@ describe("Beta Responses E2E Tests", () => { expect(response).toBeDefined(); - let fullText = ""; + let fullText = ''; for await (const event of response) { // Collect text deltas - if (event.type === "response.output_text.delta" && "delta" in event) { + if (event.type === 'response.output_text.delta' && 'delta' in event) { fullText += event.delta; } } @@ -311,9 +313,9 @@ describe("Beta Responses E2E Tests", () => { // The response should contain the key words from our sentence const lowerText = fullText.toLowerCase(); - expect(lowerText).toContain("quick"); - expect(lowerText).toContain("brown"); - expect(lowerText).toContain("fox"); + expect(lowerText).toContain('quick'); + expect(lowerText).toContain('brown'); + expect(lowerText).toContain('fox'); }, 10000); }); }); diff --git a/tests/funcs/oAuthCreateAuthorizationUrl.test.ts b/tests/funcs/oAuthCreateAuthorizationUrl.test.ts index 85538716..5a952ec7 100644 --- a/tests/funcs/oAuthCreateAuthorizationUrl.test.ts +++ b/tests/funcs/oAuthCreateAuthorizationUrl.test.ts @@ -1,30 +1,30 @@ -import { describe, it, expect } from "vitest"; -import { OpenRouterCore } from "../../src/core"; -import { oAuthCreateAuthorizationUrl } from "../../src/funcs/oAuthCreateAuthorizationUrl"; +import { describe, expect, it } from 'vitest'; +import { OpenRouterCore } from '../../src/core'; +import { oAuthCreateAuthorizationUrl } from '../../src/funcs/oAuthCreateAuthorizationUrl'; -describe("oAuthCreateAuthorizationUrl", () => { +describe('oAuthCreateAuthorizationUrl', () => { const createMockClient = (serverURL?: string) => { - return new OpenRouterCore({ serverURL }); + return new OpenRouterCore({ + serverURL, + }); }; - it("should generate authorization URL with callback URL", () => { - const client = createMockClient("https://openrouter.ai/api/v1"); + it('should generate authorization URL with callback URL', () => { + const client = createMockClient('https://openrouter.ai/api/v1'); const result = oAuthCreateAuthorizationUrl(client, { - callbackUrl: "https://example.com/callback", + callbackUrl: 'https://example.com/callback', }); expect(result.ok).toBe(true); if (result.ok) { const url = new URL(result.value); - expect(url.searchParams.get("callback_url")).toBe( - "https://example.com/callback", - ); + expect(url.searchParams.get('callback_url')).toBe('https://example.com/callback'); } }); - it("should generate authorization URL with URL object as callback", () => { - const client = createMockClient("https://openrouter.ai/api/v1"); - const callbackUrl = new URL("https://example.com/callback"); + it('should generate authorization URL with URL object as callback', () => { + const client = createMockClient('https://openrouter.ai/api/v1'); + const callbackUrl = new URL('https://example.com/callback'); const result = oAuthCreateAuthorizationUrl(client, { callbackUrl, }); @@ -32,96 +32,90 @@ describe("oAuthCreateAuthorizationUrl", () => { expect(result.ok).toBe(true); if (result.ok) { const url = new URL(result.value); - expect(url.searchParams.get("callback_url")).toBe( - "https://example.com/callback", - ); + expect(url.searchParams.get('callback_url')).toBe('https://example.com/callback'); } }); - it("should include code challenge with S256 method", () => { - const client = createMockClient("https://openrouter.ai/api/v1"); + it('should include code challenge with S256 method', () => { + const client = createMockClient('https://openrouter.ai/api/v1'); const result = oAuthCreateAuthorizationUrl(client, { - callbackUrl: "https://example.com/callback", - codeChallenge: "test-code-challenge-abc123", - codeChallengeMethod: "S256", + callbackUrl: 'https://example.com/callback', + codeChallenge: 'test-code-challenge-abc123', + codeChallengeMethod: 'S256', }); expect(result.ok).toBe(true); if (result.ok) { const url = new URL(result.value); - expect(url.searchParams.get("code_challenge")).toBe( - "test-code-challenge-abc123", - ); - expect(url.searchParams.get("code_challenge_method")).toBe("S256"); + expect(url.searchParams.get('code_challenge')).toBe('test-code-challenge-abc123'); + expect(url.searchParams.get('code_challenge_method')).toBe('S256'); } }); - it("should include code challenge with plain method", () => { - const client = createMockClient("https://openrouter.ai/api/v1"); + it('should include code challenge with plain method', () => { + const client = createMockClient('https://openrouter.ai/api/v1'); const result = oAuthCreateAuthorizationUrl(client, { - callbackUrl: "https://example.com/callback", - codeChallenge: "plain-code-challenge", - codeChallengeMethod: "plain", + callbackUrl: 'https://example.com/callback', + codeChallenge: 'plain-code-challenge', + codeChallengeMethod: 'plain', }); expect(result.ok).toBe(true); if (result.ok) { const url = new URL(result.value); - expect(url.searchParams.get("code_challenge")).toBe( - "plain-code-challenge", - ); - expect(url.searchParams.get("code_challenge_method")).toBe("plain"); + expect(url.searchParams.get('code_challenge')).toBe('plain-code-challenge'); + expect(url.searchParams.get('code_challenge_method')).toBe('plain'); } }); - it("should include limit parameter when provided", () => { - const client = createMockClient("https://openrouter.ai/api/v1"); + it('should include limit parameter when provided', () => { + const client = createMockClient('https://openrouter.ai/api/v1'); const result = oAuthCreateAuthorizationUrl(client, { - callbackUrl: "https://example.com/callback", + callbackUrl: 'https://example.com/callback', limit: 100, }); expect(result.ok).toBe(true); if (result.ok) { const url = new URL(result.value); - expect(url.searchParams.get("limit")).toBe("100"); + expect(url.searchParams.get('limit')).toBe('100'); } }); - it("should handle callback URL with query parameters", () => { - const client = createMockClient("https://openrouter.ai/api/v1"); + it('should handle callback URL with query parameters', () => { + const client = createMockClient('https://openrouter.ai/api/v1'); const result = oAuthCreateAuthorizationUrl(client, { - callbackUrl: "https://example.com/callback?state=abc123&redirect=true", + callbackUrl: 'https://example.com/callback?state=abc123&redirect=true', }); expect(result.ok).toBe(true); if (result.ok) { const url = new URL(result.value); - expect(url.searchParams.get("callback_url")).toBe( - "https://example.com/callback?state=abc123&redirect=true", + expect(url.searchParams.get('callback_url')).toBe( + 'https://example.com/callback?state=abc123&redirect=true', ); } }); - it("should handle callback URL with special characters", () => { - const client = createMockClient("https://openrouter.ai/api/v1"); + it('should handle callback URL with special characters', () => { + const client = createMockClient('https://openrouter.ai/api/v1'); const result = oAuthCreateAuthorizationUrl(client, { - callbackUrl: "https://example.com/callback?data=hello%20world", + callbackUrl: 'https://example.com/callback?data=hello%20world', }); expect(result.ok).toBe(true); if (result.ok) { const url = new URL(result.value); - expect(url.searchParams.get("callback_url")).toBe( - "https://example.com/callback?data=hello%20world", + expect(url.searchParams.get('callback_url')).toBe( + 'https://example.com/callback?data=hello%20world', ); } }); - it("should return error for invalid callback URL string", () => { - const client = createMockClient("https://openrouter.ai/api/v1"); + it('should return error for invalid callback URL string', () => { + const client = createMockClient('https://openrouter.ai/api/v1'); const result = oAuthCreateAuthorizationUrl(client, { - callbackUrl: "not-a-valid-url" as any, + callbackUrl: 'not-a-valid-url' as any, }); expect(result.ok).toBe(false); @@ -130,87 +124,81 @@ describe("oAuthCreateAuthorizationUrl", () => { } }); - it("should handle callback URL with localhost", () => { - const client = createMockClient("https://openrouter.ai/api/v1"); + it('should handle callback URL with localhost', () => { + const client = createMockClient('https://openrouter.ai/api/v1'); const result = oAuthCreateAuthorizationUrl(client, { - callbackUrl: "http://localhost:3000/callback", + callbackUrl: 'http://localhost:3000/callback', }); expect(result.ok).toBe(true); if (result.ok) { const url = new URL(result.value); - expect(url.searchParams.get("callback_url")).toBe( - "http://localhost:3000/callback", - ); + expect(url.searchParams.get('callback_url')).toBe('http://localhost:3000/callback'); } }); - it("should use default production server when no serverURL provided", () => { + it('should use default production server when no serverURL provided', () => { const client = createMockClient(); const result = oAuthCreateAuthorizationUrl(client, { - callbackUrl: "https://example.com/callback", + callbackUrl: 'https://example.com/callback', }); expect(result.ok).toBe(true); if (result.ok) { const url = new URL(result.value); - expect(url.origin).toBe("https://openrouter.ai"); - expect(url.pathname).toBe("/auth"); + expect(url.origin).toBe('https://openrouter.ai'); + expect(url.pathname).toBe('/auth'); } }); - it("should use custom server URL when provided", () => { - const client = createMockClient("https://custom.example.com/api"); + it('should use custom server URL when provided', () => { + const client = createMockClient('https://custom.example.com/api'); const result = oAuthCreateAuthorizationUrl(client, { - callbackUrl: "https://example.com/callback", + callbackUrl: 'https://example.com/callback', }); expect(result.ok).toBe(true); if (result.ok) { const url = new URL(result.value); - expect(url.origin).toBe("https://custom.example.com"); - expect(url.pathname).toBe("/auth"); + expect(url.origin).toBe('https://custom.example.com'); + expect(url.pathname).toBe('/auth'); } }); - it("should preserve all parameters with PKCE", () => { - const client = createMockClient("https://openrouter.ai/api/v1"); + it('should preserve all parameters with PKCE', () => { + const client = createMockClient('https://openrouter.ai/api/v1'); const result = oAuthCreateAuthorizationUrl(client, { - callbackUrl: "https://example.com/callback?state=xyz", - codeChallenge: "challenge123", - codeChallengeMethod: "S256", + callbackUrl: 'https://example.com/callback?state=xyz', + codeChallenge: 'challenge123', + codeChallengeMethod: 'S256', limit: 50, }); expect(result.ok).toBe(true); if (result.ok) { const url = new URL(result.value); - expect(url.searchParams.get("callback_url")).toBe( - "https://example.com/callback?state=xyz", - ); - expect(url.searchParams.get("code_challenge")).toBe("challenge123"); - expect(url.searchParams.get("code_challenge_method")).toBe("S256"); - expect(url.searchParams.get("limit")).toBe("50"); + expect(url.searchParams.get('callback_url')).toBe('https://example.com/callback?state=xyz'); + expect(url.searchParams.get('code_challenge')).toBe('challenge123'); + expect(url.searchParams.get('code_challenge_method')).toBe('S256'); + expect(url.searchParams.get('limit')).toBe('50'); } }); - it("should handle callback URL with fragment", () => { - const client = createMockClient("https://openrouter.ai/api/v1"); + it('should handle callback URL with fragment', () => { + const client = createMockClient('https://openrouter.ai/api/v1'); const result = oAuthCreateAuthorizationUrl(client, { - callbackUrl: "https://example.com/callback#section", + callbackUrl: 'https://example.com/callback#section', }); expect(result.ok).toBe(true); if (result.ok) { const url = new URL(result.value); - expect(url.searchParams.get("callback_url")).toBe( - "https://example.com/callback#section", - ); + expect(url.searchParams.get('callback_url')).toBe('https://example.com/callback#section'); } }); - it("should return error for invalid input types", () => { - const client = createMockClient("https://openrouter.ai/api/v1"); + it('should return error for invalid input types', () => { + const client = createMockClient('https://openrouter.ai/api/v1'); const result = oAuthCreateAuthorizationUrl(client, { callbackUrl: 12345 as any, }); @@ -221,45 +209,43 @@ describe("oAuthCreateAuthorizationUrl", () => { } }); - it("should handle URL with port number in callback", () => { - const client = createMockClient("https://openrouter.ai/api/v1"); + it('should handle URL with port number in callback', () => { + const client = createMockClient('https://openrouter.ai/api/v1'); const result = oAuthCreateAuthorizationUrl(client, { - callbackUrl: "https://example.com:8443/callback", + callbackUrl: 'https://example.com:8443/callback', }); expect(result.ok).toBe(true); if (result.ok) { const url = new URL(result.value); - expect(url.searchParams.get("callback_url")).toBe( - "https://example.com:8443/callback", - ); + expect(url.searchParams.get('callback_url')).toBe('https://example.com:8443/callback'); } }); - it("should not omit limit parameter when value is 0", () => { - const client = createMockClient("https://openrouter.ai/api/v1"); + it('should not omit limit parameter when value is 0', () => { + const client = createMockClient('https://openrouter.ai/api/v1'); const result = oAuthCreateAuthorizationUrl(client, { - callbackUrl: "https://example.com/callback", + callbackUrl: 'https://example.com/callback', limit: 0, }); expect(result.ok).toBe(true); if (result.ok) { const url = new URL(result.value); - expect(url.searchParams.get("limit")).toBe("0"); + expect(url.searchParams.get('limit')).toBe('0'); } }); - it("should omit limit parameter when not provided", () => { - const client = createMockClient("https://openrouter.ai/api/v1"); + it('should omit limit parameter when not provided', () => { + const client = createMockClient('https://openrouter.ai/api/v1'); const result = oAuthCreateAuthorizationUrl(client, { - callbackUrl: "https://example.com/callback", + callbackUrl: 'https://example.com/callback', }); expect(result.ok).toBe(true); if (result.ok) { const url = new URL(result.value); - expect(url.searchParams.has("limit")).toBe(false); + expect(url.searchParams.has('limit')).toBe(false); } }); }); diff --git a/tests/funcs/oAuthCreateSHA256CodeChallenge.test.ts b/tests/funcs/oAuthCreateSHA256CodeChallenge.test.ts index a626eb2b..f7142adb 100644 --- a/tests/funcs/oAuthCreateSHA256CodeChallenge.test.ts +++ b/tests/funcs/oAuthCreateSHA256CodeChallenge.test.ts @@ -1,27 +1,33 @@ -import { describe, it, expect } from "vitest"; -import { oAuthCreateSHA256CodeChallenge } from "../../src/funcs/oAuthCreateSHA256CodeChallenge"; +import { describe, expect, it } from 'vitest'; +import { oAuthCreateSHA256CodeChallenge } from '../../src/funcs/oAuthCreateSHA256CodeChallenge'; -describe("oAuthCreateSHA256CodeChallenge", () => { - it("should generate code challenge from provided code verifier", async () => { +describe('oAuthCreateSHA256CodeChallenge', () => { + it('should generate code challenge from provided code verifier', async () => { // Use RFC 7636 compliant verifier (43 chars minimum) - const codeVerifier = "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk"; - const result = await oAuthCreateSHA256CodeChallenge({ codeVerifier }); + const codeVerifier = 'dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk'; + const result = await oAuthCreateSHA256CodeChallenge({ + codeVerifier, + }); expect(result.ok).toBe(true); if (result.ok) { expect(result.value.codeVerifier).toBe(codeVerifier); expect(result.value.codeChallenge).toBeTruthy(); - expect(typeof result.value.codeChallenge).toBe("string"); + expect(typeof result.value.codeChallenge).toBe('string'); // Code challenge should be base64url encoded (no +, /, or = characters) expect(result.value.codeChallenge).not.toMatch(/[+/=]/); } }); - it("should generate consistent code challenge for same verifier", async () => { + it('should generate consistent code challenge for same verifier', async () => { // RFC compliant verifier (43+ chars) - const codeVerifier = "a".repeat(43); - const result1 = await oAuthCreateSHA256CodeChallenge({ codeVerifier }); - const result2 = await oAuthCreateSHA256CodeChallenge({ codeVerifier }); + const codeVerifier = 'a'.repeat(43); + const result1 = await oAuthCreateSHA256CodeChallenge({ + codeVerifier, + }); + const result2 = await oAuthCreateSHA256CodeChallenge({ + codeVerifier, + }); expect(result1.ok).toBe(true); expect(result2.ok).toBe(true); @@ -30,14 +36,14 @@ describe("oAuthCreateSHA256CodeChallenge", () => { } }); - it("should generate RFC 7636 compliant random code verifier when not provided", async () => { + it('should generate RFC 7636 compliant random code verifier when not provided', async () => { const result = await oAuthCreateSHA256CodeChallenge(); expect(result.ok).toBe(true); if (result.ok) { expect(result.value.codeVerifier).toBeTruthy(); expect(result.value.codeChallenge).toBeTruthy(); - expect(typeof result.value.codeVerifier).toBe("string"); + expect(typeof result.value.codeVerifier).toBe('string'); // RFC 7636: verifier should be exactly 43 characters (32 bytes base64url encoded) expect(result.value.codeVerifier.length).toBe(43); // Should only contain base64url characters @@ -45,7 +51,7 @@ describe("oAuthCreateSHA256CodeChallenge", () => { } }); - it("should generate different code verifiers on successive calls", async () => { + it('should generate different code verifiers on successive calls', async () => { const result1 = await oAuthCreateSHA256CodeChallenge(); const result2 = await oAuthCreateSHA256CodeChallenge(); @@ -57,9 +63,11 @@ describe("oAuthCreateSHA256CodeChallenge", () => { } }); - it("should generate base64url encoded challenge (RFC 7636)", async () => { - const codeVerifier = "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk"; - const result = await oAuthCreateSHA256CodeChallenge({ codeVerifier }); + it('should generate base64url encoded challenge (RFC 7636)', async () => { + const codeVerifier = 'dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk'; + const result = await oAuthCreateSHA256CodeChallenge({ + codeVerifier, + }); expect(result.ok).toBe(true); if (result.ok) { @@ -72,7 +80,7 @@ describe("oAuthCreateSHA256CodeChallenge", () => { } }); - it("should handle invalid input type", async () => { + it('should handle invalid input type', async () => { const result = await oAuthCreateSHA256CodeChallenge({ codeVerifier: 123 as any, }); @@ -83,9 +91,11 @@ describe("oAuthCreateSHA256CodeChallenge", () => { } }); - it("should produce SHA-256 hash of correct length", async () => { - const codeVerifier = "a".repeat(43); // RFC compliant length - const result = await oAuthCreateSHA256CodeChallenge({ codeVerifier }); + it('should produce SHA-256 hash of correct length', async () => { + const codeVerifier = 'a'.repeat(43); // RFC compliant length + const result = await oAuthCreateSHA256CodeChallenge({ + codeVerifier, + }); expect(result.ok).toBe(true); if (result.ok) { @@ -95,34 +105,32 @@ describe("oAuthCreateSHA256CodeChallenge", () => { } }); - it("should reject empty string code verifier (RFC 7636 violation)", async () => { - const result = await oAuthCreateSHA256CodeChallenge({ codeVerifier: "" }); + it('should reject empty string code verifier (RFC 7636 violation)', async () => { + const result = await oAuthCreateSHA256CodeChallenge({ + codeVerifier: '', + }); expect(result.ok).toBe(false); if (!result.ok) { expect(result.error).toBeDefined(); - expect((result.error as Error).message).toContain( - "at least 43 characters", - ); + expect((result.error as Error).message).toContain('at least 43 characters'); } }); - it("should reject code verifier shorter than 43 characters", async () => { + it('should reject code verifier shorter than 43 characters', async () => { const result = await oAuthCreateSHA256CodeChallenge({ - codeVerifier: "too-short", + codeVerifier: 'too-short', }); expect(result.ok).toBe(false); if (!result.ok) { expect(result.error).toBeDefined(); - expect((result.error as Error).message).toContain( - "at least 43 characters", - ); + expect((result.error as Error).message).toContain('at least 43 characters'); } }); - it("should reject code verifier longer than 128 characters (RFC 7636)", async () => { - const longVerifier = "a".repeat(129); + it('should reject code verifier longer than 128 characters (RFC 7636)', async () => { + const longVerifier = 'a'.repeat(129); const result = await oAuthCreateSHA256CodeChallenge({ codeVerifier: longVerifier, }); @@ -130,14 +138,12 @@ describe("oAuthCreateSHA256CodeChallenge", () => { expect(result.ok).toBe(false); if (!result.ok) { expect(result.error).toBeDefined(); - expect((result.error as Error).message).toContain( - "at most 128 characters", - ); + expect((result.error as Error).message).toContain('at most 128 characters'); } }); - it("should accept code verifier at maximum length (128 characters)", async () => { - const maxVerifier = "a".repeat(128); + it('should accept code verifier at maximum length (128 characters)', async () => { + const maxVerifier = 'a'.repeat(128); const result = await oAuthCreateSHA256CodeChallenge({ codeVerifier: maxVerifier, }); @@ -151,9 +157,9 @@ describe("oAuthCreateSHA256CodeChallenge", () => { } }); - it("should accept RFC 7636 unreserved characters in code verifier", async () => { + it('should accept RFC 7636 unreserved characters in code verifier', async () => { // RFC 7636 allows: [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~" - const validVerifier = "aZ09-._~" + "a".repeat(35); // 43 chars total + const validVerifier = 'aZ09-._~' + 'a'.repeat(35); // 43 chars total const result = await oAuthCreateSHA256CodeChallenge({ codeVerifier: validVerifier, }); @@ -166,9 +172,9 @@ describe("oAuthCreateSHA256CodeChallenge", () => { } }); - it("should reject code verifier with invalid characters", async () => { + it('should reject code verifier with invalid characters', async () => { // Contains invalid characters like ! @ # $ etc. - const invalidVerifier = "test!@#$%^&*()+=[]{}|;:',.<>?/`" + "a".repeat(13); + const invalidVerifier = "test!@#$%^&*()+=[]{}|;:',.<>?/`" + 'a'.repeat(13); const result = await oAuthCreateSHA256CodeChallenge({ codeVerifier: invalidVerifier, }); @@ -176,14 +182,12 @@ describe("oAuthCreateSHA256CodeChallenge", () => { expect(result.ok).toBe(false); if (!result.ok) { expect(result.error).toBeDefined(); - expect((result.error as Error).message).toContain( - "unreserved characters", - ); + expect((result.error as Error).message).toContain('unreserved characters'); } }); - it("should reject code verifier with spaces", async () => { - const verifierWithSpaces = "test verifier with spaces" + "a".repeat(18); + it('should reject code verifier with spaces', async () => { + const verifierWithSpaces = 'test verifier with spaces' + 'a'.repeat(18); const result = await oAuthCreateSHA256CodeChallenge({ codeVerifier: verifierWithSpaces, }); @@ -191,9 +195,7 @@ describe("oAuthCreateSHA256CodeChallenge", () => { expect(result.ok).toBe(false); if (!result.ok) { expect(result.error).toBeDefined(); - expect((result.error as Error).message).toContain( - "unreserved characters", - ); + expect((result.error as Error).message).toContain('unreserved characters'); } }); }); diff --git a/tests/sdk/oauth.test.ts b/tests/sdk/oauth.test.ts index dfb160a6..65ff63a4 100644 --- a/tests/sdk/oauth.test.ts +++ b/tests/sdk/oauth.test.ts @@ -1,20 +1,20 @@ -import { describe, expect, it, vi } from "vitest"; -import { OAuth as OpenRouterOAuthSDK } from "../../src/sdk/oauth"; +import { describe, expect, it, vi } from 'vitest'; +import { OAuth as OpenRouterOAuthSDK } from '../../src/sdk/oauth'; -describe("oauth", () => { +describe('oauth', () => { const oauthSdkInstance = new OpenRouterOAuthSDK({ - serverURL: "https://test-server-url", + serverURL: 'https://test-server-url', }); - describe("createSHA256CodeChallenge", () => { - it("is defined on the oauth sdk object", () => { + describe('createSHA256CodeChallenge', () => { + it('is defined on the oauth sdk object', () => { expect(oauthSdkInstance.createSHA256CodeChallenge).toBeDefined(); }); - it("calls the custom oAuthCreateSHA256CodeChallenge function", async () => { + it('calls the custom oAuthCreateSHA256CodeChallenge function', async () => { const spy = vi.spyOn( - await import("../../src/funcs/oAuthCreateSHA256CodeChallenge"), - "oAuthCreateSHA256CodeChallenge", + await import('../../src/funcs/oAuthCreateSHA256CodeChallenge'), + 'oAuthCreateSHA256CodeChallenge', ); oauthSdkInstance.createSHA256CodeChallenge(); @@ -23,19 +23,19 @@ describe("oauth", () => { }); }); - describe("createAuthorizationUrl", () => { - it("is defined on the oauth sdk object", () => { + describe('createAuthorizationUrl', () => { + it('is defined on the oauth sdk object', () => { expect(oauthSdkInstance.createAuthorizationUrl).toBeDefined(); }); - it("calls the custom oAuthCreateAuthorizationUrl function", async () => { + it('calls the custom oAuthCreateAuthorizationUrl function', async () => { const spy = vi.spyOn( - await import("../../src/funcs/oAuthCreateAuthorizationUrl"), - "oAuthCreateAuthorizationUrl", + await import('../../src/funcs/oAuthCreateAuthorizationUrl'), + 'oAuthCreateAuthorizationUrl', ); oauthSdkInstance.createAuthorizationUrl({ - callbackUrl: "https://example.com/callback", + callbackUrl: 'https://example.com/callback', }); expect(spy).toHaveBeenCalled(); diff --git a/tsconfig.json b/tsconfig.json index 8a8858bf..a9f80db5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,6 @@ { "compilerOptions": { "incremental": true, - "tsBuildInfoFile": ".tsbuildinfo", "target": "ES2020", "lib": ["ES2022", "DOM", "DOM.Iterable"], "jsx": "react-jsx", diff --git a/vitest.config.ts b/vitest.config.ts index 52d7ceb4..6fec5e90 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -1,30 +1,36 @@ -import { config } from "dotenv"; -import { defineConfig } from "vitest/config"; -import { fileURLToPath } from "url"; -import { dirname, join } from "path"; +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { config } from 'dotenv'; +import { defineConfig } from 'vitest/config'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); // Load environment variables from .env file if it exists // This will not override existing environment variables -config({ path: join(__dirname, ".env") }); +config({ + path: join(__dirname, '.env'), +}); export default defineConfig({ test: { globals: true, - environment: "node", + environment: 'node', // Don't override env vars - just let them pass through from the system // The env object here will be merged with process.env env: { OPENROUTER_API_KEY: process.env.OPENROUTER_API_KEY, }, - include: ["tests/**/*.test.ts"], + include: [ + 'tests/**/*.test.ts', + ], hookTimeout: 30000, testTimeout: 30000, typecheck: { enabled: true, - include: ["tests/**/*.test.ts"], + include: [ + 'tests/**/*.test.ts', + ], }, }, });