petstormcp-cliente 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +282 -0
- package/bin/mcp-server.js +57927 -0
- package/bin/mcp-server.js.map +455 -0
- package/esm/core.d.ts +10 -0
- package/esm/core.d.ts.map +1 -0
- package/esm/core.js +13 -0
- package/esm/core.js.map +1 -0
- package/esm/funcs/petsAdd.d.ts +16 -0
- package/esm/funcs/petsAdd.d.ts.map +1 -0
- package/esm/funcs/petsAdd.js +82 -0
- package/esm/funcs/petsAdd.js.map +1 -0
- package/esm/funcs/petsDelete.d.ts +13 -0
- package/esm/funcs/petsDelete.d.ts.map +1 -0
- package/esm/funcs/petsDelete.js +88 -0
- package/esm/funcs/petsDelete.js.map +1 -0
- package/esm/funcs/petsFindByStatus.d.ts +16 -0
- package/esm/funcs/petsFindByStatus.d.ts.map +1 -0
- package/esm/funcs/petsFindByStatus.js +85 -0
- package/esm/funcs/petsFindByStatus.js.map +1 -0
- package/esm/funcs/petsFindByTags.d.ts +16 -0
- package/esm/funcs/petsFindByTags.d.ts.map +1 -0
- package/esm/funcs/petsFindByTags.js +85 -0
- package/esm/funcs/petsFindByTags.js.map +1 -0
- package/esm/funcs/petsGetById.d.ts +16 -0
- package/esm/funcs/petsGetById.d.ts.map +1 -0
- package/esm/funcs/petsGetById.js +87 -0
- package/esm/funcs/petsGetById.js.map +1 -0
- package/esm/funcs/petsUpdate.d.ts +16 -0
- package/esm/funcs/petsUpdate.d.ts.map +1 -0
- package/esm/funcs/petsUpdate.js +82 -0
- package/esm/funcs/petsUpdate.js.map +1 -0
- package/esm/funcs/petsUploadImage.d.ts +13 -0
- package/esm/funcs/petsUploadImage.d.ts.map +1 -0
- package/esm/funcs/petsUploadImage.js +89 -0
- package/esm/funcs/petsUploadImage.js.map +1 -0
- package/esm/funcs/storeOrdersDelete.d.ts +16 -0
- package/esm/funcs/storeOrdersDelete.d.ts.map +1 -0
- package/esm/funcs/storeOrdersDelete.js +87 -0
- package/esm/funcs/storeOrdersDelete.js.map +1 -0
- package/esm/funcs/storesGetInventory.d.ts +15 -0
- package/esm/funcs/storesGetInventory.d.ts.map +1 -0
- package/esm/funcs/storesGetInventory.js +71 -0
- package/esm/funcs/storesGetInventory.js.map +1 -0
- package/esm/funcs/storesOrdersGetById.d.ts +16 -0
- package/esm/funcs/storesOrdersGetById.d.ts.map +1 -0
- package/esm/funcs/storesOrdersGetById.js +87 -0
- package/esm/funcs/storesOrdersGetById.js.map +1 -0
- package/esm/funcs/storesOrdersPlace.d.ts +16 -0
- package/esm/funcs/storesOrdersPlace.d.ts.map +1 -0
- package/esm/funcs/storesOrdersPlace.js +84 -0
- package/esm/funcs/storesOrdersPlace.js.map +1 -0
- package/esm/funcs/usersCreate.d.ts +16 -0
- package/esm/funcs/usersCreate.d.ts.map +1 -0
- package/esm/funcs/usersCreate.js +84 -0
- package/esm/funcs/usersCreate.js.map +1 -0
- package/esm/funcs/usersCreateWithList.d.ts +16 -0
- package/esm/funcs/usersCreateWithList.d.ts.map +1 -0
- package/esm/funcs/usersCreateWithList.js +85 -0
- package/esm/funcs/usersCreateWithList.js.map +1 -0
- package/esm/funcs/usersDelete.d.ts +16 -0
- package/esm/funcs/usersDelete.d.ts.map +1 -0
- package/esm/funcs/usersDelete.js +87 -0
- package/esm/funcs/usersDelete.js.map +1 -0
- package/esm/funcs/usersGetByName.d.ts +13 -0
- package/esm/funcs/usersGetByName.d.ts.map +1 -0
- package/esm/funcs/usersGetByName.js +84 -0
- package/esm/funcs/usersGetByName.js.map +1 -0
- package/esm/funcs/usersLogin.d.ts +13 -0
- package/esm/funcs/usersLogin.d.ts.map +1 -0
- package/esm/funcs/usersLogin.js +83 -0
- package/esm/funcs/usersLogin.js.map +1 -0
- package/esm/funcs/usersLogout.d.ts +12 -0
- package/esm/funcs/usersLogout.d.ts.map +1 -0
- package/esm/funcs/usersLogout.js +68 -0
- package/esm/funcs/usersLogout.js.map +1 -0
- package/esm/funcs/usersUpdate.d.ts +16 -0
- package/esm/funcs/usersUpdate.d.ts.map +1 -0
- package/esm/funcs/usersUpdate.js +88 -0
- package/esm/funcs/usersUpdate.js.map +1 -0
- package/esm/hooks/hooks.d.ts +25 -0
- package/esm/hooks/hooks.d.ts.map +1 -0
- package/esm/hooks/hooks.js +80 -0
- package/esm/hooks/hooks.js.map +1 -0
- package/esm/hooks/types.d.ts +76 -0
- package/esm/hooks/types.d.ts.map +1 -0
- package/esm/hooks/types.js +5 -0
- package/esm/hooks/types.js.map +1 -0
- package/esm/landing-page.d.ts +5 -0
- package/esm/landing-page.d.ts.map +1 -0
- package/esm/landing-page.js +1055 -0
- package/esm/landing-page.js.map +1 -0
- package/esm/lib/base64.d.ts +10 -0
- package/esm/lib/base64.d.ts.map +1 -0
- package/esm/lib/base64.js +29 -0
- package/esm/lib/base64.js.map +1 -0
- package/esm/lib/config.d.ts +65 -0
- package/esm/lib/config.d.ts.map +1 -0
- package/esm/lib/config.js +54 -0
- package/esm/lib/config.js.map +1 -0
- package/esm/lib/dlv.d.ts +14 -0
- package/esm/lib/dlv.d.ts.map +1 -0
- package/esm/lib/dlv.js +46 -0
- package/esm/lib/dlv.js.map +1 -0
- package/esm/lib/encodings.d.ts +52 -0
- package/esm/lib/encodings.d.ts.map +1 -0
- package/esm/lib/encodings.js +383 -0
- package/esm/lib/encodings.js.map +1 -0
- package/esm/lib/env.d.ts +15 -0
- package/esm/lib/env.d.ts.map +1 -0
- package/esm/lib/env.js +27 -0
- package/esm/lib/env.js.map +1 -0
- package/esm/lib/files.d.ts +26 -0
- package/esm/lib/files.d.ts.map +1 -0
- package/esm/lib/files.js +91 -0
- package/esm/lib/files.js.map +1 -0
- package/esm/lib/http.d.ts +67 -0
- package/esm/lib/http.d.ts.map +1 -0
- package/esm/lib/http.js +209 -0
- package/esm/lib/http.js.map +1 -0
- package/esm/lib/is-plain-object.d.ts +2 -0
- package/esm/lib/is-plain-object.d.ts.map +1 -0
- package/esm/lib/is-plain-object.js +38 -0
- package/esm/lib/is-plain-object.js.map +1 -0
- package/esm/lib/logger.d.ts +6 -0
- package/esm/lib/logger.d.ts.map +1 -0
- package/esm/lib/logger.js +5 -0
- package/esm/lib/logger.js.map +1 -0
- package/esm/lib/primitives.d.ts +11 -0
- package/esm/lib/primitives.d.ts.map +1 -0
- package/esm/lib/primitives.js +81 -0
- package/esm/lib/primitives.js.map +1 -0
- package/esm/lib/result.d.ts +31 -0
- package/esm/lib/result.d.ts.map +1 -0
- package/esm/lib/result.js +31 -0
- package/esm/lib/result.js.map +1 -0
- package/esm/lib/retries.d.ts +38 -0
- package/esm/lib/retries.d.ts.map +1 -0
- package/esm/lib/retries.js +150 -0
- package/esm/lib/retries.js.map +1 -0
- package/esm/lib/schemas.d.ts +19 -0
- package/esm/lib/schemas.d.ts.map +1 -0
- package/esm/lib/schemas.js +57 -0
- package/esm/lib/schemas.js.map +1 -0
- package/esm/lib/sdks.d.ts +63 -0
- package/esm/lib/sdks.d.ts.map +1 -0
- package/esm/lib/sdks.js +258 -0
- package/esm/lib/sdks.js.map +1 -0
- package/esm/lib/security.d.ts +83 -0
- package/esm/lib/security.d.ts.map +1 -0
- package/esm/lib/security.js +149 -0
- package/esm/lib/security.js.map +1 -0
- package/esm/lib/url.d.ts +5 -0
- package/esm/lib/url.d.ts.map +1 -0
- package/esm/lib/url.js +22 -0
- package/esm/lib/url.js.map +1 -0
- package/esm/mcp-server/cli/serve/command.d.ts +2 -0
- package/esm/mcp-server/cli/serve/command.d.ts.map +1 -0
- package/esm/mcp-server/cli/serve/command.js +108 -0
- package/esm/mcp-server/cli/serve/command.js.map +1 -0
- package/esm/mcp-server/cli/serve/impl.d.ts +12 -0
- package/esm/mcp-server/cli/serve/impl.d.ts.map +1 -0
- package/esm/mcp-server/cli/serve/impl.js +84 -0
- package/esm/mcp-server/cli/serve/impl.js.map +1 -0
- package/esm/mcp-server/cli/start/command.d.ts +2 -0
- package/esm/mcp-server/cli/start/command.d.ts.map +1 -0
- package/esm/mcp-server/cli/start/command.js +109 -0
- package/esm/mcp-server/cli/start/command.js.map +1 -0
- package/esm/mcp-server/cli/start/impl.d.ts +12 -0
- package/esm/mcp-server/cli/start/impl.d.ts.map +1 -0
- package/esm/mcp-server/cli/start/impl.js +160 -0
- package/esm/mcp-server/cli/start/impl.js.map +1 -0
- package/esm/mcp-server/cli.d.ts +6 -0
- package/esm/mcp-server/cli.d.ts.map +1 -0
- package/esm/mcp-server/cli.js +7 -0
- package/esm/mcp-server/cli.js.map +1 -0
- package/esm/mcp-server/console-logger.d.ts +9 -0
- package/esm/mcp-server/console-logger.d.ts.map +1 -0
- package/esm/mcp-server/console-logger.js +56 -0
- package/esm/mcp-server/console-logger.js.map +1 -0
- package/esm/mcp-server/extensions.d.ts +11 -0
- package/esm/mcp-server/extensions.d.ts.map +1 -0
- package/esm/mcp-server/extensions.js +5 -0
- package/esm/mcp-server/extensions.js.map +1 -0
- package/esm/mcp-server/flags.d.ts +15 -0
- package/esm/mcp-server/flags.d.ts.map +1 -0
- package/esm/mcp-server/flags.js +5 -0
- package/esm/mcp-server/flags.js.map +1 -0
- package/esm/mcp-server/mcp-server.d.ts +2 -0
- package/esm/mcp-server/mcp-server.d.ts.map +1 -0
- package/esm/mcp-server/mcp-server.js +25 -0
- package/esm/mcp-server/mcp-server.js.map +1 -0
- package/esm/mcp-server/prompts.d.ts +23 -0
- package/esm/mcp-server/prompts.d.ts.map +1 -0
- package/esm/mcp-server/prompts.js +47 -0
- package/esm/mcp-server/prompts.js.map +1 -0
- package/esm/mcp-server/resources.d.ts +31 -0
- package/esm/mcp-server/resources.d.ts.map +1 -0
- package/esm/mcp-server/resources.js +55 -0
- package/esm/mcp-server/resources.js.map +1 -0
- package/esm/mcp-server/scopes.d.ts +3 -0
- package/esm/mcp-server/scopes.d.ts.map +1 -0
- package/esm/mcp-server/scopes.js +5 -0
- package/esm/mcp-server/scopes.js.map +1 -0
- package/esm/mcp-server/server.d.ts +25 -0
- package/esm/mcp-server/server.d.ts.map +1 -0
- package/esm/mcp-server/server.js +76 -0
- package/esm/mcp-server/server.js.map +1 -0
- package/esm/mcp-server/shared.d.ts +8 -0
- package/esm/mcp-server/shared.d.ts.map +1 -0
- package/esm/mcp-server/shared.js +61 -0
- package/esm/mcp-server/shared.js.map +1 -0
- package/esm/mcp-server/tools/petsAdd.d.ts +7 -0
- package/esm/mcp-server/tools/petsAdd.d.ts.map +1 -0
- package/esm/mcp-server/tools/petsAdd.js +34 -0
- package/esm/mcp-server/tools/petsAdd.js.map +1 -0
- package/esm/mcp-server/tools/petsDelete.d.ts +7 -0
- package/esm/mcp-server/tools/petsDelete.d.ts.map +1 -0
- package/esm/mcp-server/tools/petsDelete.js +32 -0
- package/esm/mcp-server/tools/petsDelete.js.map +1 -0
- package/esm/mcp-server/tools/petsFindByStatus.d.ts +7 -0
- package/esm/mcp-server/tools/petsFindByStatus.d.ts.map +1 -0
- package/esm/mcp-server/tools/petsFindByStatus.js +34 -0
- package/esm/mcp-server/tools/petsFindByStatus.js.map +1 -0
- package/esm/mcp-server/tools/petsFindByTags.d.ts +7 -0
- package/esm/mcp-server/tools/petsFindByTags.d.ts.map +1 -0
- package/esm/mcp-server/tools/petsFindByTags.js +34 -0
- package/esm/mcp-server/tools/petsFindByTags.js.map +1 -0
- package/esm/mcp-server/tools/petsGetById.d.ts +7 -0
- package/esm/mcp-server/tools/petsGetById.d.ts.map +1 -0
- package/esm/mcp-server/tools/petsGetById.js +34 -0
- package/esm/mcp-server/tools/petsGetById.js.map +1 -0
- package/esm/mcp-server/tools/petsUpdate.d.ts +7 -0
- package/esm/mcp-server/tools/petsUpdate.d.ts.map +1 -0
- package/esm/mcp-server/tools/petsUpdate.js +34 -0
- package/esm/mcp-server/tools/petsUpdate.js.map +1 -0
- package/esm/mcp-server/tools/petsUploadImage.d.ts +7 -0
- package/esm/mcp-server/tools/petsUploadImage.d.ts.map +1 -0
- package/esm/mcp-server/tools/petsUploadImage.js +32 -0
- package/esm/mcp-server/tools/petsUploadImage.js.map +1 -0
- package/esm/mcp-server/tools/storeOrdersDelete.d.ts +7 -0
- package/esm/mcp-server/tools/storeOrdersDelete.d.ts.map +1 -0
- package/esm/mcp-server/tools/storeOrdersDelete.js +34 -0
- package/esm/mcp-server/tools/storeOrdersDelete.js.map +1 -0
- package/esm/mcp-server/tools/storesGetInventory.d.ts +3 -0
- package/esm/mcp-server/tools/storesGetInventory.d.ts.map +1 -0
- package/esm/mcp-server/tools/storesGetInventory.js +29 -0
- package/esm/mcp-server/tools/storesGetInventory.js.map +1 -0
- package/esm/mcp-server/tools/storesOrdersGetById.d.ts +7 -0
- package/esm/mcp-server/tools/storesOrdersGetById.d.ts.map +1 -0
- package/esm/mcp-server/tools/storesOrdersGetById.js +34 -0
- package/esm/mcp-server/tools/storesOrdersGetById.js.map +1 -0
- package/esm/mcp-server/tools/storesOrdersPlace.d.ts +7 -0
- package/esm/mcp-server/tools/storesOrdersPlace.d.ts.map +1 -0
- package/esm/mcp-server/tools/storesOrdersPlace.js +34 -0
- package/esm/mcp-server/tools/storesOrdersPlace.js.map +1 -0
- package/esm/mcp-server/tools/usersCreate.d.ts +7 -0
- package/esm/mcp-server/tools/usersCreate.d.ts.map +1 -0
- package/esm/mcp-server/tools/usersCreate.js +34 -0
- package/esm/mcp-server/tools/usersCreate.js.map +1 -0
- package/esm/mcp-server/tools/usersCreateWithList.d.ts +8 -0
- package/esm/mcp-server/tools/usersCreateWithList.d.ts.map +1 -0
- package/esm/mcp-server/tools/usersCreateWithList.js +35 -0
- package/esm/mcp-server/tools/usersCreateWithList.js.map +1 -0
- package/esm/mcp-server/tools/usersDelete.d.ts +7 -0
- package/esm/mcp-server/tools/usersDelete.d.ts.map +1 -0
- package/esm/mcp-server/tools/usersDelete.js +34 -0
- package/esm/mcp-server/tools/usersDelete.js.map +1 -0
- package/esm/mcp-server/tools/usersGetByName.d.ts +7 -0
- package/esm/mcp-server/tools/usersGetByName.d.ts.map +1 -0
- package/esm/mcp-server/tools/usersGetByName.js +32 -0
- package/esm/mcp-server/tools/usersGetByName.js.map +1 -0
- package/esm/mcp-server/tools/usersLogin.d.ts +7 -0
- package/esm/mcp-server/tools/usersLogin.d.ts.map +1 -0
- package/esm/mcp-server/tools/usersLogin.js +32 -0
- package/esm/mcp-server/tools/usersLogin.js.map +1 -0
- package/esm/mcp-server/tools/usersLogout.d.ts +3 -0
- package/esm/mcp-server/tools/usersLogout.d.ts.map +1 -0
- package/esm/mcp-server/tools/usersLogout.js +27 -0
- package/esm/mcp-server/tools/usersLogout.js.map +1 -0
- package/esm/mcp-server/tools/usersUpdate.d.ts +7 -0
- package/esm/mcp-server/tools/usersUpdate.d.ts.map +1 -0
- package/esm/mcp-server/tools/usersUpdate.js +34 -0
- package/esm/mcp-server/tools/usersUpdate.js.map +1 -0
- package/esm/mcp-server/tools.d.ts +56 -0
- package/esm/mcp-server/tools.d.ts.map +1 -0
- package/esm/mcp-server/tools.js +324 -0
- package/esm/mcp-server/tools.js.map +1 -0
- package/esm/models/apierrorinvalidinput.d.ts +10 -0
- package/esm/models/apierrorinvalidinput.d.ts.map +1 -0
- package/esm/models/apierrorinvalidinput.js +10 -0
- package/esm/models/apierrorinvalidinput.js.map +1 -0
- package/esm/models/apierrornotfound.d.ts +11 -0
- package/esm/models/apierrornotfound.d.ts.map +1 -0
- package/esm/models/apierrornotfound.js +10 -0
- package/esm/models/apierrornotfound.js.map +1 -0
- package/esm/models/apierrorunauthorized.d.ts +10 -0
- package/esm/models/apierrorunauthorized.d.ts.map +1 -0
- package/esm/models/apierrorunauthorized.js +10 -0
- package/esm/models/apierrorunauthorized.js.map +1 -0
- package/esm/models/apiresponse.d.ts +8 -0
- package/esm/models/apiresponse.d.ts.map +1 -0
- package/esm/models/apiresponse.js +10 -0
- package/esm/models/apiresponse.js.map +1 -0
- package/esm/models/category.d.ts +7 -0
- package/esm/models/category.d.ts.map +1 -0
- package/esm/models/category.js +9 -0
- package/esm/models/category.js.map +1 -0
- package/esm/models/deleteorderop.d.ts +12 -0
- package/esm/models/deleteorderop.d.ts.map +1 -0
- package/esm/models/deleteorderop.js +20 -0
- package/esm/models/deleteorderop.js.map +1 -0
- package/esm/models/deletepetop.d.ts +13 -0
- package/esm/models/deletepetop.d.ts.map +1 -0
- package/esm/models/deletepetop.js +20 -0
- package/esm/models/deletepetop.js.map +1 -0
- package/esm/models/deleteuserop.d.ts +12 -0
- package/esm/models/deleteuserop.d.ts.map +1 -0
- package/esm/models/deleteuserop.js +20 -0
- package/esm/models/deleteuserop.js.map +1 -0
- package/esm/models/errors/apierror.d.ts +13 -0
- package/esm/models/errors/apierror.d.ts.map +1 -0
- package/esm/models/errors/apierror.js +12 -0
- package/esm/models/errors/apierror.js.map +1 -0
- package/esm/models/errors/httpclienterrors.d.ts +44 -0
- package/esm/models/errors/httpclienterrors.d.ts.map +1 -0
- package/esm/models/errors/httpclienterrors.js +56 -0
- package/esm/models/errors/httpclienterrors.js.map +1 -0
- package/esm/models/errors/sdkvalidationerror.d.ts +20 -0
- package/esm/models/errors/sdkvalidationerror.d.ts.map +1 -0
- package/esm/models/errors/sdkvalidationerror.js +38 -0
- package/esm/models/errors/sdkvalidationerror.js.map +1 -0
- package/esm/models/findpetsbystatusop.d.ts +30 -0
- package/esm/models/findpetsbystatusop.d.ts.map +1 -0
- package/esm/models/findpetsbystatusop.js +31 -0
- package/esm/models/findpetsbystatusop.js.map +1 -0
- package/esm/models/findpetsbytagsop.d.ts +12 -0
- package/esm/models/findpetsbytagsop.d.ts.map +1 -0
- package/esm/models/findpetsbytagsop.js +18 -0
- package/esm/models/findpetsbytagsop.js.map +1 -0
- package/esm/models/getinventoryop.d.ts +8 -0
- package/esm/models/getinventoryop.d.ts.map +1 -0
- package/esm/models/getinventoryop.js +13 -0
- package/esm/models/getinventoryop.js.map +1 -0
- package/esm/models/getorderbyidop.d.ts +12 -0
- package/esm/models/getorderbyidop.d.ts.map +1 -0
- package/esm/models/getorderbyidop.js +20 -0
- package/esm/models/getorderbyidop.js.map +1 -0
- package/esm/models/getpetbyidop.d.ts +12 -0
- package/esm/models/getpetbyidop.d.ts.map +1 -0
- package/esm/models/getpetbyidop.js +20 -0
- package/esm/models/getpetbyidop.js.map +1 -0
- package/esm/models/getuserbynameop.d.ts +12 -0
- package/esm/models/getuserbynameop.d.ts.map +1 -0
- package/esm/models/getuserbynameop.js +19 -0
- package/esm/models/getuserbynameop.js.map +1 -0
- package/esm/models/loginuserop.d.ts +19 -0
- package/esm/models/loginuserop.d.ts.map +1 -0
- package/esm/models/loginuserop.js +29 -0
- package/esm/models/loginuserop.js.map +1 -0
- package/esm/models/order.d.ts +29 -0
- package/esm/models/order.d.ts.map +1 -0
- package/esm/models/order.js +26 -0
- package/esm/models/order.js.map +1 -0
- package/esm/models/pet.d.ts +31 -0
- package/esm/models/pet.d.ts.map +1 -0
- package/esm/models/pet.js +28 -0
- package/esm/models/pet.js.map +1 -0
- package/esm/models/placeorderop.d.ts +7 -0
- package/esm/models/placeorderop.d.ts.map +1 -0
- package/esm/models/placeorderop.js +14 -0
- package/esm/models/placeorderop.js.map +1 -0
- package/esm/models/security.d.ts +6 -0
- package/esm/models/security.d.ts.map +1 -0
- package/esm/models/security.js +8 -0
- package/esm/models/security.js.map +1 -0
- package/esm/models/tag.d.ts +7 -0
- package/esm/models/tag.d.ts.map +1 -0
- package/esm/models/tag.js +9 -0
- package/esm/models/tag.js.map +1 -0
- package/esm/models/updatepetop.d.ts +8 -0
- package/esm/models/updatepetop.d.ts.map +1 -0
- package/esm/models/updatepetop.js +16 -0
- package/esm/models/updatepetop.js.map +1 -0
- package/esm/models/updateuserop.d.ts +8 -0
- package/esm/models/updateuserop.d.ts.map +1 -0
- package/esm/models/updateuserop.js +11 -0
- package/esm/models/updateuserop.js.map +1 -0
- package/esm/models/uploadfileop.d.ts +8 -0
- package/esm/models/uploadfileop.d.ts.map +1 -0
- package/esm/models/uploadfileop.js +12 -0
- package/esm/models/uploadfileop.js.map +1 -0
- package/esm/models/user.d.ts +13 -0
- package/esm/models/user.d.ts.map +1 -0
- package/esm/models/user.js +15 -0
- package/esm/models/user.js.map +1 -0
- package/esm/tool-names.d.ts +5 -0
- package/esm/tool-names.d.ts.map +1 -0
- package/esm/tool-names.js +76 -0
- package/esm/tool-names.js.map +1 -0
- package/esm/types/async.d.ts +23 -0
- package/esm/types/async.d.ts.map +1 -0
- package/esm/types/async.js +28 -0
- package/esm/types/async.js.map +1 -0
- package/esm/types/bigint.d.ts +6 -0
- package/esm/types/bigint.d.ts.map +1 -0
- package/esm/types/bigint.js +87 -0
- package/esm/types/bigint.js.map +1 -0
- package/esm/types/blobs.d.ts +2 -0
- package/esm/types/blobs.d.ts.map +1 -0
- package/esm/types/blobs.js +20 -0
- package/esm/types/blobs.js.map +1 -0
- package/esm/types/enums.d.ts +12 -0
- package/esm/types/enums.d.ts.map +1 -0
- package/esm/types/enums.js +7 -0
- package/esm/types/enums.js.map +1 -0
- package/esm/types/fp.d.ts +31 -0
- package/esm/types/fp.d.ts.map +1 -0
- package/esm/types/fp.js +31 -0
- package/esm/types/fp.js.map +1 -0
- package/esm/types/rfcdate.d.ts +21 -0
- package/esm/types/rfcdate.d.ts.map +1 -0
- package/esm/types/rfcdate.js +43 -0
- package/esm/types/rfcdate.js.map +1 -0
- package/esm/types/streams.d.ts +2 -0
- package/esm/types/streams.d.ts.map +1 -0
- package/esm/types/streams.js +15 -0
- package/esm/types/streams.js.map +1 -0
- package/package.json +43 -0
- package/src/core.ts +13 -0
- package/src/funcs/petsAdd.ts +141 -0
- package/src/funcs/petsDelete.ts +153 -0
- package/src/funcs/petsFindByStatus.ts +147 -0
- package/src/funcs/petsFindByTags.ts +147 -0
- package/src/funcs/petsGetById.ts +152 -0
- package/src/funcs/petsUpdate.ts +141 -0
- package/src/funcs/petsUploadImage.ts +154 -0
- package/src/funcs/storeOrdersDelete.ts +152 -0
- package/src/funcs/storesGetInventory.ts +123 -0
- package/src/funcs/storesOrdersGetById.ts +152 -0
- package/src/funcs/storesOrdersPlace.ts +143 -0
- package/src/funcs/usersCreate.ts +143 -0
- package/src/funcs/usersCreateWithList.ts +144 -0
- package/src/funcs/usersDelete.ts +152 -0
- package/src/funcs/usersGetByName.ts +149 -0
- package/src/funcs/usersLogin.ts +145 -0
- package/src/funcs/usersLogout.ts +120 -0
- package/src/funcs/usersUpdate.ts +153 -0
- package/src/hooks/hooks.ts +130 -0
- package/src/hooks/types.ts +107 -0
- package/src/landing-page.ts +1069 -0
- package/src/lib/base64.ts +37 -0
- package/src/lib/config.ts +103 -0
- package/src/lib/dlv.ts +53 -0
- package/src/lib/encodings.ts +515 -0
- package/src/lib/env.ts +41 -0
- package/src/lib/files.ts +104 -0
- package/src/lib/http.ts +323 -0
- package/src/lib/is-plain-object.ts +43 -0
- package/src/lib/logger.ts +9 -0
- package/src/lib/primitives.ts +113 -0
- package/src/lib/result.ts +50 -0
- package/src/lib/retries.ts +218 -0
- package/src/lib/schemas.ts +79 -0
- package/src/lib/sdks.ts +409 -0
- package/src/lib/security.ts +275 -0
- package/src/lib/url.ts +33 -0
- package/src/mcp-server/cli/serve/command.ts +115 -0
- package/src/mcp-server/cli/serve/impl.ts +113 -0
- package/src/mcp-server/cli/start/command.ts +115 -0
- package/src/mcp-server/cli/start/impl.ts +205 -0
- package/src/mcp-server/cli.ts +13 -0
- package/src/mcp-server/console-logger.ts +76 -0
- package/src/mcp-server/extensions.ts +19 -0
- package/src/mcp-server/flags.ts +19 -0
- package/src/mcp-server/mcp-server.ts +28 -0
- package/src/mcp-server/prompts.ts +111 -0
- package/src/mcp-server/resources.ts +141 -0
- package/src/mcp-server/scopes.ts +7 -0
- package/src/mcp-server/server.ts +123 -0
- package/src/mcp-server/shared.ts +78 -0
- package/src/mcp-server/tools/petsAdd.ts +42 -0
- package/src/mcp-server/tools/petsDelete.ts +40 -0
- package/src/mcp-server/tools/petsFindByStatus.ts +42 -0
- package/src/mcp-server/tools/petsFindByTags.ts +42 -0
- package/src/mcp-server/tools/petsGetById.ts +42 -0
- package/src/mcp-server/tools/petsUpdate.ts +42 -0
- package/src/mcp-server/tools/petsUploadImage.ts +40 -0
- package/src/mcp-server/tools/storeOrdersDelete.ts +42 -0
- package/src/mcp-server/tools/storesGetInventory.ts +35 -0
- package/src/mcp-server/tools/storesOrdersGetById.ts +42 -0
- package/src/mcp-server/tools/storesOrdersPlace.ts +42 -0
- package/src/mcp-server/tools/usersCreate.ts +42 -0
- package/src/mcp-server/tools/usersCreateWithList.ts +43 -0
- package/src/mcp-server/tools/usersDelete.ts +42 -0
- package/src/mcp-server/tools/usersGetByName.ts +40 -0
- package/src/mcp-server/tools/usersLogin.ts +40 -0
- package/src/mcp-server/tools/usersLogout.ts +33 -0
- package/src/mcp-server/tools/usersUpdate.ts +42 -0
- package/src/mcp-server/tools.ts +504 -0
- package/src/models/apierrorinvalidinput.ts +16 -0
- package/src/models/apierrornotfound.ts +18 -0
- package/src/models/apierrorunauthorized.ts +16 -0
- package/src/models/apiresponse.ts +17 -0
- package/src/models/category.ts +12 -0
- package/src/models/deleteorderop.ts +39 -0
- package/src/models/deletepetop.ts +41 -0
- package/src/models/deleteuserop.ts +39 -0
- package/src/models/errors/apierror.ts +21 -0
- package/src/models/errors/httpclienterrors.ts +62 -0
- package/src/models/errors/sdkvalidationerror.ts +42 -0
- package/src/models/findpetsbystatusop.ts +65 -0
- package/src/models/findpetsbytagsop.ts +40 -0
- package/src/models/getinventoryop.ts +24 -0
- package/src/models/getorderbyidop.ts +39 -0
- package/src/models/getpetbyidop.ts +39 -0
- package/src/models/getuserbynameop.ts +41 -0
- package/src/models/loginuserop.ts +65 -0
- package/src/models/order.ts +43 -0
- package/src/models/pet.ts +45 -0
- package/src/models/placeorderop.ts +26 -0
- package/src/models/security.ts +11 -0
- package/src/models/tag.ts +12 -0
- package/src/models/updatepetop.ts +32 -0
- package/src/models/updateuserop.ts +16 -0
- package/src/models/uploadfileop.ts +21 -0
- package/src/models/user.ts +27 -0
- package/src/tool-names.ts +75 -0
- package/src/types/async.ts +68 -0
- package/src/types/bigint.ts +87 -0
- package/src/types/blobs.ts +23 -0
- package/src/types/enums.ts +16 -0
- package/src/types/fp.ts +50 -0
- package/src/types/rfcdate.ts +54 -0
- package/src/types/streams.ts +21 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { isConnectionError, isTimeoutError } from "./http.js";
|
|
6
|
+
|
|
7
|
+
export type BackoffStrategy = {
|
|
8
|
+
initialInterval: number;
|
|
9
|
+
maxInterval: number;
|
|
10
|
+
exponent: number;
|
|
11
|
+
maxElapsedTime: number;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const defaultBackoff: BackoffStrategy = {
|
|
15
|
+
initialInterval: 500,
|
|
16
|
+
maxInterval: 60000,
|
|
17
|
+
exponent: 1.5,
|
|
18
|
+
maxElapsedTime: 3600000,
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export type RetryConfig =
|
|
22
|
+
| { strategy: "none" }
|
|
23
|
+
| {
|
|
24
|
+
strategy: "backoff";
|
|
25
|
+
backoff?: BackoffStrategy;
|
|
26
|
+
retryConnectionErrors?: boolean;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* PermanentError is an error that is not recoverable. Throwing this error will
|
|
31
|
+
* cause a retry loop to terminate.
|
|
32
|
+
*/
|
|
33
|
+
export class PermanentError extends Error {
|
|
34
|
+
/** The underlying cause of the error. */
|
|
35
|
+
override readonly cause: unknown;
|
|
36
|
+
|
|
37
|
+
constructor(message: string, options?: { cause?: unknown }) {
|
|
38
|
+
let msg = message;
|
|
39
|
+
if (options?.cause) {
|
|
40
|
+
msg += `: ${options.cause}`;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
super(msg, options);
|
|
44
|
+
this.name = "PermanentError";
|
|
45
|
+
// In older runtimes, the cause field would not have been assigned through
|
|
46
|
+
// the super() call.
|
|
47
|
+
if (typeof this.cause === "undefined") {
|
|
48
|
+
this.cause = options?.cause;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
Object.setPrototypeOf(this, PermanentError.prototype);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* TemporaryError is an error is used to signal that an HTTP request can be
|
|
57
|
+
* retried as part of a retry loop. If retry attempts are exhausted and this
|
|
58
|
+
* error is thrown, the response will be returned to the caller.
|
|
59
|
+
*/
|
|
60
|
+
export class TemporaryError extends Error {
|
|
61
|
+
response: Response;
|
|
62
|
+
|
|
63
|
+
constructor(message: string, response: Response) {
|
|
64
|
+
super(message);
|
|
65
|
+
this.response = response;
|
|
66
|
+
this.name = "TemporaryError";
|
|
67
|
+
|
|
68
|
+
Object.setPrototypeOf(this, TemporaryError.prototype);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export async function retry(
|
|
73
|
+
fetchFn: () => Promise<Response>,
|
|
74
|
+
options: {
|
|
75
|
+
config: RetryConfig;
|
|
76
|
+
statusCodes: string[];
|
|
77
|
+
},
|
|
78
|
+
): Promise<Response> {
|
|
79
|
+
switch (options.config.strategy) {
|
|
80
|
+
case "backoff":
|
|
81
|
+
return retryBackoff(
|
|
82
|
+
wrapFetcher(fetchFn, {
|
|
83
|
+
statusCodes: options.statusCodes,
|
|
84
|
+
retryConnectionErrors: !!options.config.retryConnectionErrors,
|
|
85
|
+
}),
|
|
86
|
+
options.config.backoff ?? defaultBackoff,
|
|
87
|
+
);
|
|
88
|
+
default:
|
|
89
|
+
return await fetchFn();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function wrapFetcher(
|
|
94
|
+
fn: () => Promise<Response>,
|
|
95
|
+
options: {
|
|
96
|
+
statusCodes: string[];
|
|
97
|
+
retryConnectionErrors: boolean;
|
|
98
|
+
},
|
|
99
|
+
): () => Promise<Response> {
|
|
100
|
+
return async () => {
|
|
101
|
+
try {
|
|
102
|
+
const res = await fn();
|
|
103
|
+
if (isRetryableResponse(res, options.statusCodes)) {
|
|
104
|
+
throw new TemporaryError(
|
|
105
|
+
"Response failed with retryable status code",
|
|
106
|
+
res,
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return res;
|
|
111
|
+
} catch (err: unknown) {
|
|
112
|
+
if (err instanceof TemporaryError) {
|
|
113
|
+
throw err;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (
|
|
117
|
+
options.retryConnectionErrors &&
|
|
118
|
+
(isTimeoutError(err) || isConnectionError(err))
|
|
119
|
+
) {
|
|
120
|
+
throw err;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
throw new PermanentError("Permanent error", { cause: err });
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const codeRangeRE = new RegExp("^[0-9]xx$", "i");
|
|
129
|
+
|
|
130
|
+
function isRetryableResponse(res: Response, statusCodes: string[]): boolean {
|
|
131
|
+
const actual = `${res.status}`;
|
|
132
|
+
|
|
133
|
+
return statusCodes.some((code) => {
|
|
134
|
+
if (!codeRangeRE.test(code)) {
|
|
135
|
+
return code === actual;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const expectFamily = code.charAt(0);
|
|
139
|
+
if (!expectFamily) {
|
|
140
|
+
throw new Error("Invalid status code range");
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const actualFamily = actual.charAt(0);
|
|
144
|
+
if (!actualFamily) {
|
|
145
|
+
throw new Error(`Invalid response status code: ${actual}`);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return actualFamily === expectFamily;
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
async function retryBackoff(
|
|
153
|
+
fn: () => Promise<Response>,
|
|
154
|
+
strategy: BackoffStrategy,
|
|
155
|
+
): Promise<Response> {
|
|
156
|
+
const { maxElapsedTime, initialInterval, exponent, maxInterval } = strategy;
|
|
157
|
+
|
|
158
|
+
const start = Date.now();
|
|
159
|
+
let x = 0;
|
|
160
|
+
|
|
161
|
+
while (true) {
|
|
162
|
+
try {
|
|
163
|
+
const res = await fn();
|
|
164
|
+
return res;
|
|
165
|
+
} catch (err: unknown) {
|
|
166
|
+
if (err instanceof PermanentError) {
|
|
167
|
+
throw err.cause;
|
|
168
|
+
}
|
|
169
|
+
const elapsed = Date.now() - start;
|
|
170
|
+
if (elapsed > maxElapsedTime) {
|
|
171
|
+
if (err instanceof TemporaryError) {
|
|
172
|
+
return err.response;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
throw err;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
let retryInterval = 0;
|
|
179
|
+
if (err instanceof TemporaryError) {
|
|
180
|
+
retryInterval = retryIntervalFromResponse(err.response);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
if (retryInterval <= 0) {
|
|
184
|
+
retryInterval =
|
|
185
|
+
initialInterval * Math.pow(x, exponent) + Math.random() * 1000;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
const d = Math.min(retryInterval, maxInterval);
|
|
189
|
+
|
|
190
|
+
await delay(d);
|
|
191
|
+
x++;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
function retryIntervalFromResponse(res: Response): number {
|
|
197
|
+
const retryVal = res.headers.get("retry-after") || "";
|
|
198
|
+
if (!retryVal) {
|
|
199
|
+
return 0;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
const parsedNumber = Number(retryVal);
|
|
203
|
+
if (Number.isInteger(parsedNumber)) {
|
|
204
|
+
return parsedNumber * 1000;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
const parsedDate = Date.parse(retryVal);
|
|
208
|
+
if (Number.isInteger(parsedDate)) {
|
|
209
|
+
const deltaMS = parsedDate - Date.now();
|
|
210
|
+
return deltaMS > 0 ? Math.ceil(deltaMS) : 0;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
return 0;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
async function delay(delay: number): Promise<void> {
|
|
217
|
+
return new Promise((resolve) => setTimeout(resolve, delay));
|
|
218
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import * as z from "zod";
|
|
6
|
+
import { SDKValidationError } from "../models/errors/sdkvalidationerror.js";
|
|
7
|
+
import { ERR, OK, Result } from "../types/fp.js";
|
|
8
|
+
|
|
9
|
+
export function collectExtraKeys<
|
|
10
|
+
Shape extends z.ZodRawShape,
|
|
11
|
+
Catchall extends z.ZodType,
|
|
12
|
+
K extends string,
|
|
13
|
+
Optional extends boolean,
|
|
14
|
+
>(
|
|
15
|
+
obj: z.ZodObject<Shape, z.core.$catchall<Catchall>>,
|
|
16
|
+
extrasKey: K,
|
|
17
|
+
optional: Optional,
|
|
18
|
+
) {
|
|
19
|
+
return obj.transform((val: any) => {
|
|
20
|
+
const extras: Record<string, z.output<Catchall>> = {};
|
|
21
|
+
const { shape } = obj;
|
|
22
|
+
for (const [key] of Object.entries(val)) {
|
|
23
|
+
if (key in shape) {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const v = val[key];
|
|
28
|
+
if (typeof v === "undefined") {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
extras[key] = v;
|
|
33
|
+
delete val[key];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (optional && Object.keys(extras).length === 0) {
|
|
37
|
+
return val;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return { ...val, [extrasKey]: extras };
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Utility function that executes some code which may throw a ZodError. It
|
|
46
|
+
* intercepts this error and converts it to an SDKValidationError so as to not
|
|
47
|
+
* leak Zod implementation details to user code.
|
|
48
|
+
*/
|
|
49
|
+
export function parse<Inp, Out>(
|
|
50
|
+
rawValue: Inp,
|
|
51
|
+
fn: (value: Inp) => Out,
|
|
52
|
+
errorMessage: string,
|
|
53
|
+
): Out {
|
|
54
|
+
try {
|
|
55
|
+
return fn(rawValue);
|
|
56
|
+
} catch (err) {
|
|
57
|
+
if (err instanceof z.ZodError) {
|
|
58
|
+
throw new SDKValidationError(errorMessage, err, rawValue);
|
|
59
|
+
}
|
|
60
|
+
throw err;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Utility function that executes some code which may result in a ZodError. It
|
|
66
|
+
* intercepts this error and converts it to an SDKValidationError so as to not
|
|
67
|
+
* leak Zod implementation details to user code.
|
|
68
|
+
*/
|
|
69
|
+
export function safeParse<Inp, Out>(
|
|
70
|
+
rawValue: Inp,
|
|
71
|
+
fn: (value: Inp) => Out,
|
|
72
|
+
errorMessage: string,
|
|
73
|
+
): Result<Out, SDKValidationError> {
|
|
74
|
+
try {
|
|
75
|
+
return OK(fn(rawValue));
|
|
76
|
+
} catch (err) {
|
|
77
|
+
return ERR(new SDKValidationError(errorMessage, err, rawValue));
|
|
78
|
+
}
|
|
79
|
+
}
|
package/src/lib/sdks.ts
ADDED
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { SDKHooks } from "../hooks/hooks.js";
|
|
6
|
+
import { HookContext } from "../hooks/types.js";
|
|
7
|
+
import {
|
|
8
|
+
ConnectionError,
|
|
9
|
+
InvalidRequestError,
|
|
10
|
+
RequestAbortedError,
|
|
11
|
+
RequestTimeoutError,
|
|
12
|
+
UnexpectedClientError,
|
|
13
|
+
} from "../models/errors/httpclienterrors.js";
|
|
14
|
+
import { stringToBase64 } from "./base64.js";
|
|
15
|
+
import { SDK_METADATA, SDKOptions, serverURLFromOptions } from "./config.js";
|
|
16
|
+
import { encodeForm } from "./encodings.js";
|
|
17
|
+
import { env } from "./env.js";
|
|
18
|
+
import {
|
|
19
|
+
HTTPClient,
|
|
20
|
+
isAbortError,
|
|
21
|
+
isConnectionError,
|
|
22
|
+
isTimeoutError,
|
|
23
|
+
matchContentType,
|
|
24
|
+
matchStatusCode,
|
|
25
|
+
} from "./http.js";
|
|
26
|
+
import { Logger } from "./logger.js";
|
|
27
|
+
import { ERR, OK, Result } from "./result.js";
|
|
28
|
+
import { retry, RetryConfig } from "./retries.js";
|
|
29
|
+
import { SecurityState } from "./security.js";
|
|
30
|
+
|
|
31
|
+
export type RequestOptions = {
|
|
32
|
+
/**
|
|
33
|
+
* Sets a timeout, in milliseconds, on HTTP requests made by an SDK method. If
|
|
34
|
+
* `fetchOptions.signal` is set then it will take precedence over this option.
|
|
35
|
+
*/
|
|
36
|
+
timeoutMs?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Set or override a retry policy on HTTP calls.
|
|
39
|
+
*/
|
|
40
|
+
retries?: RetryConfig;
|
|
41
|
+
/**
|
|
42
|
+
* Specifies the status codes which should be retried using the given retry policy.
|
|
43
|
+
*/
|
|
44
|
+
retryCodes?: string[];
|
|
45
|
+
/**
|
|
46
|
+
* Overrides the base server URL that will be used by an operation.
|
|
47
|
+
*/
|
|
48
|
+
serverURL?: string | URL;
|
|
49
|
+
/**
|
|
50
|
+
* @deprecated `fetchOptions` has been flattened into `RequestOptions`.
|
|
51
|
+
*
|
|
52
|
+
* Sets various request options on the `fetch` call made by an SDK method.
|
|
53
|
+
*
|
|
54
|
+
* @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options|Request}
|
|
55
|
+
*/
|
|
56
|
+
fetchOptions?: Omit<RequestInit, "method" | "body">;
|
|
57
|
+
} & Omit<RequestInit, "method" | "body">;
|
|
58
|
+
|
|
59
|
+
type RequestConfig = {
|
|
60
|
+
method: string;
|
|
61
|
+
path: string;
|
|
62
|
+
baseURL?: string | URL | undefined;
|
|
63
|
+
query?: string;
|
|
64
|
+
body?: RequestInit["body"];
|
|
65
|
+
headers?: HeadersInit;
|
|
66
|
+
security?: SecurityState | null;
|
|
67
|
+
uaHeader?: string;
|
|
68
|
+
userAgent?: string | undefined;
|
|
69
|
+
timeoutMs?: number;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const gt: unknown = typeof globalThis === "undefined" ? null : globalThis;
|
|
73
|
+
const webWorkerLike = typeof gt === "object"
|
|
74
|
+
&& gt != null
|
|
75
|
+
&& "importScripts" in gt
|
|
76
|
+
&& typeof gt["importScripts"] === "function";
|
|
77
|
+
const isBrowserLike = webWorkerLike
|
|
78
|
+
|| (typeof navigator !== "undefined" && "serviceWorker" in navigator)
|
|
79
|
+
|| (typeof window === "object" && typeof window.document !== "undefined");
|
|
80
|
+
|
|
81
|
+
export class ClientSDK {
|
|
82
|
+
readonly #httpClient: HTTPClient;
|
|
83
|
+
readonly #hooks: SDKHooks;
|
|
84
|
+
readonly #logger?: Logger | undefined;
|
|
85
|
+
public readonly _baseURL: URL | null;
|
|
86
|
+
public readonly _options: SDKOptions & { hooks?: SDKHooks };
|
|
87
|
+
|
|
88
|
+
constructor(options: SDKOptions = {}) {
|
|
89
|
+
const opt = options as unknown;
|
|
90
|
+
if (
|
|
91
|
+
typeof opt === "object"
|
|
92
|
+
&& opt != null
|
|
93
|
+
&& "hooks" in opt
|
|
94
|
+
&& opt.hooks instanceof SDKHooks
|
|
95
|
+
) {
|
|
96
|
+
this.#hooks = opt.hooks;
|
|
97
|
+
} else {
|
|
98
|
+
this.#hooks = new SDKHooks();
|
|
99
|
+
}
|
|
100
|
+
const defaultHttpClient = new HTTPClient();
|
|
101
|
+
options.httpClient = options.httpClient || defaultHttpClient;
|
|
102
|
+
options = this.#hooks.sdkInit(options);
|
|
103
|
+
|
|
104
|
+
const url = serverURLFromOptions(options);
|
|
105
|
+
if (url) {
|
|
106
|
+
url.pathname = url.pathname.replace(/\/+$/, "") + "/";
|
|
107
|
+
}
|
|
108
|
+
this._baseURL = url;
|
|
109
|
+
this.#httpClient = options.httpClient || defaultHttpClient;
|
|
110
|
+
|
|
111
|
+
this._options = { ...options, hooks: this.#hooks };
|
|
112
|
+
|
|
113
|
+
this.#logger = this._options.debugLogger;
|
|
114
|
+
if (!this.#logger && env().PETSTORE_DEBUG) {
|
|
115
|
+
this.#logger = console;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
public _createRequest(
|
|
120
|
+
context: HookContext,
|
|
121
|
+
conf: RequestConfig,
|
|
122
|
+
options?: RequestOptions,
|
|
123
|
+
): Result<Request, InvalidRequestError | UnexpectedClientError> {
|
|
124
|
+
const { method, path, query, headers: opHeaders, security } = conf;
|
|
125
|
+
|
|
126
|
+
const base = conf.baseURL ?? this._baseURL;
|
|
127
|
+
if (!base) {
|
|
128
|
+
return ERR(new InvalidRequestError("No base URL provided for operation"));
|
|
129
|
+
}
|
|
130
|
+
const reqURL = new URL(base);
|
|
131
|
+
const inputURL = new URL(path, reqURL);
|
|
132
|
+
|
|
133
|
+
if (path) {
|
|
134
|
+
reqURL.pathname += reqURL.pathname.endsWith("/") ? "" : "/";
|
|
135
|
+
reqURL.pathname += inputURL.pathname.replace(/^\/+/, "");
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
let finalQuery = query || "";
|
|
139
|
+
|
|
140
|
+
const secQuery: string[] = [];
|
|
141
|
+
for (const [k, v] of Object.entries(security?.queryParams || {})) {
|
|
142
|
+
const q = encodeForm(k, v, { charEncoding: "percent" });
|
|
143
|
+
if (typeof q !== "undefined") {
|
|
144
|
+
secQuery.push(q);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if (secQuery.length) {
|
|
148
|
+
finalQuery += `&${secQuery.join("&")}`;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (finalQuery) {
|
|
152
|
+
const q = finalQuery.startsWith("&") ? finalQuery.slice(1) : finalQuery;
|
|
153
|
+
reqURL.search = `?${q}`;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const headers = new Headers(opHeaders);
|
|
157
|
+
|
|
158
|
+
const username = security?.basic.username;
|
|
159
|
+
const password = security?.basic.password;
|
|
160
|
+
if (username != null || password != null) {
|
|
161
|
+
const encoded = stringToBase64(
|
|
162
|
+
[username || "", password || ""].join(":"),
|
|
163
|
+
);
|
|
164
|
+
headers.set("Authorization", `Basic ${encoded}`);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
const securityHeaders = new Headers(security?.headers || {});
|
|
168
|
+
for (const [k, v] of securityHeaders) {
|
|
169
|
+
headers.set(k, v);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
let cookie = headers.get("cookie") || "";
|
|
173
|
+
for (const [k, v] of Object.entries(security?.cookies || {})) {
|
|
174
|
+
cookie += `; ${k}=${v}`;
|
|
175
|
+
}
|
|
176
|
+
cookie = cookie.startsWith("; ") ? cookie.slice(2) : cookie;
|
|
177
|
+
headers.set("cookie", cookie);
|
|
178
|
+
|
|
179
|
+
const userHeaders = new Headers(
|
|
180
|
+
options?.headers ?? options?.fetchOptions?.headers,
|
|
181
|
+
);
|
|
182
|
+
for (const [k, v] of userHeaders) {
|
|
183
|
+
headers.set(k, v);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Only set user agent header in non-browser-like environments since CORS
|
|
187
|
+
// policy disallows setting it in browsers e.g. Chrome throws an error.
|
|
188
|
+
if (!isBrowserLike) {
|
|
189
|
+
headers.set(
|
|
190
|
+
conf.uaHeader ?? "user-agent",
|
|
191
|
+
conf.userAgent ?? SDK_METADATA.userAgent,
|
|
192
|
+
);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
const fetchOptions: Omit<RequestInit, "method" | "body"> = {
|
|
196
|
+
...options?.fetchOptions,
|
|
197
|
+
...options,
|
|
198
|
+
};
|
|
199
|
+
if (!fetchOptions?.signal && conf.timeoutMs && conf.timeoutMs > 0) {
|
|
200
|
+
const timeoutSignal = AbortSignal.timeout(conf.timeoutMs);
|
|
201
|
+
fetchOptions.signal = timeoutSignal;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
if (conf.body instanceof ReadableStream) {
|
|
205
|
+
Object.assign(fetchOptions, { duplex: "half" });
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
let input;
|
|
209
|
+
try {
|
|
210
|
+
input = this.#hooks.beforeCreateRequest(context, {
|
|
211
|
+
url: reqURL,
|
|
212
|
+
options: {
|
|
213
|
+
...fetchOptions,
|
|
214
|
+
body: conf.body ?? null,
|
|
215
|
+
headers,
|
|
216
|
+
method,
|
|
217
|
+
},
|
|
218
|
+
});
|
|
219
|
+
} catch (err: unknown) {
|
|
220
|
+
return ERR(
|
|
221
|
+
new UnexpectedClientError("Create request hook failed to execute", {
|
|
222
|
+
cause: err,
|
|
223
|
+
}),
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
return OK(new Request(input.url, input.options));
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
public async _do(
|
|
231
|
+
request: Request,
|
|
232
|
+
options: {
|
|
233
|
+
context: HookContext;
|
|
234
|
+
errorCodes: number | string | (number | string)[];
|
|
235
|
+
retryConfig: RetryConfig;
|
|
236
|
+
retryCodes: string[];
|
|
237
|
+
},
|
|
238
|
+
): Promise<
|
|
239
|
+
Result<
|
|
240
|
+
Response,
|
|
241
|
+
| RequestAbortedError
|
|
242
|
+
| RequestTimeoutError
|
|
243
|
+
| ConnectionError
|
|
244
|
+
| UnexpectedClientError
|
|
245
|
+
>
|
|
246
|
+
> {
|
|
247
|
+
const { context, errorCodes } = options;
|
|
248
|
+
|
|
249
|
+
return retry(
|
|
250
|
+
async () => {
|
|
251
|
+
const req = await this.#hooks.beforeRequest(
|
|
252
|
+
context,
|
|
253
|
+
request.clone() as Request,
|
|
254
|
+
);
|
|
255
|
+
await logRequest(this.#logger, req).catch((e) =>
|
|
256
|
+
this.#logger?.log("Failed to log request:", e)
|
|
257
|
+
);
|
|
258
|
+
|
|
259
|
+
let response = await this.#httpClient.request(req);
|
|
260
|
+
|
|
261
|
+
try {
|
|
262
|
+
if (matchStatusCode(response, errorCodes)) {
|
|
263
|
+
const result = await this.#hooks.afterError(
|
|
264
|
+
context,
|
|
265
|
+
response,
|
|
266
|
+
null,
|
|
267
|
+
);
|
|
268
|
+
if (result.error) {
|
|
269
|
+
throw result.error;
|
|
270
|
+
}
|
|
271
|
+
response = result.response || response;
|
|
272
|
+
} else {
|
|
273
|
+
response = await this.#hooks.afterSuccess(context, response);
|
|
274
|
+
}
|
|
275
|
+
} finally {
|
|
276
|
+
await logResponse(this.#logger, response, req)
|
|
277
|
+
.catch(e => this.#logger?.log("Failed to log response:", e));
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
return response;
|
|
281
|
+
},
|
|
282
|
+
{ config: options.retryConfig, statusCodes: options.retryCodes },
|
|
283
|
+
).then(
|
|
284
|
+
(r) => OK(r),
|
|
285
|
+
(err) => {
|
|
286
|
+
switch (true) {
|
|
287
|
+
case isAbortError(err):
|
|
288
|
+
return ERR(
|
|
289
|
+
new RequestAbortedError("Request aborted by client", {
|
|
290
|
+
cause: err,
|
|
291
|
+
}),
|
|
292
|
+
);
|
|
293
|
+
case isTimeoutError(err):
|
|
294
|
+
return ERR(
|
|
295
|
+
new RequestTimeoutError("Request timed out", { cause: err }),
|
|
296
|
+
);
|
|
297
|
+
case isConnectionError(err):
|
|
298
|
+
return ERR(
|
|
299
|
+
new ConnectionError("Unable to make request", { cause: err }),
|
|
300
|
+
);
|
|
301
|
+
default:
|
|
302
|
+
return ERR(
|
|
303
|
+
new UnexpectedClientError("Unexpected HTTP client error", {
|
|
304
|
+
cause: err,
|
|
305
|
+
}),
|
|
306
|
+
);
|
|
307
|
+
}
|
|
308
|
+
},
|
|
309
|
+
);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
const jsonLikeContentTypeRE = /^(application|text)\/([^+]+\+)*json.*/;
|
|
314
|
+
const jsonlLikeContentTypeRE =
|
|
315
|
+
/^(application|text)\/([^+]+\+)*(jsonl|x-ndjson)\b.*/;
|
|
316
|
+
async function logRequest(logger: Logger | undefined, req: Request) {
|
|
317
|
+
if (!logger) {
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
const contentType = req.headers.get("content-type");
|
|
322
|
+
const ct = contentType?.split(";")[0] || "";
|
|
323
|
+
|
|
324
|
+
logger.group(`> Request: ${req.method} ${req.url}`);
|
|
325
|
+
|
|
326
|
+
logger.group("Headers:");
|
|
327
|
+
for (const [k, v] of req.headers.entries()) {
|
|
328
|
+
logger.log(`${k}: ${v}`);
|
|
329
|
+
}
|
|
330
|
+
logger.groupEnd();
|
|
331
|
+
|
|
332
|
+
logger.group("Body:");
|
|
333
|
+
switch (true) {
|
|
334
|
+
case jsonLikeContentTypeRE.test(ct):
|
|
335
|
+
logger.log(await req.clone().json());
|
|
336
|
+
break;
|
|
337
|
+
case ct.startsWith("text/"):
|
|
338
|
+
logger.log(await req.clone().text());
|
|
339
|
+
break;
|
|
340
|
+
case ct === "multipart/form-data": {
|
|
341
|
+
const body = await req.clone().formData();
|
|
342
|
+
for (const [k, v] of body) {
|
|
343
|
+
const vlabel = v instanceof Blob ? "<Blob>" : v;
|
|
344
|
+
logger.log(`${k}: ${vlabel}`);
|
|
345
|
+
}
|
|
346
|
+
break;
|
|
347
|
+
}
|
|
348
|
+
default:
|
|
349
|
+
logger.log(`<${contentType}>`);
|
|
350
|
+
break;
|
|
351
|
+
}
|
|
352
|
+
logger.groupEnd();
|
|
353
|
+
|
|
354
|
+
logger.groupEnd();
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
async function logResponse(
|
|
358
|
+
logger: Logger | undefined,
|
|
359
|
+
res: Response,
|
|
360
|
+
req: Request,
|
|
361
|
+
) {
|
|
362
|
+
if (!logger) {
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
const contentType = res.headers.get("content-type");
|
|
367
|
+
const ct = contentType?.split(";")[0] || "";
|
|
368
|
+
|
|
369
|
+
logger.group(`< Response: ${req.method} ${req.url}`);
|
|
370
|
+
logger.log("Status Code:", res.status, res.statusText);
|
|
371
|
+
|
|
372
|
+
logger.group("Headers:");
|
|
373
|
+
for (const [k, v] of res.headers.entries()) {
|
|
374
|
+
logger.log(`${k}: ${v}`);
|
|
375
|
+
}
|
|
376
|
+
logger.groupEnd();
|
|
377
|
+
|
|
378
|
+
logger.group("Body:");
|
|
379
|
+
switch (true) {
|
|
380
|
+
case matchContentType(res, "application/json")
|
|
381
|
+
|| jsonLikeContentTypeRE.test(ct) && !jsonlLikeContentTypeRE.test(ct):
|
|
382
|
+
logger.log(await res.clone().json());
|
|
383
|
+
break;
|
|
384
|
+
case matchContentType(res, "application/jsonl")
|
|
385
|
+
|| jsonlLikeContentTypeRE.test(ct):
|
|
386
|
+
logger.log(await res.clone().text());
|
|
387
|
+
break;
|
|
388
|
+
case matchContentType(res, "text/event-stream"):
|
|
389
|
+
logger.log(`<${contentType}>`);
|
|
390
|
+
break;
|
|
391
|
+
case matchContentType(res, "text/*"):
|
|
392
|
+
logger.log(await res.clone().text());
|
|
393
|
+
break;
|
|
394
|
+
case matchContentType(res, "multipart/form-data"): {
|
|
395
|
+
const body = await res.clone().formData();
|
|
396
|
+
for (const [k, v] of body) {
|
|
397
|
+
const vlabel = v instanceof Blob ? "<Blob>" : v;
|
|
398
|
+
logger.log(`${k}: ${vlabel}`);
|
|
399
|
+
}
|
|
400
|
+
break;
|
|
401
|
+
}
|
|
402
|
+
default:
|
|
403
|
+
logger.log(`<${contentType}>`);
|
|
404
|
+
break;
|
|
405
|
+
}
|
|
406
|
+
logger.groupEnd();
|
|
407
|
+
|
|
408
|
+
logger.groupEnd();
|
|
409
|
+
}
|