From 09d2e939a8c42d495d9207ad2d73841f6e9e8732 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 21 Aug 2025 19:12:00 +0000 Subject: [PATCH 01/51] feat(api): api update --- .stats.yml | 4 ++-- .../mcp-server/src/tools/account/introspect-account.ts | 2 +- src/resources/account.ts | 10 ++++++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/.stats.yml b/.stats.yml index 9d73576a7..ff867f705 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-6d0c6a1feba5ccb895a6779cd98c2a0ae87d6394f5e98a9da51f17258c4eb297.yml -openapi_spec_hash: ac3be0c8a992103e5f467fe1bcb20a81 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-bf86910e96e83e583689cf5d1a5c583268754026ec68288994fa6a969dc248f2.yml +openapi_spec_hash: 195038e056891afec204c49dadce3b95 config_hash: 5146b12344dae76238940989dac1e8a0 diff --git a/packages/mcp-server/src/tools/account/introspect-account.ts b/packages/mcp-server/src/tools/account/introspect-account.ts index bdc030fbb..943b330af 100644 --- a/packages/mcp-server/src/tools/account/introspect-account.ts +++ b/packages/mcp-server/src/tools/account/introspect-account.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'introspect_account', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRead account information associated with an `access_token`\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/introspection',\n $defs: {\n introspection: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'The Finch UUID of the token being introspected'\n },\n client_id: {\n type: 'string',\n description: 'The client ID of the application associated with the `access_token`'\n },\n client_type: {\n type: 'string',\n title: 'ClientType',\n description: 'The type of application associated with a token.',\n enum: [ 'development',\n 'production',\n 'sandbox'\n ]\n },\n connection_id: {\n type: 'string',\n description: 'The Finch UUID of the connection associated with the `access_token`'\n },\n connection_status: {\n type: 'object',\n properties: {\n status: {\n $ref: '#/$defs/connection_status_type'\n },\n last_successful_sync: {\n anyOf: [ {\n type: 'string',\n format: 'date-time'\n },\n {\n type: 'string'\n }\n ],\n description: 'The datetime when the connection was last successfully synced'\n },\n message: {\n type: 'string'\n }\n },\n required: [ 'status'\n ]\n },\n connection_type: {\n type: 'string',\n title: 'ConnectionType',\n description: 'The type of the connection associated with the token.\\n- `provider` - connection to an external provider\\n- `finch` - finch-generated data.',\n enum: [ 'finch',\n 'provider'\n ]\n },\n products: {\n type: 'array',\n description: 'An array of the authorized products associated with the `access_token`.',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`.'\n },\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate tokens with a Finch connection instead of this account ID'\n },\n authentication_methods: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description: 'The type of authentication method',\n enum: [ 'assisted',\n 'credential',\n 'api_token',\n 'api_credential',\n 'oauth'\n ]\n },\n connection_status: {\n type: 'object',\n properties: {\n status: {\n $ref: '#/$defs/connection_status_type'\n },\n last_successful_sync: {\n anyOf: [ {\n type: 'string',\n format: 'date-time'\n },\n {\n type: 'string'\n }\n ],\n description: 'The datetime when the connection was last successfully synced'\n },\n message: {\n type: 'string'\n }\n },\n required: [ 'status'\n ]\n },\n products: {\n type: 'array',\n description: 'An array of the authorized products associated with the `access_token`',\n items: {\n type: 'string'\n }\n }\n },\n required: [ 'type'\n ]\n }\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate tokens with a Finch connection instead of this company ID'\n },\n customer_email: {\n type: 'string',\n description: 'The email of your customer you provided to Finch when a connect session was created for this connection'\n },\n customer_id: {\n type: 'string',\n description: 'The ID of your customer you provided to Finch when a connect session was created for this connection'\n },\n customer_name: {\n type: 'string',\n description: 'The name of your customer you provided to Finch when a connect session was created for this connection'\n },\n manual: {\n type: 'boolean',\n description: 'Whether the connection associated with the `access_token` uses the Assisted Connect Flow. (`true` if using Assisted Connect, `false` if connection is automated)'\n },\n payroll_provider_id: {\n type: 'string',\n description: '[DEPRECATED] Use `provider_id` to identify the provider instead of this payroll provider ID.'\n },\n username: {\n type: 'string',\n description: 'The account username used for login associated with the `access_token`.'\n }\n },\n required: [ 'id',\n 'client_id',\n 'client_type',\n 'connection_id',\n 'connection_status',\n 'connection_type',\n 'products',\n 'provider_id'\n ]\n },\n connection_status_type: {\n type: 'string',\n enum: [ 'pending',\n 'processing',\n 'connected',\n 'error_no_account_setup',\n 'error_permissions',\n 'reauth'\n ]\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRead account information associated with an `access_token`\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/introspection',\n $defs: {\n introspection: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'The Finch UUID of the token being introspected'\n },\n client_id: {\n type: 'string',\n description: 'The client ID of the application associated with the `access_token`'\n },\n client_type: {\n type: 'string',\n title: 'ClientType',\n description: 'The type of application associated with a token.',\n enum: [ 'development',\n 'production',\n 'sandbox'\n ]\n },\n connection_id: {\n type: 'string',\n description: 'The Finch UUID of the connection associated with the `access_token`'\n },\n connection_status: {\n type: 'object',\n properties: {\n status: {\n $ref: '#/$defs/connection_status_type'\n },\n last_successful_sync: {\n anyOf: [ {\n type: 'string',\n format: 'date-time'\n },\n {\n type: 'string'\n }\n ],\n description: 'The datetime when the connection was last successfully synced'\n },\n message: {\n type: 'string'\n }\n },\n required: [ 'status'\n ]\n },\n connection_type: {\n type: 'string',\n title: 'ConnectionType',\n description: 'The type of the connection associated with the token.\\n- `provider` - connection to an external provider\\n- `finch` - finch-generated data.',\n enum: [ 'finch',\n 'provider'\n ]\n },\n products: {\n type: 'array',\n description: 'An array of the authorized products associated with the `access_token`.',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`.'\n },\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate tokens with a Finch connection instead of this account ID'\n },\n authentication_methods: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description: 'The type of authentication method',\n enum: [ 'assisted',\n 'credential',\n 'api_token',\n 'api_credential',\n 'oauth'\n ]\n },\n connection_status: {\n type: 'object',\n properties: {\n status: {\n $ref: '#/$defs/connection_status_type'\n },\n last_successful_sync: {\n anyOf: [ {\n type: 'string',\n format: 'date-time'\n },\n {\n type: 'string'\n }\n ],\n description: 'The datetime when the connection was last successfully synced'\n },\n message: {\n type: 'string'\n }\n },\n required: [ 'status'\n ]\n },\n products: {\n type: 'array',\n description: 'An array of the authorized products associated with the `access_token`',\n items: {\n type: 'string'\n }\n }\n },\n required: [ 'type'\n ]\n }\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate tokens with a Finch connection instead of this company ID'\n },\n customer_email: {\n type: 'string',\n description: 'The email of your customer you provided to Finch when a connect session was created for this connection'\n },\n customer_id: {\n type: 'string',\n description: 'The ID of your customer you provided to Finch when a connect session was created for this connection'\n },\n customer_name: {\n type: 'string',\n description: 'The name of your customer you provided to Finch when a connect session was created for this connection'\n },\n entity_ids: {\n type: 'array',\n description: 'Array of entity IDs associated with this connection.',\n items: {\n type: 'string'\n }\n },\n entity_mode: {\n type: 'string',\n description: 'Indicates whether this connection manages a single entity or multiple entities.',\n enum: [ 'single',\n 'multi'\n ]\n },\n manual: {\n type: 'boolean',\n description: 'Whether the connection associated with the `access_token` uses the Assisted Connect Flow. (`true` if using Assisted Connect, `false` if connection is automated)'\n },\n payroll_provider_id: {\n type: 'string',\n description: '[DEPRECATED] Use `provider_id` to identify the provider instead of this payroll provider ID.'\n },\n username: {\n type: 'string',\n description: 'The account username used for login associated with the `access_token`.'\n }\n },\n required: [ 'id',\n 'client_id',\n 'client_type',\n 'connection_id',\n 'connection_status',\n 'connection_type',\n 'products',\n 'provider_id'\n ]\n },\n connection_status_type: {\n type: 'string',\n enum: [ 'pending',\n 'processing',\n 'connected',\n 'error_no_account_setup',\n 'error_permissions',\n 'reauth'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/src/resources/account.ts b/src/resources/account.ts index 2df6c8d53..3e9f48b37 100644 --- a/src/resources/account.ts +++ b/src/resources/account.ts @@ -100,6 +100,16 @@ export interface Introspection { */ customer_name?: string | null; + /** + * Array of entity IDs associated with this connection. + */ + entity_ids?: Array; + + /** + * Indicates whether this connection manages a single entity or multiple entities. + */ + entity_mode?: 'single' | 'multi'; + /** * Whether the connection associated with the `access_token` uses the Assisted * Connect Flow. (`true` if using Assisted Connect, `false` if connection is From 47843c85864215c19edd9826952bd625e79ca78c Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 22 Aug 2025 17:02:27 +0000 Subject: [PATCH 02/51] chore: update CI script --- .github/workflows/ci.yml | 9 +++++++++ scripts/utils/upload-artifact.sh | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9a2fdde41..8baf2b90b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -68,6 +68,15 @@ jobs: AUTH: ${{ steps.github-oidc.outputs.github_token }} SHA: ${{ github.sha }} run: ./scripts/utils/upload-artifact.sh + + - name: Upload MCP Server tarball + if: github.repository == 'stainless-sdks/finch-node' + env: + URL: https://pkg.stainless.com/s?subpackage=mcp-server + AUTH: ${{ steps.github-oidc.outputs.github_token }} + SHA: ${{ github.sha }} + BUILD_PATH: packages/mcp-server/dist + run: ./scripts/utils/upload-artifact.sh test: timeout-minutes: 10 name: test diff --git a/scripts/utils/upload-artifact.sh b/scripts/utils/upload-artifact.sh index 73865a386..86592f947 100755 --- a/scripts/utils/upload-artifact.sh +++ b/scripts/utils/upload-artifact.sh @@ -12,7 +12,7 @@ if [[ "$SIGNED_URL" == "null" ]]; then exit 1 fi -UPLOAD_RESPONSE=$(tar -cz dist | curl -v -X PUT \ +UPLOAD_RESPONSE=$(tar -cz "${BUILD_PATH:-dist}" | curl -v -X PUT \ -H "Content-Type: application/gzip" \ --data-binary @- "$SIGNED_URL" 2>&1) From 13ef1bd4400e1ae2b2197a35f33e79703af34e08 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 22 Aug 2025 21:08:19 +0000 Subject: [PATCH 03/51] feat(mcp): change remote server query option parsing logic --- packages/mcp-server/src/options.ts | 20 ++++++++++++-------- packages/mcp-server/tests/options.test.ts | 2 +- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/packages/mcp-server/src/options.ts b/packages/mcp-server/src/options.ts index 9eb00b48d..2100cf58d 100644 --- a/packages/mcp-server/src/options.ts +++ b/packages/mcp-server/src/options.ts @@ -366,16 +366,20 @@ export function parseQueryOptions(defaultOptions: McpOptions, query: unknown): M } } + let dynamicTools: boolean | undefined = + queryOptions.no_tools && !queryOptions.no_tools?.includes('dynamic') ? false + : queryOptions.tools?.includes('dynamic') ? true + : defaultOptions.includeDynamicTools; + + let allTools: boolean | undefined = + queryOptions.no_tools && !queryOptions.no_tools?.includes('all') ? false + : queryOptions.tools?.includes('all') ? true + : defaultOptions.includeAllTools; + return { client: queryOptions.client ?? defaultOptions.client, - includeDynamicTools: - defaultOptions.includeDynamicTools === false ? - false - : queryOptions.tools?.includes('dynamic') && !queryOptions.no_tools?.includes('dynamic'), - includeAllTools: - defaultOptions.includeAllTools === false ? - false - : queryOptions.tools?.includes('all') && !queryOptions.no_tools?.includes('all'), + includeDynamicTools: dynamicTools, + includeAllTools: allTools, includeCodeTools: undefined, filters, capabilities: clientCapabilities, diff --git a/packages/mcp-server/tests/options.test.ts b/packages/mcp-server/tests/options.test.ts index 24604b844..a8a5b81a9 100644 --- a/packages/mcp-server/tests/options.test.ts +++ b/packages/mcp-server/tests/options.test.ts @@ -297,7 +297,7 @@ describe('parseQueryOptions', () => { ]); expect(result.client).toBe('cursor'); - expect(result.includeDynamicTools).toBe(undefined); + expect(result.includeDynamicTools).toBe(true); }); it('should override client from default options', () => { From ac835bf6af93d53e551d73001d048baa95e1c334 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 28 Aug 2025 15:50:47 +0000 Subject: [PATCH 04/51] chore(internal): codegen related update --- packages/mcp-server/README.md | 1 - .../list-individuals-hris-directory.ts | 53 ------------------- packages/mcp-server/src/tools/index.ts | 2 - 3 files changed, 56 deletions(-) delete mode 100644 packages/mcp-server/src/tools/hris/directory/list-individuals-hris-directory.ts diff --git a/packages/mcp-server/README.md b/packages/mcp-server/README.md index e8a5ab16c..647e03e8d 100644 --- a/packages/mcp-server/README.md +++ b/packages/mcp-server/README.md @@ -238,7 +238,6 @@ The following tools are available in this MCP server. ### Resource `hris.directory`: - `list_hris_directory` (`read`): Read company directory and organization structure -- `list_individuals_hris_directory` (`read`): Read company directory and organization structure ### Resource `hris.individuals`: diff --git a/packages/mcp-server/src/tools/hris/directory/list-individuals-hris-directory.ts b/packages/mcp-server/src/tools/hris/directory/list-individuals-hris-directory.ts deleted file mode 100644 index 56e8cc37d..000000000 --- a/packages/mcp-server/src/tools/hris/directory/list-individuals-hris-directory.ts +++ /dev/null @@ -1,53 +0,0 @@ -// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -import { maybeFilter } from '@tryfinch/finch-api-mcp/filtering'; -import { Metadata, asTextContentResult } from '@tryfinch/finch-api-mcp/tools/types'; - -import { Tool } from '@modelcontextprotocol/sdk/types.js'; -import Finch from '@tryfinch/finch-api'; - -export const metadata: Metadata = { - resource: 'hris.directory', - operation: 'read', - tags: [], - httpMethod: 'get', - httpPath: '/employer/directory', - operationId: 'get-directory', -}; - -export const tool: Tool = { - name: 'list_individuals_hris_directory', - description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRead company directory and organization structure\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n individuals: {\n type: 'array',\n description: 'The array of employees.',\n items: {\n $ref: '#/$defs/individual_in_directory'\n }\n },\n paging: {\n $ref: '#/$defs/paging'\n }\n },\n required: [ 'individuals',\n 'paging'\n ],\n $defs: {\n individual_in_directory: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'A stable Finch `id` (UUID v4) for an individual in the company.'\n },\n department: {\n type: 'object',\n description: 'The department object.',\n properties: {\n name: {\n type: 'string',\n description: 'The name of the department.'\n }\n }\n },\n first_name: {\n type: 'string',\n description: 'The legal first name of the individual.'\n },\n is_active: {\n type: 'boolean',\n description: '`true` if the individual is an active employee or contractor at the company.'\n },\n last_name: {\n type: 'string',\n description: 'The legal last name of the individual.'\n },\n manager: {\n type: 'object',\n description: 'The manager object.',\n properties: {\n id: {\n type: 'string',\n description: 'A stable Finch `id` (UUID v4) for an individual in the company.'\n }\n },\n required: [ 'id'\n ]\n },\n middle_name: {\n type: 'string',\n description: 'The legal middle name of the individual.'\n }\n },\n required: [ 'id',\n 'department',\n 'first_name',\n 'is_active',\n 'last_name',\n 'manager',\n 'middle_name'\n ]\n },\n paging: {\n type: 'object',\n title: 'Paging',\n properties: {\n offset: {\n type: 'integer',\n description: 'The current start index of the returned list of elements'\n },\n count: {\n type: 'integer',\n description: 'The total number of elements for the entire query (not just the given page)'\n }\n },\n required: [ 'offset'\n ]\n }\n }\n}\n```", - inputSchema: { - type: 'object', - properties: { - limit: { - type: 'integer', - description: 'Number of employees to return (defaults to all)', - }, - offset: { - type: 'integer', - description: 'Index to start from (defaults to 0)', - }, - jq_filter: { - type: 'string', - title: 'jq Filter', - description: - 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', - }, - }, - required: [], - }, - annotations: { - readOnlyHint: true, - }, -}; - -export const handler = async (client: Finch, args: Record | undefined) => { - const { jq_filter, ...body } = args as any; - const response = await client.hris.directory.listIndividuals(body).asResponse(); - return asTextContentResult(await maybeFilter(jq_filter, await response.json())); -}; - -export default { metadata, tool, handler }; diff --git a/packages/mcp-server/src/tools/index.ts b/packages/mcp-server/src/tools/index.ts index 80324ba0b..438763953 100644 --- a/packages/mcp-server/src/tools/index.ts +++ b/packages/mcp-server/src/tools/index.ts @@ -12,7 +12,6 @@ import update_pay_statement_item_company_hris_rules from './hris/company/pay-sta import list_pay_statement_item_company_hris_rules from './hris/company/pay-statement-item/rules/list-pay-statement-item-company-hris-rules'; import delete_pay_statement_item_company_hris_rules from './hris/company/pay-statement-item/rules/delete-pay-statement-item-company-hris-rules'; import list_hris_directory from './hris/directory/list-hris-directory'; -import list_individuals_hris_directory from './hris/directory/list-individuals-hris-directory'; import retrieve_many_hris_individuals from './hris/individuals/retrieve-many-hris-individuals'; import retrieve_many_hris_employments from './hris/employments/retrieve-many-hris-employments'; import list_hris_payments from './hris/payments/list-hris-payments'; @@ -66,7 +65,6 @@ addEndpoint(update_pay_statement_item_company_hris_rules); addEndpoint(list_pay_statement_item_company_hris_rules); addEndpoint(delete_pay_statement_item_company_hris_rules); addEndpoint(list_hris_directory); -addEndpoint(list_individuals_hris_directory); addEndpoint(retrieve_many_hris_individuals); addEndpoint(retrieve_many_hris_employments); addEndpoint(list_hris_payments); From 39cdb7601c55b6d723132edeb320c3898e697fa2 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 2 Sep 2025 17:51:13 +0000 Subject: [PATCH 05/51] feat(mcp): expose client options in `streamableHTTPApp` --- packages/mcp-server/src/http.ts | 58 ++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/packages/mcp-server/src/http.ts b/packages/mcp-server/src/http.ts index c11185b7b..ec34ab47d 100644 --- a/packages/mcp-server/src/http.ts +++ b/packages/mcp-server/src/http.ts @@ -6,14 +6,20 @@ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/ import express from 'express'; import { fromError } from 'zod-validation-error/v3'; import { McpOptions, parseQueryOptions } from './options'; -import { initMcpServer, newMcpServer } from './server'; +import { ClientOptions, initMcpServer, newMcpServer } from './server'; import { parseAuthHeaders } from './headers'; -const newServer = ( - defaultMcpOptions: McpOptions, - req: express.Request, - res: express.Response, -): McpServer | null => { +const newServer = ({ + clientOptions, + mcpOptions: defaultMcpOptions, + req, + res, +}: { + clientOptions: ClientOptions; + mcpOptions: McpOptions; + req: express.Request; + res: express.Response; +}): McpServer | null => { const server = newMcpServer(); let mcpOptions: McpOptions; @@ -35,10 +41,8 @@ const newServer = ( initMcpServer({ server: server, clientOptions: { + ...clientOptions, ...authOptions, - defaultHeaders: { - 'X-Stainless-MCP': 'true', - }, }, mcpOptions, }); @@ -56,17 +60,19 @@ const newServer = ( return server; }; -const post = (defaultOptions: McpOptions) => async (req: express.Request, res: express.Response) => { - const server = newServer(defaultOptions, req, res); - // If we return null, we already set the authorization error. - if (server === null) return; - const transport = new StreamableHTTPServerTransport({ - // Stateless server - sessionIdGenerator: undefined, - }); - await server.connect(transport); - await transport.handleRequest(req, res, req.body); -}; +const post = + (options: { clientOptions: ClientOptions; mcpOptions: McpOptions }) => + async (req: express.Request, res: express.Response) => { + const server = newServer({ ...options, req, res }); + // If we return null, we already set the authorization error. + if (server === null) return; + const transport = new StreamableHTTPServerTransport({ + // Stateless server + sessionIdGenerator: undefined, + }); + await server.connect(transport); + await transport.handleRequest(req, res, req.body); + }; const get = async (req: express.Request, res: express.Response) => { res.status(405).json({ @@ -88,20 +94,26 @@ const del = async (req: express.Request, res: express.Response) => { }); }; -export const streamableHTTPApp = (options: McpOptions): express.Express => { +export const streamableHTTPApp = ({ + clientOptions = {}, + mcpOptions = {}, +}: { + clientOptions?: ClientOptions; + mcpOptions?: McpOptions; +}): express.Express => { const app = express(); app.set('query parser', 'extended'); app.use(express.json()); app.get('/', get); - app.post('/', post(options)); + app.post('/', post({ clientOptions, mcpOptions })); app.delete('/', del); return app; }; export const launchStreamableHTTPServer = async (options: McpOptions, port: number | string | undefined) => { - const app = streamableHTTPApp(options); + const app = streamableHTTPApp({ mcpOptions: options }); const server = app.listen(port); const address = server.address(); From 8c380a8499435e8a92155664943e6fc631f7ba1a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 2 Sep 2025 23:42:57 +0000 Subject: [PATCH 06/51] fix(mcp): avoid importing unsupported libraries on non-node environments --- packages/mcp-server/src/code-tool.ts | 8 +++++--- packages/mcp-server/src/index.ts | 6 +++--- packages/mcp-server/src/server.ts | 14 +++++++------- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/packages/mcp-server/src/code-tool.ts b/packages/mcp-server/src/code-tool.ts index 29def9de7..8e5e5e2f9 100644 --- a/packages/mcp-server/src/code-tool.ts +++ b/packages/mcp-server/src/code-tool.ts @@ -7,9 +7,7 @@ import { Endpoint, ContentBlock, Metadata } from './tools/types'; import { Tool } from '@modelcontextprotocol/sdk/types.js'; -import { newDenoHTTPWorker } from '@valtown/deno-http-worker'; import { WorkerInput, WorkerError, WorkerSuccess } from './code-tool-types'; -import { workerPath } from './code-tool-paths.cjs'; /** * A tool that runs code against a copy of the SDK. @@ -20,7 +18,7 @@ import { workerPath } from './code-tool-paths.cjs'; * * @param endpoints - The endpoints to include in the list. */ -export function codeTool(): Endpoint { +export async function codeTool(): Promise { const metadata: Metadata = { resource: 'all', operation: 'write', tags: [] }; const tool: Tool = { name: 'execute', @@ -29,6 +27,10 @@ export function codeTool(): Endpoint { inputSchema: { type: 'object', properties: { code: { type: 'string' } } }, }; + // Import dynamically to avoid failing at import time in cases where the environment is not well-supported. + const { newDenoHTTPWorker } = await import('@valtown/deno-http-worker'); + const { workerPath } = await import('./code-tool-paths.cjs'); + const handler = async (client: Finch, args: unknown) => { const baseURLHostname = new URL(client.baseURL).hostname; const { code } = args as { code: string }; diff --git a/packages/mcp-server/src/index.ts b/packages/mcp-server/src/index.ts index c450e4bb4..4850a0e26 100644 --- a/packages/mcp-server/src/index.ts +++ b/packages/mcp-server/src/index.ts @@ -14,7 +14,7 @@ async function main() { return; } - const selectedTools = selectToolsOrError(endpoints, options); + const selectedTools = await selectToolsOrError(endpoints, options); console.error( `MCP Server starting with ${selectedTools.length} tools:`, @@ -47,9 +47,9 @@ function parseOptionsOrError() { } } -function selectToolsOrError(endpoints: Endpoint[], options: McpOptions): Endpoint[] { +async function selectToolsOrError(endpoints: Endpoint[], options: McpOptions): Promise { try { - const includedTools = selectTools(endpoints, options); + const includedTools = await selectTools(endpoints, options); if (includedTools.length === 0) { console.error('No tools match the provided filters.'); process.exit(1); diff --git a/packages/mcp-server/src/server.ts b/packages/mcp-server/src/server.ts index 79913bb3a..1077e6b48 100644 --- a/packages/mcp-server/src/server.ts +++ b/packages/mcp-server/src/server.ts @@ -55,7 +55,7 @@ export function initMcpServer(params: { let providedEndpoints: Endpoint[] | null = null; let endpointMap: Record | null = null; - const initTools = (implementation?: Implementation) => { + const initTools = async (implementation?: Implementation) => { if (implementation && (!mcpOptions.client || mcpOptions.client === 'infer')) { mcpOptions.client = implementation.name.toLowerCase().includes('claude') ? 'claude' @@ -66,8 +66,8 @@ export function initMcpServer(params: { ...mcpOptions.capabilities, }; } - providedEndpoints = selectTools(endpoints, mcpOptions); - endpointMap = Object.fromEntries(providedEndpoints.map((endpoint) => [endpoint.tool.name, endpoint])); + providedEndpoints ??= await selectTools(endpoints, mcpOptions); + endpointMap ??= Object.fromEntries(providedEndpoints.map((endpoint) => [endpoint.tool.name, endpoint])); }; const client = new Finch({ @@ -82,7 +82,7 @@ export function initMcpServer(params: { server.setRequestHandler(ListToolsRequestSchema, async () => { if (providedEndpoints === null) { - initTools(server.getClientVersion()); + await initTools(server.getClientVersion()); } return { tools: providedEndpoints!.map((endpoint) => endpoint.tool), @@ -91,7 +91,7 @@ export function initMcpServer(params: { server.setRequestHandler(CallToolRequestSchema, async (request) => { if (endpointMap === null) { - initTools(server.getClientVersion()); + await initTools(server.getClientVersion()); } const { name, arguments: args } = request.params; const endpoint = endpointMap![name]; @@ -106,7 +106,7 @@ export function initMcpServer(params: { /** * Selects the tools to include in the MCP Server based on the provided options. */ -export function selectTools(endpoints: Endpoint[], options?: McpOptions): Endpoint[] { +export async function selectTools(endpoints: Endpoint[], options?: McpOptions): Promise { const filteredEndpoints = query(options?.filters ?? [], endpoints); let includedTools = filteredEndpoints; @@ -121,7 +121,7 @@ export function selectTools(endpoints: Endpoint[], options?: McpOptions): Endpoi } else if (options?.includeDynamicTools) { includedTools = dynamicTools(endpoints); } else if (options?.includeCodeTools) { - includedTools = [codeTool()]; + includedTools = [await codeTool()]; } else { includedTools = endpoints; } From 4634f9a04f0fd3a7daa781876a1d93e170f1941d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 3 Sep 2025 01:02:29 +0000 Subject: [PATCH 07/51] feat(mcp): allow setting logging level --- packages/mcp-server/src/server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mcp-server/src/server.ts b/packages/mcp-server/src/server.ts index 1077e6b48..067fcda0a 100644 --- a/packages/mcp-server/src/server.ts +++ b/packages/mcp-server/src/server.ts @@ -5,8 +5,8 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { Endpoint, endpoints, HandlerFunction, query } from './tools'; import { CallToolRequestSchema, - Implementation, ListToolsRequestSchema, + Implementation, Tool, } from '@modelcontextprotocol/sdk/types.js'; import { ClientOptions } from '@tryfinch/finch-api'; From 45794fe7a8d09dd0160ac3d2a64941fff12837d5 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 4 Sep 2025 15:16:12 +0000 Subject: [PATCH 08/51] feat(mcp): add mcp bundles to build script --- .gitignore | 3 +- packages/mcp-server/build | 24 ++ packages/mcp-server/manifest.json | 67 ++++ packages/mcp-server/package.json | 1 + .../mcp-server/scripts/copy-bundle-files.cjs | 36 ++ packages/mcp-server/yarn.lock | 326 +++++++++++++++++- 6 files changed, 448 insertions(+), 9 deletions(-) create mode 100644 packages/mcp-server/manifest.json create mode 100644 packages/mcp-server/scripts/copy-bundle-files.cjs diff --git a/.gitignore b/.gitignore index d98d51a88..4b27d0fc4 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ dist dist-deno /*.tgz .idea/ - +dist-bundle +*.dxt diff --git a/packages/mcp-server/build b/packages/mcp-server/build index 7430081b7..915e86e7a 100644 --- a/packages/mcp-server/build +++ b/packages/mcp-server/build @@ -30,3 +30,27 @@ cp tsconfig.dist-src.json dist/src/tsconfig.json chmod +x dist/index.js DIST_PATH=./dist PKG_IMPORT_PATH=@tryfinch/finch-api-mcp/ node ../../scripts/utils/postprocess-files.cjs + +# mcp bundle +rm -rf dist-bundle tryfinch_finch_api_api.dxt; mkdir dist-bundle + +# copy package.json +PKG_JSON_PATH=../../packages/mcp-server/package.json node ../../scripts/utils/make-dist-package-json.cjs > dist-bundle/package.json + +# copy files +node scripts/copy-bundle-files.cjs + +# install runtime deps +cd dist-bundle +npm install +cd .. + +# pack bundle +cp manifest.json dist-bundle + +npx dxt pack dist-bundle tryfinch_finch_api_api.dxt + +npx dxt sign tryfinch_finch_api_api.dxt --self-signed + +# clean up +rm -rf dist-bundle diff --git a/packages/mcp-server/manifest.json b/packages/mcp-server/manifest.json new file mode 100644 index 000000000..bab14a3db --- /dev/null +++ b/packages/mcp-server/manifest.json @@ -0,0 +1,67 @@ +{ + "dxt_version": "0.1", + "name": "@tryfinch/finch-api-mcp", + "version": "6.37.0", + "description": "The official MCP Server for the Finch API", + "author": { + "name": "Finch", + "email": "founders@tryfinch.com" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/Finch-API/finch-api-node.git" + }, + "homepage": "https://github.com/Finch-API/finch-api-node/tree/main/packages/mcp-server#readme", + "documentation": "https://developer.tryfinch.com/", + "server": { + "type": "node", + "entry_point": "${"templates/TypeScriptSDK/mcp"}/index.js", + "mcp_config": { + "command": "node", + "args": [ + "${"templates/TypeScriptSDK/mcp"}/index.js" + ], + "env": { + "FINCH_ACCESS_TOKEN": "${user_config.FINCH_ACCESS_TOKEN}", + "FINCH_CLIENT_ID": "${user_config.FINCH_CLIENT_ID}", + "FINCH_CLIENT_SECRET": "${user_config.FINCH_CLIENT_SECRET}", + "FINCH_WEBHOOK_SECRET": "${user_config.FINCH_WEBHOOK_SECRET}" + } + } + }, + "user_config": { + "FINCH_ACCESS_TOKEN": { + "title": "access_token", + "description": "", + "required": false, + "type": "string" + }, + "FINCH_CLIENT_ID": { + "title": "client_id", + "description": "", + "required": false, + "type": "string" + }, + "FINCH_CLIENT_SECRET": { + "title": "client_secret", + "description": "", + "required": false, + "type": "string" + }, + "FINCH_WEBHOOK_SECRET": { + "title": "webhook_secret", + "description": "", + "required": false, + "type": "string" + } + }, + "tools_generated": true, + "compatibility": { + "runtimes": { + "node": ">=18.0.0" + } + }, + "keywords": [ + "api" + ] +} diff --git a/packages/mcp-server/package.json b/packages/mcp-server/package.json index 64744cdba..4444cbf70 100644 --- a/packages/mcp-server/package.json +++ b/packages/mcp-server/package.json @@ -47,6 +47,7 @@ "mcp-server": "dist/index.js" }, "devDependencies": { + "@anthropic-ai/dxt": "^0.2.6", "@types/cors": "^2.8.19", "@types/express": "^5.0.3", "@types/jest": "^29.4.0", diff --git a/packages/mcp-server/scripts/copy-bundle-files.cjs b/packages/mcp-server/scripts/copy-bundle-files.cjs new file mode 100644 index 000000000..08ba18122 --- /dev/null +++ b/packages/mcp-server/scripts/copy-bundle-files.cjs @@ -0,0 +1,36 @@ +const fs = require('fs'); +const path = require('path'); +const pkgJson = require('../dist-bundle/package.json'); + +const distDir = path.resolve(__dirname, '..', 'dist'); +const distBundleDir = path.resolve(__dirname, '..', 'dist-bundle'); +const distBundlePkgJson = path.join(distBundleDir, 'package.json'); + +async function* walk(dir) { + for await (const d of await fs.promises.opendir(dir)) { + const entry = path.join(dir, d.name); + if (d.isDirectory()) yield* walk(entry); + else if (d.isFile()) yield entry; + } +} + +async function copyFiles() { + // copy runtime files + for await (const file of walk(distDir)) { + if (!/[cm]?js$/.test(file)) continue; + const dest = path.join(distBundleDir, path.relative(distDir, file)); + await fs.promises.mkdir(path.dirname(dest), { recursive: true }); + await fs.promises.copyFile(file, dest); + } + + // replace package.json reference with local reference + for (const dep in pkgJson.dependencies) { + if (dep === '@tryfinch/finch-api') { + pkgJson.dependencies[dep] = 'file:../../../dist/'; + } + } + + await fs.promises.writeFile(distBundlePkgJson, JSON.stringify(pkgJson, null, 2)); +} + +copyFiles(); diff --git a/packages/mcp-server/yarn.lock b/packages/mcp-server/yarn.lock index 707a2de89..ad819835d 100644 --- a/packages/mcp-server/yarn.lock +++ b/packages/mcp-server/yarn.lock @@ -10,6 +10,20 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" +"@anthropic-ai/dxt@^0.2.6": + version "0.2.6" + resolved "https://registry.yarnpkg.com/@anthropic-ai/dxt/-/dxt-0.2.6.tgz#636197c3d083c9136ac3b5a11d2ba82477fdc2c6" + integrity sha512-5VSqKRpkytTYh5UJz9jOaI8zLXNCe4Gc+ArKGFV6IeWnEPP0Qnd0k+V3pO8cYzp92Puf/+Cgo0xc4haE0azTXg== + dependencies: + "@inquirer/prompts" "^6.0.1" + commander "^13.1.0" + fflate "^0.8.2" + galactus "^1.0.0" + ignore "^7.0.5" + node-forge "^1.3.1" + pretty-bytes "^5.6.0" + zod "^3.25.67" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" @@ -336,6 +350,144 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== +"@inquirer/checkbox@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-3.0.1.tgz#0a57f704265f78c36e17f07e421b98efb4b9867b" + integrity sha512-0hm2nrToWUdD6/UHnel/UKGdk1//ke5zGUpHIvk5ZWmaKezlGxZkOJXNSWsdxO/rEqTkbB3lNC2J6nBElV2aAQ== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/figures" "^1.0.6" + "@inquirer/type" "^2.0.0" + ansi-escapes "^4.3.2" + yoctocolors-cjs "^2.1.2" + +"@inquirer/confirm@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-4.0.1.tgz#9106d6bffa0b2fdd0e4f60319b6f04f2e06e6e25" + integrity sha512-46yL28o2NJ9doViqOy0VDcoTzng7rAb6yPQKU7VDLqkmbCaH4JqK4yk4XqlzNWy9PVC5pG1ZUXPBQv+VqnYs2w== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" + +"@inquirer/core@^9.2.1": + version "9.2.1" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-9.2.1.tgz#677c49dee399c9063f31e0c93f0f37bddc67add1" + integrity sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg== + dependencies: + "@inquirer/figures" "^1.0.6" + "@inquirer/type" "^2.0.0" + "@types/mute-stream" "^0.0.4" + "@types/node" "^22.5.5" + "@types/wrap-ansi" "^3.0.0" + ansi-escapes "^4.3.2" + cli-width "^4.1.0" + mute-stream "^1.0.0" + signal-exit "^4.1.0" + strip-ansi "^6.0.1" + wrap-ansi "^6.2.0" + yoctocolors-cjs "^2.1.2" + +"@inquirer/editor@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-3.0.1.tgz#d109f21e050af6b960725388cb1c04214ed7c7bc" + integrity sha512-VA96GPFaSOVudjKFraokEEmUQg/Lub6OXvbIEZU1SDCmBzRkHGhxoFAVaF30nyiB4m5cEbDgiI2QRacXZ2hw9Q== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" + external-editor "^3.1.0" + +"@inquirer/expand@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-3.0.1.tgz#aed9183cac4d12811be47a4a895ea8e82a17e22c" + integrity sha512-ToG8d6RIbnVpbdPdiN7BCxZGiHOTomOX94C2FaT5KOHupV40tKEDozp12res6cMIfRKrXLJyexAZhWVHgbALSQ== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" + yoctocolors-cjs "^2.1.2" + +"@inquirer/figures@^1.0.6": + version "1.0.13" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.13.tgz#ad0afd62baab1c23175115a9b62f511b6a751e45" + integrity sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw== + +"@inquirer/input@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-3.0.1.tgz#de63d49e516487388508d42049deb70f2cb5f28e" + integrity sha512-BDuPBmpvi8eMCxqC5iacloWqv+5tQSJlUafYWUe31ow1BVXjW2a5qe3dh4X/Z25Wp22RwvcaLCc2siHobEOfzg== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" + +"@inquirer/number@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-2.0.1.tgz#b9863080d02ab7dc2e56e16433d83abea0f2a980" + integrity sha512-QpR8jPhRjSmlr/mD2cw3IR8HRO7lSVOnqUvQa8scv1Lsr3xoAMMworcYW3J13z3ppjBFBD2ef1Ci6AE5Qn8goQ== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" + +"@inquirer/password@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-3.0.1.tgz#2a9a9143591088336bbd573bcb05d5bf080dbf87" + integrity sha512-haoeEPUisD1NeE2IanLOiFr4wcTXGWrBOyAyPZi1FfLJuXOzNmxCJPgUrGYKVh+Y8hfGJenIfz5Wb/DkE9KkMQ== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" + ansi-escapes "^4.3.2" + +"@inquirer/prompts@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-6.0.1.tgz#43f5c0ed35c5ebfe52f1d43d46da2d363d950071" + integrity sha512-yl43JD/86CIj3Mz5mvvLJqAOfIup7ncxfJ0Btnl0/v5TouVUyeEdcpknfgc+yMevS/48oH9WAkkw93m7otLb/A== + dependencies: + "@inquirer/checkbox" "^3.0.1" + "@inquirer/confirm" "^4.0.1" + "@inquirer/editor" "^3.0.1" + "@inquirer/expand" "^3.0.1" + "@inquirer/input" "^3.0.1" + "@inquirer/number" "^2.0.1" + "@inquirer/password" "^3.0.1" + "@inquirer/rawlist" "^3.0.1" + "@inquirer/search" "^2.0.1" + "@inquirer/select" "^3.0.1" + +"@inquirer/rawlist@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-3.0.1.tgz#729def358419cc929045f264131878ed379e0af3" + integrity sha512-VgRtFIwZInUzTiPLSfDXK5jLrnpkuSOh1ctfaoygKAdPqjcjKYmGh6sCY1pb0aGnCGsmhUxoqLDUAU0ud+lGXQ== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" + yoctocolors-cjs "^2.1.2" + +"@inquirer/search@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-2.0.1.tgz#69b774a0a826de2e27b48981d01bc5ad81e73721" + integrity sha512-r5hBKZk3g5MkIzLVoSgE4evypGqtOannnB3PKTG9NRZxyFRKcfzrdxXXPcoJQsxJPzvdSU2Rn7pB7lw0GCmGAg== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/figures" "^1.0.6" + "@inquirer/type" "^2.0.0" + yoctocolors-cjs "^2.1.2" + +"@inquirer/select@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-3.0.1.tgz#1df9ed27fb85a5f526d559ac5ce7cc4e9dc4e7ec" + integrity sha512-lUDGUxPhdWMkN/fHy1Lk7pF3nK1fh/gqeyWXmctefhxLYxlDsc7vsPBEpxrfVGDsVdyYJsiJoD4bJ1b623cV1Q== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/figures" "^1.0.6" + "@inquirer/type" "^2.0.0" + ansi-escapes "^4.3.2" + yoctocolors-cjs "^2.1.2" + +"@inquirer/type@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-2.0.0.tgz#08fa513dca2cb6264fe1b0a2fabade051444e3f6" + integrity sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag== + dependencies: + mute-stream "^1.0.0" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -725,6 +877,13 @@ dependencies: "@types/node" "*" +"@types/cors@^2.8.19": + version "2.8.19" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.19.tgz#d93ea2673fd8c9f697367f5eeefc2bbfa94f0342" + integrity sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg== + dependencies: + "@types/node" "*" + "@types/express-serve-static-core@^5.0.0": version "5.0.7" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz#2fa94879c9d46b11a5df4c74ac75befd6b283de6" @@ -788,6 +947,13 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== +"@types/mute-stream@^0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@types/mute-stream/-/mute-stream-0.0.4.tgz#77208e56a08767af6c5e1237be8888e2f255c478" + integrity sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow== + dependencies: + "@types/node" "*" + "@types/node@*": version "22.15.17" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.15.17.tgz#355ccec95f705b664e4332bb64a7f07db30b7055" @@ -795,7 +961,14 @@ dependencies: undici-types "~6.21.0" -"@types/qs@*": +"@types/node@^22.5.5": + version "22.18.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.18.0.tgz#9e4709be4f104e3568f7dd1c71e2949bf147a47b" + integrity sha512-m5ObIqwsUp6BZzyiy4RdZpzWGub9bqLJMvZDD0QMXhxjqMHMENlj+SqF5QxoUwaQNFe+8kz8XM8ZQhqkQPTgMQ== + dependencies: + undici-types "~6.21.0" + +"@types/qs@*", "@types/qs@^6.14.0": version "6.14.0" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.14.0.tgz#d8b60cecf62f2db0fb68e5e006077b9178b85de5" integrity sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ== @@ -827,6 +1000,11 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== +"@types/wrap-ansi@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz#18b97a972f94f60a679fd5c796d96421b9abb9fd" + integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g== + "@types/yargs-parser@*": version "21.0.3" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" @@ -925,6 +1103,11 @@ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== +"@valtown/deno-http-worker@^0.0.21": + version "0.0.21" + resolved "https://registry.yarnpkg.com/@valtown/deno-http-worker/-/deno-http-worker-0.0.21.tgz#9ce3b5c1d0db211fe7ea8297881fe551838474ad" + integrity sha512-16kFuUykann75lNytnXXIQlmpzreZjzdyT27ebT3yNGCS3kKaS1iZYWHc3Si9An54Cphwr4qEcviChQkEeJBlA== + accepts@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/accepts/-/accepts-2.0.0.tgz#bbcf4ba5075467f3f2131eab3cffc73c2f5d7895" @@ -968,7 +1151,7 @@ ajv@^6.12.4, ajv@^6.12.6: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-escapes@^4.2.1: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -1210,6 +1393,11 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + ci-info@^3.2.0: version "3.9.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" @@ -1225,6 +1413,11 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== + cliui@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" @@ -1261,6 +1454,11 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +commander@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-13.1.0.tgz#776167db68c78f38dcce1f9b8d7b8b9a488abf46" + integrity sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1673,6 +1871,15 @@ express@^5.0.1, express@^5.1.0: type-is "^2.0.1" vary "^1.1.2" +external-editor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -1718,6 +1925,11 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +fflate@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" + integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -1781,6 +1993,14 @@ flatted@^3.2.9: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== +flora-colossus@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/flora-colossus/-/flora-colossus-2.0.0.tgz#af1e85db0a8256ef05f3fb531c1235236c97220a" + integrity sha512-dz4HxH6pOvbUzZpZ/yXhafjbR2I8cenK5xL0KtBFb7U2ADsR+OwXifnxZjij/pZWF775uSCMzWVd+jDik2H2IA== + dependencies: + debug "^4.3.4" + fs-extra "^10.1.0" + forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -1791,6 +2011,15 @@ fresh@^2.0.0: resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4" integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -1806,6 +2035,15 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== +galactus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/galactus/-/galactus-1.0.0.tgz#c2615182afa0c6d0859b92e56ae36d052827db7e" + integrity sha512-R1fam6D4CyKQGNlvJne4dkNF+PvUUl7TAJInvTGa9fti9qAv95quQz29GXapA4d8Ec266mJJxFVh82M4GIIGDQ== + dependencies: + debug "^4.3.4" + flora-colossus "^2.0.0" + fs-extra "^10.1.0" + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -1898,7 +2136,7 @@ gopd@^1.2.0: resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.2.9: +graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -1953,11 +2191,23 @@ iconv-lite@0.6.3, iconv-lite@^0.6.3: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + ignore@^5.2.0, ignore@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== +ignore@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" + integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== + import-fresh@^3.2.1: version "3.3.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" @@ -2536,6 +2786,15 @@ json5@^2.2.2, json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== +jsonfile@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62" + integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + keyv@^4.5.3: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" @@ -2709,6 +2968,11 @@ ms@^2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +mute-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -2719,6 +2983,11 @@ negotiator@^1.0.0: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a" integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== +node-forge@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -2784,6 +3053,11 @@ optionator@^0.9.3: type-check "^0.4.0" word-wrap "^1.2.5" +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + p-all@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-all/-/p-all-3.0.0.tgz#077c023c37e75e760193badab2bad3ccd5782bfb" @@ -2927,6 +3201,11 @@ prettier@^3.0.0: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.5.3.tgz#4fc2ce0d657e7a02e602549f053b239cb7dfe1b5" integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw== +pretty-bytes@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" @@ -3074,7 +3353,7 @@ safe-buffer@5.2.1, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -"safer-buffer@>= 2.1.2 < 3.0.0": +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -3178,6 +3457,11 @@ signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -3322,6 +3606,13 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -3387,9 +3678,9 @@ ts-node@^10.5.0: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -"tsc-multi@https://github.com/stainless-api/tsc-multi/releases/download/v1.1.8/tsc-multi.tgz": - version "1.1.8" - resolved "https://github.com/stainless-api/tsc-multi/releases/download/v1.1.8/tsc-multi.tgz#f544b359b8f05e607771ffacc280e58201476b04" +"tsc-multi@https://github.com/stainless-api/tsc-multi/releases/download/v1.1.9/tsc-multi.tgz": + version "1.1.9" + resolved "https://github.com/stainless-api/tsc-multi/releases/download/v1.1.9/tsc-multi.tgz#777f6f5d9e26bf0e94e5170990dd3a841d6707cd" dependencies: debug "^4.3.7" fast-glob "^3.3.2" @@ -3462,6 +3753,11 @@ undici-types@~6.21.0: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -3525,6 +3821,15 @@ word-wrap@^1.2.5: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -3585,6 +3890,11 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +yoctocolors-cjs@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz#7e4964ea8ec422b7a40ac917d3a344cfd2304baa" + integrity sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw== + zod-to-json-schema@^3.24.1, zod-to-json-schema@^3.24.5: version "3.24.5" resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz#d1095440b147fb7c2093812a53c54df8d5df50a3" @@ -3600,7 +3910,7 @@ zod@^3.23.8: resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.4.tgz#e2e2cca5faaa012d76e527d0d36622e0a90c315f" integrity sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg== -zod@^3.25.20: +zod@^3.25.20, zod@^3.25.67: version "3.25.76" resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.76.tgz#26841c3f6fd22a6a2760e7ccb719179768471e34" integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ== From 697d211b9600d388aa101879ac6c400e4eb4ac53 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 4 Sep 2025 22:00:54 +0000 Subject: [PATCH 09/51] chore(internal): codegen related update --- packages/mcp-server/manifest.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mcp-server/manifest.json b/packages/mcp-server/manifest.json index bab14a3db..602ece98c 100644 --- a/packages/mcp-server/manifest.json +++ b/packages/mcp-server/manifest.json @@ -15,11 +15,11 @@ "documentation": "https://developer.tryfinch.com/", "server": { "type": "node", - "entry_point": "${"templates/TypeScriptSDK/mcp"}/index.js", + "entry_point": "${__dirname}/index.js", "mcp_config": { "command": "node", "args": [ - "${"templates/TypeScriptSDK/mcp"}/index.js" + "${__dirname}/index.js" ], "env": { "FINCH_ACCESS_TOKEN": "${user_config.FINCH_ACCESS_TOKEN}", From f0c3633571f7eea46803cb75ba244c41cac5a7b4 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 5 Sep 2025 17:55:40 +0000 Subject: [PATCH 10/51] chore: ci build action --- .github/workflows/ci.yml | 2 +- scripts/utils/upload-artifact.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8baf2b90b..f1ca7188f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -75,7 +75,7 @@ jobs: URL: https://pkg.stainless.com/s?subpackage=mcp-server AUTH: ${{ steps.github-oidc.outputs.github_token }} SHA: ${{ github.sha }} - BUILD_PATH: packages/mcp-server/dist + BASE_PATH: packages/mcp-server run: ./scripts/utils/upload-artifact.sh test: timeout-minutes: 10 diff --git a/scripts/utils/upload-artifact.sh b/scripts/utils/upload-artifact.sh index 86592f947..7e2b4502d 100755 --- a/scripts/utils/upload-artifact.sh +++ b/scripts/utils/upload-artifact.sh @@ -12,7 +12,7 @@ if [[ "$SIGNED_URL" == "null" ]]; then exit 1 fi -UPLOAD_RESPONSE=$(tar -cz "${BUILD_PATH:-dist}" | curl -v -X PUT \ +UPLOAD_RESPONSE=$(tar "${BASE_PATH:+-C$BASE_PATH}" -cz "${ARTIFACT_PATH:-dist}" | curl -v -X PUT \ -H "Content-Type: application/gzip" \ --data-binary @- "$SIGNED_URL" 2>&1) From 90877607933fa892f5d05c8931fa2de9d139e769 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 5 Sep 2025 20:03:56 +0000 Subject: [PATCH 11/51] fix(mcp): fix query options parsing --- packages/mcp-server/src/options.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mcp-server/src/options.ts b/packages/mcp-server/src/options.ts index 2100cf58d..ecc9f10e1 100644 --- a/packages/mcp-server/src/options.ts +++ b/packages/mcp-server/src/options.ts @@ -367,12 +367,12 @@ export function parseQueryOptions(defaultOptions: McpOptions, query: unknown): M } let dynamicTools: boolean | undefined = - queryOptions.no_tools && !queryOptions.no_tools?.includes('dynamic') ? false + queryOptions.no_tools && queryOptions.no_tools?.includes('dynamic') ? false : queryOptions.tools?.includes('dynamic') ? true : defaultOptions.includeDynamicTools; let allTools: boolean | undefined = - queryOptions.no_tools && !queryOptions.no_tools?.includes('all') ? false + queryOptions.no_tools && queryOptions.no_tools?.includes('all') ? false : queryOptions.tools?.includes('all') ? true : defaultOptions.includeAllTools; From aa135f5fdfe89359b6ad8c49b1908e7faee4ebaa Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 8 Sep 2025 18:40:38 +0000 Subject: [PATCH 12/51] fix: coerce nullable values to undefined --- src/core.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core.ts b/src/core.ts index bae4c2068..4eebc18a5 100644 --- a/src/core.ts +++ b/src/core.ts @@ -1087,21 +1087,21 @@ export const coerceBoolean = (value: unknown): boolean => { }; export const maybeCoerceInteger = (value: unknown): number | undefined => { - if (value === undefined) { + if (value == null) { return undefined; } return coerceInteger(value); }; export const maybeCoerceFloat = (value: unknown): number | undefined => { - if (value === undefined) { + if (value == null) { return undefined; } return coerceFloat(value); }; export const maybeCoerceBoolean = (value: unknown): boolean | undefined => { - if (value === undefined) { + if (value == null) { return undefined; } return coerceBoolean(value); From 9bc9a38df44189e734248cf7ad06259f93e25b82 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 8 Sep 2025 18:58:12 +0000 Subject: [PATCH 13/51] feat(api): api update --- .stats.yml | 4 +- src/resources/hris/pay-statements.ts | 72 ++++++++++------------------ 2 files changed, 26 insertions(+), 50 deletions(-) diff --git a/.stats.yml b/.stats.yml index ff867f705..781f7a67e 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-bf86910e96e83e583689cf5d1a5c583268754026ec68288994fa6a969dc248f2.yml -openapi_spec_hash: 195038e056891afec204c49dadce3b95 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-edbdcdf654a3ab8c23745e1d115fc8b54908eb913571d70f1145a0b6a45cc811.yml +openapi_spec_hash: 1b21e4bfc46daeef1613e410e5aa8f28 config_hash: 5146b12344dae76238940989dac1e8a0 diff --git a/src/resources/hris/pay-statements.ts b/src/resources/hris/pay-statements.ts index 2a7af53ed..f9eb2090d 100644 --- a/src/resources/hris/pay-statements.ts +++ b/src/resources/hris/pay-statements.ts @@ -133,18 +133,12 @@ export namespace PayStatement { export namespace Earning { export interface Attributes { - metadata: Attributes.Metadata; - } - - export namespace Attributes { - export interface Metadata { - /** - * The metadata to be attached to the entity by existing rules. It is a key-value - * pairs where the values can be of any type (string, number, boolean, object, - * array, etc.). - */ - metadata: { [key: string]: unknown }; - } + /** + * The metadata to be attached to the entity by existing rules. It is a key-value + * pairs where the values can be of any type (string, number, boolean, object, + * array, etc.). + */ + metadata: { [key: string]: unknown }; } } @@ -179,18 +173,12 @@ export namespace PayStatement { export namespace EmployeeDeduction { export interface Attributes { - metadata: Attributes.Metadata; - } - - export namespace Attributes { - export interface Metadata { - /** - * The metadata to be attached to the entity by existing rules. It is a key-value - * pairs where the values can be of any type (string, number, boolean, object, - * array, etc.). - */ - metadata: { [key: string]: unknown }; - } + /** + * The metadata to be attached to the entity by existing rules. It is a key-value + * pairs where the values can be of any type (string, number, boolean, object, + * array, etc.). + */ + metadata: { [key: string]: unknown }; } } @@ -220,18 +208,12 @@ export namespace PayStatement { export namespace EmployerContribution { export interface Attributes { - metadata: Attributes.Metadata; - } - - export namespace Attributes { - export interface Metadata { - /** - * The metadata to be attached to the entity by existing rules. It is a key-value - * pairs where the values can be of any type (string, number, boolean, object, - * array, etc.). - */ - metadata: { [key: string]: unknown }; - } + /** + * The metadata to be attached to the entity by existing rules. It is a key-value + * pairs where the values can be of any type (string, number, boolean, object, + * array, etc.). + */ + metadata: { [key: string]: unknown }; } } @@ -266,18 +248,12 @@ export namespace PayStatement { export namespace Tax { export interface Attributes { - metadata: Attributes.Metadata; - } - - export namespace Attributes { - export interface Metadata { - /** - * The metadata to be attached to the entity by existing rules. It is a key-value - * pairs where the values can be of any type (string, number, boolean, object, - * array, etc.). - */ - metadata: { [key: string]: unknown }; - } + /** + * The metadata to be attached to the entity by existing rules. It is a key-value + * pairs where the values can be of any type (string, number, boolean, object, + * array, etc.). + */ + metadata: { [key: string]: unknown }; } } } From d67f867f1b3c9e4886d21da21a1cccab5760aa9d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 8 Sep 2025 20:59:10 +0000 Subject: [PATCH 14/51] feat(api): make client id, client secret optional again --- .stats.yml | 4 ++-- .../src/tools/access-tokens/create-access-tokens.ts | 10 +++++----- src/resources/access-tokens.ts | 12 ++++++------ tests/api-resources/access-tokens.test.ts | 8 ++------ 4 files changed, 15 insertions(+), 19 deletions(-) diff --git a/.stats.yml b/.stats.yml index 781f7a67e..496cf9a04 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-edbdcdf654a3ab8c23745e1d115fc8b54908eb913571d70f1145a0b6a45cc811.yml +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-bb50c0ae41ff5036adf72344d33057941f6de67c5fae811eba2e758bfa4ffd31.yml openapi_spec_hash: 1b21e4bfc46daeef1613e410e5aa8f28 -config_hash: 5146b12344dae76238940989dac1e8a0 +config_hash: 6d3585c0032e08d723d077d660fc8448 diff --git a/packages/mcp-server/src/tools/access-tokens/create-access-tokens.ts b/packages/mcp-server/src/tools/access-tokens/create-access-tokens.ts index ab9650371..3dd1cd4a9 100644 --- a/packages/mcp-server/src/tools/access-tokens/create-access-tokens.ts +++ b/packages/mcp-server/src/tools/access-tokens/create-access-tokens.ts @@ -22,6 +22,10 @@ export const tool: Tool = { inputSchema: { type: 'object', properties: { + code: { + type: 'string', + description: 'The authorization code received from the authorization server', + }, client_id: { type: 'string', description: 'The client ID for your application', @@ -30,10 +34,6 @@ export const tool: Tool = { type: 'string', description: 'The client secret for your application', }, - code: { - type: 'string', - description: 'The authorization code received from the authorization server', - }, redirect_uri: { type: 'string', description: 'The redirect URI used in the authorization request (optional)', @@ -45,7 +45,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['client_id', 'client_secret', 'code'], + required: ['code'], }, annotations: {}, }; diff --git a/src/resources/access-tokens.ts b/src/resources/access-tokens.ts index e6daab6ac..770a0c3d5 100644 --- a/src/resources/access-tokens.ts +++ b/src/resources/access-tokens.ts @@ -98,19 +98,19 @@ export interface CreateAccessTokenResponse { export interface AccessTokenCreateParams { /** - * The client ID for your application + * The authorization code received from the authorization server */ - client_id: string; + code: string; /** - * The client secret for your application + * The client ID for your application */ - client_secret: string; + client_id?: string; /** - * The authorization code received from the authorization server + * The client secret for your application */ - code: string; + client_secret?: string; /** * The redirect URI used in the authorization request (optional) diff --git a/tests/api-resources/access-tokens.test.ts b/tests/api-resources/access-tokens.test.ts index b268d5540..fe0433de7 100644 --- a/tests/api-resources/access-tokens.test.ts +++ b/tests/api-resources/access-tokens.test.ts @@ -12,11 +12,7 @@ const client = new Finch({ describe('resource accessTokens', () => { test('create: only required params', async () => { - const responsePromise = client.accessTokens.create({ - client_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', - client_secret: 'client_secret', - code: 'code', - }); + const responsePromise = client.accessTokens.create({ code: 'code' }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -28,9 +24,9 @@ describe('resource accessTokens', () => { test('create: required and optional params', async () => { const response = await client.accessTokens.create({ + code: 'code', client_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', client_secret: 'client_secret', - code: 'code', redirect_uri: 'redirect_uri', }); }); From 256c717c7eb0bd947322b14d85fc15cd7f919724 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 9 Sep 2025 19:30:16 +0000 Subject: [PATCH 15/51] chore(mcp): upload dxt as release asset --- .github/workflows/publish-npm.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/publish-npm.yml b/.github/workflows/publish-npm.yml index 63f1d2ed4..52e9dc3e5 100644 --- a/.github/workflows/publish-npm.yml +++ b/.github/workflows/publish-npm.yml @@ -39,3 +39,6 @@ jobs: yarn tsn scripts/publish-packages.ts "{ \"paths_released\": \"$PATHS_RELEASED\" }" env: NPM_TOKEN: ${{ secrets.FINCH_NPM_TOKEN || secrets.NPM_TOKEN }} + + - name: Upload MCP Server DXT GitHub release asset + run: gh release upload packages/mcp-server/tryfinch_finch_api_api.dxt From 70f9a36f47190f4b78de043e63d65e21df6ce116 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 11 Sep 2025 17:45:53 +0000 Subject: [PATCH 16/51] fix(mcp): fix uploading dxt release assets --- .github/workflows/publish-npm.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish-npm.yml b/.github/workflows/publish-npm.yml index 52e9dc3e5..62228ae23 100644 --- a/.github/workflows/publish-npm.yml +++ b/.github/workflows/publish-npm.yml @@ -41,4 +41,6 @@ jobs: NPM_TOKEN: ${{ secrets.FINCH_NPM_TOKEN || secrets.NPM_TOKEN }} - name: Upload MCP Server DXT GitHub release asset - run: gh release upload packages/mcp-server/tryfinch_finch_api_api.dxt + run: | + gh release upload ${{ github.event.release.tag_name }} \ + packages/mcp-server/tryfinch_finch_api_api.dxt From 6a6dd0af7e290990c7773447615e3e5d99ff217b Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 16 Sep 2025 15:37:12 +0000 Subject: [PATCH 17/51] fix(ci): set permissions for DXT publish action --- .github/workflows/publish-npm.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/publish-npm.yml b/.github/workflows/publish-npm.yml index 62228ae23..243689e0f 100644 --- a/.github/workflows/publish-npm.yml +++ b/.github/workflows/publish-npm.yml @@ -16,6 +16,8 @@ jobs: publish: name: publish runs-on: ubuntu-latest + permissions: + contents: write steps: - uses: actions/checkout@v4 @@ -44,3 +46,5 @@ jobs: run: | gh release upload ${{ github.event.release.tag_name }} \ packages/mcp-server/tryfinch_finch_api_api.dxt + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 68a9c079dfb35ab661f58780405036399fbaf31e Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 18 Sep 2025 01:17:33 +0000 Subject: [PATCH 18/51] chore(mcp): rename dxt to mcpb --- .github/workflows/publish-npm.yml | 2 +- packages/mcp-server/build | 6 +++--- packages/mcp-server/manifest.json | 5 +++-- packages/mcp-server/package.json | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/publish-npm.yml b/.github/workflows/publish-npm.yml index 243689e0f..459a68590 100644 --- a/.github/workflows/publish-npm.yml +++ b/.github/workflows/publish-npm.yml @@ -45,6 +45,6 @@ jobs: - name: Upload MCP Server DXT GitHub release asset run: | gh release upload ${{ github.event.release.tag_name }} \ - packages/mcp-server/tryfinch_finch_api_api.dxt + packages/mcp-server/tryfinch_finch_api_api.mcpb env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/packages/mcp-server/build b/packages/mcp-server/build index 915e86e7a..0bc3f3586 100644 --- a/packages/mcp-server/build +++ b/packages/mcp-server/build @@ -32,7 +32,7 @@ chmod +x dist/index.js DIST_PATH=./dist PKG_IMPORT_PATH=@tryfinch/finch-api-mcp/ node ../../scripts/utils/postprocess-files.cjs # mcp bundle -rm -rf dist-bundle tryfinch_finch_api_api.dxt; mkdir dist-bundle +rm -rf dist-bundle tryfinch_finch_api_api.mcpb; mkdir dist-bundle # copy package.json PKG_JSON_PATH=../../packages/mcp-server/package.json node ../../scripts/utils/make-dist-package-json.cjs > dist-bundle/package.json @@ -48,9 +48,9 @@ cd .. # pack bundle cp manifest.json dist-bundle -npx dxt pack dist-bundle tryfinch_finch_api_api.dxt +npx mcpb pack dist-bundle tryfinch_finch_api_api.mcpb -npx dxt sign tryfinch_finch_api_api.dxt --self-signed +npx mcpb sign tryfinch_finch_api_api.mcpb --self-signed # clean up rm -rf dist-bundle diff --git a/packages/mcp-server/manifest.json b/packages/mcp-server/manifest.json index 602ece98c..04fd27e39 100644 --- a/packages/mcp-server/manifest.json +++ b/packages/mcp-server/manifest.json @@ -1,5 +1,5 @@ { - "dxt_version": "0.1", + "dxt_version": "0.2", "name": "@tryfinch/finch-api-mcp", "version": "6.37.0", "description": "The official MCP Server for the Finch API", @@ -15,7 +15,7 @@ "documentation": "https://developer.tryfinch.com/", "server": { "type": "node", - "entry_point": "${__dirname}/index.js", + "entry_point": "index.js", "mcp_config": { "command": "node", "args": [ @@ -55,6 +55,7 @@ "type": "string" } }, + "tools": [], "tools_generated": true, "compatibility": { "runtimes": { diff --git a/packages/mcp-server/package.json b/packages/mcp-server/package.json index 4444cbf70..a09f0a7bd 100644 --- a/packages/mcp-server/package.json +++ b/packages/mcp-server/package.json @@ -47,7 +47,7 @@ "mcp-server": "dist/index.js" }, "devDependencies": { - "@anthropic-ai/dxt": "^0.2.6", + "@anthropic-ai/mcpb": "^1.1.0", "@types/cors": "^2.8.19", "@types/express": "^5.0.3", "@types/jest": "^29.4.0", From 73c778e3b9d157f8296c43131cd0db764d5086bc Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 18 Sep 2025 03:09:46 +0000 Subject: [PATCH 19/51] chore(internal): gitignore .mcpb files --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 4b27d0fc4..74cba8957 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,4 @@ dist-deno /*.tgz .idea/ dist-bundle -*.dxt +*.mcpb From a9e866662d47e0f39a1988339101d46ba149fb9d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 18 Sep 2025 21:20:20 +0000 Subject: [PATCH 20/51] feat(mcp): add docs search tool --- packages/mcp-server/src/docs-search-tool.ts | 45 +++++++++++++++++++++ packages/mcp-server/src/server.ts | 3 +- 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 packages/mcp-server/src/docs-search-tool.ts diff --git a/packages/mcp-server/src/docs-search-tool.ts b/packages/mcp-server/src/docs-search-tool.ts new file mode 100644 index 000000000..23bbe1093 --- /dev/null +++ b/packages/mcp-server/src/docs-search-tool.ts @@ -0,0 +1,45 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { Metadata, asTextContentResult } from './tools/types'; + +import { Tool } from '@modelcontextprotocol/sdk/types.js'; + +export const metadata: Metadata = { + resource: 'all', + operation: 'read', + tags: [], + httpMethod: 'get', +}; + +export const tool: Tool = { + name: 'search_docs', + description: + 'Search for documentation for how to use the client to interact with the API.\nThe tool will return an array of Markdown-formatted documentation pages.', + inputSchema: { + type: 'object', + properties: { + query: { + type: 'string', + description: 'The query to search for.', + }, + language: { + type: 'string', + description: 'The language for the SDK to search for.', + enum: ['http', 'python', 'go', 'typescript', 'terraform', 'ruby', 'java', 'kotlin'], + }, + }, + required: ['query', 'language'], + }, + annotations: { + readOnlyHint: true, + }, +}; + +export const handler = async (_: unknown, args: Record | undefined) => { + const body = args as any; + const query = new URLSearchParams(body).toString(); + const result = await fetch('https://api.stainless.com/api/projects/finch/finch/docs/search?' + query); + return asTextContentResult(await result.json()); +}; + +export default { metadata, tool, handler }; diff --git a/packages/mcp-server/src/server.ts b/packages/mcp-server/src/server.ts index 067fcda0a..1263b340d 100644 --- a/packages/mcp-server/src/server.ts +++ b/packages/mcp-server/src/server.ts @@ -20,6 +20,7 @@ import { } from './compat'; import { dynamicTools } from './dynamic-tools'; import { codeTool } from './code-tool'; +import docsSearchTool from './docs-search-tool'; import { McpOptions } from './options'; export { McpOptions } from './options'; @@ -121,7 +122,7 @@ export async function selectTools(endpoints: Endpoint[], options?: McpOptions): } else if (options?.includeDynamicTools) { includedTools = dynamicTools(endpoints); } else if (options?.includeCodeTools) { - includedTools = [await codeTool()]; + includedTools = [await codeTool(), docsSearchTool]; } else { includedTools = endpoints; } From 27ec1f5a8d71f31a327021745f7dab0aeebc4b7b Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 18 Sep 2025 22:45:52 +0000 Subject: [PATCH 21/51] chore(codegen): internal codegen update --- packages/mcp-server/src/docs-search-tool.ts | 45 --------------------- packages/mcp-server/src/server.ts | 3 +- 2 files changed, 1 insertion(+), 47 deletions(-) delete mode 100644 packages/mcp-server/src/docs-search-tool.ts diff --git a/packages/mcp-server/src/docs-search-tool.ts b/packages/mcp-server/src/docs-search-tool.ts deleted file mode 100644 index 23bbe1093..000000000 --- a/packages/mcp-server/src/docs-search-tool.ts +++ /dev/null @@ -1,45 +0,0 @@ -// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -import { Metadata, asTextContentResult } from './tools/types'; - -import { Tool } from '@modelcontextprotocol/sdk/types.js'; - -export const metadata: Metadata = { - resource: 'all', - operation: 'read', - tags: [], - httpMethod: 'get', -}; - -export const tool: Tool = { - name: 'search_docs', - description: - 'Search for documentation for how to use the client to interact with the API.\nThe tool will return an array of Markdown-formatted documentation pages.', - inputSchema: { - type: 'object', - properties: { - query: { - type: 'string', - description: 'The query to search for.', - }, - language: { - type: 'string', - description: 'The language for the SDK to search for.', - enum: ['http', 'python', 'go', 'typescript', 'terraform', 'ruby', 'java', 'kotlin'], - }, - }, - required: ['query', 'language'], - }, - annotations: { - readOnlyHint: true, - }, -}; - -export const handler = async (_: unknown, args: Record | undefined) => { - const body = args as any; - const query = new URLSearchParams(body).toString(); - const result = await fetch('https://api.stainless.com/api/projects/finch/finch/docs/search?' + query); - return asTextContentResult(await result.json()); -}; - -export default { metadata, tool, handler }; diff --git a/packages/mcp-server/src/server.ts b/packages/mcp-server/src/server.ts index 1263b340d..067fcda0a 100644 --- a/packages/mcp-server/src/server.ts +++ b/packages/mcp-server/src/server.ts @@ -20,7 +20,6 @@ import { } from './compat'; import { dynamicTools } from './dynamic-tools'; import { codeTool } from './code-tool'; -import docsSearchTool from './docs-search-tool'; import { McpOptions } from './options'; export { McpOptions } from './options'; @@ -122,7 +121,7 @@ export async function selectTools(endpoints: Endpoint[], options?: McpOptions): } else if (options?.includeDynamicTools) { includedTools = dynamicTools(endpoints); } else if (options?.includeCodeTools) { - includedTools = [await codeTool(), docsSearchTool]; + includedTools = [await codeTool()]; } else { includedTools = endpoints; } From 1758c0de64e97975332bb8a0c6b55a23ed82a036 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 19 Sep 2025 17:44:38 +0000 Subject: [PATCH 22/51] chore: do not install brew dependencies in ./scripts/bootstrap by default --- scripts/bootstrap | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/scripts/bootstrap b/scripts/bootstrap index 0af58e251..f68bedacb 100755 --- a/scripts/bootstrap +++ b/scripts/bootstrap @@ -4,10 +4,18 @@ set -e cd "$(dirname "$0")/.." -if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ] && [ "$SKIP_BREW" != "1" ]; then +if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ] && [ "$SKIP_BREW" != "1" ] && [ -t 0 ]; then brew bundle check >/dev/null 2>&1 || { - echo "==> Installing Homebrew dependencies…" - brew bundle + echo -n "==> Install Homebrew dependencies? (y/N): " + read -r response + case "$response" in + [yY][eE][sS]|[yY]) + brew bundle + ;; + *) + ;; + esac + echo } fi From 8ec38f6536ca6a6e7324dd827db0dc9ee9234f61 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 22 Sep 2025 21:20:09 +0000 Subject: [PATCH 23/51] feat(mcp): enable experimental docs search tool --- packages/mcp-server/src/docs-search-tool.ts | 45 +++++++++++++++++++++ packages/mcp-server/src/server.ts | 3 +- 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 packages/mcp-server/src/docs-search-tool.ts diff --git a/packages/mcp-server/src/docs-search-tool.ts b/packages/mcp-server/src/docs-search-tool.ts new file mode 100644 index 000000000..42eeb44fa --- /dev/null +++ b/packages/mcp-server/src/docs-search-tool.ts @@ -0,0 +1,45 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { Metadata, asTextContentResult } from './tools/types'; + +import { Tool } from '@modelcontextprotocol/sdk/types.js'; + +export const metadata: Metadata = { + resource: 'all', + operation: 'read', + tags: [], + httpMethod: 'get', +}; + +export const tool: Tool = { + name: 'search_docs', + description: + 'Search for documentation for how to use the client to interact with the API.\nThe tool will return an array of Markdown-formatted documentation pages.', + inputSchema: { + type: 'object', + properties: { + query: { + type: 'string', + description: 'The query to search for.', + }, + language: { + type: 'string', + description: 'The language for the SDK to search for.', + enum: ['http', 'python', 'go', 'typescript', 'terraform', 'ruby', 'java', 'kotlin'], + }, + }, + required: ['query', 'language'], + }, + annotations: { + readOnlyHint: true, + }, +}; + +export const handler = async (_: unknown, args: Record | undefined) => { + const body = args as any; + const query = new URLSearchParams(body).toString(); + const result = await fetch('https://api.stainless.com/api/projects/finch/docs/search?' + query); + return asTextContentResult(await result.json()); +}; + +export default { metadata, tool, handler }; diff --git a/packages/mcp-server/src/server.ts b/packages/mcp-server/src/server.ts index 067fcda0a..1263b340d 100644 --- a/packages/mcp-server/src/server.ts +++ b/packages/mcp-server/src/server.ts @@ -20,6 +20,7 @@ import { } from './compat'; import { dynamicTools } from './dynamic-tools'; import { codeTool } from './code-tool'; +import docsSearchTool from './docs-search-tool'; import { McpOptions } from './options'; export { McpOptions } from './options'; @@ -121,7 +122,7 @@ export async function selectTools(endpoints: Endpoint[], options?: McpOptions): } else if (options?.includeDynamicTools) { includedTools = dynamicTools(endpoints); } else if (options?.includeCodeTools) { - includedTools = [await codeTool()]; + includedTools = [await codeTool(), docsSearchTool]; } else { includedTools = endpoints; } From fef1f5b0cc05c737db89097378c88a38e8973089 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 23 Sep 2025 14:43:40 +0000 Subject: [PATCH 24/51] feat(mcp): add option for including docs tools --- packages/mcp-server/src/options.ts | 19 ++++++++++++++----- packages/mcp-server/src/server.ts | 12 +++++++----- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/packages/mcp-server/src/options.ts b/packages/mcp-server/src/options.ts index ecc9f10e1..348a33d0a 100644 --- a/packages/mcp-server/src/options.ts +++ b/packages/mcp-server/src/options.ts @@ -17,6 +17,7 @@ export type McpOptions = { includeDynamicTools?: boolean | undefined; includeAllTools?: boolean | undefined; includeCodeTools?: boolean | undefined; + includeDocsTools?: boolean | undefined; filters?: Filter[] | undefined; capabilities?: Partial | undefined; }; @@ -55,13 +56,13 @@ export function parseCLIOptions(): CLIOptions { .option('tools', { type: 'string', array: true, - choices: ['dynamic', 'all', 'code'], + choices: ['dynamic', 'all', 'code', 'docs'], description: 'Use dynamic tools or all tools', }) .option('no-tools', { type: 'string', array: true, - choices: ['dynamic', 'all', 'code'], + choices: ['dynamic', 'all', 'code', 'docs'], description: 'Do not use any dynamic or all tools', }) .option('tool', { @@ -245,13 +246,14 @@ export function parseCLIOptions(): CLIOptions { } } - const shouldIncludeToolType = (toolType: 'dynamic' | 'all' | 'code') => + const shouldIncludeToolType = (toolType: 'dynamic' | 'all' | 'code' | 'docs') => explicitTools ? argv.tools?.includes(toolType) && !argv.noTools?.includes(toolType) : undefined; const explicitTools = Boolean(argv.tools || argv.noTools); const includeDynamicTools = shouldIncludeToolType('dynamic'); const includeAllTools = shouldIncludeToolType('all'); const includeCodeTools = shouldIncludeToolType('code'); + const includeDocsTools = shouldIncludeToolType('docs'); const transport = argv.transport as 'stdio' | 'http'; @@ -261,6 +263,7 @@ export function parseCLIOptions(): CLIOptions { includeDynamicTools, includeAllTools, includeCodeTools, + includeDocsTools, filters, capabilities: clientCapabilities, list: argv.list || false, @@ -280,8 +283,8 @@ const coerceArray = (zodType: T) => ); const QueryOptions = z.object({ - tools: coerceArray(z.enum(['dynamic', 'all'])).describe('Use dynamic tools or all tools'), - no_tools: coerceArray(z.enum(['dynamic', 'all'])).describe('Do not use dynamic tools or all tools'), + tools: coerceArray(z.enum(['dynamic', 'all', 'docs'])).describe('Use dynamic tools or all tools'), + no_tools: coerceArray(z.enum(['dynamic', 'all', 'docs'])).describe('Do not use dynamic tools or all tools'), tool: coerceArray(z.string()).describe('Include tools matching the specified names'), resource: coerceArray(z.string()).describe('Include tools matching the specified resources'), operation: coerceArray(z.enum(['read', 'write'])).describe( @@ -376,11 +379,17 @@ export function parseQueryOptions(defaultOptions: McpOptions, query: unknown): M : queryOptions.tools?.includes('all') ? true : defaultOptions.includeAllTools; + let docsTools: boolean | undefined = + queryOptions.no_tools && queryOptions.no_tools?.includes('docs') ? false + : queryOptions.tools?.includes('docs') ? true + : defaultOptions.includeDocsTools; + return { client: queryOptions.client ?? defaultOptions.client, includeDynamicTools: dynamicTools, includeAllTools: allTools, includeCodeTools: undefined, + includeDocsTools: docsTools, filters, capabilities: clientCapabilities, }; diff --git a/packages/mcp-server/src/server.ts b/packages/mcp-server/src/server.ts index 1263b340d..8e579cb0c 100644 --- a/packages/mcp-server/src/server.ts +++ b/packages/mcp-server/src/server.ts @@ -110,7 +110,7 @@ export function initMcpServer(params: { export async function selectTools(endpoints: Endpoint[], options?: McpOptions): Promise { const filteredEndpoints = query(options?.filters ?? [], endpoints); - let includedTools = filteredEndpoints; + let includedTools = filteredEndpoints.slice(); if (includedTools.length > 0) { if (options?.includeDynamicTools) { @@ -118,16 +118,18 @@ export async function selectTools(endpoints: Endpoint[], options?: McpOptions): } } else { if (options?.includeAllTools) { - includedTools = endpoints; + includedTools = endpoints.slice(); } else if (options?.includeDynamicTools) { includedTools = dynamicTools(endpoints); } else if (options?.includeCodeTools) { - includedTools = [await codeTool(), docsSearchTool]; + includedTools = [await codeTool()]; } else { - includedTools = endpoints; + includedTools = endpoints.slice(); } } - + if (options?.includeDocsTools ?? true) { + includedTools.push(docsSearchTool); + } const capabilities = { ...defaultClientCapabilities, ...options?.capabilities }; return applyCompatibilityTransformations(includedTools, capabilities); } From c1de3c258e8b7dcb15903b6811138a27a741255b Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 23 Sep 2025 17:34:29 +0000 Subject: [PATCH 25/51] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 496cf9a04..f6fac549d 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-bb50c0ae41ff5036adf72344d33057941f6de67c5fae811eba2e758bfa4ffd31.yml -openapi_spec_hash: 1b21e4bfc46daeef1613e410e5aa8f28 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-4e3b71a8de554d0df7c2f1dd986d49bc16f3462f50df16986a810d3691a8f734.yml +openapi_spec_hash: fb3607635c664f6319b4a9cf2ea4a2b5 config_hash: 6d3585c0032e08d723d077d660fc8448 From 163982a884bcf10684b5b3e242b0d52d547fc62b Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 25 Sep 2025 19:29:05 +0000 Subject: [PATCH 26/51] perf: faster formatting --- scripts/fast-format | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100755 scripts/fast-format diff --git a/scripts/fast-format b/scripts/fast-format new file mode 100755 index 000000000..03fb1a3a2 --- /dev/null +++ b/scripts/fast-format @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +set -euo pipefail + +echo "Script started with $# arguments" +echo "Arguments: $*" +echo "Script location: $(dirname "$0")" + +cd "$(dirname "$0")/.." +echo "Changed to directory: $(pwd)" + +if [ $# -eq 0 ]; then + echo "Usage: $0 [additional-formatter-args...]" + echo "The file should contain one file path per line" + exit 1 +fi + +FILE_LIST="$1" + +echo "Looking for file: $FILE_LIST" + +if [ ! -f "$FILE_LIST" ]; then + echo "Error: File '$FILE_LIST' not found" + exit 1 +fi + +echo "==> Running eslint --fix" +ESLINT_FILES="$(grep '\.ts$' "$FILE_LIST" || true)" +if ! [ -z "$ESLINT_FILES" ]; then + echo "$ESLINT_FILES" | ESLINT_USE_FLAT_CONFIG="false" xargs ./node_modules/.bin/eslint --cache --fix +fi + +echo "==> Running prettier --write" +# format things eslint didn't +PRETTIER_FILES="$(grep '\.\(js\|json\)$' "$FILE_LIST" || true)" +if ! [ -z "$PRETTIER_FILES" ]; then + echo "$PRETTIER_FILES" | xargs ./node_modules/.bin/prettier \ + --write --cache --cache-strategy metadata \ + '!**/dist' '!**/*.ts' '!**/*.mts' '!**/*.cts' '!**/*.js' '!**/*.mjs' '!**/*.cjs' +fi From 5955e291311d6d8192a3e8c3eb87f4eac9bdbdbc Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 25 Sep 2025 22:55:19 +0000 Subject: [PATCH 27/51] chore(internal): remove deprecated `compilerOptions.baseUrl` from tsconfig.json This allows sdks to be built using tsgo - see https://github.com/microsoft/typescript-go/issues/474 --- packages/mcp-server/tsconfig.build.json | 4 ++-- packages/mcp-server/tsconfig.json | 5 ++--- tsconfig.build.json | 4 ++-- tsconfig.json | 9 ++++----- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/packages/mcp-server/tsconfig.build.json b/packages/mcp-server/tsconfig.build.json index 13cb54cbf..df6c2b0a6 100644 --- a/packages/mcp-server/tsconfig.build.json +++ b/packages/mcp-server/tsconfig.build.json @@ -5,8 +5,8 @@ "compilerOptions": { "rootDir": "./dist/src", "paths": { - "@tryfinch/finch-api-mcp/*": ["dist/src/*"], - "@tryfinch/finch-api-mcp": ["dist/src/index.ts"] + "@tryfinch/finch-api-mcp/*": ["./dist/src/*"], + "@tryfinch/finch-api-mcp": ["./dist/src/index.ts"] }, "noEmit": false, "declaration": true, diff --git a/packages/mcp-server/tsconfig.json b/packages/mcp-server/tsconfig.json index a2bbc9f33..cded90d2d 100644 --- a/packages/mcp-server/tsconfig.json +++ b/packages/mcp-server/tsconfig.json @@ -7,10 +7,9 @@ "module": "commonjs", "moduleResolution": "node", "esModuleInterop": true, - "baseUrl": "./", "paths": { - "@tryfinch/finch-api-mcp/*": ["src/*"], - "@tryfinch/finch-api-mcp": ["src/index.ts"] + "@tryfinch/finch-api-mcp/*": ["./src/*"], + "@tryfinch/finch-api-mcp": ["./src/index.ts"] }, "noEmit": true, diff --git a/tsconfig.build.json b/tsconfig.build.json index 4549f6d24..b5b9724dc 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -5,8 +5,8 @@ "compilerOptions": { "rootDir": "./dist/src", "paths": { - "@tryfinch/finch-api/*": ["dist/src/*"], - "@tryfinch/finch-api": ["dist/src/index.ts"], + "@tryfinch/finch-api/*": ["./dist/src/*"], + "@tryfinch/finch-api": ["./dist/src/index.ts"] }, "noEmit": false, "declaration": true, diff --git a/tsconfig.json b/tsconfig.json index 147097804..6f28db23d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,11 +7,10 @@ "module": "commonjs", "moduleResolution": "node", "esModuleInterop": true, - "baseUrl": "./", "paths": { - "@tryfinch/finch-api/_shims/auto/*": ["src/_shims/auto/*-node"], - "@tryfinch/finch-api/*": ["src/*"], - "@tryfinch/finch-api": ["src/index.ts"] + "@tryfinch/finch-api/_shims/auto/*": ["./src/_shims/auto/*-node"], + "@tryfinch/finch-api/*": ["./src/*"], + "@tryfinch/finch-api": ["./src/index.ts"] }, "noEmit": true, @@ -32,7 +31,7 @@ "noUncheckedIndexedAccess": true, "noImplicitOverride": true, "noPropertyAccessFromIndexSignature": true, - "isolatedModules": false, + "isolatedModules": false, "skipLibCheck": true } From 40ecf6a887ea44d156672f155abf70ab2d146921 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 26 Sep 2025 14:09:22 +0000 Subject: [PATCH 28/51] chore(internal): fix incremental formatting in some cases --- scripts/fast-format | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/fast-format b/scripts/fast-format index 03fb1a3a2..8a8e9d590 100755 --- a/scripts/fast-format +++ b/scripts/fast-format @@ -35,6 +35,6 @@ echo "==> Running prettier --write" PRETTIER_FILES="$(grep '\.\(js\|json\)$' "$FILE_LIST" || true)" if ! [ -z "$PRETTIER_FILES" ]; then echo "$PRETTIER_FILES" | xargs ./node_modules/.bin/prettier \ - --write --cache --cache-strategy metadata \ + --write --cache --cache-strategy metadata --no-error-on-unmatched-pattern \ '!**/dist' '!**/*.ts' '!**/*.mts' '!**/*.cts' '!**/*.js' '!**/*.mjs' '!**/*.cjs' fi From bb7f182ef3959a99a7728cdab685d972e4110756 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 26 Sep 2025 15:19:54 +0000 Subject: [PATCH 29/51] chore(mcp): allow pointing `docs_search` tool at other URLs --- .eslintcache | 1 + packages/mcp-server/src/docs-search-tool.ts | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 .eslintcache diff --git a/.eslintcache b/.eslintcache new file mode 100644 index 000000000..92a452a9b --- /dev/null +++ b/.eslintcache @@ -0,0 +1 @@ +[{"/home/tempuser-3kscop/run/codegen-output/finch/finch-node/packages/mcp-server/src/docs-search-tool.ts":"1"},{"size":1459,"mtime":1758899992092}] \ No newline at end of file diff --git a/packages/mcp-server/src/docs-search-tool.ts b/packages/mcp-server/src/docs-search-tool.ts index 42eeb44fa..0ef8ccb90 100644 --- a/packages/mcp-server/src/docs-search-tool.ts +++ b/packages/mcp-server/src/docs-search-tool.ts @@ -35,10 +35,13 @@ export const tool: Tool = { }, }; +const docsSearchURL = + process.env['DOCS_SEARCH_URL'] || 'https://api.stainless.com/api/projects/finch/docs/search'; + export const handler = async (_: unknown, args: Record | undefined) => { const body = args as any; const query = new URLSearchParams(body).toString(); - const result = await fetch('https://api.stainless.com/api/projects/finch/docs/search?' + query); + const result = await fetch(`${docsSearchURL}?${query}`); return asTextContentResult(await result.json()); }; From 9545088c46a29bbe18de88f1d218783ca0303e7b Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 26 Sep 2025 16:29:36 +0000 Subject: [PATCH 30/51] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index f6fac549d..8ccb92451 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-4e3b71a8de554d0df7c2f1dd986d49bc16f3462f50df16986a810d3691a8f734.yml -openapi_spec_hash: fb3607635c664f6319b4a9cf2ea4a2b5 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-1066fa342808844922c79f57fea5676ba822a7ff57f2143efa70bbadf5ed6428.yml +openapi_spec_hash: 794703adc5978c044203ee5b1a9eb4f0 config_hash: 6d3585c0032e08d723d077d660fc8448 From d0200501b52ae4ac9e7c8de91d2f883e27db34c5 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 26 Sep 2025 19:08:39 +0000 Subject: [PATCH 31/51] chore(internal): codegen related update --- .devcontainer/devcontainer.json | 4 +--- .eslintcache | 2 +- packages/mcp-server/manifest.json | 8 ++------ release-please-config.json | 5 +---- 4 files changed, 5 insertions(+), 14 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 763462fad..43fd5a73f 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -9,9 +9,7 @@ "postCreateCommand": "yarn install", "customizations": { "vscode": { - "extensions": [ - "esbenp.prettier-vscode" - ] + "extensions": ["esbenp.prettier-vscode"] } } } diff --git a/.eslintcache b/.eslintcache index 92a452a9b..2222fc60d 100644 --- a/.eslintcache +++ b/.eslintcache @@ -1 +1 @@ -[{"/home/tempuser-3kscop/run/codegen-output/finch/finch-node/packages/mcp-server/src/docs-search-tool.ts":"1"},{"size":1459,"mtime":1758899992092}] \ No newline at end of file +[{"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/jest.config.ts":"1","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/jest.config.ts":"2","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/code-tool-types.ts":"3","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/code-tool-worker.ts":"4","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/code-tool.ts":"5","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/compat.ts":"6","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/docs-search-tool.ts":"7","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/filtering.ts":"8","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/dynamic-tools.ts":"9","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/http.ts":"10","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/headers.ts":"11","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/options.ts":"12","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/index.ts":"13","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/server.ts":"14","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/stdio.ts":"15","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/account/disconnect-account.ts":"16","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/access-tokens/create-access-tokens.ts":"17","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/connect/sessions/new-connect-sessions.ts":"18","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/account/introspect-account.ts":"19","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/connect/sessions/reauthenticate-connect-sessions.ts":"20","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/individuals/enroll-many-benefits-hris-individuals.ts":"21","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/create-hris-benefits.ts":"22","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/individuals/enrolled-ids-benefits-hris-individuals.ts":"23","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/individuals/retrieve-many-benefits-benefits-hris-individuals.ts":"24","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/individuals/unenroll-many-benefits-hris-individuals.ts":"25","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/list-hris-benefits.ts":"26","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/list-supported-benefits-hris-benefits.ts":"27","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/retrieve-hris-benefits.ts":"28","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/update-hris-benefits.ts":"29","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/pay-statement-item/list-company-hris-pay-statement-item.ts":"30","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/create-pay-statement-item-company-hris-rules.ts":"31","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/delete-pay-statement-item-company-hris-rules.ts":"32","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/list-pay-statement-item-company-hris-rules.ts":"33","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/update-pay-statement-item-company-hris-rules.ts":"34","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/retrieve-hris-company.ts":"35","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/directory/list-hris-directory.ts":"36","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts":"37","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts":"38","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/employments/retrieve-many-hris-employments.ts":"39","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/individuals/retrieve-many-hris-individuals.ts":"40","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/pay-statements/retrieve-many-hris-pay-statements.ts":"41","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/payments/list-hris-payments.ts":"42","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/index.ts":"43","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/jobs/automated/create-jobs-automated.ts":"44","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/jobs/automated/list-jobs-automated.ts":"45","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/jobs/automated/retrieve-jobs-automated.ts":"46","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/jobs/manual/retrieve-jobs-manual.ts":"47","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/payroll/pay-groups/list-payroll-pay-groups.ts":"48","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/payroll/pay-groups/retrieve-payroll-pay-groups.ts":"49","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/providers/list-providers.ts":"50","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts":"51","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/company/update-sandbox-company.ts":"52","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/connections/accounts/create-connections-sandbox-accounts.ts":"53","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/connections/accounts/update-connections-sandbox-accounts.ts":"54","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/connections/create-sandbox-connections.ts":"55","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/directory/create-sandbox-directory.ts":"56","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/employment/update-sandbox-employment.ts":"57","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/individual/update-sandbox-individual.ts":"58","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/jobs/configuration/retrieve-jobs-sandbox-configuration.ts":"59","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/jobs/configuration/update-jobs-sandbox-configuration.ts":"60","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/jobs/create-sandbox-jobs.ts":"61","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/payment/create-sandbox-payment.ts":"62","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/types.ts":"63","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools.ts":"64","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/dynamic-tools.test.ts":"65","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/compat.test.ts":"66","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/options.test.ts":"67","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/tools.test.ts":"68","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/scripts/publish-packages.ts":"69","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/MultipartBody.ts":"70","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-bun.ts":"71","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-deno.ts":"72","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-node.ts":"73","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime.ts":"74","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types-deno.ts":"75","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types-node.ts":"76","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types.d.ts":"77","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/bun-runtime.ts":"78","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/index-deno.ts":"79","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/index.d.ts":"80","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/manual-types.d.ts":"81","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/node-runtime.ts":"82","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/node-types.d.ts":"83","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/registry.ts":"84","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/web-runtime.ts":"85","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/web-types.d.ts":"86","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/error.ts":"87","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/index.ts":"88","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/core.ts":"89","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/formats.ts":"90","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/index.ts":"91","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/stringify.ts":"92","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/types.ts":"93","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/utils.ts":"94","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/pagination.ts":"95","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resource.ts":"96","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/access-tokens.ts":"97","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/account.ts":"98","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/connect/connect.ts":"99","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/connect/index.ts":"100","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/connect/sessions.ts":"101","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/connect.ts":"102","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/benefits/benefits.ts":"103","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/benefits/index.ts":"104","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/benefits/individuals.ts":"105","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/benefits.ts":"106","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/company.ts":"107","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/index.ts":"108","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/pay-statement-item/index.ts":"109","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/pay-statement-item/pay-statement-item.ts":"110","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/pay-statement-item/rules.ts":"111","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/pay-statement-item.ts":"112","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company.ts":"113","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/directory.ts":"114","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/documents.ts":"115","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/employments.ts":"116","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/hris.ts":"117","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/index.ts":"118","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/individuals.ts":"119","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/pay-statements.ts":"120","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/payments.ts":"121","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris.ts":"122","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/index.ts":"123","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs/automated.ts":"124","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs/index.ts":"125","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs/manual.ts":"126","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs/jobs.ts":"127","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs.ts":"128","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/payroll/index.ts":"129","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/payroll/pay-groups.ts":"130","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/payroll/payroll.ts":"131","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/payroll.ts":"132","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/providers.ts":"133","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/request-forwarding.ts":"134","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/company.ts":"135","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/connections/accounts.ts":"136","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/connections/connections.ts":"137","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/connections/index.ts":"138","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/connections.ts":"139","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/directory.ts":"140","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/employment.ts":"141","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/index.ts":"142","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/individual.ts":"143","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/jobs/configuration.ts":"144","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/jobs/index.ts":"145","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/jobs/jobs.ts":"146","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/jobs.ts":"147","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/payment.ts":"148","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/sandbox.ts":"149","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox.ts":"150","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/shared.ts":"151","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources.ts":"152","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/webhooks.ts":"153","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/shims/node.ts":"154","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/shims/web.ts":"155","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/uploads.ts":"156","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/version.ts":"157","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/access-tokens.test.ts":"158","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/account.test.ts":"159","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/connect/sessions.test.ts":"160","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/benefits/benefits.test.ts":"161","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/benefits/individuals.test.ts":"162","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/company/company.test.ts":"163","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/company/pay-statement-item/pay-statement-item.test.ts":"164","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/company/pay-statement-item/rules.test.ts":"165","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/directory.test.ts":"166","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/documents.test.ts":"167","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/employments.test.ts":"168","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/individuals.test.ts":"169","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/pay-statements.test.ts":"170","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/payments.test.ts":"171","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/jobs/automated.test.ts":"172","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/jobs/manual.test.ts":"173","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/payroll/pay-groups.test.ts":"174","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/providers.test.ts":"175","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/request-forwarding.test.ts":"176","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/company.test.ts":"177","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/connections/accounts.test.ts":"178","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/connections/connections.test.ts":"179","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/directory.test.ts":"180","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/employment.test.ts":"181","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/individual.test.ts":"182","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/jobs/configuration.test.ts":"183","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/jobs/jobs.test.ts":"184","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/payment.test.ts":"185","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/form.test.ts":"186","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/index.test.ts":"187","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/empty-keys-cases.ts":"188","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/stringify.test.ts":"189","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/utils.test.ts":"190","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/responses.test.ts":"191","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/stringifyQuery.test.ts":"192","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/uploads.test.ts":"193"},{"size":674,"mtime":1758913698745,"results":"194","hashOfConfig":"195"},{"size":513,"mtime":1758913712297},{"size":373,"mtime":1758913712297},{"size":1179,"mtime":1758913699005,"results":"196","hashOfConfig":"195"},{"size":5907,"mtime":1758913712297},{"size":12713,"mtime":1758913698925,"results":"197","hashOfConfig":"195"},{"size":1459,"mtime":1758913712297},{"size":368,"mtime":1758913698925,"results":"198","hashOfConfig":"195"},{"size":5554,"mtime":1758913712297},{"size":3400,"mtime":1758913712297},{"size":1157,"mtime":1758913712297},{"size":17071,"mtime":1758913699005,"results":"199","hashOfConfig":"195"},{"size":2884,"mtime":1758913698925,"results":"200","hashOfConfig":"195"},{"size":5447,"mtime":1758913712297},{"size":465,"mtime":1758913712297},{"size":2040,"mtime":1758913712297},{"size":4568,"mtime":1758913712297},{"size":3373,"mtime":1758913712297},{"size":8286,"mtime":1758913712297},{"size":3107,"mtime":1758913712297},{"size":4792,"mtime":1758913712297},{"size":4142,"mtime":1758913712297},{"size":2296,"mtime":1758913712297},{"size":5030,"mtime":1758913712297},{"size":2350,"mtime":1758913712297},{"size":4289,"mtime":1758913712297},{"size":4203,"mtime":1758913712297},{"size":4274,"mtime":1758913712297},{"size":2333,"mtime":1758913712297},{"size":4855,"mtime":1758913712297},{"size":5765,"mtime":1758913712297},{"size":4274,"mtime":1758913712297},{"size":4665,"mtime":1758913712297},{"size":4217,"mtime":1758913712297},{"size":7311,"mtime":1758913712301},{"size":4439,"mtime":1758913712301},{"size":4121,"mtime":1758913712301},{"size":6427,"mtime":1758913712301},{"size":1576,"mtime":1758913712301},{"size":8409,"mtime":1758913712301},{"size":1750,"mtime":1758913712301},{"size":5070,"mtime":1758913712301},{"size":8380,"mtime":1758913712301},{"size":4038,"mtime":1758913712301},{"size":5679,"mtime":1758913712301},{"size":4492,"mtime":1758913712301},{"size":2910,"mtime":1758913712301},{"size":2781,"mtime":1758913712301},{"size":2805,"mtime":1758913712301},{"size":952,"mtime":1758913712301},{"size":5432,"mtime":1758913712301},{"size":10272,"mtime":1758913712301},{"size":3535,"mtime":1758913712301},{"size":3206,"mtime":1758913712301},{"size":3647,"mtime":1758913712301},{"size":11131,"mtime":1758913712301},{"size":6814,"mtime":1758913712301},{"size":9072,"mtime":1758913712301},{"size":2415,"mtime":1758913712301},{"size":2679,"mtime":1758913712301},{"size":2563,"mtime":1758913712301},{"size":6831,"mtime":1758913712301},{"size":2189,"mtime":1758913712301},{"size":31,"mtime":1758913698929,"results":"201","hashOfConfig":"195"},{"size":6851,"mtime":1758913698929,"results":"202","hashOfConfig":"195"},{"size":29411,"mtime":1758913698929,"results":"203","hashOfConfig":"195"},{"size":16226,"mtime":1758913698929,"results":"204","hashOfConfig":"195"},{"size":6594,"mtime":1758913698929,"results":"205","hashOfConfig":"195"},{"size":3689,"mtime":1758913698749,"results":"206","hashOfConfig":"195"},{"size":223,"mtime":1758913698753,"results":"207","hashOfConfig":"195"},{"size":118,"mtime":1758913698773,"results":"208","hashOfConfig":"195"},{"size":118,"mtime":1758913698773,"results":"209","hashOfConfig":"195"},{"size":119,"mtime":1758913698773,"results":"210","hashOfConfig":"195"},{"size":118,"mtime":1758913698773,"results":"211","hashOfConfig":"195"},{"size":116,"mtime":1758913698773,"results":"212","hashOfConfig":"195"},{"size":117,"mtime":1758913698773,"results":"213","hashOfConfig":"195"},{"size":3001,"mtime":1758913698773,"results":"214","hashOfConfig":"195"},{"size":468,"mtime":1758913698773,"results":"215","hashOfConfig":"195"},{"size":2746,"mtime":1758913698773,"results":"216","hashOfConfig":"195"},{"size":3169,"mtime":1758913698777,"results":"217","hashOfConfig":"195"},{"size":359,"mtime":1758913698777,"results":"218","hashOfConfig":"195"},{"size":3133,"mtime":1758913698777,"results":"219","hashOfConfig":"195"},{"size":1238,"mtime":1758913698777,"results":"220","hashOfConfig":"195"},{"size":2490,"mtime":1758913698777,"results":"221","hashOfConfig":"195"},{"size":3086,"mtime":1758913698777,"results":"222","hashOfConfig":"195"},{"size":2073,"mtime":1758913698781,"results":"223","hashOfConfig":"195"},{"size":3970,"mtime":1758913712301},{"size":13176,"mtime":1758913712301},{"size":39741,"mtime":1758913712301},{"size":339,"mtime":1758913698797,"results":"224","hashOfConfig":"195"},{"size":325,"mtime":1758913698797,"results":"225","hashOfConfig":"195"},{"size":11751,"mtime":1758913698797,"results":"226","hashOfConfig":"195"},{"size":2183,"mtime":1758913698801,"results":"227","hashOfConfig":"195"},{"size":6607,"mtime":1758913698801,"results":"228","hashOfConfig":"195"},{"size":5035,"mtime":1758913712301},{"size":256,"mtime":1758913698997,"results":"229","hashOfConfig":"195"},{"size":2519,"mtime":1758913712301},{"size":4602,"mtime":1758913712301},{"size":908,"mtime":1758913712301},{"size":284,"mtime":1758913712301},{"size":3088,"mtime":1758913712301},{"size":121,"mtime":1758913699985,"results":"230","hashOfConfig":"195"},{"size":10773,"mtime":1758913712301},{"size":857,"mtime":1758913712301},{"size":8010,"mtime":1758913712301},{"size":122,"mtime":1758913699549,"results":"231","hashOfConfig":"195"},{"size":3909,"mtime":1758913712301},{"size":315,"mtime":1758913712301},{"size":450,"mtime":1758913712301},{"size":4682,"mtime":1758913712301},{"size":11551,"mtime":1758913712301},{"size":132,"mtime":1758913699217,"results":"232","hashOfConfig":"195"},{"size":121,"mtime":1758913699165,"results":"233","hashOfConfig":"195"},{"size":2794,"mtime":1758913712301},{"size":6154,"mtime":1758913712301},{"size":6069,"mtime":1758913712301},{"size":7418,"mtime":1758913712301},{"size":1614,"mtime":1758913712301},{"size":4396,"mtime":1758913712301},{"size":8126,"mtime":1758913712301},{"size":2612,"mtime":1758913712301},{"size":118,"mtime":1758913699133,"results":"234","hashOfConfig":"195"},{"size":1033,"mtime":1758913712305},{"size":7317,"mtime":1758913712305},{"size":412,"mtime":1758913712305},{"size":1681,"mtime":1758913712305},{"size":1383,"mtime":1758913712305},{"size":118,"mtime":1758913699789,"results":"235","hashOfConfig":"195"},{"size":285,"mtime":1758913712305},{"size":2687,"mtime":1758913712305},{"size":1002,"mtime":1758913712305},{"size":121,"mtime":1758913699969,"results":"236","hashOfConfig":"195"},{"size":9611,"mtime":1758913712305},{"size":4346,"mtime":1758913712305},{"size":6062,"mtime":1758913712305},{"size":3651,"mtime":1758913712305},{"size":2675,"mtime":1758913712305},{"size":342,"mtime":1758913712305},{"size":125,"mtime":1758913699857,"results":"237","hashOfConfig":"195"},{"size":6191,"mtime":1758913712305},{"size":7765,"mtime":1758913712305},{"size":814,"mtime":1758913712305},{"size":5031,"mtime":1758913712305},{"size":1848,"mtime":1758913712305},{"size":314,"mtime":1758913712305},{"size":2008,"mtime":1758913712305},{"size":118,"mtime":1758913699949,"results":"238","hashOfConfig":"195"},{"size":3319,"mtime":1758913712305},{"size":3118,"mtime":1758913712305},{"size":121,"mtime":1758913699849,"results":"239","hashOfConfig":"195"},{"size":3033,"mtime":1758913712305},{"size":35,"mtime":1758913698801,"results":"240","hashOfConfig":"195"},{"size":12550,"mtime":1758913712305},{"size":1564,"mtime":1758913698801,"results":"241","hashOfConfig":"195"},{"size":1588,"mtime":1758913698801,"results":"242","hashOfConfig":"195"},{"size":9029,"mtime":1758913712305},{"size":60,"mtime":1758913712305},{"size":1123,"mtime":1758913712305},{"size":2012,"mtime":1758913712305},{"size":2222,"mtime":1758913712305},{"size":5480,"mtime":1758913712305},{"size":5559,"mtime":1758913712305},{"size":1185,"mtime":1758913712305},{"size":1690,"mtime":1758913712305},{"size":4870,"mtime":1758913712305},{"size":2794,"mtime":1758913712305},{"size":2453,"mtime":1758913712305},{"size":1109,"mtime":1758913712305},{"size":1659,"mtime":1758913712305},{"size":1177,"mtime":1758913712305},{"size":1072,"mtime":1758913712305},{"size":3534,"mtime":1758913712305},{"size":1612,"mtime":1758913712305},{"size":2485,"mtime":1758913712305},{"size":1165,"mtime":1758913712305},{"size":1197,"mtime":1758913712305},{"size":1850,"mtime":1758913712305},{"size":2541,"mtime":1758913712305},{"size":1192,"mtime":1758913712305},{"size":2749,"mtime":1758913712305},{"size":2418,"mtime":1758913712305},{"size":2055,"mtime":1758913712305},{"size":1978,"mtime":1758913712305},{"size":1020,"mtime":1758913712305},{"size":2043,"mtime":1758913712305},{"size":1698,"mtime":1758913698801,"results":"243","hashOfConfig":"195"},{"size":14827,"mtime":1758913712305},{"size":5918,"mtime":1758913698801,"results":"244","hashOfConfig":"195"},{"size":81651,"mtime":1758913698809,"results":"245","hashOfConfig":"195"},{"size":6180,"mtime":1758913698809,"results":"246","hashOfConfig":"195"},{"size":974,"mtime":1758913698809,"results":"247","hashOfConfig":"195"},{"size":727,"mtime":1758913712305},{"size":2144,"mtime":1758913698809,"results":"248","hashOfConfig":"195"},{"filePath":"249","messages":"250","suppressedMessages":"251","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"qspnjg",{"filePath":"252","messages":"253","suppressedMessages":"254","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"255","messages":"256","suppressedMessages":"257","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"258","messages":"259","suppressedMessages":"260","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"261","messages":"262","suppressedMessages":"263","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"264","messages":"265","suppressedMessages":"266","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"267","messages":"268","suppressedMessages":"269","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"270","messages":"271","suppressedMessages":"272","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"273","messages":"274","suppressedMessages":"275","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"276","messages":"277","suppressedMessages":"278","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"279","messages":"280","suppressedMessages":"281","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"282","messages":"283","suppressedMessages":"284","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"285","messages":"286","suppressedMessages":"287","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"288","messages":"289","suppressedMessages":"290","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"291","messages":"292","suppressedMessages":"293","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"294","messages":"295","suppressedMessages":"296","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"297","messages":"298","suppressedMessages":"299","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"300","messages":"301","suppressedMessages":"302","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"303","messages":"304","suppressedMessages":"305","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"306","messages":"307","suppressedMessages":"308","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"309","messages":"310","suppressedMessages":"311","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"312","messages":"313","suppressedMessages":"314","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"315","messages":"316","suppressedMessages":"317","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"318","messages":"319","suppressedMessages":"320","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"321","messages":"322","suppressedMessages":"323","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"324","messages":"325","suppressedMessages":"326","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"327","messages":"328","suppressedMessages":"329","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"330","messages":"331","suppressedMessages":"332","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"333","messages":"334","suppressedMessages":"335","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"336","messages":"337","suppressedMessages":"338","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"339","messages":"340","suppressedMessages":"341","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"342","messages":"343","suppressedMessages":"344","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"345","messages":"346","suppressedMessages":"347","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"348","messages":"349","suppressedMessages":"350","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"351","messages":"352","suppressedMessages":"353","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"354","messages":"355","suppressedMessages":"356","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"357","messages":"358","suppressedMessages":"359","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"360","messages":"361","suppressedMessages":"362","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"363","messages":"364","suppressedMessages":"365","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"366","messages":"367","suppressedMessages":"368","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"369","messages":"370","suppressedMessages":"371","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"372","messages":"373","suppressedMessages":"374","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"375","messages":"376","suppressedMessages":"377","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"378","messages":"379","suppressedMessages":"380","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"381","messages":"382","suppressedMessages":"383","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"384","messages":"385","suppressedMessages":"386","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"387","messages":"388","suppressedMessages":"389","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"390","messages":"391","suppressedMessages":"392","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"393","messages":"394","suppressedMessages":"395","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"396","messages":"397","suppressedMessages":"398","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"399","messages":"400","suppressedMessages":"401","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"402","messages":"403","suppressedMessages":"404","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"405","messages":"406","suppressedMessages":"407","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"408","messages":"409","suppressedMessages":"410","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/jest.config.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/code-tool-worker.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/compat.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/filtering.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/options.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/index.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/dynamic-tools.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/compat.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/options.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/tools.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/scripts/publish-packages.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/MultipartBody.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-bun.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-deno.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-node.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types-deno.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types-node.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types.d.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/bun-runtime.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/index-deno.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/index.d.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/manual-types.d.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/node-runtime.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/node-types.d.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/registry.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/web-runtime.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/web-types.d.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/formats.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/index.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/stringify.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/types.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/utils.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resource.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/connect.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/benefits.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/pay-statement-item.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/payroll.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/connections.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/jobs.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/shims/node.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/shims/web.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/form.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/empty-keys-cases.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/stringify.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/utils.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/responses.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/uploads.test.ts",[],[]] \ No newline at end of file diff --git a/packages/mcp-server/manifest.json b/packages/mcp-server/manifest.json index 04fd27e39..2901767d0 100644 --- a/packages/mcp-server/manifest.json +++ b/packages/mcp-server/manifest.json @@ -18,9 +18,7 @@ "entry_point": "index.js", "mcp_config": { "command": "node", - "args": [ - "${__dirname}/index.js" - ], + "args": ["${__dirname}/index.js"], "env": { "FINCH_ACCESS_TOKEN": "${user_config.FINCH_ACCESS_TOKEN}", "FINCH_CLIENT_ID": "${user_config.FINCH_CLIENT_ID}", @@ -62,7 +60,5 @@ "node": ">=18.0.0" } }, - "keywords": [ - "api" - ] + "keywords": ["api"] } diff --git a/release-please-config.json b/release-please-config.json index 63eb38a82..8204c04cd 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -59,10 +59,7 @@ "hidden": true } ], - "reviewers": [ - "jordanbrauer", - "minupalaniappan" - ], + "reviewers": ["jordanbrauer", "minupalaniappan"], "release-type": "node", "extra-files": [ "src/version.ts", From 843b525f6a3f07edda04ca213a35dd3d2d37fdb3 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 26 Sep 2025 20:47:24 +0000 Subject: [PATCH 32/51] feat(api): api update --- .eslintcache | 2 +- .stats.yml | 4 +- api.md | 3 +- .../src/tools/providers/list-providers.ts | 16 +- .../forward-request-forwarding.ts | 2 +- src/index.ts | 16 +- src/resources/index.ts | 7 +- src/resources/providers.ts | 484 ++++-------------- src/resources/request-forwarding.ts | 66 +-- .../api-resources/request-forwarding.test.ts | 12 +- 10 files changed, 161 insertions(+), 451 deletions(-) diff --git a/.eslintcache b/.eslintcache index 2222fc60d..9ecd95319 100644 --- a/.eslintcache +++ b/.eslintcache @@ -1 +1 @@ -[{"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/jest.config.ts":"1","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/jest.config.ts":"2","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/code-tool-types.ts":"3","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/code-tool-worker.ts":"4","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/code-tool.ts":"5","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/compat.ts":"6","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/docs-search-tool.ts":"7","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/filtering.ts":"8","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/dynamic-tools.ts":"9","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/http.ts":"10","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/headers.ts":"11","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/options.ts":"12","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/index.ts":"13","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/server.ts":"14","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/stdio.ts":"15","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/account/disconnect-account.ts":"16","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/access-tokens/create-access-tokens.ts":"17","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/connect/sessions/new-connect-sessions.ts":"18","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/account/introspect-account.ts":"19","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/connect/sessions/reauthenticate-connect-sessions.ts":"20","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/individuals/enroll-many-benefits-hris-individuals.ts":"21","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/create-hris-benefits.ts":"22","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/individuals/enrolled-ids-benefits-hris-individuals.ts":"23","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/individuals/retrieve-many-benefits-benefits-hris-individuals.ts":"24","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/individuals/unenroll-many-benefits-hris-individuals.ts":"25","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/list-hris-benefits.ts":"26","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/list-supported-benefits-hris-benefits.ts":"27","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/retrieve-hris-benefits.ts":"28","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/benefits/update-hris-benefits.ts":"29","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/pay-statement-item/list-company-hris-pay-statement-item.ts":"30","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/create-pay-statement-item-company-hris-rules.ts":"31","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/delete-pay-statement-item-company-hris-rules.ts":"32","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/list-pay-statement-item-company-hris-rules.ts":"33","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/update-pay-statement-item-company-hris-rules.ts":"34","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/company/retrieve-hris-company.ts":"35","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/directory/list-hris-directory.ts":"36","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts":"37","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts":"38","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/employments/retrieve-many-hris-employments.ts":"39","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/individuals/retrieve-many-hris-individuals.ts":"40","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/pay-statements/retrieve-many-hris-pay-statements.ts":"41","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/hris/payments/list-hris-payments.ts":"42","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/index.ts":"43","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/jobs/automated/create-jobs-automated.ts":"44","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/jobs/automated/list-jobs-automated.ts":"45","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/jobs/automated/retrieve-jobs-automated.ts":"46","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/jobs/manual/retrieve-jobs-manual.ts":"47","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/payroll/pay-groups/list-payroll-pay-groups.ts":"48","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/payroll/pay-groups/retrieve-payroll-pay-groups.ts":"49","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/providers/list-providers.ts":"50","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts":"51","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/company/update-sandbox-company.ts":"52","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/connections/accounts/create-connections-sandbox-accounts.ts":"53","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/connections/accounts/update-connections-sandbox-accounts.ts":"54","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/connections/create-sandbox-connections.ts":"55","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/directory/create-sandbox-directory.ts":"56","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/employment/update-sandbox-employment.ts":"57","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/individual/update-sandbox-individual.ts":"58","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/jobs/configuration/retrieve-jobs-sandbox-configuration.ts":"59","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/jobs/configuration/update-jobs-sandbox-configuration.ts":"60","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/jobs/create-sandbox-jobs.ts":"61","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/sandbox/payment/create-sandbox-payment.ts":"62","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/types.ts":"63","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools.ts":"64","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/dynamic-tools.test.ts":"65","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/compat.test.ts":"66","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/options.test.ts":"67","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/tools.test.ts":"68","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/scripts/publish-packages.ts":"69","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/MultipartBody.ts":"70","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-bun.ts":"71","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-deno.ts":"72","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-node.ts":"73","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime.ts":"74","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types-deno.ts":"75","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types-node.ts":"76","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types.d.ts":"77","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/bun-runtime.ts":"78","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/index-deno.ts":"79","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/index.d.ts":"80","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/manual-types.d.ts":"81","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/node-runtime.ts":"82","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/node-types.d.ts":"83","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/registry.ts":"84","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/web-runtime.ts":"85","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/web-types.d.ts":"86","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/error.ts":"87","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/index.ts":"88","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/core.ts":"89","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/formats.ts":"90","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/index.ts":"91","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/stringify.ts":"92","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/types.ts":"93","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/utils.ts":"94","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/pagination.ts":"95","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resource.ts":"96","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/access-tokens.ts":"97","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/account.ts":"98","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/connect/connect.ts":"99","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/connect/index.ts":"100","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/connect/sessions.ts":"101","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/connect.ts":"102","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/benefits/benefits.ts":"103","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/benefits/index.ts":"104","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/benefits/individuals.ts":"105","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/benefits.ts":"106","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/company.ts":"107","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/index.ts":"108","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/pay-statement-item/index.ts":"109","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/pay-statement-item/pay-statement-item.ts":"110","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/pay-statement-item/rules.ts":"111","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/pay-statement-item.ts":"112","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company.ts":"113","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/directory.ts":"114","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/documents.ts":"115","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/employments.ts":"116","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/hris.ts":"117","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/index.ts":"118","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/individuals.ts":"119","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/pay-statements.ts":"120","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/payments.ts":"121","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris.ts":"122","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/index.ts":"123","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs/automated.ts":"124","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs/index.ts":"125","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs/manual.ts":"126","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs/jobs.ts":"127","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs.ts":"128","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/payroll/index.ts":"129","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/payroll/pay-groups.ts":"130","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/payroll/payroll.ts":"131","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/payroll.ts":"132","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/providers.ts":"133","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/request-forwarding.ts":"134","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/company.ts":"135","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/connections/accounts.ts":"136","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/connections/connections.ts":"137","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/connections/index.ts":"138","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/connections.ts":"139","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/directory.ts":"140","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/employment.ts":"141","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/index.ts":"142","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/individual.ts":"143","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/jobs/configuration.ts":"144","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/jobs/index.ts":"145","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/jobs/jobs.ts":"146","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/jobs.ts":"147","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/payment.ts":"148","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/sandbox.ts":"149","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox.ts":"150","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/shared.ts":"151","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources.ts":"152","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/webhooks.ts":"153","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/shims/node.ts":"154","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/shims/web.ts":"155","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/uploads.ts":"156","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/version.ts":"157","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/access-tokens.test.ts":"158","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/account.test.ts":"159","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/connect/sessions.test.ts":"160","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/benefits/benefits.test.ts":"161","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/benefits/individuals.test.ts":"162","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/company/company.test.ts":"163","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/company/pay-statement-item/pay-statement-item.test.ts":"164","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/company/pay-statement-item/rules.test.ts":"165","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/directory.test.ts":"166","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/documents.test.ts":"167","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/employments.test.ts":"168","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/individuals.test.ts":"169","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/pay-statements.test.ts":"170","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/hris/payments.test.ts":"171","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/jobs/automated.test.ts":"172","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/jobs/manual.test.ts":"173","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/payroll/pay-groups.test.ts":"174","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/providers.test.ts":"175","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/request-forwarding.test.ts":"176","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/company.test.ts":"177","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/connections/accounts.test.ts":"178","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/connections/connections.test.ts":"179","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/directory.test.ts":"180","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/employment.test.ts":"181","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/individual.test.ts":"182","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/jobs/configuration.test.ts":"183","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/jobs/jobs.test.ts":"184","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/api-resources/sandbox/payment.test.ts":"185","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/form.test.ts":"186","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/index.test.ts":"187","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/empty-keys-cases.ts":"188","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/stringify.test.ts":"189","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/utils.test.ts":"190","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/responses.test.ts":"191","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/stringifyQuery.test.ts":"192","/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/uploads.test.ts":"193"},{"size":674,"mtime":1758913698745,"results":"194","hashOfConfig":"195"},{"size":513,"mtime":1758913712297},{"size":373,"mtime":1758913712297},{"size":1179,"mtime":1758913699005,"results":"196","hashOfConfig":"195"},{"size":5907,"mtime":1758913712297},{"size":12713,"mtime":1758913698925,"results":"197","hashOfConfig":"195"},{"size":1459,"mtime":1758913712297},{"size":368,"mtime":1758913698925,"results":"198","hashOfConfig":"195"},{"size":5554,"mtime":1758913712297},{"size":3400,"mtime":1758913712297},{"size":1157,"mtime":1758913712297},{"size":17071,"mtime":1758913699005,"results":"199","hashOfConfig":"195"},{"size":2884,"mtime":1758913698925,"results":"200","hashOfConfig":"195"},{"size":5447,"mtime":1758913712297},{"size":465,"mtime":1758913712297},{"size":2040,"mtime":1758913712297},{"size":4568,"mtime":1758913712297},{"size":3373,"mtime":1758913712297},{"size":8286,"mtime":1758913712297},{"size":3107,"mtime":1758913712297},{"size":4792,"mtime":1758913712297},{"size":4142,"mtime":1758913712297},{"size":2296,"mtime":1758913712297},{"size":5030,"mtime":1758913712297},{"size":2350,"mtime":1758913712297},{"size":4289,"mtime":1758913712297},{"size":4203,"mtime":1758913712297},{"size":4274,"mtime":1758913712297},{"size":2333,"mtime":1758913712297},{"size":4855,"mtime":1758913712297},{"size":5765,"mtime":1758913712297},{"size":4274,"mtime":1758913712297},{"size":4665,"mtime":1758913712297},{"size":4217,"mtime":1758913712297},{"size":7311,"mtime":1758913712301},{"size":4439,"mtime":1758913712301},{"size":4121,"mtime":1758913712301},{"size":6427,"mtime":1758913712301},{"size":1576,"mtime":1758913712301},{"size":8409,"mtime":1758913712301},{"size":1750,"mtime":1758913712301},{"size":5070,"mtime":1758913712301},{"size":8380,"mtime":1758913712301},{"size":4038,"mtime":1758913712301},{"size":5679,"mtime":1758913712301},{"size":4492,"mtime":1758913712301},{"size":2910,"mtime":1758913712301},{"size":2781,"mtime":1758913712301},{"size":2805,"mtime":1758913712301},{"size":952,"mtime":1758913712301},{"size":5432,"mtime":1758913712301},{"size":10272,"mtime":1758913712301},{"size":3535,"mtime":1758913712301},{"size":3206,"mtime":1758913712301},{"size":3647,"mtime":1758913712301},{"size":11131,"mtime":1758913712301},{"size":6814,"mtime":1758913712301},{"size":9072,"mtime":1758913712301},{"size":2415,"mtime":1758913712301},{"size":2679,"mtime":1758913712301},{"size":2563,"mtime":1758913712301},{"size":6831,"mtime":1758913712301},{"size":2189,"mtime":1758913712301},{"size":31,"mtime":1758913698929,"results":"201","hashOfConfig":"195"},{"size":6851,"mtime":1758913698929,"results":"202","hashOfConfig":"195"},{"size":29411,"mtime":1758913698929,"results":"203","hashOfConfig":"195"},{"size":16226,"mtime":1758913698929,"results":"204","hashOfConfig":"195"},{"size":6594,"mtime":1758913698929,"results":"205","hashOfConfig":"195"},{"size":3689,"mtime":1758913698749,"results":"206","hashOfConfig":"195"},{"size":223,"mtime":1758913698753,"results":"207","hashOfConfig":"195"},{"size":118,"mtime":1758913698773,"results":"208","hashOfConfig":"195"},{"size":118,"mtime":1758913698773,"results":"209","hashOfConfig":"195"},{"size":119,"mtime":1758913698773,"results":"210","hashOfConfig":"195"},{"size":118,"mtime":1758913698773,"results":"211","hashOfConfig":"195"},{"size":116,"mtime":1758913698773,"results":"212","hashOfConfig":"195"},{"size":117,"mtime":1758913698773,"results":"213","hashOfConfig":"195"},{"size":3001,"mtime":1758913698773,"results":"214","hashOfConfig":"195"},{"size":468,"mtime":1758913698773,"results":"215","hashOfConfig":"195"},{"size":2746,"mtime":1758913698773,"results":"216","hashOfConfig":"195"},{"size":3169,"mtime":1758913698777,"results":"217","hashOfConfig":"195"},{"size":359,"mtime":1758913698777,"results":"218","hashOfConfig":"195"},{"size":3133,"mtime":1758913698777,"results":"219","hashOfConfig":"195"},{"size":1238,"mtime":1758913698777,"results":"220","hashOfConfig":"195"},{"size":2490,"mtime":1758913698777,"results":"221","hashOfConfig":"195"},{"size":3086,"mtime":1758913698777,"results":"222","hashOfConfig":"195"},{"size":2073,"mtime":1758913698781,"results":"223","hashOfConfig":"195"},{"size":3970,"mtime":1758913712301},{"size":13176,"mtime":1758913712301},{"size":39741,"mtime":1758913712301},{"size":339,"mtime":1758913698797,"results":"224","hashOfConfig":"195"},{"size":325,"mtime":1758913698797,"results":"225","hashOfConfig":"195"},{"size":11751,"mtime":1758913698797,"results":"226","hashOfConfig":"195"},{"size":2183,"mtime":1758913698801,"results":"227","hashOfConfig":"195"},{"size":6607,"mtime":1758913698801,"results":"228","hashOfConfig":"195"},{"size":5035,"mtime":1758913712301},{"size":256,"mtime":1758913698997,"results":"229","hashOfConfig":"195"},{"size":2519,"mtime":1758913712301},{"size":4602,"mtime":1758913712301},{"size":908,"mtime":1758913712301},{"size":284,"mtime":1758913712301},{"size":3088,"mtime":1758913712301},{"size":121,"mtime":1758913699985,"results":"230","hashOfConfig":"195"},{"size":10773,"mtime":1758913712301},{"size":857,"mtime":1758913712301},{"size":8010,"mtime":1758913712301},{"size":122,"mtime":1758913699549,"results":"231","hashOfConfig":"195"},{"size":3909,"mtime":1758913712301},{"size":315,"mtime":1758913712301},{"size":450,"mtime":1758913712301},{"size":4682,"mtime":1758913712301},{"size":11551,"mtime":1758913712301},{"size":132,"mtime":1758913699217,"results":"232","hashOfConfig":"195"},{"size":121,"mtime":1758913699165,"results":"233","hashOfConfig":"195"},{"size":2794,"mtime":1758913712301},{"size":6154,"mtime":1758913712301},{"size":6069,"mtime":1758913712301},{"size":7418,"mtime":1758913712301},{"size":1614,"mtime":1758913712301},{"size":4396,"mtime":1758913712301},{"size":8126,"mtime":1758913712301},{"size":2612,"mtime":1758913712301},{"size":118,"mtime":1758913699133,"results":"234","hashOfConfig":"195"},{"size":1033,"mtime":1758913712305},{"size":7317,"mtime":1758913712305},{"size":412,"mtime":1758913712305},{"size":1681,"mtime":1758913712305},{"size":1383,"mtime":1758913712305},{"size":118,"mtime":1758913699789,"results":"235","hashOfConfig":"195"},{"size":285,"mtime":1758913712305},{"size":2687,"mtime":1758913712305},{"size":1002,"mtime":1758913712305},{"size":121,"mtime":1758913699969,"results":"236","hashOfConfig":"195"},{"size":9611,"mtime":1758913712305},{"size":4346,"mtime":1758913712305},{"size":6062,"mtime":1758913712305},{"size":3651,"mtime":1758913712305},{"size":2675,"mtime":1758913712305},{"size":342,"mtime":1758913712305},{"size":125,"mtime":1758913699857,"results":"237","hashOfConfig":"195"},{"size":6191,"mtime":1758913712305},{"size":7765,"mtime":1758913712305},{"size":814,"mtime":1758913712305},{"size":5031,"mtime":1758913712305},{"size":1848,"mtime":1758913712305},{"size":314,"mtime":1758913712305},{"size":2008,"mtime":1758913712305},{"size":118,"mtime":1758913699949,"results":"238","hashOfConfig":"195"},{"size":3319,"mtime":1758913712305},{"size":3118,"mtime":1758913712305},{"size":121,"mtime":1758913699849,"results":"239","hashOfConfig":"195"},{"size":3033,"mtime":1758913712305},{"size":35,"mtime":1758913698801,"results":"240","hashOfConfig":"195"},{"size":12550,"mtime":1758913712305},{"size":1564,"mtime":1758913698801,"results":"241","hashOfConfig":"195"},{"size":1588,"mtime":1758913698801,"results":"242","hashOfConfig":"195"},{"size":9029,"mtime":1758913712305},{"size":60,"mtime":1758913712305},{"size":1123,"mtime":1758913712305},{"size":2012,"mtime":1758913712305},{"size":2222,"mtime":1758913712305},{"size":5480,"mtime":1758913712305},{"size":5559,"mtime":1758913712305},{"size":1185,"mtime":1758913712305},{"size":1690,"mtime":1758913712305},{"size":4870,"mtime":1758913712305},{"size":2794,"mtime":1758913712305},{"size":2453,"mtime":1758913712305},{"size":1109,"mtime":1758913712305},{"size":1659,"mtime":1758913712305},{"size":1177,"mtime":1758913712305},{"size":1072,"mtime":1758913712305},{"size":3534,"mtime":1758913712305},{"size":1612,"mtime":1758913712305},{"size":2485,"mtime":1758913712305},{"size":1165,"mtime":1758913712305},{"size":1197,"mtime":1758913712305},{"size":1850,"mtime":1758913712305},{"size":2541,"mtime":1758913712305},{"size":1192,"mtime":1758913712305},{"size":2749,"mtime":1758913712305},{"size":2418,"mtime":1758913712305},{"size":2055,"mtime":1758913712305},{"size":1978,"mtime":1758913712305},{"size":1020,"mtime":1758913712305},{"size":2043,"mtime":1758913712305},{"size":1698,"mtime":1758913698801,"results":"243","hashOfConfig":"195"},{"size":14827,"mtime":1758913712305},{"size":5918,"mtime":1758913698801,"results":"244","hashOfConfig":"195"},{"size":81651,"mtime":1758913698809,"results":"245","hashOfConfig":"195"},{"size":6180,"mtime":1758913698809,"results":"246","hashOfConfig":"195"},{"size":974,"mtime":1758913698809,"results":"247","hashOfConfig":"195"},{"size":727,"mtime":1758913712305},{"size":2144,"mtime":1758913698809,"results":"248","hashOfConfig":"195"},{"filePath":"249","messages":"250","suppressedMessages":"251","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"qspnjg",{"filePath":"252","messages":"253","suppressedMessages":"254","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"255","messages":"256","suppressedMessages":"257","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"258","messages":"259","suppressedMessages":"260","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"261","messages":"262","suppressedMessages":"263","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"264","messages":"265","suppressedMessages":"266","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"267","messages":"268","suppressedMessages":"269","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"270","messages":"271","suppressedMessages":"272","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"273","messages":"274","suppressedMessages":"275","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"276","messages":"277","suppressedMessages":"278","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"279","messages":"280","suppressedMessages":"281","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"282","messages":"283","suppressedMessages":"284","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"285","messages":"286","suppressedMessages":"287","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"288","messages":"289","suppressedMessages":"290","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"291","messages":"292","suppressedMessages":"293","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"294","messages":"295","suppressedMessages":"296","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"297","messages":"298","suppressedMessages":"299","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"300","messages":"301","suppressedMessages":"302","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"303","messages":"304","suppressedMessages":"305","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"306","messages":"307","suppressedMessages":"308","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"309","messages":"310","suppressedMessages":"311","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"312","messages":"313","suppressedMessages":"314","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"315","messages":"316","suppressedMessages":"317","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"318","messages":"319","suppressedMessages":"320","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"321","messages":"322","suppressedMessages":"323","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"324","messages":"325","suppressedMessages":"326","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"327","messages":"328","suppressedMessages":"329","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"330","messages":"331","suppressedMessages":"332","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"333","messages":"334","suppressedMessages":"335","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"336","messages":"337","suppressedMessages":"338","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"339","messages":"340","suppressedMessages":"341","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"342","messages":"343","suppressedMessages":"344","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"345","messages":"346","suppressedMessages":"347","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"348","messages":"349","suppressedMessages":"350","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"351","messages":"352","suppressedMessages":"353","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"354","messages":"355","suppressedMessages":"356","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"357","messages":"358","suppressedMessages":"359","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"360","messages":"361","suppressedMessages":"362","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"363","messages":"364","suppressedMessages":"365","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"366","messages":"367","suppressedMessages":"368","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"369","messages":"370","suppressedMessages":"371","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"372","messages":"373","suppressedMessages":"374","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"375","messages":"376","suppressedMessages":"377","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"378","messages":"379","suppressedMessages":"380","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"381","messages":"382","suppressedMessages":"383","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"384","messages":"385","suppressedMessages":"386","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"387","messages":"388","suppressedMessages":"389","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"390","messages":"391","suppressedMessages":"392","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"393","messages":"394","suppressedMessages":"395","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"396","messages":"397","suppressedMessages":"398","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"399","messages":"400","suppressedMessages":"401","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"402","messages":"403","suppressedMessages":"404","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"405","messages":"406","suppressedMessages":"407","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"408","messages":"409","suppressedMessages":"410","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/jest.config.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/code-tool-worker.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/compat.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/filtering.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/options.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/index.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/dynamic-tools.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/compat.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/options.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/packages/mcp-server/tests/tools.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/scripts/publish-packages.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/MultipartBody.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-bun.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-deno.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime-node.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/runtime.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types-deno.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types-node.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/auto/types.d.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/bun-runtime.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/index-deno.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/index.d.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/manual-types.d.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/node-runtime.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/node-types.d.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/registry.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/web-runtime.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/_shims/web-types.d.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/formats.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/index.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/stringify.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/types.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/internal/qs/utils.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resource.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/connect.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/benefits.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company/pay-statement-item.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris/company.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/hris.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/jobs.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/payroll.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/connections.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox/jobs.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources/sandbox.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/resources.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/shims/node.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/src/shims/web.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/form.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/empty-keys-cases.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/stringify.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/qs/utils.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/responses.test.ts",[],[],"/home/tempuser-imxaxr/run/codegen-output/finch/finch-node/tests/uploads.test.ts",[],[]] \ No newline at end of file +[{"/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/providers/list-providers.ts":"1","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts":"2","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/src/index.ts":"3","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/src/resources/index.ts":"4","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/src/resources/providers.ts":"5","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/src/resources/request-forwarding.ts":"6","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/tests/api-resources/request-forwarding.test.ts":"7"},{"size":4424,"mtime":1758919641943},{"size":5216,"mtime":1758919641943},{"size":13311,"mtime":1758919641943},{"size":1072,"mtime":1758919641943},{"size":4399,"mtime":1758919641943},{"size":3873,"mtime":1758919641943},{"size":1132,"mtime":1758919641943}] \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index 8ccb92451..402059019 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-1066fa342808844922c79f57fea5676ba822a7ff57f2143efa70bbadf5ed6428.yml -openapi_spec_hash: 794703adc5978c044203ee5b1a9eb4f0 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-fd18483a409117a70113398a50c7ff8bde92455d830e8027f2c2e3cc7a9c67ac.yml +openapi_spec_hash: cb88f02495e1cfd2d73d2f9e3728205d config_hash: 6d3585c0032e08d723d077d660fc8448 diff --git a/api.md b/api.md index 9558c4af0..f945660a8 100644 --- a/api.md +++ b/api.md @@ -183,10 +183,11 @@ Methods: Types: - Provider +- ProviderListResponse Methods: -- client.providers.list() -> ProvidersSinglePage +- client.providers.list() -> ProviderListResponsesSinglePage # Account diff --git a/packages/mcp-server/src/tools/providers/list-providers.ts b/packages/mcp-server/src/tools/providers/list-providers.ts index c1c5a8a60..9be1cb450 100644 --- a/packages/mcp-server/src/tools/providers/list-providers.ts +++ b/packages/mcp-server/src/tools/providers/list-providers.ts @@ -1,5 +1,6 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. +import { maybeFilter } from '@tryfinch/finch-api-mcp/filtering'; import { Metadata, asTextContentResult } from '@tryfinch/finch-api-mcp/tools/types'; import { Tool } from '@modelcontextprotocol/sdk/types.js'; @@ -16,10 +17,18 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'list_providers', - description: 'Return details on all available payroll and HR systems.', + description: + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nReturn details on all available payroll and HR systems.\n\n# Response Schema\n```json\n{\n type: 'array',\n items: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'The id of the payroll provider used in Connect.'\n },\n display_name: {\n type: 'string',\n description: 'The display name of the payroll provider.'\n },\n products: {\n type: 'array',\n description: 'The list of Finch products supported on this payroll provider.',\n items: {\n type: 'string'\n }\n },\n authentication_methods: {\n type: 'array',\n description: 'The authentication methods supported by the provider.',\n items: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description: 'The type of authentication method',\n enum: [ 'assisted',\n 'credential',\n 'api_token',\n 'api_credential',\n 'oauth',\n 'api'\n ]\n },\n benefits_support: {\n type: 'object',\n description: 'The supported benefit types and their configurations',\n additionalProperties: true\n },\n supported_fields: {\n type: 'object',\n description: 'The supported fields for each Finch product',\n additionalProperties: true\n }\n },\n required: [ 'type'\n ]\n }\n },\n beta: {\n type: 'boolean',\n description: '`true` if the integration is in a beta state, `false` otherwise'\n },\n icon: {\n type: 'string',\n description: 'The url to the official icon of the payroll provider.'\n },\n logo: {\n type: 'string',\n description: 'The url to the official logo of the payroll provider.'\n },\n manual: {\n type: 'boolean',\n description: '[DEPRECATED] Whether the Finch integration with this provider uses the Assisted Connect Flow by default. This field is now deprecated. Please check for a `type` of `assisted` in the `authentication_methods` field instead.'\n },\n mfa_required: {\n type: 'boolean',\n description: 'whether MFA is required for the provider.'\n },\n primary_color: {\n type: 'string',\n description: 'The hex code for the primary color of the payroll provider.'\n }\n },\n required: [ 'id',\n 'display_name',\n 'products'\n ]\n }\n}\n```", inputSchema: { type: 'object', - properties: {}, + properties: { + jq_filter: { + type: 'string', + title: 'jq Filter', + description: + 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', + }, + }, required: [], }, annotations: { @@ -28,8 +37,9 @@ export const tool: Tool = { }; export const handler = async (client: Finch, args: Record | undefined) => { + const { jq_filter } = args as any; const response = await client.providers.list().asResponse(); - return asTextContentResult(await response.json()); + return asTextContentResult(await maybeFilter(jq_filter, await response.json())); }; export default { metadata, tool, handler }; diff --git a/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts b/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts index 56d2a3901..a104c4d3f 100644 --- a/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts +++ b/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'forward_request_forwarding', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nThe Forward API allows you to make direct requests to an employment system. If Finch's unified API\ndoesn't have a data model that cleanly fits your needs, then Forward allows you to push or pull\ndata models directly against an integration's API.\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n data: {\n type: 'string',\n description: 'A string representation of the HTTP response body of the forwarded request\\'s response received from the underlying integration\\'s API. This field may be null in the case where the upstream system\\'s response is empty.'\n },\n headers: {\n type: 'object',\n description: 'The HTTP headers of the forwarded request\\'s response, exactly as received from the underlying integration\\'s API.',\n additionalProperties: true\n },\n request: {\n type: 'object',\n description: 'An object containing details of your original forwarded request, for your ease of reference.',\n properties: {\n data: {\n type: 'string',\n description: 'The body that was specified for the forwarded request. If a value was not specified in the original request, this value will be returned as null ; otherwise, this value will always be returned as a string.'\n },\n headers: {\n type: 'object',\n description: 'The specified HTTP headers that were included in the forwarded request. If no headers were specified, this will be returned as `null`.',\n additionalProperties: true\n },\n method: {\n type: 'string',\n description: 'The HTTP method that was specified for the forwarded request. Valid values include: `GET` , `POST` , `PUT` , `DELETE` , and `PATCH`.'\n },\n params: {\n type: 'object',\n description: 'The query parameters that were included in the forwarded request. If no query parameters were specified, this will be returned as `null`.',\n additionalProperties: true\n },\n route: {\n type: 'string',\n description: 'The URL route path that was specified for the forwarded request.'\n }\n },\n required: [ 'data',\n 'headers',\n 'method',\n 'params',\n 'route'\n ]\n },\n statusCode: {\n type: 'integer',\n description: 'The HTTP status code of the forwarded request\\'s response, exactly received from the underlying integration\\'s API. This value will be returned as an integer.'\n }\n },\n required: [ 'data',\n 'headers',\n 'request',\n 'statusCode'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nThe Forward API allows you to make direct requests to an employment system. If Finch's unified API\ndoesn't have a data model that cleanly fits your needs, then Forward allows you to push or pull\ndata models directly against an integration's API.\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n request: {\n type: 'object',\n description: 'An object containing details of your original forwarded request, for your ease of reference.',\n properties: {\n method: {\n type: 'string',\n description: 'The HTTP method that was specified for the forwarded request. Valid values include: `GET` , `POST` , `PUT` , `DELETE` , and `PATCH`.'\n },\n route: {\n type: 'string',\n description: 'The URL route path that was specified for the forwarded request.'\n },\n data: {\n anyOf: [ {\n type: 'string'\n },\n {\n type: 'object',\n additionalProperties: true\n }\n ],\n description: 'The body that was specified for the forwarded request.'\n },\n headers: {\n type: 'object',\n description: 'The HTTP headers that were specified for the forwarded request.',\n additionalProperties: true\n },\n params: {\n type: 'object',\n description: 'The query parameters that were specified for the forwarded request.',\n additionalProperties: true\n }\n },\n required: [ 'method',\n 'route'\n ]\n },\n statusCode: {\n type: 'integer',\n description: 'The HTTP status code of the forwarded request\\'s response, exactly received from the underlying integration\\'s API. This value will be returned as an integer.'\n },\n data: {\n type: 'string',\n description: 'A string representation of the HTTP response body of the forwarded request\\'s response received from the underlying integration\\'s API. This field may be null in the case where the upstream system\\'s response is empty.'\n },\n headers: {\n type: 'object',\n description: 'The HTTP headers of the forwarded request\\'s response, exactly as received from the underlying integration\\'s API.',\n additionalProperties: true\n }\n },\n required: [ 'request',\n 'statusCode'\n ]\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/src/index.ts b/src/index.ts index bc0bdd404..000fafb69 100644 --- a/src/index.ts +++ b/src/index.ts @@ -17,7 +17,12 @@ import * as Uploads from './uploads'; import * as API from './resources/index'; import { AccessTokenCreateParams, AccessTokens, CreateAccessTokenResponse } from './resources/access-tokens'; import { Account, DisconnectResponse, Introspection } from './resources/account'; -import { Provider, Providers, ProvidersSinglePage } from './resources/providers'; +import { + Provider, + ProviderListResponse, + ProviderListResponsesSinglePage, + Providers, +} from './resources/providers'; import { RequestForwarding, RequestForwardingForwardParams, @@ -360,7 +365,7 @@ export class Finch extends Core.APIClient { Finch.AccessTokens = AccessTokens; Finch.HRIS = HRIS; Finch.Providers = Providers; -Finch.ProvidersSinglePage = ProvidersSinglePage; +Finch.ProviderListResponsesSinglePage = ProviderListResponsesSinglePage; Finch.Account = Account; Finch.Webhooks = Webhooks; Finch.RequestForwarding = RequestForwarding; @@ -395,7 +400,12 @@ export declare namespace Finch { export { HRIS as HRIS, type Income as Income, type Location as Location, type Money as Money }; - export { Providers as Providers, type Provider as Provider, ProvidersSinglePage as ProvidersSinglePage }; + export { + Providers as Providers, + type Provider as Provider, + type ProviderListResponse as ProviderListResponse, + ProviderListResponsesSinglePage as ProviderListResponsesSinglePage, + }; export { Account as Account, diff --git a/src/resources/index.ts b/src/resources/index.ts index 4e468947e..85c4c42db 100644 --- a/src/resources/index.ts +++ b/src/resources/index.ts @@ -7,7 +7,12 @@ export { Connect } from './connect/connect'; export { HRIS, type Income, type Location, type Money } from './hris/hris'; export { Jobs } from './jobs/jobs'; export { Payroll } from './payroll/payroll'; -export { ProvidersSinglePage, Providers, type Provider } from './providers'; +export { + ProviderListResponsesSinglePage, + Providers, + type Provider, + type ProviderListResponse, +} from './providers'; export { RequestForwarding, type RequestForwardingForwardResponse, diff --git a/src/resources/providers.ts b/src/resources/providers.ts index 4a5157081..175f23aa5 100644 --- a/src/resources/providers.ts +++ b/src/resources/providers.ts @@ -2,40 +2,46 @@ import { APIResource } from '../resource'; import * as Core from '../core'; -import * as BenefitsAPI from './hris/benefits/benefits'; import { SinglePage } from '../pagination'; export class Providers extends APIResource { /** * Return details on all available payroll and HR systems. */ - list(options?: Core.RequestOptions): Core.PagePromise { - return this._client.getAPIList('/providers', ProvidersSinglePage, options); + list( + options?: Core.RequestOptions, + ): Core.PagePromise { + return this._client.getAPIList('/providers', ProviderListResponsesSinglePage, options); } } -export class ProvidersSinglePage extends SinglePage {} +export class ProviderListResponsesSinglePage extends SinglePage {} export interface Provider { /** * The id of the payroll provider used in Connect. */ - id?: string; + id: string; /** - * The list of authentication methods supported by the provider. + * The display name of the payroll provider. */ - authentication_methods?: Array; + display_name: string; /** - * `true` if the integration is in a beta state, `false` otherwise + * The list of Finch products supported on this payroll provider. */ - beta?: boolean; + products: Array; /** - * The display name of the payroll provider. + * The authentication methods supported by the provider. */ - display_name?: string; + authentication_methods?: Array; + + /** + * `true` if the integration is in a beta state, `false` otherwise + */ + beta?: boolean; /** * The url to the official icon of the payroll provider. @@ -48,9 +54,9 @@ export interface Provider { logo?: string; /** - * [DEPRECATED] Whether the Finch integration with this provider uses the Assisted - * Connect Flow by default. This field is now deprecated. Please check for a `type` - * of `assisted` in the `authentication_methods` field instead. + * @deprecated [DEPRECATED] Whether the Finch integration with this provider uses + * the Assisted Connect Flow by default. This field is now deprecated. Please check + * for a `type` of `assisted` in the `authentication_methods` field instead. */ manual?: boolean; @@ -63,414 +69,106 @@ export interface Provider { * The hex code for the primary color of the payroll provider. */ primary_color?: string; - - /** - * The list of Finch products supported on this payroll provider. - */ - products?: Array; } export namespace Provider { export interface AuthenticationMethod { /** - * Each benefit type and their supported features. If the benefit type is not - * supported, the property will be null + * The type of authentication method */ - benefits_support?: BenefitsAPI.BenefitsSupport | null; + type: 'assisted' | 'credential' | 'api_token' | 'api_credential' | 'oauth' | 'api'; /** - * The supported data fields returned by our HR and payroll endpoints + * The supported benefit types and their configurations */ - supported_fields?: AuthenticationMethod.SupportedFields | null; + benefits_support?: { [key: string]: unknown }; /** - * The type of authentication method. + * The supported fields for each Finch product */ - type?: 'assisted' | 'credential' | 'api_token' | 'api_credential' | 'oauth'; + supported_fields?: { [key: string]: unknown }; } +} - export namespace AuthenticationMethod { - /** - * The supported data fields returned by our HR and payroll endpoints - */ - export interface SupportedFields { - company?: SupportedFields.Company; - - directory?: SupportedFields.Directory; - - employment?: SupportedFields.Employment; - - individual?: SupportedFields.Individual; - - pay_group?: SupportedFields.PayGroup; - - pay_statement?: SupportedFields.PayStatement; - - payment?: SupportedFields.Payment; - } - - export namespace SupportedFields { - export interface Company { - id?: boolean; - - accounts?: Company.Accounts; - - departments?: Company.Departments; - - ein?: boolean; - - entity?: Company.Entity; - - legal_name?: boolean; - - locations?: Company.Locations; - - primary_email?: boolean; - - primary_phone_number?: boolean; - } - - export namespace Company { - export interface Accounts { - account_name?: boolean; - - account_number?: boolean; - - account_type?: boolean; - - institution_name?: boolean; - - routing_number?: boolean; - } - - export interface Departments { - name?: boolean; - - parent?: Departments.Parent; - } - - export namespace Departments { - export interface Parent { - name?: boolean; - } - } - - export interface Entity { - subtype?: boolean; - - type?: boolean; - } - - export interface Locations { - city?: boolean; - - country?: boolean; - - line1?: boolean; - - line2?: boolean; - - postal_code?: boolean; - - state?: boolean; - } - } - - export interface Directory { - individuals?: Directory.Individuals; - - paging?: Directory.Paging; - } - - export namespace Directory { - export interface Individuals { - id?: boolean; - - department?: boolean; - - first_name?: boolean; - - is_active?: boolean; - - last_name?: boolean; - - manager?: Individuals.Manager; - - middle_name?: boolean; - } - - export namespace Individuals { - export interface Manager { - id?: boolean; - } - } - - export interface Paging { - count?: boolean; - - offset?: boolean; - } - } - - export interface Employment { - id?: boolean; - - class_code?: boolean; - - custom_fields?: boolean; - - department?: Employment.Department; - - employment?: Employment.Employment; - - employment_status?: boolean; - - end_date?: boolean; - - first_name?: boolean; - - income?: Employment.Income; - - income_history?: boolean; - - is_active?: boolean; - - last_name?: boolean; - - location?: Employment.Location; - - manager?: Employment.Manager; - - middle_name?: boolean; - - start_date?: boolean; - - title?: boolean; - } - - export namespace Employment { - export interface Department { - name?: boolean; - } - - export interface Employment { - subtype?: boolean; - - type?: boolean; - } - - export interface Income { - amount?: boolean; - - currency?: boolean; - - unit?: boolean; - } - - export interface Location { - city?: boolean; - - country?: boolean; - - line1?: boolean; - - line2?: boolean; - - postal_code?: boolean; - - state?: boolean; - } - - export interface Manager { - id?: boolean; - } - } - - export interface Individual { - id?: boolean; - - dob?: boolean; - - emails?: Individual.Emails; - - encrypted_ssn?: boolean; - - ethnicity?: boolean; - - first_name?: boolean; - - gender?: boolean; - - last_name?: boolean; - - middle_name?: boolean; - - phone_numbers?: Individual.PhoneNumbers; - - preferred_name?: boolean; - - residence?: Individual.Residence; - - ssn?: boolean; - } - - export namespace Individual { - export interface Emails { - data?: boolean; - - type?: boolean; - } - - export interface PhoneNumbers { - data?: boolean; - - type?: boolean; - } - - export interface Residence { - city?: boolean; - - country?: boolean; - - line1?: boolean; - - line2?: boolean; - - postal_code?: boolean; - - state?: boolean; - } - } - - export interface PayGroup { - id?: boolean; - - individual_ids?: boolean; - - name?: boolean; - - pay_frequencies?: boolean; - } - - export interface PayStatement { - paging?: PayStatement.Paging; - - pay_statements?: PayStatement.PayStatements; - } - - export namespace PayStatement { - export interface Paging { - count: boolean; - - offset: boolean; - } - - export interface PayStatements { - earnings?: PayStatements.Earnings; - - employee_deductions?: PayStatements.EmployeeDeductions; - - employer_contributions?: PayStatements.EmployerContributions; - - gross_pay?: boolean; - - individual_id?: boolean; - - net_pay?: boolean; - - payment_method?: boolean; - - taxes?: PayStatements.Taxes; - - total_hours?: boolean; - - type?: boolean; - } - - export namespace PayStatements { - export interface Earnings { - amount?: boolean; - - currency?: boolean; - - name?: boolean; - - type?: boolean; - } - - export interface EmployeeDeductions { - amount?: boolean; - - currency?: boolean; - - name?: boolean; - - pre_tax?: boolean; - - type?: boolean; - } - - export interface EmployerContributions { - amount?: boolean; - - currency?: boolean; - - name?: boolean; - } - - export interface Taxes { - amount?: boolean; - - currency?: boolean; - - employer?: boolean; - - name?: boolean; - - type?: boolean; - } - } - } - - export interface Payment { - id?: boolean; - - company_debit?: boolean; +export interface ProviderListResponse { + /** + * The id of the payroll provider used in Connect. + */ + id: string; - debit_date?: boolean; + /** + * The display name of the payroll provider. + */ + display_name: string; - employee_taxes?: boolean; + /** + * The list of Finch products supported on this payroll provider. + */ + products: Array; - employer_taxes?: boolean; + /** + * The authentication methods supported by the provider. + */ + authentication_methods?: Array; - gross_pay?: boolean; + /** + * `true` if the integration is in a beta state, `false` otherwise + */ + beta?: boolean; - individual_ids?: boolean; + /** + * The url to the official icon of the payroll provider. + */ + icon?: string; - net_pay?: boolean; + /** + * The url to the official logo of the payroll provider. + */ + logo?: string; - pay_date?: boolean; + /** + * @deprecated [DEPRECATED] Whether the Finch integration with this provider uses + * the Assisted Connect Flow by default. This field is now deprecated. Please check + * for a `type` of `assisted` in the `authentication_methods` field instead. + */ + manual?: boolean; - pay_frequencies?: boolean; + /** + * whether MFA is required for the provider. + */ + mfa_required?: boolean; - pay_group_ids?: boolean; + /** + * The hex code for the primary color of the payroll provider. + */ + primary_color?: string; +} - pay_period?: Payment.PayPeriod; - } +export namespace ProviderListResponse { + export interface AuthenticationMethod { + /** + * The type of authentication method + */ + type: 'assisted' | 'credential' | 'api_token' | 'api_credential' | 'oauth' | 'api'; - export namespace Payment { - export interface PayPeriod { - end_date?: boolean; + /** + * The supported benefit types and their configurations + */ + benefits_support?: { [key: string]: unknown }; - start_date?: boolean; - } - } - } + /** + * The supported fields for each Finch product + */ + supported_fields?: { [key: string]: unknown }; } } -Providers.ProvidersSinglePage = ProvidersSinglePage; +Providers.ProviderListResponsesSinglePage = ProviderListResponsesSinglePage; export declare namespace Providers { - export { type Provider as Provider, ProvidersSinglePage as ProvidersSinglePage }; + export { + type Provider as Provider, + type ProviderListResponse as ProviderListResponse, + ProviderListResponsesSinglePage as ProviderListResponsesSinglePage, + }; } diff --git a/src/resources/request-forwarding.ts b/src/resources/request-forwarding.ts index 32dcb5a00..6bc5fcbf5 100644 --- a/src/resources/request-forwarding.ts +++ b/src/resources/request-forwarding.ts @@ -9,16 +9,6 @@ export class RequestForwarding extends APIResource { * Finch's unified API doesn't have a data model that cleanly fits your needs, then * Forward allows you to push or pull data models directly against an integration's * API. - * - * @example - * ```ts - * const response = await client.requestForwarding.forward({ - * method: 'POST', - * route: '/people/search', - * headers: { 'content-type': 'application/json' }, - * params: { showInactive: true, humanReadable: true }, - * }); - * ``` */ forward( body: RequestForwardingForwardParams, @@ -29,19 +19,6 @@ export class RequestForwarding extends APIResource { } export interface RequestForwardingForwardResponse { - /** - * A string representation of the HTTP response body of the forwarded request's - * response received from the underlying integration's API. This field may be null - * in the case where the upstream system's response is empty. - */ - data: string | null; - - /** - * The HTTP headers of the forwarded request's response, exactly as received from - * the underlying integration's API. - */ - headers: unknown | null; - /** * An object containing details of your original forwarded request, for your ease * of reference. @@ -53,6 +30,19 @@ export interface RequestForwardingForwardResponse { * the underlying integration's API. This value will be returned as an integer. */ statusCode: number; + + /** + * A string representation of the HTTP response body of the forwarded request's + * response received from the underlying integration's API. This field may be null + * in the case where the upstream system's response is empty. + */ + data?: string | null; + + /** + * The HTTP headers of the forwarded request's response, exactly as received from + * the underlying integration's API. + */ + headers?: { [key: string]: unknown } | null; } export namespace RequestForwardingForwardResponse { @@ -62,34 +52,30 @@ export namespace RequestForwardingForwardResponse { */ export interface Request { /** - * The body that was specified for the forwarded request. If a value was not - * specified in the original request, this value will be returned as null ; - * otherwise, this value will always be returned as a string. + * The HTTP method that was specified for the forwarded request. Valid values + * include: `GET` , `POST` , `PUT` , `DELETE` , and `PATCH`. */ - data: string | null; + method: string; /** - * The specified HTTP headers that were included in the forwarded request. If no - * headers were specified, this will be returned as `null`. + * The URL route path that was specified for the forwarded request. */ - headers: unknown | null; + route: string; /** - * The HTTP method that was specified for the forwarded request. Valid values - * include: `GET` , `POST` , `PUT` , `DELETE` , and `PATCH`. + * The body that was specified for the forwarded request. */ - method: string; + data?: string | { [key: string]: unknown } | null; /** - * The query parameters that were included in the forwarded request. If no query - * parameters were specified, this will be returned as `null`. + * The HTTP headers that were specified for the forwarded request. */ - params: unknown | null; + headers?: { [key: string]: unknown } | null; /** - * The URL route path that was specified for the forwarded request. + * The query parameters that were specified for the forwarded request. */ - route: string; + params?: { [key: string]: unknown } | null; } } @@ -118,13 +104,13 @@ export interface RequestForwardingForwardParams { * specified as an object of key-value pairs. Example: * `{"Content-Type": "application/xml", "X-API-Version": "v1" }` */ - headers?: unknown | null; + headers?: { [key: string]: unknown } | null; /** * The query parameters for the forwarded request. This value must be specified as * a valid JSON object rather than a query string. */ - params?: unknown | null; + params?: { [key: string]: unknown } | null; } export declare namespace RequestForwarding { diff --git a/tests/api-resources/request-forwarding.test.ts b/tests/api-resources/request-forwarding.test.ts index 69f7077f1..cdc8b7143 100644 --- a/tests/api-resources/request-forwarding.test.ts +++ b/tests/api-resources/request-forwarding.test.ts @@ -10,7 +10,7 @@ const client = new Finch({ describe('resource requestForwarding', () => { test('forward: only required params', async () => { - const responsePromise = client.requestForwarding.forward({ method: 'POST', route: '/people/search' }); + const responsePromise = client.requestForwarding.forward({ method: 'method', route: 'route' }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -22,11 +22,11 @@ describe('resource requestForwarding', () => { test('forward: required and optional params', async () => { const response = await client.requestForwarding.forward({ - method: 'POST', - route: '/people/search', - data: null, - headers: { 'content-type': 'application/json' }, - params: { showInactive: true, humanReadable: true }, + method: 'method', + route: 'route', + data: 'data', + headers: { foo: 'bar' }, + params: { foo: 'bar' }, }); }); }); From 4d901569e987fa9c93c12ae77844972b4655fa8f Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 26 Sep 2025 23:01:14 +0000 Subject: [PATCH 33/51] chore(internal): ignore .eslintcache --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 74cba8957..d62bea500 100644 --- a/.gitignore +++ b/.gitignore @@ -7,5 +7,6 @@ dist dist-deno /*.tgz .idea/ +.eslintcache dist-bundle *.mcpb From 277ba31b242825bd569a6566a8f2a136ec0b595d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 29 Sep 2025 16:53:47 +0000 Subject: [PATCH 34/51] fix(mcp): fix cli argument parsing logic --- .eslintcache | 2 +- packages/mcp-server/src/options.ts | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.eslintcache b/.eslintcache index 9ecd95319..0b562d683 100644 --- a/.eslintcache +++ b/.eslintcache @@ -1 +1 @@ -[{"/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/providers/list-providers.ts":"1","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts":"2","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/src/index.ts":"3","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/src/resources/index.ts":"4","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/src/resources/providers.ts":"5","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/src/resources/request-forwarding.ts":"6","/home/tempuser-v8cs6r/run/codegen-output/finch/finch-node/tests/api-resources/request-forwarding.test.ts":"7"},{"size":4424,"mtime":1758919641943},{"size":5216,"mtime":1758919641943},{"size":13311,"mtime":1758919641943},{"size":1072,"mtime":1758919641943},{"size":4399,"mtime":1758919641943},{"size":3873,"mtime":1758919641943},{"size":1132,"mtime":1758919641943}] \ No newline at end of file +[{"/home/tempuser-y52ps0/run/codegen-output/finch/finch-node/packages/mcp-server/src/options.ts":"1"},{"size":17015,"mtime":1759164825169,"results":"2","hashOfConfig":"3"},{"filePath":"4","messages":"5","suppressedMessages":"6","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"br52zc","/home/tempuser-y52ps0/run/codegen-output/finch/finch-node/packages/mcp-server/src/options.ts",[],[]] \ No newline at end of file diff --git a/packages/mcp-server/src/options.ts b/packages/mcp-server/src/options.ts index 348a33d0a..4fe3b9875 100644 --- a/packages/mcp-server/src/options.ts +++ b/packages/mcp-server/src/options.ts @@ -247,9 +247,10 @@ export function parseCLIOptions(): CLIOptions { } const shouldIncludeToolType = (toolType: 'dynamic' | 'all' | 'code' | 'docs') => - explicitTools ? argv.tools?.includes(toolType) && !argv.noTools?.includes(toolType) : undefined; + argv.noTools?.includes(toolType) ? false + : argv.tools?.includes(toolType) ? true + : undefined; - const explicitTools = Boolean(argv.tools || argv.noTools); const includeDynamicTools = shouldIncludeToolType('dynamic'); const includeAllTools = shouldIncludeToolType('all'); const includeCodeTools = shouldIncludeToolType('code'); From 90b7ae260d427cebb7bcd7f2d3e854a0efaccd19 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 29 Sep 2025 21:27:01 +0000 Subject: [PATCH 35/51] fix(mcp): resolve a linting issue in server code --- packages/mcp-server/src/code-tool-paths.cts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mcp-server/src/code-tool-paths.cts b/packages/mcp-server/src/code-tool-paths.cts index 3d6655afc..15ce7f555 100644 --- a/packages/mcp-server/src/code-tool-paths.cts +++ b/packages/mcp-server/src/code-tool-paths.cts @@ -1,3 +1,3 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -export const workerPath = require.resolve('./code-tool-worker.mjs') +export const workerPath = require.resolve('./code-tool-worker.mjs'); From 0601d2aca7eeb80b8967d3bc89dea5b5ab527565 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 29 Sep 2025 22:31:37 +0000 Subject: [PATCH 36/51] chore: update lockfile --- packages/mcp-server/yarn.lock | 306 +--------------------------------- 1 file changed, 4 insertions(+), 302 deletions(-) diff --git a/packages/mcp-server/yarn.lock b/packages/mcp-server/yarn.lock index ad819835d..966d05755 100644 --- a/packages/mcp-server/yarn.lock +++ b/packages/mcp-server/yarn.lock @@ -10,20 +10,6 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@anthropic-ai/dxt@^0.2.6": - version "0.2.6" - resolved "https://registry.yarnpkg.com/@anthropic-ai/dxt/-/dxt-0.2.6.tgz#636197c3d083c9136ac3b5a11d2ba82477fdc2c6" - integrity sha512-5VSqKRpkytTYh5UJz9jOaI8zLXNCe4Gc+ArKGFV6IeWnEPP0Qnd0k+V3pO8cYzp92Puf/+Cgo0xc4haE0azTXg== - dependencies: - "@inquirer/prompts" "^6.0.1" - commander "^13.1.0" - fflate "^0.8.2" - galactus "^1.0.0" - ignore "^7.0.5" - node-forge "^1.3.1" - pretty-bytes "^5.6.0" - zod "^3.25.67" - "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" @@ -350,144 +336,6 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== -"@inquirer/checkbox@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-3.0.1.tgz#0a57f704265f78c36e17f07e421b98efb4b9867b" - integrity sha512-0hm2nrToWUdD6/UHnel/UKGdk1//ke5zGUpHIvk5ZWmaKezlGxZkOJXNSWsdxO/rEqTkbB3lNC2J6nBElV2aAQ== - dependencies: - "@inquirer/core" "^9.2.1" - "@inquirer/figures" "^1.0.6" - "@inquirer/type" "^2.0.0" - ansi-escapes "^4.3.2" - yoctocolors-cjs "^2.1.2" - -"@inquirer/confirm@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-4.0.1.tgz#9106d6bffa0b2fdd0e4f60319b6f04f2e06e6e25" - integrity sha512-46yL28o2NJ9doViqOy0VDcoTzng7rAb6yPQKU7VDLqkmbCaH4JqK4yk4XqlzNWy9PVC5pG1ZUXPBQv+VqnYs2w== - dependencies: - "@inquirer/core" "^9.2.1" - "@inquirer/type" "^2.0.0" - -"@inquirer/core@^9.2.1": - version "9.2.1" - resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-9.2.1.tgz#677c49dee399c9063f31e0c93f0f37bddc67add1" - integrity sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg== - dependencies: - "@inquirer/figures" "^1.0.6" - "@inquirer/type" "^2.0.0" - "@types/mute-stream" "^0.0.4" - "@types/node" "^22.5.5" - "@types/wrap-ansi" "^3.0.0" - ansi-escapes "^4.3.2" - cli-width "^4.1.0" - mute-stream "^1.0.0" - signal-exit "^4.1.0" - strip-ansi "^6.0.1" - wrap-ansi "^6.2.0" - yoctocolors-cjs "^2.1.2" - -"@inquirer/editor@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-3.0.1.tgz#d109f21e050af6b960725388cb1c04214ed7c7bc" - integrity sha512-VA96GPFaSOVudjKFraokEEmUQg/Lub6OXvbIEZU1SDCmBzRkHGhxoFAVaF30nyiB4m5cEbDgiI2QRacXZ2hw9Q== - dependencies: - "@inquirer/core" "^9.2.1" - "@inquirer/type" "^2.0.0" - external-editor "^3.1.0" - -"@inquirer/expand@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-3.0.1.tgz#aed9183cac4d12811be47a4a895ea8e82a17e22c" - integrity sha512-ToG8d6RIbnVpbdPdiN7BCxZGiHOTomOX94C2FaT5KOHupV40tKEDozp12res6cMIfRKrXLJyexAZhWVHgbALSQ== - dependencies: - "@inquirer/core" "^9.2.1" - "@inquirer/type" "^2.0.0" - yoctocolors-cjs "^2.1.2" - -"@inquirer/figures@^1.0.6": - version "1.0.13" - resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.13.tgz#ad0afd62baab1c23175115a9b62f511b6a751e45" - integrity sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw== - -"@inquirer/input@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-3.0.1.tgz#de63d49e516487388508d42049deb70f2cb5f28e" - integrity sha512-BDuPBmpvi8eMCxqC5iacloWqv+5tQSJlUafYWUe31ow1BVXjW2a5qe3dh4X/Z25Wp22RwvcaLCc2siHobEOfzg== - dependencies: - "@inquirer/core" "^9.2.1" - "@inquirer/type" "^2.0.0" - -"@inquirer/number@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-2.0.1.tgz#b9863080d02ab7dc2e56e16433d83abea0f2a980" - integrity sha512-QpR8jPhRjSmlr/mD2cw3IR8HRO7lSVOnqUvQa8scv1Lsr3xoAMMworcYW3J13z3ppjBFBD2ef1Ci6AE5Qn8goQ== - dependencies: - "@inquirer/core" "^9.2.1" - "@inquirer/type" "^2.0.0" - -"@inquirer/password@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-3.0.1.tgz#2a9a9143591088336bbd573bcb05d5bf080dbf87" - integrity sha512-haoeEPUisD1NeE2IanLOiFr4wcTXGWrBOyAyPZi1FfLJuXOzNmxCJPgUrGYKVh+Y8hfGJenIfz5Wb/DkE9KkMQ== - dependencies: - "@inquirer/core" "^9.2.1" - "@inquirer/type" "^2.0.0" - ansi-escapes "^4.3.2" - -"@inquirer/prompts@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-6.0.1.tgz#43f5c0ed35c5ebfe52f1d43d46da2d363d950071" - integrity sha512-yl43JD/86CIj3Mz5mvvLJqAOfIup7ncxfJ0Btnl0/v5TouVUyeEdcpknfgc+yMevS/48oH9WAkkw93m7otLb/A== - dependencies: - "@inquirer/checkbox" "^3.0.1" - "@inquirer/confirm" "^4.0.1" - "@inquirer/editor" "^3.0.1" - "@inquirer/expand" "^3.0.1" - "@inquirer/input" "^3.0.1" - "@inquirer/number" "^2.0.1" - "@inquirer/password" "^3.0.1" - "@inquirer/rawlist" "^3.0.1" - "@inquirer/search" "^2.0.1" - "@inquirer/select" "^3.0.1" - -"@inquirer/rawlist@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-3.0.1.tgz#729def358419cc929045f264131878ed379e0af3" - integrity sha512-VgRtFIwZInUzTiPLSfDXK5jLrnpkuSOh1ctfaoygKAdPqjcjKYmGh6sCY1pb0aGnCGsmhUxoqLDUAU0ud+lGXQ== - dependencies: - "@inquirer/core" "^9.2.1" - "@inquirer/type" "^2.0.0" - yoctocolors-cjs "^2.1.2" - -"@inquirer/search@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-2.0.1.tgz#69b774a0a826de2e27b48981d01bc5ad81e73721" - integrity sha512-r5hBKZk3g5MkIzLVoSgE4evypGqtOannnB3PKTG9NRZxyFRKcfzrdxXXPcoJQsxJPzvdSU2Rn7pB7lw0GCmGAg== - dependencies: - "@inquirer/core" "^9.2.1" - "@inquirer/figures" "^1.0.6" - "@inquirer/type" "^2.0.0" - yoctocolors-cjs "^2.1.2" - -"@inquirer/select@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-3.0.1.tgz#1df9ed27fb85a5f526d559ac5ce7cc4e9dc4e7ec" - integrity sha512-lUDGUxPhdWMkN/fHy1Lk7pF3nK1fh/gqeyWXmctefhxLYxlDsc7vsPBEpxrfVGDsVdyYJsiJoD4bJ1b623cV1Q== - dependencies: - "@inquirer/core" "^9.2.1" - "@inquirer/figures" "^1.0.6" - "@inquirer/type" "^2.0.0" - ansi-escapes "^4.3.2" - yoctocolors-cjs "^2.1.2" - -"@inquirer/type@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-2.0.0.tgz#08fa513dca2cb6264fe1b0a2fabade051444e3f6" - integrity sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag== - dependencies: - mute-stream "^1.0.0" - "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -947,13 +795,6 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== -"@types/mute-stream@^0.0.4": - version "0.0.4" - resolved "https://registry.yarnpkg.com/@types/mute-stream/-/mute-stream-0.0.4.tgz#77208e56a08767af6c5e1237be8888e2f255c478" - integrity sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow== - dependencies: - "@types/node" "*" - "@types/node@*": version "22.15.17" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.15.17.tgz#355ccec95f705b664e4332bb64a7f07db30b7055" @@ -961,13 +802,6 @@ dependencies: undici-types "~6.21.0" -"@types/node@^22.5.5": - version "22.18.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.18.0.tgz#9e4709be4f104e3568f7dd1c71e2949bf147a47b" - integrity sha512-m5ObIqwsUp6BZzyiy4RdZpzWGub9bqLJMvZDD0QMXhxjqMHMENlj+SqF5QxoUwaQNFe+8kz8XM8ZQhqkQPTgMQ== - dependencies: - undici-types "~6.21.0" - "@types/qs@*", "@types/qs@^6.14.0": version "6.14.0" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.14.0.tgz#d8b60cecf62f2db0fb68e5e006077b9178b85de5" @@ -1000,11 +834,6 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== -"@types/wrap-ansi@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz#18b97a972f94f60a679fd5c796d96421b9abb9fd" - integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g== - "@types/yargs-parser@*": version "21.0.3" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" @@ -1151,7 +980,7 @@ ajv@^6.12.4, ajv@^6.12.6: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: +ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -1393,11 +1222,6 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - ci-info@^3.2.0: version "3.9.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" @@ -1413,11 +1237,6 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-width@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" - integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== - cliui@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" @@ -1454,11 +1273,6 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -commander@^13.1.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-13.1.0.tgz#776167db68c78f38dcce1f9b8d7b8b9a488abf46" - integrity sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw== - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1871,15 +1685,6 @@ express@^5.0.1, express@^5.1.0: type-is "^2.0.1" vary "^1.1.2" -external-editor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -1925,11 +1730,6 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -fflate@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" - integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== - file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -1993,14 +1793,6 @@ flatted@^3.2.9: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== -flora-colossus@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/flora-colossus/-/flora-colossus-2.0.0.tgz#af1e85db0a8256ef05f3fb531c1235236c97220a" - integrity sha512-dz4HxH6pOvbUzZpZ/yXhafjbR2I8cenK5xL0KtBFb7U2ADsR+OwXifnxZjij/pZWF775uSCMzWVd+jDik2H2IA== - dependencies: - debug "^4.3.4" - fs-extra "^10.1.0" - forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -2011,15 +1803,6 @@ fresh@^2.0.0: resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4" integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== -fs-extra@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -2035,15 +1818,6 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -galactus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/galactus/-/galactus-1.0.0.tgz#c2615182afa0c6d0859b92e56ae36d052827db7e" - integrity sha512-R1fam6D4CyKQGNlvJne4dkNF+PvUUl7TAJInvTGa9fti9qAv95quQz29GXapA4d8Ec266mJJxFVh82M4GIIGDQ== - dependencies: - debug "^4.3.4" - flora-colossus "^2.0.0" - fs-extra "^10.1.0" - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -2136,7 +1910,7 @@ gopd@^1.2.0: resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9: +graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -2191,23 +1965,11 @@ iconv-lite@0.6.3, iconv-lite@^0.6.3: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - ignore@^5.2.0, ignore@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== -ignore@^7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" - integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== - import-fresh@^3.2.1: version "3.3.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" @@ -2786,15 +2548,6 @@ json5@^2.2.2, json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonfile@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62" - integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - keyv@^4.5.3: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" @@ -2968,11 +2721,6 @@ ms@^2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -mute-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" - integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -2983,11 +2731,6 @@ negotiator@^1.0.0: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a" integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== -node-forge@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" - integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== - node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -3053,11 +2796,6 @@ optionator@^0.9.3: type-check "^0.4.0" word-wrap "^1.2.5" -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - p-all@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-all/-/p-all-3.0.0.tgz#077c023c37e75e760193badab2bad3ccd5782bfb" @@ -3201,11 +2939,6 @@ prettier@^3.0.0: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.5.3.tgz#4fc2ce0d657e7a02e602549f053b239cb7dfe1b5" integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw== -pretty-bytes@^5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== - pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" @@ -3353,7 +3086,7 @@ safe-buffer@5.2.1, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": +"safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -3457,11 +3190,6 @@ signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -3606,13 +3334,6 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -3753,11 +3474,6 @@ undici-types@~6.21.0: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -3821,15 +3537,6 @@ word-wrap@^1.2.5: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -3890,11 +3597,6 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -yoctocolors-cjs@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz#7e4964ea8ec422b7a40ac917d3a344cfd2304baa" - integrity sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw== - zod-to-json-schema@^3.24.1, zod-to-json-schema@^3.24.5: version "3.24.5" resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz#d1095440b147fb7c2093812a53c54df8d5df50a3" @@ -3910,7 +3612,7 @@ zod@^3.23.8: resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.4.tgz#e2e2cca5faaa012d76e527d0d36622e0a90c315f" integrity sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg== -zod@^3.25.20, zod@^3.25.67: +zod@^3.25.20: version "3.25.76" resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.76.tgz#26841c3f6fd22a6a2760e7ccb719179768471e34" integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ== From 53a4db199bbd91a0918f9d60f04cdf60814a5b69 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 30 Sep 2025 14:03:38 +0000 Subject: [PATCH 37/51] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 402059019..23acd0a96 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-fd18483a409117a70113398a50c7ff8bde92455d830e8027f2c2e3cc7a9c67ac.yml -openapi_spec_hash: cb88f02495e1cfd2d73d2f9e3728205d +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-f8783c7acb61970583e95ad6d75c8735d2ae5e4344f808957e0b9cc22f2b8c04.yml +openapi_spec_hash: 2baa7719b95befc1553083d5757bd99a config_hash: 6d3585c0032e08d723d077d660fc8448 From 64d21976509a6d6b6d0095bf1867ad9bdd153e03 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 6 Oct 2025 21:36:29 +0000 Subject: [PATCH 38/51] chore(internal): remove .eslintcache --- .eslintcache | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .eslintcache diff --git a/.eslintcache b/.eslintcache deleted file mode 100644 index 0b562d683..000000000 --- a/.eslintcache +++ /dev/null @@ -1 +0,0 @@ -[{"/home/tempuser-y52ps0/run/codegen-output/finch/finch-node/packages/mcp-server/src/options.ts":"1"},{"size":17015,"mtime":1759164825169,"results":"2","hashOfConfig":"3"},{"filePath":"4","messages":"5","suppressedMessages":"6","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"br52zc","/home/tempuser-y52ps0/run/codegen-output/finch/finch-node/packages/mcp-server/src/options.ts",[],[]] \ No newline at end of file From 7df5a28a1be002645785fa2d59cd94da5df28889 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 6 Oct 2025 21:36:27 +0000 Subject: [PATCH 39/51] chore(internal): use npm pack for build uploads --- scripts/utils/upload-artifact.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/utils/upload-artifact.sh b/scripts/utils/upload-artifact.sh index 7e2b4502d..84cc42860 100755 --- a/scripts/utils/upload-artifact.sh +++ b/scripts/utils/upload-artifact.sh @@ -12,9 +12,11 @@ if [[ "$SIGNED_URL" == "null" ]]; then exit 1 fi -UPLOAD_RESPONSE=$(tar "${BASE_PATH:+-C$BASE_PATH}" -cz "${ARTIFACT_PATH:-dist}" | curl -v -X PUT \ +TARBALL=$(cd dist && npm pack --silent) + +UPLOAD_RESPONSE=$(curl -v -X PUT \ -H "Content-Type: application/gzip" \ - --data-binary @- "$SIGNED_URL" 2>&1) + --data-binary "@dist/$TARBALL" "$SIGNED_URL" 2>&1) if echo "$UPLOAD_RESPONSE" | grep -q "HTTP/[0-9.]* 200"; then echo -e "\033[32mUploaded build to Stainless storage.\033[0m" From 1c4f073cc8e8f06e58069dcc2bc5b708e3a8be34 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 7 Oct 2025 15:14:24 +0000 Subject: [PATCH 40/51] feat(api): api update --- .stats.yml | 4 ++-- src/resources/hris/pay-statements.ts | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.stats.yml b/.stats.yml index 23acd0a96..4d6fbdae3 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-f8783c7acb61970583e95ad6d75c8735d2ae5e4344f808957e0b9cc22f2b8c04.yml -openapi_spec_hash: 2baa7719b95befc1553083d5757bd99a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-ef0b0fb4ec85648855da514cbc53018cb429fb37bce8570bc6c44254eb32c62f.yml +openapi_spec_hash: 38622a4a3cdef04686053018329616f2 config_hash: 6d3585c0032e08d723d077d660fc8448 diff --git a/src/resources/hris/pay-statements.ts b/src/resources/hris/pay-statements.ts index f9eb2090d..3f641c759 100644 --- a/src/resources/hris/pay-statements.ts +++ b/src/resources/hris/pay-statements.ts @@ -52,9 +52,9 @@ export interface PayStatement { /** * The array of deductions objects associated with this pay statement. */ - employee_deductions: Array | null; + employee_deductions: Array | null; - employer_contributions: Array | null; + employer_contributions: Array | null; gross_pay: HRISAPI.Money | null; @@ -73,7 +73,7 @@ export interface PayStatement { /** * The array of taxes objects associated with this pay statement. */ - taxes: Array | null; + taxes: Array | null; /** * The number of hours worked for this pay period From f9c7e0685ff5ab28614353eacc1fc7887ec6a0ff Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 7 Oct 2025 23:34:06 +0000 Subject: [PATCH 41/51] feat(api): api update --- .stats.yml | 4 +-- api.md | 4 +-- .../src/tools/account/introspect-account.ts | 2 +- .../jobs/automated/list-jobs-automated.ts | 5 --- .../jobs/automated/retrieve-jobs-automated.ts | 9 +---- .../tools/jobs/manual/retrieve-jobs-manual.ts | 7 +--- src/resources/account.ts | 10 ------ src/resources/jobs/automated.ts | 34 ++----------------- src/resources/jobs/index.ts | 3 +- src/resources/jobs/jobs.ts | 10 ++---- src/resources/jobs/manual.ts | 29 ++-------------- tests/api-resources/jobs/automated.test.ts | 16 +-------- tests/api-resources/jobs/manual.test.ts | 11 ------ 13 files changed, 16 insertions(+), 128 deletions(-) diff --git a/.stats.yml b/.stats.yml index 4d6fbdae3..845aada6f 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-ef0b0fb4ec85648855da514cbc53018cb429fb37bce8570bc6c44254eb32c62f.yml -openapi_spec_hash: 38622a4a3cdef04686053018329616f2 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-df44cda9b18320f8a8117d5c8dfa02ebd6739fc77fc87eb284748c987a7412a4.yml +openapi_spec_hash: 69524ddfedf3c4492e77826561f7c7d8 config_hash: 6d3585c0032e08d723d077d660fc8448 diff --git a/api.md b/api.md index f945660a8..f47d124f6 100644 --- a/api.md +++ b/api.md @@ -244,7 +244,7 @@ Types: Methods: - client.jobs.automated.create({ ...params }) -> AutomatedCreateResponse -- client.jobs.automated.retrieve(jobId, { ...params }) -> AutomatedAsyncJob +- client.jobs.automated.retrieve(jobId) -> AutomatedAsyncJob - client.jobs.automated.list({ ...params }) -> AutomatedListResponse ## Manual @@ -255,7 +255,7 @@ Types: Methods: -- client.jobs.manual.retrieve(jobId, { ...params }) -> ManualAsyncJob +- client.jobs.manual.retrieve(jobId) -> ManualAsyncJob # Sandbox diff --git a/packages/mcp-server/src/tools/account/introspect-account.ts b/packages/mcp-server/src/tools/account/introspect-account.ts index 943b330af..bdc030fbb 100644 --- a/packages/mcp-server/src/tools/account/introspect-account.ts +++ b/packages/mcp-server/src/tools/account/introspect-account.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'introspect_account', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRead account information associated with an `access_token`\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/introspection',\n $defs: {\n introspection: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'The Finch UUID of the token being introspected'\n },\n client_id: {\n type: 'string',\n description: 'The client ID of the application associated with the `access_token`'\n },\n client_type: {\n type: 'string',\n title: 'ClientType',\n description: 'The type of application associated with a token.',\n enum: [ 'development',\n 'production',\n 'sandbox'\n ]\n },\n connection_id: {\n type: 'string',\n description: 'The Finch UUID of the connection associated with the `access_token`'\n },\n connection_status: {\n type: 'object',\n properties: {\n status: {\n $ref: '#/$defs/connection_status_type'\n },\n last_successful_sync: {\n anyOf: [ {\n type: 'string',\n format: 'date-time'\n },\n {\n type: 'string'\n }\n ],\n description: 'The datetime when the connection was last successfully synced'\n },\n message: {\n type: 'string'\n }\n },\n required: [ 'status'\n ]\n },\n connection_type: {\n type: 'string',\n title: 'ConnectionType',\n description: 'The type of the connection associated with the token.\\n- `provider` - connection to an external provider\\n- `finch` - finch-generated data.',\n enum: [ 'finch',\n 'provider'\n ]\n },\n products: {\n type: 'array',\n description: 'An array of the authorized products associated with the `access_token`.',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`.'\n },\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate tokens with a Finch connection instead of this account ID'\n },\n authentication_methods: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description: 'The type of authentication method',\n enum: [ 'assisted',\n 'credential',\n 'api_token',\n 'api_credential',\n 'oauth'\n ]\n },\n connection_status: {\n type: 'object',\n properties: {\n status: {\n $ref: '#/$defs/connection_status_type'\n },\n last_successful_sync: {\n anyOf: [ {\n type: 'string',\n format: 'date-time'\n },\n {\n type: 'string'\n }\n ],\n description: 'The datetime when the connection was last successfully synced'\n },\n message: {\n type: 'string'\n }\n },\n required: [ 'status'\n ]\n },\n products: {\n type: 'array',\n description: 'An array of the authorized products associated with the `access_token`',\n items: {\n type: 'string'\n }\n }\n },\n required: [ 'type'\n ]\n }\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate tokens with a Finch connection instead of this company ID'\n },\n customer_email: {\n type: 'string',\n description: 'The email of your customer you provided to Finch when a connect session was created for this connection'\n },\n customer_id: {\n type: 'string',\n description: 'The ID of your customer you provided to Finch when a connect session was created for this connection'\n },\n customer_name: {\n type: 'string',\n description: 'The name of your customer you provided to Finch when a connect session was created for this connection'\n },\n entity_ids: {\n type: 'array',\n description: 'Array of entity IDs associated with this connection.',\n items: {\n type: 'string'\n }\n },\n entity_mode: {\n type: 'string',\n description: 'Indicates whether this connection manages a single entity or multiple entities.',\n enum: [ 'single',\n 'multi'\n ]\n },\n manual: {\n type: 'boolean',\n description: 'Whether the connection associated with the `access_token` uses the Assisted Connect Flow. (`true` if using Assisted Connect, `false` if connection is automated)'\n },\n payroll_provider_id: {\n type: 'string',\n description: '[DEPRECATED] Use `provider_id` to identify the provider instead of this payroll provider ID.'\n },\n username: {\n type: 'string',\n description: 'The account username used for login associated with the `access_token`.'\n }\n },\n required: [ 'id',\n 'client_id',\n 'client_type',\n 'connection_id',\n 'connection_status',\n 'connection_type',\n 'products',\n 'provider_id'\n ]\n },\n connection_status_type: {\n type: 'string',\n enum: [ 'pending',\n 'processing',\n 'connected',\n 'error_no_account_setup',\n 'error_permissions',\n 'reauth'\n ]\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRead account information associated with an `access_token`\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/introspection',\n $defs: {\n introspection: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'The Finch UUID of the token being introspected'\n },\n client_id: {\n type: 'string',\n description: 'The client ID of the application associated with the `access_token`'\n },\n client_type: {\n type: 'string',\n title: 'ClientType',\n description: 'The type of application associated with a token.',\n enum: [ 'development',\n 'production',\n 'sandbox'\n ]\n },\n connection_id: {\n type: 'string',\n description: 'The Finch UUID of the connection associated with the `access_token`'\n },\n connection_status: {\n type: 'object',\n properties: {\n status: {\n $ref: '#/$defs/connection_status_type'\n },\n last_successful_sync: {\n anyOf: [ {\n type: 'string',\n format: 'date-time'\n },\n {\n type: 'string'\n }\n ],\n description: 'The datetime when the connection was last successfully synced'\n },\n message: {\n type: 'string'\n }\n },\n required: [ 'status'\n ]\n },\n connection_type: {\n type: 'string',\n title: 'ConnectionType',\n description: 'The type of the connection associated with the token.\\n- `provider` - connection to an external provider\\n- `finch` - finch-generated data.',\n enum: [ 'finch',\n 'provider'\n ]\n },\n products: {\n type: 'array',\n description: 'An array of the authorized products associated with the `access_token`.',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`.'\n },\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate tokens with a Finch connection instead of this account ID'\n },\n authentication_methods: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description: 'The type of authentication method',\n enum: [ 'assisted',\n 'credential',\n 'api_token',\n 'api_credential',\n 'oauth'\n ]\n },\n connection_status: {\n type: 'object',\n properties: {\n status: {\n $ref: '#/$defs/connection_status_type'\n },\n last_successful_sync: {\n anyOf: [ {\n type: 'string',\n format: 'date-time'\n },\n {\n type: 'string'\n }\n ],\n description: 'The datetime when the connection was last successfully synced'\n },\n message: {\n type: 'string'\n }\n },\n required: [ 'status'\n ]\n },\n products: {\n type: 'array',\n description: 'An array of the authorized products associated with the `access_token`',\n items: {\n type: 'string'\n }\n }\n },\n required: [ 'type'\n ]\n }\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate tokens with a Finch connection instead of this company ID'\n },\n customer_email: {\n type: 'string',\n description: 'The email of your customer you provided to Finch when a connect session was created for this connection'\n },\n customer_id: {\n type: 'string',\n description: 'The ID of your customer you provided to Finch when a connect session was created for this connection'\n },\n customer_name: {\n type: 'string',\n description: 'The name of your customer you provided to Finch when a connect session was created for this connection'\n },\n manual: {\n type: 'boolean',\n description: 'Whether the connection associated with the `access_token` uses the Assisted Connect Flow. (`true` if using Assisted Connect, `false` if connection is automated)'\n },\n payroll_provider_id: {\n type: 'string',\n description: '[DEPRECATED] Use `provider_id` to identify the provider instead of this payroll provider ID.'\n },\n username: {\n type: 'string',\n description: 'The account username used for login associated with the `access_token`.'\n }\n },\n required: [ 'id',\n 'client_id',\n 'client_type',\n 'connection_id',\n 'connection_status',\n 'connection_type',\n 'products',\n 'provider_id'\n ]\n },\n connection_status_type: {\n type: 'string',\n enum: [ 'pending',\n 'processing',\n 'connected',\n 'error_no_account_setup',\n 'error_permissions',\n 'reauth'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/jobs/automated/list-jobs-automated.ts b/packages/mcp-server/src/tools/jobs/automated/list-jobs-automated.ts index 7e9fbc59e..a2b7e70d4 100644 --- a/packages/mcp-server/src/tools/jobs/automated/list-jobs-automated.ts +++ b/packages/mcp-server/src/tools/jobs/automated/list-jobs-automated.ts @@ -22,11 +22,6 @@ export const tool: Tool = { inputSchema: { type: 'object', properties: { - entity_id: { - type: 'string', - description: - "The entity ID to use when authenticating with a multi-account token. Required when using a multi-account token to specify which entity's data to access. Example: `123e4567-e89b-12d3-a456-426614174000`", - }, limit: { type: 'integer', description: 'Number of items to return', diff --git a/packages/mcp-server/src/tools/jobs/automated/retrieve-jobs-automated.ts b/packages/mcp-server/src/tools/jobs/automated/retrieve-jobs-automated.ts index 08a53cd0f..212feeaed 100644 --- a/packages/mcp-server/src/tools/jobs/automated/retrieve-jobs-automated.ts +++ b/packages/mcp-server/src/tools/jobs/automated/retrieve-jobs-automated.ts @@ -25,11 +25,6 @@ export const tool: Tool = { job_id: { type: 'string', }, - entity_id: { - type: 'string', - description: - "The entity ID to use when authenticating with a multi-account token. Required when using a multi-account token to specify which entity's data to access. Example: `123e4567-e89b-12d3-a456-426614174000`", - }, jq_filter: { type: 'string', title: 'jq Filter', @@ -46,9 +41,7 @@ export const tool: Tool = { export const handler = async (client: Finch, args: Record | undefined) => { const { job_id, jq_filter, ...body } = args as any; - return asTextContentResult( - await maybeFilter(jq_filter, await client.jobs.automated.retrieve(job_id, body)), - ); + return asTextContentResult(await maybeFilter(jq_filter, await client.jobs.automated.retrieve(job_id))); }; export default { metadata, tool, handler }; diff --git a/packages/mcp-server/src/tools/jobs/manual/retrieve-jobs-manual.ts b/packages/mcp-server/src/tools/jobs/manual/retrieve-jobs-manual.ts index e6273579a..39670f067 100644 --- a/packages/mcp-server/src/tools/jobs/manual/retrieve-jobs-manual.ts +++ b/packages/mcp-server/src/tools/jobs/manual/retrieve-jobs-manual.ts @@ -25,11 +25,6 @@ export const tool: Tool = { job_id: { type: 'string', }, - entity_id: { - type: 'string', - description: - "The entity ID to use when authenticating with a multi-account token. Required when using a multi-account token to specify which entity's data to access. Example: `123e4567-e89b-12d3-a456-426614174000`", - }, jq_filter: { type: 'string', title: 'jq Filter', @@ -46,7 +41,7 @@ export const tool: Tool = { export const handler = async (client: Finch, args: Record | undefined) => { const { job_id, jq_filter, ...body } = args as any; - return asTextContentResult(await maybeFilter(jq_filter, await client.jobs.manual.retrieve(job_id, body))); + return asTextContentResult(await maybeFilter(jq_filter, await client.jobs.manual.retrieve(job_id))); }; export default { metadata, tool, handler }; diff --git a/src/resources/account.ts b/src/resources/account.ts index 3e9f48b37..2df6c8d53 100644 --- a/src/resources/account.ts +++ b/src/resources/account.ts @@ -100,16 +100,6 @@ export interface Introspection { */ customer_name?: string | null; - /** - * Array of entity IDs associated with this connection. - */ - entity_ids?: Array; - - /** - * Indicates whether this connection manages a single entity or multiple entities. - */ - entity_mode?: 'single' | 'multi'; - /** * Whether the connection associated with the `access_token` uses the Assisted * Connect Flow. (`true` if using Assisted Connect, `false` if connection is diff --git a/src/resources/jobs/automated.ts b/src/resources/jobs/automated.ts index 4319848d5..9e7a3a0f4 100644 --- a/src/resources/jobs/automated.ts +++ b/src/resources/jobs/automated.ts @@ -31,21 +31,8 @@ export class Automated extends APIResource { /** * Get an automated job by `job_id`. */ - retrieve( - jobId: string, - query?: AutomatedRetrieveParams, - options?: Core.RequestOptions, - ): Core.APIPromise; - retrieve(jobId: string, options?: Core.RequestOptions): Core.APIPromise; - retrieve( - jobId: string, - query: AutomatedRetrieveParams | Core.RequestOptions = {}, - options?: Core.RequestOptions, - ): Core.APIPromise { - if (isRequestOptions(query)) { - return this.retrieve(jobId, {}, query); - } - return this._client.get(`/jobs/automated/${jobId}`, { query, ...options }); + retrieve(jobId: string, options?: Core.RequestOptions): Core.APIPromise { + return this._client.get(`/jobs/automated/${jobId}`, options); } /** @@ -222,23 +209,7 @@ export declare namespace AutomatedCreateParams { } } -export interface AutomatedRetrieveParams { - /** - * The entity ID to use when authenticating with a multi-account token. Required - * when using a multi-account token to specify which entity's data to access. - * Example: `123e4567-e89b-12d3-a456-426614174000` - */ - entity_id?: string; -} - export interface AutomatedListParams { - /** - * The entity ID to use when authenticating with a multi-account token. Required - * when using a multi-account token to specify which entity's data to access. - * Example: `123e4567-e89b-12d3-a456-426614174000` - */ - entity_id?: string; - /** * Number of items to return */ @@ -256,7 +227,6 @@ export declare namespace Automated { type AutomatedCreateResponse as AutomatedCreateResponse, type AutomatedListResponse as AutomatedListResponse, type AutomatedCreateParams as AutomatedCreateParams, - type AutomatedRetrieveParams as AutomatedRetrieveParams, type AutomatedListParams as AutomatedListParams, }; } diff --git a/src/resources/jobs/index.ts b/src/resources/jobs/index.ts index 748740813..fc96a5e7a 100644 --- a/src/resources/jobs/index.ts +++ b/src/resources/jobs/index.ts @@ -6,8 +6,7 @@ export { type AutomatedCreateResponse, type AutomatedListResponse, type AutomatedCreateParams, - type AutomatedRetrieveParams, type AutomatedListParams, } from './automated'; export { Jobs } from './jobs'; -export { Manual, type ManualAsyncJob, type ManualRetrieveParams } from './manual'; +export { Manual, type ManualAsyncJob } from './manual'; diff --git a/src/resources/jobs/jobs.ts b/src/resources/jobs/jobs.ts index 9fa138383..7cc64d285 100644 --- a/src/resources/jobs/jobs.ts +++ b/src/resources/jobs/jobs.ts @@ -9,10 +9,9 @@ import { AutomatedCreateResponse, AutomatedListParams, AutomatedListResponse, - AutomatedRetrieveParams, } from './automated'; import * as ManualAPI from './manual'; -import { Manual, ManualAsyncJob, ManualRetrieveParams } from './manual'; +import { Manual, ManualAsyncJob } from './manual'; export class Jobs extends APIResource { automated: AutomatedAPI.Automated = new AutomatedAPI.Automated(this._client); @@ -29,13 +28,8 @@ export declare namespace Jobs { type AutomatedCreateResponse as AutomatedCreateResponse, type AutomatedListResponse as AutomatedListResponse, type AutomatedCreateParams as AutomatedCreateParams, - type AutomatedRetrieveParams as AutomatedRetrieveParams, type AutomatedListParams as AutomatedListParams, }; - export { - Manual as Manual, - type ManualAsyncJob as ManualAsyncJob, - type ManualRetrieveParams as ManualRetrieveParams, - }; + export { Manual as Manual, type ManualAsyncJob as ManualAsyncJob }; } diff --git a/src/resources/jobs/manual.ts b/src/resources/jobs/manual.ts index c755ccae4..07f4b6d5c 100644 --- a/src/resources/jobs/manual.ts +++ b/src/resources/jobs/manual.ts @@ -1,7 +1,6 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../resource'; -import { isRequestOptions } from '../../core'; import * as Core from '../../core'; export class Manual extends APIResource { @@ -9,21 +8,8 @@ export class Manual extends APIResource { * Get a manual job by `job_id`. Manual jobs are completed by a human and include * Assisted Benefits jobs. */ - retrieve( - jobId: string, - query?: ManualRetrieveParams, - options?: Core.RequestOptions, - ): Core.APIPromise; - retrieve(jobId: string, options?: Core.RequestOptions): Core.APIPromise; - retrieve( - jobId: string, - query: ManualRetrieveParams | Core.RequestOptions = {}, - options?: Core.RequestOptions, - ): Core.APIPromise { - if (isRequestOptions(query)) { - return this.retrieve(jobId, {}, query); - } - return this._client.get(`/jobs/manual/${jobId}`, { query, ...options }); + retrieve(jobId: string, options?: Core.RequestOptions): Core.APIPromise { + return this._client.get(`/jobs/manual/${jobId}`, options); } } @@ -38,15 +24,6 @@ export interface ManualAsyncJob { status: 'pending' | 'in_progress' | 'error' | 'complete'; } -export interface ManualRetrieveParams { - /** - * The entity ID to use when authenticating with a multi-account token. Required - * when using a multi-account token to specify which entity's data to access. - * Example: `123e4567-e89b-12d3-a456-426614174000` - */ - entity_id?: string; -} - export declare namespace Manual { - export { type ManualAsyncJob as ManualAsyncJob, type ManualRetrieveParams as ManualRetrieveParams }; + export { type ManualAsyncJob as ManualAsyncJob }; } diff --git a/tests/api-resources/jobs/automated.test.ts b/tests/api-resources/jobs/automated.test.ts index 2b844248e..a199923fd 100644 --- a/tests/api-resources/jobs/automated.test.ts +++ b/tests/api-resources/jobs/automated.test.ts @@ -42,17 +42,6 @@ describe('resource automated', () => { ).rejects.toThrow(Finch.NotFoundError); }); - test('retrieve: request options and params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.jobs.automated.retrieve( - 'job_id', - { entity_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e' }, - { path: '/_stainless_unknown_path' }, - ), - ).rejects.toThrow(Finch.NotFoundError); - }); - test('list', async () => { const responsePromise = client.jobs.automated.list(); const rawResponse = await responsePromise.asResponse(); @@ -74,10 +63,7 @@ describe('resource automated', () => { test('list: request options and params are passed correctly', async () => { // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error await expect( - client.jobs.automated.list( - { entity_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', limit: 0, offset: 0 }, - { path: '/_stainless_unknown_path' }, - ), + client.jobs.automated.list({ limit: 0, offset: 0 }, { path: '/_stainless_unknown_path' }), ).rejects.toThrow(Finch.NotFoundError); }); }); diff --git a/tests/api-resources/jobs/manual.test.ts b/tests/api-resources/jobs/manual.test.ts index 04ff1d5e3..c19129280 100644 --- a/tests/api-resources/jobs/manual.test.ts +++ b/tests/api-resources/jobs/manual.test.ts @@ -26,15 +26,4 @@ describe('resource manual', () => { Finch.NotFoundError, ); }); - - test('retrieve: request options and params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.jobs.manual.retrieve( - 'job_id', - { entity_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e' }, - { path: '/_stainless_unknown_path' }, - ), - ).rejects.toThrow(Finch.NotFoundError); - }); }); From 55c37998bdb39779bfb9ae62ee5310a2a423248d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 8 Oct 2025 17:05:57 +0000 Subject: [PATCH 42/51] chore: extract some types in mcp docs --- .../src/tools/connect/sessions/new-connect-sessions.ts | 2 +- .../tools/connect/sessions/reauthenticate-connect-sessions.ts | 2 +- .../individuals/enrolled-ids-benefits-hris-individuals.ts | 2 +- .../pay-statement-item/list-company-hris-pay-statement-item.ts | 2 +- .../rules/create-pay-statement-item-company-hris-rules.ts | 2 +- .../rules/delete-pay-statement-item-company-hris-rules.ts | 2 +- .../rules/list-pay-statement-item-company-hris-rules.ts | 2 +- .../rules/update-pay-statement-item-company-hris-rules.ts | 2 +- .../mcp-server/src/tools/hris/documents/list-hris-documents.ts | 2 +- .../src/tools/hris/documents/retreive-hris-documents.ts | 2 +- .../src/tools/jobs/automated/create-jobs-automated.ts | 2 +- .../mcp-server/src/tools/jobs/automated/list-jobs-automated.ts | 2 +- .../src/tools/payroll/pay-groups/list-payroll-pay-groups.ts | 2 +- .../src/tools/payroll/pay-groups/retrieve-payroll-pay-groups.ts | 2 +- packages/mcp-server/src/tools/providers/list-providers.ts | 2 +- .../src/tools/request-forwarding/forward-request-forwarding.ts | 2 +- .../src/tools/sandbox/company/update-sandbox-company.ts | 2 +- .../connections/accounts/create-connections-sandbox-accounts.ts | 2 +- .../connections/accounts/update-connections-sandbox-accounts.ts | 2 +- .../src/tools/sandbox/connections/create-sandbox-connections.ts | 2 +- .../src/tools/sandbox/directory/create-sandbox-directory.ts | 2 +- .../src/tools/sandbox/individual/update-sandbox-individual.ts | 2 +- .../jobs/configuration/retrieve-jobs-sandbox-configuration.ts | 2 +- .../mcp-server/src/tools/sandbox/jobs/create-sandbox-jobs.ts | 2 +- .../src/tools/sandbox/payment/create-sandbox-payment.ts | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/packages/mcp-server/src/tools/connect/sessions/new-connect-sessions.ts b/packages/mcp-server/src/tools/connect/sessions/new-connect-sessions.ts index a1914cffd..8f76f54c5 100644 --- a/packages/mcp-server/src/tools/connect/sessions/new-connect-sessions.ts +++ b/packages/mcp-server/src/tools/connect/sessions/new-connect-sessions.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'new_connect_sessions', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nCreate a new connect session for an employer\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n connect_url: {\n type: 'string',\n description: 'The Connect URL to redirect the user to for authentication'\n },\n session_id: {\n type: 'string',\n description: 'The unique identifier for the created connect session'\n }\n },\n required: [ 'connect_url',\n 'session_id'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nCreate a new connect session for an employer\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/session_new_response',\n $defs: {\n session_new_response: {\n type: 'object',\n properties: {\n connect_url: {\n type: 'string',\n description: 'The Connect URL to redirect the user to for authentication'\n },\n session_id: {\n type: 'string',\n description: 'The unique identifier for the created connect session'\n }\n },\n required: [ 'connect_url',\n 'session_id'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/connect/sessions/reauthenticate-connect-sessions.ts b/packages/mcp-server/src/tools/connect/sessions/reauthenticate-connect-sessions.ts index 017a780cd..486d5d22c 100644 --- a/packages/mcp-server/src/tools/connect/sessions/reauthenticate-connect-sessions.ts +++ b/packages/mcp-server/src/tools/connect/sessions/reauthenticate-connect-sessions.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'reauthenticate_connect_sessions', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nCreate a new Connect session for reauthenticating an existing connection\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n connect_url: {\n type: 'string',\n description: 'The Connect URL to redirect the user to for reauthentication'\n },\n session_id: {\n type: 'string',\n description: 'The unique identifier for the created connect session'\n }\n },\n required: [ 'connect_url',\n 'session_id'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nCreate a new Connect session for reauthenticating an existing connection\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/session_reauthenticate_response',\n $defs: {\n session_reauthenticate_response: {\n type: 'object',\n properties: {\n connect_url: {\n type: 'string',\n description: 'The Connect URL to redirect the user to for reauthentication'\n },\n session_id: {\n type: 'string',\n description: 'The unique identifier for the created connect session'\n }\n },\n required: [ 'connect_url',\n 'session_id'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/hris/benefits/individuals/enrolled-ids-benefits-hris-individuals.ts b/packages/mcp-server/src/tools/hris/benefits/individuals/enrolled-ids-benefits-hris-individuals.ts index 4c85d9429..ce1d33f40 100644 --- a/packages/mcp-server/src/tools/hris/benefits/individuals/enrolled-ids-benefits-hris-individuals.ts +++ b/packages/mcp-server/src/tools/hris/benefits/individuals/enrolled-ids-benefits-hris-individuals.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'enrolled_ids_benefits_hris_individuals', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nLists individuals currently enrolled in a given deduction.\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n benefit_id: {\n type: 'string',\n description: 'The id of the benefit.'\n },\n individual_ids: {\n type: 'array',\n items: {\n type: 'string',\n description: 'A stable Finch `id` (UUID v4) for an individual in the company.'\n }\n }\n },\n required: [ 'benefit_id',\n 'individual_ids'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nLists individuals currently enrolled in a given deduction.\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/individual_enrolled_ids_response',\n $defs: {\n individual_enrolled_ids_response: {\n type: 'object',\n properties: {\n benefit_id: {\n type: 'string',\n description: 'The id of the benefit.'\n },\n individual_ids: {\n type: 'array',\n items: {\n type: 'string',\n description: 'A stable Finch `id` (UUID v4) for an individual in the company.'\n }\n }\n },\n required: [ 'benefit_id',\n 'individual_ids'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/hris/company/pay-statement-item/list-company-hris-pay-statement-item.ts b/packages/mcp-server/src/tools/hris/company/pay-statement-item/list-company-hris-pay-statement-item.ts index bc1a82b09..b4df4bae1 100644 --- a/packages/mcp-server/src/tools/hris/company/pay-statement-item/list-company-hris-pay-statement-item.ts +++ b/packages/mcp-server/src/tools/hris/company/pay-statement-item/list-company-hris-pay-statement-item.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'list_company_hris_pay_statement_item', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** this endpoint currently serves employers onboarded after March 4th and historical support will be added soon\n Retrieve a list of detailed pay statement items for the access token's connection account.\n\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n responses: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n attributes: {\n type: 'object',\n description: 'The attributes of the pay statement item.',\n properties: {\n metadata: {\n type: 'object',\n description: 'The metadata of the pay statement item derived by the rules engine if available. Each attribute will be a key-value pair defined by a rule.',\n additionalProperties: true\n },\n employer: {\n type: 'boolean',\n description: '`true` if the amount is paid by the employers. This field is only available for taxes.'\n },\n pre_tax: {\n type: 'boolean',\n description: '`true` if the pay statement item is pre-tax. This field is only available for employee deductions.'\n },\n type: {\n type: 'string',\n description: 'The type of the pay statement item.'\n }\n },\n required: [ 'metadata'\n ]\n },\n category: {\n type: 'string',\n description: 'The category of the pay statement item.',\n enum: [ 'earnings',\n 'taxes',\n 'employee_deductions',\n 'employer_contributions'\n ]\n },\n name: {\n type: 'string',\n description: 'The name of the pay statement item.'\n }\n },\n required: [ 'attributes',\n 'category',\n 'name'\n ]\n }\n }\n },\n required: [ 'responses'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** this endpoint currently serves employers onboarded after March 4th and historical support will be added soon\n Retrieve a list of detailed pay statement items for the access token's connection account.\n\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n responses: {\n type: 'array',\n items: {\n $ref: '#/$defs/pay_statement_item_list_response'\n }\n }\n },\n required: [ 'responses'\n ],\n $defs: {\n pay_statement_item_list_response: {\n type: 'object',\n properties: {\n attributes: {\n type: 'object',\n description: 'The attributes of the pay statement item.',\n properties: {\n metadata: {\n type: 'object',\n description: 'The metadata of the pay statement item derived by the rules engine if available. Each attribute will be a key-value pair defined by a rule.',\n additionalProperties: true\n },\n employer: {\n type: 'boolean',\n description: '`true` if the amount is paid by the employers. This field is only available for taxes.'\n },\n pre_tax: {\n type: 'boolean',\n description: '`true` if the pay statement item is pre-tax. This field is only available for employee deductions.'\n },\n type: {\n type: 'string',\n description: 'The type of the pay statement item.'\n }\n },\n required: [ 'metadata'\n ]\n },\n category: {\n type: 'string',\n description: 'The category of the pay statement item.',\n enum: [ 'earnings',\n 'taxes',\n 'employee_deductions',\n 'employer_contributions'\n ]\n },\n name: {\n type: 'string',\n description: 'The name of the pay statement item.'\n }\n },\n required: [ 'attributes',\n 'category',\n 'name'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/create-pay-statement-item-company-hris-rules.ts b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/create-pay-statement-item-company-hris-rules.ts index 8367eeeac..5c9549550 100644 --- a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/create-pay-statement-item-company-hris-rules.ts +++ b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/create-pay-statement-item-company-hris-rules.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'create_pay_statement_item_company_hris_rules', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** this endpoint currently serves employers onboarded after March 4th and historical support will be added soon\nCustom rules can be created to associate specific attributes to pay statement items depending on the use case. For example, pay statement items that meet certain conditions can be labeled as a pre-tax 401k. This metadata can be retrieved where pay statement item information is available.\n\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the rule.'\n },\n attributes: {\n type: 'object',\n description: 'Specifies the fields to be applied when the condition is met.',\n properties: {\n metadata: {\n type: 'object',\n description: 'The metadata to be attached in the entity. It is a key-value pairs where the values can be of any type (string, number, boolean, object, array, etc.).',\n additionalProperties: true\n }\n }\n },\n conditions: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n field: {\n type: 'string',\n description: 'The field to be checked in the rule.'\n },\n operator: {\n type: 'string',\n description: 'The operator to be used in the rule.',\n enum: [ 'equals'\n ]\n },\n value: {\n type: 'string',\n description: 'The value of the field to be checked in the rule.'\n }\n }\n }\n },\n created_at: {\n type: 'string',\n description: 'The datetime when the rule was created.',\n format: 'date-time'\n },\n effective_end_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rules should stop applying rules based on the date.'\n },\n effective_start_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rule should begin applying based on the date.'\n },\n entity_type: {\n type: 'string',\n description: 'The entity type to which the rule is applied.',\n enum: [ 'pay_statement_item'\n ]\n },\n priority: {\n type: 'integer',\n description: 'The priority of the rule.'\n },\n updated_at: {\n type: 'string',\n description: 'The datetime when the rule was last updated.',\n format: 'date-time'\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** this endpoint currently serves employers onboarded after March 4th and historical support will be added soon\nCustom rules can be created to associate specific attributes to pay statement items depending on the use case. For example, pay statement items that meet certain conditions can be labeled as a pre-tax 401k. This metadata can be retrieved where pay statement item information is available.\n\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/rule_create_response',\n $defs: {\n rule_create_response: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the rule.'\n },\n attributes: {\n type: 'object',\n description: 'Specifies the fields to be applied when the condition is met.',\n properties: {\n metadata: {\n type: 'object',\n description: 'The metadata to be attached in the entity. It is a key-value pairs where the values can be of any type (string, number, boolean, object, array, etc.).',\n additionalProperties: true\n }\n }\n },\n conditions: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n field: {\n type: 'string',\n description: 'The field to be checked in the rule.'\n },\n operator: {\n type: 'string',\n description: 'The operator to be used in the rule.',\n enum: [ 'equals'\n ]\n },\n value: {\n type: 'string',\n description: 'The value of the field to be checked in the rule.'\n }\n }\n }\n },\n created_at: {\n type: 'string',\n description: 'The datetime when the rule was created.',\n format: 'date-time'\n },\n effective_end_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rules should stop applying rules based on the date.'\n },\n effective_start_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rule should begin applying based on the date.'\n },\n entity_type: {\n type: 'string',\n description: 'The entity type to which the rule is applied.',\n enum: [ 'pay_statement_item'\n ]\n },\n priority: {\n type: 'integer',\n description: 'The priority of the rule.'\n },\n updated_at: {\n type: 'string',\n description: 'The datetime when the rule was last updated.',\n format: 'date-time'\n }\n }\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/delete-pay-statement-item-company-hris-rules.ts b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/delete-pay-statement-item-company-hris-rules.ts index e73d6584d..420fcc934 100644 --- a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/delete-pay-statement-item-company-hris-rules.ts +++ b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/delete-pay-statement-item-company-hris-rules.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'delete_pay_statement_item_company_hris_rules', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** this endpoint currently serves employers onboarded after March 4th and historical support will be added soon\nDelete a rule for a pay statement item.\n\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the rule.'\n },\n attributes: {\n type: 'object',\n description: 'Specifies the fields to be applied when the condition is met.',\n properties: {\n metadata: {\n type: 'object',\n description: 'The metadata to be attached in the entity. It is a key-value pairs where the values can be of any type (string, number, boolean, object, array, etc.).',\n additionalProperties: true\n }\n }\n },\n conditions: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n field: {\n type: 'string',\n description: 'The field to be checked in the rule.'\n },\n operator: {\n type: 'string',\n description: 'The operator to be used in the rule.',\n enum: [ 'equals'\n ]\n },\n value: {\n type: 'string',\n description: 'The value of the field to be checked in the rule.'\n }\n }\n }\n },\n created_at: {\n type: 'string',\n description: 'The datetime when the rule was created.',\n format: 'date-time'\n },\n deleted_at: {\n type: 'string',\n description: 'The datetime when the rule was deleted.',\n format: 'date-time'\n },\n effective_end_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rules should stop applying rules based on the date.'\n },\n effective_start_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rule should begin applying based on the date.'\n },\n entity_type: {\n type: 'string',\n description: 'The entity type to which the rule is applied.',\n enum: [ 'pay_statement_item'\n ]\n },\n priority: {\n type: 'integer',\n description: 'The priority of the rule.'\n },\n updated_at: {\n type: 'string',\n description: 'The datetime when the rule was last updated.',\n format: 'date-time'\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** this endpoint currently serves employers onboarded after March 4th and historical support will be added soon\nDelete a rule for a pay statement item.\n\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/rule_delete_response',\n $defs: {\n rule_delete_response: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the rule.'\n },\n attributes: {\n type: 'object',\n description: 'Specifies the fields to be applied when the condition is met.',\n properties: {\n metadata: {\n type: 'object',\n description: 'The metadata to be attached in the entity. It is a key-value pairs where the values can be of any type (string, number, boolean, object, array, etc.).',\n additionalProperties: true\n }\n }\n },\n conditions: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n field: {\n type: 'string',\n description: 'The field to be checked in the rule.'\n },\n operator: {\n type: 'string',\n description: 'The operator to be used in the rule.',\n enum: [ 'equals'\n ]\n },\n value: {\n type: 'string',\n description: 'The value of the field to be checked in the rule.'\n }\n }\n }\n },\n created_at: {\n type: 'string',\n description: 'The datetime when the rule was created.',\n format: 'date-time'\n },\n deleted_at: {\n type: 'string',\n description: 'The datetime when the rule was deleted.',\n format: 'date-time'\n },\n effective_end_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rules should stop applying rules based on the date.'\n },\n effective_start_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rule should begin applying based on the date.'\n },\n entity_type: {\n type: 'string',\n description: 'The entity type to which the rule is applied.',\n enum: [ 'pay_statement_item'\n ]\n },\n priority: {\n type: 'integer',\n description: 'The priority of the rule.'\n },\n updated_at: {\n type: 'string',\n description: 'The datetime when the rule was last updated.',\n format: 'date-time'\n }\n }\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/list-pay-statement-item-company-hris-rules.ts b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/list-pay-statement-item-company-hris-rules.ts index d6a05ed94..0f875d856 100644 --- a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/list-pay-statement-item-company-hris-rules.ts +++ b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/list-pay-statement-item-company-hris-rules.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'list_pay_statement_item_company_hris_rules', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** this endpoint currently serves employers onboarded after March 4th and historical support will be added soon\nList all rules of a connection account.\n\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n responses: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the rule.'\n },\n attributes: {\n type: 'object',\n description: 'Specifies the fields to be applied when the condition is met.',\n properties: {\n metadata: {\n type: 'object',\n description: 'The metadata to be attached in the entity. It is a key-value pairs where the values can be of any type (string, number, boolean, object, array, etc.).',\n additionalProperties: true\n }\n }\n },\n conditions: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n field: {\n type: 'string',\n description: 'The field to be checked in the rule.'\n },\n operator: {\n type: 'string',\n description: 'The operator to be used in the rule.',\n enum: [ 'equals'\n ]\n },\n value: {\n type: 'string',\n description: 'The value of the field to be checked in the rule.'\n }\n }\n }\n },\n created_at: {\n type: 'string',\n description: 'The datetime when the rule was created.',\n format: 'date-time'\n },\n effective_end_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rules should stop applying rules based on the date.'\n },\n effective_start_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rule should begin applying based on the date.'\n },\n entity_type: {\n type: 'string',\n description: 'The entity type to which the rule is applied.',\n enum: [ 'pay_statement_item'\n ]\n },\n priority: {\n type: 'integer',\n description: 'The priority of the rule.'\n },\n updated_at: {\n type: 'string',\n description: 'The datetime when the rule was last updated.',\n format: 'date-time'\n }\n }\n }\n }\n },\n required: [ 'responses'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** this endpoint currently serves employers onboarded after March 4th and historical support will be added soon\nList all rules of a connection account.\n\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n responses: {\n type: 'array',\n items: {\n $ref: '#/$defs/rule_list_response'\n }\n }\n },\n required: [ 'responses'\n ],\n $defs: {\n rule_list_response: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the rule.'\n },\n attributes: {\n type: 'object',\n description: 'Specifies the fields to be applied when the condition is met.',\n properties: {\n metadata: {\n type: 'object',\n description: 'The metadata to be attached in the entity. It is a key-value pairs where the values can be of any type (string, number, boolean, object, array, etc.).',\n additionalProperties: true\n }\n }\n },\n conditions: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n field: {\n type: 'string',\n description: 'The field to be checked in the rule.'\n },\n operator: {\n type: 'string',\n description: 'The operator to be used in the rule.',\n enum: [ 'equals'\n ]\n },\n value: {\n type: 'string',\n description: 'The value of the field to be checked in the rule.'\n }\n }\n }\n },\n created_at: {\n type: 'string',\n description: 'The datetime when the rule was created.',\n format: 'date-time'\n },\n effective_end_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rules should stop applying rules based on the date.'\n },\n effective_start_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rule should begin applying based on the date.'\n },\n entity_type: {\n type: 'string',\n description: 'The entity type to which the rule is applied.',\n enum: [ 'pay_statement_item'\n ]\n },\n priority: {\n type: 'integer',\n description: 'The priority of the rule.'\n },\n updated_at: {\n type: 'string',\n description: 'The datetime when the rule was last updated.',\n format: 'date-time'\n }\n }\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/update-pay-statement-item-company-hris-rules.ts b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/update-pay-statement-item-company-hris-rules.ts index f4fd4ff87..ceb760d27 100644 --- a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/update-pay-statement-item-company-hris-rules.ts +++ b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/update-pay-statement-item-company-hris-rules.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'update_pay_statement_item_company_hris_rules', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** this endpoint currently serves employers onboarded after March 4th and historical support will be added soon\nUpdate a rule for a pay statement item.\n\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the rule.'\n },\n attributes: {\n type: 'object',\n description: 'Specifies the fields to be applied when the condition is met.',\n properties: {\n metadata: {\n type: 'object',\n description: 'The metadata to be attached in the entity. It is a key-value pairs where the values can be of any type (string, number, boolean, object, array, etc.).',\n additionalProperties: true\n }\n }\n },\n conditions: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n field: {\n type: 'string',\n description: 'The field to be checked in the rule.'\n },\n operator: {\n type: 'string',\n description: 'The operator to be used in the rule.',\n enum: [ 'equals'\n ]\n },\n value: {\n type: 'string',\n description: 'The value of the field to be checked in the rule.'\n }\n }\n }\n },\n created_at: {\n type: 'string',\n description: 'The datetime when the rule was created.',\n format: 'date-time'\n },\n effective_end_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rules should stop applying rules based on the date.'\n },\n effective_start_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rule should begin applying based on the date.'\n },\n entity_type: {\n type: 'string',\n description: 'The entity type to which the rule is applied.',\n enum: [ 'pay_statement_item'\n ]\n },\n priority: {\n type: 'integer',\n description: 'The priority of the rule.'\n },\n updated_at: {\n type: 'string',\n description: 'The datetime when the rule was last updated.',\n format: 'date-time'\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** this endpoint currently serves employers onboarded after March 4th and historical support will be added soon\nUpdate a rule for a pay statement item.\n\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/rule_update_response',\n $defs: {\n rule_update_response: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the rule.'\n },\n attributes: {\n type: 'object',\n description: 'Specifies the fields to be applied when the condition is met.',\n properties: {\n metadata: {\n type: 'object',\n description: 'The metadata to be attached in the entity. It is a key-value pairs where the values can be of any type (string, number, boolean, object, array, etc.).',\n additionalProperties: true\n }\n }\n },\n conditions: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n field: {\n type: 'string',\n description: 'The field to be checked in the rule.'\n },\n operator: {\n type: 'string',\n description: 'The operator to be used in the rule.',\n enum: [ 'equals'\n ]\n },\n value: {\n type: 'string',\n description: 'The value of the field to be checked in the rule.'\n }\n }\n }\n },\n created_at: {\n type: 'string',\n description: 'The datetime when the rule was created.',\n format: 'date-time'\n },\n effective_end_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rules should stop applying rules based on the date.'\n },\n effective_start_date: {\n type: 'string',\n title: 'Date',\n description: 'Specifies when the rule should begin applying based on the date.'\n },\n entity_type: {\n type: 'string',\n description: 'The entity type to which the rule is applied.',\n enum: [ 'pay_statement_item'\n ]\n },\n priority: {\n type: 'integer',\n description: 'The priority of the rule.'\n },\n updated_at: {\n type: 'string',\n description: 'The datetime when the rule was last updated.',\n format: 'date-time'\n }\n }\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts b/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts index e2b4bf898..e8d572395 100644 --- a/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts +++ b/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'list_hris_documents', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** This endpoint is in beta and may change.\nRetrieve a list of company-wide documents.\n\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n documents: {\n type: 'array',\n items: {\n $ref: '#/$defs/document_response'\n }\n },\n paging: {\n $ref: '#/$defs/paging'\n }\n },\n required: [ 'documents',\n 'paging'\n ],\n $defs: {\n document_response: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'A stable Finch id for the document.'\n },\n individual_id: {\n type: 'string',\n description: 'The ID of the individual associated with the document. This will be null for employer-level documents.'\n },\n type: {\n type: 'string',\n description: 'The type of document.',\n enum: [ 'w4_2020',\n 'w4_2005'\n ]\n },\n url: {\n type: 'string',\n description: 'A URL to access the document. Format: `https://api.tryfinch.com/employer/documents/:document_id`.'\n },\n year: {\n type: 'number',\n description: 'The year the document applies to, if available.'\n }\n }\n },\n paging: {\n type: 'object',\n title: 'Paging',\n properties: {\n offset: {\n type: 'integer',\n description: 'The current start index of the returned list of elements'\n },\n count: {\n type: 'integer',\n description: 'The total number of elements for the entire query (not just the given page)'\n }\n },\n required: [ 'offset'\n ]\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** This endpoint is in beta and may change.\nRetrieve a list of company-wide documents.\n\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/document_list_response',\n $defs: {\n document_list_response: {\n type: 'object',\n properties: {\n documents: {\n type: 'array',\n items: {\n $ref: '#/$defs/document_response'\n }\n },\n paging: {\n $ref: '#/$defs/paging'\n }\n },\n required: [ 'documents',\n 'paging'\n ]\n },\n document_response: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'A stable Finch id for the document.'\n },\n individual_id: {\n type: 'string',\n description: 'The ID of the individual associated with the document. This will be null for employer-level documents.'\n },\n type: {\n type: 'string',\n description: 'The type of document.',\n enum: [ 'w4_2020',\n 'w4_2005'\n ]\n },\n url: {\n type: 'string',\n description: 'A URL to access the document. Format: `https://api.tryfinch.com/employer/documents/:document_id`.'\n },\n year: {\n type: 'number',\n description: 'The year the document applies to, if available.'\n }\n }\n },\n paging: {\n type: 'object',\n title: 'Paging',\n properties: {\n offset: {\n type: 'integer',\n description: 'The current start index of the returned list of elements'\n },\n count: {\n type: 'integer',\n description: 'The total number of elements for the entire query (not just the given page)'\n }\n },\n required: [ 'offset'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts b/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts index ddb7e766c..f75adb839 100644 --- a/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts +++ b/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'retreive_hris_documents', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** This endpoint is in beta and may change.\nRetrieve details of a specific document by its ID.\n\n\n# Response Schema\n```json\n{\n anyOf: [ {\n $ref: '#/$defs/w42020'\n },\n {\n $ref: '#/$defs/w42005'\n }\n ],\n description: 'A 2020 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.',\n $defs: {\n w42020: {\n type: 'object',\n description: 'A 2020 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.',\n properties: {\n data: {\n type: 'object',\n description: 'Detailed information specific to the 2020 W4 form.',\n properties: {\n amount_for_other_dependents: {\n type: 'integer',\n description: 'Amount claimed for dependents other than qualifying children under 17 (in cents).'\n },\n amount_for_qualifying_children_under_17: {\n type: 'integer',\n description: 'Amount claimed for dependents under 17 years old (in cents).'\n },\n deductions: {\n type: 'integer',\n description: 'Deductible expenses (in cents).'\n },\n extra_withholding: {\n type: 'integer',\n description: 'Additional withholding amount (in cents).'\n },\n filing_status: {\n type: 'string',\n description: 'The individual\\'s filing status for tax purposes.',\n enum: [ 'head_of_household',\n 'married_filing_jointly_or_qualifying_surviving_spouse',\n 'single_or_married_filing_separately'\n ]\n },\n individual_id: {\n type: 'string',\n description: 'The unique identifier for the individual associated with this document.'\n },\n other_income: {\n type: 'integer',\n description: 'Additional income from sources outside of primary employment (in cents).'\n },\n total_claim_dependent_and_other_credits: {\n type: 'integer',\n description: 'Total amount claimed for dependents and other credits (in cents).'\n }\n }\n },\n type: {\n type: 'string',\n description: 'Specifies the form type, indicating that this document is a 2020 W4 form.',\n enum: [ 'w4_2020'\n ]\n },\n year: {\n type: 'number',\n description: 'The tax year this W4 document applies to.'\n }\n }\n },\n w42005: {\n type: 'object',\n description: 'A 2005 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.',\n properties: {\n data: {\n type: 'object',\n description: 'Detailed information specific to the 2005 W4 form.',\n properties: {\n additional_withholding: {\n type: 'integer',\n description: 'Additional withholding amount (in cents).'\n },\n exemption: {\n type: 'string',\n description: 'Indicates exemption status from federal tax withholding.',\n enum: [ 'exempt',\n 'non_exempt'\n ]\n },\n filing_status: {\n type: 'string',\n description: 'The individual\\'s filing status for tax purposes.',\n enum: [ 'married',\n 'married_but_withhold_at_higher_single_rate',\n 'single'\n ]\n },\n individual_id: {\n type: 'string',\n description: 'The unique identifier for the individual associated with this 2005 W4 form.'\n },\n total_number_of_allowances: {\n type: 'integer',\n description: 'Total number of allowances claimed (in cents).'\n }\n }\n },\n type: {\n type: 'string',\n description: 'Specifies the form type, indicating that this document is a 2005 W4 form.',\n enum: [ 'w4_2005'\n ]\n },\n year: {\n type: 'number',\n description: 'The tax year this W4 document applies to.'\n }\n }\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** This endpoint is in beta and may change.\nRetrieve details of a specific document by its ID.\n\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/document_retreive_response',\n $defs: {\n document_retreive_response: {\n anyOf: [ {\n $ref: '#/$defs/w42020'\n },\n {\n $ref: '#/$defs/w42005'\n }\n ],\n description: 'A 2020 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.'\n },\n w42020: {\n type: 'object',\n description: 'A 2020 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.',\n properties: {\n data: {\n type: 'object',\n description: 'Detailed information specific to the 2020 W4 form.',\n properties: {\n amount_for_other_dependents: {\n type: 'integer',\n description: 'Amount claimed for dependents other than qualifying children under 17 (in cents).'\n },\n amount_for_qualifying_children_under_17: {\n type: 'integer',\n description: 'Amount claimed for dependents under 17 years old (in cents).'\n },\n deductions: {\n type: 'integer',\n description: 'Deductible expenses (in cents).'\n },\n extra_withholding: {\n type: 'integer',\n description: 'Additional withholding amount (in cents).'\n },\n filing_status: {\n type: 'string',\n description: 'The individual\\'s filing status for tax purposes.',\n enum: [ 'head_of_household',\n 'married_filing_jointly_or_qualifying_surviving_spouse',\n 'single_or_married_filing_separately'\n ]\n },\n individual_id: {\n type: 'string',\n description: 'The unique identifier for the individual associated with this document.'\n },\n other_income: {\n type: 'integer',\n description: 'Additional income from sources outside of primary employment (in cents).'\n },\n total_claim_dependent_and_other_credits: {\n type: 'integer',\n description: 'Total amount claimed for dependents and other credits (in cents).'\n }\n }\n },\n type: {\n type: 'string',\n description: 'Specifies the form type, indicating that this document is a 2020 W4 form.',\n enum: [ 'w4_2020'\n ]\n },\n year: {\n type: 'number',\n description: 'The tax year this W4 document applies to.'\n }\n }\n },\n w42005: {\n type: 'object',\n description: 'A 2005 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.',\n properties: {\n data: {\n type: 'object',\n description: 'Detailed information specific to the 2005 W4 form.',\n properties: {\n additional_withholding: {\n type: 'integer',\n description: 'Additional withholding amount (in cents).'\n },\n exemption: {\n type: 'string',\n description: 'Indicates exemption status from federal tax withholding.',\n enum: [ 'exempt',\n 'non_exempt'\n ]\n },\n filing_status: {\n type: 'string',\n description: 'The individual\\'s filing status for tax purposes.',\n enum: [ 'married',\n 'married_but_withhold_at_higher_single_rate',\n 'single'\n ]\n },\n individual_id: {\n type: 'string',\n description: 'The unique identifier for the individual associated with this 2005 W4 form.'\n },\n total_number_of_allowances: {\n type: 'integer',\n description: 'Total number of allowances claimed (in cents).'\n }\n }\n },\n type: {\n type: 'string',\n description: 'Specifies the form type, indicating that this document is a 2005 W4 form.',\n enum: [ 'w4_2005'\n ]\n },\n year: {\n type: 'number',\n description: 'The tax year this W4 document applies to.'\n }\n }\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/jobs/automated/create-jobs-automated.ts b/packages/mcp-server/src/tools/jobs/automated/create-jobs-automated.ts index 8c03a23cd..efd870cbc 100644 --- a/packages/mcp-server/src/tools/jobs/automated/create-jobs-automated.ts +++ b/packages/mcp-server/src/tools/jobs/automated/create-jobs-automated.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'create_jobs_automated', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nEnqueue an automated job.\n\n`data_sync_all`: Enqueue a job to re-sync all data for a connection. `data_sync_all` has a concurrency limit of 1 job at a time per connection. This means that if this endpoint is called while a job is already in progress for this connection, Finch will return the `job_id` of the job that is currently in progress. Finch allows a fixed window rate limit of 1 forced refresh per hour per connection.\n\n`w4_form_employee_sync`: Enqueues a job for sync W-4 data for a particular individual, identified by `individual_id`. This feature is currently in beta.\n\nThis endpoint is available for *Scale* tier customers as an add-on. To request access to this endpoint, please contact your Finch account manager.\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n allowed_refreshes: {\n type: 'integer',\n description: 'The number of allowed refreshes per hour (per hour, fixed window)'\n },\n remaining_refreshes: {\n type: 'integer',\n description: 'The number of remaining refreshes available (per hour, fixed window)'\n },\n job_id: {\n type: 'string',\n description: 'The id of the job that has been created.'\n },\n job_url: {\n type: 'string',\n description: 'The url that can be used to retrieve the job status'\n },\n retry_at: {\n type: 'string',\n description: 'ISO 8601 timestamp indicating when to retry the request'\n }\n },\n required: [ 'allowed_refreshes',\n 'remaining_refreshes'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nEnqueue an automated job.\n\n`data_sync_all`: Enqueue a job to re-sync all data for a connection. `data_sync_all` has a concurrency limit of 1 job at a time per connection. This means that if this endpoint is called while a job is already in progress for this connection, Finch will return the `job_id` of the job that is currently in progress. Finch allows a fixed window rate limit of 1 forced refresh per hour per connection.\n\n`w4_form_employee_sync`: Enqueues a job for sync W-4 data for a particular individual, identified by `individual_id`. This feature is currently in beta.\n\nThis endpoint is available for *Scale* tier customers as an add-on. To request access to this endpoint, please contact your Finch account manager.\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/automated_create_response',\n $defs: {\n automated_create_response: {\n type: 'object',\n properties: {\n allowed_refreshes: {\n type: 'integer',\n description: 'The number of allowed refreshes per hour (per hour, fixed window)'\n },\n remaining_refreshes: {\n type: 'integer',\n description: 'The number of remaining refreshes available (per hour, fixed window)'\n },\n job_id: {\n type: 'string',\n description: 'The id of the job that has been created.'\n },\n job_url: {\n type: 'string',\n description: 'The url that can be used to retrieve the job status'\n },\n retry_at: {\n type: 'string',\n description: 'ISO 8601 timestamp indicating when to retry the request'\n }\n },\n required: [ 'allowed_refreshes',\n 'remaining_refreshes'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', anyOf: [ diff --git a/packages/mcp-server/src/tools/jobs/automated/list-jobs-automated.ts b/packages/mcp-server/src/tools/jobs/automated/list-jobs-automated.ts index a2b7e70d4..dde710268 100644 --- a/packages/mcp-server/src/tools/jobs/automated/list-jobs-automated.ts +++ b/packages/mcp-server/src/tools/jobs/automated/list-jobs-automated.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'list_jobs_automated', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nGet all automated jobs. Automated jobs are completed by a machine. By default, jobs are sorted in descending order by submission time. For scheduled jobs such as data syncs, only the next scheduled job is shown.\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n data: {\n type: 'array',\n items: {\n $ref: '#/$defs/automated_async_job'\n }\n },\n meta: {\n type: 'object',\n properties: {\n quotas: {\n type: 'object',\n description: 'Information about remaining quotas for this connection. Only applicable for customers opted in to use Finch\\'s Data Sync Refresh endpoint (`POST /jobs/automated`). Please contact a Finch representative for more details.',\n properties: {\n data_sync_all: {\n type: 'object',\n properties: {\n allowed_refreshes: {\n type: 'integer'\n },\n remaining_refreshes: {\n type: 'integer'\n }\n }\n }\n }\n }\n }\n }\n },\n required: [ 'data',\n 'meta'\n ],\n $defs: {\n automated_async_job: {\n type: 'object',\n title: 'AutomatedAsyncJob',\n properties: {\n completed_at: {\n type: 'string',\n description: 'The datetime the job completed.',\n format: 'date-time'\n },\n created_at: {\n type: 'string',\n description: 'The datetime when the job was created. for scheduled jobs, this will be the initial connection time. For ad-hoc jobs, this will be the time the creation request was received.',\n format: 'date-time'\n },\n job_id: {\n type: 'string',\n description: 'The id of the job that has been created.'\n },\n job_url: {\n type: 'string',\n description: 'The url that can be used to retrieve the job status'\n },\n params: {\n type: 'object',\n description: 'The input parameters for the job.',\n properties: {\n individual_id: {\n type: 'string',\n description: 'The ID of the individual that the job was completed for.'\n }\n }\n },\n scheduled_at: {\n type: 'string',\n description: 'The datetime a job is scheduled to be run. For scheduled jobs, this datetime can be in the future if the job has not yet been enqueued. For ad-hoc jobs, this field will be null.',\n format: 'date-time'\n },\n started_at: {\n type: 'string',\n description: 'The datetime a job entered into the job queue.',\n format: 'date-time'\n },\n status: {\n type: 'string',\n enum: [ 'pending',\n 'in_progress',\n 'complete',\n 'error',\n 'reauth_error',\n 'permissions_error'\n ]\n },\n type: {\n type: 'string',\n description: 'The type of automated job',\n enum: [ 'data_sync_all',\n 'w4_form_employee_sync'\n ]\n }\n },\n required: [ 'completed_at',\n 'created_at',\n 'job_id',\n 'job_url',\n 'params',\n 'scheduled_at',\n 'started_at',\n 'status',\n 'type'\n ]\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nGet all automated jobs. Automated jobs are completed by a machine. By default, jobs are sorted in descending order by submission time. For scheduled jobs such as data syncs, only the next scheduled job is shown.\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/automated_list_response',\n $defs: {\n automated_list_response: {\n type: 'object',\n properties: {\n data: {\n type: 'array',\n items: {\n $ref: '#/$defs/automated_async_job'\n }\n },\n meta: {\n type: 'object',\n properties: {\n quotas: {\n type: 'object',\n description: 'Information about remaining quotas for this connection. Only applicable for customers opted in to use Finch\\'s Data Sync Refresh endpoint (`POST /jobs/automated`). Please contact a Finch representative for more details.',\n properties: {\n data_sync_all: {\n type: 'object',\n properties: {\n allowed_refreshes: {\n type: 'integer'\n },\n remaining_refreshes: {\n type: 'integer'\n }\n }\n }\n }\n }\n }\n }\n },\n required: [ 'data',\n 'meta'\n ]\n },\n automated_async_job: {\n type: 'object',\n title: 'AutomatedAsyncJob',\n properties: {\n completed_at: {\n type: 'string',\n description: 'The datetime the job completed.',\n format: 'date-time'\n },\n created_at: {\n type: 'string',\n description: 'The datetime when the job was created. for scheduled jobs, this will be the initial connection time. For ad-hoc jobs, this will be the time the creation request was received.',\n format: 'date-time'\n },\n job_id: {\n type: 'string',\n description: 'The id of the job that has been created.'\n },\n job_url: {\n type: 'string',\n description: 'The url that can be used to retrieve the job status'\n },\n params: {\n type: 'object',\n description: 'The input parameters for the job.',\n properties: {\n individual_id: {\n type: 'string',\n description: 'The ID of the individual that the job was completed for.'\n }\n }\n },\n scheduled_at: {\n type: 'string',\n description: 'The datetime a job is scheduled to be run. For scheduled jobs, this datetime can be in the future if the job has not yet been enqueued. For ad-hoc jobs, this field will be null.',\n format: 'date-time'\n },\n started_at: {\n type: 'string',\n description: 'The datetime a job entered into the job queue.',\n format: 'date-time'\n },\n status: {\n type: 'string',\n enum: [ 'pending',\n 'in_progress',\n 'complete',\n 'error',\n 'reauth_error',\n 'permissions_error'\n ]\n },\n type: {\n type: 'string',\n description: 'The type of automated job',\n enum: [ 'data_sync_all',\n 'w4_form_employee_sync'\n ]\n }\n },\n required: [ 'completed_at',\n 'created_at',\n 'job_id',\n 'job_url',\n 'params',\n 'scheduled_at',\n 'started_at',\n 'status',\n 'type'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/payroll/pay-groups/list-payroll-pay-groups.ts b/packages/mcp-server/src/tools/payroll/pay-groups/list-payroll-pay-groups.ts index de9b9fd0b..b0ea09d22 100644 --- a/packages/mcp-server/src/tools/payroll/pay-groups/list-payroll-pay-groups.ts +++ b/packages/mcp-server/src/tools/payroll/pay-groups/list-payroll-pay-groups.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'list_payroll_pay_groups', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRead company pay groups and frequencies\n\n# Response Schema\n```json\n{\n type: 'array',\n items: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the pay group'\n },\n name: {\n type: 'string',\n description: 'Name of the pay group'\n },\n pay_frequencies: {\n type: 'array',\n description: 'List of pay frequencies associated with this pay group',\n items: {\n type: 'string',\n enum: [ 'annually',\n 'bi_weekly',\n 'daily',\n 'monthly',\n 'other',\n 'quarterly',\n 'semi_annually',\n 'semi_monthly',\n 'weekly'\n ]\n }\n }\n },\n required: [ 'id',\n 'name',\n 'pay_frequencies'\n ]\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRead company pay groups and frequencies\n\n# Response Schema\n```json\n{\n type: 'array',\n items: {\n $ref: '#/$defs/pay_group_list_response'\n },\n $defs: {\n pay_group_list_response: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the pay group'\n },\n name: {\n type: 'string',\n description: 'Name of the pay group'\n },\n pay_frequencies: {\n type: 'array',\n description: 'List of pay frequencies associated with this pay group',\n items: {\n type: 'string',\n enum: [ 'annually',\n 'bi_weekly',\n 'daily',\n 'monthly',\n 'other',\n 'quarterly',\n 'semi_annually',\n 'semi_monthly',\n 'weekly'\n ]\n }\n }\n },\n required: [ 'id',\n 'name',\n 'pay_frequencies'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/payroll/pay-groups/retrieve-payroll-pay-groups.ts b/packages/mcp-server/src/tools/payroll/pay-groups/retrieve-payroll-pay-groups.ts index 9a6079b7f..3e64cb3c3 100644 --- a/packages/mcp-server/src/tools/payroll/pay-groups/retrieve-payroll-pay-groups.ts +++ b/packages/mcp-server/src/tools/payroll/pay-groups/retrieve-payroll-pay-groups.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'retrieve_payroll_pay_groups', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRead information from a single pay group\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the pay group'\n },\n individual_ids: {\n type: 'array',\n items: {\n type: 'string',\n description: 'Finch id (uuidv4) for an individual assigned to this pay group'\n }\n },\n name: {\n type: 'string',\n description: 'Name of the pay group'\n },\n pay_frequencies: {\n type: 'array',\n description: 'List of pay frequencies associated with this pay group',\n items: {\n type: 'string',\n enum: [ 'annually',\n 'bi_weekly',\n 'daily',\n 'monthly',\n 'other',\n 'quarterly',\n 'semi_annually',\n 'semi_monthly',\n 'weekly'\n ]\n }\n }\n },\n required: [ 'id',\n 'individual_ids',\n 'name',\n 'pay_frequencies'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRead information from a single pay group\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/pay_group_retrieve_response',\n $defs: {\n pay_group_retrieve_response: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Finch id (uuidv4) for the pay group'\n },\n individual_ids: {\n type: 'array',\n items: {\n type: 'string',\n description: 'Finch id (uuidv4) for an individual assigned to this pay group'\n }\n },\n name: {\n type: 'string',\n description: 'Name of the pay group'\n },\n pay_frequencies: {\n type: 'array',\n description: 'List of pay frequencies associated with this pay group',\n items: {\n type: 'string',\n enum: [ 'annually',\n 'bi_weekly',\n 'daily',\n 'monthly',\n 'other',\n 'quarterly',\n 'semi_annually',\n 'semi_monthly',\n 'weekly'\n ]\n }\n }\n },\n required: [ 'id',\n 'individual_ids',\n 'name',\n 'pay_frequencies'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/providers/list-providers.ts b/packages/mcp-server/src/tools/providers/list-providers.ts index 9be1cb450..70e47a5df 100644 --- a/packages/mcp-server/src/tools/providers/list-providers.ts +++ b/packages/mcp-server/src/tools/providers/list-providers.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'list_providers', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nReturn details on all available payroll and HR systems.\n\n# Response Schema\n```json\n{\n type: 'array',\n items: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'The id of the payroll provider used in Connect.'\n },\n display_name: {\n type: 'string',\n description: 'The display name of the payroll provider.'\n },\n products: {\n type: 'array',\n description: 'The list of Finch products supported on this payroll provider.',\n items: {\n type: 'string'\n }\n },\n authentication_methods: {\n type: 'array',\n description: 'The authentication methods supported by the provider.',\n items: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description: 'The type of authentication method',\n enum: [ 'assisted',\n 'credential',\n 'api_token',\n 'api_credential',\n 'oauth',\n 'api'\n ]\n },\n benefits_support: {\n type: 'object',\n description: 'The supported benefit types and their configurations',\n additionalProperties: true\n },\n supported_fields: {\n type: 'object',\n description: 'The supported fields for each Finch product',\n additionalProperties: true\n }\n },\n required: [ 'type'\n ]\n }\n },\n beta: {\n type: 'boolean',\n description: '`true` if the integration is in a beta state, `false` otherwise'\n },\n icon: {\n type: 'string',\n description: 'The url to the official icon of the payroll provider.'\n },\n logo: {\n type: 'string',\n description: 'The url to the official logo of the payroll provider.'\n },\n manual: {\n type: 'boolean',\n description: '[DEPRECATED] Whether the Finch integration with this provider uses the Assisted Connect Flow by default. This field is now deprecated. Please check for a `type` of `assisted` in the `authentication_methods` field instead.'\n },\n mfa_required: {\n type: 'boolean',\n description: 'whether MFA is required for the provider.'\n },\n primary_color: {\n type: 'string',\n description: 'The hex code for the primary color of the payroll provider.'\n }\n },\n required: [ 'id',\n 'display_name',\n 'products'\n ]\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nReturn details on all available payroll and HR systems.\n\n# Response Schema\n```json\n{\n type: 'array',\n items: {\n $ref: '#/$defs/provider_list_response'\n },\n $defs: {\n provider_list_response: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'The id of the payroll provider used in Connect.'\n },\n display_name: {\n type: 'string',\n description: 'The display name of the payroll provider.'\n },\n products: {\n type: 'array',\n description: 'The list of Finch products supported on this payroll provider.',\n items: {\n type: 'string'\n }\n },\n authentication_methods: {\n type: 'array',\n description: 'The authentication methods supported by the provider.',\n items: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description: 'The type of authentication method',\n enum: [ 'assisted',\n 'credential',\n 'api_token',\n 'api_credential',\n 'oauth',\n 'api'\n ]\n },\n benefits_support: {\n type: 'object',\n description: 'The supported benefit types and their configurations',\n additionalProperties: true\n },\n supported_fields: {\n type: 'object',\n description: 'The supported fields for each Finch product',\n additionalProperties: true\n }\n },\n required: [ 'type'\n ]\n }\n },\n beta: {\n type: 'boolean',\n description: '`true` if the integration is in a beta state, `false` otherwise'\n },\n icon: {\n type: 'string',\n description: 'The url to the official icon of the payroll provider.'\n },\n logo: {\n type: 'string',\n description: 'The url to the official logo of the payroll provider.'\n },\n manual: {\n type: 'boolean',\n description: '[DEPRECATED] Whether the Finch integration with this provider uses the Assisted Connect Flow by default. This field is now deprecated. Please check for a `type` of `assisted` in the `authentication_methods` field instead.'\n },\n mfa_required: {\n type: 'boolean',\n description: 'whether MFA is required for the provider.'\n },\n primary_color: {\n type: 'string',\n description: 'The hex code for the primary color of the payroll provider.'\n }\n },\n required: [ 'id',\n 'display_name',\n 'products'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts b/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts index a104c4d3f..4407f890f 100644 --- a/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts +++ b/packages/mcp-server/src/tools/request-forwarding/forward-request-forwarding.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'forward_request_forwarding', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nThe Forward API allows you to make direct requests to an employment system. If Finch's unified API\ndoesn't have a data model that cleanly fits your needs, then Forward allows you to push or pull\ndata models directly against an integration's API.\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n request: {\n type: 'object',\n description: 'An object containing details of your original forwarded request, for your ease of reference.',\n properties: {\n method: {\n type: 'string',\n description: 'The HTTP method that was specified for the forwarded request. Valid values include: `GET` , `POST` , `PUT` , `DELETE` , and `PATCH`.'\n },\n route: {\n type: 'string',\n description: 'The URL route path that was specified for the forwarded request.'\n },\n data: {\n anyOf: [ {\n type: 'string'\n },\n {\n type: 'object',\n additionalProperties: true\n }\n ],\n description: 'The body that was specified for the forwarded request.'\n },\n headers: {\n type: 'object',\n description: 'The HTTP headers that were specified for the forwarded request.',\n additionalProperties: true\n },\n params: {\n type: 'object',\n description: 'The query parameters that were specified for the forwarded request.',\n additionalProperties: true\n }\n },\n required: [ 'method',\n 'route'\n ]\n },\n statusCode: {\n type: 'integer',\n description: 'The HTTP status code of the forwarded request\\'s response, exactly received from the underlying integration\\'s API. This value will be returned as an integer.'\n },\n data: {\n type: 'string',\n description: 'A string representation of the HTTP response body of the forwarded request\\'s response received from the underlying integration\\'s API. This field may be null in the case where the upstream system\\'s response is empty.'\n },\n headers: {\n type: 'object',\n description: 'The HTTP headers of the forwarded request\\'s response, exactly as received from the underlying integration\\'s API.',\n additionalProperties: true\n }\n },\n required: [ 'request',\n 'statusCode'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nThe Forward API allows you to make direct requests to an employment system. If Finch's unified API\ndoesn't have a data model that cleanly fits your needs, then Forward allows you to push or pull\ndata models directly against an integration's API.\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/request_forwarding_forward_response',\n $defs: {\n request_forwarding_forward_response: {\n type: 'object',\n properties: {\n request: {\n type: 'object',\n description: 'An object containing details of your original forwarded request, for your ease of reference.',\n properties: {\n method: {\n type: 'string',\n description: 'The HTTP method that was specified for the forwarded request. Valid values include: `GET` , `POST` , `PUT` , `DELETE` , and `PATCH`.'\n },\n route: {\n type: 'string',\n description: 'The URL route path that was specified for the forwarded request.'\n },\n data: {\n anyOf: [ {\n type: 'string'\n },\n {\n type: 'object',\n additionalProperties: true\n }\n ],\n description: 'The body that was specified for the forwarded request.'\n },\n headers: {\n type: 'object',\n description: 'The HTTP headers that were specified for the forwarded request.',\n additionalProperties: true\n },\n params: {\n type: 'object',\n description: 'The query parameters that were specified for the forwarded request.',\n additionalProperties: true\n }\n },\n required: [ 'method',\n 'route'\n ]\n },\n statusCode: {\n type: 'integer',\n description: 'The HTTP status code of the forwarded request\\'s response, exactly received from the underlying integration\\'s API. This value will be returned as an integer.'\n },\n data: {\n type: 'string',\n description: 'A string representation of the HTTP response body of the forwarded request\\'s response received from the underlying integration\\'s API. This field may be null in the case where the upstream system\\'s response is empty.'\n },\n headers: {\n type: 'object',\n description: 'The HTTP headers of the forwarded request\\'s response, exactly as received from the underlying integration\\'s API.',\n additionalProperties: true\n }\n },\n required: [ 'request',\n 'statusCode'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/sandbox/company/update-sandbox-company.ts b/packages/mcp-server/src/tools/sandbox/company/update-sandbox-company.ts index 746321dba..e46a0642d 100644 --- a/packages/mcp-server/src/tools/sandbox/company/update-sandbox-company.ts +++ b/packages/mcp-server/src/tools/sandbox/company/update-sandbox-company.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'update_sandbox_company', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nUpdate a sandbox company's data\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n accounts: {\n type: 'array',\n description: 'An array of bank account objects associated with the payroll/HRIS system.',\n items: {\n type: 'object',\n properties: {\n account_name: {\n type: 'string',\n description: 'The name of the bank associated in the payroll/HRIS system.'\n },\n account_number: {\n type: 'string',\n description: '10-12 digit number to specify the bank account'\n },\n account_type: {\n type: 'string',\n description: 'The type of bank account.',\n enum: [ 'checking',\n 'savings'\n ]\n },\n institution_name: {\n type: 'string',\n description: 'Name of the banking institution.'\n },\n routing_number: {\n type: 'string',\n description: 'A nine-digit code that\\'s based on the U.S. Bank location where your account was opened.'\n }\n }\n }\n },\n departments: {\n type: 'array',\n description: 'The array of company departments.',\n items: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'The department name.'\n },\n parent: {\n type: 'object',\n description: 'The parent department, if present.',\n properties: {\n name: {\n type: 'string',\n description: 'The parent department\\'s name.'\n }\n }\n }\n }\n }\n },\n ein: {\n type: 'string',\n description: 'The employer identification number.'\n },\n entity: {\n type: 'object',\n description: 'The entity type object.',\n properties: {\n subtype: {\n type: 'string',\n description: 'The tax payer subtype of the company.',\n enum: [ 's_corporation',\n 'c_corporation',\n 'b_corporation'\n ]\n },\n type: {\n type: 'string',\n description: 'The tax payer type of the company.',\n enum: [ 'llc',\n 'lp',\n 'corporation',\n 'sole_proprietor',\n 'non_profit',\n 'partnership',\n 'cooperative'\n ]\n }\n }\n },\n legal_name: {\n type: 'string',\n description: 'The legal name of the company.'\n },\n locations: {\n type: 'array',\n items: {\n $ref: '#/$defs/location'\n }\n },\n primary_email: {\n type: 'string',\n description: 'The email of the main administrator on the account.'\n },\n primary_phone_number: {\n type: 'string',\n description: 'The phone number of the main administrator on the account. Format: E.164, with extension where applicable, e.g. `+NNNNNNNNNNN xExtension`'\n }\n },\n required: [ 'accounts',\n 'departments',\n 'ein',\n 'entity',\n 'legal_name',\n 'locations',\n 'primary_email',\n 'primary_phone_number'\n ],\n $defs: {\n location: {\n type: 'object',\n title: 'Location',\n properties: {\n city: {\n type: 'string',\n description: 'City, district, suburb, town, or village.'\n },\n country: {\n type: 'string',\n description: 'The 2-letter ISO 3166 country code.'\n },\n line1: {\n type: 'string',\n description: 'Street address or PO box.'\n },\n line2: {\n type: 'string',\n description: 'Apartment, suite, unit, or building.'\n },\n postal_code: {\n type: 'string',\n description: 'The postal code or zip code.'\n },\n state: {\n type: 'string',\n description: 'The state code.'\n },\n name: {\n type: 'string'\n },\n source_id: {\n type: 'string'\n }\n },\n required: [ 'city',\n 'country',\n 'line1',\n 'line2',\n 'postal_code',\n 'state'\n ]\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nUpdate a sandbox company's data\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/company_update_response',\n $defs: {\n company_update_response: {\n type: 'object',\n properties: {\n accounts: {\n type: 'array',\n description: 'An array of bank account objects associated with the payroll/HRIS system.',\n items: {\n type: 'object',\n properties: {\n account_name: {\n type: 'string',\n description: 'The name of the bank associated in the payroll/HRIS system.'\n },\n account_number: {\n type: 'string',\n description: '10-12 digit number to specify the bank account'\n },\n account_type: {\n type: 'string',\n description: 'The type of bank account.',\n enum: [ 'checking',\n 'savings'\n ]\n },\n institution_name: {\n type: 'string',\n description: 'Name of the banking institution.'\n },\n routing_number: {\n type: 'string',\n description: 'A nine-digit code that\\'s based on the U.S. Bank location where your account was opened.'\n }\n }\n }\n },\n departments: {\n type: 'array',\n description: 'The array of company departments.',\n items: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'The department name.'\n },\n parent: {\n type: 'object',\n description: 'The parent department, if present.',\n properties: {\n name: {\n type: 'string',\n description: 'The parent department\\'s name.'\n }\n }\n }\n }\n }\n },\n ein: {\n type: 'string',\n description: 'The employer identification number.'\n },\n entity: {\n type: 'object',\n description: 'The entity type object.',\n properties: {\n subtype: {\n type: 'string',\n description: 'The tax payer subtype of the company.',\n enum: [ 's_corporation',\n 'c_corporation',\n 'b_corporation'\n ]\n },\n type: {\n type: 'string',\n description: 'The tax payer type of the company.',\n enum: [ 'llc',\n 'lp',\n 'corporation',\n 'sole_proprietor',\n 'non_profit',\n 'partnership',\n 'cooperative'\n ]\n }\n }\n },\n legal_name: {\n type: 'string',\n description: 'The legal name of the company.'\n },\n locations: {\n type: 'array',\n items: {\n $ref: '#/$defs/location'\n }\n },\n primary_email: {\n type: 'string',\n description: 'The email of the main administrator on the account.'\n },\n primary_phone_number: {\n type: 'string',\n description: 'The phone number of the main administrator on the account. Format: E.164, with extension where applicable, e.g. `+NNNNNNNNNNN xExtension`'\n }\n },\n required: [ 'accounts',\n 'departments',\n 'ein',\n 'entity',\n 'legal_name',\n 'locations',\n 'primary_email',\n 'primary_phone_number'\n ]\n },\n location: {\n type: 'object',\n title: 'Location',\n properties: {\n city: {\n type: 'string',\n description: 'City, district, suburb, town, or village.'\n },\n country: {\n type: 'string',\n description: 'The 2-letter ISO 3166 country code.'\n },\n line1: {\n type: 'string',\n description: 'Street address or PO box.'\n },\n line2: {\n type: 'string',\n description: 'Apartment, suite, unit, or building.'\n },\n postal_code: {\n type: 'string',\n description: 'The postal code or zip code.'\n },\n state: {\n type: 'string',\n description: 'The state code.'\n },\n name: {\n type: 'string'\n },\n source_id: {\n type: 'string'\n }\n },\n required: [ 'city',\n 'country',\n 'line1',\n 'line2',\n 'postal_code',\n 'state'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/sandbox/connections/accounts/create-connections-sandbox-accounts.ts b/packages/mcp-server/src/tools/sandbox/connections/accounts/create-connections-sandbox-accounts.ts index dd0a68ef7..e330b866e 100644 --- a/packages/mcp-server/src/tools/sandbox/connections/accounts/create-connections-sandbox-accounts.ts +++ b/packages/mcp-server/src/tools/sandbox/connections/accounts/create-connections-sandbox-accounts.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'create_connections_sandbox_accounts', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nCreate a new account for an existing connection (company/provider pair)\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n access_token: {\n type: 'string'\n },\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n authentication_type: {\n type: 'string',\n title: 'AuthenticationType',\n enum: [ 'credential',\n 'api_token',\n 'oauth',\n 'assisted'\n ]\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n connection_id: {\n type: 'string',\n description: 'The ID of the new connection'\n },\n products: {\n type: 'array',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`'\n }\n },\n required: [ 'access_token',\n 'account_id',\n 'authentication_type',\n 'company_id',\n 'connection_id',\n 'products',\n 'provider_id'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nCreate a new account for an existing connection (company/provider pair)\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/account_create_response',\n $defs: {\n account_create_response: {\n type: 'object',\n properties: {\n access_token: {\n type: 'string'\n },\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n authentication_type: {\n type: 'string',\n title: 'AuthenticationType',\n enum: [ 'credential',\n 'api_token',\n 'oauth',\n 'assisted'\n ]\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n connection_id: {\n type: 'string',\n description: 'The ID of the new connection'\n },\n products: {\n type: 'array',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`'\n }\n },\n required: [ 'access_token',\n 'account_id',\n 'authentication_type',\n 'company_id',\n 'connection_id',\n 'products',\n 'provider_id'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/sandbox/connections/accounts/update-connections-sandbox-accounts.ts b/packages/mcp-server/src/tools/sandbox/connections/accounts/update-connections-sandbox-accounts.ts index 5c404d615..0db70e8e7 100644 --- a/packages/mcp-server/src/tools/sandbox/connections/accounts/update-connections-sandbox-accounts.ts +++ b/packages/mcp-server/src/tools/sandbox/connections/accounts/update-connections-sandbox-accounts.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'update_connections_sandbox_accounts', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nUpdate an existing sandbox account. Change the connection status to understand how the Finch API responds.\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n authentication_type: {\n type: 'string',\n title: 'AuthenticationType',\n enum: [ 'credential',\n 'api_token',\n 'oauth',\n 'assisted'\n ]\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n products: {\n type: 'array',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`'\n },\n connection_id: {\n type: 'string',\n description: 'The ID of the new connection'\n }\n },\n required: [ 'account_id',\n 'authentication_type',\n 'company_id',\n 'products',\n 'provider_id'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nUpdate an existing sandbox account. Change the connection status to understand how the Finch API responds.\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/account_update_response',\n $defs: {\n account_update_response: {\n type: 'object',\n properties: {\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n authentication_type: {\n type: 'string',\n title: 'AuthenticationType',\n enum: [ 'credential',\n 'api_token',\n 'oauth',\n 'assisted'\n ]\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n products: {\n type: 'array',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`'\n },\n connection_id: {\n type: 'string',\n description: 'The ID of the new connection'\n }\n },\n required: [ 'account_id',\n 'authentication_type',\n 'company_id',\n 'products',\n 'provider_id'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/sandbox/connections/create-sandbox-connections.ts b/packages/mcp-server/src/tools/sandbox/connections/create-sandbox-connections.ts index 27f4cd8d8..a87e34ff2 100644 --- a/packages/mcp-server/src/tools/sandbox/connections/create-sandbox-connections.ts +++ b/packages/mcp-server/src/tools/sandbox/connections/create-sandbox-connections.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'create_sandbox_connections', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nCreate a new connection (new company/provider pair) with a new account\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n access_token: {\n type: 'string'\n },\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n authentication_type: {\n type: 'string',\n title: 'AuthenticationType',\n enum: [ 'credential',\n 'api_token',\n 'oauth',\n 'assisted'\n ]\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n connection_id: {\n type: 'string',\n description: 'The ID of the new connection'\n },\n products: {\n type: 'array',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`.'\n },\n token_type: {\n type: 'string'\n }\n },\n required: [ 'access_token',\n 'account_id',\n 'authentication_type',\n 'company_id',\n 'connection_id',\n 'products',\n 'provider_id'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nCreate a new connection (new company/provider pair) with a new account\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/connection_create_response',\n $defs: {\n connection_create_response: {\n type: 'object',\n properties: {\n access_token: {\n type: 'string'\n },\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n authentication_type: {\n type: 'string',\n title: 'AuthenticationType',\n enum: [ 'credential',\n 'api_token',\n 'oauth',\n 'assisted'\n ]\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate a connection with an access token'\n },\n connection_id: {\n type: 'string',\n description: 'The ID of the new connection'\n },\n products: {\n type: 'array',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`.'\n },\n token_type: {\n type: 'string'\n }\n },\n required: [ 'access_token',\n 'account_id',\n 'authentication_type',\n 'company_id',\n 'connection_id',\n 'products',\n 'provider_id'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/sandbox/directory/create-sandbox-directory.ts b/packages/mcp-server/src/tools/sandbox/directory/create-sandbox-directory.ts index ec52b6172..d0b01c8df 100644 --- a/packages/mcp-server/src/tools/sandbox/directory/create-sandbox-directory.ts +++ b/packages/mcp-server/src/tools/sandbox/directory/create-sandbox-directory.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'create_sandbox_directory', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nAdd new individuals to a sandbox company\n\n# Response Schema\n```json\n{\n type: 'array',\n description: 'The individuals which were created',\n items: {\n type: 'object',\n additionalProperties: true\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nAdd new individuals to a sandbox company\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/directory_create_response',\n $defs: {\n directory_create_response: {\n type: 'array',\n description: 'The individuals which were created',\n items: {\n type: 'object',\n additionalProperties: true\n }\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/sandbox/individual/update-sandbox-individual.ts b/packages/mcp-server/src/tools/sandbox/individual/update-sandbox-individual.ts index 6735cc5b0..6e57f5dd0 100644 --- a/packages/mcp-server/src/tools/sandbox/individual/update-sandbox-individual.ts +++ b/packages/mcp-server/src/tools/sandbox/individual/update-sandbox-individual.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'update_sandbox_individual', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nUpdate sandbox individual\n\n# Response Schema\n```json\n{\n type: 'object',\n title: 'Individual',\n properties: {\n id: {\n type: 'string',\n description: 'A stable Finch `id` (UUID v4) for an individual in the company.'\n },\n dob: {\n type: 'string',\n title: 'Date'\n },\n emails: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n data: {\n type: 'string'\n },\n type: {\n type: 'string',\n enum: [ 'work',\n 'personal'\n ]\n }\n }\n }\n },\n encrypted_ssn: {\n type: 'string',\n description: 'Social Security Number of the individual in **encrypted** format. This field is only available with the `ssn` scope enabled and the `options: { include: [\\'ssn\\'] }` param set in the body.'\n },\n ethnicity: {\n type: 'string',\n description: 'The EEOC-defined ethnicity of the individual.',\n enum: [ 'asian',\n 'white',\n 'black_or_african_american',\n 'native_hawaiian_or_pacific_islander',\n 'american_indian_or_alaska_native',\n 'hispanic_or_latino',\n 'two_or_more_races',\n 'decline_to_specify'\n ]\n },\n first_name: {\n type: 'string',\n description: 'The legal first name of the individual.'\n },\n gender: {\n type: 'string',\n description: 'The gender of the individual.',\n enum: [ 'female',\n 'male',\n 'other',\n 'decline_to_specify'\n ]\n },\n last_name: {\n type: 'string',\n description: 'The legal last name of the individual.'\n },\n middle_name: {\n type: 'string',\n description: 'The legal middle name of the individual.'\n },\n phone_numbers: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n data: {\n type: 'string'\n },\n type: {\n type: 'string',\n enum: [ 'work',\n 'personal'\n ]\n }\n }\n }\n },\n preferred_name: {\n type: 'string',\n description: 'The preferred name of the individual.'\n },\n residence: {\n $ref: '#/$defs/location'\n },\n ssn: {\n type: 'string',\n description: 'Social Security Number of the individual. This field is only available with the `ssn` scope enabled and the `options: { include: [\\'ssn\\'] }` param set in the body. [Click here to learn more about enabling the SSN field](/developer-resources/Enable-SSN-Field).'\n }\n },\n $defs: {\n location: {\n type: 'object',\n title: 'Location',\n properties: {\n city: {\n type: 'string',\n description: 'City, district, suburb, town, or village.'\n },\n country: {\n type: 'string',\n description: 'The 2-letter ISO 3166 country code.'\n },\n line1: {\n type: 'string',\n description: 'Street address or PO box.'\n },\n line2: {\n type: 'string',\n description: 'Apartment, suite, unit, or building.'\n },\n postal_code: {\n type: 'string',\n description: 'The postal code or zip code.'\n },\n state: {\n type: 'string',\n description: 'The state code.'\n },\n name: {\n type: 'string'\n },\n source_id: {\n type: 'string'\n }\n },\n required: [ 'city',\n 'country',\n 'line1',\n 'line2',\n 'postal_code',\n 'state'\n ]\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nUpdate sandbox individual\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/individual_update_response',\n $defs: {\n individual_update_response: {\n type: 'object',\n title: 'Individual',\n properties: {\n id: {\n type: 'string',\n description: 'A stable Finch `id` (UUID v4) for an individual in the company.'\n },\n dob: {\n type: 'string',\n title: 'Date'\n },\n emails: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n data: {\n type: 'string'\n },\n type: {\n type: 'string',\n enum: [ 'work',\n 'personal'\n ]\n }\n }\n }\n },\n encrypted_ssn: {\n type: 'string',\n description: 'Social Security Number of the individual in **encrypted** format. This field is only available with the `ssn` scope enabled and the `options: { include: [\\'ssn\\'] }` param set in the body.'\n },\n ethnicity: {\n type: 'string',\n description: 'The EEOC-defined ethnicity of the individual.',\n enum: [ 'asian',\n 'white',\n 'black_or_african_american',\n 'native_hawaiian_or_pacific_islander',\n 'american_indian_or_alaska_native',\n 'hispanic_or_latino',\n 'two_or_more_races',\n 'decline_to_specify'\n ]\n },\n first_name: {\n type: 'string',\n description: 'The legal first name of the individual.'\n },\n gender: {\n type: 'string',\n description: 'The gender of the individual.',\n enum: [ 'female',\n 'male',\n 'other',\n 'decline_to_specify'\n ]\n },\n last_name: {\n type: 'string',\n description: 'The legal last name of the individual.'\n },\n middle_name: {\n type: 'string',\n description: 'The legal middle name of the individual.'\n },\n phone_numbers: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n data: {\n type: 'string'\n },\n type: {\n type: 'string',\n enum: [ 'work',\n 'personal'\n ]\n }\n }\n }\n },\n preferred_name: {\n type: 'string',\n description: 'The preferred name of the individual.'\n },\n residence: {\n $ref: '#/$defs/location'\n },\n ssn: {\n type: 'string',\n description: 'Social Security Number of the individual. This field is only available with the `ssn` scope enabled and the `options: { include: [\\'ssn\\'] }` param set in the body. [Click here to learn more about enabling the SSN field](/developer-resources/Enable-SSN-Field).'\n }\n }\n },\n location: {\n type: 'object',\n title: 'Location',\n properties: {\n city: {\n type: 'string',\n description: 'City, district, suburb, town, or village.'\n },\n country: {\n type: 'string',\n description: 'The 2-letter ISO 3166 country code.'\n },\n line1: {\n type: 'string',\n description: 'Street address or PO box.'\n },\n line2: {\n type: 'string',\n description: 'Apartment, suite, unit, or building.'\n },\n postal_code: {\n type: 'string',\n description: 'The postal code or zip code.'\n },\n state: {\n type: 'string',\n description: 'The state code.'\n },\n name: {\n type: 'string'\n },\n source_id: {\n type: 'string'\n }\n },\n required: [ 'city',\n 'country',\n 'line1',\n 'line2',\n 'postal_code',\n 'state'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/sandbox/jobs/configuration/retrieve-jobs-sandbox-configuration.ts b/packages/mcp-server/src/tools/sandbox/jobs/configuration/retrieve-jobs-sandbox-configuration.ts index c3dadac8d..c91dcfcd3 100644 --- a/packages/mcp-server/src/tools/sandbox/jobs/configuration/retrieve-jobs-sandbox-configuration.ts +++ b/packages/mcp-server/src/tools/sandbox/jobs/configuration/retrieve-jobs-sandbox-configuration.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'retrieve_jobs_sandbox_configuration', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nGet configurations for sandbox jobs\n\n# Response Schema\n```json\n{\n type: 'array',\n items: {\n $ref: '#/$defs/sandbox_job_configuration'\n },\n $defs: {\n sandbox_job_configuration: {\n type: 'object',\n title: 'SandboxJobConfiguration',\n properties: {\n completion_status: {\n type: 'string',\n enum: [ 'complete',\n 'reauth_error',\n 'permissions_error',\n 'error'\n ]\n },\n type: {\n type: 'string',\n enum: [ 'data_sync_all'\n ]\n }\n },\n required: [ 'completion_status',\n 'type'\n ]\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nGet configurations for sandbox jobs\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/configuration_retrieve_response',\n $defs: {\n configuration_retrieve_response: {\n type: 'array',\n items: {\n $ref: '#/$defs/sandbox_job_configuration'\n }\n },\n sandbox_job_configuration: {\n type: 'object',\n title: 'SandboxJobConfiguration',\n properties: {\n completion_status: {\n type: 'string',\n enum: [ 'complete',\n 'reauth_error',\n 'permissions_error',\n 'error'\n ]\n },\n type: {\n type: 'string',\n enum: [ 'data_sync_all'\n ]\n }\n },\n required: [ 'completion_status',\n 'type'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/sandbox/jobs/create-sandbox-jobs.ts b/packages/mcp-server/src/tools/sandbox/jobs/create-sandbox-jobs.ts index 509929fc5..897d9b886 100644 --- a/packages/mcp-server/src/tools/sandbox/jobs/create-sandbox-jobs.ts +++ b/packages/mcp-server/src/tools/sandbox/jobs/create-sandbox-jobs.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'create_sandbox_jobs', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nEnqueue a new sandbox job\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n allowed_refreshes: {\n type: 'integer',\n description: 'The number of allowed refreshes per hour (per hour, fixed window)'\n },\n job_id: {\n type: 'string',\n description: 'The id of the job that has been created.'\n },\n job_url: {\n type: 'string',\n description: 'The url that can be used to retrieve the job status'\n },\n remaining_refreshes: {\n type: 'integer',\n description: 'The number of remaining refreshes available (per hour, fixed window)'\n }\n },\n required: [ 'allowed_refreshes',\n 'job_id',\n 'job_url',\n 'remaining_refreshes'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nEnqueue a new sandbox job\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/job_create_response',\n $defs: {\n job_create_response: {\n type: 'object',\n properties: {\n allowed_refreshes: {\n type: 'integer',\n description: 'The number of allowed refreshes per hour (per hour, fixed window)'\n },\n job_id: {\n type: 'string',\n description: 'The id of the job that has been created.'\n },\n job_url: {\n type: 'string',\n description: 'The url that can be used to retrieve the job status'\n },\n remaining_refreshes: {\n type: 'integer',\n description: 'The number of remaining refreshes available (per hour, fixed window)'\n }\n },\n required: [ 'allowed_refreshes',\n 'job_id',\n 'job_url',\n 'remaining_refreshes'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/sandbox/payment/create-sandbox-payment.ts b/packages/mcp-server/src/tools/sandbox/payment/create-sandbox-payment.ts index 3e10eb319..fcfb613d3 100644 --- a/packages/mcp-server/src/tools/sandbox/payment/create-sandbox-payment.ts +++ b/packages/mcp-server/src/tools/sandbox/payment/create-sandbox-payment.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'create_sandbox_payment', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nAdd a new sandbox payment\n\n# Response Schema\n```json\n{\n type: 'object',\n properties: {\n pay_date: {\n type: 'string',\n description: 'The date of the payment.'\n },\n payment_id: {\n type: 'string',\n description: 'The ID of the payment.'\n }\n },\n required: [ 'pay_date',\n 'payment_id'\n ]\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nAdd a new sandbox payment\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/payment_create_response',\n $defs: {\n payment_create_response: {\n type: 'object',\n properties: {\n pay_date: {\n type: 'string',\n description: 'The date of the payment.'\n },\n payment_id: {\n type: 'string',\n description: 'The ID of the payment.'\n }\n },\n required: [ 'pay_date',\n 'payment_id'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { From 6749ac47c9119c49a17b118d7d7cedd93232434d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 9 Oct 2025 12:58:14 +0000 Subject: [PATCH 43/51] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 845aada6f..cbb8c1b58 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-df44cda9b18320f8a8117d5c8dfa02ebd6739fc77fc87eb284748c987a7412a4.yml -openapi_spec_hash: 69524ddfedf3c4492e77826561f7c7d8 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-bfcb61384672f485be2ee4e2ae2938ef8c57c063c2ea5d0e7890e68098300579.yml +openapi_spec_hash: 5d75581b91b95d16f0fae017a36b4ea9 config_hash: 6d3585c0032e08d723d077d660fc8448 From 99a20c267f645658d3928f269f5da7a33b287d17 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 9 Oct 2025 15:59:25 +0000 Subject: [PATCH 44/51] feat(api): api update --- .stats.yml | 4 +- .../hris/documents/list-hris-documents.ts | 2 +- .../hris/documents/retreive-hris-documents.ts | 2 +- src/resources/hris/documents.ts | 48 +++++++++---------- 4 files changed, 28 insertions(+), 28 deletions(-) diff --git a/.stats.yml b/.stats.yml index cbb8c1b58..99ac1e564 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-bfcb61384672f485be2ee4e2ae2938ef8c57c063c2ea5d0e7890e68098300579.yml -openapi_spec_hash: 5d75581b91b95d16f0fae017a36b4ea9 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-199a2fd8b7387b0648e88b5942a8248895373a561aff663389982073e55c8eb5.yml +openapi_spec_hash: 7415c1faca5f2e873824893b140650f1 config_hash: 6d3585c0032e08d723d077d660fc8448 diff --git a/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts b/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts index e8d572395..94ad8649a 100644 --- a/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts +++ b/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'list_hris_documents', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** This endpoint is in beta and may change.\nRetrieve a list of company-wide documents.\n\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/document_list_response',\n $defs: {\n document_list_response: {\n type: 'object',\n properties: {\n documents: {\n type: 'array',\n items: {\n $ref: '#/$defs/document_response'\n }\n },\n paging: {\n $ref: '#/$defs/paging'\n }\n },\n required: [ 'documents',\n 'paging'\n ]\n },\n document_response: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'A stable Finch id for the document.'\n },\n individual_id: {\n type: 'string',\n description: 'The ID of the individual associated with the document. This will be null for employer-level documents.'\n },\n type: {\n type: 'string',\n description: 'The type of document.',\n enum: [ 'w4_2020',\n 'w4_2005'\n ]\n },\n url: {\n type: 'string',\n description: 'A URL to access the document. Format: `https://api.tryfinch.com/employer/documents/:document_id`.'\n },\n year: {\n type: 'number',\n description: 'The year the document applies to, if available.'\n }\n }\n },\n paging: {\n type: 'object',\n title: 'Paging',\n properties: {\n offset: {\n type: 'integer',\n description: 'The current start index of the returned list of elements'\n },\n count: {\n type: 'integer',\n description: 'The total number of elements for the entire query (not just the given page)'\n }\n },\n required: [ 'offset'\n ]\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** This endpoint is in beta and may change.\nRetrieve a list of company-wide documents.\n\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/document_list_response',\n $defs: {\n document_list_response: {\n type: 'object',\n properties: {\n documents: {\n type: 'array',\n items: {\n $ref: '#/$defs/document_response'\n }\n },\n paging: {\n $ref: '#/$defs/paging'\n }\n },\n required: [ 'documents',\n 'paging'\n ]\n },\n document_response: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'A stable Finch id for the document.'\n },\n individual_id: {\n type: 'string',\n description: 'The ID of the individual associated with the document. This will be null for employer-level documents.'\n },\n type: {\n type: 'string',\n description: 'The type of document.',\n enum: [ 'w4_2020',\n 'w4_2005'\n ]\n },\n url: {\n type: 'string',\n description: 'A URL to access the document. Format: `https://api.tryfinch.com/employer/documents/:document_id`.'\n },\n year: {\n type: 'number',\n description: 'The year the document applies to, if available.'\n }\n },\n required: [ 'id',\n 'individual_id',\n 'type',\n 'url',\n 'year'\n ]\n },\n paging: {\n type: 'object',\n title: 'Paging',\n properties: {\n offset: {\n type: 'integer',\n description: 'The current start index of the returned list of elements'\n },\n count: {\n type: 'integer',\n description: 'The total number of elements for the entire query (not just the given page)'\n }\n },\n required: [ 'offset'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts b/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts index f75adb839..cb7fd425d 100644 --- a/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts +++ b/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'retreive_hris_documents', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** This endpoint is in beta and may change.\nRetrieve details of a specific document by its ID.\n\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/document_retreive_response',\n $defs: {\n document_retreive_response: {\n anyOf: [ {\n $ref: '#/$defs/w42020'\n },\n {\n $ref: '#/$defs/w42005'\n }\n ],\n description: 'A 2020 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.'\n },\n w42020: {\n type: 'object',\n description: 'A 2020 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.',\n properties: {\n data: {\n type: 'object',\n description: 'Detailed information specific to the 2020 W4 form.',\n properties: {\n amount_for_other_dependents: {\n type: 'integer',\n description: 'Amount claimed for dependents other than qualifying children under 17 (in cents).'\n },\n amount_for_qualifying_children_under_17: {\n type: 'integer',\n description: 'Amount claimed for dependents under 17 years old (in cents).'\n },\n deductions: {\n type: 'integer',\n description: 'Deductible expenses (in cents).'\n },\n extra_withholding: {\n type: 'integer',\n description: 'Additional withholding amount (in cents).'\n },\n filing_status: {\n type: 'string',\n description: 'The individual\\'s filing status for tax purposes.',\n enum: [ 'head_of_household',\n 'married_filing_jointly_or_qualifying_surviving_spouse',\n 'single_or_married_filing_separately'\n ]\n },\n individual_id: {\n type: 'string',\n description: 'The unique identifier for the individual associated with this document.'\n },\n other_income: {\n type: 'integer',\n description: 'Additional income from sources outside of primary employment (in cents).'\n },\n total_claim_dependent_and_other_credits: {\n type: 'integer',\n description: 'Total amount claimed for dependents and other credits (in cents).'\n }\n }\n },\n type: {\n type: 'string',\n description: 'Specifies the form type, indicating that this document is a 2020 W4 form.',\n enum: [ 'w4_2020'\n ]\n },\n year: {\n type: 'number',\n description: 'The tax year this W4 document applies to.'\n }\n }\n },\n w42005: {\n type: 'object',\n description: 'A 2005 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.',\n properties: {\n data: {\n type: 'object',\n description: 'Detailed information specific to the 2005 W4 form.',\n properties: {\n additional_withholding: {\n type: 'integer',\n description: 'Additional withholding amount (in cents).'\n },\n exemption: {\n type: 'string',\n description: 'Indicates exemption status from federal tax withholding.',\n enum: [ 'exempt',\n 'non_exempt'\n ]\n },\n filing_status: {\n type: 'string',\n description: 'The individual\\'s filing status for tax purposes.',\n enum: [ 'married',\n 'married_but_withhold_at_higher_single_rate',\n 'single'\n ]\n },\n individual_id: {\n type: 'string',\n description: 'The unique identifier for the individual associated with this 2005 W4 form.'\n },\n total_number_of_allowances: {\n type: 'integer',\n description: 'Total number of allowances claimed (in cents).'\n }\n }\n },\n type: {\n type: 'string',\n description: 'Specifies the form type, indicating that this document is a 2005 W4 form.',\n enum: [ 'w4_2005'\n ]\n },\n year: {\n type: 'number',\n description: 'The tax year this W4 document applies to.'\n }\n }\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\n**Beta:** This endpoint is in beta and may change.\nRetrieve details of a specific document by its ID.\n\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/document_retreive_response',\n $defs: {\n document_retreive_response: {\n anyOf: [ {\n $ref: '#/$defs/w42020'\n },\n {\n $ref: '#/$defs/w42005'\n }\n ],\n description: 'A 2020 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.'\n },\n w42020: {\n type: 'object',\n description: 'A 2020 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.',\n properties: {\n data: {\n type: 'object',\n description: 'Detailed information specific to the 2020 W4 form.',\n properties: {\n amount_for_other_dependents: {\n type: 'integer',\n description: 'Amount claimed for dependents other than qualifying children under 17 (in cents).'\n },\n amount_for_qualifying_children_under_17: {\n type: 'integer',\n description: 'Amount claimed for dependents under 17 years old (in cents).'\n },\n deductions: {\n type: 'integer',\n description: 'Deductible expenses (in cents).'\n },\n extra_withholding: {\n type: 'integer',\n description: 'Additional withholding amount (in cents).'\n },\n filing_status: {\n type: 'string',\n description: 'The individual\\'s filing status for tax purposes.',\n enum: [ 'head_of_household',\n 'married_filing_jointly_or_qualifying_surviving_spouse',\n 'single_or_married_filing_separately'\n ]\n },\n individual_id: {\n type: 'string',\n description: 'The unique identifier for the individual associated with this document.'\n },\n other_income: {\n type: 'integer',\n description: 'Additional income from sources outside of primary employment (in cents).'\n },\n total_claim_dependent_and_other_credits: {\n type: 'integer',\n description: 'Total amount claimed for dependents and other credits (in cents).'\n }\n },\n required: [ 'amount_for_other_dependents',\n 'amount_for_qualifying_children_under_17',\n 'deductions',\n 'extra_withholding',\n 'filing_status',\n 'individual_id',\n 'other_income',\n 'total_claim_dependent_and_other_credits'\n ]\n },\n type: {\n type: 'string',\n description: 'Specifies the form type, indicating that this document is a 2020 W4 form.',\n enum: [ 'w4_2020'\n ]\n },\n year: {\n type: 'number',\n description: 'The tax year this W4 document applies to.'\n }\n },\n required: [ 'data',\n 'type',\n 'year'\n ]\n },\n w42005: {\n type: 'object',\n description: 'A 2005 version of the W-4 tax form containing information on an individual\\'s filing status, dependents, and withholding details.',\n properties: {\n data: {\n type: 'object',\n description: 'Detailed information specific to the 2005 W4 form.',\n properties: {\n additional_withholding: {\n type: 'integer',\n description: 'Additional withholding amount (in cents).'\n },\n exemption: {\n type: 'string',\n description: 'Indicates exemption status from federal tax withholding.',\n enum: [ 'exempt',\n 'non_exempt'\n ]\n },\n filing_status: {\n type: 'string',\n description: 'The individual\\'s filing status for tax purposes.',\n enum: [ 'married',\n 'married_but_withhold_at_higher_single_rate',\n 'single'\n ]\n },\n individual_id: {\n type: 'string',\n description: 'The unique identifier for the individual associated with this 2005 W4 form.'\n },\n total_number_of_allowances: {\n type: 'integer',\n description: 'Total number of allowances claimed (in cents).'\n }\n },\n required: [ 'additional_withholding',\n 'exemption',\n 'filing_status',\n 'individual_id',\n 'total_number_of_allowances'\n ]\n },\n type: {\n type: 'string',\n description: 'Specifies the form type, indicating that this document is a 2005 W4 form.',\n enum: [ 'w4_2005'\n ]\n },\n year: {\n type: 'number',\n description: 'The tax year this W4 document applies to.'\n }\n },\n required: [ 'data',\n 'type',\n 'year'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/src/resources/hris/documents.ts b/src/resources/hris/documents.ts index b9b3396f7..6d6e3b6ba 100644 --- a/src/resources/hris/documents.ts +++ b/src/resources/hris/documents.ts @@ -47,29 +47,29 @@ export interface DocumentResponse { /** * A stable Finch id for the document. */ - id?: string; + id: string; /** * The ID of the individual associated with the document. This will be null for * employer-level documents. */ - individual_id?: string | null; + individual_id: string | null; /** * The type of document. */ - type?: 'w4_2020' | 'w4_2005'; + type: 'w4_2020' | 'w4_2005'; /** * A URL to access the document. Format: * `https://api.tryfinch.com/employer/documents/:document_id`. */ - url?: string; + url: string; /** * The year the document applies to, if available. */ - year?: number | null; + year: number; } /** @@ -80,17 +80,17 @@ export interface W42005 { /** * Detailed information specific to the 2005 W4 form. */ - data?: W42005.Data; + data: W42005.Data; /** * Specifies the form type, indicating that this document is a 2005 W4 form. */ - type?: 'w4_2005'; + type: 'w4_2005'; /** * The tax year this W4 document applies to. */ - year?: number | null; + year: number; } export namespace W42005 { @@ -101,27 +101,27 @@ export namespace W42005 { /** * Additional withholding amount (in cents). */ - additional_withholding?: number | null; + additional_withholding: number; /** * Indicates exemption status from federal tax withholding. */ - exemption?: 'exempt' | 'non_exempt'; + exemption: 'exempt' | 'non_exempt' | null; /** * The individual's filing status for tax purposes. */ - filing_status?: 'married' | 'married_but_withhold_at_higher_single_rate' | 'single' | null; + filing_status: 'married' | 'married_but_withhold_at_higher_single_rate' | 'single' | null; /** * The unique identifier for the individual associated with this 2005 W4 form. */ - individual_id?: string; + individual_id: string; /** * Total number of allowances claimed (in cents). */ - total_number_of_allowances?: number | null; + total_number_of_allowances: number; } } @@ -133,17 +133,17 @@ export interface W42020 { /** * Detailed information specific to the 2020 W4 form. */ - data?: W42020.Data; + data: W42020.Data; /** * Specifies the form type, indicating that this document is a 2020 W4 form. */ - type?: 'w4_2020'; + type: 'w4_2020'; /** * The tax year this W4 document applies to. */ - year?: number | null; + year: number; } export namespace W42020 { @@ -155,27 +155,27 @@ export namespace W42020 { * Amount claimed for dependents other than qualifying children under 17 (in * cents). */ - amount_for_other_dependents?: number | null; + amount_for_other_dependents: number; /** * Amount claimed for dependents under 17 years old (in cents). */ - amount_for_qualifying_children_under_17?: number | null; + amount_for_qualifying_children_under_17: number; /** * Deductible expenses (in cents). */ - deductions?: number | null; + deductions: number; /** * Additional withholding amount (in cents). */ - extra_withholding?: number | null; + extra_withholding: number; /** * The individual's filing status for tax purposes. */ - filing_status?: + filing_status: | 'head_of_household' | 'married_filing_jointly_or_qualifying_surviving_spouse' | 'single_or_married_filing_separately' @@ -184,17 +184,17 @@ export namespace W42020 { /** * The unique identifier for the individual associated with this document. */ - individual_id?: string; + individual_id: string; /** * Additional income from sources outside of primary employment (in cents). */ - other_income?: number | null; + other_income: number; /** * Total amount claimed for dependents and other credits (in cents). */ - total_claim_dependent_and_other_credits?: number | null; + total_claim_dependent_and_other_credits: number; } } From b331c108e3912c503e4cc8393587bac2a927f4f7 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 14 Oct 2025 15:10:51 +0000 Subject: [PATCH 45/51] feat(api): api update --- .stats.yml | 4 +- .../connect/sessions/new-connect-sessions.ts | 67 ++++++++++----- .../reauthenticate-connect-sessions.ts | 10 +-- src/resources/connect/sessions.ts | 85 +++++++++++++------ tests/api-resources/connect/sessions.test.ts | 21 +++-- 5 files changed, 126 insertions(+), 61 deletions(-) diff --git a/.stats.yml b/.stats.yml index 99ac1e564..0751652c2 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-199a2fd8b7387b0648e88b5942a8248895373a561aff663389982073e55c8eb5.yml -openapi_spec_hash: 7415c1faca5f2e873824893b140650f1 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-5f9c0770c8be0fa779cbb640c25043cc1d5514236b8d0d6791c822dd7e00ffe6.yml +openapi_spec_hash: d8df70c1dc1ba1ebcd572c1fab58eec6 config_hash: 6d3585c0032e08d723d077d660fc8448 diff --git a/packages/mcp-server/src/tools/connect/sessions/new-connect-sessions.ts b/packages/mcp-server/src/tools/connect/sessions/new-connect-sessions.ts index 8f76f54c5..0333a867e 100644 --- a/packages/mcp-server/src/tools/connect/sessions/new-connect-sessions.ts +++ b/packages/mcp-server/src/tools/connect/sessions/new-connect-sessions.ts @@ -22,59 +22,70 @@ export const tool: Tool = { inputSchema: { type: 'object', properties: { - customer_id: { + customer_email: { type: 'string', + description: 'Email address of the customer', }, - customer_name: { + customer_id: { type: 'string', + description: 'Unique identifier for the customer', }, - products: { - type: 'array', - items: { - type: 'string', - description: 'The Finch products that can be requested during the Connect flow.', - enum: [ - 'company', - 'directory', - 'individual', - 'employment', - 'payment', - 'pay_statement', - 'benefits', - 'ssn', - 'deduction', - 'documents', - ], - }, - }, - customer_email: { + customer_name: { type: 'string', + description: 'Name of the customer', }, integration: { type: 'object', + description: 'Integration configuration for the connect session', properties: { auth_method: { type: 'string', + description: 'The authentication method to use', enum: ['assisted', 'credential', 'oauth', 'api_token'], }, provider: { type: 'string', + description: 'The provider to integrate with', }, }, + required: ['auth_method', 'provider'], }, manual: { type: 'boolean', + description: 'Enable manual authentication mode', }, minutes_to_expire: { type: 'number', description: 'The number of minutes until the session expires (defaults to 129,600, which is 90 days)', }, + products: { + type: 'array', + description: 'The Finch products to request access to', + items: { + type: 'string', + description: 'The Finch products that can be requested during the Connect flow.', + enum: [ + 'benefits', + 'company', + 'deduction', + 'directory', + 'documents', + 'employment', + 'individual', + 'payment', + 'pay_statement', + 'ssn', + ], + }, + }, redirect_uri: { type: 'string', + description: 'The URI to redirect to after the Connect flow is completed', }, sandbox: { type: 'string', + description: 'Sandbox mode for testing', enum: ['finch', 'provider'], }, jq_filter: { @@ -84,7 +95,17 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['customer_id', 'customer_name', 'products'], + required: [ + 'customer_email', + 'customer_id', + 'customer_name', + 'integration', + 'manual', + 'minutes_to_expire', + 'products', + 'redirect_uri', + 'sandbox', + ], }, annotations: {}, }; diff --git a/packages/mcp-server/src/tools/connect/sessions/reauthenticate-connect-sessions.ts b/packages/mcp-server/src/tools/connect/sessions/reauthenticate-connect-sessions.ts index 486d5d22c..028508c64 100644 --- a/packages/mcp-server/src/tools/connect/sessions/reauthenticate-connect-sessions.ts +++ b/packages/mcp-server/src/tools/connect/sessions/reauthenticate-connect-sessions.ts @@ -37,16 +37,16 @@ export const tool: Tool = { type: 'string', description: 'The Finch products that can be requested during the Connect flow.', enum: [ + 'benefits', 'company', + 'deduction', 'directory', - 'individual', + 'documents', 'employment', + 'individual', 'payment', 'pay_statement', - 'benefits', 'ssn', - 'deduction', - 'documents', ], }, }, @@ -61,7 +61,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['connection_id'], + required: ['connection_id', 'minutes_to_expire', 'products', 'redirect_uri'], }, annotations: {}, }; diff --git a/src/resources/connect/sessions.ts b/src/resources/connect/sessions.ts index e0b55282e..1c3aa83ae 100644 --- a/src/resources/connect/sessions.ts +++ b/src/resources/connect/sessions.ts @@ -47,45 +47,78 @@ export interface SessionReauthenticateResponse { } export interface SessionNewParams { + /** + * Email address of the customer + */ + customer_email: string | null; + + /** + * Unique identifier for the customer + */ customer_id: string; + /** + * Name of the customer + */ customer_name: string; + /** + * Integration configuration for the connect session + */ + integration: SessionNewParams.Integration | null; + + /** + * Enable manual authentication mode + */ + manual: boolean | null; + + /** + * The number of minutes until the session expires (defaults to 129,600, which is + * 90 days) + */ + minutes_to_expire: number | null; + + /** + * The Finch products to request access to + */ products: Array< + | 'benefits' | 'company' + | 'deduction' | 'directory' - | 'individual' + | 'documents' | 'employment' + | 'individual' | 'payment' | 'pay_statement' - | 'benefits' | 'ssn' - | 'deduction' - | 'documents' >; - customer_email?: string | null; - - integration?: SessionNewParams.Integration | null; - - manual?: boolean | null; - /** - * The number of minutes until the session expires (defaults to 129,600, which is - * 90 days) + * The URI to redirect to after the Connect flow is completed */ - minutes_to_expire?: number | null; + redirect_uri: string | null; - redirect_uri?: string | null; - - sandbox?: 'finch' | 'provider' | null; + /** + * Sandbox mode for testing + */ + sandbox: 'finch' | 'provider' | null; } export namespace SessionNewParams { + /** + * Integration configuration for the connect session + */ export interface Integration { - auth_method?: 'assisted' | 'credential' | 'oauth' | 'api_token' | null; - - provider?: string | null; + /** + * The authentication method to use + */ + auth_method: 'assisted' | 'credential' | 'oauth' | 'api_token' | null; + + /** + * The provider to integrate with + */ + provider: string | null; } } @@ -99,28 +132,28 @@ export interface SessionReauthenticateParams { * The number of minutes until the session expires (defaults to 43,200, which is 30 * days) */ - minutes_to_expire?: number | null; + minutes_to_expire: number; /** * The products to request access to (optional for reauthentication) */ - products?: Array< + products: Array< + | 'benefits' | 'company' + | 'deduction' | 'directory' - | 'individual' + | 'documents' | 'employment' + | 'individual' | 'payment' | 'pay_statement' - | 'benefits' | 'ssn' - | 'deduction' - | 'documents' > | null; /** * The URI to redirect to after the Connect flow is completed */ - redirect_uri?: string | null; + redirect_uri: string | null; } export declare namespace Sessions { diff --git a/tests/api-resources/connect/sessions.test.ts b/tests/api-resources/connect/sessions.test.ts index 167db5d33..d66e242d2 100644 --- a/tests/api-resources/connect/sessions.test.ts +++ b/tests/api-resources/connect/sessions.test.ts @@ -12,9 +12,15 @@ describe('resource sessions', () => { // prism tests are broken test.skip('new: only required params', async () => { const responsePromise = client.connect.sessions.new({ + customer_email: 'dev@stainless.com', customer_id: 'x', customer_name: 'x', - products: ['company'], + integration: { auth_method: 'assisted', provider: 'provider' }, + manual: true, + minutes_to_expire: 1, + products: ['benefits'], + redirect_uri: 'redirect_uri', + sandbox: 'finch', }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); @@ -28,13 +34,13 @@ describe('resource sessions', () => { // prism tests are broken test.skip('new: required and optional params', async () => { const response = await client.connect.sessions.new({ + customer_email: 'dev@stainless.com', customer_id: 'x', customer_name: 'x', - products: ['company'], - customer_email: 'dev@stainless.com', integration: { auth_method: 'assisted', provider: 'provider' }, manual: true, minutes_to_expire: 1, + products: ['benefits'], redirect_uri: 'redirect_uri', sandbox: 'finch', }); @@ -42,7 +48,12 @@ describe('resource sessions', () => { // prism tests are broken test.skip('reauthenticate: only required params', async () => { - const responsePromise = client.connect.sessions.reauthenticate({ connection_id: 'connection_id' }); + const responsePromise = client.connect.sessions.reauthenticate({ + connection_id: 'connection_id', + minutes_to_expire: 0, + products: ['benefits'], + redirect_uri: 'https://example.com', + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -57,7 +68,7 @@ describe('resource sessions', () => { const response = await client.connect.sessions.reauthenticate({ connection_id: 'connection_id', minutes_to_expire: 0, - products: ['company'], + products: ['benefits'], redirect_uri: 'https://example.com', }); }); From 96d3f666690caea95b650b954dfd681eeb686c8e Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 14 Oct 2025 20:25:51 +0000 Subject: [PATCH 46/51] feat(api): api update --- .stats.yml | 4 ++-- .../enroll-many-benefits-hris-individuals.ts | 22 ++++++++++++++++++- .../list-supported-benefits-hris-benefits.ts | 2 +- src/resources/hris/benefits/benefits.ts | 2 +- src/resources/hris/benefits/individuals.ts | 22 ++++++++++++++++++- .../hris/benefits/individuals.test.ts | 2 +- 6 files changed, 47 insertions(+), 7 deletions(-) diff --git a/.stats.yml b/.stats.yml index 0751652c2..80967a2dd 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-5f9c0770c8be0fa779cbb640c25043cc1d5514236b8d0d6791c822dd7e00ffe6.yml -openapi_spec_hash: d8df70c1dc1ba1ebcd572c1fab58eec6 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-b57bba4d2e9b4a64e1c8c3f037aad70e35a164bb1f3b5082948717b94d501a30.yml +openapi_spec_hash: 7e111f64fb635d9dc76da7eaedd0296f config_hash: 6d3585c0032e08d723d077d660fc8448 diff --git a/packages/mcp-server/src/tools/hris/benefits/individuals/enroll-many-benefits-hris-individuals.ts b/packages/mcp-server/src/tools/hris/benefits/individuals/enroll-many-benefits-hris-individuals.ts index b4370f4af..3cbd13302 100644 --- a/packages/mcp-server/src/tools/hris/benefits/individuals/enroll-many-benefits-hris-individuals.ts +++ b/packages/mcp-server/src/tools/hris/benefits/individuals/enroll-many-benefits-hris-individuals.ts @@ -56,9 +56,29 @@ export const tool: Tool = { description: 'Amount in cents for fixed type or basis points (1/100th of a percent) for percent type', }, + tiers: { + type: 'array', + description: + 'Array of tier objects for tiered contribution matching (required when type is tiered)', + items: { + type: 'object', + properties: { + match: { + type: 'integer', + description: 'The employer match percentage in basis points (0-10000 = 0-100%)', + }, + threshold: { + type: 'integer', + description: + 'The employee contribution threshold in basis points (0-10000 = 0-100%)', + }, + }, + required: ['match', 'threshold'], + }, + }, type: { type: 'string', - enum: ['fixed', 'percent'], + enum: ['fixed', 'percent', 'tiered'], }, }, }, diff --git a/packages/mcp-server/src/tools/hris/benefits/list-supported-benefits-hris-benefits.ts b/packages/mcp-server/src/tools/hris/benefits/list-supported-benefits-hris-benefits.ts index 49dc8e569..5b1aa097f 100644 --- a/packages/mcp-server/src/tools/hris/benefits/list-supported-benefits-hris-benefits.ts +++ b/packages/mcp-server/src/tools/hris/benefits/list-supported-benefits-hris-benefits.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'list_supported_benefits_hris_benefits', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nGet deductions metadata\n\n# Response Schema\n```json\n{\n type: 'array',\n items: {\n $ref: '#/$defs/supported_benefit'\n },\n $defs: {\n supported_benefit: {\n type: 'object',\n title: 'BenefitFeature',\n properties: {\n annual_maximum: {\n type: 'boolean',\n description: 'Whether the provider supports an annual maximum for this benefit.'\n },\n company_contribution: {\n type: 'array',\n description: 'Supported contribution types. An empty array indicates contributions are not supported.',\n items: {\n type: 'string',\n enum: [ 'fixed',\n 'percent'\n ]\n }\n },\n description: {\n type: 'string'\n },\n employee_deduction: {\n type: 'array',\n description: 'Supported deduction types. An empty array indicates deductions are not supported.',\n items: {\n type: 'string',\n enum: [ 'fixed',\n 'percent'\n ]\n }\n },\n frequencies: {\n type: 'array',\n description: 'The list of frequencies supported by the provider for this benefit',\n items: {\n $ref: '#/$defs/benefit_frequency'\n }\n },\n catch_up: {\n type: 'boolean',\n description: 'Whether the provider supports catch up for this benefit. This field will only be true for retirement benefits.'\n },\n hsa_contribution_limit: {\n type: 'array',\n description: 'Whether the provider supports HSA contribution limits. Empty if this feature is not supported for the benefit. This array only has values for HSA benefits.',\n items: {\n type: 'string',\n enum: [ 'family',\n 'individual'\n ]\n }\n }\n },\n required: [ 'annual_maximum',\n 'company_contribution',\n 'description',\n 'employee_deduction',\n 'frequencies'\n ]\n },\n benefit_frequency: {\n type: 'string',\n title: 'BenefitFrequency',\n description: 'The frequency of the benefit deduction/contribution.',\n enum: [ 'every_paycheck',\n 'monthly',\n 'one_time'\n ]\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nGet deductions metadata\n\n# Response Schema\n```json\n{\n type: 'array',\n items: {\n $ref: '#/$defs/supported_benefit'\n },\n $defs: {\n supported_benefit: {\n type: 'object',\n title: 'BenefitFeature',\n properties: {\n annual_maximum: {\n type: 'boolean',\n description: 'Whether the provider supports an annual maximum for this benefit.'\n },\n company_contribution: {\n type: 'array',\n description: 'Supported contribution types. An empty array indicates contributions are not supported.',\n items: {\n type: 'string',\n enum: [ 'fixed',\n 'percent',\n 'tiered'\n ]\n }\n },\n description: {\n type: 'string'\n },\n employee_deduction: {\n type: 'array',\n description: 'Supported deduction types. An empty array indicates deductions are not supported.',\n items: {\n type: 'string',\n enum: [ 'fixed',\n 'percent'\n ]\n }\n },\n frequencies: {\n type: 'array',\n description: 'The list of frequencies supported by the provider for this benefit',\n items: {\n $ref: '#/$defs/benefit_frequency'\n }\n },\n catch_up: {\n type: 'boolean',\n description: 'Whether the provider supports catch up for this benefit. This field will only be true for retirement benefits.'\n },\n hsa_contribution_limit: {\n type: 'array',\n description: 'Whether the provider supports HSA contribution limits. Empty if this feature is not supported for the benefit. This array only has values for HSA benefits.',\n items: {\n type: 'string',\n enum: [ 'family',\n 'individual'\n ]\n }\n }\n },\n required: [ 'annual_maximum',\n 'company_contribution',\n 'description',\n 'employee_deduction',\n 'frequencies'\n ]\n },\n benefit_frequency: {\n type: 'string',\n title: 'BenefitFrequency',\n description: 'The frequency of the benefit deduction/contribution.',\n enum: [ 'every_paycheck',\n 'monthly',\n 'one_time'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/src/resources/hris/benefits/benefits.ts b/src/resources/hris/benefits/benefits.ts index 91be697e5..344f099a2 100644 --- a/src/resources/hris/benefits/benefits.ts +++ b/src/resources/hris/benefits/benefits.ts @@ -271,7 +271,7 @@ export interface SupportedBenefit { * Supported contribution types. An empty array indicates contributions are not * supported. */ - company_contribution: Array<'fixed' | 'percent' | null> | null; + company_contribution: Array<'fixed' | 'percent' | 'tiered' | null> | null; description: string | null; diff --git a/src/resources/hris/benefits/individuals.ts b/src/resources/hris/benefits/individuals.ts index 67ea17feb..56fb6b97b 100644 --- a/src/resources/hris/benefits/individuals.ts +++ b/src/resources/hris/benefits/individuals.ts @@ -238,7 +238,27 @@ export namespace IndividualEnrollManyParams { */ amount?: number; - type?: 'fixed' | 'percent'; + /** + * Array of tier objects for tiered contribution matching (required when type is + * tiered) + */ + tiers?: Array; + + type?: 'fixed' | 'percent' | 'tiered'; + } + + export namespace CompanyContribution { + export interface Tier { + /** + * The employer match percentage in basis points (0-10000 = 0-100%) + */ + match: number; + + /** + * The employee contribution threshold in basis points (0-10000 = 0-100%) + */ + threshold: number; + } } export interface EmployeeDeduction { diff --git a/tests/api-resources/hris/benefits/individuals.test.ts b/tests/api-resources/hris/benefits/individuals.test.ts index 1b201e27f..a3c4f0ec3 100644 --- a/tests/api-resources/hris/benefits/individuals.test.ts +++ b/tests/api-resources/hris/benefits/individuals.test.ts @@ -38,7 +38,7 @@ describe('resource individuals', () => { annual_contribution_limit: 'individual', annual_maximum: null, catch_up: true, - company_contribution: { amount: 0, type: 'fixed' }, + company_contribution: { amount: 0, tiers: [{ match: 0, threshold: 0 }], type: 'fixed' }, effective_date: '2019-12-27', employee_deduction: { amount: 10000, type: 'fixed' }, }, From 9fb854f6ceaac25e21901b4a035d2207de994901 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 14:41:36 +0000 Subject: [PATCH 47/51] feat(api): api update --- .stats.yml | 4 +- ...many-benefits-benefits-hris-individuals.ts | 2 +- src/resources/hris/benefits/benefits.ts | 58 +++++++++++--- src/resources/hris/benefits/individuals.ts | 80 ++++++++++++++++++- 4 files changed, 129 insertions(+), 15 deletions(-) diff --git a/.stats.yml b/.stats.yml index 80967a2dd..163d24cf9 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-b57bba4d2e9b4a64e1c8c3f037aad70e35a164bb1f3b5082948717b94d501a30.yml -openapi_spec_hash: 7e111f64fb635d9dc76da7eaedd0296f +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-9c32d7e477bd1c441abd65db0dfe6220948aa00face05fc8b57395e368ee2099.yml +openapi_spec_hash: 3da940ffc5da8000a4f359c958ed341f config_hash: 6d3585c0032e08d723d077d660fc8448 diff --git a/packages/mcp-server/src/tools/hris/benefits/individuals/retrieve-many-benefits-benefits-hris-individuals.ts b/packages/mcp-server/src/tools/hris/benefits/individuals/retrieve-many-benefits-benefits-hris-individuals.ts index 96265c984..d9846c7bd 100644 --- a/packages/mcp-server/src/tools/hris/benefits/individuals/retrieve-many-benefits-benefits-hris-individuals.ts +++ b/packages/mcp-server/src/tools/hris/benefits/individuals/retrieve-many-benefits-benefits-hris-individuals.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'retrieve_many_benefits_benefits_hris_individuals', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nGet enrollment information for the given individuals.\n\n# Response Schema\n```json\n{\n type: 'array',\n title: 'IndividualBenefits',\n items: {\n $ref: '#/$defs/individual_benefit'\n },\n $defs: {\n individual_benefit: {\n type: 'object',\n properties: {\n body: {\n anyOf: [ {\n type: 'object',\n properties: {\n annual_maximum: {\n type: 'integer',\n description: 'If the benefit supports annual maximum, the amount in cents for this individual.'\n },\n catch_up: {\n type: 'boolean',\n description: 'If the benefit supports catch up (401k, 403b, etc.), whether catch up is enabled for this individual.'\n },\n company_contribution: {\n $ref: '#/$defs/benefit_contribution'\n },\n employee_deduction: {\n $ref: '#/$defs/benefit_contribution'\n },\n hsa_contribution_limit: {\n type: 'string',\n description: 'Type for HSA contribution limit if the benefit is a HSA.',\n enum: [ 'individual',\n 'family'\n ]\n }\n },\n required: [ 'annual_maximum',\n 'catch_up',\n 'company_contribution',\n 'employee_deduction'\n ]\n },\n {\n type: 'object',\n properties: {\n code: {\n type: 'number'\n },\n message: {\n type: 'string'\n },\n name: {\n type: 'string'\n },\n finch_code: {\n type: 'string'\n }\n },\n required: [ 'code',\n 'message',\n 'name'\n ]\n }\n ]\n },\n code: {\n type: 'integer'\n },\n individual_id: {\n type: 'string'\n }\n },\n required: [ 'body',\n 'code',\n 'individual_id'\n ]\n },\n benefit_contribution: {\n type: 'object',\n title: 'BenefitContribution',\n properties: {\n amount: {\n type: 'integer',\n description: 'Contribution amount in cents (if `fixed`) or basis points (if `percent`).'\n },\n type: {\n type: 'string',\n description: 'Contribution type.',\n enum: [ 'fixed',\n 'percent'\n ]\n }\n },\n required: [ 'amount',\n 'type'\n ]\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nGet enrollment information for the given individuals.\n\n# Response Schema\n```json\n{\n type: 'array',\n title: 'IndividualBenefits',\n items: {\n $ref: '#/$defs/individual_benefit'\n },\n $defs: {\n individual_benefit: {\n type: 'object',\n properties: {\n body: {\n anyOf: [ {\n type: 'object',\n properties: {\n annual_maximum: {\n type: 'integer',\n description: 'If the benefit supports annual maximum, the amount in cents for this individual.'\n },\n catch_up: {\n type: 'boolean',\n description: 'If the benefit supports catch up (401k, 403b, etc.), whether catch up is enabled for this individual.'\n },\n company_contribution: {\n anyOf: [ {\n type: 'object',\n properties: {\n amount: {\n type: 'integer',\n description: 'Contribution amount in cents.'\n },\n type: {\n type: 'string',\n description: 'Fixed contribution type.',\n enum: [ 'fixed'\n ]\n }\n },\n required: [ 'amount',\n 'type'\n ]\n },\n {\n type: 'object',\n properties: {\n amount: {\n type: 'integer',\n description: 'Contribution amount in basis points (1/100th of a percent).'\n },\n type: {\n type: 'string',\n description: 'Percentage contribution type.',\n enum: [ 'percent'\n ]\n }\n },\n required: [ 'amount',\n 'type'\n ]\n },\n {\n type: 'object',\n properties: {\n tiers: {\n type: 'array',\n description: 'Array of tier objects defining employer match tiers based on employee contribution thresholds.',\n items: {\n type: 'object',\n properties: {\n match: {\n type: 'integer'\n },\n threshold: {\n type: 'integer'\n }\n },\n required: [ 'match',\n 'threshold'\n ]\n }\n },\n type: {\n type: 'string',\n description: 'Tiered contribution type (only valid for company_contribution).',\n enum: [ 'tiered'\n ]\n }\n },\n required: [ 'tiers',\n 'type'\n ]\n }\n ],\n title: 'CompanyContribution'\n },\n employee_deduction: {\n anyOf: [ {\n type: 'object',\n properties: {\n amount: {\n type: 'integer',\n description: 'Contribution amount in cents.'\n },\n type: {\n type: 'string',\n description: 'Fixed contribution type.',\n enum: [ 'fixed'\n ]\n }\n },\n required: [ 'amount',\n 'type'\n ]\n },\n {\n type: 'object',\n properties: {\n amount: {\n type: 'integer',\n description: 'Contribution amount in basis points (1/100th of a percent).'\n },\n type: {\n type: 'string',\n description: 'Percentage contribution type.',\n enum: [ 'percent'\n ]\n }\n },\n required: [ 'amount',\n 'type'\n ]\n }\n ],\n title: 'EmployeeDeductionContribution'\n },\n hsa_contribution_limit: {\n type: 'string',\n description: 'Type for HSA contribution limit if the benefit is a HSA.',\n enum: [ 'individual',\n 'family'\n ]\n }\n },\n required: [ 'annual_maximum',\n 'catch_up',\n 'company_contribution',\n 'employee_deduction'\n ]\n },\n {\n type: 'object',\n properties: {\n code: {\n type: 'number'\n },\n message: {\n type: 'string'\n },\n name: {\n type: 'string'\n },\n finch_code: {\n type: 'string'\n }\n },\n required: [ 'code',\n 'message',\n 'name'\n ]\n }\n ]\n },\n code: {\n type: 'integer'\n },\n individual_id: {\n type: 'string'\n }\n },\n required: [ 'body',\n 'code',\n 'individual_id'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/src/resources/hris/benefits/benefits.ts b/src/resources/hris/benefits/benefits.ts index 344f099a2..20b3c21e2 100644 --- a/src/resources/hris/benefits/benefits.ts +++ b/src/resources/hris/benefits/benefits.ts @@ -123,16 +123,56 @@ export class CompanyBenefitsSinglePage extends SinglePage {} export class SupportedBenefitsSinglePage extends SinglePage {} -export interface BenefitContribution { - /** - * Contribution amount in cents (if `fixed`) or basis points (if `percent`). - */ - amount: number | null; +export type BenefitContribution = + | BenefitContribution.UnionMember0 + | BenefitContribution.UnionMember1 + | BenefitContribution.UnionMember2; + +export namespace BenefitContribution { + export interface UnionMember0 { + /** + * Contribution amount in cents. + */ + amount: number; + + /** + * Fixed contribution type. + */ + type: 'fixed'; + } - /** - * Contribution type. - */ - type: 'fixed' | 'percent' | null; + export interface UnionMember1 { + /** + * Contribution amount in basis points (1/100th of a percent). + */ + amount: number; + + /** + * Percentage contribution type. + */ + type: 'percent'; + } + + export interface UnionMember2 { + /** + * Array of tier objects defining employer match tiers based on employee + * contribution thresholds. + */ + tiers: Array; + + /** + * Tiered contribution type (only valid for company_contribution). + */ + type: 'tiered'; + } + + export namespace UnionMember2 { + export interface Tier { + match: number; + + threshold: number; + } + } } export interface BenefitFeaturesAndOperations { diff --git a/src/resources/hris/benefits/individuals.ts b/src/resources/hris/benefits/individuals.ts index 56fb6b97b..ddccaf38f 100644 --- a/src/resources/hris/benefits/individuals.ts +++ b/src/resources/hris/benefits/individuals.ts @@ -3,7 +3,6 @@ import { APIResource } from '../../../resource'; import { isRequestOptions } from '../../../core'; import * as Core from '../../../core'; -import * as BenefitsAPI from './benefits'; import { SinglePage } from '../../../pagination'; export class Individuals extends APIResource { @@ -156,9 +155,13 @@ export namespace IndividualBenefit { */ catch_up: boolean | null; - company_contribution: BenefitsAPI.BenefitContribution | null; + company_contribution: + | UnionMember0.UnionMember0 + | UnionMember0.UnionMember1 + | UnionMember0.UnionMember2 + | null; - employee_deduction: BenefitsAPI.BenefitContribution | null; + employee_deduction: UnionMember0.UnionMember0 | UnionMember0.UnionMember1 | null; /** * Type for HSA contribution limit if the benefit is a HSA. @@ -166,6 +169,77 @@ export namespace IndividualBenefit { hsa_contribution_limit?: 'individual' | 'family' | null; } + export namespace UnionMember0 { + export interface UnionMember0 { + /** + * Contribution amount in cents. + */ + amount: number; + + /** + * Fixed contribution type. + */ + type: 'fixed'; + } + + export interface UnionMember1 { + /** + * Contribution amount in basis points (1/100th of a percent). + */ + amount: number; + + /** + * Percentage contribution type. + */ + type: 'percent'; + } + + export interface UnionMember2 { + /** + * Array of tier objects defining employer match tiers based on employee + * contribution thresholds. + */ + tiers: Array; + + /** + * Tiered contribution type (only valid for company_contribution). + */ + type: 'tiered'; + } + + export namespace UnionMember2 { + export interface Tier { + match: number; + + threshold: number; + } + } + + export interface UnionMember0 { + /** + * Contribution amount in cents. + */ + amount: number; + + /** + * Fixed contribution type. + */ + type: 'fixed'; + } + + export interface UnionMember1 { + /** + * Contribution amount in basis points (1/100th of a percent). + */ + amount: number; + + /** + * Percentage contribution type. + */ + type: 'percent'; + } + } + export interface BatchError { code: number; From 26000775b7ab71e9e3994196806a847383905853 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 17:14:52 +0000 Subject: [PATCH 48/51] fix(client): incorrect offset pagination check --- src/pagination.ts | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/pagination.ts b/src/pagination.ts index 649fc453c..3aed3e413 100644 --- a/src/pagination.ts +++ b/src/pagination.ts @@ -133,11 +133,7 @@ export class IndividualsPage } nextPageInfo(): PageInfo | null { - const offset = this.paging.offset; - if (!offset) { - return null; - } - + const offset = this.paging.offset ?? 0; const length = this.getPaginatedItems().length; const currentCount = offset + length; @@ -199,11 +195,7 @@ export class Page extends AbstractPage implements PageResponse } nextPageInfo(): PageInfo | null { - const offset = this.paging.offset; - if (!offset) { - return null; - } - + const offset = this.paging.offset ?? 0; const length = this.getPaginatedItems().length; const currentCount = offset + length; From 50af0c2c4756708e0de6bdb3c1eaacce3d24733b Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 00:35:12 +0000 Subject: [PATCH 49/51] feat(api): api update --- .stats.yml | 4 +- README.md | 57 ++++++--- api.md | 18 +-- .../access-tokens/create-access-tokens.ts | 2 +- .../src/tools/account/introspect-account.ts | 2 +- .../hris/benefits/create-hris-benefits.ts | 9 +- .../enroll-many-benefits-hris-individuals.ts | 14 +- .../enrolled-ids-benefits-hris-individuals.ts | 11 +- ...many-benefits-benefits-hris-individuals.ts | 9 +- ...unenroll-many-benefits-hris-individuals.ts | 9 +- .../tools/hris/benefits/list-hris-benefits.ts | 13 +- .../list-supported-benefits-hris-benefits.ts | 13 +- .../hris/benefits/retrieve-hris-benefits.ts | 13 +- .../hris/benefits/update-hris-benefits.ts | 9 +- .../list-company-hris-pay-statement-item.ts | 9 +- ...e-pay-statement-item-company-hris-rules.ts | 9 +- ...e-pay-statement-item-company-hris-rules.ts | 11 +- ...t-pay-statement-item-company-hris-rules.ts | 13 +- ...e-pay-statement-item-company-hris-rules.ts | 9 +- .../hris/company/retrieve-hris-company.ts | 13 +- .../hris/directory/list-hris-directory.ts | 9 +- .../hris/documents/list-hris-documents.ts | 9 +- .../hris/documents/retreive-hris-documents.ts | 13 +- .../retrieve-many-hris-employments.ts | 9 +- .../retrieve-many-hris-individuals.ts | 9 +- .../retrieve-many-hris-pay-statements.ts | 9 +- .../tools/hris/payments/list-hris-payments.ts | 9 +- .../pay-groups/list-payroll-pay-groups.ts | 9 +- .../pay-groups/retrieve-payroll-pay-groups.ts | 11 +- src/resources/access-tokens.ts | 5 + src/resources/account.ts | 28 ++++ src/resources/hris/benefits/benefits.ts | 116 +++++++++++------ src/resources/hris/benefits/index.ts | 4 + src/resources/hris/benefits/individuals.ts | 103 ++++++++------- src/resources/hris/company/company.ts | 17 ++- src/resources/hris/company/index.ts | 2 +- .../hris/company/pay-statement-item/index.ts | 2 + .../pay-statement-item/pay-statement-item.ts | 26 ++-- .../hris/company/pay-statement-item/rules.ts | 113 ++++++++++++----- src/resources/hris/directory.ts | 29 +++-- src/resources/hris/documents.ts | 37 ++++-- src/resources/hris/employments.ts | 16 ++- src/resources/hris/hris.ts | 16 ++- src/resources/hris/index.ts | 6 +- src/resources/hris/individuals.ts | 28 ++-- src/resources/hris/pay-statements.ts | 12 +- src/resources/hris/payments.ts | 6 + src/resources/payroll/index.ts | 1 + src/resources/payroll/pay-groups.ts | 34 +++-- src/resources/payroll/payroll.ts | 2 + .../hris/benefits/benefits.test.ts | 106 +++++++--------- .../hris/benefits/individuals.test.ts | 120 +++++++----------- .../hris/company/company.test.ts | 15 ++- .../pay-statement-item.test.ts | 36 ++---- .../company/pay-statement-item/rules.test.ts | 93 ++++++-------- tests/api-resources/hris/directory.test.ts | 48 +++---- tests/api-resources/hris/documents.test.ts | 44 +++---- tests/api-resources/hris/employments.test.ts | 2 + tests/api-resources/hris/individuals.test.ts | 27 ++-- .../api-resources/hris/pay-statements.test.ts | 2 + tests/api-resources/hris/payments.test.ts | 12 +- .../api-resources/payroll/pay-groups.test.ts | 42 +++--- 62 files changed, 901 insertions(+), 583 deletions(-) diff --git a/.stats.yml b/.stats.yml index 163d24cf9..d84cf0e8c 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-9c32d7e477bd1c441abd65db0dfe6220948aa00face05fc8b57395e368ee2099.yml -openapi_spec_hash: 3da940ffc5da8000a4f359c958ed341f +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-03a89ccdf10add981e714ad74c145cd3a2408bd0223108bbfe01cef4256ef7ed.yml +openapi_spec_hash: 4179c69ca2f55a9fcfab41710a2f452c config_hash: 6d3585c0032e08d723d077d660fc8448 diff --git a/README.md b/README.md index dc8e3c7ab..2b34598a8 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ const client = new Finch({ accessToken: 'My Access Token', }); -const page = await client.hris.directory.list(); +const page = await client.hris.directory.list({ entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }); const individualInDirectory = page.individuals[0]; console.log(individualInDirectory.id); @@ -44,7 +44,8 @@ const client = new Finch({ accessToken: 'My Access Token', }); -const [individualInDirectory]: [Finch.HRIS.IndividualInDirectory] = await client.hris.directory.list(); +const params: Finch.HRIS.DirectoryListParams = { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }; +const [individualInDirectory]: [Finch.HRIS.IndividualInDirectory] = await client.hris.directory.list(params); ``` Documentation for each method, request param, and response field are available in docstrings and will appear on hover in most modern editors. @@ -57,15 +58,17 @@ a subclass of `APIError` will be thrown: ```ts -const company = await client.hris.company.retrieve().catch(async (err) => { - if (err instanceof Finch.APIError) { - console.log(err.status); // 400 - console.log(err.name); // BadRequestError - console.log(err.headers); // {server: 'nginx', ...} - } else { - throw err; - } -}); +const company = await client.hris.company + .retrieve({ entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }) + .catch(async (err) => { + if (err instanceof Finch.APIError) { + console.log(err.status); // 400 + console.log(err.name); // BadRequestError + console.log(err.headers); // {server: 'nginx', ...} + } else { + throw err; + } + }); ``` Error codes are as follows: @@ -97,7 +100,7 @@ const client = new Finch({ }); // Or, configure per-request: -await client.hris.directory.list({ +await client.hris.directory.list({ entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, { maxRetries: 5, }); ``` @@ -114,7 +117,7 @@ const client = new Finch({ }); // Override per-request: -await client.hris.directory.list({ +await client.hris.directory.list({ entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, { timeout: 5 * 1000, }); ``` @@ -132,7 +135,9 @@ You can use the `for await … of` syntax to iterate through items across all pa async function fetchAllIndividualInDirectories(params) { const allIndividualInDirectories = []; // Automatically fetches more pages as needed. - for await (const individualInDirectory of client.hris.directory.list()) { + for await (const individualInDirectory of client.hris.directory.list({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + })) { allIndividualInDirectories.push(individualInDirectory); } return allIndividualInDirectories; @@ -142,7 +147,7 @@ async function fetchAllIndividualInDirectories(params) { Alternatively, you can request a single page at a time: ```ts -let page = await client.hris.directory.list(); +let page = await client.hris.directory.list({ entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }); for (const individualInDirectory of page.individuals) { console.log(individualInDirectory); } @@ -167,7 +172,10 @@ import Finch from '@tryfinch/finch-api'; const client = new Finch(); -const page = await client.hris.directory.list({ headers: { 'Finch-API-Version': 'My-Custom-Value' } }); +const page = await client.hris.directory.list( + { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, + { headers: { 'Finch-API-Version': 'My-Custom-Value' } }, +); const individualInDirectory = page.individuals[0]; ``` @@ -212,11 +220,15 @@ You can also use the `.withResponse()` method to get the raw `Response` along wi ```ts const client = new Finch(); -const response = await client.hris.directory.list().asResponse(); +const response = await client.hris.directory + .list({ entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }) + .asResponse(); console.log(response.headers.get('X-My-Header')); console.log(response.statusText); // access the underlying Response object -const { data: page, response: raw } = await client.hris.directory.list().withResponse(); +const { data: page, response: raw } = await client.hris.directory + .list({ entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }) + .withResponse(); console.log(raw.headers.get('X-My-Header')); for await (const individualInDirectory of page) { console.log(individualInDirectory.id); @@ -324,9 +336,12 @@ const client = new Finch({ }); // Override per-request: -await client.hris.directory.list({ - httpAgent: new http.Agent({ keepAlive: false }), -}); +await client.hris.directory.list( + { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, + { + httpAgent: new http.Agent({ keepAlive: false }), + }, +); ``` ## Semantic versioning diff --git a/api.md b/api.md index f47d124f6..4395a45a7 100644 --- a/api.md +++ b/api.md @@ -40,7 +40,7 @@ Types: Methods: -- client.hris.company.retrieve() -> Company +- client.hris.company.retrieve({ ...params }) -> Company ### PayStatementItem @@ -65,8 +65,8 @@ Methods: - client.hris.company.payStatementItem.rules.create({ ...params }) -> RuleCreateResponse - client.hris.company.payStatementItem.rules.update(ruleId, { ...params }) -> RuleUpdateResponse -- client.hris.company.payStatementItem.rules.list() -> RuleListResponsesPage -- client.hris.company.payStatementItem.rules.delete(ruleId) -> RuleDeleteResponse +- client.hris.company.payStatementItem.rules.list({ ...params }) -> RuleListResponsesPage +- client.hris.company.payStatementItem.rules.delete(ruleId, { ...params }) -> RuleDeleteResponse ## Directory @@ -136,7 +136,7 @@ Types: Methods: - client.hris.documents.list({ ...params }) -> DocumentListResponse -- client.hris.documents.retreive(documentId) -> DocumentRetreiveResponse +- client.hris.documents.retreive(documentId, { ...params }) -> DocumentRetreiveResponse ## Benefits @@ -157,10 +157,10 @@ Types: Methods: - client.hris.benefits.create({ ...params }) -> CreateCompanyBenefitsResponse -- client.hris.benefits.retrieve(benefitId) -> CompanyBenefit +- client.hris.benefits.retrieve(benefitId, { ...params }) -> CompanyBenefit - client.hris.benefits.update(benefitId, { ...params }) -> UpdateCompanyBenefitResponse -- client.hris.benefits.list() -> CompanyBenefitsSinglePage -- client.hris.benefits.listSupportedBenefits() -> SupportedBenefitsSinglePage +- client.hris.benefits.list({ ...params }) -> CompanyBenefitsSinglePage +- client.hris.benefits.listSupportedBenefits({ ...params }) -> SupportedBenefitsSinglePage ### Individuals @@ -174,7 +174,7 @@ Types: Methods: - client.hris.benefits.individuals.enrollMany(benefitId, [ ...individuals ]) -> EnrolledIndividualBenefitResponse -- client.hris.benefits.individuals.enrolledIds(benefitId) -> IndividualEnrolledIDsResponse +- client.hris.benefits.individuals.enrolledIds(benefitId, { ...params }) -> IndividualEnrolledIDsResponse - client.hris.benefits.individuals.retrieveManyBenefits(benefitId, { ...params }) -> IndividualBenefitsSinglePage - client.hris.benefits.individuals.unenrollMany(benefitId, { ...params }) -> UnenrolledIndividualBenefitResponse @@ -364,7 +364,7 @@ Types: Methods: -- client.payroll.payGroups.retrieve(payGroupId) -> PayGroupRetrieveResponse +- client.payroll.payGroups.retrieve(payGroupId, { ...params }) -> PayGroupRetrieveResponse - client.payroll.payGroups.list({ ...params }) -> PayGroupListResponsesSinglePage # Connect diff --git a/packages/mcp-server/src/tools/access-tokens/create-access-tokens.ts b/packages/mcp-server/src/tools/access-tokens/create-access-tokens.ts index 3dd1cd4a9..78e30059b 100644 --- a/packages/mcp-server/src/tools/access-tokens/create-access-tokens.ts +++ b/packages/mcp-server/src/tools/access-tokens/create-access-tokens.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'create_access_tokens', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nExchange the authorization code for an access token\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/create_access_token_response',\n $defs: {\n create_access_token_response: {\n type: 'object',\n properties: {\n access_token: {\n type: 'string',\n description: 'The access token for the connection'\n },\n client_type: {\n type: 'string',\n title: 'ClientType',\n description: 'The type of application associated with a token.',\n enum: [ 'development',\n 'production',\n 'sandbox'\n ]\n },\n connection_id: {\n type: 'string',\n description: 'The Finch UUID of the connection associated with the `access_token`'\n },\n connection_type: {\n type: 'string',\n title: 'ConnectionType',\n description: 'The type of the connection associated with the token.\\n- `provider` - connection to an external provider\\n- `finch` - finch-generated data.',\n enum: [ 'finch',\n 'provider'\n ]\n },\n products: {\n type: 'array',\n description: 'An array of the authorized products associated with the `access_token`',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`'\n },\n token_type: {\n type: 'string',\n description: 'The RFC 8693 token type (Finch uses `bearer` tokens)'\n },\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to identify the connection instead of this account ID'\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to identify the connection instead of this company ID'\n },\n customer_id: {\n type: 'string',\n description: 'The ID of your customer you provided to Finch when a connect session was created for this connection'\n }\n },\n required: [ 'access_token',\n 'client_type',\n 'connection_id',\n 'connection_type',\n 'products',\n 'provider_id',\n 'token_type'\n ]\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nExchange the authorization code for an access token\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/create_access_token_response',\n $defs: {\n create_access_token_response: {\n type: 'object',\n properties: {\n access_token: {\n type: 'string',\n description: 'The access token for the connection'\n },\n client_type: {\n type: 'string',\n title: 'ClientType',\n description: 'The type of application associated with a token.',\n enum: [ 'development',\n 'production',\n 'sandbox'\n ]\n },\n connection_id: {\n type: 'string',\n description: 'The Finch UUID of the connection associated with the `access_token`'\n },\n connection_type: {\n type: 'string',\n title: 'ConnectionType',\n description: 'The type of the connection associated with the token.\\n- `provider` - connection to an external provider\\n- `finch` - finch-generated data.',\n enum: [ 'finch',\n 'provider'\n ]\n },\n entity_ids: {\n type: 'array',\n description: 'An array of entity IDs that can be accessed with this access token',\n items: {\n type: 'string'\n }\n },\n products: {\n type: 'array',\n description: 'An array of the authorized products associated with the `access_token`',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`'\n },\n token_type: {\n type: 'string',\n description: 'The RFC 8693 token type (Finch uses `bearer` tokens)'\n },\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to identify the connection instead of this account ID'\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to identify the connection instead of this company ID'\n },\n customer_id: {\n type: 'string',\n description: 'The ID of your customer you provided to Finch when a connect session was created for this connection'\n }\n },\n required: [ 'access_token',\n 'client_type',\n 'connection_id',\n 'connection_type',\n 'entity_ids',\n 'products',\n 'provider_id',\n 'token_type'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/account/introspect-account.ts b/packages/mcp-server/src/tools/account/introspect-account.ts index bdc030fbb..f826f4bfc 100644 --- a/packages/mcp-server/src/tools/account/introspect-account.ts +++ b/packages/mcp-server/src/tools/account/introspect-account.ts @@ -18,7 +18,7 @@ export const metadata: Metadata = { export const tool: Tool = { name: 'introspect_account', description: - "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRead account information associated with an `access_token`\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/introspection',\n $defs: {\n introspection: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'The Finch UUID of the token being introspected'\n },\n client_id: {\n type: 'string',\n description: 'The client ID of the application associated with the `access_token`'\n },\n client_type: {\n type: 'string',\n title: 'ClientType',\n description: 'The type of application associated with a token.',\n enum: [ 'development',\n 'production',\n 'sandbox'\n ]\n },\n connection_id: {\n type: 'string',\n description: 'The Finch UUID of the connection associated with the `access_token`'\n },\n connection_status: {\n type: 'object',\n properties: {\n status: {\n $ref: '#/$defs/connection_status_type'\n },\n last_successful_sync: {\n anyOf: [ {\n type: 'string',\n format: 'date-time'\n },\n {\n type: 'string'\n }\n ],\n description: 'The datetime when the connection was last successfully synced'\n },\n message: {\n type: 'string'\n }\n },\n required: [ 'status'\n ]\n },\n connection_type: {\n type: 'string',\n title: 'ConnectionType',\n description: 'The type of the connection associated with the token.\\n- `provider` - connection to an external provider\\n- `finch` - finch-generated data.',\n enum: [ 'finch',\n 'provider'\n ]\n },\n products: {\n type: 'array',\n description: 'An array of the authorized products associated with the `access_token`.',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`.'\n },\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate tokens with a Finch connection instead of this account ID'\n },\n authentication_methods: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description: 'The type of authentication method',\n enum: [ 'assisted',\n 'credential',\n 'api_token',\n 'api_credential',\n 'oauth'\n ]\n },\n connection_status: {\n type: 'object',\n properties: {\n status: {\n $ref: '#/$defs/connection_status_type'\n },\n last_successful_sync: {\n anyOf: [ {\n type: 'string',\n format: 'date-time'\n },\n {\n type: 'string'\n }\n ],\n description: 'The datetime when the connection was last successfully synced'\n },\n message: {\n type: 'string'\n }\n },\n required: [ 'status'\n ]\n },\n products: {\n type: 'array',\n description: 'An array of the authorized products associated with the `access_token`',\n items: {\n type: 'string'\n }\n }\n },\n required: [ 'type'\n ]\n }\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate tokens with a Finch connection instead of this company ID'\n },\n customer_email: {\n type: 'string',\n description: 'The email of your customer you provided to Finch when a connect session was created for this connection'\n },\n customer_id: {\n type: 'string',\n description: 'The ID of your customer you provided to Finch when a connect session was created for this connection'\n },\n customer_name: {\n type: 'string',\n description: 'The name of your customer you provided to Finch when a connect session was created for this connection'\n },\n manual: {\n type: 'boolean',\n description: 'Whether the connection associated with the `access_token` uses the Assisted Connect Flow. (`true` if using Assisted Connect, `false` if connection is automated)'\n },\n payroll_provider_id: {\n type: 'string',\n description: '[DEPRECATED] Use `provider_id` to identify the provider instead of this payroll provider ID.'\n },\n username: {\n type: 'string',\n description: 'The account username used for login associated with the `access_token`.'\n }\n },\n required: [ 'id',\n 'client_id',\n 'client_type',\n 'connection_id',\n 'connection_status',\n 'connection_type',\n 'products',\n 'provider_id'\n ]\n },\n connection_status_type: {\n type: 'string',\n enum: [ 'pending',\n 'processing',\n 'connected',\n 'error_no_account_setup',\n 'error_permissions',\n 'reauth'\n ]\n }\n }\n}\n```", + "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRead account information associated with an `access_token`\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/introspection',\n $defs: {\n introspection: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'The Finch UUID of the token being introspected'\n },\n client_id: {\n type: 'string',\n description: 'The client ID of the application associated with the `access_token`'\n },\n client_type: {\n type: 'string',\n title: 'ClientType',\n description: 'The type of application associated with a token.',\n enum: [ 'development',\n 'production',\n 'sandbox'\n ]\n },\n connection_id: {\n type: 'string',\n description: 'The Finch UUID of the connection associated with the `access_token`'\n },\n connection_status: {\n type: 'object',\n properties: {\n status: {\n $ref: '#/$defs/connection_status_type'\n },\n last_successful_sync: {\n anyOf: [ {\n type: 'string',\n format: 'date-time'\n },\n {\n type: 'string'\n }\n ],\n description: 'The datetime when the connection was last successfully synced'\n },\n message: {\n type: 'string'\n }\n },\n required: [ 'status'\n ]\n },\n connection_type: {\n type: 'string',\n title: 'ConnectionType',\n description: 'The type of the connection associated with the token.\\n- `provider` - connection to an external provider\\n- `finch` - finch-generated data.',\n enum: [ 'finch',\n 'provider'\n ]\n },\n products: {\n type: 'array',\n description: 'An array of the authorized products associated with the `access_token`.',\n items: {\n type: 'string'\n }\n },\n provider_id: {\n type: 'string',\n description: 'The ID of the provider associated with the `access_token`.'\n },\n account_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate tokens with a Finch connection instead of this account ID'\n },\n authentication_methods: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description: 'The type of authentication method',\n enum: [ 'assisted',\n 'credential',\n 'api_token',\n 'api_credential',\n 'oauth'\n ]\n },\n connection_status: {\n type: 'object',\n properties: {\n status: {\n $ref: '#/$defs/connection_status_type'\n },\n last_successful_sync: {\n anyOf: [ {\n type: 'string',\n format: 'date-time'\n },\n {\n type: 'string'\n }\n ],\n description: 'The datetime when the connection was last successfully synced'\n },\n message: {\n type: 'string'\n }\n },\n required: [ 'status'\n ]\n },\n products: {\n type: 'array',\n description: 'An array of the authorized products associated with the `access_token`',\n items: {\n type: 'string'\n }\n }\n },\n required: [ 'type'\n ]\n }\n },\n company_id: {\n type: 'string',\n description: '[DEPRECATED] Use `connection_id` to associate tokens with a Finch connection instead of this company ID'\n },\n customer_email: {\n type: 'string',\n description: 'The email of your customer you provided to Finch when a connect session was created for this connection'\n },\n customer_id: {\n type: 'string',\n description: 'The ID of your customer you provided to Finch when a connect session was created for this connection'\n },\n customer_name: {\n type: 'string',\n description: 'The name of your customer you provided to Finch when a connect session was created for this connection'\n },\n entities: {\n type: 'array',\n description: 'Array of detailed entity information for each connected account in multi-account mode',\n items: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'The connection account ID for this entity'\n },\n name: {\n type: 'string',\n description: 'The name of the entity (payroll provider company name)'\n },\n source_id: {\n type: 'string',\n description: 'The source ID of the entity'\n },\n type: {\n type: 'string',\n description: 'The type of entity'\n }\n },\n required: [ 'id',\n 'name',\n 'source_id',\n 'type'\n ]\n }\n },\n manual: {\n type: 'boolean',\n description: 'Whether the connection associated with the `access_token` uses the Assisted Connect Flow. (`true` if using Assisted Connect, `false` if connection is automated)'\n },\n payroll_provider_id: {\n type: 'string',\n description: '[DEPRECATED] Use `provider_id` to identify the provider instead of this payroll provider ID.'\n },\n username: {\n type: 'string',\n description: 'The account username used for login associated with the `access_token`.'\n }\n },\n required: [ 'id',\n 'client_id',\n 'client_type',\n 'connection_id',\n 'connection_status',\n 'connection_type',\n 'products',\n 'provider_id'\n ]\n },\n connection_status_type: {\n type: 'string',\n enum: [ 'pending',\n 'processing',\n 'connected',\n 'error_no_account_setup',\n 'error_permissions',\n 'reauth'\n ]\n }\n }\n}\n```", inputSchema: { type: 'object', properties: { diff --git a/packages/mcp-server/src/tools/hris/benefits/create-hris-benefits.ts b/packages/mcp-server/src/tools/hris/benefits/create-hris-benefits.ts index 2f3e37ff8..3df5c3309 100644 --- a/packages/mcp-server/src/tools/hris/benefits/create-hris-benefits.ts +++ b/packages/mcp-server/src/tools/hris/benefits/create-hris-benefits.ts @@ -22,6 +22,13 @@ export const tool: Tool = { inputSchema: { type: 'object', properties: { + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, company_contribution: { type: 'object', title: 'BenefitCompanyMatchContribution', @@ -68,7 +75,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: [], + required: ['entity_ids'], $defs: { benefit_frequency: { type: 'string', diff --git a/packages/mcp-server/src/tools/hris/benefits/individuals/enroll-many-benefits-hris-individuals.ts b/packages/mcp-server/src/tools/hris/benefits/individuals/enroll-many-benefits-hris-individuals.ts index 3cbd13302..e759b5e23 100644 --- a/packages/mcp-server/src/tools/hris/benefits/individuals/enroll-many-benefits-hris-individuals.ts +++ b/packages/mcp-server/src/tools/hris/benefits/individuals/enroll-many-benefits-hris-individuals.ts @@ -25,6 +25,13 @@ export const tool: Tool = { benefit_id: { type: 'string', }, + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, individuals: { type: 'array', description: 'Array of the individual_id to enroll and a configuration object.', @@ -117,7 +124,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['benefit_id'], + required: ['benefit_id', 'entity_ids'], }, annotations: {}, }; @@ -125,10 +132,7 @@ export const tool: Tool = { export const handler = async (client: Finch, args: Record | undefined) => { const { benefit_id, jq_filter, ...body } = args as any; return asTextContentResult( - await maybeFilter( - jq_filter, - await client.hris.benefits.individuals.enrollMany(benefit_id, body['individuals']), - ), + await maybeFilter(jq_filter, await client.hris.benefits.individuals.enrollMany(benefit_id, body)), ); }; diff --git a/packages/mcp-server/src/tools/hris/benefits/individuals/enrolled-ids-benefits-hris-individuals.ts b/packages/mcp-server/src/tools/hris/benefits/individuals/enrolled-ids-benefits-hris-individuals.ts index ce1d33f40..cc4b6b7e7 100644 --- a/packages/mcp-server/src/tools/hris/benefits/individuals/enrolled-ids-benefits-hris-individuals.ts +++ b/packages/mcp-server/src/tools/hris/benefits/individuals/enrolled-ids-benefits-hris-individuals.ts @@ -25,6 +25,13 @@ export const tool: Tool = { benefit_id: { type: 'string', }, + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, jq_filter: { type: 'string', title: 'jq Filter', @@ -32,7 +39,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['benefit_id'], + required: ['benefit_id', 'entity_ids'], }, annotations: { readOnlyHint: true, @@ -42,7 +49,7 @@ export const tool: Tool = { export const handler = async (client: Finch, args: Record | undefined) => { const { benefit_id, jq_filter, ...body } = args as any; return asTextContentResult( - await maybeFilter(jq_filter, await client.hris.benefits.individuals.enrolledIds(benefit_id)), + await maybeFilter(jq_filter, await client.hris.benefits.individuals.enrolledIds(benefit_id, body)), ); }; diff --git a/packages/mcp-server/src/tools/hris/benefits/individuals/retrieve-many-benefits-benefits-hris-individuals.ts b/packages/mcp-server/src/tools/hris/benefits/individuals/retrieve-many-benefits-benefits-hris-individuals.ts index d9846c7bd..3225e9609 100644 --- a/packages/mcp-server/src/tools/hris/benefits/individuals/retrieve-many-benefits-benefits-hris-individuals.ts +++ b/packages/mcp-server/src/tools/hris/benefits/individuals/retrieve-many-benefits-benefits-hris-individuals.ts @@ -25,6 +25,13 @@ export const tool: Tool = { benefit_id: { type: 'string', }, + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, individual_ids: { type: 'string', description: @@ -37,7 +44,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['benefit_id'], + required: ['benefit_id', 'entity_ids'], }, annotations: { readOnlyHint: true, diff --git a/packages/mcp-server/src/tools/hris/benefits/individuals/unenroll-many-benefits-hris-individuals.ts b/packages/mcp-server/src/tools/hris/benefits/individuals/unenroll-many-benefits-hris-individuals.ts index 12f98446a..c9437b2bf 100644 --- a/packages/mcp-server/src/tools/hris/benefits/individuals/unenroll-many-benefits-hris-individuals.ts +++ b/packages/mcp-server/src/tools/hris/benefits/individuals/unenroll-many-benefits-hris-individuals.ts @@ -25,6 +25,13 @@ export const tool: Tool = { benefit_id: { type: 'string', }, + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, individual_ids: { type: 'array', description: 'Array of individual_ids to unenroll.', @@ -39,7 +46,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['benefit_id'], + required: ['benefit_id', 'entity_ids'], }, annotations: { idempotentHint: true, diff --git a/packages/mcp-server/src/tools/hris/benefits/list-hris-benefits.ts b/packages/mcp-server/src/tools/hris/benefits/list-hris-benefits.ts index d2db92707..e9301e886 100644 --- a/packages/mcp-server/src/tools/hris/benefits/list-hris-benefits.ts +++ b/packages/mcp-server/src/tools/hris/benefits/list-hris-benefits.ts @@ -22,6 +22,13 @@ export const tool: Tool = { inputSchema: { type: 'object', properties: { + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, jq_filter: { type: 'string', title: 'jq Filter', @@ -29,7 +36,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: [], + required: ['entity_ids'], }, annotations: { readOnlyHint: true, @@ -37,8 +44,8 @@ export const tool: Tool = { }; export const handler = async (client: Finch, args: Record | undefined) => { - const { jq_filter } = args as any; - const response = await client.hris.benefits.list().asResponse(); + const { jq_filter, ...body } = args as any; + const response = await client.hris.benefits.list(body).asResponse(); return asTextContentResult(await maybeFilter(jq_filter, await response.json())); }; diff --git a/packages/mcp-server/src/tools/hris/benefits/list-supported-benefits-hris-benefits.ts b/packages/mcp-server/src/tools/hris/benefits/list-supported-benefits-hris-benefits.ts index 5b1aa097f..85707c52b 100644 --- a/packages/mcp-server/src/tools/hris/benefits/list-supported-benefits-hris-benefits.ts +++ b/packages/mcp-server/src/tools/hris/benefits/list-supported-benefits-hris-benefits.ts @@ -22,6 +22,13 @@ export const tool: Tool = { inputSchema: { type: 'object', properties: { + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, jq_filter: { type: 'string', title: 'jq Filter', @@ -29,7 +36,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: [], + required: ['entity_ids'], }, annotations: { readOnlyHint: true, @@ -37,8 +44,8 @@ export const tool: Tool = { }; export const handler = async (client: Finch, args: Record | undefined) => { - const { jq_filter } = args as any; - const response = await client.hris.benefits.listSupportedBenefits().asResponse(); + const { jq_filter, ...body } = args as any; + const response = await client.hris.benefits.listSupportedBenefits(body).asResponse(); return asTextContentResult(await maybeFilter(jq_filter, await response.json())); }; diff --git a/packages/mcp-server/src/tools/hris/benefits/retrieve-hris-benefits.ts b/packages/mcp-server/src/tools/hris/benefits/retrieve-hris-benefits.ts index 962fea52a..20077b44a 100644 --- a/packages/mcp-server/src/tools/hris/benefits/retrieve-hris-benefits.ts +++ b/packages/mcp-server/src/tools/hris/benefits/retrieve-hris-benefits.ts @@ -25,6 +25,13 @@ export const tool: Tool = { benefit_id: { type: 'string', }, + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, jq_filter: { type: 'string', title: 'jq Filter', @@ -32,7 +39,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['benefit_id'], + required: ['benefit_id', 'entity_ids'], }, annotations: { readOnlyHint: true, @@ -41,7 +48,9 @@ export const tool: Tool = { export const handler = async (client: Finch, args: Record | undefined) => { const { benefit_id, jq_filter, ...body } = args as any; - return asTextContentResult(await maybeFilter(jq_filter, await client.hris.benefits.retrieve(benefit_id))); + return asTextContentResult( + await maybeFilter(jq_filter, await client.hris.benefits.retrieve(benefit_id, body)), + ); }; export default { metadata, tool, handler }; diff --git a/packages/mcp-server/src/tools/hris/benefits/update-hris-benefits.ts b/packages/mcp-server/src/tools/hris/benefits/update-hris-benefits.ts index 62ba29eb5..c117dd884 100644 --- a/packages/mcp-server/src/tools/hris/benefits/update-hris-benefits.ts +++ b/packages/mcp-server/src/tools/hris/benefits/update-hris-benefits.ts @@ -25,6 +25,13 @@ export const tool: Tool = { benefit_id: { type: 'string', }, + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, description: { type: 'string', description: 'Updated name or description.', @@ -36,7 +43,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['benefit_id'], + required: ['benefit_id', 'entity_ids'], }, annotations: {}, }; diff --git a/packages/mcp-server/src/tools/hris/company/pay-statement-item/list-company-hris-pay-statement-item.ts b/packages/mcp-server/src/tools/hris/company/pay-statement-item/list-company-hris-pay-statement-item.ts index b4df4bae1..d3b867f1a 100644 --- a/packages/mcp-server/src/tools/hris/company/pay-statement-item/list-company-hris-pay-statement-item.ts +++ b/packages/mcp-server/src/tools/hris/company/pay-statement-item/list-company-hris-pay-statement-item.ts @@ -22,6 +22,13 @@ export const tool: Tool = { inputSchema: { type: 'object', properties: { + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, categories: { type: 'array', description: @@ -58,7 +65,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: [], + required: ['entity_ids'], }, annotations: { readOnlyHint: true, diff --git a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/create-pay-statement-item-company-hris-rules.ts b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/create-pay-statement-item-company-hris-rules.ts index 5c9549550..2bd53832e 100644 --- a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/create-pay-statement-item-company-hris-rules.ts +++ b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/create-pay-statement-item-company-hris-rules.ts @@ -22,6 +22,13 @@ export const tool: Tool = { inputSchema: { type: 'object', properties: { + entity_ids: { + type: 'array', + description: 'The entity IDs to create the rule for.', + items: { + type: 'string', + }, + }, attributes: { type: 'object', description: 'Specifies the fields to be applied when the condition is met.', @@ -77,7 +84,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: [], + required: ['entity_ids'], }, annotations: {}, }; diff --git a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/delete-pay-statement-item-company-hris-rules.ts b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/delete-pay-statement-item-company-hris-rules.ts index 420fcc934..95db8e7d5 100644 --- a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/delete-pay-statement-item-company-hris-rules.ts +++ b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/delete-pay-statement-item-company-hris-rules.ts @@ -25,6 +25,13 @@ export const tool: Tool = { rule_id: { type: 'string', }, + entity_ids: { + type: 'array', + description: 'The entity IDs to delete the rule for.', + items: { + type: 'string', + }, + }, jq_filter: { type: 'string', title: 'jq Filter', @@ -32,7 +39,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['rule_id'], + required: ['rule_id', 'entity_ids'], }, annotations: { idempotentHint: true, @@ -42,7 +49,7 @@ export const tool: Tool = { export const handler = async (client: Finch, args: Record | undefined) => { const { rule_id, jq_filter, ...body } = args as any; return asTextContentResult( - await maybeFilter(jq_filter, await client.hris.company.payStatementItem.rules.delete(rule_id)), + await maybeFilter(jq_filter, await client.hris.company.payStatementItem.rules.delete(rule_id, body)), ); }; diff --git a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/list-pay-statement-item-company-hris-rules.ts b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/list-pay-statement-item-company-hris-rules.ts index 0f875d856..e2f9ee4ec 100644 --- a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/list-pay-statement-item-company-hris-rules.ts +++ b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/list-pay-statement-item-company-hris-rules.ts @@ -22,6 +22,13 @@ export const tool: Tool = { inputSchema: { type: 'object', properties: { + entity_ids: { + type: 'array', + description: 'The entity IDs to retrieve rules for.', + items: { + type: 'string', + }, + }, jq_filter: { type: 'string', title: 'jq Filter', @@ -29,7 +36,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: [], + required: ['entity_ids'], }, annotations: { readOnlyHint: true, @@ -37,8 +44,8 @@ export const tool: Tool = { }; export const handler = async (client: Finch, args: Record | undefined) => { - const { jq_filter } = args as any; - const response = await client.hris.company.payStatementItem.rules.list().asResponse(); + const { jq_filter, ...body } = args as any; + const response = await client.hris.company.payStatementItem.rules.list(body).asResponse(); return asTextContentResult(await maybeFilter(jq_filter, await response.json())); }; diff --git a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/update-pay-statement-item-company-hris-rules.ts b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/update-pay-statement-item-company-hris-rules.ts index ceb760d27..856ad86d0 100644 --- a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/update-pay-statement-item-company-hris-rules.ts +++ b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/update-pay-statement-item-company-hris-rules.ts @@ -25,6 +25,13 @@ export const tool: Tool = { rule_id: { type: 'string', }, + entity_ids: { + type: 'array', + description: 'The entity IDs to update the rule for.', + items: { + type: 'string', + }, + }, optionalProperty: { type: 'object', additionalProperties: true, @@ -36,7 +43,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['rule_id'], + required: ['rule_id', 'entity_ids'], }, annotations: { idempotentHint: true, diff --git a/packages/mcp-server/src/tools/hris/company/retrieve-hris-company.ts b/packages/mcp-server/src/tools/hris/company/retrieve-hris-company.ts index 568a52c3b..25ea12ad0 100644 --- a/packages/mcp-server/src/tools/hris/company/retrieve-hris-company.ts +++ b/packages/mcp-server/src/tools/hris/company/retrieve-hris-company.ts @@ -22,6 +22,13 @@ export const tool: Tool = { inputSchema: { type: 'object', properties: { + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, jq_filter: { type: 'string', title: 'jq Filter', @@ -29,7 +36,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: [], + required: ['entity_ids'], }, annotations: { readOnlyHint: true, @@ -37,8 +44,8 @@ export const tool: Tool = { }; export const handler = async (client: Finch, args: Record | undefined) => { - const { jq_filter } = args as any; - return asTextContentResult(await maybeFilter(jq_filter, await client.hris.company.retrieve())); + const { jq_filter, ...body } = args as any; + return asTextContentResult(await maybeFilter(jq_filter, await client.hris.company.retrieve(body))); }; export default { metadata, tool, handler }; diff --git a/packages/mcp-server/src/tools/hris/directory/list-hris-directory.ts b/packages/mcp-server/src/tools/hris/directory/list-hris-directory.ts index ccbe79736..86cd36d18 100644 --- a/packages/mcp-server/src/tools/hris/directory/list-hris-directory.ts +++ b/packages/mcp-server/src/tools/hris/directory/list-hris-directory.ts @@ -22,6 +22,13 @@ export const tool: Tool = { inputSchema: { type: 'object', properties: { + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, limit: { type: 'integer', description: 'Number of employees to return (defaults to all)', @@ -37,7 +44,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: [], + required: ['entity_ids'], }, annotations: { readOnlyHint: true, diff --git a/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts b/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts index 94ad8649a..0ceb1b6d1 100644 --- a/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts +++ b/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts @@ -22,6 +22,13 @@ export const tool: Tool = { inputSchema: { type: 'object', properties: { + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, individual_ids: { type: 'array', description: @@ -53,7 +60,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: [], + required: ['entity_ids'], }, annotations: { readOnlyHint: true, diff --git a/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts b/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts index cb7fd425d..eccb1cf27 100644 --- a/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts +++ b/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts @@ -25,6 +25,13 @@ export const tool: Tool = { document_id: { type: 'string', }, + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, jq_filter: { type: 'string', title: 'jq Filter', @@ -32,7 +39,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['document_id'], + required: ['document_id', 'entity_ids'], }, annotations: { readOnlyHint: true, @@ -41,7 +48,9 @@ export const tool: Tool = { export const handler = async (client: Finch, args: Record | undefined) => { const { document_id, jq_filter, ...body } = args as any; - return asTextContentResult(await maybeFilter(jq_filter, await client.hris.documents.retreive(document_id))); + return asTextContentResult( + await maybeFilter(jq_filter, await client.hris.documents.retreive(document_id, body)), + ); }; export default { metadata, tool, handler }; diff --git a/packages/mcp-server/src/tools/hris/employments/retrieve-many-hris-employments.ts b/packages/mcp-server/src/tools/hris/employments/retrieve-many-hris-employments.ts index 3b6d7bd60..36b2ea010 100644 --- a/packages/mcp-server/src/tools/hris/employments/retrieve-many-hris-employments.ts +++ b/packages/mcp-server/src/tools/hris/employments/retrieve-many-hris-employments.ts @@ -20,6 +20,13 @@ export const tool: Tool = { inputSchema: { type: 'object', properties: { + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, requests: { type: 'array', description: 'The array of batch requests.', @@ -36,7 +43,7 @@ export const tool: Tool = { }, }, }, - required: ['requests'], + required: ['entity_ids', 'requests'], }, annotations: {}, }; diff --git a/packages/mcp-server/src/tools/hris/individuals/retrieve-many-hris-individuals.ts b/packages/mcp-server/src/tools/hris/individuals/retrieve-many-hris-individuals.ts index b57109a39..b5f012441 100644 --- a/packages/mcp-server/src/tools/hris/individuals/retrieve-many-hris-individuals.ts +++ b/packages/mcp-server/src/tools/hris/individuals/retrieve-many-hris-individuals.ts @@ -22,6 +22,13 @@ export const tool: Tool = { inputSchema: { type: 'object', properties: { + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, options: { type: 'object', properties: { @@ -51,7 +58,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: [], + required: ['entity_ids'], }, annotations: {}, }; diff --git a/packages/mcp-server/src/tools/hris/pay-statements/retrieve-many-hris-pay-statements.ts b/packages/mcp-server/src/tools/hris/pay-statements/retrieve-many-hris-pay-statements.ts index fb2723a81..74bfa6215 100644 --- a/packages/mcp-server/src/tools/hris/pay-statements/retrieve-many-hris-pay-statements.ts +++ b/packages/mcp-server/src/tools/hris/pay-statements/retrieve-many-hris-pay-statements.ts @@ -21,6 +21,13 @@ export const tool: Tool = { inputSchema: { type: 'object', properties: { + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, requests: { type: 'array', description: 'The array of batch requests.', @@ -44,7 +51,7 @@ export const tool: Tool = { }, }, }, - required: ['requests'], + required: ['entity_ids', 'requests'], }, annotations: {}, }; diff --git a/packages/mcp-server/src/tools/hris/payments/list-hris-payments.ts b/packages/mcp-server/src/tools/hris/payments/list-hris-payments.ts index 1844ee357..93a547596 100644 --- a/packages/mcp-server/src/tools/hris/payments/list-hris-payments.ts +++ b/packages/mcp-server/src/tools/hris/payments/list-hris-payments.ts @@ -27,6 +27,13 @@ export const tool: Tool = { description: 'The end date to retrieve payments by a company (inclusive) in `YYYY-MM-DD` format.', format: 'date', }, + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, start_date: { type: 'string', description: 'The start date to retrieve payments by a company (inclusive) in `YYYY-MM-DD` format.', @@ -39,7 +46,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['end_date', 'start_date'], + required: ['end_date', 'entity_ids', 'start_date'], }, annotations: { readOnlyHint: true, diff --git a/packages/mcp-server/src/tools/payroll/pay-groups/list-payroll-pay-groups.ts b/packages/mcp-server/src/tools/payroll/pay-groups/list-payroll-pay-groups.ts index b0ea09d22..49d38953d 100644 --- a/packages/mcp-server/src/tools/payroll/pay-groups/list-payroll-pay-groups.ts +++ b/packages/mcp-server/src/tools/payroll/pay-groups/list-payroll-pay-groups.ts @@ -22,6 +22,13 @@ export const tool: Tool = { inputSchema: { type: 'object', properties: { + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, individual_id: { type: 'string', }, @@ -38,7 +45,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: [], + required: ['entity_ids'], }, annotations: { readOnlyHint: true, diff --git a/packages/mcp-server/src/tools/payroll/pay-groups/retrieve-payroll-pay-groups.ts b/packages/mcp-server/src/tools/payroll/pay-groups/retrieve-payroll-pay-groups.ts index 3e64cb3c3..974ee3ba8 100644 --- a/packages/mcp-server/src/tools/payroll/pay-groups/retrieve-payroll-pay-groups.ts +++ b/packages/mcp-server/src/tools/payroll/pay-groups/retrieve-payroll-pay-groups.ts @@ -25,6 +25,13 @@ export const tool: Tool = { pay_group_id: { type: 'string', }, + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, jq_filter: { type: 'string', title: 'jq Filter', @@ -32,7 +39,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['pay_group_id'], + required: ['pay_group_id', 'entity_ids'], }, annotations: { readOnlyHint: true, @@ -42,7 +49,7 @@ export const tool: Tool = { export const handler = async (client: Finch, args: Record | undefined) => { const { pay_group_id, jq_filter, ...body } = args as any; return asTextContentResult( - await maybeFilter(jq_filter, await client.payroll.payGroups.retrieve(pay_group_id)), + await maybeFilter(jq_filter, await client.payroll.payGroups.retrieve(pay_group_id, body)), ); }; diff --git a/src/resources/access-tokens.ts b/src/resources/access-tokens.ts index 770a0c3d5..586f6ff0b 100644 --- a/src/resources/access-tokens.ts +++ b/src/resources/access-tokens.ts @@ -62,6 +62,11 @@ export interface CreateAccessTokenResponse { */ connection_type: 'finch' | 'provider'; + /** + * An array of entity IDs that can be accessed with this access token + */ + entity_ids: Array; + /** * An array of the authorized products associated with the `access_token` */ diff --git a/src/resources/account.ts b/src/resources/account.ts index 2df6c8d53..c6ff91247 100644 --- a/src/resources/account.ts +++ b/src/resources/account.ts @@ -100,6 +100,12 @@ export interface Introspection { */ customer_name?: string | null; + /** + * Array of detailed entity information for each connected account in multi-account + * mode + */ + entities?: Array; + /** * Whether the connection associated with the `access_token` uses the Assisted * Connect Flow. (`true` if using Assisted Connect, `false` if connection is @@ -157,6 +163,28 @@ export namespace Introspection { message?: string; } } + + export interface Entity { + /** + * The connection account ID for this entity + */ + id: string; + + /** + * The name of the entity (payroll provider company name) + */ + name: string | null; + + /** + * The source ID of the entity + */ + source_id: string | null; + + /** + * The type of entity + */ + type: string | null; + } } export declare namespace Account { diff --git a/src/resources/hris/benefits/benefits.ts b/src/resources/hris/benefits/benefits.ts index 20b3c21e2..cbc9154ee 100644 --- a/src/resources/hris/benefits/benefits.ts +++ b/src/resources/hris/benefits/benefits.ts @@ -1,7 +1,6 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../../resource'; -import { isRequestOptions } from '../../../core'; import * as Core from '../../../core'; import * as Shared from '../../shared'; import * as IndividualsAPI from './individuals'; @@ -10,6 +9,7 @@ import { IndividualBenefit, IndividualBenefitsSinglePage, IndividualEnrollManyParams, + IndividualEnrolledIDsParams, IndividualEnrolledIDsResponse, IndividualRetrieveManyBenefitsParams, IndividualUnenrollManyParams, @@ -28,22 +28,17 @@ export class Benefits extends APIResource { * @example * ```ts * const createCompanyBenefitsResponse = - * await client.hris.benefits.create(); + * await client.hris.benefits.create({ + * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + * }); * ``` */ create( - body?: BenefitCreateParams, - options?: Core.RequestOptions, - ): Core.APIPromise; - create(options?: Core.RequestOptions): Core.APIPromise; - create( - body: BenefitCreateParams | Core.RequestOptions = {}, + params: BenefitCreateParams, options?: Core.RequestOptions, ): Core.APIPromise { - if (isRequestOptions(body)) { - return this.create({}, body); - } - return this._client.post('/employer/benefits', { body, ...options }); + const { entity_ids, ...body } = params; + return this._client.post('/employer/benefits', { query: { entity_ids }, body, ...options }); } /** @@ -53,11 +48,16 @@ export class Benefits extends APIResource { * ```ts * const companyBenefit = await client.hris.benefits.retrieve( * 'benefit_id', + * { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, * ); * ``` */ - retrieve(benefitId: string, options?: Core.RequestOptions): Core.APIPromise { - return this._client.get(`/employer/benefits/${benefitId}`, options); + retrieve( + benefitId: string, + query: BenefitRetrieveParams, + options?: Core.RequestOptions, + ): Core.APIPromise { + return this._client.get(`/employer/benefits/${benefitId}`, { query, ...options }); } /** @@ -66,24 +66,18 @@ export class Benefits extends APIResource { * @example * ```ts * const updateCompanyBenefitResponse = - * await client.hris.benefits.update('benefit_id'); + * await client.hris.benefits.update('benefit_id', { + * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + * }); * ``` */ update( benefitId: string, - body?: BenefitUpdateParams, - options?: Core.RequestOptions, - ): Core.APIPromise; - update(benefitId: string, options?: Core.RequestOptions): Core.APIPromise; - update( - benefitId: string, - body: BenefitUpdateParams | Core.RequestOptions = {}, + params: BenefitUpdateParams, options?: Core.RequestOptions, ): Core.APIPromise { - if (isRequestOptions(body)) { - return this.update(benefitId, {}, body); - } - return this._client.post(`/employer/benefits/${benefitId}`, { body, ...options }); + const { entity_ids, ...body } = params; + return this._client.post(`/employer/benefits/${benefitId}`, { query: { entity_ids }, body, ...options }); } /** @@ -92,13 +86,18 @@ export class Benefits extends APIResource { * @example * ```ts * // Automatically fetches more pages as needed. - * for await (const companyBenefit of client.hris.benefits.list()) { + * for await (const companyBenefit of client.hris.benefits.list( + * { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, + * )) { * // ... * } * ``` */ - list(options?: Core.RequestOptions): Core.PagePromise { - return this._client.getAPIList('/employer/benefits', CompanyBenefitsSinglePage, options); + list( + query: BenefitListParams, + options?: Core.RequestOptions, + ): Core.PagePromise { + return this._client.getAPIList('/employer/benefits', CompanyBenefitsSinglePage, { query, ...options }); } /** @@ -107,15 +106,21 @@ export class Benefits extends APIResource { * @example * ```ts * // Automatically fetches more pages as needed. - * for await (const supportedBenefit of client.hris.benefits.listSupportedBenefits()) { + * for await (const supportedBenefit of client.hris.benefits.listSupportedBenefits( + * { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, + * )) { * // ... * } * ``` */ listSupportedBenefits( + query: BenefitListSupportedBenefitsParams, options?: Core.RequestOptions, ): Core.PagePromise { - return this._client.getAPIList('/employer/benefits/meta', SupportedBenefitsSinglePage, options); + return this._client.getAPIList('/employer/benefits/meta', SupportedBenefitsSinglePage, { + query, + ...options, + }); } } @@ -355,24 +360,29 @@ export type BenfitContribution = BenefitContribution | null; export interface BenefitCreateParams { /** - * The company match for this benefit. + * Query param: The entity IDs to specify which entities' data to access. + */ + entity_ids: Array; + + /** + * Body param: The company match for this benefit. */ company_contribution?: BenefitCreateParams.CompanyContribution | null; /** - * Name of the benefit as it appears in the provider and pay statements. Recommend - * limiting this to <30 characters due to limitations in specific providers (e.g. - * Justworks). + * Body param: Name of the benefit as it appears in the provider and pay + * statements. Recommend limiting this to <30 characters due to limitations in + * specific providers (e.g. Justworks). */ description?: string; /** - * The frequency of the benefit deduction/contribution. + * Body param: The frequency of the benefit deduction/contribution. */ frequency?: BenefitFrequency | null; /** - * Type of benefit. + * Body param: Type of benefit. */ type?: BenefitType | null; } @@ -396,13 +406,39 @@ export namespace BenefitCreateParams { } } +export interface BenefitRetrieveParams { + /** + * The entity IDs to specify which entities' data to access. + */ + entity_ids: Array; +} + export interface BenefitUpdateParams { /** - * Updated name or description. + * Query param: The entity IDs to specify which entities' data to access. + */ + entity_ids: Array; + + /** + * Body param: Updated name or description. */ description?: string; } +export interface BenefitListParams { + /** + * The entity IDs to specify which entities' data to access. + */ + entity_ids: Array; +} + +export interface BenefitListSupportedBenefitsParams { + /** + * The entity IDs to specify which entities' data to access. + */ + entity_ids: Array; +} + Benefits.CompanyBenefitsSinglePage = CompanyBenefitsSinglePage; Benefits.SupportedBenefitsSinglePage = SupportedBenefitsSinglePage; Benefits.Individuals = Individuals; @@ -424,7 +460,10 @@ export declare namespace Benefits { CompanyBenefitsSinglePage as CompanyBenefitsSinglePage, SupportedBenefitsSinglePage as SupportedBenefitsSinglePage, type BenefitCreateParams as BenefitCreateParams, + type BenefitRetrieveParams as BenefitRetrieveParams, type BenefitUpdateParams as BenefitUpdateParams, + type BenefitListParams as BenefitListParams, + type BenefitListSupportedBenefitsParams as BenefitListSupportedBenefitsParams, }; export { @@ -435,6 +474,7 @@ export declare namespace Benefits { type IndividualEnrolledIDsResponse as IndividualEnrolledIDsResponse, IndividualBenefitsSinglePage as IndividualBenefitsSinglePage, type IndividualEnrollManyParams as IndividualEnrollManyParams, + type IndividualEnrolledIDsParams as IndividualEnrolledIDsParams, type IndividualRetrieveManyBenefitsParams as IndividualRetrieveManyBenefitsParams, type IndividualUnenrollManyParams as IndividualUnenrollManyParams, }; diff --git a/src/resources/hris/benefits/index.ts b/src/resources/hris/benefits/index.ts index 64d5d0209..eb37c4099 100644 --- a/src/resources/hris/benefits/index.ts +++ b/src/resources/hris/benefits/index.ts @@ -16,7 +16,10 @@ export { type UpdateCompanyBenefitResponse, type BenfitContribution, type BenefitCreateParams, + type BenefitRetrieveParams, type BenefitUpdateParams, + type BenefitListParams, + type BenefitListSupportedBenefitsParams, } from './benefits'; export { IndividualBenefitsSinglePage, @@ -26,6 +29,7 @@ export { type UnenrolledIndividualBenefitResponse, type IndividualEnrolledIDsResponse, type IndividualEnrollManyParams, + type IndividualEnrolledIDsParams, type IndividualRetrieveManyBenefitsParams, type IndividualUnenrollManyParams, } from './individuals'; diff --git a/src/resources/hris/benefits/individuals.ts b/src/resources/hris/benefits/individuals.ts index ddccaf38f..a8595a4d6 100644 --- a/src/resources/hris/benefits/individuals.ts +++ b/src/resources/hris/benefits/individuals.ts @@ -1,7 +1,6 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../../resource'; -import { isRequestOptions } from '../../../core'; import * as Core from '../../../core'; import { SinglePage } from '../../../pagination'; @@ -17,28 +16,23 @@ export class Individuals extends APIResource { * const enrolledIndividualBenefitResponse = * await client.hris.benefits.individuals.enrollMany( * 'benefit_id', - * [{}], + * { + * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + * }, * ); * ``` */ enrollMany( benefitId: string, - body?: IndividualEnrollManyParams, - options?: Core.RequestOptions, - ): Core.APIPromise; - enrollMany( - benefitId: string, - options?: Core.RequestOptions, - ): Core.APIPromise; - enrollMany( - benefitId: string, - body?: IndividualEnrollManyParams | Core.RequestOptions, + params: IndividualEnrollManyParams, options?: Core.RequestOptions, ): Core.APIPromise { - if (isRequestOptions(body)) { - return this.enrollMany(benefitId, undefined, body); - } - return this._client.post(`/employer/benefits/${benefitId}/individuals`, { body, ...options }); + const { entity_ids, individuals } = params ?? {}; + return this._client.post(`/employer/benefits/${benefitId}/individuals`, { + query: { entity_ids }, + body: individuals, + ...options, + }); } /** @@ -49,14 +43,18 @@ export class Individuals extends APIResource { * const response = * await client.hris.benefits.individuals.enrolledIds( * 'benefit_id', + * { + * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + * }, * ); * ``` */ enrolledIds( benefitId: string, + query: IndividualEnrolledIDsParams, options?: Core.RequestOptions, ): Core.APIPromise { - return this._client.get(`/employer/benefits/${benefitId}/enrolled`, options); + return this._client.get(`/employer/benefits/${benefitId}/enrolled`, { query, ...options }); } /** @@ -67,6 +65,7 @@ export class Individuals extends APIResource { * // Automatically fetches more pages as needed. * for await (const individualBenefit of client.hris.benefits.individuals.retrieveManyBenefits( * 'benefit_id', + * { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, * )) { * // ... * } @@ -74,21 +73,9 @@ export class Individuals extends APIResource { */ retrieveManyBenefits( benefitId: string, - query?: IndividualRetrieveManyBenefitsParams, - options?: Core.RequestOptions, - ): Core.PagePromise; - retrieveManyBenefits( - benefitId: string, - options?: Core.RequestOptions, - ): Core.PagePromise; - retrieveManyBenefits( - benefitId: string, - query: IndividualRetrieveManyBenefitsParams | Core.RequestOptions = {}, + query: IndividualRetrieveManyBenefitsParams, options?: Core.RequestOptions, ): Core.PagePromise { - if (isRequestOptions(query)) { - return this.retrieveManyBenefits(benefitId, {}, query); - } return this._client.getAPIList( `/employer/benefits/${benefitId}/individuals`, IndividualBenefitsSinglePage, @@ -104,27 +91,23 @@ export class Individuals extends APIResource { * const unenrolledIndividualBenefitResponse = * await client.hris.benefits.individuals.unenrollMany( * 'benefit_id', + * { + * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + * }, * ); * ``` */ unenrollMany( benefitId: string, - body?: IndividualUnenrollManyParams, - options?: Core.RequestOptions, - ): Core.APIPromise; - unenrollMany( - benefitId: string, - options?: Core.RequestOptions, - ): Core.APIPromise; - unenrollMany( - benefitId: string, - body: IndividualUnenrollManyParams | Core.RequestOptions = {}, + params: IndividualUnenrollManyParams, options?: Core.RequestOptions, ): Core.APIPromise { - if (isRequestOptions(body)) { - return this.unenrollMany(benefitId, {}, body); - } - return this._client.delete(`/employer/benefits/${benefitId}/individuals`, { body, ...options }); + const { entity_ids, ...body } = params; + return this._client.delete(`/employer/benefits/${benefitId}/individuals`, { + query: { entity_ids }, + body, + ...options, + }); } } @@ -264,7 +247,17 @@ export interface IndividualEnrolledIDsResponse { individual_ids: Array; } -export type IndividualEnrollManyParams = Array; +export interface IndividualEnrollManyParams { + /** + * Query param: The entity IDs to specify which entities' data to access. + */ + entity_ids: Array; + + /** + * Body param: Array of the individual_id to enroll and a configuration object. + */ + individuals?: Array; +} export namespace IndividualEnrollManyParams { export interface Individual { @@ -348,7 +341,19 @@ export namespace IndividualEnrollManyParams { } } +export interface IndividualEnrolledIDsParams { + /** + * The entity IDs to specify which entities' data to access. + */ + entity_ids: Array; +} + export interface IndividualRetrieveManyBenefitsParams { + /** + * The entity IDs to specify which entities' data to access. + */ + entity_ids: Array; + /** * comma-delimited list of stable Finch uuids for each individual. If empty, * defaults to all individuals @@ -358,7 +363,12 @@ export interface IndividualRetrieveManyBenefitsParams { export interface IndividualUnenrollManyParams { /** - * Array of individual_ids to unenroll. + * Query param: The entity IDs to specify which entities' data to access. + */ + entity_ids: Array; + + /** + * Body param: Array of individual_ids to unenroll. */ individual_ids?: Array; } @@ -373,6 +383,7 @@ export declare namespace Individuals { type IndividualEnrolledIDsResponse as IndividualEnrolledIDsResponse, IndividualBenefitsSinglePage as IndividualBenefitsSinglePage, type IndividualEnrollManyParams as IndividualEnrollManyParams, + type IndividualEnrolledIDsParams as IndividualEnrolledIDsParams, type IndividualRetrieveManyBenefitsParams as IndividualRetrieveManyBenefitsParams, type IndividualUnenrollManyParams as IndividualUnenrollManyParams, }; diff --git a/src/resources/hris/company/company.ts b/src/resources/hris/company/company.ts index 357637ea3..9789395d0 100644 --- a/src/resources/hris/company/company.ts +++ b/src/resources/hris/company/company.ts @@ -21,11 +21,13 @@ export class CompanyResource extends APIResource { * * @example * ```ts - * const company = await client.hris.company.retrieve(); + * const company = await client.hris.company.retrieve({ + * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + * }); * ``` */ - retrieve(options?: Core.RequestOptions): Core.APIPromise { - return this._client.get('/employer/company', options); + retrieve(query: CompanyRetrieveParams, options?: Core.RequestOptions): Core.APIPromise { + return this._client.get('/employer/company', { query, ...options }); } } @@ -151,11 +153,18 @@ export namespace Company { } } +export interface CompanyRetrieveParams { + /** + * The entity IDs to specify which entities' data to access. + */ + entity_ids: Array; +} + CompanyResource.PayStatementItem = PayStatementItem; CompanyResource.PayStatementItemListResponsesPage = PayStatementItemListResponsesPage; export declare namespace CompanyResource { - export { type Company as Company }; + export { type Company as Company, type CompanyRetrieveParams as CompanyRetrieveParams }; export { PayStatementItem as PayStatementItem, diff --git a/src/resources/hris/company/index.ts b/src/resources/hris/company/index.ts index 7c815639f..fb8496431 100644 --- a/src/resources/hris/company/index.ts +++ b/src/resources/hris/company/index.ts @@ -1,6 +1,6 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -export { CompanyResource, type Company } from './company'; +export { CompanyResource, type Company, type CompanyRetrieveParams } from './company'; export { PayStatementItemListResponsesPage, PayStatementItem, diff --git a/src/resources/hris/company/pay-statement-item/index.ts b/src/resources/hris/company/pay-statement-item/index.ts index 99b195513..21d1080e6 100644 --- a/src/resources/hris/company/pay-statement-item/index.ts +++ b/src/resources/hris/company/pay-statement-item/index.ts @@ -15,4 +15,6 @@ export { type RuleDeleteResponse, type RuleCreateParams, type RuleUpdateParams, + type RuleListParams, + type RuleDeleteParams, } from './rules'; diff --git a/src/resources/hris/company/pay-statement-item/pay-statement-item.ts b/src/resources/hris/company/pay-statement-item/pay-statement-item.ts index 207ab0755..95884cb7a 100644 --- a/src/resources/hris/company/pay-statement-item/pay-statement-item.ts +++ b/src/resources/hris/company/pay-statement-item/pay-statement-item.ts @@ -1,13 +1,14 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../../../resource'; -import { isRequestOptions } from '../../../../core'; import * as Core from '../../../../core'; import * as RulesAPI from './rules'; import { RuleCreateParams, RuleCreateResponse, + RuleDeleteParams, RuleDeleteResponse, + RuleListParams, RuleListResponse, RuleListResponsesPage, RuleUpdateParams, @@ -27,25 +28,17 @@ export class PayStatementItem extends APIResource { * @example * ```ts * // Automatically fetches more pages as needed. - * for await (const payStatementItemListResponse of client.hris.company.payStatementItem.list()) { + * for await (const payStatementItemListResponse of client.hris.company.payStatementItem.list( + * { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, + * )) { * // ... * } * ``` */ list( - query?: PayStatementItemListParams, - options?: Core.RequestOptions, - ): Core.PagePromise; - list( - options?: Core.RequestOptions, - ): Core.PagePromise; - list( - query: PayStatementItemListParams | Core.RequestOptions = {}, + query: PayStatementItemListParams, options?: Core.RequestOptions, ): Core.PagePromise { - if (isRequestOptions(query)) { - return this.list({}, query); - } return this._client.getAPIList('/employer/pay-statement-item', PayStatementItemListResponsesPage, { query, ...options, @@ -103,6 +96,11 @@ export namespace PayStatementItemListResponse { } export interface PayStatementItemListParams { + /** + * The entity IDs to specify which entities' data to access. + */ + entity_ids: Array; + /** * Comma-delimited list of pay statement item categories to filter on. If empty, * defaults to all categories. @@ -152,5 +150,7 @@ export declare namespace PayStatementItem { RuleListResponsesPage as RuleListResponsesPage, type RuleCreateParams as RuleCreateParams, type RuleUpdateParams as RuleUpdateParams, + type RuleListParams as RuleListParams, + type RuleDeleteParams as RuleDeleteParams, }; } diff --git a/src/resources/hris/company/pay-statement-item/rules.ts b/src/resources/hris/company/pay-statement-item/rules.ts index bbc056ce5..9d8759be6 100644 --- a/src/resources/hris/company/pay-statement-item/rules.ts +++ b/src/resources/hris/company/pay-statement-item/rules.ts @@ -1,7 +1,6 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../../../resource'; -import { isRequestOptions } from '../../../../core'; import * as Core from '../../../../core'; import { ResponsesPage } from '../../../../pagination'; @@ -17,19 +16,18 @@ export class Rules extends APIResource { * @example * ```ts * const rule = - * await client.hris.company.payStatementItem.rules.create(); + * await client.hris.company.payStatementItem.rules.create({ + * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + * }); * ``` */ - create(body?: RuleCreateParams, options?: Core.RequestOptions): Core.APIPromise; - create(options?: Core.RequestOptions): Core.APIPromise; - create( - body: RuleCreateParams | Core.RequestOptions = {}, - options?: Core.RequestOptions, - ): Core.APIPromise { - if (isRequestOptions(body)) { - return this.create({}, body); - } - return this._client.post('/employer/pay-statement-item/rule', { body, ...options }); + create(params: RuleCreateParams, options?: Core.RequestOptions): Core.APIPromise { + const { entity_ids, ...body } = params; + return this._client.post('/employer/pay-statement-item/rule', { + query: { entity_ids }, + body, + ...options, + }); } /** @@ -41,24 +39,23 @@ export class Rules extends APIResource { * const rule = * await client.hris.company.payStatementItem.rules.update( * 'rule_id', + * { + * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + * }, * ); * ``` */ update( ruleId: string, - body?: RuleUpdateParams, - options?: Core.RequestOptions, - ): Core.APIPromise; - update(ruleId: string, options?: Core.RequestOptions): Core.APIPromise; - update( - ruleId: string, - body: RuleUpdateParams | Core.RequestOptions = {}, + params: RuleUpdateParams, options?: Core.RequestOptions, ): Core.APIPromise { - if (isRequestOptions(body)) { - return this.update(ruleId, {}, body); - } - return this._client.put(`/employer/pay-statement-item/rule/${ruleId}`, { body, ...options }); + const { entity_ids, ...body } = params; + return this._client.put(`/employer/pay-statement-item/rule/${ruleId}`, { + query: { entity_ids }, + body, + ...options, + }); } /** @@ -68,13 +65,21 @@ export class Rules extends APIResource { * @example * ```ts * // Automatically fetches more pages as needed. - * for await (const ruleListResponse of client.hris.company.payStatementItem.rules.list()) { + * for await (const ruleListResponse of client.hris.company.payStatementItem.rules.list( + * { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, + * )) { * // ... * } * ``` */ - list(options?: Core.RequestOptions): Core.PagePromise { - return this._client.getAPIList('/employer/pay-statement-item/rule', RuleListResponsesPage, options); + list( + query: RuleListParams, + options?: Core.RequestOptions, + ): Core.PagePromise { + return this._client.getAPIList('/employer/pay-statement-item/rule', RuleListResponsesPage, { + query, + ...options, + }); } /** @@ -86,11 +91,22 @@ export class Rules extends APIResource { * const rule = * await client.hris.company.payStatementItem.rules.delete( * 'rule_id', + * { + * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + * }, * ); * ``` */ - delete(ruleId: string, options?: Core.RequestOptions): Core.APIPromise { - return this._client.delete(`/employer/pay-statement-item/rule/${ruleId}`, options); + delete( + ruleId: string, + params: RuleDeleteParams, + options?: Core.RequestOptions, + ): Core.APIPromise { + const { entity_ids } = params; + return this._client.delete(`/employer/pay-statement-item/rule/${ruleId}`, { + query: { entity_ids }, + ...options, + }); } } @@ -399,24 +415,33 @@ export namespace RuleDeleteResponse { export interface RuleCreateParams { /** - * Specifies the fields to be applied when the condition is met. + * Query param: The entity IDs to create the rule for. + */ + entity_ids: Array; + + /** + * Body param: Specifies the fields to be applied when the condition is met. */ attributes?: RuleCreateParams.Attributes; + /** + * Body param: + */ conditions?: Array; /** - * Specifies when the rules should stop applying rules based on the date. + * Body param: Specifies when the rules should stop applying rules based on the + * date. */ effective_end_date?: string | null; /** - * Specifies when the rule should begin applying based on the date. + * Body param: Specifies when the rule should begin applying based on the date. */ effective_start_date?: string | null; /** - * The entity type to which the rule is applied. + * Body param: The entity type to which the rule is applied. */ entity_type?: 'pay_statement_item'; } @@ -452,9 +477,31 @@ export namespace RuleCreateParams { } export interface RuleUpdateParams { + /** + * Query param: The entity IDs to update the rule for. + */ + entity_ids: Array; + + /** + * Body param: + */ optionalProperty?: unknown; } +export interface RuleListParams { + /** + * The entity IDs to retrieve rules for. + */ + entity_ids: Array; +} + +export interface RuleDeleteParams { + /** + * The entity IDs to delete the rule for. + */ + entity_ids: Array; +} + Rules.RuleListResponsesPage = RuleListResponsesPage; export declare namespace Rules { @@ -466,5 +513,7 @@ export declare namespace Rules { RuleListResponsesPage as RuleListResponsesPage, type RuleCreateParams as RuleCreateParams, type RuleUpdateParams as RuleUpdateParams, + type RuleListParams as RuleListParams, + type RuleDeleteParams as RuleDeleteParams, }; } diff --git a/src/resources/hris/directory.ts b/src/resources/hris/directory.ts index 006acc784..33b66b90d 100644 --- a/src/resources/hris/directory.ts +++ b/src/resources/hris/directory.ts @@ -1,7 +1,6 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../resource'; -import { isRequestOptions } from '../../core'; import * as Core from '../../core'; import { IndividualsPage, type IndividualsPageParams } from '../../pagination'; @@ -12,23 +11,17 @@ export class Directory extends APIResource { * @example * ```ts * // Automatically fetches more pages as needed. - * for await (const individualInDirectory of client.hris.directory.list()) { + * for await (const individualInDirectory of client.hris.directory.list( + * { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, + * )) { * // ... * } * ``` */ list( - query?: DirectoryListParams, - options?: Core.RequestOptions, - ): Core.PagePromise; - list(options?: Core.RequestOptions): Core.PagePromise; - list( - query: DirectoryListParams | Core.RequestOptions = {}, + query: DirectoryListParams, options?: Core.RequestOptions, ): Core.PagePromise { - if (isRequestOptions(query)) { - return this.list({}, query); - } return this._client.getAPIList('/employer/directory', IndividualsPage, { query, ...options }); } @@ -97,9 +90,19 @@ export namespace IndividualInDirectory { } } -export interface DirectoryListParams extends IndividualsPageParams {} +export interface DirectoryListParams extends IndividualsPageParams { + /** + * The entity IDs to specify which entities' data to access. + */ + entity_ids: Array; +} -export interface DirectoryListIndividualsParams extends IndividualsPageParams {} +export interface DirectoryListIndividualsParams extends IndividualsPageParams { + /** + * The entity IDs to specify which entities' data to access. + */ + entity_ids: Array; +} export declare namespace Directory { export { diff --git a/src/resources/hris/documents.ts b/src/resources/hris/documents.ts index 6d6e3b6ba..45e9b0f73 100644 --- a/src/resources/hris/documents.ts +++ b/src/resources/hris/documents.ts @@ -1,7 +1,6 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../resource'; -import { isRequestOptions } from '../../core'; import * as Core from '../../core'; import * as Shared from '../shared'; @@ -12,18 +11,12 @@ export class Documents extends APIResource { * * @example * ```ts - * const documents = await client.hris.documents.list(); + * const documents = await client.hris.documents.list({ + * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + * }); * ``` */ - list(query?: DocumentListParams, options?: Core.RequestOptions): Core.APIPromise; - list(options?: Core.RequestOptions): Core.APIPromise; - list( - query: DocumentListParams | Core.RequestOptions = {}, - options?: Core.RequestOptions, - ): Core.APIPromise { - if (isRequestOptions(query)) { - return this.list({}, query); - } + list(query: DocumentListParams, options?: Core.RequestOptions): Core.APIPromise { return this._client.get('/employer/documents', { query, ...options }); } @@ -35,11 +28,16 @@ export class Documents extends APIResource { * ```ts * const response = await client.hris.documents.retreive( * 'document_id', + * { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, * ); * ``` */ - retreive(documentId: string, options?: Core.RequestOptions): Core.APIPromise { - return this._client.get(`/employer/documents/${documentId}`, options); + retreive( + documentId: string, + query: DocumentRetreiveParams, + options?: Core.RequestOptions, + ): Core.APIPromise { + return this._client.get(`/employer/documents/${documentId}`, { query, ...options }); } } @@ -211,6 +209,11 @@ export interface DocumentListResponse { export type DocumentRetreiveResponse = W42020 | W42005; export interface DocumentListParams { + /** + * The entity IDs to specify which entities' data to access. + */ + entity_ids: Array; + /** * Comma-delimited list of stable Finch uuids for each individual. If empty, * defaults to all individuals @@ -234,6 +237,13 @@ export interface DocumentListParams { types?: Array<'w4_2020' | 'w4_2005'>; } +export interface DocumentRetreiveParams { + /** + * The entity IDs to specify which entities' data to access. + */ + entity_ids: Array; +} + export declare namespace Documents { export { type DocumentResponse as DocumentResponse, @@ -242,5 +252,6 @@ export declare namespace Documents { type DocumentListResponse as DocumentListResponse, type DocumentRetreiveResponse as DocumentRetreiveResponse, type DocumentListParams as DocumentListParams, + type DocumentRetreiveParams as DocumentRetreiveParams, }; } diff --git a/src/resources/hris/employments.ts b/src/resources/hris/employments.ts index 0956aa565..31415bce8 100644 --- a/src/resources/hris/employments.ts +++ b/src/resources/hris/employments.ts @@ -13,17 +13,22 @@ export class Employments extends APIResource { * ```ts * // Automatically fetches more pages as needed. * for await (const employmentDataResponse of client.hris.employments.retrieveMany( - * { requests: [{ individual_id: 'individual_id' }] }, + * { + * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + * requests: [{ individual_id: 'individual_id' }], + * }, * )) { * // ... * } * ``` */ retrieveMany( - body: EmploymentRetrieveManyParams, + params: EmploymentRetrieveManyParams, options?: Core.RequestOptions, ): Core.PagePromise { + const { entity_ids, ...body } = params; return this._client.getAPIList('/employer/employment', EmploymentDataResponsesPage, { + query: { entity_ids }, body, method: 'post', ...options, @@ -207,7 +212,12 @@ export interface EmploymentDataResponse { export interface EmploymentRetrieveManyParams { /** - * The array of batch requests. + * Query param: The entity IDs to specify which entities' data to access. + */ + entity_ids: Array; + + /** + * Body param: The array of batch requests. */ requests: Array; } diff --git a/src/resources/hris/hris.ts b/src/resources/hris/hris.ts index 18f734871..ea5ab6ca7 100644 --- a/src/resources/hris/hris.ts +++ b/src/resources/hris/hris.ts @@ -13,6 +13,7 @@ import { DocumentListParams, DocumentListResponse, DocumentResponse, + DocumentRetreiveParams, DocumentRetreiveResponse, Documents, W42005, @@ -52,6 +53,9 @@ import { BenefitCreateParams, BenefitFeaturesAndOperations, BenefitFrequency, + BenefitListParams, + BenefitListSupportedBenefitsParams, + BenefitRetrieveParams, BenefitType, BenefitUpdateParams, Benefits, @@ -66,7 +70,7 @@ import { UpdateCompanyBenefitResponse, } from './benefits/benefits'; import * as CompanyAPI from './company/company'; -import { Company, CompanyResource } from './company/company'; +import { Company, CompanyResource, CompanyRetrieveParams } from './company/company'; export class HRIS extends APIResource { company: CompanyAPI.CompanyResource = new CompanyAPI.CompanyResource(this._client); @@ -180,7 +184,11 @@ HRIS.SupportedBenefitsSinglePage = SupportedBenefitsSinglePage; export declare namespace HRIS { export { type Income as Income, type Location as Location, type Money as Money }; - export { CompanyResource as CompanyResource, type Company as Company }; + export { + CompanyResource as CompanyResource, + type Company as Company, + type CompanyRetrieveParams as CompanyRetrieveParams, + }; export { Directory as Directory, @@ -230,6 +238,7 @@ export declare namespace HRIS { type DocumentListResponse as DocumentListResponse, type DocumentRetreiveResponse as DocumentRetreiveResponse, type DocumentListParams as DocumentListParams, + type DocumentRetreiveParams as DocumentRetreiveParams, }; export { @@ -248,6 +257,9 @@ export declare namespace HRIS { CompanyBenefitsSinglePage as CompanyBenefitsSinglePage, SupportedBenefitsSinglePage as SupportedBenefitsSinglePage, type BenefitCreateParams as BenefitCreateParams, + type BenefitRetrieveParams as BenefitRetrieveParams, type BenefitUpdateParams as BenefitUpdateParams, + type BenefitListParams as BenefitListParams, + type BenefitListSupportedBenefitsParams as BenefitListSupportedBenefitsParams, }; } diff --git a/src/resources/hris/index.ts b/src/resources/hris/index.ts index 702fcbaf3..5fddd3d6e 100644 --- a/src/resources/hris/index.ts +++ b/src/resources/hris/index.ts @@ -16,9 +16,12 @@ export { type UpdateCompanyBenefitResponse, type BenfitContribution, type BenefitCreateParams, + type BenefitRetrieveParams, type BenefitUpdateParams, + type BenefitListParams, + type BenefitListSupportedBenefitsParams, } from './benefits/index'; -export { CompanyResource, type Company } from './company/index'; +export { CompanyResource, type Company, type CompanyRetrieveParams } from './company/index'; export { Directory, type IndividualInDirectory, @@ -33,6 +36,7 @@ export { type DocumentListResponse, type DocumentRetreiveResponse, type DocumentListParams, + type DocumentRetreiveParams, } from './documents'; export { EmploymentDataResponsesPage, diff --git a/src/resources/hris/individuals.ts b/src/resources/hris/individuals.ts index 21c3ad826..7be50566d 100644 --- a/src/resources/hris/individuals.ts +++ b/src/resources/hris/individuals.ts @@ -1,7 +1,6 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../resource'; -import { isRequestOptions } from '../../core'; import * as Core from '../../core'; import * as HRISAPI from './hris'; import { ResponsesPage } from '../../pagination'; @@ -13,24 +12,20 @@ export class Individuals extends APIResource { * @example * ```ts * // Automatically fetches more pages as needed. - * for await (const individualResponse of client.hris.individuals.retrieveMany()) { + * for await (const individualResponse of client.hris.individuals.retrieveMany( + * { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, + * )) { * // ... * } * ``` */ retrieveMany( - body?: IndividualRetrieveManyParams, - options?: Core.RequestOptions, - ): Core.PagePromise; - retrieveMany(options?: Core.RequestOptions): Core.PagePromise; - retrieveMany( - body: IndividualRetrieveManyParams | Core.RequestOptions = {}, + params: IndividualRetrieveManyParams, options?: Core.RequestOptions, ): Core.PagePromise { - if (isRequestOptions(body)) { - return this.retrieveMany({}, body); - } + const { entity_ids, ...body } = params; return this._client.getAPIList('/employer/individual', IndividualResponsesPage, { + query: { entity_ids }, body, method: 'post', ...options, @@ -146,8 +141,19 @@ export interface IndividualResponse { } export interface IndividualRetrieveManyParams { + /** + * Query param: The entity IDs to specify which entities' data to access. + */ + entity_ids: Array; + + /** + * Body param: + */ options?: IndividualRetrieveManyParams.Options | null; + /** + * Body param: + */ requests?: Array; } diff --git a/src/resources/hris/pay-statements.ts b/src/resources/hris/pay-statements.ts index 3f641c759..aae8a2bd2 100644 --- a/src/resources/hris/pay-statements.ts +++ b/src/resources/hris/pay-statements.ts @@ -18,6 +18,7 @@ export class PayStatements extends APIResource { * // Automatically fetches more pages as needed. * for await (const payStatementResponse of client.hris.payStatements.retrieveMany( * { + * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], * requests: [ * { * payment_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', @@ -30,10 +31,12 @@ export class PayStatements extends APIResource { * ``` */ retrieveMany( - body: PayStatementRetrieveManyParams, + params: PayStatementRetrieveManyParams, options?: Core.RequestOptions, ): Core.PagePromise { + const { entity_ids, ...body } = params; return this._client.getAPIList('/employer/pay-statement', PayStatementResponsesPage, { + query: { entity_ids }, body, method: 'post', ...options, @@ -310,7 +313,12 @@ export namespace PayStatementResponseBody { export interface PayStatementRetrieveManyParams { /** - * The array of batch requests. + * Query param: The entity IDs to specify which entities' data to access. + */ + entity_ids: Array; + + /** + * Body param: The array of batch requests. */ requests: Array; } diff --git a/src/resources/hris/payments.ts b/src/resources/hris/payments.ts index af1d1d9de..3d6371e9f 100644 --- a/src/resources/hris/payments.ts +++ b/src/resources/hris/payments.ts @@ -14,6 +14,7 @@ export class Payments extends APIResource { * // Automatically fetches more pages as needed. * for await (const payment of client.hris.payments.list({ * end_date: '2021-01-01', + * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], * start_date: '2021-01-01', * })) { * // ... @@ -99,6 +100,11 @@ export interface PaymentListParams { */ end_date: string; + /** + * The entity IDs to specify which entities' data to access. + */ + entity_ids: Array; + /** * The start date to retrieve payments by a company (inclusive) in `YYYY-MM-DD` * format. diff --git a/src/resources/payroll/index.ts b/src/resources/payroll/index.ts index 84109074a..00580f179 100644 --- a/src/resources/payroll/index.ts +++ b/src/resources/payroll/index.ts @@ -5,6 +5,7 @@ export { PayGroups, type PayGroupRetrieveResponse, type PayGroupListResponse, + type PayGroupRetrieveParams, type PayGroupListParams, } from './pay-groups'; export { Payroll } from './payroll'; diff --git a/src/resources/payroll/pay-groups.ts b/src/resources/payroll/pay-groups.ts index 7d3213aba..c4d41970c 100644 --- a/src/resources/payroll/pay-groups.ts +++ b/src/resources/payroll/pay-groups.ts @@ -1,7 +1,6 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../resource'; -import { isRequestOptions } from '../../core'; import * as Core from '../../core'; import { SinglePage } from '../../pagination'; @@ -9,27 +8,21 @@ export class PayGroups extends APIResource { /** * Read information from a single pay group */ - retrieve(payGroupId: string, options?: Core.RequestOptions): Core.APIPromise { - return this._client.get(`/employer/pay-groups/${payGroupId}`, options); + retrieve( + payGroupId: string, + query: PayGroupRetrieveParams, + options?: Core.RequestOptions, + ): Core.APIPromise { + return this._client.get(`/employer/pay-groups/${payGroupId}`, { query, ...options }); } /** * Read company pay groups and frequencies */ list( - query?: PayGroupListParams, - options?: Core.RequestOptions, - ): Core.PagePromise; - list( - options?: Core.RequestOptions, - ): Core.PagePromise; - list( - query: PayGroupListParams | Core.RequestOptions = {}, + query: PayGroupListParams, options?: Core.RequestOptions, ): Core.PagePromise { - if (isRequestOptions(query)) { - return this.list({}, query); - } return this._client.getAPIList('/employer/pay-groups', PayGroupListResponsesSinglePage, { query, ...options, @@ -95,7 +88,19 @@ export interface PayGroupListResponse { >; } +export interface PayGroupRetrieveParams { + /** + * The entity IDs to specify which entities' data to access. + */ + entity_ids: Array; +} + export interface PayGroupListParams { + /** + * The entity IDs to specify which entities' data to access. + */ + entity_ids: Array; + individual_id?: string; pay_frequencies?: Array; @@ -108,6 +113,7 @@ export declare namespace PayGroups { type PayGroupRetrieveResponse as PayGroupRetrieveResponse, type PayGroupListResponse as PayGroupListResponse, PayGroupListResponsesSinglePage as PayGroupListResponsesSinglePage, + type PayGroupRetrieveParams as PayGroupRetrieveParams, type PayGroupListParams as PayGroupListParams, }; } diff --git a/src/resources/payroll/payroll.ts b/src/resources/payroll/payroll.ts index 8d2136563..fbb7c3e46 100644 --- a/src/resources/payroll/payroll.ts +++ b/src/resources/payroll/payroll.ts @@ -6,6 +6,7 @@ import { PayGroupListParams, PayGroupListResponse, PayGroupListResponsesSinglePage, + PayGroupRetrieveParams, PayGroupRetrieveResponse, PayGroups, } from './pay-groups'; @@ -23,6 +24,7 @@ export declare namespace Payroll { type PayGroupRetrieveResponse as PayGroupRetrieveResponse, type PayGroupListResponse as PayGroupListResponse, PayGroupListResponsesSinglePage as PayGroupListResponsesSinglePage, + type PayGroupRetrieveParams as PayGroupRetrieveParams, type PayGroupListParams as PayGroupListParams, }; } diff --git a/tests/api-resources/hris/benefits/benefits.test.ts b/tests/api-resources/hris/benefits/benefits.test.ts index 1abae5b15..b9489ff11 100644 --- a/tests/api-resources/hris/benefits/benefits.test.ts +++ b/tests/api-resources/hris/benefits/benefits.test.ts @@ -9,8 +9,10 @@ const client = new Finch({ }); describe('resource benefits', () => { - test('create', async () => { - const responsePromise = client.hris.benefits.create(); + test('create: only required params', async () => { + const responsePromise = client.hris.benefits.create({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -20,30 +22,20 @@ describe('resource benefits', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('create: request options instead of params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect(client.hris.benefits.create({ path: '/_stainless_unknown_path' })).rejects.toThrow( - Finch.NotFoundError, - ); + test('create: required and optional params', async () => { + const response = await client.hris.benefits.create({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + company_contribution: { tiers: [{ match: 1, threshold: 1 }], type: 'match' }, + description: 'description', + frequency: 'every_paycheck', + type: '457', + }); }); - test('create: request options and params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.benefits.create( - { - company_contribution: { tiers: [{ match: 1, threshold: 1 }], type: 'match' }, - description: 'description', - frequency: 'every_paycheck', - type: '457', - }, - { path: '/_stainless_unknown_path' }, - ), - ).rejects.toThrow(Finch.NotFoundError); - }); - - test('retrieve', async () => { - const responsePromise = client.hris.benefits.retrieve('benefit_id'); + test('retrieve: only required params', async () => { + const responsePromise = client.hris.benefits.retrieve('benefit_id', { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -53,15 +45,16 @@ describe('resource benefits', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('retrieve: request options instead of params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.benefits.retrieve('benefit_id', { path: '/_stainless_unknown_path' }), - ).rejects.toThrow(Finch.NotFoundError); + test('retrieve: required and optional params', async () => { + const response = await client.hris.benefits.retrieve('benefit_id', { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); }); - test('update', async () => { - const responsePromise = client.hris.benefits.update('benefit_id'); + test('update: only required params', async () => { + const responsePromise = client.hris.benefits.update('benefit_id', { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -71,26 +64,17 @@ describe('resource benefits', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('update: request options instead of params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.benefits.update('benefit_id', { path: '/_stainless_unknown_path' }), - ).rejects.toThrow(Finch.NotFoundError); - }); - - test('update: request options and params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.benefits.update( - 'benefit_id', - { description: 'description' }, - { path: '/_stainless_unknown_path' }, - ), - ).rejects.toThrow(Finch.NotFoundError); + test('update: required and optional params', async () => { + const response = await client.hris.benefits.update('benefit_id', { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + description: 'description', + }); }); - test('list', async () => { - const responsePromise = client.hris.benefits.list(); + test('list: only required params', async () => { + const responsePromise = client.hris.benefits.list({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -100,15 +84,16 @@ describe('resource benefits', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('list: request options instead of params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect(client.hris.benefits.list({ path: '/_stainless_unknown_path' })).rejects.toThrow( - Finch.NotFoundError, - ); + test('list: required and optional params', async () => { + const response = await client.hris.benefits.list({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); }); - test('listSupportedBenefits', async () => { - const responsePromise = client.hris.benefits.listSupportedBenefits(); + test('listSupportedBenefits: only required params', async () => { + const responsePromise = client.hris.benefits.listSupportedBenefits({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -118,10 +103,9 @@ describe('resource benefits', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('listSupportedBenefits: request options instead of params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.benefits.listSupportedBenefits({ path: '/_stainless_unknown_path' }), - ).rejects.toThrow(Finch.NotFoundError); + test('listSupportedBenefits: required and optional params', async () => { + const response = await client.hris.benefits.listSupportedBenefits({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); }); }); diff --git a/tests/api-resources/hris/benefits/individuals.test.ts b/tests/api-resources/hris/benefits/individuals.test.ts index a3c4f0ec3..844676be9 100644 --- a/tests/api-resources/hris/benefits/individuals.test.ts +++ b/tests/api-resources/hris/benefits/individuals.test.ts @@ -9,8 +9,10 @@ const client = new Finch({ }); describe('resource individuals', () => { - test('enrollMany', async () => { - const responsePromise = client.hris.benefits.individuals.enrollMany('benefit_id'); + test('enrollMany: only required params', async () => { + const responsePromise = client.hris.benefits.individuals.enrollMany('benefit_id', { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -20,38 +22,29 @@ describe('resource individuals', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('enrollMany: request options instead of params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.benefits.individuals.enrollMany('benefit_id', { path: '/_stainless_unknown_path' }), - ).rejects.toThrow(Finch.NotFoundError); - }); - - test('enrollMany: request options and params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.benefits.individuals.enrollMany( - 'benefit_id', - [ - { - configuration: { - annual_contribution_limit: 'individual', - annual_maximum: null, - catch_up: true, - company_contribution: { amount: 0, tiers: [{ match: 0, threshold: 0 }], type: 'fixed' }, - effective_date: '2019-12-27', - employee_deduction: { amount: 10000, type: 'fixed' }, - }, - individual_id: 'd02a6346-1f08-4312-a064-49ff3cafaa7a', + test('enrollMany: required and optional params', async () => { + const response = await client.hris.benefits.individuals.enrollMany('benefit_id', { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + individuals: [ + { + configuration: { + annual_contribution_limit: 'individual', + annual_maximum: null, + catch_up: true, + company_contribution: { amount: 0, tiers: [{ match: 0, threshold: 0 }], type: 'fixed' }, + effective_date: '2019-12-27', + employee_deduction: { amount: 10000, type: 'fixed' }, }, - ], - { path: '/_stainless_unknown_path' }, - ), - ).rejects.toThrow(Finch.NotFoundError); + individual_id: 'd02a6346-1f08-4312-a064-49ff3cafaa7a', + }, + ], + }); }); - test('enrolledIds', async () => { - const responsePromise = client.hris.benefits.individuals.enrolledIds('benefit_id'); + test('enrolledIds: only required params', async () => { + const responsePromise = client.hris.benefits.individuals.enrolledIds('benefit_id', { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -61,15 +54,16 @@ describe('resource individuals', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('enrolledIds: request options instead of params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.benefits.individuals.enrolledIds('benefit_id', { path: '/_stainless_unknown_path' }), - ).rejects.toThrow(Finch.NotFoundError); + test('enrolledIds: required and optional params', async () => { + const response = await client.hris.benefits.individuals.enrolledIds('benefit_id', { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); }); - test('retrieveManyBenefits', async () => { - const responsePromise = client.hris.benefits.individuals.retrieveManyBenefits('benefit_id'); + test('retrieveManyBenefits: only required params', async () => { + const responsePromise = client.hris.benefits.individuals.retrieveManyBenefits('benefit_id', { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -79,28 +73,17 @@ describe('resource individuals', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('retrieveManyBenefits: request options instead of params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.benefits.individuals.retrieveManyBenefits('benefit_id', { - path: '/_stainless_unknown_path', - }), - ).rejects.toThrow(Finch.NotFoundError); - }); - - test('retrieveManyBenefits: request options and params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.benefits.individuals.retrieveManyBenefits( - 'benefit_id', - { individual_ids: 'd675d2b7-6d7b-41a8-b2d3-001eb3fb88f6,d02a6346-1f08-4312-a064-49ff3cafaa7a' }, - { path: '/_stainless_unknown_path' }, - ), - ).rejects.toThrow(Finch.NotFoundError); + test('retrieveManyBenefits: required and optional params', async () => { + const response = await client.hris.benefits.individuals.retrieveManyBenefits('benefit_id', { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + individual_ids: 'd675d2b7-6d7b-41a8-b2d3-001eb3fb88f6,d02a6346-1f08-4312-a064-49ff3cafaa7a', + }); }); - test('unenrollMany', async () => { - const responsePromise = client.hris.benefits.individuals.unenrollMany('benefit_id'); + test('unenrollMany: only required params', async () => { + const responsePromise = client.hris.benefits.individuals.unenrollMany('benefit_id', { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -110,21 +93,10 @@ describe('resource individuals', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('unenrollMany: request options instead of params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.benefits.individuals.unenrollMany('benefit_id', { path: '/_stainless_unknown_path' }), - ).rejects.toThrow(Finch.NotFoundError); - }); - - test('unenrollMany: request options and params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.benefits.individuals.unenrollMany( - 'benefit_id', - { individual_ids: ['string'] }, - { path: '/_stainless_unknown_path' }, - ), - ).rejects.toThrow(Finch.NotFoundError); + test('unenrollMany: required and optional params', async () => { + const response = await client.hris.benefits.individuals.unenrollMany('benefit_id', { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + individual_ids: ['string'], + }); }); }); diff --git a/tests/api-resources/hris/company/company.test.ts b/tests/api-resources/hris/company/company.test.ts index 873c0d732..e14b0dbf9 100644 --- a/tests/api-resources/hris/company/company.test.ts +++ b/tests/api-resources/hris/company/company.test.ts @@ -9,8 +9,10 @@ const client = new Finch({ }); describe('resource company', () => { - test('retrieve', async () => { - const responsePromise = client.hris.company.retrieve(); + test('retrieve: only required params', async () => { + const responsePromise = client.hris.company.retrieve({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -20,10 +22,9 @@ describe('resource company', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('retrieve: request options instead of params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect(client.hris.company.retrieve({ path: '/_stainless_unknown_path' })).rejects.toThrow( - Finch.NotFoundError, - ); + test('retrieve: required and optional params', async () => { + const response = await client.hris.company.retrieve({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); }); }); diff --git a/tests/api-resources/hris/company/pay-statement-item/pay-statement-item.test.ts b/tests/api-resources/hris/company/pay-statement-item/pay-statement-item.test.ts index cf15959a9..c2f2a801a 100644 --- a/tests/api-resources/hris/company/pay-statement-item/pay-statement-item.test.ts +++ b/tests/api-resources/hris/company/pay-statement-item/pay-statement-item.test.ts @@ -9,8 +9,10 @@ const client = new Finch({ }); describe('resource payStatementItem', () => { - test('list', async () => { - const responsePromise = client.hris.company.payStatementItem.list(); + test('list: only required params', async () => { + const responsePromise = client.hris.company.payStatementItem.list({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -20,26 +22,14 @@ describe('resource payStatementItem', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('list: request options instead of params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.company.payStatementItem.list({ path: '/_stainless_unknown_path' }), - ).rejects.toThrow(Finch.NotFoundError); - }); - - test('list: request options and params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.company.payStatementItem.list( - { - categories: ['earnings'], - end_date: '2024-07-01', - name: 'name', - start_date: '2024-01-01', - type: 'base_compensation', - }, - { path: '/_stainless_unknown_path' }, - ), - ).rejects.toThrow(Finch.NotFoundError); + test('list: required and optional params', async () => { + const response = await client.hris.company.payStatementItem.list({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + categories: ['earnings'], + end_date: '2024-07-01', + name: 'name', + start_date: '2024-01-01', + type: 'base_compensation', + }); }); }); diff --git a/tests/api-resources/hris/company/pay-statement-item/rules.test.ts b/tests/api-resources/hris/company/pay-statement-item/rules.test.ts index 9caa3cbfb..26b9899ff 100644 --- a/tests/api-resources/hris/company/pay-statement-item/rules.test.ts +++ b/tests/api-resources/hris/company/pay-statement-item/rules.test.ts @@ -9,8 +9,10 @@ const client = new Finch({ }); describe('resource rules', () => { - test('create', async () => { - const responsePromise = client.hris.company.payStatementItem.rules.create(); + test('create: only required params', async () => { + const responsePromise = client.hris.company.payStatementItem.rules.create({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -20,31 +22,21 @@ describe('resource rules', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('create: request options instead of params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.company.payStatementItem.rules.create({ path: '/_stainless_unknown_path' }), - ).rejects.toThrow(Finch.NotFoundError); + test('create: required and optional params', async () => { + const response = await client.hris.company.payStatementItem.rules.create({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + attributes: { metadata: { foo: 'bar' } }, + conditions: [{ field: 'field', operator: 'equals', value: 'value' }], + effective_end_date: 'effective_end_date', + effective_start_date: 'effective_start_date', + entity_type: 'pay_statement_item', + }); }); - test('create: request options and params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.company.payStatementItem.rules.create( - { - attributes: { metadata: { foo: 'bar' } }, - conditions: [{ field: 'field', operator: 'equals', value: 'value' }], - effective_end_date: 'effective_end_date', - effective_start_date: 'effective_start_date', - entity_type: 'pay_statement_item', - }, - { path: '/_stainless_unknown_path' }, - ), - ).rejects.toThrow(Finch.NotFoundError); - }); - - test('update', async () => { - const responsePromise = client.hris.company.payStatementItem.rules.update('rule_id'); + test('update: only required params', async () => { + const responsePromise = client.hris.company.payStatementItem.rules.update('rule_id', { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -54,26 +46,17 @@ describe('resource rules', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('update: request options instead of params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.company.payStatementItem.rules.update('rule_id', { path: '/_stainless_unknown_path' }), - ).rejects.toThrow(Finch.NotFoundError); - }); - - test('update: request options and params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.company.payStatementItem.rules.update( - 'rule_id', - { optionalProperty: {} }, - { path: '/_stainless_unknown_path' }, - ), - ).rejects.toThrow(Finch.NotFoundError); + test('update: required and optional params', async () => { + const response = await client.hris.company.payStatementItem.rules.update('rule_id', { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + optionalProperty: {}, + }); }); - test('list', async () => { - const responsePromise = client.hris.company.payStatementItem.rules.list(); + test('list: only required params', async () => { + const responsePromise = client.hris.company.payStatementItem.rules.list({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -83,15 +66,16 @@ describe('resource rules', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('list: request options instead of params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.company.payStatementItem.rules.list({ path: '/_stainless_unknown_path' }), - ).rejects.toThrow(Finch.NotFoundError); + test('list: required and optional params', async () => { + const response = await client.hris.company.payStatementItem.rules.list({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); }); - test('delete', async () => { - const responsePromise = client.hris.company.payStatementItem.rules.delete('rule_id'); + test('delete: only required params', async () => { + const responsePromise = client.hris.company.payStatementItem.rules.delete('rule_id', { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -101,10 +85,9 @@ describe('resource rules', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('delete: request options instead of params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.company.payStatementItem.rules.delete('rule_id', { path: '/_stainless_unknown_path' }), - ).rejects.toThrow(Finch.NotFoundError); + test('delete: required and optional params', async () => { + const response = await client.hris.company.payStatementItem.rules.delete('rule_id', { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); }); }); diff --git a/tests/api-resources/hris/directory.test.ts b/tests/api-resources/hris/directory.test.ts index 94a9bfe89..9d31dab4b 100644 --- a/tests/api-resources/hris/directory.test.ts +++ b/tests/api-resources/hris/directory.test.ts @@ -9,8 +9,10 @@ const client = new Finch({ }); describe('resource directory', () => { - test('list', async () => { - const responsePromise = client.hris.directory.list(); + test('list: only required params', async () => { + const responsePromise = client.hris.directory.list({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -20,22 +22,18 @@ describe('resource directory', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('list: request options instead of params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect(client.hris.directory.list({ path: '/_stainless_unknown_path' })).rejects.toThrow( - Finch.NotFoundError, - ); + test('list: required and optional params', async () => { + const response = await client.hris.directory.list({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + limit: 0, + offset: 0, + }); }); - test('list: request options and params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.directory.list({ limit: 0, offset: 0 }, { path: '/_stainless_unknown_path' }), - ).rejects.toThrow(Finch.NotFoundError); - }); - - test('listIndividuals', async () => { - const responsePromise = client.hris.directory.listIndividuals(); + test('listIndividuals: only required params', async () => { + const responsePromise = client.hris.directory.listIndividuals({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -45,17 +43,11 @@ describe('resource directory', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('listIndividuals: request options instead of params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect(client.hris.directory.listIndividuals({ path: '/_stainless_unknown_path' })).rejects.toThrow( - Finch.NotFoundError, - ); - }); - - test('listIndividuals: request options and params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.directory.listIndividuals({ limit: 0, offset: 0 }, { path: '/_stainless_unknown_path' }), - ).rejects.toThrow(Finch.NotFoundError); + test('listIndividuals: required and optional params', async () => { + const response = await client.hris.directory.listIndividuals({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + limit: 0, + offset: 0, + }); }); }); diff --git a/tests/api-resources/hris/documents.test.ts b/tests/api-resources/hris/documents.test.ts index fb2db168f..784e41edb 100644 --- a/tests/api-resources/hris/documents.test.ts +++ b/tests/api-resources/hris/documents.test.ts @@ -9,8 +9,10 @@ const client = new Finch({ }); describe('resource documents', () => { - test('list', async () => { - const responsePromise = client.hris.documents.list(); + test('list: only required params', async () => { + const responsePromise = client.hris.documents.list({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -20,25 +22,20 @@ describe('resource documents', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('list: request options instead of params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect(client.hris.documents.list({ path: '/_stainless_unknown_path' })).rejects.toThrow( - Finch.NotFoundError, - ); + test('list: required and optional params', async () => { + const response = await client.hris.documents.list({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + individual_ids: ['string'], + limit: 0, + offset: 0, + types: ['w4_2020'], + }); }); - test('list: request options and params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.documents.list( - { individual_ids: ['string'], limit: 0, offset: 0, types: ['w4_2020'] }, - { path: '/_stainless_unknown_path' }, - ), - ).rejects.toThrow(Finch.NotFoundError); - }); - - test('retreive', async () => { - const responsePromise = client.hris.documents.retreive('document_id'); + test('retreive: only required params', async () => { + const responsePromise = client.hris.documents.retreive('document_id', { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -48,10 +45,9 @@ describe('resource documents', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('retreive: request options instead of params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.documents.retreive('document_id', { path: '/_stainless_unknown_path' }), - ).rejects.toThrow(Finch.NotFoundError); + test('retreive: required and optional params', async () => { + const response = await client.hris.documents.retreive('document_id', { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); }); }); diff --git a/tests/api-resources/hris/employments.test.ts b/tests/api-resources/hris/employments.test.ts index 30b517207..29b513bdf 100644 --- a/tests/api-resources/hris/employments.test.ts +++ b/tests/api-resources/hris/employments.test.ts @@ -11,6 +11,7 @@ const client = new Finch({ describe('resource employments', () => { test('retrieveMany: only required params', async () => { const responsePromise = client.hris.employments.retrieveMany({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], requests: [{ individual_id: 'individual_id' }], }); const rawResponse = await responsePromise.asResponse(); @@ -24,6 +25,7 @@ describe('resource employments', () => { test('retrieveMany: required and optional params', async () => { const response = await client.hris.employments.retrieveMany({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], requests: [{ individual_id: 'individual_id' }], }); }); diff --git a/tests/api-resources/hris/individuals.test.ts b/tests/api-resources/hris/individuals.test.ts index 8adf1d9de..1dee8d8c1 100644 --- a/tests/api-resources/hris/individuals.test.ts +++ b/tests/api-resources/hris/individuals.test.ts @@ -9,8 +9,10 @@ const client = new Finch({ }); describe('resource individuals', () => { - test('retrieveMany', async () => { - const responsePromise = client.hris.individuals.retrieveMany(); + test('retrieveMany: only required params', async () => { + const responsePromise = client.hris.individuals.retrieveMany({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -20,20 +22,11 @@ describe('resource individuals', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('retrieveMany: request options instead of params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect(client.hris.individuals.retrieveMany({ path: '/_stainless_unknown_path' })).rejects.toThrow( - Finch.NotFoundError, - ); - }); - - test('retrieveMany: request options and params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.hris.individuals.retrieveMany( - { options: { include: ['string'] }, requests: [{ individual_id: 'individual_id' }] }, - { path: '/_stainless_unknown_path' }, - ), - ).rejects.toThrow(Finch.NotFoundError); + test('retrieveMany: required and optional params', async () => { + const response = await client.hris.individuals.retrieveMany({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + options: { include: ['string'] }, + requests: [{ individual_id: 'individual_id' }], + }); }); }); diff --git a/tests/api-resources/hris/pay-statements.test.ts b/tests/api-resources/hris/pay-statements.test.ts index 55daa48e8..ad5b4cd85 100644 --- a/tests/api-resources/hris/pay-statements.test.ts +++ b/tests/api-resources/hris/pay-statements.test.ts @@ -11,6 +11,7 @@ const client = new Finch({ describe('resource payStatements', () => { test('retrieveMany: only required params', async () => { const responsePromise = client.hris.payStatements.retrieveMany({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], requests: [{ payment_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e' }], }); const rawResponse = await responsePromise.asResponse(); @@ -24,6 +25,7 @@ describe('resource payStatements', () => { test('retrieveMany: required and optional params', async () => { const response = await client.hris.payStatements.retrieveMany({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], requests: [{ payment_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', limit: 50, offset: 0 }], }); }); diff --git a/tests/api-resources/hris/payments.test.ts b/tests/api-resources/hris/payments.test.ts index 7e0fea0b4..3d271d824 100644 --- a/tests/api-resources/hris/payments.test.ts +++ b/tests/api-resources/hris/payments.test.ts @@ -10,7 +10,11 @@ const client = new Finch({ describe('resource payments', () => { test('list: only required params', async () => { - const responsePromise = client.hris.payments.list({ end_date: '2021-01-01', start_date: '2021-01-01' }); + const responsePromise = client.hris.payments.list({ + end_date: '2021-01-01', + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + start_date: '2021-01-01', + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -21,6 +25,10 @@ describe('resource payments', () => { }); test('list: required and optional params', async () => { - const response = await client.hris.payments.list({ end_date: '2021-01-01', start_date: '2021-01-01' }); + const response = await client.hris.payments.list({ + end_date: '2021-01-01', + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + start_date: '2021-01-01', + }); }); }); diff --git a/tests/api-resources/payroll/pay-groups.test.ts b/tests/api-resources/payroll/pay-groups.test.ts index a1788256e..74769782e 100644 --- a/tests/api-resources/payroll/pay-groups.test.ts +++ b/tests/api-resources/payroll/pay-groups.test.ts @@ -9,8 +9,10 @@ const client = new Finch({ }); describe('resource payGroups', () => { - test('retrieve', async () => { - const responsePromise = client.payroll.payGroups.retrieve('pay_group_id'); + test('retrieve: only required params', async () => { + const responsePromise = client.payroll.payGroups.retrieve('pay_group_id', { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -20,15 +22,16 @@ describe('resource payGroups', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('retrieve: request options instead of params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.payroll.payGroups.retrieve('pay_group_id', { path: '/_stainless_unknown_path' }), - ).rejects.toThrow(Finch.NotFoundError); + test('retrieve: required and optional params', async () => { + const response = await client.payroll.payGroups.retrieve('pay_group_id', { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); }); - test('list', async () => { - const responsePromise = client.payroll.payGroups.list(); + test('list: only required params', async () => { + const responsePromise = client.payroll.payGroups.list({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -38,20 +41,11 @@ describe('resource payGroups', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('list: request options instead of params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect(client.payroll.payGroups.list({ path: '/_stainless_unknown_path' })).rejects.toThrow( - Finch.NotFoundError, - ); - }); - - test('list: request options and params are passed correctly', async () => { - // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error - await expect( - client.payroll.payGroups.list( - { individual_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', pay_frequencies: ['string'] }, - { path: '/_stainless_unknown_path' }, - ), - ).rejects.toThrow(Finch.NotFoundError); + test('list: required and optional params', async () => { + const response = await client.payroll.payGroups.list({ + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + individual_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', + pay_frequencies: ['string'], + }); }); }); From 4d5703128cd8a626dec68fe4ffc34980579bcd6f Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 27 Oct 2025 20:00:47 +0000 Subject: [PATCH 50/51] feat(api): api update --- .stats.yml | 4 +- README.md | 57 +++----- .../hris/benefits/create-hris-benefits.ts | 2 +- .../enroll-many-benefits-hris-individuals.ts | 2 +- .../enrolled-ids-benefits-hris-individuals.ts | 2 +- ...many-benefits-benefits-hris-individuals.ts | 2 +- ...unenroll-many-benefits-hris-individuals.ts | 2 +- .../tools/hris/benefits/list-hris-benefits.ts | 2 +- .../list-supported-benefits-hris-benefits.ts | 2 +- .../hris/benefits/retrieve-hris-benefits.ts | 2 +- .../hris/benefits/update-hris-benefits.ts | 2 +- .../list-company-hris-pay-statement-item.ts | 16 +- ...e-pay-statement-item-company-hris-rules.ts | 2 +- ...e-pay-statement-item-company-hris-rules.ts | 2 +- ...t-pay-statement-item-company-hris-rules.ts | 2 +- ...e-pay-statement-item-company-hris-rules.ts | 2 +- .../hris/company/retrieve-hris-company.ts | 2 +- .../hris/directory/list-hris-directory.ts | 2 +- .../hris/documents/list-hris-documents.ts | 2 +- .../hris/documents/retreive-hris-documents.ts | 2 +- .../retrieve-many-hris-employments.ts | 16 +- .../retrieve-many-hris-individuals.ts | 2 +- .../retrieve-many-hris-pay-statements.ts | 16 +- .../tools/hris/payments/list-hris-payments.ts | 12 +- .../pay-groups/list-payroll-pay-groups.ts | 2 +- .../pay-groups/retrieve-payroll-pay-groups.ts | 2 +- src/resources/hris/benefits/benefits.ts | 82 ++++++++--- src/resources/hris/benefits/individuals.ts | 75 +++++++--- src/resources/hris/company/company.ts | 17 ++- .../pay-statement-item/pay-statement-item.ts | 27 ++-- .../hris/company/pay-statement-item/rules.ts | 65 ++++++--- src/resources/hris/directory.ts | 19 ++- src/resources/hris/documents.ts | 31 +++- src/resources/hris/employments.ts | 13 +- src/resources/hris/individuals.ts | 17 ++- src/resources/hris/pay-statements.ts | 9 +- src/resources/hris/payments.ts | 11 +- src/resources/payroll/pay-groups.ts | 28 +++- .../hris/benefits/benefits.test.ts | 138 ++++++++++++------ .../hris/benefits/individuals.test.ts | 135 +++++++++++------ .../hris/company/company.test.ts | 25 +++- .../pay-statement-item.test.ts | 37 +++-- .../company/pay-statement-item/rules.test.ts | 115 ++++++++++----- tests/api-resources/hris/directory.test.ts | 54 ++++--- tests/api-resources/hris/documents.test.ts | 61 +++++--- tests/api-resources/hris/employments.test.ts | 3 +- tests/api-resources/hris/individuals.test.ts | 31 ++-- .../api-resources/hris/pay-statements.test.ts | 3 +- tests/api-resources/hris/payments.test.ts | 8 +- .../api-resources/payroll/pay-groups.test.ts | 57 +++++--- 50 files changed, 790 insertions(+), 432 deletions(-) diff --git a/.stats.yml b/.stats.yml index d84cf0e8c..ee6074218 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 46 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-03a89ccdf10add981e714ad74c145cd3a2408bd0223108bbfe01cef4256ef7ed.yml -openapi_spec_hash: 4179c69ca2f55a9fcfab41710a2f452c +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-0105d239fcaf84750c886dfa6c2cfbf2b2087f89a48f8827c4cbe28479ebfb13.yml +openapi_spec_hash: 34895c3d3c137fb9f5a019ac5370afbb config_hash: 6d3585c0032e08d723d077d660fc8448 diff --git a/README.md b/README.md index 2b34598a8..dc8e3c7ab 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ const client = new Finch({ accessToken: 'My Access Token', }); -const page = await client.hris.directory.list({ entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }); +const page = await client.hris.directory.list(); const individualInDirectory = page.individuals[0]; console.log(individualInDirectory.id); @@ -44,8 +44,7 @@ const client = new Finch({ accessToken: 'My Access Token', }); -const params: Finch.HRIS.DirectoryListParams = { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }; -const [individualInDirectory]: [Finch.HRIS.IndividualInDirectory] = await client.hris.directory.list(params); +const [individualInDirectory]: [Finch.HRIS.IndividualInDirectory] = await client.hris.directory.list(); ``` Documentation for each method, request param, and response field are available in docstrings and will appear on hover in most modern editors. @@ -58,17 +57,15 @@ a subclass of `APIError` will be thrown: ```ts -const company = await client.hris.company - .retrieve({ entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }) - .catch(async (err) => { - if (err instanceof Finch.APIError) { - console.log(err.status); // 400 - console.log(err.name); // BadRequestError - console.log(err.headers); // {server: 'nginx', ...} - } else { - throw err; - } - }); +const company = await client.hris.company.retrieve().catch(async (err) => { + if (err instanceof Finch.APIError) { + console.log(err.status); // 400 + console.log(err.name); // BadRequestError + console.log(err.headers); // {server: 'nginx', ...} + } else { + throw err; + } +}); ``` Error codes are as follows: @@ -100,7 +97,7 @@ const client = new Finch({ }); // Or, configure per-request: -await client.hris.directory.list({ entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, { +await client.hris.directory.list({ maxRetries: 5, }); ``` @@ -117,7 +114,7 @@ const client = new Finch({ }); // Override per-request: -await client.hris.directory.list({ entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, { +await client.hris.directory.list({ timeout: 5 * 1000, }); ``` @@ -135,9 +132,7 @@ You can use the `for await … of` syntax to iterate through items across all pa async function fetchAllIndividualInDirectories(params) { const allIndividualInDirectories = []; // Automatically fetches more pages as needed. - for await (const individualInDirectory of client.hris.directory.list({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - })) { + for await (const individualInDirectory of client.hris.directory.list()) { allIndividualInDirectories.push(individualInDirectory); } return allIndividualInDirectories; @@ -147,7 +142,7 @@ async function fetchAllIndividualInDirectories(params) { Alternatively, you can request a single page at a time: ```ts -let page = await client.hris.directory.list({ entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }); +let page = await client.hris.directory.list(); for (const individualInDirectory of page.individuals) { console.log(individualInDirectory); } @@ -172,10 +167,7 @@ import Finch from '@tryfinch/finch-api'; const client = new Finch(); -const page = await client.hris.directory.list( - { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, - { headers: { 'Finch-API-Version': 'My-Custom-Value' } }, -); +const page = await client.hris.directory.list({ headers: { 'Finch-API-Version': 'My-Custom-Value' } }); const individualInDirectory = page.individuals[0]; ``` @@ -220,15 +212,11 @@ You can also use the `.withResponse()` method to get the raw `Response` along wi ```ts const client = new Finch(); -const response = await client.hris.directory - .list({ entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }) - .asResponse(); +const response = await client.hris.directory.list().asResponse(); console.log(response.headers.get('X-My-Header')); console.log(response.statusText); // access the underlying Response object -const { data: page, response: raw } = await client.hris.directory - .list({ entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }) - .withResponse(); +const { data: page, response: raw } = await client.hris.directory.list().withResponse(); console.log(raw.headers.get('X-My-Header')); for await (const individualInDirectory of page) { console.log(individualInDirectory.id); @@ -336,12 +324,9 @@ const client = new Finch({ }); // Override per-request: -await client.hris.directory.list( - { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, - { - httpAgent: new http.Agent({ keepAlive: false }), - }, -); +await client.hris.directory.list({ + httpAgent: new http.Agent({ keepAlive: false }), +}); ``` ## Semantic versioning diff --git a/packages/mcp-server/src/tools/hris/benefits/create-hris-benefits.ts b/packages/mcp-server/src/tools/hris/benefits/create-hris-benefits.ts index 3df5c3309..dd236291a 100644 --- a/packages/mcp-server/src/tools/hris/benefits/create-hris-benefits.ts +++ b/packages/mcp-server/src/tools/hris/benefits/create-hris-benefits.ts @@ -75,7 +75,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['entity_ids'], + required: [], $defs: { benefit_frequency: { type: 'string', diff --git a/packages/mcp-server/src/tools/hris/benefits/individuals/enroll-many-benefits-hris-individuals.ts b/packages/mcp-server/src/tools/hris/benefits/individuals/enroll-many-benefits-hris-individuals.ts index e759b5e23..0df297acd 100644 --- a/packages/mcp-server/src/tools/hris/benefits/individuals/enroll-many-benefits-hris-individuals.ts +++ b/packages/mcp-server/src/tools/hris/benefits/individuals/enroll-many-benefits-hris-individuals.ts @@ -124,7 +124,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['benefit_id', 'entity_ids'], + required: ['benefit_id'], }, annotations: {}, }; diff --git a/packages/mcp-server/src/tools/hris/benefits/individuals/enrolled-ids-benefits-hris-individuals.ts b/packages/mcp-server/src/tools/hris/benefits/individuals/enrolled-ids-benefits-hris-individuals.ts index cc4b6b7e7..86a7f2bb9 100644 --- a/packages/mcp-server/src/tools/hris/benefits/individuals/enrolled-ids-benefits-hris-individuals.ts +++ b/packages/mcp-server/src/tools/hris/benefits/individuals/enrolled-ids-benefits-hris-individuals.ts @@ -39,7 +39,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['benefit_id', 'entity_ids'], + required: ['benefit_id'], }, annotations: { readOnlyHint: true, diff --git a/packages/mcp-server/src/tools/hris/benefits/individuals/retrieve-many-benefits-benefits-hris-individuals.ts b/packages/mcp-server/src/tools/hris/benefits/individuals/retrieve-many-benefits-benefits-hris-individuals.ts index 3225e9609..4613572da 100644 --- a/packages/mcp-server/src/tools/hris/benefits/individuals/retrieve-many-benefits-benefits-hris-individuals.ts +++ b/packages/mcp-server/src/tools/hris/benefits/individuals/retrieve-many-benefits-benefits-hris-individuals.ts @@ -44,7 +44,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['benefit_id', 'entity_ids'], + required: ['benefit_id'], }, annotations: { readOnlyHint: true, diff --git a/packages/mcp-server/src/tools/hris/benefits/individuals/unenroll-many-benefits-hris-individuals.ts b/packages/mcp-server/src/tools/hris/benefits/individuals/unenroll-many-benefits-hris-individuals.ts index c9437b2bf..6efef5787 100644 --- a/packages/mcp-server/src/tools/hris/benefits/individuals/unenroll-many-benefits-hris-individuals.ts +++ b/packages/mcp-server/src/tools/hris/benefits/individuals/unenroll-many-benefits-hris-individuals.ts @@ -46,7 +46,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['benefit_id', 'entity_ids'], + required: ['benefit_id'], }, annotations: { idempotentHint: true, diff --git a/packages/mcp-server/src/tools/hris/benefits/list-hris-benefits.ts b/packages/mcp-server/src/tools/hris/benefits/list-hris-benefits.ts index e9301e886..a2524e0f1 100644 --- a/packages/mcp-server/src/tools/hris/benefits/list-hris-benefits.ts +++ b/packages/mcp-server/src/tools/hris/benefits/list-hris-benefits.ts @@ -36,7 +36,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['entity_ids'], + required: [], }, annotations: { readOnlyHint: true, diff --git a/packages/mcp-server/src/tools/hris/benefits/list-supported-benefits-hris-benefits.ts b/packages/mcp-server/src/tools/hris/benefits/list-supported-benefits-hris-benefits.ts index 85707c52b..323e8f5fc 100644 --- a/packages/mcp-server/src/tools/hris/benefits/list-supported-benefits-hris-benefits.ts +++ b/packages/mcp-server/src/tools/hris/benefits/list-supported-benefits-hris-benefits.ts @@ -36,7 +36,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['entity_ids'], + required: [], }, annotations: { readOnlyHint: true, diff --git a/packages/mcp-server/src/tools/hris/benefits/retrieve-hris-benefits.ts b/packages/mcp-server/src/tools/hris/benefits/retrieve-hris-benefits.ts index 20077b44a..3ba7ef8c8 100644 --- a/packages/mcp-server/src/tools/hris/benefits/retrieve-hris-benefits.ts +++ b/packages/mcp-server/src/tools/hris/benefits/retrieve-hris-benefits.ts @@ -39,7 +39,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['benefit_id', 'entity_ids'], + required: ['benefit_id'], }, annotations: { readOnlyHint: true, diff --git a/packages/mcp-server/src/tools/hris/benefits/update-hris-benefits.ts b/packages/mcp-server/src/tools/hris/benefits/update-hris-benefits.ts index c117dd884..6175fc5bf 100644 --- a/packages/mcp-server/src/tools/hris/benefits/update-hris-benefits.ts +++ b/packages/mcp-server/src/tools/hris/benefits/update-hris-benefits.ts @@ -43,7 +43,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['benefit_id', 'entity_ids'], + required: ['benefit_id'], }, annotations: {}, }; diff --git a/packages/mcp-server/src/tools/hris/company/pay-statement-item/list-company-hris-pay-statement-item.ts b/packages/mcp-server/src/tools/hris/company/pay-statement-item/list-company-hris-pay-statement-item.ts index d3b867f1a..00fee1e46 100644 --- a/packages/mcp-server/src/tools/hris/company/pay-statement-item/list-company-hris-pay-statement-item.ts +++ b/packages/mcp-server/src/tools/hris/company/pay-statement-item/list-company-hris-pay-statement-item.ts @@ -22,13 +22,6 @@ export const tool: Tool = { inputSchema: { type: 'object', properties: { - entity_ids: { - type: 'array', - description: "The entity IDs to specify which entities' data to access.", - items: { - type: 'string', - }, - }, categories: { type: 'array', description: @@ -44,6 +37,13 @@ export const tool: Tool = { 'The end date to retrieve pay statement items by via their last seen pay date in `YYYY-MM-DD` format.', format: 'date', }, + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, name: { type: 'string', description: 'Case-insensitive partial match search by pay statement item name.', @@ -65,7 +65,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['entity_ids'], + required: [], }, annotations: { readOnlyHint: true, diff --git a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/create-pay-statement-item-company-hris-rules.ts b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/create-pay-statement-item-company-hris-rules.ts index 2bd53832e..c4e51c454 100644 --- a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/create-pay-statement-item-company-hris-rules.ts +++ b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/create-pay-statement-item-company-hris-rules.ts @@ -84,7 +84,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['entity_ids'], + required: [], }, annotations: {}, }; diff --git a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/delete-pay-statement-item-company-hris-rules.ts b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/delete-pay-statement-item-company-hris-rules.ts index 95db8e7d5..1211f96a1 100644 --- a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/delete-pay-statement-item-company-hris-rules.ts +++ b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/delete-pay-statement-item-company-hris-rules.ts @@ -39,7 +39,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['rule_id', 'entity_ids'], + required: ['rule_id'], }, annotations: { idempotentHint: true, diff --git a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/list-pay-statement-item-company-hris-rules.ts b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/list-pay-statement-item-company-hris-rules.ts index e2f9ee4ec..24e345b5f 100644 --- a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/list-pay-statement-item-company-hris-rules.ts +++ b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/list-pay-statement-item-company-hris-rules.ts @@ -36,7 +36,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['entity_ids'], + required: [], }, annotations: { readOnlyHint: true, diff --git a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/update-pay-statement-item-company-hris-rules.ts b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/update-pay-statement-item-company-hris-rules.ts index 856ad86d0..80f2e66d4 100644 --- a/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/update-pay-statement-item-company-hris-rules.ts +++ b/packages/mcp-server/src/tools/hris/company/pay-statement-item/rules/update-pay-statement-item-company-hris-rules.ts @@ -43,7 +43,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['rule_id', 'entity_ids'], + required: ['rule_id'], }, annotations: { idempotentHint: true, diff --git a/packages/mcp-server/src/tools/hris/company/retrieve-hris-company.ts b/packages/mcp-server/src/tools/hris/company/retrieve-hris-company.ts index 25ea12ad0..234a6fc8a 100644 --- a/packages/mcp-server/src/tools/hris/company/retrieve-hris-company.ts +++ b/packages/mcp-server/src/tools/hris/company/retrieve-hris-company.ts @@ -36,7 +36,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['entity_ids'], + required: [], }, annotations: { readOnlyHint: true, diff --git a/packages/mcp-server/src/tools/hris/directory/list-hris-directory.ts b/packages/mcp-server/src/tools/hris/directory/list-hris-directory.ts index 86cd36d18..0c6ca02b3 100644 --- a/packages/mcp-server/src/tools/hris/directory/list-hris-directory.ts +++ b/packages/mcp-server/src/tools/hris/directory/list-hris-directory.ts @@ -44,7 +44,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['entity_ids'], + required: [], }, annotations: { readOnlyHint: true, diff --git a/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts b/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts index 0ceb1b6d1..edd287c36 100644 --- a/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts +++ b/packages/mcp-server/src/tools/hris/documents/list-hris-documents.ts @@ -60,7 +60,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['entity_ids'], + required: [], }, annotations: { readOnlyHint: true, diff --git a/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts b/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts index eccb1cf27..bfb0d1072 100644 --- a/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts +++ b/packages/mcp-server/src/tools/hris/documents/retreive-hris-documents.ts @@ -39,7 +39,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['document_id', 'entity_ids'], + required: ['document_id'], }, annotations: { readOnlyHint: true, diff --git a/packages/mcp-server/src/tools/hris/employments/retrieve-many-hris-employments.ts b/packages/mcp-server/src/tools/hris/employments/retrieve-many-hris-employments.ts index 36b2ea010..e562d8f7c 100644 --- a/packages/mcp-server/src/tools/hris/employments/retrieve-many-hris-employments.ts +++ b/packages/mcp-server/src/tools/hris/employments/retrieve-many-hris-employments.ts @@ -20,13 +20,6 @@ export const tool: Tool = { inputSchema: { type: 'object', properties: { - entity_ids: { - type: 'array', - description: "The entity IDs to specify which entities' data to access.", - items: { - type: 'string', - }, - }, requests: { type: 'array', description: 'The array of batch requests.', @@ -42,8 +35,15 @@ export const tool: Tool = { required: ['individual_id'], }, }, + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, }, - required: ['entity_ids', 'requests'], + required: ['requests'], }, annotations: {}, }; diff --git a/packages/mcp-server/src/tools/hris/individuals/retrieve-many-hris-individuals.ts b/packages/mcp-server/src/tools/hris/individuals/retrieve-many-hris-individuals.ts index b5f012441..c42ab6e0e 100644 --- a/packages/mcp-server/src/tools/hris/individuals/retrieve-many-hris-individuals.ts +++ b/packages/mcp-server/src/tools/hris/individuals/retrieve-many-hris-individuals.ts @@ -58,7 +58,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['entity_ids'], + required: [], }, annotations: {}, }; diff --git a/packages/mcp-server/src/tools/hris/pay-statements/retrieve-many-hris-pay-statements.ts b/packages/mcp-server/src/tools/hris/pay-statements/retrieve-many-hris-pay-statements.ts index 74bfa6215..d638c697a 100644 --- a/packages/mcp-server/src/tools/hris/pay-statements/retrieve-many-hris-pay-statements.ts +++ b/packages/mcp-server/src/tools/hris/pay-statements/retrieve-many-hris-pay-statements.ts @@ -21,13 +21,6 @@ export const tool: Tool = { inputSchema: { type: 'object', properties: { - entity_ids: { - type: 'array', - description: "The entity IDs to specify which entities' data to access.", - items: { - type: 'string', - }, - }, requests: { type: 'array', description: 'The array of batch requests.', @@ -50,8 +43,15 @@ export const tool: Tool = { required: ['payment_id'], }, }, + entity_ids: { + type: 'array', + description: "The entity IDs to specify which entities' data to access.", + items: { + type: 'string', + }, + }, }, - required: ['entity_ids', 'requests'], + required: ['requests'], }, annotations: {}, }; diff --git a/packages/mcp-server/src/tools/hris/payments/list-hris-payments.ts b/packages/mcp-server/src/tools/hris/payments/list-hris-payments.ts index 93a547596..4f4163fce 100644 --- a/packages/mcp-server/src/tools/hris/payments/list-hris-payments.ts +++ b/packages/mcp-server/src/tools/hris/payments/list-hris-payments.ts @@ -27,6 +27,11 @@ export const tool: Tool = { description: 'The end date to retrieve payments by a company (inclusive) in `YYYY-MM-DD` format.', format: 'date', }, + start_date: { + type: 'string', + description: 'The start date to retrieve payments by a company (inclusive) in `YYYY-MM-DD` format.', + format: 'date', + }, entity_ids: { type: 'array', description: "The entity IDs to specify which entities' data to access.", @@ -34,11 +39,6 @@ export const tool: Tool = { type: 'string', }, }, - start_date: { - type: 'string', - description: 'The start date to retrieve payments by a company (inclusive) in `YYYY-MM-DD` format.', - format: 'date', - }, jq_filter: { type: 'string', title: 'jq Filter', @@ -46,7 +46,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['end_date', 'entity_ids', 'start_date'], + required: ['end_date', 'start_date'], }, annotations: { readOnlyHint: true, diff --git a/packages/mcp-server/src/tools/payroll/pay-groups/list-payroll-pay-groups.ts b/packages/mcp-server/src/tools/payroll/pay-groups/list-payroll-pay-groups.ts index 49d38953d..e76086bc6 100644 --- a/packages/mcp-server/src/tools/payroll/pay-groups/list-payroll-pay-groups.ts +++ b/packages/mcp-server/src/tools/payroll/pay-groups/list-payroll-pay-groups.ts @@ -45,7 +45,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['entity_ids'], + required: [], }, annotations: { readOnlyHint: true, diff --git a/packages/mcp-server/src/tools/payroll/pay-groups/retrieve-payroll-pay-groups.ts b/packages/mcp-server/src/tools/payroll/pay-groups/retrieve-payroll-pay-groups.ts index 974ee3ba8..be62e8bff 100644 --- a/packages/mcp-server/src/tools/payroll/pay-groups/retrieve-payroll-pay-groups.ts +++ b/packages/mcp-server/src/tools/payroll/pay-groups/retrieve-payroll-pay-groups.ts @@ -39,7 +39,7 @@ export const tool: Tool = { 'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).', }, }, - required: ['pay_group_id', 'entity_ids'], + required: ['pay_group_id'], }, annotations: { readOnlyHint: true, diff --git a/src/resources/hris/benefits/benefits.ts b/src/resources/hris/benefits/benefits.ts index cbc9154ee..3024393ba 100644 --- a/src/resources/hris/benefits/benefits.ts +++ b/src/resources/hris/benefits/benefits.ts @@ -1,6 +1,7 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../../resource'; +import { isRequestOptions } from '../../../core'; import * as Core from '../../../core'; import * as Shared from '../../shared'; import * as IndividualsAPI from './individuals'; @@ -28,15 +29,21 @@ export class Benefits extends APIResource { * @example * ```ts * const createCompanyBenefitsResponse = - * await client.hris.benefits.create({ - * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - * }); + * await client.hris.benefits.create(); * ``` */ create( - params: BenefitCreateParams, + params?: BenefitCreateParams, + options?: Core.RequestOptions, + ): Core.APIPromise; + create(options?: Core.RequestOptions): Core.APIPromise; + create( + params: BenefitCreateParams | Core.RequestOptions = {}, options?: Core.RequestOptions, ): Core.APIPromise { + if (isRequestOptions(params)) { + return this.create({}, params); + } const { entity_ids, ...body } = params; return this._client.post('/employer/benefits', { query: { entity_ids }, body, ...options }); } @@ -48,15 +55,23 @@ export class Benefits extends APIResource { * ```ts * const companyBenefit = await client.hris.benefits.retrieve( * 'benefit_id', - * { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, * ); * ``` */ retrieve( benefitId: string, - query: BenefitRetrieveParams, + query?: BenefitRetrieveParams, + options?: Core.RequestOptions, + ): Core.APIPromise; + retrieve(benefitId: string, options?: Core.RequestOptions): Core.APIPromise; + retrieve( + benefitId: string, + query: BenefitRetrieveParams | Core.RequestOptions = {}, options?: Core.RequestOptions, ): Core.APIPromise { + if (isRequestOptions(query)) { + return this.retrieve(benefitId, {}, query); + } return this._client.get(`/employer/benefits/${benefitId}`, { query, ...options }); } @@ -66,16 +81,23 @@ export class Benefits extends APIResource { * @example * ```ts * const updateCompanyBenefitResponse = - * await client.hris.benefits.update('benefit_id', { - * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - * }); + * await client.hris.benefits.update('benefit_id'); * ``` */ update( benefitId: string, - params: BenefitUpdateParams, + params?: BenefitUpdateParams, + options?: Core.RequestOptions, + ): Core.APIPromise; + update(benefitId: string, options?: Core.RequestOptions): Core.APIPromise; + update( + benefitId: string, + params: BenefitUpdateParams | Core.RequestOptions = {}, options?: Core.RequestOptions, ): Core.APIPromise { + if (isRequestOptions(params)) { + return this.update(benefitId, {}, params); + } const { entity_ids, ...body } = params; return this._client.post(`/employer/benefits/${benefitId}`, { query: { entity_ids }, body, ...options }); } @@ -86,17 +108,23 @@ export class Benefits extends APIResource { * @example * ```ts * // Automatically fetches more pages as needed. - * for await (const companyBenefit of client.hris.benefits.list( - * { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, - * )) { + * for await (const companyBenefit of client.hris.benefits.list()) { * // ... * } * ``` */ list( - query: BenefitListParams, + query?: BenefitListParams, + options?: Core.RequestOptions, + ): Core.PagePromise; + list(options?: Core.RequestOptions): Core.PagePromise; + list( + query: BenefitListParams | Core.RequestOptions = {}, options?: Core.RequestOptions, ): Core.PagePromise { + if (isRequestOptions(query)) { + return this.list({}, query); + } return this._client.getAPIList('/employer/benefits', CompanyBenefitsSinglePage, { query, ...options }); } @@ -106,17 +134,25 @@ export class Benefits extends APIResource { * @example * ```ts * // Automatically fetches more pages as needed. - * for await (const supportedBenefit of client.hris.benefits.listSupportedBenefits( - * { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, - * )) { + * for await (const supportedBenefit of client.hris.benefits.listSupportedBenefits()) { * // ... * } * ``` */ listSupportedBenefits( - query: BenefitListSupportedBenefitsParams, + query?: BenefitListSupportedBenefitsParams, + options?: Core.RequestOptions, + ): Core.PagePromise; + listSupportedBenefits( + options?: Core.RequestOptions, + ): Core.PagePromise; + listSupportedBenefits( + query: BenefitListSupportedBenefitsParams | Core.RequestOptions = {}, options?: Core.RequestOptions, ): Core.PagePromise { + if (isRequestOptions(query)) { + return this.listSupportedBenefits({}, query); + } return this._client.getAPIList('/employer/benefits/meta', SupportedBenefitsSinglePage, { query, ...options, @@ -362,7 +398,7 @@ export interface BenefitCreateParams { /** * Query param: The entity IDs to specify which entities' data to access. */ - entity_ids: Array; + entity_ids?: Array; /** * Body param: The company match for this benefit. @@ -410,14 +446,14 @@ export interface BenefitRetrieveParams { /** * The entity IDs to specify which entities' data to access. */ - entity_ids: Array; + entity_ids?: Array; } export interface BenefitUpdateParams { /** * Query param: The entity IDs to specify which entities' data to access. */ - entity_ids: Array; + entity_ids?: Array; /** * Body param: Updated name or description. @@ -429,14 +465,14 @@ export interface BenefitListParams { /** * The entity IDs to specify which entities' data to access. */ - entity_ids: Array; + entity_ids?: Array; } export interface BenefitListSupportedBenefitsParams { /** * The entity IDs to specify which entities' data to access. */ - entity_ids: Array; + entity_ids?: Array; } Benefits.CompanyBenefitsSinglePage = CompanyBenefitsSinglePage; diff --git a/src/resources/hris/benefits/individuals.ts b/src/resources/hris/benefits/individuals.ts index a8595a4d6..b269ddd11 100644 --- a/src/resources/hris/benefits/individuals.ts +++ b/src/resources/hris/benefits/individuals.ts @@ -1,6 +1,7 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../../resource'; +import { isRequestOptions } from '../../../core'; import * as Core from '../../../core'; import { SinglePage } from '../../../pagination'; @@ -16,17 +17,26 @@ export class Individuals extends APIResource { * const enrolledIndividualBenefitResponse = * await client.hris.benefits.individuals.enrollMany( * 'benefit_id', - * { - * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - * }, * ); * ``` */ enrollMany( benefitId: string, - params: IndividualEnrollManyParams, + params?: IndividualEnrollManyParams, + options?: Core.RequestOptions, + ): Core.APIPromise; + enrollMany( + benefitId: string, + options?: Core.RequestOptions, + ): Core.APIPromise; + enrollMany( + benefitId: string, + params?: IndividualEnrollManyParams | Core.RequestOptions, options?: Core.RequestOptions, ): Core.APIPromise { + if (isRequestOptions(params)) { + return this.enrollMany(benefitId, undefined, params); + } const { entity_ids, individuals } = params ?? {}; return this._client.post(`/employer/benefits/${benefitId}/individuals`, { query: { entity_ids }, @@ -43,17 +53,26 @@ export class Individuals extends APIResource { * const response = * await client.hris.benefits.individuals.enrolledIds( * 'benefit_id', - * { - * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - * }, * ); * ``` */ enrolledIds( benefitId: string, - query: IndividualEnrolledIDsParams, + query?: IndividualEnrolledIDsParams, + options?: Core.RequestOptions, + ): Core.APIPromise; + enrolledIds( + benefitId: string, + options?: Core.RequestOptions, + ): Core.APIPromise; + enrolledIds( + benefitId: string, + query: IndividualEnrolledIDsParams | Core.RequestOptions = {}, options?: Core.RequestOptions, ): Core.APIPromise { + if (isRequestOptions(query)) { + return this.enrolledIds(benefitId, {}, query); + } return this._client.get(`/employer/benefits/${benefitId}/enrolled`, { query, ...options }); } @@ -65,7 +84,6 @@ export class Individuals extends APIResource { * // Automatically fetches more pages as needed. * for await (const individualBenefit of client.hris.benefits.individuals.retrieveManyBenefits( * 'benefit_id', - * { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, * )) { * // ... * } @@ -73,9 +91,21 @@ export class Individuals extends APIResource { */ retrieveManyBenefits( benefitId: string, - query: IndividualRetrieveManyBenefitsParams, + query?: IndividualRetrieveManyBenefitsParams, + options?: Core.RequestOptions, + ): Core.PagePromise; + retrieveManyBenefits( + benefitId: string, + options?: Core.RequestOptions, + ): Core.PagePromise; + retrieveManyBenefits( + benefitId: string, + query: IndividualRetrieveManyBenefitsParams | Core.RequestOptions = {}, options?: Core.RequestOptions, ): Core.PagePromise { + if (isRequestOptions(query)) { + return this.retrieveManyBenefits(benefitId, {}, query); + } return this._client.getAPIList( `/employer/benefits/${benefitId}/individuals`, IndividualBenefitsSinglePage, @@ -91,17 +121,26 @@ export class Individuals extends APIResource { * const unenrolledIndividualBenefitResponse = * await client.hris.benefits.individuals.unenrollMany( * 'benefit_id', - * { - * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - * }, * ); * ``` */ unenrollMany( benefitId: string, - params: IndividualUnenrollManyParams, + params?: IndividualUnenrollManyParams, + options?: Core.RequestOptions, + ): Core.APIPromise; + unenrollMany( + benefitId: string, + options?: Core.RequestOptions, + ): Core.APIPromise; + unenrollMany( + benefitId: string, + params: IndividualUnenrollManyParams | Core.RequestOptions = {}, options?: Core.RequestOptions, ): Core.APIPromise { + if (isRequestOptions(params)) { + return this.unenrollMany(benefitId, {}, params); + } const { entity_ids, ...body } = params; return this._client.delete(`/employer/benefits/${benefitId}/individuals`, { query: { entity_ids }, @@ -251,7 +290,7 @@ export interface IndividualEnrollManyParams { /** * Query param: The entity IDs to specify which entities' data to access. */ - entity_ids: Array; + entity_ids?: Array; /** * Body param: Array of the individual_id to enroll and a configuration object. @@ -345,14 +384,14 @@ export interface IndividualEnrolledIDsParams { /** * The entity IDs to specify which entities' data to access. */ - entity_ids: Array; + entity_ids?: Array; } export interface IndividualRetrieveManyBenefitsParams { /** * The entity IDs to specify which entities' data to access. */ - entity_ids: Array; + entity_ids?: Array; /** * comma-delimited list of stable Finch uuids for each individual. If empty, @@ -365,7 +404,7 @@ export interface IndividualUnenrollManyParams { /** * Query param: The entity IDs to specify which entities' data to access. */ - entity_ids: Array; + entity_ids?: Array; /** * Body param: Array of individual_ids to unenroll. diff --git a/src/resources/hris/company/company.ts b/src/resources/hris/company/company.ts index 9789395d0..6a40f6002 100644 --- a/src/resources/hris/company/company.ts +++ b/src/resources/hris/company/company.ts @@ -1,6 +1,7 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../../resource'; +import { isRequestOptions } from '../../../core'; import * as Core from '../../../core'; import * as HRISAPI from '../hris'; import * as PayStatementItemAPI from './pay-statement-item/pay-statement-item'; @@ -21,12 +22,18 @@ export class CompanyResource extends APIResource { * * @example * ```ts - * const company = await client.hris.company.retrieve({ - * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - * }); + * const company = await client.hris.company.retrieve(); * ``` */ - retrieve(query: CompanyRetrieveParams, options?: Core.RequestOptions): Core.APIPromise { + retrieve(query?: CompanyRetrieveParams, options?: Core.RequestOptions): Core.APIPromise; + retrieve(options?: Core.RequestOptions): Core.APIPromise; + retrieve( + query: CompanyRetrieveParams | Core.RequestOptions = {}, + options?: Core.RequestOptions, + ): Core.APIPromise { + if (isRequestOptions(query)) { + return this.retrieve({}, query); + } return this._client.get('/employer/company', { query, ...options }); } } @@ -157,7 +164,7 @@ export interface CompanyRetrieveParams { /** * The entity IDs to specify which entities' data to access. */ - entity_ids: Array; + entity_ids?: Array; } CompanyResource.PayStatementItem = PayStatementItem; diff --git a/src/resources/hris/company/pay-statement-item/pay-statement-item.ts b/src/resources/hris/company/pay-statement-item/pay-statement-item.ts index 95884cb7a..af89e364d 100644 --- a/src/resources/hris/company/pay-statement-item/pay-statement-item.ts +++ b/src/resources/hris/company/pay-statement-item/pay-statement-item.ts @@ -1,6 +1,7 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../../../resource'; +import { isRequestOptions } from '../../../../core'; import * as Core from '../../../../core'; import * as RulesAPI from './rules'; import { @@ -28,17 +29,25 @@ export class PayStatementItem extends APIResource { * @example * ```ts * // Automatically fetches more pages as needed. - * for await (const payStatementItemListResponse of client.hris.company.payStatementItem.list( - * { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, - * )) { + * for await (const payStatementItemListResponse of client.hris.company.payStatementItem.list()) { * // ... * } * ``` */ list( - query: PayStatementItemListParams, + query?: PayStatementItemListParams, + options?: Core.RequestOptions, + ): Core.PagePromise; + list( + options?: Core.RequestOptions, + ): Core.PagePromise; + list( + query: PayStatementItemListParams | Core.RequestOptions = {}, options?: Core.RequestOptions, ): Core.PagePromise { + if (isRequestOptions(query)) { + return this.list({}, query); + } return this._client.getAPIList('/employer/pay-statement-item', PayStatementItemListResponsesPage, { query, ...options, @@ -96,11 +105,6 @@ export namespace PayStatementItemListResponse { } export interface PayStatementItemListParams { - /** - * The entity IDs to specify which entities' data to access. - */ - entity_ids: Array; - /** * Comma-delimited list of pay statement item categories to filter on. If empty, * defaults to all categories. @@ -113,6 +117,11 @@ export interface PayStatementItemListParams { */ end_date?: string; + /** + * The entity IDs to specify which entities' data to access. + */ + entity_ids?: Array; + /** * Case-insensitive partial match search by pay statement item name. */ diff --git a/src/resources/hris/company/pay-statement-item/rules.ts b/src/resources/hris/company/pay-statement-item/rules.ts index 9d8759be6..d8fb1de72 100644 --- a/src/resources/hris/company/pay-statement-item/rules.ts +++ b/src/resources/hris/company/pay-statement-item/rules.ts @@ -1,6 +1,7 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../../../resource'; +import { isRequestOptions } from '../../../../core'; import * as Core from '../../../../core'; import { ResponsesPage } from '../../../../pagination'; @@ -16,12 +17,18 @@ export class Rules extends APIResource { * @example * ```ts * const rule = - * await client.hris.company.payStatementItem.rules.create({ - * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - * }); + * await client.hris.company.payStatementItem.rules.create(); * ``` */ - create(params: RuleCreateParams, options?: Core.RequestOptions): Core.APIPromise { + create(params?: RuleCreateParams, options?: Core.RequestOptions): Core.APIPromise; + create(options?: Core.RequestOptions): Core.APIPromise; + create( + params: RuleCreateParams | Core.RequestOptions = {}, + options?: Core.RequestOptions, + ): Core.APIPromise { + if (isRequestOptions(params)) { + return this.create({}, params); + } const { entity_ids, ...body } = params; return this._client.post('/employer/pay-statement-item/rule', { query: { entity_ids }, @@ -39,17 +46,23 @@ export class Rules extends APIResource { * const rule = * await client.hris.company.payStatementItem.rules.update( * 'rule_id', - * { - * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - * }, * ); * ``` */ update( ruleId: string, - params: RuleUpdateParams, + params?: RuleUpdateParams, + options?: Core.RequestOptions, + ): Core.APIPromise; + update(ruleId: string, options?: Core.RequestOptions): Core.APIPromise; + update( + ruleId: string, + params: RuleUpdateParams | Core.RequestOptions = {}, options?: Core.RequestOptions, ): Core.APIPromise { + if (isRequestOptions(params)) { + return this.update(ruleId, {}, params); + } const { entity_ids, ...body } = params; return this._client.put(`/employer/pay-statement-item/rule/${ruleId}`, { query: { entity_ids }, @@ -65,17 +78,23 @@ export class Rules extends APIResource { * @example * ```ts * // Automatically fetches more pages as needed. - * for await (const ruleListResponse of client.hris.company.payStatementItem.rules.list( - * { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, - * )) { + * for await (const ruleListResponse of client.hris.company.payStatementItem.rules.list()) { * // ... * } * ``` */ list( - query: RuleListParams, + query?: RuleListParams, + options?: Core.RequestOptions, + ): Core.PagePromise; + list(options?: Core.RequestOptions): Core.PagePromise; + list( + query: RuleListParams | Core.RequestOptions = {}, options?: Core.RequestOptions, ): Core.PagePromise { + if (isRequestOptions(query)) { + return this.list({}, query); + } return this._client.getAPIList('/employer/pay-statement-item/rule', RuleListResponsesPage, { query, ...options, @@ -91,17 +110,23 @@ export class Rules extends APIResource { * const rule = * await client.hris.company.payStatementItem.rules.delete( * 'rule_id', - * { - * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - * }, * ); * ``` */ delete( ruleId: string, - params: RuleDeleteParams, + params?: RuleDeleteParams, + options?: Core.RequestOptions, + ): Core.APIPromise; + delete(ruleId: string, options?: Core.RequestOptions): Core.APIPromise; + delete( + ruleId: string, + params: RuleDeleteParams | Core.RequestOptions = {}, options?: Core.RequestOptions, ): Core.APIPromise { + if (isRequestOptions(params)) { + return this.delete(ruleId, {}, params); + } const { entity_ids } = params; return this._client.delete(`/employer/pay-statement-item/rule/${ruleId}`, { query: { entity_ids }, @@ -417,7 +442,7 @@ export interface RuleCreateParams { /** * Query param: The entity IDs to create the rule for. */ - entity_ids: Array; + entity_ids?: Array; /** * Body param: Specifies the fields to be applied when the condition is met. @@ -480,7 +505,7 @@ export interface RuleUpdateParams { /** * Query param: The entity IDs to update the rule for. */ - entity_ids: Array; + entity_ids?: Array; /** * Body param: @@ -492,14 +517,14 @@ export interface RuleListParams { /** * The entity IDs to retrieve rules for. */ - entity_ids: Array; + entity_ids?: Array; } export interface RuleDeleteParams { /** * The entity IDs to delete the rule for. */ - entity_ids: Array; + entity_ids?: Array; } Rules.RuleListResponsesPage = RuleListResponsesPage; diff --git a/src/resources/hris/directory.ts b/src/resources/hris/directory.ts index 33b66b90d..237ed3d68 100644 --- a/src/resources/hris/directory.ts +++ b/src/resources/hris/directory.ts @@ -1,6 +1,7 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../resource'; +import { isRequestOptions } from '../../core'; import * as Core from '../../core'; import { IndividualsPage, type IndividualsPageParams } from '../../pagination'; @@ -11,17 +12,23 @@ export class Directory extends APIResource { * @example * ```ts * // Automatically fetches more pages as needed. - * for await (const individualInDirectory of client.hris.directory.list( - * { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, - * )) { + * for await (const individualInDirectory of client.hris.directory.list()) { * // ... * } * ``` */ list( - query: DirectoryListParams, + query?: DirectoryListParams, + options?: Core.RequestOptions, + ): Core.PagePromise; + list(options?: Core.RequestOptions): Core.PagePromise; + list( + query: DirectoryListParams | Core.RequestOptions = {}, options?: Core.RequestOptions, ): Core.PagePromise { + if (isRequestOptions(query)) { + return this.list({}, query); + } return this._client.getAPIList('/employer/directory', IndividualsPage, { query, ...options }); } @@ -94,14 +101,14 @@ export interface DirectoryListParams extends IndividualsPageParams { /** * The entity IDs to specify which entities' data to access. */ - entity_ids: Array; + entity_ids?: Array; } export interface DirectoryListIndividualsParams extends IndividualsPageParams { /** * The entity IDs to specify which entities' data to access. */ - entity_ids: Array; + entity_ids?: Array; } export declare namespace Directory { diff --git a/src/resources/hris/documents.ts b/src/resources/hris/documents.ts index 45e9b0f73..4251336ae 100644 --- a/src/resources/hris/documents.ts +++ b/src/resources/hris/documents.ts @@ -1,6 +1,7 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../resource'; +import { isRequestOptions } from '../../core'; import * as Core from '../../core'; import * as Shared from '../shared'; @@ -11,12 +12,18 @@ export class Documents extends APIResource { * * @example * ```ts - * const documents = await client.hris.documents.list({ - * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - * }); + * const documents = await client.hris.documents.list(); * ``` */ - list(query: DocumentListParams, options?: Core.RequestOptions): Core.APIPromise { + list(query?: DocumentListParams, options?: Core.RequestOptions): Core.APIPromise; + list(options?: Core.RequestOptions): Core.APIPromise; + list( + query: DocumentListParams | Core.RequestOptions = {}, + options?: Core.RequestOptions, + ): Core.APIPromise { + if (isRequestOptions(query)) { + return this.list({}, query); + } return this._client.get('/employer/documents', { query, ...options }); } @@ -28,15 +35,23 @@ export class Documents extends APIResource { * ```ts * const response = await client.hris.documents.retreive( * 'document_id', - * { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, * ); * ``` */ retreive( documentId: string, - query: DocumentRetreiveParams, + query?: DocumentRetreiveParams, + options?: Core.RequestOptions, + ): Core.APIPromise; + retreive(documentId: string, options?: Core.RequestOptions): Core.APIPromise; + retreive( + documentId: string, + query: DocumentRetreiveParams | Core.RequestOptions = {}, options?: Core.RequestOptions, ): Core.APIPromise { + if (isRequestOptions(query)) { + return this.retreive(documentId, {}, query); + } return this._client.get(`/employer/documents/${documentId}`, { query, ...options }); } } @@ -212,7 +227,7 @@ export interface DocumentListParams { /** * The entity IDs to specify which entities' data to access. */ - entity_ids: Array; + entity_ids?: Array; /** * Comma-delimited list of stable Finch uuids for each individual. If empty, @@ -241,7 +256,7 @@ export interface DocumentRetreiveParams { /** * The entity IDs to specify which entities' data to access. */ - entity_ids: Array; + entity_ids?: Array; } export declare namespace Documents { diff --git a/src/resources/hris/employments.ts b/src/resources/hris/employments.ts index 31415bce8..420b1ff1e 100644 --- a/src/resources/hris/employments.ts +++ b/src/resources/hris/employments.ts @@ -13,10 +13,7 @@ export class Employments extends APIResource { * ```ts * // Automatically fetches more pages as needed. * for await (const employmentDataResponse of client.hris.employments.retrieveMany( - * { - * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - * requests: [{ individual_id: 'individual_id' }], - * }, + * { requests: [{ individual_id: 'individual_id' }] }, * )) { * // ... * } @@ -212,14 +209,14 @@ export interface EmploymentDataResponse { export interface EmploymentRetrieveManyParams { /** - * Query param: The entity IDs to specify which entities' data to access. + * Body param: The array of batch requests. */ - entity_ids: Array; + requests: Array; /** - * Body param: The array of batch requests. + * Query param: The entity IDs to specify which entities' data to access. */ - requests: Array; + entity_ids?: Array; } export namespace EmploymentRetrieveManyParams { diff --git a/src/resources/hris/individuals.ts b/src/resources/hris/individuals.ts index 7be50566d..664af0b85 100644 --- a/src/resources/hris/individuals.ts +++ b/src/resources/hris/individuals.ts @@ -1,6 +1,7 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../resource'; +import { isRequestOptions } from '../../core'; import * as Core from '../../core'; import * as HRISAPI from './hris'; import { ResponsesPage } from '../../pagination'; @@ -12,17 +13,23 @@ export class Individuals extends APIResource { * @example * ```ts * // Automatically fetches more pages as needed. - * for await (const individualResponse of client.hris.individuals.retrieveMany( - * { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, - * )) { + * for await (const individualResponse of client.hris.individuals.retrieveMany()) { * // ... * } * ``` */ retrieveMany( - params: IndividualRetrieveManyParams, + params?: IndividualRetrieveManyParams, + options?: Core.RequestOptions, + ): Core.PagePromise; + retrieveMany(options?: Core.RequestOptions): Core.PagePromise; + retrieveMany( + params: IndividualRetrieveManyParams | Core.RequestOptions = {}, options?: Core.RequestOptions, ): Core.PagePromise { + if (isRequestOptions(params)) { + return this.retrieveMany({}, params); + } const { entity_ids, ...body } = params; return this._client.getAPIList('/employer/individual', IndividualResponsesPage, { query: { entity_ids }, @@ -144,7 +151,7 @@ export interface IndividualRetrieveManyParams { /** * Query param: The entity IDs to specify which entities' data to access. */ - entity_ids: Array; + entity_ids?: Array; /** * Body param: diff --git a/src/resources/hris/pay-statements.ts b/src/resources/hris/pay-statements.ts index aae8a2bd2..b5be191be 100644 --- a/src/resources/hris/pay-statements.ts +++ b/src/resources/hris/pay-statements.ts @@ -18,7 +18,6 @@ export class PayStatements extends APIResource { * // Automatically fetches more pages as needed. * for await (const payStatementResponse of client.hris.payStatements.retrieveMany( * { - * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], * requests: [ * { * payment_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', @@ -313,14 +312,14 @@ export namespace PayStatementResponseBody { export interface PayStatementRetrieveManyParams { /** - * Query param: The entity IDs to specify which entities' data to access. + * Body param: The array of batch requests. */ - entity_ids: Array; + requests: Array; /** - * Body param: The array of batch requests. + * Query param: The entity IDs to specify which entities' data to access. */ - requests: Array; + entity_ids?: Array; } export namespace PayStatementRetrieveManyParams { diff --git a/src/resources/hris/payments.ts b/src/resources/hris/payments.ts index 3d6371e9f..b7e63d8d3 100644 --- a/src/resources/hris/payments.ts +++ b/src/resources/hris/payments.ts @@ -14,7 +14,6 @@ export class Payments extends APIResource { * // Automatically fetches more pages as needed. * for await (const payment of client.hris.payments.list({ * end_date: '2021-01-01', - * entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], * start_date: '2021-01-01', * })) { * // ... @@ -100,16 +99,16 @@ export interface PaymentListParams { */ end_date: string; - /** - * The entity IDs to specify which entities' data to access. - */ - entity_ids: Array; - /** * The start date to retrieve payments by a company (inclusive) in `YYYY-MM-DD` * format. */ start_date: string; + + /** + * The entity IDs to specify which entities' data to access. + */ + entity_ids?: Array; } Payments.PaymentsSinglePage = PaymentsSinglePage; diff --git a/src/resources/payroll/pay-groups.ts b/src/resources/payroll/pay-groups.ts index c4d41970c..c8704bf10 100644 --- a/src/resources/payroll/pay-groups.ts +++ b/src/resources/payroll/pay-groups.ts @@ -1,6 +1,7 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../resource'; +import { isRequestOptions } from '../../core'; import * as Core from '../../core'; import { SinglePage } from '../../pagination'; @@ -10,9 +11,18 @@ export class PayGroups extends APIResource { */ retrieve( payGroupId: string, - query: PayGroupRetrieveParams, + query?: PayGroupRetrieveParams, + options?: Core.RequestOptions, + ): Core.APIPromise; + retrieve(payGroupId: string, options?: Core.RequestOptions): Core.APIPromise; + retrieve( + payGroupId: string, + query: PayGroupRetrieveParams | Core.RequestOptions = {}, options?: Core.RequestOptions, ): Core.APIPromise { + if (isRequestOptions(query)) { + return this.retrieve(payGroupId, {}, query); + } return this._client.get(`/employer/pay-groups/${payGroupId}`, { query, ...options }); } @@ -20,9 +30,19 @@ export class PayGroups extends APIResource { * Read company pay groups and frequencies */ list( - query: PayGroupListParams, + query?: PayGroupListParams, + options?: Core.RequestOptions, + ): Core.PagePromise; + list( + options?: Core.RequestOptions, + ): Core.PagePromise; + list( + query: PayGroupListParams | Core.RequestOptions = {}, options?: Core.RequestOptions, ): Core.PagePromise { + if (isRequestOptions(query)) { + return this.list({}, query); + } return this._client.getAPIList('/employer/pay-groups', PayGroupListResponsesSinglePage, { query, ...options, @@ -92,14 +112,14 @@ export interface PayGroupRetrieveParams { /** * The entity IDs to specify which entities' data to access. */ - entity_ids: Array; + entity_ids?: Array; } export interface PayGroupListParams { /** * The entity IDs to specify which entities' data to access. */ - entity_ids: Array; + entity_ids?: Array; individual_id?: string; diff --git a/tests/api-resources/hris/benefits/benefits.test.ts b/tests/api-resources/hris/benefits/benefits.test.ts index b9489ff11..f58ceb111 100644 --- a/tests/api-resources/hris/benefits/benefits.test.ts +++ b/tests/api-resources/hris/benefits/benefits.test.ts @@ -9,10 +9,8 @@ const client = new Finch({ }); describe('resource benefits', () => { - test('create: only required params', async () => { - const responsePromise = client.hris.benefits.create({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('create', async () => { + const responsePromise = client.hris.benefits.create(); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -22,20 +20,31 @@ describe('resource benefits', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('create: required and optional params', async () => { - const response = await client.hris.benefits.create({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - company_contribution: { tiers: [{ match: 1, threshold: 1 }], type: 'match' }, - description: 'description', - frequency: 'every_paycheck', - type: '457', - }); + test('create: request options instead of params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect(client.hris.benefits.create({ path: '/_stainless_unknown_path' })).rejects.toThrow( + Finch.NotFoundError, + ); }); - test('retrieve: only required params', async () => { - const responsePromise = client.hris.benefits.retrieve('benefit_id', { - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('create: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.benefits.create( + { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + company_contribution: { tiers: [{ match: 1, threshold: 1 }], type: 'match' }, + description: 'description', + frequency: 'every_paycheck', + type: '457', + }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(Finch.NotFoundError); + }); + + test('retrieve', async () => { + const responsePromise = client.hris.benefits.retrieve('benefit_id'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -45,16 +54,26 @@ describe('resource benefits', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('retrieve: required and optional params', async () => { - const response = await client.hris.benefits.retrieve('benefit_id', { - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('retrieve: request options instead of params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.benefits.retrieve('benefit_id', { path: '/_stainless_unknown_path' }), + ).rejects.toThrow(Finch.NotFoundError); }); - test('update: only required params', async () => { - const responsePromise = client.hris.benefits.update('benefit_id', { - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('retrieve: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.benefits.retrieve( + 'benefit_id', + { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(Finch.NotFoundError); + }); + + test('update', async () => { + const responsePromise = client.hris.benefits.update('benefit_id'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -64,17 +83,26 @@ describe('resource benefits', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('update: required and optional params', async () => { - const response = await client.hris.benefits.update('benefit_id', { - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - description: 'description', - }); + test('update: request options instead of params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.benefits.update('benefit_id', { path: '/_stainless_unknown_path' }), + ).rejects.toThrow(Finch.NotFoundError); + }); + + test('update: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.benefits.update( + 'benefit_id', + { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], description: 'description' }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(Finch.NotFoundError); }); - test('list: only required params', async () => { - const responsePromise = client.hris.benefits.list({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('list', async () => { + const responsePromise = client.hris.benefits.list(); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -84,16 +112,25 @@ describe('resource benefits', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('list: required and optional params', async () => { - const response = await client.hris.benefits.list({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('list: request options instead of params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect(client.hris.benefits.list({ path: '/_stainless_unknown_path' })).rejects.toThrow( + Finch.NotFoundError, + ); + }); + + test('list: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.benefits.list( + { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(Finch.NotFoundError); }); - test('listSupportedBenefits: only required params', async () => { - const responsePromise = client.hris.benefits.listSupportedBenefits({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('listSupportedBenefits', async () => { + const responsePromise = client.hris.benefits.listSupportedBenefits(); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -103,9 +140,20 @@ describe('resource benefits', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('listSupportedBenefits: required and optional params', async () => { - const response = await client.hris.benefits.listSupportedBenefits({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('listSupportedBenefits: request options instead of params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.benefits.listSupportedBenefits({ path: '/_stainless_unknown_path' }), + ).rejects.toThrow(Finch.NotFoundError); + }); + + test('listSupportedBenefits: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.benefits.listSupportedBenefits( + { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(Finch.NotFoundError); }); }); diff --git a/tests/api-resources/hris/benefits/individuals.test.ts b/tests/api-resources/hris/benefits/individuals.test.ts index 844676be9..22c98808c 100644 --- a/tests/api-resources/hris/benefits/individuals.test.ts +++ b/tests/api-resources/hris/benefits/individuals.test.ts @@ -9,10 +9,8 @@ const client = new Finch({ }); describe('resource individuals', () => { - test('enrollMany: only required params', async () => { - const responsePromise = client.hris.benefits.individuals.enrollMany('benefit_id', { - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('enrollMany', async () => { + const responsePromise = client.hris.benefits.individuals.enrollMany('benefit_id'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -22,29 +20,41 @@ describe('resource individuals', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('enrollMany: required and optional params', async () => { - const response = await client.hris.benefits.individuals.enrollMany('benefit_id', { - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - individuals: [ + test('enrollMany: request options instead of params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.benefits.individuals.enrollMany('benefit_id', { path: '/_stainless_unknown_path' }), + ).rejects.toThrow(Finch.NotFoundError); + }); + + test('enrollMany: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.benefits.individuals.enrollMany( + 'benefit_id', { - configuration: { - annual_contribution_limit: 'individual', - annual_maximum: null, - catch_up: true, - company_contribution: { amount: 0, tiers: [{ match: 0, threshold: 0 }], type: 'fixed' }, - effective_date: '2019-12-27', - employee_deduction: { amount: 10000, type: 'fixed' }, - }, - individual_id: 'd02a6346-1f08-4312-a064-49ff3cafaa7a', + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + individuals: [ + { + configuration: { + annual_contribution_limit: 'individual', + annual_maximum: null, + catch_up: true, + company_contribution: { amount: 0, tiers: [{ match: 0, threshold: 0 }], type: 'fixed' }, + effective_date: '2019-12-27', + employee_deduction: { amount: 10000, type: 'fixed' }, + }, + individual_id: 'd02a6346-1f08-4312-a064-49ff3cafaa7a', + }, + ], }, - ], - }); + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(Finch.NotFoundError); }); - test('enrolledIds: only required params', async () => { - const responsePromise = client.hris.benefits.individuals.enrolledIds('benefit_id', { - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('enrolledIds', async () => { + const responsePromise = client.hris.benefits.individuals.enrolledIds('benefit_id'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -54,16 +64,26 @@ describe('resource individuals', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('enrolledIds: required and optional params', async () => { - const response = await client.hris.benefits.individuals.enrolledIds('benefit_id', { - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('enrolledIds: request options instead of params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.benefits.individuals.enrolledIds('benefit_id', { path: '/_stainless_unknown_path' }), + ).rejects.toThrow(Finch.NotFoundError); }); - test('retrieveManyBenefits: only required params', async () => { - const responsePromise = client.hris.benefits.individuals.retrieveManyBenefits('benefit_id', { - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('enrolledIds: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.benefits.individuals.enrolledIds( + 'benefit_id', + { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(Finch.NotFoundError); + }); + + test('retrieveManyBenefits', async () => { + const responsePromise = client.hris.benefits.individuals.retrieveManyBenefits('benefit_id'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -73,17 +93,31 @@ describe('resource individuals', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('retrieveManyBenefits: required and optional params', async () => { - const response = await client.hris.benefits.individuals.retrieveManyBenefits('benefit_id', { - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - individual_ids: 'd675d2b7-6d7b-41a8-b2d3-001eb3fb88f6,d02a6346-1f08-4312-a064-49ff3cafaa7a', - }); + test('retrieveManyBenefits: request options instead of params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.benefits.individuals.retrieveManyBenefits('benefit_id', { + path: '/_stainless_unknown_path', + }), + ).rejects.toThrow(Finch.NotFoundError); + }); + + test('retrieveManyBenefits: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.benefits.individuals.retrieveManyBenefits( + 'benefit_id', + { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + individual_ids: 'd675d2b7-6d7b-41a8-b2d3-001eb3fb88f6,d02a6346-1f08-4312-a064-49ff3cafaa7a', + }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(Finch.NotFoundError); }); - test('unenrollMany: only required params', async () => { - const responsePromise = client.hris.benefits.individuals.unenrollMany('benefit_id', { - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('unenrollMany', async () => { + const responsePromise = client.hris.benefits.individuals.unenrollMany('benefit_id'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -93,10 +127,21 @@ describe('resource individuals', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('unenrollMany: required and optional params', async () => { - const response = await client.hris.benefits.individuals.unenrollMany('benefit_id', { - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - individual_ids: ['string'], - }); + test('unenrollMany: request options instead of params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.benefits.individuals.unenrollMany('benefit_id', { path: '/_stainless_unknown_path' }), + ).rejects.toThrow(Finch.NotFoundError); + }); + + test('unenrollMany: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.benefits.individuals.unenrollMany( + 'benefit_id', + { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], individual_ids: ['string'] }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(Finch.NotFoundError); }); }); diff --git a/tests/api-resources/hris/company/company.test.ts b/tests/api-resources/hris/company/company.test.ts index e14b0dbf9..38e056de3 100644 --- a/tests/api-resources/hris/company/company.test.ts +++ b/tests/api-resources/hris/company/company.test.ts @@ -9,10 +9,8 @@ const client = new Finch({ }); describe('resource company', () => { - test('retrieve: only required params', async () => { - const responsePromise = client.hris.company.retrieve({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('retrieve', async () => { + const responsePromise = client.hris.company.retrieve(); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -22,9 +20,20 @@ describe('resource company', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('retrieve: required and optional params', async () => { - const response = await client.hris.company.retrieve({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('retrieve: request options instead of params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect(client.hris.company.retrieve({ path: '/_stainless_unknown_path' })).rejects.toThrow( + Finch.NotFoundError, + ); + }); + + test('retrieve: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.company.retrieve( + { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(Finch.NotFoundError); }); }); diff --git a/tests/api-resources/hris/company/pay-statement-item/pay-statement-item.test.ts b/tests/api-resources/hris/company/pay-statement-item/pay-statement-item.test.ts index c2f2a801a..839efc54f 100644 --- a/tests/api-resources/hris/company/pay-statement-item/pay-statement-item.test.ts +++ b/tests/api-resources/hris/company/pay-statement-item/pay-statement-item.test.ts @@ -9,10 +9,8 @@ const client = new Finch({ }); describe('resource payStatementItem', () => { - test('list: only required params', async () => { - const responsePromise = client.hris.company.payStatementItem.list({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('list', async () => { + const responsePromise = client.hris.company.payStatementItem.list(); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -22,14 +20,27 @@ describe('resource payStatementItem', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('list: required and optional params', async () => { - const response = await client.hris.company.payStatementItem.list({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - categories: ['earnings'], - end_date: '2024-07-01', - name: 'name', - start_date: '2024-01-01', - type: 'base_compensation', - }); + test('list: request options instead of params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.company.payStatementItem.list({ path: '/_stainless_unknown_path' }), + ).rejects.toThrow(Finch.NotFoundError); + }); + + test('list: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.company.payStatementItem.list( + { + categories: ['earnings'], + end_date: '2024-07-01', + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + name: 'name', + start_date: '2024-01-01', + type: 'base_compensation', + }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(Finch.NotFoundError); }); }); diff --git a/tests/api-resources/hris/company/pay-statement-item/rules.test.ts b/tests/api-resources/hris/company/pay-statement-item/rules.test.ts index 26b9899ff..1c171c20d 100644 --- a/tests/api-resources/hris/company/pay-statement-item/rules.test.ts +++ b/tests/api-resources/hris/company/pay-statement-item/rules.test.ts @@ -9,10 +9,8 @@ const client = new Finch({ }); describe('resource rules', () => { - test('create: only required params', async () => { - const responsePromise = client.hris.company.payStatementItem.rules.create({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('create', async () => { + const responsePromise = client.hris.company.payStatementItem.rules.create(); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -22,21 +20,32 @@ describe('resource rules', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('create: required and optional params', async () => { - const response = await client.hris.company.payStatementItem.rules.create({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - attributes: { metadata: { foo: 'bar' } }, - conditions: [{ field: 'field', operator: 'equals', value: 'value' }], - effective_end_date: 'effective_end_date', - effective_start_date: 'effective_start_date', - entity_type: 'pay_statement_item', - }); + test('create: request options instead of params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.company.payStatementItem.rules.create({ path: '/_stainless_unknown_path' }), + ).rejects.toThrow(Finch.NotFoundError); }); - test('update: only required params', async () => { - const responsePromise = client.hris.company.payStatementItem.rules.update('rule_id', { - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('create: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.company.payStatementItem.rules.create( + { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + attributes: { metadata: { foo: 'bar' } }, + conditions: [{ field: 'field', operator: 'equals', value: 'value' }], + effective_end_date: 'effective_end_date', + effective_start_date: 'effective_start_date', + entity_type: 'pay_statement_item', + }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(Finch.NotFoundError); + }); + + test('update', async () => { + const responsePromise = client.hris.company.payStatementItem.rules.update('rule_id'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -46,17 +55,26 @@ describe('resource rules', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('update: required and optional params', async () => { - const response = await client.hris.company.payStatementItem.rules.update('rule_id', { - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - optionalProperty: {}, - }); + test('update: request options instead of params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.company.payStatementItem.rules.update('rule_id', { path: '/_stainless_unknown_path' }), + ).rejects.toThrow(Finch.NotFoundError); + }); + + test('update: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.company.payStatementItem.rules.update( + 'rule_id', + { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], optionalProperty: {} }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(Finch.NotFoundError); }); - test('list: only required params', async () => { - const responsePromise = client.hris.company.payStatementItem.rules.list({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('list', async () => { + const responsePromise = client.hris.company.payStatementItem.rules.list(); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -66,16 +84,25 @@ describe('resource rules', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('list: required and optional params', async () => { - const response = await client.hris.company.payStatementItem.rules.list({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('list: request options instead of params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.company.payStatementItem.rules.list({ path: '/_stainless_unknown_path' }), + ).rejects.toThrow(Finch.NotFoundError); }); - test('delete: only required params', async () => { - const responsePromise = client.hris.company.payStatementItem.rules.delete('rule_id', { - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('list: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.company.payStatementItem.rules.list( + { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(Finch.NotFoundError); + }); + + test('delete', async () => { + const responsePromise = client.hris.company.payStatementItem.rules.delete('rule_id'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -85,9 +112,21 @@ describe('resource rules', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('delete: required and optional params', async () => { - const response = await client.hris.company.payStatementItem.rules.delete('rule_id', { - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('delete: request options instead of params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.company.payStatementItem.rules.delete('rule_id', { path: '/_stainless_unknown_path' }), + ).rejects.toThrow(Finch.NotFoundError); + }); + + test('delete: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.company.payStatementItem.rules.delete( + 'rule_id', + { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(Finch.NotFoundError); }); }); diff --git a/tests/api-resources/hris/directory.test.ts b/tests/api-resources/hris/directory.test.ts index 9d31dab4b..045deca15 100644 --- a/tests/api-resources/hris/directory.test.ts +++ b/tests/api-resources/hris/directory.test.ts @@ -9,10 +9,8 @@ const client = new Finch({ }); describe('resource directory', () => { - test('list: only required params', async () => { - const responsePromise = client.hris.directory.list({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('list', async () => { + const responsePromise = client.hris.directory.list(); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -22,18 +20,25 @@ describe('resource directory', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('list: required and optional params', async () => { - const response = await client.hris.directory.list({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - limit: 0, - offset: 0, - }); + test('list: request options instead of params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect(client.hris.directory.list({ path: '/_stainless_unknown_path' })).rejects.toThrow( + Finch.NotFoundError, + ); }); - test('listIndividuals: only required params', async () => { - const responsePromise = client.hris.directory.listIndividuals({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('list: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.directory.list( + { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], limit: 0, offset: 0 }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(Finch.NotFoundError); + }); + + test('listIndividuals', async () => { + const responsePromise = client.hris.directory.listIndividuals(); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -43,11 +48,20 @@ describe('resource directory', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('listIndividuals: required and optional params', async () => { - const response = await client.hris.directory.listIndividuals({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - limit: 0, - offset: 0, - }); + test('listIndividuals: request options instead of params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect(client.hris.directory.listIndividuals({ path: '/_stainless_unknown_path' })).rejects.toThrow( + Finch.NotFoundError, + ); + }); + + test('listIndividuals: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.directory.listIndividuals( + { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], limit: 0, offset: 0 }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(Finch.NotFoundError); }); }); diff --git a/tests/api-resources/hris/documents.test.ts b/tests/api-resources/hris/documents.test.ts index 784e41edb..b17cf3457 100644 --- a/tests/api-resources/hris/documents.test.ts +++ b/tests/api-resources/hris/documents.test.ts @@ -9,10 +9,8 @@ const client = new Finch({ }); describe('resource documents', () => { - test('list: only required params', async () => { - const responsePromise = client.hris.documents.list({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('list', async () => { + const responsePromise = client.hris.documents.list(); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -22,20 +20,31 @@ describe('resource documents', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('list: required and optional params', async () => { - const response = await client.hris.documents.list({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - individual_ids: ['string'], - limit: 0, - offset: 0, - types: ['w4_2020'], - }); + test('list: request options instead of params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect(client.hris.documents.list({ path: '/_stainless_unknown_path' })).rejects.toThrow( + Finch.NotFoundError, + ); }); - test('retreive: only required params', async () => { - const responsePromise = client.hris.documents.retreive('document_id', { - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('list: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.documents.list( + { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + individual_ids: ['string'], + limit: 0, + offset: 0, + types: ['w4_2020'], + }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(Finch.NotFoundError); + }); + + test('retreive', async () => { + const responsePromise = client.hris.documents.retreive('document_id'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -45,9 +54,21 @@ describe('resource documents', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('retreive: required and optional params', async () => { - const response = await client.hris.documents.retreive('document_id', { - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('retreive: request options instead of params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.documents.retreive('document_id', { path: '/_stainless_unknown_path' }), + ).rejects.toThrow(Finch.NotFoundError); + }); + + test('retreive: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.documents.retreive( + 'document_id', + { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(Finch.NotFoundError); }); }); diff --git a/tests/api-resources/hris/employments.test.ts b/tests/api-resources/hris/employments.test.ts index 29b513bdf..c264064ee 100644 --- a/tests/api-resources/hris/employments.test.ts +++ b/tests/api-resources/hris/employments.test.ts @@ -11,7 +11,6 @@ const client = new Finch({ describe('resource employments', () => { test('retrieveMany: only required params', async () => { const responsePromise = client.hris.employments.retrieveMany({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], requests: [{ individual_id: 'individual_id' }], }); const rawResponse = await responsePromise.asResponse(); @@ -25,8 +24,8 @@ describe('resource employments', () => { test('retrieveMany: required and optional params', async () => { const response = await client.hris.employments.retrieveMany({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], requests: [{ individual_id: 'individual_id' }], + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], }); }); }); diff --git a/tests/api-resources/hris/individuals.test.ts b/tests/api-resources/hris/individuals.test.ts index 1dee8d8c1..8aa5239bd 100644 --- a/tests/api-resources/hris/individuals.test.ts +++ b/tests/api-resources/hris/individuals.test.ts @@ -9,10 +9,8 @@ const client = new Finch({ }); describe('resource individuals', () => { - test('retrieveMany: only required params', async () => { - const responsePromise = client.hris.individuals.retrieveMany({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('retrieveMany', async () => { + const responsePromise = client.hris.individuals.retrieveMany(); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -22,11 +20,24 @@ describe('resource individuals', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('retrieveMany: required and optional params', async () => { - const response = await client.hris.individuals.retrieveMany({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - options: { include: ['string'] }, - requests: [{ individual_id: 'individual_id' }], - }); + test('retrieveMany: request options instead of params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect(client.hris.individuals.retrieveMany({ path: '/_stainless_unknown_path' })).rejects.toThrow( + Finch.NotFoundError, + ); + }); + + test('retrieveMany: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.hris.individuals.retrieveMany( + { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + options: { include: ['string'] }, + requests: [{ individual_id: 'individual_id' }], + }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(Finch.NotFoundError); }); }); diff --git a/tests/api-resources/hris/pay-statements.test.ts b/tests/api-resources/hris/pay-statements.test.ts index ad5b4cd85..03de31636 100644 --- a/tests/api-resources/hris/pay-statements.test.ts +++ b/tests/api-resources/hris/pay-statements.test.ts @@ -11,7 +11,6 @@ const client = new Finch({ describe('resource payStatements', () => { test('retrieveMany: only required params', async () => { const responsePromise = client.hris.payStatements.retrieveMany({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], requests: [{ payment_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e' }], }); const rawResponse = await responsePromise.asResponse(); @@ -25,8 +24,8 @@ describe('resource payStatements', () => { test('retrieveMany: required and optional params', async () => { const response = await client.hris.payStatements.retrieveMany({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], requests: [{ payment_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', limit: 50, offset: 0 }], + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], }); }); }); diff --git a/tests/api-resources/hris/payments.test.ts b/tests/api-resources/hris/payments.test.ts index 3d271d824..f083b49c7 100644 --- a/tests/api-resources/hris/payments.test.ts +++ b/tests/api-resources/hris/payments.test.ts @@ -10,11 +10,7 @@ const client = new Finch({ describe('resource payments', () => { test('list: only required params', async () => { - const responsePromise = client.hris.payments.list({ - end_date: '2021-01-01', - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - start_date: '2021-01-01', - }); + const responsePromise = client.hris.payments.list({ end_date: '2021-01-01', start_date: '2021-01-01' }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -27,8 +23,8 @@ describe('resource payments', () => { test('list: required and optional params', async () => { const response = await client.hris.payments.list({ end_date: '2021-01-01', - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], start_date: '2021-01-01', + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], }); }); }); diff --git a/tests/api-resources/payroll/pay-groups.test.ts b/tests/api-resources/payroll/pay-groups.test.ts index 74769782e..b42df448b 100644 --- a/tests/api-resources/payroll/pay-groups.test.ts +++ b/tests/api-resources/payroll/pay-groups.test.ts @@ -9,10 +9,8 @@ const client = new Finch({ }); describe('resource payGroups', () => { - test('retrieve: only required params', async () => { - const responsePromise = client.payroll.payGroups.retrieve('pay_group_id', { - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('retrieve', async () => { + const responsePromise = client.payroll.payGroups.retrieve('pay_group_id'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -22,16 +20,26 @@ describe('resource payGroups', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('retrieve: required and optional params', async () => { - const response = await client.payroll.payGroups.retrieve('pay_group_id', { - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('retrieve: request options instead of params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.payroll.payGroups.retrieve('pay_group_id', { path: '/_stainless_unknown_path' }), + ).rejects.toThrow(Finch.NotFoundError); }); - test('list: only required params', async () => { - const responsePromise = client.payroll.payGroups.list({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - }); + test('retrieve: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.payroll.payGroups.retrieve( + 'pay_group_id', + { entity_ids: ['550e8400-e29b-41d4-a716-446655440000'] }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(Finch.NotFoundError); + }); + + test('list', async () => { + const responsePromise = client.payroll.payGroups.list(); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -41,11 +49,24 @@ describe('resource payGroups', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - test('list: required and optional params', async () => { - const response = await client.payroll.payGroups.list({ - entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], - individual_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', - pay_frequencies: ['string'], - }); + test('list: request options instead of params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect(client.payroll.payGroups.list({ path: '/_stainless_unknown_path' })).rejects.toThrow( + Finch.NotFoundError, + ); + }); + + test('list: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.payroll.payGroups.list( + { + entity_ids: ['550e8400-e29b-41d4-a716-446655440000'], + individual_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', + pay_frequencies: ['string'], + }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(Finch.NotFoundError); }); }); From bd92685d48f74bdf08a65261ba0e855935179b9c Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 27 Oct 2025 20:01:26 +0000 Subject: [PATCH 51/51] release: 6.38.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 65 +++++++++++++++++++++++++++++++ package.json | 2 +- packages/mcp-server/package.json | 2 +- packages/mcp-server/src/server.ts | 2 +- src/version.ts | 2 +- 6 files changed, 70 insertions(+), 5 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 509abc6f1..a25f0a9b1 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "6.37.0" + ".": "6.38.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 31cf2632e..b12249840 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,70 @@ # Changelog +## 6.38.0 (2025-10-27) + +Full Changelog: [v6.37.0...v6.38.0](https://github.com/Finch-API/finch-api-node/compare/v6.37.0...v6.38.0) + +### Features + +* **api:** api update ([4d57031](https://github.com/Finch-API/finch-api-node/commit/4d5703128cd8a626dec68fe4ffc34980579bcd6f)) +* **api:** api update ([50af0c2](https://github.com/Finch-API/finch-api-node/commit/50af0c2c4756708e0de6bdb3c1eaacce3d24733b)) +* **api:** api update ([9fb854f](https://github.com/Finch-API/finch-api-node/commit/9fb854f6ceaac25e21901b4a035d2207de994901)) +* **api:** api update ([96d3f66](https://github.com/Finch-API/finch-api-node/commit/96d3f666690caea95b650b954dfd681eeb686c8e)) +* **api:** api update ([b331c10](https://github.com/Finch-API/finch-api-node/commit/b331c108e3912c503e4cc8393587bac2a927f4f7)) +* **api:** api update ([99a20c2](https://github.com/Finch-API/finch-api-node/commit/99a20c267f645658d3928f269f5da7a33b287d17)) +* **api:** api update ([f9c7e06](https://github.com/Finch-API/finch-api-node/commit/f9c7e0685ff5ab28614353eacc1fc7887ec6a0ff)) +* **api:** api update ([1c4f073](https://github.com/Finch-API/finch-api-node/commit/1c4f073cc8e8f06e58069dcc2bc5b708e3a8be34)) +* **api:** api update ([843b525](https://github.com/Finch-API/finch-api-node/commit/843b525f6a3f07edda04ca213a35dd3d2d37fdb3)) +* **api:** api update ([9bc9a38](https://github.com/Finch-API/finch-api-node/commit/9bc9a38df44189e734248cf7ad06259f93e25b82)) +* **api:** api update ([09d2e93](https://github.com/Finch-API/finch-api-node/commit/09d2e939a8c42d495d9207ad2d73841f6e9e8732)) +* **api:** make client id, client secret optional again ([d67f867](https://github.com/Finch-API/finch-api-node/commit/d67f867f1b3c9e4886d21da21a1cccab5760aa9d)) +* **mcp:** add docs search tool ([a9e8666](https://github.com/Finch-API/finch-api-node/commit/a9e866662d47e0f39a1988339101d46ba149fb9d)) +* **mcp:** add mcp bundles to build script ([45794fe](https://github.com/Finch-API/finch-api-node/commit/45794fe7a8d09dd0160ac3d2a64941fff12837d5)) +* **mcp:** add option for including docs tools ([fef1f5b](https://github.com/Finch-API/finch-api-node/commit/fef1f5b0cc05c737db89097378c88a38e8973089)) +* **mcp:** allow setting logging level ([4634f9a](https://github.com/Finch-API/finch-api-node/commit/4634f9a04f0fd3a7daa781876a1d93e170f1941d)) +* **mcp:** change remote server query option parsing logic ([13ef1bd](https://github.com/Finch-API/finch-api-node/commit/13ef1bd4400e1ae2b2197a35f33e79703af34e08)) +* **mcp:** enable experimental docs search tool ([8ec38f6](https://github.com/Finch-API/finch-api-node/commit/8ec38f6536ca6a6e7324dd827db0dc9ee9234f61)) +* **mcp:** expose client options in `streamableHTTPApp` ([39cdb76](https://github.com/Finch-API/finch-api-node/commit/39cdb7601c55b6d723132edeb320c3898e697fa2)) + + +### Bug Fixes + +* **ci:** set permissions for DXT publish action ([6a6dd0a](https://github.com/Finch-API/finch-api-node/commit/6a6dd0af7e290990c7773447615e3e5d99ff217b)) +* **client:** incorrect offset pagination check ([2600077](https://github.com/Finch-API/finch-api-node/commit/26000775b7ab71e9e3994196806a847383905853)) +* coerce nullable values to undefined ([aa135f5](https://github.com/Finch-API/finch-api-node/commit/aa135f5fdfe89359b6ad8c49b1908e7faee4ebaa)) +* **mcp:** avoid importing unsupported libraries on non-node environments ([8c380a8](https://github.com/Finch-API/finch-api-node/commit/8c380a8499435e8a92155664943e6fc631f7ba1a)) +* **mcp:** fix cli argument parsing logic ([277ba31](https://github.com/Finch-API/finch-api-node/commit/277ba31b242825bd569a6566a8f2a136ec0b595d)) +* **mcp:** fix query options parsing ([9087760](https://github.com/Finch-API/finch-api-node/commit/90877607933fa892f5d05c8931fa2de9d139e769)) +* **mcp:** fix uploading dxt release assets ([70f9a36](https://github.com/Finch-API/finch-api-node/commit/70f9a36f47190f4b78de043e63d65e21df6ce116)) +* **mcp:** resolve a linting issue in server code ([90b7ae2](https://github.com/Finch-API/finch-api-node/commit/90b7ae260d427cebb7bcd7f2d3e854a0efaccd19)) + + +### Performance Improvements + +* faster formatting ([163982a](https://github.com/Finch-API/finch-api-node/commit/163982a884bcf10684b5b3e242b0d52d547fc62b)) + + +### Chores + +* ci build action ([f0c3633](https://github.com/Finch-API/finch-api-node/commit/f0c3633571f7eea46803cb75ba244c41cac5a7b4)) +* **codegen:** internal codegen update ([27ec1f5](https://github.com/Finch-API/finch-api-node/commit/27ec1f5a8d71f31a327021745f7dab0aeebc4b7b)) +* do not install brew dependencies in ./scripts/bootstrap by default ([1758c0d](https://github.com/Finch-API/finch-api-node/commit/1758c0de64e97975332bb8a0c6b55a23ed82a036)) +* extract some types in mcp docs ([55c3799](https://github.com/Finch-API/finch-api-node/commit/55c37998bdb39779bfb9ae62ee5310a2a423248d)) +* **internal:** codegen related update ([d020050](https://github.com/Finch-API/finch-api-node/commit/d0200501b52ae4ac9e7c8de91d2f883e27db34c5)) +* **internal:** codegen related update ([697d211](https://github.com/Finch-API/finch-api-node/commit/697d211b9600d388aa101879ac6c400e4eb4ac53)) +* **internal:** codegen related update ([ac835bf](https://github.com/Finch-API/finch-api-node/commit/ac835bf6af93d53e551d73001d048baa95e1c334)) +* **internal:** fix incremental formatting in some cases ([40ecf6a](https://github.com/Finch-API/finch-api-node/commit/40ecf6a887ea44d156672f155abf70ab2d146921)) +* **internal:** gitignore .mcpb files ([73c778e](https://github.com/Finch-API/finch-api-node/commit/73c778e3b9d157f8296c43131cd0db764d5086bc)) +* **internal:** ignore .eslintcache ([4d90156](https://github.com/Finch-API/finch-api-node/commit/4d901569e987fa9c93c12ae77844972b4655fa8f)) +* **internal:** remove .eslintcache ([64d2197](https://github.com/Finch-API/finch-api-node/commit/64d21976509a6d6b6d0095bf1867ad9bdd153e03)) +* **internal:** remove deprecated `compilerOptions.baseUrl` from tsconfig.json ([5955e29](https://github.com/Finch-API/finch-api-node/commit/5955e291311d6d8192a3e8c3eb87f4eac9bdbdbc)) +* **internal:** use npm pack for build uploads ([7df5a28](https://github.com/Finch-API/finch-api-node/commit/7df5a28a1be002645785fa2d59cd94da5df28889)) +* **mcp:** allow pointing `docs_search` tool at other URLs ([bb7f182](https://github.com/Finch-API/finch-api-node/commit/bb7f182ef3959a99a7728cdab685d972e4110756)) +* **mcp:** rename dxt to mcpb ([68a9c07](https://github.com/Finch-API/finch-api-node/commit/68a9c079dfb35ab661f58780405036399fbaf31e)) +* **mcp:** upload dxt as release asset ([256c717](https://github.com/Finch-API/finch-api-node/commit/256c717c7eb0bd947322b14d85fc15cd7f919724)) +* update CI script ([47843c8](https://github.com/Finch-API/finch-api-node/commit/47843c85864215c19edd9826952bd625e79ca78c)) +* update lockfile ([0601d2a](https://github.com/Finch-API/finch-api-node/commit/0601d2aca7eeb80b8967d3bc89dea5b5ab527565)) + ## 6.37.0 (2025-08-21) Full Changelog: [v6.36.0...v6.37.0](https://github.com/Finch-API/finch-api-node/compare/v6.36.0...v6.37.0) diff --git a/package.json b/package.json index ef7d34037..a88f5e6a3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@tryfinch/finch-api", - "version": "6.37.0", + "version": "6.38.0", "description": "The official TypeScript library for the Finch API", "author": "Finch ", "types": "dist/index.d.ts", diff --git a/packages/mcp-server/package.json b/packages/mcp-server/package.json index a09f0a7bd..3f3f0a6cf 100644 --- a/packages/mcp-server/package.json +++ b/packages/mcp-server/package.json @@ -1,6 +1,6 @@ { "name": "@tryfinch/finch-api-mcp", - "version": "6.37.0", + "version": "6.38.0", "description": "The official MCP Server for the Finch API", "author": "Finch ", "types": "dist/index.d.ts", diff --git a/packages/mcp-server/src/server.ts b/packages/mcp-server/src/server.ts index 8e579cb0c..bd37d253b 100644 --- a/packages/mcp-server/src/server.ts +++ b/packages/mcp-server/src/server.ts @@ -33,7 +33,7 @@ export const newMcpServer = () => new McpServer( { name: 'tryfinch_finch_api_api', - version: '6.37.0', + version: '6.38.0', }, { capabilities: { tools: {}, logging: {} } }, ); diff --git a/src/version.ts b/src/version.ts index b381c68ff..1422fd54f 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1 +1 @@ -export const VERSION = '6.37.0'; // x-release-please-version +export const VERSION = '6.38.0'; // x-release-please-version