/* * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ import { GustoEmbeddedCore } from "../core.js"; import { encodeJSON, encodeSimple } from "../lib/encodings.js"; import { matchStatusCode } from "../lib/http.js"; import * as M from "../lib/matchers.js"; import { compactMap } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; import { RequestOptions } from "../lib/sdks.js"; import { resolveSecurity } from "../lib/security.js"; import { pathToFunc } from "../lib/url.js"; import { GustoEmbeddedError } from "../models/errors/gustoembeddederror.js"; import { ConnectionError, InvalidRequestError, RequestAbortedError, RequestTimeoutError, UnexpectedClientError, } from "../models/errors/httpclienterrors.js"; import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; import { UnprocessableEntityError, UnprocessableEntityError$inboundSchema, } from "../models/errors/unprocessableentityerror.js"; import { PostV1PartnerManagedCompaniesRequest, PostV1PartnerManagedCompaniesRequest$outboundSchema, PostV1PartnerManagedCompaniesResponse, PostV1PartnerManagedCompaniesResponse$inboundSchema, PostV1PartnerManagedCompaniesSecurity, } from "../models/operations/postv1partnermanagedcompanies.js"; import { APICall, APIPromise } from "../types/async.js"; import { Result } from "../types/fp.js"; /** * Create a partner managed company * * @remarks * Create a partner managed company. When you successfully call the API, it does the following: * * Creates a new company in Gusto * * Creates a new user using the provided email if the user does not already exist. * * Makes the user the primary payroll administrator of the new company. * * In response, you will receive oauth access tokens for the created company. * * IMPORTANT: the returned access and refresh tokens are reserved for this company only. They cannot be used to access other companies AND previously granted tokens cannot be used to access this company. * * 📘 System Access Authentication * * This endpoint uses the [Bearer Auth scheme with the system-level access token in the HTTP Authorization header](https://docs.gusto.com/embedded-payroll/docs/system-access) * * scope: `partner_managed_companies:manage` */ export function companiesCreatePartnerManaged( client: GustoEmbeddedCore, security: PostV1PartnerManagedCompaniesSecurity, request: PostV1PartnerManagedCompaniesRequest, options?: RequestOptions, ): APIPromise< Result< PostV1PartnerManagedCompaniesResponse, | UnprocessableEntityError | GustoEmbeddedError | ResponseValidationError | ConnectionError | RequestAbortedError | RequestTimeoutError | InvalidRequestError | UnexpectedClientError | SDKValidationError > > { return new APIPromise($do( client, security, request, options, )); } async function $do( client: GustoEmbeddedCore, security: PostV1PartnerManagedCompaniesSecurity, request: PostV1PartnerManagedCompaniesRequest, options?: RequestOptions, ): Promise< [ Result< PostV1PartnerManagedCompaniesResponse, | UnprocessableEntityError | GustoEmbeddedError | ResponseValidationError | ConnectionError | RequestAbortedError | RequestTimeoutError | InvalidRequestError | UnexpectedClientError | SDKValidationError >, APICall, ] > { const parsed = safeParse( request, (value) => PostV1PartnerManagedCompaniesRequest$outboundSchema.parse(value), "Input validation failed", ); if (!parsed.ok) { return [parsed, { status: "invalid" }]; } const payload = parsed.value; const body = encodeJSON( "body", payload["Partner-Managed-Company-Create-Request"], { explode: true }, ); const path = pathToFunc("/v1/partner_managed_companies")(); const headers = new Headers(compactMap({ "Content-Type": "application/json", Accept: "application/json", "X-Gusto-API-Version": encodeSimple( "X-Gusto-API-Version", payload["X-Gusto-API-Version"], { explode: false, charEncoding: "none" }, ), })); const requestSecurity = resolveSecurity( [ { fieldName: "Authorization", type: "http:bearer", value: security?.systemAccessAuth, }, ], ); const context = { options: client._options, baseURL: options?.serverURL ?? client._baseURL ?? "", operationID: "post-v1-partner-managed-companies", oAuth2Scopes: null, resolvedSecurity: requestSecurity, securitySource: security, retryConfig: options?.retries || client._options.retryConfig || { strategy: "none" }, retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], }; const requestRes = client._createRequest(context, { security: requestSecurity, method: "POST", baseURL: options?.serverURL, path: path, headers: headers, body: body, userAgent: client._options.userAgent, timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, }, options); if (!requestRes.ok) { return [requestRes, { status: "invalid" }]; } const req = requestRes.value; const doResult = await client._do(req, { context, isErrorStatusCode: (statusCode: number) => matchStatusCode({ status: statusCode } as Response, ["4XX", "5XX"]), retryConfig: context.retryConfig, retryCodes: context.retryCodes, }); if (!doResult.ok) { return [doResult, { status: "request-error", request: req }]; } const response = doResult.value; const responseFields = { HttpMeta: { Response: response, Request: req }, }; const [result] = await M.match< PostV1PartnerManagedCompaniesResponse, | UnprocessableEntityError | GustoEmbeddedError | ResponseValidationError | ConnectionError | RequestAbortedError | RequestTimeoutError | InvalidRequestError | UnexpectedClientError | SDKValidationError >( M.json(200, PostV1PartnerManagedCompaniesResponse$inboundSchema, { key: "Partner-Managed-Company", }), M.jsonErr(422, UnprocessableEntityError$inboundSchema), M.fail("4XX"), M.fail("5XX"), )(response, req, { extraFields: responseFields }); if (!result.ok) { return [result, { status: "complete", request: req, response }]; } return [result, { status: "complete", request: req, response }]; }